fix(collector): 기능 누락 3건 수정 — Discord 명령어/채팅/등록 중계
Gap 1: Discord→Extension 명령어 깨짐 - bot.py: _write_command() 래퍼 — gateway.push_command()도 호출 - main.py: bot.gateway 연결 - 슬래시 명령어 + on_message 모두 _write_command 사용 Gap 2: Chat snapshot 미전달 - collector.py: _forward_chat_snapshots_loop 추가 Gap 3: Session registration 미전달 - collector.py: _forward_registrations_loop 추가
This commit is contained in:
52
collector.py
52
collector.py
@@ -50,6 +50,8 @@ class CollectorBridge:
|
||||
self._forward_pending_loop(),
|
||||
self._poll_responses_loop(),
|
||||
self._poll_commands_loop(),
|
||||
self._forward_chat_snapshots_loop(),
|
||||
self._forward_registrations_loop(),
|
||||
]
|
||||
if self.event_queue:
|
||||
tasks.append(self._forward_events_loop())
|
||||
@@ -132,6 +134,56 @@ class CollectorBridge:
|
||||
|
||||
await asyncio.sleep(self._poll_interval)
|
||||
|
||||
# ─── Forward chat snapshots → Gateway ───
|
||||
|
||||
async def _forward_chat_snapshots_loop(self):
|
||||
"""Forward chat_snapshots/ from Extension to Gateway."""
|
||||
while self._running:
|
||||
try:
|
||||
snap_dir = self.local.bridge_dir / "chat_snapshots"
|
||||
if snap_dir.exists():
|
||||
for f in snap_dir.glob("*.json"):
|
||||
try:
|
||||
data = json.loads(f.read_text(encoding="utf-8-sig"))
|
||||
project = data.get("project_name", self.project_name)
|
||||
content = data.get("content", "")
|
||||
if content:
|
||||
self.remote.send_chat(project, content)
|
||||
logger.info(f"[COLLECTOR] → Gateway: chat snapshot len={len(content)}")
|
||||
f.unlink() # Cleanup after forwarding
|
||||
except (json.JSONDecodeError, OSError) as e:
|
||||
logger.warning(f"[COLLECTOR] bad chat snapshot {f.name}: {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"[COLLECTOR] forward_chat_snapshots error: {e}")
|
||||
|
||||
await asyncio.sleep(self._poll_interval)
|
||||
|
||||
# ─── Forward session registrations → Gateway ───
|
||||
|
||||
async def _forward_registrations_loop(self):
|
||||
"""Forward register/ files from Extension to Gateway."""
|
||||
forwarded_regs: set[str] = set()
|
||||
while self._running:
|
||||
try:
|
||||
register_dir = self.local.bridge_dir / "register"
|
||||
if register_dir.exists():
|
||||
for f in register_dir.glob("*.json"):
|
||||
if f.name in forwarded_regs:
|
||||
continue
|
||||
try:
|
||||
data = json.loads(f.read_text(encoding="utf-8-sig"))
|
||||
conv_id = data.get("conversation_id", "")
|
||||
project = data.get("project_name", "")
|
||||
if conv_id and project:
|
||||
self.remote.register_session(conv_id, project)
|
||||
forwarded_regs.add(f.name)
|
||||
logger.info(f"[COLLECTOR] → Gateway: register {conv_id[:8]} → {project}")
|
||||
except (json.JSONDecodeError, OSError) as e:
|
||||
logger.warning(f"[COLLECTOR] bad register {f.name}: {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"[COLLECTOR] forward_registrations error: {e}")
|
||||
|
||||
await asyncio.sleep(self._poll_interval * 3) # Less frequent
|
||||
# ─── Forward brain events → Gateway ───
|
||||
|
||||
async def _forward_events_loop(self):
|
||||
|
||||
Reference in New Issue
Block a user