From 549af6dae250ee95bf4c70154139d1bdd15a9818 Mon Sep 17 00:00:00 2001 From: Variet Worker Date: Fri, 20 Mar 2026 18:12:07 +0900 Subject: [PATCH] =?UTF-8?q?fix(ext):=20browser=5Fsubagent=20Allow=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20RPC=20=EB=A7=A4=ED=95=91=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=E2=80=94=20runExtensionCode=20payload=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(v0.5.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/references/known-issues.md | 6 ++++++ .env.example | 4 +--- docs/devlog/2026-03-19.md | 5 +++++ extension/package.json | 2 +- extension/src/approval-handler.ts | 2 +- extension/src/step-probe.ts | 6 ++++-- 6 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 docs/devlog/2026-03-19.md diff --git a/.agents/references/known-issues.md b/.agents/references/known-issues.md index 2aa491a..3be3f86 100644 --- a/.agents/references/known-issues.md +++ b/.agents/references/known-issues.md @@ -47,6 +47,12 @@ - **주의**: JS에서 **string/number는 프리미티브라 참조 전달 불가** — 객체 속성을 공유하려면 getter 함수나 객체 래퍼 사용 필수 - **Vikunja**: #411, #410 +### [2026-03-19] browser_subagent RPC 매핑 — 잘못된 interactionPayload +- **증상**: 서브 에이전트의 "Allow" (execute JavaScript on localhost) 버튼이 자동 승인되지 않음 +- **원인**: `step-probe.ts`에서 `browser_subagent` toolName이 분류 없이 raw toolName으로 전달 → `approval-handler.ts`의 RPC 매핑에서 `runExtensionCode`가 아닌 default `runCommand` payload로 전송됨 +- **해결** (v0.5.1): `step-probe.ts`에 `browser_subagent`/`open_browser_url` 분류 추가 + `approval-handler.ts` L384에 `browser_subagent` 조건 추가 +- **주의**: 새 tool type 추가 시 반드시 step-probe 분류 + approval-handler RPC 매핑 + observer-script PATS 3곳 모두 확인 + --- > [!NOTE] diff --git a/.env.example b/.env.example index da6bd3d..aa2d42e 100644 --- a/.env.example +++ b/.env.example @@ -17,10 +17,8 @@ ACTIVE_TIMEOUT_SECONDS=300 # Watcher Settings DEBOUNCE_SECONDS=2 -# Bot mode: 'local' (default, file-based) or 'gateway' (서버 Docker) +# Bot mode: 'local' (default, file-based) or 'gateway' (서버 Docker + WS Hub) BOT_MODE=local -# Remote bridge URL (only used when BOT_MODE=remote) -REMOTE_BRIDGE_URL= # Gateway API Key (보안) # 서버와 Collector에 동일한 키를 설정하세요 diff --git a/docs/devlog/2026-03-19.md b/docs/devlog/2026-03-19.md new file mode 100644 index 0000000..24937a3 --- /dev/null +++ b/docs/devlog/2026-03-19.md @@ -0,0 +1,5 @@ +# 2026-03-19 Devlog + +| # | 시간 | 작업 | 커밋 | 상태 | +|---|------|------|------|------| +| 1 | 07:30 | v0.5.0 이후 이슈 조사 — 외부 네트워크(서버 정상 확인) + Allow 버튼 RPC 수정 | `277df7f` | ✅ | diff --git a/extension/package.json b/extension/package.json index 458c3b1..a351f44 100644 --- a/extension/package.json +++ b/extension/package.json @@ -2,7 +2,7 @@ "name": "gravity-bridge", "displayName": "Gravity Bridge", "description": "Antigravity ↔ Discord 브리지 연동 확장", - "version": "0.5.0", + "version": "0.5.1", "publisher": "variet", "engines": { "vscode": "^1.100.0" diff --git a/extension/src/approval-handler.ts b/extension/src/approval-handler.ts index 03112f1..0efcb9d 100644 --- a/extension/src/approval-handler.ts +++ b/extension/src/approval-handler.ts @@ -381,7 +381,7 @@ export async function tryApprovalStrategies(approved: boolean, sessionId: string interactionPayload = { readUrlContent: { confirm: true } }; } else if (typeLower.includes('mcp')) { interactionPayload = { mcpTool: { confirm: true } }; - } else if (typeLower.includes('invoke_subagent') || typeLower.includes('extension_code')) { + } else if (typeLower.includes('invoke_subagent') || typeLower.includes('extension_code') || typeLower.includes('browser_subagent')) { interactionPayload = { runExtensionCode: { confirm: true } }; } else if (typeLower.includes('file_permission')) { const scope = typeLower.includes('conversation') ? 2 : 1; diff --git a/extension/src/step-probe.ts b/extension/src/step-probe.ts index 8108af0..be4a43b 100644 --- a/extension/src/step-probe.ts +++ b/extension/src/step-probe.ts @@ -480,7 +480,8 @@ function setupMonitor() { description: `Step #${actualIndex} (${(oStep.type || '').replace('CORTEX_STEP_TYPE_', '')})`, step_type: ['view_file', 'list_dir', 'find_by_name', 'read_file', 'grep_search'].includes(toolName) ? 'file_permission' : ['write_to_file', 'replace_file_content', 'multi_replace_file_content'].includes(toolName) ? 'code_edit' - : toolName, + : ['browser_subagent', 'open_browser_url'].includes(toolName) ? 'browser_subagent' + : toolName, step_index: actualIndex, source: 'step_probe_offset', }); @@ -546,7 +547,8 @@ function setupMonitor() { description, step_type: ['view_file', 'list_dir', 'find_by_name', 'read_file', 'grep_search'].includes(toolName) ? 'file_permission' : ['write_to_file', 'replace_file_content', 'multi_replace_file_content'].includes(toolName) ? 'code_edit' - : toolName, + : ['browser_subagent', 'open_browser_url'].includes(toolName) ? 'browser_subagent' + : toolName, step_index: si, source: 'step_probe', });