ForcePilot/backend/package/yuxi/channels/adapters/matrix/subagent_hooks.py
Kris 2063145ce1 feat(matrix): 新增完整的Matrix适配器工具集
新增了20+个Matrix相关工具模块,包含线程处理、自动加入、消息去重、配置管理、安全策略、媒体处理、命令解析等功能,完善Matrix适配器基础能力
2026-05-12 00:45:54 +08:00

66 lines
1.9 KiB
Python

from __future__ import annotations
from typing import Any
def build_subagent_event(
phase: str,
room_id: str,
thread_root: str,
subagent_id: str = "",
metadata: dict[str, Any] | None = None,
) -> dict[str, Any]:
return {
"phase": phase,
"room_id": room_id,
"thread_root": thread_root,
"subagent_id": subagent_id,
"metadata": metadata or {},
}
class SubagentLifecycle:
PHASE_SPAWNING = "spawning"
PHASE_ENDED = "ended"
PHASE_DELIVERY_TARGET = "delivery_target"
def __init__(self):
self._hooks: dict[str, list] = {
self.PHASE_SPAWNING: [],
self.PHASE_ENDED: [],
self.PHASE_DELIVERY_TARGET: [],
}
def on(self, phase: str, callback) -> None:
if phase in self._hooks:
self._hooks[phase].append(callback)
async def trigger(
self, phase: str, room_id: str, thread_root: str, subagent_id: str = "", metadata: dict[str, Any] | None = None
) -> list[Any]:
event = build_subagent_event(phase, room_id, thread_root, subagent_id, metadata)
results = []
for cb in self._hooks.get(phase, []):
try:
result = await cb(event)
results.append(result)
except Exception:
pass
return results
def _create_session(self, room_id: str, thread_root: str) -> dict[str, Any]:
return {
"session_id": f"subagent_{room_id}_{thread_root}",
"room_id": room_id,
"thread_root": thread_root,
"status": "spawning",
}
def resolve_delivery_target(self, event: dict[str, Any]) -> dict[str, str]:
metadata = event.get("metadata", {})
return {
"room_id": event.get("room_id", ""),
"thread_root": event.get("thread_root", ""),
"delivery_type": metadata.get("delivery_type", "thread"),
}