@yjjeong/omg 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/cli/args.d.ts +39 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +129 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/autoCommit.d.ts +20 -0
- package/dist/cli/autoCommit.d.ts.map +1 -0
- package/dist/cli/autoCommit.js +121 -0
- package/dist/cli/autoCommit.js.map +1 -0
- package/dist/cli/bgTasks.d.ts +57 -0
- package/dist/cli/bgTasks.d.ts.map +1 -0
- package/dist/cli/bgTasks.js +193 -0
- package/dist/cli/bgTasks.js.map +1 -0
- package/dist/cli/compactor.d.ts +48 -0
- package/dist/cli/compactor.d.ts.map +1 -0
- package/dist/cli/compactor.js +73 -0
- package/dist/cli/compactor.js.map +1 -0
- package/dist/cli/doctor.d.ts +77 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +279 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/gitStatus.d.ts +7 -0
- package/dist/cli/gitStatus.d.ts.map +1 -0
- package/dist/cli/gitStatus.js +70 -0
- package/dist/cli/gitStatus.js.map +1 -0
- package/dist/cli/handoff.d.ts +36 -0
- package/dist/cli/handoff.d.ts.map +1 -0
- package/dist/cli/handoff.js +60 -0
- package/dist/cli/handoff.js.map +1 -0
- package/dist/cli/interactive/brokers.d.ts +31 -0
- package/dist/cli/interactive/brokers.d.ts.map +1 -0
- package/dist/cli/interactive/brokers.js +259 -0
- package/dist/cli/interactive/brokers.js.map +1 -0
- package/dist/cli/interactive/index.d.ts +8 -0
- package/dist/cli/interactive/index.d.ts.map +1 -0
- package/dist/cli/interactive/index.js +731 -0
- package/dist/cli/interactive/index.js.map +1 -0
- package/dist/cli/interactive/proxyQuestions.d.ts +15 -0
- package/dist/cli/interactive/proxyQuestions.d.ts.map +1 -0
- package/dist/cli/interactive/proxyQuestions.js +48 -0
- package/dist/cli/interactive/proxyQuestions.js.map +1 -0
- package/dist/cli/interactive/tabManager.d.ts +32 -0
- package/dist/cli/interactive/tabManager.d.ts.map +1 -0
- package/dist/cli/interactive/tabManager.js +244 -0
- package/dist/cli/interactive/tabManager.js.map +1 -0
- package/dist/cli/interactive/teamHint.d.ts +2 -0
- package/dist/cli/interactive/teamHint.d.ts.map +1 -0
- package/dist/cli/interactive/teamHint.js +14 -0
- package/dist/cli/interactive/teamHint.js.map +1 -0
- package/dist/cli/login.d.ts +13 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +53 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/modes/demo.d.ts +12 -0
- package/dist/cli/modes/demo.d.ts.map +1 -0
- package/dist/cli/modes/demo.js +48 -0
- package/dist/cli/modes/demo.js.map +1 -0
- package/dist/cli/modes/doctor.d.ts +28 -0
- package/dist/cli/modes/doctor.d.ts.map +1 -0
- package/dist/cli/modes/doctor.js +79 -0
- package/dist/cli/modes/doctor.js.map +1 -0
- package/dist/cli/modes/login.d.ts +5 -0
- package/dist/cli/modes/login.d.ts.map +1 -0
- package/dist/cli/modes/login.js +40 -0
- package/dist/cli/modes/login.js.map +1 -0
- package/dist/cli/modes/mcpServe.d.ts +9 -0
- package/dist/cli/modes/mcpServe.d.ts.map +1 -0
- package/dist/cli/modes/mcpServe.js +112 -0
- package/dist/cli/modes/mcpServe.js.map +1 -0
- package/dist/cli/modes/orchestrator.d.ts +14 -0
- package/dist/cli/modes/orchestrator.d.ts.map +1 -0
- package/dist/cli/modes/orchestrator.js +64 -0
- package/dist/cli/modes/orchestrator.js.map +1 -0
- package/dist/cli/modes/team.d.ts +14 -0
- package/dist/cli/modes/team.d.ts.map +1 -0
- package/dist/cli/modes/team.js +87 -0
- package/dist/cli/modes/team.js.map +1 -0
- package/dist/cli/registry.d.ts +3 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +15 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/slash/core.d.ts +3 -0
- package/dist/cli/slash/core.d.ts.map +1 -0
- package/dist/cli/slash/core.js +509 -0
- package/dist/cli/slash/core.js.map +1 -0
- package/dist/cli/slash/index.d.ts +3 -0
- package/dist/cli/slash/index.d.ts.map +1 -0
- package/dist/cli/slash/index.js +28 -0
- package/dist/cli/slash/index.js.map +1 -0
- package/dist/cli/slash/modes.d.ts +3 -0
- package/dist/cli/slash/modes.d.ts.map +1 -0
- package/dist/cli/slash/modes.js +530 -0
- package/dist/cli/slash/modes.js.map +1 -0
- package/dist/cli/slash/session.d.ts +3 -0
- package/dist/cli/slash/session.d.ts.map +1 -0
- package/dist/cli/slash/session.js +376 -0
- package/dist/cli/slash/session.js.map +1 -0
- package/dist/cli/slash/shared.d.ts +43 -0
- package/dist/cli/slash/shared.d.ts.map +1 -0
- package/dist/cli/slash/shared.js +6 -0
- package/dist/cli/slash/shared.js.map +1 -0
- package/dist/cli/slash/tabs.d.ts +3 -0
- package/dist/cli/slash/tabs.d.ts.map +1 -0
- package/dist/cli/slash/tabs.js +497 -0
- package/dist/cli/slash/tabs.js.map +1 -0
- package/dist/cli/slash/team.d.ts +3 -0
- package/dist/cli/slash/team.d.ts.map +1 -0
- package/dist/cli/slash/team.js +85 -0
- package/dist/cli/slash/team.js.map +1 -0
- package/dist/cli/slash.d.ts +3 -0
- package/dist/cli/slash.d.ts.map +1 -0
- package/dist/cli/slash.js +8 -0
- package/dist/cli/slash.js.map +1 -0
- package/dist/cli/teamPipeline.d.ts +42 -0
- package/dist/cli/teamPipeline.d.ts.map +1 -0
- package/dist/cli/teamPipeline.js +406 -0
- package/dist/cli/teamPipeline.js.map +1 -0
- package/dist/cli/touchedFiles.d.ts +14 -0
- package/dist/cli/touchedFiles.d.ts.map +1 -0
- package/dist/cli/touchedFiles.js +66 -0
- package/dist/cli/touchedFiles.js.map +1 -0
- package/dist/cli/turn.d.ts +47 -0
- package/dist/cli/turn.d.ts.map +1 -0
- package/dist/cli/turn.js +626 -0
- package/dist/cli/turn.js.map +1 -0
- package/dist/cli/types.d.ts +47 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/uiSession.d.ts +10 -0
- package/dist/cli/uiSession.d.ts.map +1 -0
- package/dist/cli/uiSession.js +66 -0
- package/dist/cli/uiSession.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +128 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/adapter.d.ts +47 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +48 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/adapters/anthropic.d.ts +35 -0
- package/dist/core/adapters/anthropic.d.ts.map +1 -0
- package/dist/core/adapters/anthropic.js +203 -0
- package/dist/core/adapters/anthropic.js.map +1 -0
- package/dist/core/adapters/claudeCli.d.ts +126 -0
- package/dist/core/adapters/claudeCli.d.ts.map +1 -0
- package/dist/core/adapters/claudeCli.js +584 -0
- package/dist/core/adapters/claudeCli.js.map +1 -0
- package/dist/core/adapters/cliAdapterBase.d.ts +48 -0
- package/dist/core/adapters/cliAdapterBase.d.ts.map +1 -0
- package/dist/core/adapters/cliAdapterBase.js +105 -0
- package/dist/core/adapters/cliAdapterBase.js.map +1 -0
- package/dist/core/adapters/cliStderr.d.ts +35 -0
- package/dist/core/adapters/cliStderr.d.ts.map +1 -0
- package/dist/core/adapters/cliStderr.js +87 -0
- package/dist/core/adapters/cliStderr.js.map +1 -0
- package/dist/core/adapters/codexCli.d.ts +113 -0
- package/dist/core/adapters/codexCli.d.ts.map +1 -0
- package/dist/core/adapters/codexCli.js +424 -0
- package/dist/core/adapters/codexCli.js.map +1 -0
- package/dist/core/adapters/gemini.d.ts +17 -0
- package/dist/core/adapters/gemini.d.ts.map +1 -0
- package/dist/core/adapters/gemini.js +133 -0
- package/dist/core/adapters/gemini.js.map +1 -0
- package/dist/core/adapters/geminiCli.d.ts +91 -0
- package/dist/core/adapters/geminiCli.d.ts.map +1 -0
- package/dist/core/adapters/geminiCli.js +276 -0
- package/dist/core/adapters/geminiCli.js.map +1 -0
- package/dist/core/adapters/nudges.d.ts +21 -0
- package/dist/core/adapters/nudges.d.ts.map +1 -0
- package/dist/core/adapters/nudges.js +75 -0
- package/dist/core/adapters/nudges.js.map +1 -0
- package/dist/core/adapters/openai.d.ts +17 -0
- package/dist/core/adapters/openai.d.ts.map +1 -0
- package/dist/core/adapters/openai.js +138 -0
- package/dist/core/adapters/openai.js.map +1 -0
- package/dist/core/adapters/parseFailures.d.ts +10 -0
- package/dist/core/adapters/parseFailures.d.ts.map +1 -0
- package/dist/core/adapters/parseFailures.js +35 -0
- package/dist/core/adapters/parseFailures.js.map +1 -0
- package/dist/core/adapters/utils.d.ts +11 -0
- package/dist/core/adapters/utils.d.ts.map +1 -0
- package/dist/core/adapters/utils.js +33 -0
- package/dist/core/adapters/utils.js.map +1 -0
- package/dist/core/askBroker.d.ts +11 -0
- package/dist/core/askBroker.d.ts.map +1 -0
- package/dist/core/askBroker.js +78 -0
- package/dist/core/askBroker.js.map +1 -0
- package/dist/core/atomicWrite.d.ts +5 -0
- package/dist/core/atomicWrite.d.ts.map +1 -0
- package/dist/core/atomicWrite.js +18 -0
- package/dist/core/atomicWrite.js.map +1 -0
- package/dist/core/brokers/askBroker.d.ts +11 -0
- package/dist/core/brokers/askBroker.d.ts.map +1 -0
- package/dist/core/brokers/askBroker.js +78 -0
- package/dist/core/brokers/askBroker.js.map +1 -0
- package/dist/core/brokers/permissionBroker.d.ts +7 -0
- package/dist/core/brokers/permissionBroker.d.ts.map +1 -0
- package/dist/core/brokers/permissionBroker.js +63 -0
- package/dist/core/brokers/permissionBroker.js.map +1 -0
- package/dist/core/brokers/socketBroker.d.ts +35 -0
- package/dist/core/brokers/socketBroker.d.ts.map +1 -0
- package/dist/core/brokers/socketBroker.js +74 -0
- package/dist/core/brokers/socketBroker.js.map +1 -0
- package/dist/core/clipboard.d.ts +4 -0
- package/dist/core/clipboard.d.ts.map +1 -0
- package/dist/core/clipboard.js +46 -0
- package/dist/core/clipboard.js.map +1 -0
- package/dist/core/compactor.d.ts +32 -0
- package/dist/core/compactor.d.ts.map +1 -0
- package/dist/core/compactor.js +91 -0
- package/dist/core/compactor.js.map +1 -0
- package/dist/core/consensusEngine.d.ts +21 -0
- package/dist/core/consensusEngine.d.ts.map +1 -0
- package/dist/core/consensusEngine.js +116 -0
- package/dist/core/consensusEngine.js.map +1 -0
- package/dist/core/context/contextCompressor.d.ts +10 -0
- package/dist/core/context/contextCompressor.d.ts.map +1 -0
- package/dist/core/context/contextCompressor.js +54 -0
- package/dist/core/context/contextCompressor.js.map +1 -0
- package/dist/core/context/contextWindows.d.ts +25 -0
- package/dist/core/context/contextWindows.d.ts.map +1 -0
- package/dist/core/context/contextWindows.js +101 -0
- package/dist/core/context/contextWindows.js.map +1 -0
- package/dist/core/context/summarizer.d.ts +65 -0
- package/dist/core/context/summarizer.d.ts.map +1 -0
- package/dist/core/context/summarizer.js +184 -0
- package/dist/core/context/summarizer.js.map +1 -0
- package/dist/core/context/usageCache.d.ts +19 -0
- package/dist/core/context/usageCache.d.ts.map +1 -0
- package/dist/core/context/usageCache.js +157 -0
- package/dist/core/context/usageCache.js.map +1 -0
- package/dist/core/context/usageWindow.d.ts +19 -0
- package/dist/core/context/usageWindow.d.ts.map +1 -0
- package/dist/core/context/usageWindow.js +73 -0
- package/dist/core/context/usageWindow.js.map +1 -0
- package/dist/core/contextCompressor.d.ts +10 -0
- package/dist/core/contextCompressor.d.ts.map +1 -0
- package/dist/core/contextCompressor.js +54 -0
- package/dist/core/contextCompressor.js.map +1 -0
- package/dist/core/contextWindows.d.ts +5 -0
- package/dist/core/contextWindows.d.ts.map +1 -0
- package/dist/core/contextWindows.js +60 -0
- package/dist/core/contextWindows.js.map +1 -0
- package/dist/core/continuum/digest.d.ts +35 -0
- package/dist/core/continuum/digest.d.ts.map +1 -0
- package/dist/core/continuum/digest.js +91 -0
- package/dist/core/continuum/digest.js.map +1 -0
- package/dist/core/continuum/index.d.ts +6 -0
- package/dist/core/continuum/index.d.ts.map +1 -0
- package/dist/core/continuum/index.js +7 -0
- package/dist/core/continuum/index.js.map +1 -0
- package/dist/core/continuum/inject.d.ts +9 -0
- package/dist/core/continuum/inject.d.ts.map +1 -0
- package/dist/core/continuum/inject.js +78 -0
- package/dist/core/continuum/inject.js.map +1 -0
- package/dist/core/continuum/projectId.d.ts +10 -0
- package/dist/core/continuum/projectId.d.ts.map +1 -0
- package/dist/core/continuum/projectId.js +60 -0
- package/dist/core/continuum/projectId.js.map +1 -0
- package/dist/core/continuum/store.d.ts +24 -0
- package/dist/core/continuum/store.d.ts.map +1 -0
- package/dist/core/continuum/store.js +144 -0
- package/dist/core/continuum/store.js.map +1 -0
- package/dist/core/continuum/types.d.ts +87 -0
- package/dist/core/continuum/types.d.ts.map +1 -0
- package/dist/core/continuum/types.js +9 -0
- package/dist/core/continuum/types.js.map +1 -0
- package/dist/core/dag.d.ts +21 -0
- package/dist/core/dag.d.ts.map +1 -0
- package/dist/core/dag.js +71 -0
- package/dist/core/dag.js.map +1 -0
- package/dist/core/director.d.ts +11 -0
- package/dist/core/director.d.ts.map +1 -0
- package/dist/core/director.js +37 -0
- package/dist/core/director.js.map +1 -0
- package/dist/core/hookedToolBroker.d.ts +25 -0
- package/dist/core/hookedToolBroker.d.ts.map +1 -0
- package/dist/core/hookedToolBroker.js +95 -0
- package/dist/core/hookedToolBroker.js.map +1 -0
- package/dist/core/langHint.d.ts +9 -0
- package/dist/core/langHint.d.ts.map +1 -0
- package/dist/core/langHint.js +33 -0
- package/dist/core/langHint.js.map +1 -0
- package/dist/core/mcp/mcpClient.d.ts +42 -0
- package/dist/core/mcp/mcpClient.d.ts.map +1 -0
- package/dist/core/mcp/mcpClient.js +134 -0
- package/dist/core/mcp/mcpClient.js.map +1 -0
- package/dist/core/mcp/mcpConfig.d.ts +58 -0
- package/dist/core/mcp/mcpConfig.d.ts.map +1 -0
- package/dist/core/mcp/mcpConfig.js +148 -0
- package/dist/core/mcp/mcpConfig.js.map +1 -0
- package/dist/core/mcp/mcpManager.d.ts +31 -0
- package/dist/core/mcp/mcpManager.d.ts.map +1 -0
- package/dist/core/mcp/mcpManager.js +83 -0
- package/dist/core/mcp/mcpManager.js.map +1 -0
- package/dist/core/mcpClient.d.ts +42 -0
- package/dist/core/mcpClient.d.ts.map +1 -0
- package/dist/core/mcpClient.js +134 -0
- package/dist/core/mcpClient.js.map +1 -0
- package/dist/core/mcpConfig.d.ts +24 -0
- package/dist/core/mcpConfig.d.ts.map +1 -0
- package/dist/core/mcpConfig.js +74 -0
- package/dist/core/mcpConfig.js.map +1 -0
- package/dist/core/mcpManager.d.ts +31 -0
- package/dist/core/mcpManager.d.ts.map +1 -0
- package/dist/core/mcpManager.js +83 -0
- package/dist/core/mcpManager.js.map +1 -0
- package/dist/core/memory.d.ts +22 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +102 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/omgToolManifest.d.ts +34 -0
- package/dist/core/omgToolManifest.d.ts.map +1 -0
- package/dist/core/omgToolManifest.js +59 -0
- package/dist/core/omgToolManifest.js.map +1 -0
- package/dist/core/orchestration/consensusEngine.d.ts +21 -0
- package/dist/core/orchestration/consensusEngine.d.ts.map +1 -0
- package/dist/core/orchestration/consensusEngine.js +116 -0
- package/dist/core/orchestration/consensusEngine.js.map +1 -0
- package/dist/core/orchestration/dag.d.ts +21 -0
- package/dist/core/orchestration/dag.d.ts.map +1 -0
- package/dist/core/orchestration/dag.js +71 -0
- package/dist/core/orchestration/dag.js.map +1 -0
- package/dist/core/orchestration/director.d.ts +11 -0
- package/dist/core/orchestration/director.d.ts.map +1 -0
- package/dist/core/orchestration/director.js +37 -0
- package/dist/core/orchestration/director.js.map +1 -0
- package/dist/core/orchestration/orchestrator.d.ts +32 -0
- package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/orchestrator.js +214 -0
- package/dist/core/orchestration/orchestrator.js.map +1 -0
- package/dist/core/orchestration/roleRouter.d.ts +28 -0
- package/dist/core/orchestration/roleRouter.d.ts.map +1 -0
- package/dist/core/orchestration/roleRouter.js +64 -0
- package/dist/core/orchestration/roleRouter.js.map +1 -0
- package/dist/core/orchestration/teamRunner.d.ts +69 -0
- package/dist/core/orchestration/teamRunner.d.ts.map +1 -0
- package/dist/core/orchestration/teamRunner.js +477 -0
- package/dist/core/orchestration/teamRunner.js.map +1 -0
- package/dist/core/orchestration/types.d.ts +115 -0
- package/dist/core/orchestration/types.d.ts.map +1 -0
- package/dist/core/orchestration/types.js +71 -0
- package/dist/core/orchestration/types.js.map +1 -0
- package/dist/core/orchestrator.d.ts +32 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +214 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/permissionBroker.d.ts +7 -0
- package/dist/core/permissionBroker.d.ts.map +1 -0
- package/dist/core/permissionBroker.js +63 -0
- package/dist/core/permissionBroker.js.map +1 -0
- package/dist/core/planConfig.d.ts +15 -0
- package/dist/core/planConfig.d.ts.map +1 -0
- package/dist/core/planConfig.js +98 -0
- package/dist/core/planConfig.js.map +1 -0
- package/dist/core/presetPersistence.d.ts +4 -0
- package/dist/core/presetPersistence.d.ts.map +1 -0
- package/dist/core/presetPersistence.js +64 -0
- package/dist/core/presetPersistence.js.map +1 -0
- package/dist/core/roleRouter.d.ts +26 -0
- package/dist/core/roleRouter.d.ts.map +1 -0
- package/dist/core/roleRouter.js +62 -0
- package/dist/core/roleRouter.js.map +1 -0
- package/dist/core/sessionList.d.ts +26 -0
- package/dist/core/sessionList.d.ts.map +1 -0
- package/dist/core/sessionList.js +278 -0
- package/dist/core/sessionList.js.map +1 -0
- package/dist/core/slugify.d.ts +2 -0
- package/dist/core/slugify.d.ts.map +1 -0
- package/dist/core/slugify.js +17 -0
- package/dist/core/slugify.js.map +1 -0
- package/dist/core/socketBroker.d.ts +19 -0
- package/dist/core/socketBroker.d.ts.map +1 -0
- package/dist/core/socketBroker.js +48 -0
- package/dist/core/socketBroker.js.map +1 -0
- package/dist/core/state/agentsMdScaffold.d.ts +15 -0
- package/dist/core/state/agentsMdScaffold.d.ts.map +1 -0
- package/dist/core/state/agentsMdScaffold.js +118 -0
- package/dist/core/state/agentsMdScaffold.js.map +1 -0
- package/dist/core/state/atomicWrite.d.ts +5 -0
- package/dist/core/state/atomicWrite.d.ts.map +1 -0
- package/dist/core/state/atomicWrite.js +18 -0
- package/dist/core/state/atomicWrite.js.map +1 -0
- package/dist/core/state/handoff.d.ts +20 -0
- package/dist/core/state/handoff.d.ts.map +1 -0
- package/dist/core/state/handoff.js +71 -0
- package/dist/core/state/handoff.js.map +1 -0
- package/dist/core/state/mcpCatalog.d.ts +11 -0
- package/dist/core/state/mcpCatalog.d.ts.map +1 -0
- package/dist/core/state/mcpCatalog.js +51 -0
- package/dist/core/state/mcpCatalog.js.map +1 -0
- package/dist/core/state/mcpRecommendations.d.ts +7 -0
- package/dist/core/state/mcpRecommendations.d.ts.map +1 -0
- package/dist/core/state/mcpRecommendations.js +57 -0
- package/dist/core/state/mcpRecommendations.js.map +1 -0
- package/dist/core/state/memory.d.ts +22 -0
- package/dist/core/state/memory.d.ts.map +1 -0
- package/dist/core/state/memory.js +102 -0
- package/dist/core/state/memory.js.map +1 -0
- package/dist/core/state/planConfig.d.ts +15 -0
- package/dist/core/state/planConfig.d.ts.map +1 -0
- package/dist/core/state/planConfig.js +98 -0
- package/dist/core/state/planConfig.js.map +1 -0
- package/dist/core/state/presetPersistence.d.ts +4 -0
- package/dist/core/state/presetPersistence.d.ts.map +1 -0
- package/dist/core/state/presetPersistence.js +67 -0
- package/dist/core/state/presetPersistence.js.map +1 -0
- package/dist/core/state/sessionList.d.ts +26 -0
- package/dist/core/state/sessionList.d.ts.map +1 -0
- package/dist/core/state/sessionList.js +278 -0
- package/dist/core/state/sessionList.js.map +1 -0
- package/dist/core/state/stackDetect.d.ts +8 -0
- package/dist/core/state/stackDetect.d.ts.map +1 -0
- package/dist/core/state/stackDetect.js +40 -0
- package/dist/core/state/stackDetect.js.map +1 -0
- package/dist/core/state/tabPersistence.d.ts +29 -0
- package/dist/core/state/tabPersistence.d.ts.map +1 -0
- package/dist/core/state/tabPersistence.js +65 -0
- package/dist/core/state/tabPersistence.js.map +1 -0
- package/dist/core/tabPersistence.d.ts +29 -0
- package/dist/core/tabPersistence.d.ts.map +1 -0
- package/dist/core/tabPersistence.js +65 -0
- package/dist/core/tabPersistence.js.map +1 -0
- package/dist/core/teamRunner.d.ts +42 -0
- package/dist/core/teamRunner.d.ts.map +1 -0
- package/dist/core/teamRunner.js +248 -0
- package/dist/core/teamRunner.js.map +1 -0
- package/dist/core/toolGate.d.ts +23 -0
- package/dist/core/toolGate.d.ts.map +1 -0
- package/dist/core/toolGate.js +51 -0
- package/dist/core/toolGate.js.map +1 -0
- package/dist/core/toolInterceptor.d.ts +7 -0
- package/dist/core/toolInterceptor.d.ts.map +1 -0
- package/dist/core/toolInterceptor.js +108 -0
- package/dist/core/toolInterceptor.js.map +1 -0
- package/dist/core/tools/hookedToolBroker.d.ts +25 -0
- package/dist/core/tools/hookedToolBroker.d.ts.map +1 -0
- package/dist/core/tools/hookedToolBroker.js +95 -0
- package/dist/core/tools/hookedToolBroker.js.map +1 -0
- package/dist/core/tools/omgToolManifest.d.ts +42 -0
- package/dist/core/tools/omgToolManifest.d.ts.map +1 -0
- package/dist/core/tools/omgToolManifest.js +66 -0
- package/dist/core/tools/omgToolManifest.js.map +1 -0
- package/dist/core/tools/toolGate.d.ts +23 -0
- package/dist/core/tools/toolGate.d.ts.map +1 -0
- package/dist/core/tools/toolGate.js +51 -0
- package/dist/core/tools/toolGate.js.map +1 -0
- package/dist/core/tools/toolInterceptor.d.ts +7 -0
- package/dist/core/tools/toolInterceptor.d.ts.map +1 -0
- package/dist/core/tools/toolInterceptor.js +108 -0
- package/dist/core/tools/toolInterceptor.js.map +1 -0
- package/dist/core/tools/tools.d.ts +34 -0
- package/dist/core/tools/tools.d.ts.map +1 -0
- package/dist/core/tools/tools.js +328 -0
- package/dist/core/tools/tools.js.map +1 -0
- package/dist/core/tools.d.ts +34 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +300 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/types.d.ts +107 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +55 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/usageCache.d.ts +19 -0
- package/dist/core/usageCache.d.ts.map +1 -0
- package/dist/core/usageCache.js +157 -0
- package/dist/core/usageCache.js.map +1 -0
- package/dist/core/usageWindow.d.ts +19 -0
- package/dist/core/usageWindow.d.ts.map +1 -0
- package/dist/core/usageWindow.js +73 -0
- package/dist/core/usageWindow.js.map +1 -0
- package/dist/core/util/bgProtocol.d.ts +5 -0
- package/dist/core/util/bgProtocol.d.ts.map +1 -0
- package/dist/core/util/bgProtocol.js +20 -0
- package/dist/core/util/bgProtocol.js.map +1 -0
- package/dist/core/util/clipboard.d.ts +4 -0
- package/dist/core/util/clipboard.d.ts.map +1 -0
- package/dist/core/util/clipboard.js +46 -0
- package/dist/core/util/clipboard.js.map +1 -0
- package/dist/core/util/clipboardImage.d.ts +3 -0
- package/dist/core/util/clipboardImage.d.ts.map +1 -0
- package/dist/core/util/clipboardImage.js +58 -0
- package/dist/core/util/clipboardImage.js.map +1 -0
- package/dist/core/util/langHint.d.ts +9 -0
- package/dist/core/util/langHint.d.ts.map +1 -0
- package/dist/core/util/langHint.js +33 -0
- package/dist/core/util/langHint.js.map +1 -0
- package/dist/core/util/slugify.d.ts +2 -0
- package/dist/core/util/slugify.d.ts.map +1 -0
- package/dist/core/util/slugify.js +28 -0
- package/dist/core/util/slugify.js.map +1 -0
- package/dist/hooks/hookedToolProxy.mjs +118 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/dispatcher.d.ts +21 -0
- package/dist/ipc/dispatcher.d.ts.map +1 -0
- package/dist/ipc/dispatcher.js +160 -0
- package/dist/ipc/dispatcher.js.map +1 -0
- package/dist/ipc/events.d.ts +33 -0
- package/dist/ipc/events.d.ts.map +1 -0
- package/dist/ipc/events.js +42 -0
- package/dist/ipc/events.js.map +1 -0
- package/dist/ipc/rpc.d.ts +31 -0
- package/dist/ipc/rpc.d.ts.map +1 -0
- package/dist/ipc/rpc.js +110 -0
- package/dist/ipc/rpc.js.map +1 -0
- package/dist/ipc/stdio.d.ts +11 -0
- package/dist/ipc/stdio.d.ts.map +1 -0
- package/dist/ipc/stdio.js +52 -0
- package/dist/ipc/stdio.js.map +1 -0
- package/dist/mcp/askClient.d.ts +9 -0
- package/dist/mcp/askClient.d.ts.map +1 -0
- package/dist/mcp/askClient.js +70 -0
- package/dist/mcp/askClient.js.map +1 -0
- package/dist/mcp/constants.d.ts +6 -0
- package/dist/mcp/constants.d.ts.map +1 -0
- package/dist/mcp/constants.js +8 -0
- package/dist/mcp/constants.js.map +1 -0
- package/dist/mcp/permissionClient.d.ts +5 -0
- package/dist/mcp/permissionClient.d.ts.map +1 -0
- package/dist/mcp/permissionClient.js +71 -0
- package/dist/mcp/permissionClient.js.map +1 -0
- package/dist/mcp/schemas.d.ts +9 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +121 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts +41 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +204 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/policy/loader.d.ts +27 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +89 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/team-claude-only.yaml +46 -0
- package/dist/policy/team-codex-only.yaml +46 -0
- package/dist/policy/team-codex.yaml +54 -0
- package/dist/policy/team.yaml +104 -0
- package/dist/toolhook/hookedToolProxy.mjs +118 -0
- package/dist/ui/components/App.d.ts +14 -0
- package/dist/ui/components/App.d.ts.map +1 -0
- package/dist/ui/components/App.js +803 -0
- package/dist/ui/components/App.js.map +1 -0
- package/dist/ui/components/AskPicker.d.ts +8 -0
- package/dist/ui/components/AskPicker.d.ts.map +1 -0
- package/dist/ui/components/AskPicker.js +202 -0
- package/dist/ui/components/AskPicker.js.map +1 -0
- package/dist/ui/components/CommandInput.d.ts +63 -0
- package/dist/ui/components/CommandInput.d.ts.map +1 -0
- package/dist/ui/components/CommandInput.js +994 -0
- package/dist/ui/components/CommandInput.js.map +1 -0
- package/dist/ui/components/DiffView.d.ts +19 -0
- package/dist/ui/components/DiffView.d.ts.map +1 -0
- package/dist/ui/components/DiffView.js +93 -0
- package/dist/ui/components/DiffView.js.map +1 -0
- package/dist/ui/components/Dock.d.ts +49 -0
- package/dist/ui/components/Dock.d.ts.map +1 -0
- package/dist/ui/components/Dock.js +52 -0
- package/dist/ui/components/Dock.js.map +1 -0
- package/dist/ui/components/EventLog.d.ts +42 -0
- package/dist/ui/components/EventLog.d.ts.map +1 -0
- package/dist/ui/components/EventLog.js +450 -0
- package/dist/ui/components/EventLog.js.map +1 -0
- package/dist/ui/components/FileSuggest.d.ts +8 -0
- package/dist/ui/components/FileSuggest.d.ts.map +1 -0
- package/dist/ui/components/FileSuggest.js +19 -0
- package/dist/ui/components/FileSuggest.js.map +1 -0
- package/dist/ui/components/HRule.d.ts +27 -0
- package/dist/ui/components/HRule.d.ts.map +1 -0
- package/dist/ui/components/HRule.js +75 -0
- package/dist/ui/components/HRule.js.map +1 -0
- package/dist/ui/components/HintBar.d.ts +2 -0
- package/dist/ui/components/HintBar.d.ts.map +1 -0
- package/dist/ui/components/HintBar.js +19 -0
- package/dist/ui/components/HintBar.js.map +1 -0
- package/dist/ui/components/MarkdownText.d.ts +13 -0
- package/dist/ui/components/MarkdownText.d.ts.map +1 -0
- package/dist/ui/components/MarkdownText.js +255 -0
- package/dist/ui/components/MarkdownText.js.map +1 -0
- package/dist/ui/components/PermissionPrompt.d.ts +8 -0
- package/dist/ui/components/PermissionPrompt.d.ts.map +1 -0
- package/dist/ui/components/PermissionPrompt.js +37 -0
- package/dist/ui/components/PermissionPrompt.js.map +1 -0
- package/dist/ui/components/SessionPicker.d.ts +16 -0
- package/dist/ui/components/SessionPicker.d.ts.map +1 -0
- package/dist/ui/components/SessionPicker.js +116 -0
- package/dist/ui/components/SessionPicker.js.map +1 -0
- package/dist/ui/components/SlashPalette.d.ts +8 -0
- package/dist/ui/components/SlashPalette.d.ts.map +1 -0
- package/dist/ui/components/SlashPalette.js +41 -0
- package/dist/ui/components/SlashPalette.js.map +1 -0
- package/dist/ui/components/Spinner.d.ts +37 -0
- package/dist/ui/components/Spinner.d.ts.map +1 -0
- package/dist/ui/components/Spinner.js +139 -0
- package/dist/ui/components/Spinner.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +92 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +268 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/TabChip.d.ts +11 -0
- package/dist/ui/components/TabChip.d.ts.map +1 -0
- package/dist/ui/components/TabChip.js +23 -0
- package/dist/ui/components/TabChip.js.map +1 -0
- package/dist/ui/components/TeamIndicator.d.ts +6 -0
- package/dist/ui/components/TeamIndicator.d.ts.map +1 -0
- package/dist/ui/components/TeamIndicator.js +17 -0
- package/dist/ui/components/TeamIndicator.js.map +1 -0
- package/dist/ui/components/TeamStatusPanel.d.ts +14 -0
- package/dist/ui/components/TeamStatusPanel.d.ts.map +1 -0
- package/dist/ui/components/TeamStatusPanel.js +65 -0
- package/dist/ui/components/TeamStatusPanel.js.map +1 -0
- package/dist/ui/components/ThinkingBlock.d.ts +10 -0
- package/dist/ui/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/ui/components/ThinkingBlock.js +21 -0
- package/dist/ui/components/ThinkingBlock.js.map +1 -0
- package/dist/ui/components/TodoIndicator.d.ts +11 -0
- package/dist/ui/components/TodoIndicator.d.ts.map +1 -0
- package/dist/ui/components/TodoIndicator.js +37 -0
- package/dist/ui/components/TodoIndicator.js.map +1 -0
- package/dist/ui/components/ToolCallCard.d.ts +16 -0
- package/dist/ui/components/ToolCallCard.d.ts.map +1 -0
- package/dist/ui/components/ToolCallCard.js +195 -0
- package/dist/ui/components/ToolCallCard.js.map +1 -0
- package/dist/ui/components/Welcome.d.ts +8 -0
- package/dist/ui/components/Welcome.d.ts.map +1 -0
- package/dist/ui/components/Welcome.js +53 -0
- package/dist/ui/components/Welcome.js.map +1 -0
- package/dist/ui/cursorState.d.ts +29 -0
- package/dist/ui/cursorState.d.ts.map +1 -0
- package/dist/ui/cursorState.js +49 -0
- package/dist/ui/cursorState.js.map +1 -0
- package/dist/ui/diff.d.ts +34 -0
- package/dist/ui/diff.d.ts.map +1 -0
- package/dist/ui/diff.js +184 -0
- package/dist/ui/diff.js.map +1 -0
- package/dist/ui/diffLang.d.ts +2 -0
- package/dist/ui/diffLang.d.ts.map +1 -0
- package/dist/ui/diffLang.js +36 -0
- package/dist/ui/diffLang.js.map +1 -0
- package/dist/ui/emoji.d.ts +4 -0
- package/dist/ui/emoji.d.ts.map +1 -0
- package/dist/ui/emoji.js +73 -0
- package/dist/ui/emoji.js.map +1 -0
- package/dist/ui/fileMentions.d.ts +41 -0
- package/dist/ui/fileMentions.d.ts.map +1 -0
- package/dist/ui/fileMentions.js +135 -0
- package/dist/ui/fileMentions.js.map +1 -0
- package/dist/ui/hooks/useLineEditor.d.ts +44 -0
- package/dist/ui/hooks/useLineEditor.d.ts.map +1 -0
- package/dist/ui/hooks/useLineEditor.js +142 -0
- package/dist/ui/hooks/useLineEditor.js.map +1 -0
- package/dist/ui/inputHistory.d.ts +8 -0
- package/dist/ui/inputHistory.d.ts.map +1 -0
- package/dist/ui/inputHistory.js +56 -0
- package/dist/ui/inputHistory.js.map +1 -0
- package/dist/ui/jsonrpc.d.ts +17 -0
- package/dist/ui/jsonrpc.d.ts.map +1 -0
- package/dist/ui/jsonrpc.js +41 -0
- package/dist/ui/jsonrpc.js.map +1 -0
- package/dist/ui/launcher.d.ts +20 -0
- package/dist/ui/launcher.d.ts.map +1 -0
- package/dist/ui/launcher.js +185 -0
- package/dist/ui/launcher.js.map +1 -0
- package/dist/ui/markdown.d.ts +104 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +449 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/mouse.d.ts +22 -0
- package/dist/ui/mouse.d.ts.map +1 -0
- package/dist/ui/mouse.js +31 -0
- package/dist/ui/mouse.js.map +1 -0
- package/dist/ui/outbound.d.ts +20 -0
- package/dist/ui/outbound.d.ts.map +1 -0
- package/dist/ui/outbound.js +49 -0
- package/dist/ui/outbound.js.map +1 -0
- package/dist/ui/screenMode.d.ts +25 -0
- package/dist/ui/screenMode.d.ts.map +1 -0
- package/dist/ui/screenMode.js +43 -0
- package/dist/ui/screenMode.js.map +1 -0
- package/dist/ui/slashCatalog.d.ts +18 -0
- package/dist/ui/slashCatalog.d.ts.map +1 -0
- package/dist/ui/slashCatalog.js +243 -0
- package/dist/ui/slashCatalog.js.map +1 -0
- package/dist/ui/syntax.d.ts +11 -0
- package/dist/ui/syntax.d.ts.map +1 -0
- package/dist/ui/syntax.js +78 -0
- package/dist/ui/syntax.js.map +1 -0
- package/dist/ui/theme.d.ts +165 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +394 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +203 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +53 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Tool interceptor — wraps an adapter Chunk stream and synthesizes a
|
|
2
|
+
// ToolUseEnd after every ToolUseStart, running the tool via the registry.
|
|
3
|
+
//
|
|
4
|
+
// Phase 79: tools that take a while (run_shell) can emit progress
|
|
5
|
+
// chunks during execution. The interceptor bridges the registry's
|
|
6
|
+
// callback-style `onProgress` into the AsyncIterable<Chunk> stream
|
|
7
|
+
// by buffering chunks in a queue and a `notify` promise that fires
|
|
8
|
+
// whenever progress arrives or the call completes.
|
|
9
|
+
export async function* interceptToolCalls(stream, registry, opts = {}) {
|
|
10
|
+
for await (const chunk of stream) {
|
|
11
|
+
yield chunk;
|
|
12
|
+
if (chunk.type !== "tool_use_start")
|
|
13
|
+
continue;
|
|
14
|
+
if (opts.gate !== undefined) {
|
|
15
|
+
const allowed = await opts.gate.allow(chunk.toolName, chunk.toolInput);
|
|
16
|
+
if (!allowed) {
|
|
17
|
+
yield deniedEnd(chunk.toolId, chunk.toolName);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
yield* runWithProgress(registry, chunk.toolName, chunk.toolInput, chunk.toolId);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Run one tool call, yielding `tool_use_progress` chunks as the
|
|
25
|
+
* registry reports them and a final `tool_use_end` chunk on
|
|
26
|
+
* completion. Pure plumbing — registries that don't propagate
|
|
27
|
+
* progress emit only the end chunk, which matches the pre-Phase-79
|
|
28
|
+
* behaviour exactly. */
|
|
29
|
+
async function* runWithProgress(registry, name, args, toolId) {
|
|
30
|
+
const queue = [];
|
|
31
|
+
let notifyResolve = null;
|
|
32
|
+
let done = false;
|
|
33
|
+
const notify = () => {
|
|
34
|
+
const r = notifyResolve;
|
|
35
|
+
notifyResolve = null;
|
|
36
|
+
r?.();
|
|
37
|
+
};
|
|
38
|
+
registry
|
|
39
|
+
.call(name, args, {
|
|
40
|
+
onProgress: (text) => {
|
|
41
|
+
const progress = {
|
|
42
|
+
type: "tool_use_progress",
|
|
43
|
+
toolId,
|
|
44
|
+
text,
|
|
45
|
+
};
|
|
46
|
+
queue.push(progress);
|
|
47
|
+
notify();
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
.then((result) => {
|
|
51
|
+
const end = {
|
|
52
|
+
type: "tool_use_end",
|
|
53
|
+
toolId,
|
|
54
|
+
result: {
|
|
55
|
+
ok: result.ok,
|
|
56
|
+
value: result.value,
|
|
57
|
+
error: result.error,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
queue.push(end);
|
|
61
|
+
done = true;
|
|
62
|
+
notify();
|
|
63
|
+
})
|
|
64
|
+
// Phase 161: ToolRegistry.call already wraps tool exceptions into an
|
|
65
|
+
// ok:false result, but an onProgress callback (or other unexpected
|
|
66
|
+
// path) could still reject. Without this catch, `done` would never
|
|
67
|
+
// flip and the queue loop below would await `notify` forever — a
|
|
68
|
+
// silent deadlock that hangs the whole turn. Synthesize an error end.
|
|
69
|
+
.catch((e) => {
|
|
70
|
+
const end = {
|
|
71
|
+
type: "tool_use_end",
|
|
72
|
+
toolId,
|
|
73
|
+
result: {
|
|
74
|
+
ok: false,
|
|
75
|
+
value: null,
|
|
76
|
+
error: `tool '${name}' failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
queue.push(end);
|
|
80
|
+
done = true;
|
|
81
|
+
notify();
|
|
82
|
+
});
|
|
83
|
+
while (true) {
|
|
84
|
+
while (queue.length > 0) {
|
|
85
|
+
const c = queue.shift();
|
|
86
|
+
yield c;
|
|
87
|
+
if (c.type === "tool_use_end")
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (done)
|
|
91
|
+
return;
|
|
92
|
+
await new Promise((r) => {
|
|
93
|
+
notifyResolve = r;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function deniedEnd(toolId, toolName) {
|
|
98
|
+
return {
|
|
99
|
+
type: "tool_use_end",
|
|
100
|
+
toolId,
|
|
101
|
+
result: {
|
|
102
|
+
ok: false,
|
|
103
|
+
value: null,
|
|
104
|
+
error: `permission denied: ${toolName}`,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=toolInterceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolInterceptor.js","sourceRoot":"","sources":["../../src/core/toolInterceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Handler for one hooked tool. Receives the raw `tool_input` payload
|
|
2
|
+
* exactly as claude-cli sent it; returns the text the model should
|
|
3
|
+
* see as the tool_result. Throwing or returning null surfaces the
|
|
4
|
+
* default "user did not answer" sentinel.
|
|
5
|
+
*
|
|
6
|
+
* Phase 243: `ctx.tabName` carries the source tab name when the hook
|
|
7
|
+
* reports one (via OMG_TAB_NAME env in the spawned child). Lets the
|
|
8
|
+
* handler route the picker to the actual asking tab instead of
|
|
9
|
+
* guessing via findAskingTab's "single-inflight heuristic." Absent
|
|
10
|
+
* when the hook payload doesn't include it (older claude-cli, hook
|
|
11
|
+
* script downgrade, etc) — callers fall back to the heuristic. */
|
|
12
|
+
export interface HookedToolContext {
|
|
13
|
+
tabName?: string;
|
|
14
|
+
}
|
|
15
|
+
export type HookedToolHandler = (toolInput: unknown, ctx: HookedToolContext) => Promise<string | null>;
|
|
16
|
+
export interface HookedToolBrokerHandle {
|
|
17
|
+
socketPath: string;
|
|
18
|
+
/** Register (or replace) a handler for a tool name. */
|
|
19
|
+
register: (toolName: string, handler: HookedToolHandler) => void;
|
|
20
|
+
/** Tool names currently registered (used to publish `OMG_HOOKED_TOOLS`). */
|
|
21
|
+
registered: () => string[];
|
|
22
|
+
close: () => Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare function startHookedToolBroker(): Promise<HookedToolBrokerHandle>;
|
|
25
|
+
//# sourceMappingURL=hookedToolBroker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookedToolBroker.d.ts","sourceRoot":"","sources":["../../../src/core/tools/hookedToolBroker.ts"],"names":[],"mappings":"AA+BA;;;;;;;;;;mEAUmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,iBAAiB,GAAG,CAC9B,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,iBAAiB,KACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,4EAA4E;IAC5E,UAAU,EAAE,MAAM,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAiB7E"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Phase 206: generalized PreToolUse hook broker.
|
|
2
|
+
//
|
|
3
|
+
// Phase 187 wired a single tool (AskUserQuestion) to omg's TUI through
|
|
4
|
+
// a Unix-socket PreToolUse hook. The next interactive tool that needs
|
|
5
|
+
// the same plumbing (a file picker, an OAuth flow, an inline confirm
|
|
6
|
+
// prompt) shouldn't have to copy-paste a fresh broker + .mjs each
|
|
7
|
+
// time. This module owns the pattern.
|
|
8
|
+
//
|
|
9
|
+
// Conceptually:
|
|
10
|
+
// 1. omg starts one broker that listens for hook envelopes.
|
|
11
|
+
// 2. Each interactive tool registers a handler under its tool name
|
|
12
|
+
// (the exact string claude-cli matches in PreToolUse — e.g.
|
|
13
|
+
// "AskUserQuestion").
|
|
14
|
+
// 3. The generic hook .mjs reads claude-cli's PreToolUse payload,
|
|
15
|
+
// forwards `{ tool_name, tool_input }` to the broker, and emits
|
|
16
|
+
// the broker's reply as the hook's deny-reason text (which
|
|
17
|
+
// claude-cli surfaces to the model as the tool_result content).
|
|
18
|
+
// 4. A handler returning `null` (or throwing) becomes the
|
|
19
|
+
// "user did not answer" sentinel — a broken handler never
|
|
20
|
+
// hangs the model.
|
|
21
|
+
//
|
|
22
|
+
// Wire protocol (line-delimited JSON over the broker socket):
|
|
23
|
+
// hook → broker: { id, tool_name, tool_input }
|
|
24
|
+
// broker → hook: { id, reason: <string|null> }
|
|
25
|
+
//
|
|
26
|
+
// The hook treats `reason: null` as "allow normally" (don't intercept),
|
|
27
|
+
// and a string as "deny + surface this text to the model."
|
|
28
|
+
import { startSocketBroker } from "../brokers/socketBroker.js";
|
|
29
|
+
export async function startHookedToolBroker() {
|
|
30
|
+
const handlers = new Map();
|
|
31
|
+
const broker = await startSocketBroker({
|
|
32
|
+
prefix: "hookedtools",
|
|
33
|
+
filename: "hookedtools.sock",
|
|
34
|
+
onLine: (line, sock) => handleLine(line, sock, handlers),
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
socketPath: broker.socketPath,
|
|
38
|
+
register: (toolName, handler) => {
|
|
39
|
+
handlers.set(toolName, handler);
|
|
40
|
+
},
|
|
41
|
+
registered: () => [...handlers.keys()],
|
|
42
|
+
close: () => broker.close(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Sentinel mirrored in `src/toolhook/hookedToolProxy.mjs`. Returned when
|
|
46
|
+
* the broker can't fulfill the request — the hook then surfaces this
|
|
47
|
+
* string to the model as the tool_result, and the model sees a
|
|
48
|
+
* clean "user did not answer" rather than the tool firing TTY-less. */
|
|
49
|
+
const NO_ANSWER_SENTINEL = "user did not answer";
|
|
50
|
+
async function handleLine(line, sock, handlers) {
|
|
51
|
+
let req;
|
|
52
|
+
try {
|
|
53
|
+
req = JSON.parse(line);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const id = req.id;
|
|
59
|
+
const toolName = typeof req.tool_name === "string" ? req.tool_name : "";
|
|
60
|
+
const tabName = typeof req.tab_name === "string" ? req.tab_name : undefined;
|
|
61
|
+
// Malformed envelope (no id or no tool name) → reason:null so the
|
|
62
|
+
// hook falls through to its own sentinel emit. `id ?? null` keeps
|
|
63
|
+
// the protocol happy.
|
|
64
|
+
if (id === undefined || !toolName) {
|
|
65
|
+
safeWrite(sock, { id: id ?? null, reason: null });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const handler = handlers.get(toolName);
|
|
69
|
+
// Tool name was published in OMG_HOOKED_TOOLS (claude registered a
|
|
70
|
+
// matcher for it) but no handler is registered — race or future
|
|
71
|
+
// bug. Fail-CLOSED: deny with the sentinel so the real tool can't
|
|
72
|
+
// fire TTY-less. Distinct from a handler that explicitly returns
|
|
73
|
+
// null (observe-only path: allow normally).
|
|
74
|
+
if (!handler) {
|
|
75
|
+
safeWrite(sock, { id, reason: NO_ANSWER_SENTINEL });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
let reason;
|
|
79
|
+
try {
|
|
80
|
+
reason = await handler(req.tool_input, { tabName });
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
reason = null;
|
|
84
|
+
}
|
|
85
|
+
safeWrite(sock, { id, reason });
|
|
86
|
+
}
|
|
87
|
+
function safeWrite(sock, payload) {
|
|
88
|
+
try {
|
|
89
|
+
sock.write(JSON.stringify(payload) + "\n");
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* socket closed before reply — hook side falls through to sentinel */
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=hookedToolBroker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookedToolBroker.js","sourceRoot":"","sources":["../../../src/core/tools/hookedToolBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface OmgToolsConfig {
|
|
2
|
+
/** When true, the spawned omg MCP server includes write_file in
|
|
3
|
+
* addition to the read-only defaults. */
|
|
4
|
+
writable?: boolean;
|
|
5
|
+
/** When true, the spawned omg MCP server includes run_shell on
|
|
6
|
+
* top of `writable`. (Shell implies writable in practice — the
|
|
7
|
+
* model that can run shell can already mutate the filesystem.) */
|
|
8
|
+
shell?: boolean;
|
|
9
|
+
/** Override the binary name. Default "omg" picks up whatever the
|
|
10
|
+
* user has on PATH (typically the global symlink to dist/cli.js). */
|
|
11
|
+
command?: string;
|
|
12
|
+
/** Phase 348: per-role allowlist of external MCP server names to expose
|
|
13
|
+
* through this omg server child. Absent = all enabled servers. Rendered
|
|
14
|
+
* as `--mcp-allow a,b` so each role's spawn carries its own subset. */
|
|
15
|
+
mcpAllow?: string[];
|
|
16
|
+
/** Phase 348: the base provider this child serves (e.g. "gemini"), so a
|
|
17
|
+
* server tagged `providers: [...]` is only exposed to matching models.
|
|
18
|
+
* Rendered as `--mcp-provider <p>`. */
|
|
19
|
+
provider?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface OmgServerSpec {
|
|
22
|
+
command: string;
|
|
23
|
+
args: string[];
|
|
24
|
+
}
|
|
25
|
+
/** Compose the {command, args} pair every adapter ultimately renders.
|
|
26
|
+
* Adding a new tier or flag belongs here; the three adapters only
|
|
27
|
+
* consume this and format it for their respective config surfaces. */
|
|
28
|
+
export declare function buildOmgServerSpec(opts: OmgToolsConfig): OmgServerSpec;
|
|
29
|
+
/** Stringify the spec as a TOML inline table — what codex's
|
|
30
|
+
* `-c mcp_servers.omg=…` expects. Kept here so the TOML shape stays
|
|
31
|
+
* next to the JSON one (any future field added to OmgServerSpec
|
|
32
|
+
* needs both renderers).
|
|
33
|
+
*
|
|
34
|
+
* Throws if `command` or any `args` entry contains a `"` — TOML
|
|
35
|
+
* basic strings can't carry an embedded double quote, and silently
|
|
36
|
+
* emitting broken TOML would just produce a `codex` parse error
|
|
37
|
+
* with no hint where it came from. */
|
|
38
|
+
export declare function toCodexTomlInline(spec: OmgServerSpec): string;
|
|
39
|
+
/** JSON envelope claude's `--mcp-config` wants: a wrapper with
|
|
40
|
+
* `mcpServers.omg = {command, args}`. */
|
|
41
|
+
export declare function toClaudeMcpConfig(spec: OmgServerSpec): string;
|
|
42
|
+
//# sourceMappingURL=omgToolManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omgToolManifest.d.ts","sourceRoot":"","sources":["../../../src/core/tools/omgToolManifest.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B;8CAC0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;uEAEmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;0EACsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;4EAEwE;IACxE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;4CAEwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;uEAEuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAWtE;AAED;;;;;;;;uCAQuC;AACvC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAe7D;AAED;0CAC0C;AAC1C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Phase 210: single canonical manifest for omg's MCP-tool exposure.
|
|
2
|
+
//
|
|
3
|
+
// All three CLI adapters (claude/codex/gemini) wire the wrapped model
|
|
4
|
+
// to omg's own MCP server so the model can call read_file / write_file /
|
|
5
|
+
// run_shell / record_decision / ask_user / etc. Each adapter renders
|
|
6
|
+
// the registration in its provider-native format:
|
|
7
|
+
//
|
|
8
|
+
// claude: --mcp-config '{"mcpServers":{"omg":{"command":"omg","args":[...]}}}'
|
|
9
|
+
// codex: -c mcp_servers.omg='{command="omg", args=[...]}' (TOML inline)
|
|
10
|
+
// gemini: ~/.gemini/settings.json → mcpServers.omg = {command:"omg", args:[...]}
|
|
11
|
+
//
|
|
12
|
+
// The {command, args} shape was duplicated three ways. Drift between
|
|
13
|
+
// them is silent — a typo in one adapter, or a new flag added in one
|
|
14
|
+
// place, only shows up when that specific provider runs and the model
|
|
15
|
+
// asks for a missing tool. The audit (External MED: tool manifest
|
|
16
|
+
// consistency) flagged this as one of omg's hidden cross-provider
|
|
17
|
+
// drift surfaces.
|
|
18
|
+
//
|
|
19
|
+
// This module owns the canonical spec. Adapters import
|
|
20
|
+
// `buildOmgServerSpec` to get the {command, args}; they only own the
|
|
21
|
+
// per-provider serialization on top of it.
|
|
22
|
+
/** Compose the {command, args} pair every adapter ultimately renders.
|
|
23
|
+
* Adding a new tier or flag belongs here; the three adapters only
|
|
24
|
+
* consume this and format it for their respective config surfaces. */
|
|
25
|
+
export function buildOmgServerSpec(opts) {
|
|
26
|
+
const args = ["--mcp-serve"];
|
|
27
|
+
if (opts.shell)
|
|
28
|
+
args.push("--shell-tools");
|
|
29
|
+
else if (opts.writable)
|
|
30
|
+
args.push("--write-tools");
|
|
31
|
+
// Phase 348: per-role MCP scoping. Server names are simple identifiers and
|
|
32
|
+
// provider ids are alphanumeric, so they're safe in TOML/JSON/shell args.
|
|
33
|
+
if (opts.mcpAllow && opts.mcpAllow.length > 0) {
|
|
34
|
+
args.push("--mcp-allow", opts.mcpAllow.join(","));
|
|
35
|
+
}
|
|
36
|
+
if (opts.provider)
|
|
37
|
+
args.push("--mcp-provider", opts.provider);
|
|
38
|
+
return { command: opts.command ?? "omg", args };
|
|
39
|
+
}
|
|
40
|
+
/** Stringify the spec as a TOML inline table — what codex's
|
|
41
|
+
* `-c mcp_servers.omg=…` expects. Kept here so the TOML shape stays
|
|
42
|
+
* next to the JSON one (any future field added to OmgServerSpec
|
|
43
|
+
* needs both renderers).
|
|
44
|
+
*
|
|
45
|
+
* Throws if `command` or any `args` entry contains a `"` — TOML
|
|
46
|
+
* basic strings can't carry an embedded double quote, and silently
|
|
47
|
+
* emitting broken TOML would just produce a `codex` parse error
|
|
48
|
+
* with no hint where it came from. */
|
|
49
|
+
export function toCodexTomlInline(spec) {
|
|
50
|
+
if (spec.command.includes('"')) {
|
|
51
|
+
throw new Error(`toCodexTomlInline: command contains a double quote (${JSON.stringify(spec.command)}); not representable as a TOML basic string`);
|
|
52
|
+
}
|
|
53
|
+
for (const a of spec.args) {
|
|
54
|
+
if (a.includes('"')) {
|
|
55
|
+
throw new Error(`toCodexTomlInline: args entry contains a double quote (${JSON.stringify(a)}); not representable as a TOML basic string`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const argsToml = spec.args.map((a) => `"${a}"`).join(", ");
|
|
59
|
+
return `{command="${spec.command}", args=[${argsToml}]}`;
|
|
60
|
+
}
|
|
61
|
+
/** JSON envelope claude's `--mcp-config` wants: a wrapper with
|
|
62
|
+
* `mcpServers.omg = {command, args}`. */
|
|
63
|
+
export function toClaudeMcpConfig(spec) {
|
|
64
|
+
return JSON.stringify({ mcpServers: { omg: spec } });
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=omgToolManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omgToolManifest.js","sourceRoot":"","sources":["../../../src/core/tools/omgToolManifest.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,qEAAqE;AACrE,kDAAkD;AAClD,EAAE;AACF,kFAAkF;AAClF,6EAA6E;AAC7E,oFAAoF;AACpF,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,kEAAkE;AAClE,kEAAkE;AAClE,kBAAkB;AAClB,EAAE;AACF,uDAAuD;AACvD,qEAAqE;AACrE,2CAA2C;AA4B3C;;uEAEuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACrD,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACtC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnD,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;uCAQuC;AACvC,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,6CAA6C,CACjI,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,0DAA0D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,6CAA6C,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,aAAa,IAAI,CAAC,OAAO,YAAY,QAAQ,IAAI,CAAC;AAC3D,CAAC;AAED;0CAC0C;AAC1C,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { JsonRpcClient } from "../../ipc/rpc.js";
|
|
2
|
+
export interface ToolGate {
|
|
3
|
+
allow(name: string, args: Record<string, unknown>): Promise<boolean>;
|
|
4
|
+
}
|
|
5
|
+
export declare class AllowAllGate implements ToolGate {
|
|
6
|
+
allow(_name: string, _args: Record<string, unknown>): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export declare class DenyAllGate implements ToolGate {
|
|
9
|
+
allow(_name: string, _args: Record<string, unknown>): Promise<boolean>;
|
|
10
|
+
}
|
|
11
|
+
export interface RpcGateOpts {
|
|
12
|
+
method?: string;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class RpcGate implements ToolGate {
|
|
16
|
+
private readonly client;
|
|
17
|
+
private readonly method;
|
|
18
|
+
private readonly timeoutMs;
|
|
19
|
+
private readonly remembered;
|
|
20
|
+
constructor(client: JsonRpcClient, opts?: RpcGateOpts);
|
|
21
|
+
allow(name: string, args: Record<string, unknown>): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=toolGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolGate.d.ts","sourceRoot":"","sources":["../../../src/core/tools/toolGate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA0B,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED,qBAAa,YAAa,YAAW,QAAQ;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7E;AAED,qBAAa,WAAY,YAAW,QAAQ;IACpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7E;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,OAAQ,YAAW,QAAQ;IAQpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAG7B,MAAM,EAAE,aAAa,EACtC,IAAI,GAAE,WAAgB;IAMlB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB3E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Tool permission gates. Mirror of legacy/omg/core/tool_gate.py.
|
|
2
|
+
import { RpcError, TimeoutError } from "../../ipc/rpc.js";
|
|
3
|
+
export class AllowAllGate {
|
|
4
|
+
async allow(_name, _args) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class DenyAllGate {
|
|
9
|
+
async allow(_name, _args) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class RpcGate {
|
|
14
|
+
client;
|
|
15
|
+
method;
|
|
16
|
+
timeoutMs;
|
|
17
|
+
// Phase 134: tools the user chose to "allow & remember" this session.
|
|
18
|
+
// A remembered tool short-circuits to allow without re-prompting.
|
|
19
|
+
remembered = new Set();
|
|
20
|
+
constructor(client, opts = {}) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
this.method = opts.method ?? "request/tool_permission";
|
|
23
|
+
this.timeoutMs = opts.timeoutMs ?? 30_000;
|
|
24
|
+
}
|
|
25
|
+
async allow(name, args) {
|
|
26
|
+
if (this.remembered.has(name))
|
|
27
|
+
return true;
|
|
28
|
+
let result;
|
|
29
|
+
try {
|
|
30
|
+
result = await this.client.request(this.method, {
|
|
31
|
+
name,
|
|
32
|
+
input: { ...args },
|
|
33
|
+
}, { timeoutMs: this.timeoutMs });
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (e instanceof RpcError || e instanceof TimeoutError)
|
|
37
|
+
return false;
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (typeof result !== "object" || result === null)
|
|
41
|
+
return false;
|
|
42
|
+
const r = result;
|
|
43
|
+
const ok = r.allow === true;
|
|
44
|
+
// Honor the prompt's "remember" answer so the same tool isn't
|
|
45
|
+
// re-asked for the rest of the session.
|
|
46
|
+
if (ok && r.remember === true)
|
|
47
|
+
this.remembered.add(name);
|
|
48
|
+
return ok;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=toolGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolGate.js","sourceRoot":"","sources":["../../../src/core/tools/toolGate.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAiB,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMzE,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAA8B;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAA8B;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAOD,MAAM,OAAO,OAAO;IAQC;IAPF,MAAM,CAAS;IACf,SAAS,CAAS;IACnC,sEAAsE;IACtE,kEAAkE;IACjD,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhD,YACmB,MAAqB,EACtC,OAAoB,EAAE;QADL,WAAM,GAAN,MAAM,CAAe;QAGtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,yBAAyB,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,IAA6B;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAChC,IAAI,CAAC,MAAM,EACX;gBACE,IAAI;gBACJ,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE;aACnB,EACD,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,YAAY,YAAY;gBAAE,OAAO,KAAK,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,CAAC,GAAG,MAAiD,CAAC;QAC5D,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;QAC5B,8DAA8D;QAC9D,wCAAwC;QACxC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Chunk } from "../orchestration/types.js";
|
|
2
|
+
import type { ToolGate } from "./toolGate.js";
|
|
3
|
+
import type { ToolRegistry } from "./tools.js";
|
|
4
|
+
export declare function interceptToolCalls(stream: AsyncIterable<Chunk>, registry: ToolRegistry, opts?: {
|
|
5
|
+
gate?: ToolGate;
|
|
6
|
+
}): AsyncIterable<Chunk>;
|
|
7
|
+
//# sourceMappingURL=toolInterceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolInterceptor.d.ts","sourceRoot":"","sources":["../../../src/core/tools/toolInterceptor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAA+B,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAuB,kBAAkB,CACvC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAC5B,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAO,GAC7B,aAAa,CAAC,KAAK,CAAC,CAoBtB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Tool interceptor — wraps an adapter Chunk stream and synthesizes a
|
|
2
|
+
// ToolUseEnd after every ToolUseStart, running the tool via the registry.
|
|
3
|
+
//
|
|
4
|
+
// Phase 79: tools that take a while (run_shell) can emit progress
|
|
5
|
+
// chunks during execution. The interceptor bridges the registry's
|
|
6
|
+
// callback-style `onProgress` into the AsyncIterable<Chunk> stream
|
|
7
|
+
// by buffering chunks in a queue and a `notify` promise that fires
|
|
8
|
+
// whenever progress arrives or the call completes.
|
|
9
|
+
export async function* interceptToolCalls(stream, registry, opts = {}) {
|
|
10
|
+
for await (const chunk of stream) {
|
|
11
|
+
yield chunk;
|
|
12
|
+
if (chunk.type !== "tool_use_start")
|
|
13
|
+
continue;
|
|
14
|
+
if (opts.gate !== undefined) {
|
|
15
|
+
const allowed = await opts.gate.allow(chunk.toolName, chunk.toolInput);
|
|
16
|
+
if (!allowed) {
|
|
17
|
+
yield deniedEnd(chunk.toolId, chunk.toolName);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
yield* runWithProgress(registry, chunk.toolName, chunk.toolInput, chunk.toolId);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Run one tool call, yielding `tool_use_progress` chunks as the
|
|
25
|
+
* registry reports them and a final `tool_use_end` chunk on
|
|
26
|
+
* completion. Pure plumbing — registries that don't propagate
|
|
27
|
+
* progress emit only the end chunk, which matches the pre-Phase-79
|
|
28
|
+
* behaviour exactly. */
|
|
29
|
+
async function* runWithProgress(registry, name, args, toolId) {
|
|
30
|
+
const queue = [];
|
|
31
|
+
let notifyResolve = null;
|
|
32
|
+
let done = false;
|
|
33
|
+
const notify = () => {
|
|
34
|
+
const r = notifyResolve;
|
|
35
|
+
notifyResolve = null;
|
|
36
|
+
r?.();
|
|
37
|
+
};
|
|
38
|
+
registry
|
|
39
|
+
.call(name, args, {
|
|
40
|
+
onProgress: (text) => {
|
|
41
|
+
const progress = {
|
|
42
|
+
type: "tool_use_progress",
|
|
43
|
+
toolId,
|
|
44
|
+
text,
|
|
45
|
+
};
|
|
46
|
+
queue.push(progress);
|
|
47
|
+
notify();
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
.then((result) => {
|
|
51
|
+
const end = {
|
|
52
|
+
type: "tool_use_end",
|
|
53
|
+
toolId,
|
|
54
|
+
result: {
|
|
55
|
+
ok: result.ok,
|
|
56
|
+
value: result.value,
|
|
57
|
+
error: result.error,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
queue.push(end);
|
|
61
|
+
done = true;
|
|
62
|
+
notify();
|
|
63
|
+
})
|
|
64
|
+
// Phase 161: ToolRegistry.call already wraps tool exceptions into an
|
|
65
|
+
// ok:false result, but an onProgress callback (or other unexpected
|
|
66
|
+
// path) could still reject. Without this catch, `done` would never
|
|
67
|
+
// flip and the queue loop below would await `notify` forever — a
|
|
68
|
+
// silent deadlock that hangs the whole turn. Synthesize an error end.
|
|
69
|
+
.catch((e) => {
|
|
70
|
+
const end = {
|
|
71
|
+
type: "tool_use_end",
|
|
72
|
+
toolId,
|
|
73
|
+
result: {
|
|
74
|
+
ok: false,
|
|
75
|
+
value: null,
|
|
76
|
+
error: `tool '${name}' failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
queue.push(end);
|
|
80
|
+
done = true;
|
|
81
|
+
notify();
|
|
82
|
+
});
|
|
83
|
+
while (true) {
|
|
84
|
+
while (queue.length > 0) {
|
|
85
|
+
const c = queue.shift();
|
|
86
|
+
yield c;
|
|
87
|
+
if (c.type === "tool_use_end")
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (done)
|
|
91
|
+
return;
|
|
92
|
+
await new Promise((r) => {
|
|
93
|
+
notifyResolve = r;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function deniedEnd(toolId, toolName) {
|
|
98
|
+
return {
|
|
99
|
+
type: "tool_use_end",
|
|
100
|
+
toolId,
|
|
101
|
+
result: {
|
|
102
|
+
ok: false,
|
|
103
|
+
value: null,
|
|
104
|
+
error: `permission denied: ${toolName}`,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=toolInterceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolInterceptor.js","sourceRoot":"","sources":["../../../src/core/tools/toolInterceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { LLMAdapter } from "../adapter.js";
|
|
2
|
+
export interface ToolResult {
|
|
3
|
+
readonly ok: boolean;
|
|
4
|
+
readonly value: unknown;
|
|
5
|
+
readonly error: string;
|
|
6
|
+
}
|
|
7
|
+
/** Phase 79: optional progress-reporting context. Tools that take a
|
|
8
|
+
* while (run_shell, long file scans) call `ctx.onProgress(chunk)`
|
|
9
|
+
* as output becomes available. Callers that don't care leave the
|
|
10
|
+
* context off and the onProgress branch is a no-op. */
|
|
11
|
+
export interface ToolCallContext {
|
|
12
|
+
onProgress?: (text: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export type ToolFn = (args: Record<string, unknown>, ctx?: ToolCallContext) => Promise<unknown>;
|
|
15
|
+
export declare class ToolRegistry {
|
|
16
|
+
private readonly tools;
|
|
17
|
+
register(name: string, fn: ToolFn): void;
|
|
18
|
+
has(name: string): boolean;
|
|
19
|
+
get names(): string[];
|
|
20
|
+
call(name: string, args: Record<string, unknown>, ctx?: ToolCallContext): Promise<ToolResult>;
|
|
21
|
+
}
|
|
22
|
+
export declare function defaultRegistry(cwd?: string): ToolRegistry;
|
|
23
|
+
export declare function defaultWritableRegistry(cwd?: string): ToolRegistry;
|
|
24
|
+
export declare function defaultShellRegistry(cwd?: string): ToolRegistry;
|
|
25
|
+
export interface DelegateOpts {
|
|
26
|
+
/** Resolve a role name to a ready-to-stream adapter. Builds a fresh
|
|
27
|
+
* adapter per call so sub-agents always run in isolated sessions. */
|
|
28
|
+
resolveAdapter: (role: string) => Promise<LLMAdapter>;
|
|
29
|
+
/** Known role names (from team.yaml). Used for validation + better
|
|
30
|
+
* error messages on unknown roles. */
|
|
31
|
+
roles: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function registerDelegate(reg: ToolRegistry, opts: DelegateOpts): void;
|
|
34
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/core/tools/tools.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;wDAGwD;AACxD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,MAAM,GAAG,CACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,CAAC,EAAE,eAAe,KAClB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAUxC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAEK,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,UAAU,CAAC;CAuBvB;AAwBD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY,CAkEzE;AAED,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAsB,GAC1B,YAAY,CAuBd;AAsDD,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAsB,GAC1B,YAAY,CAiCd;AAuGD,MAAM,WAAW,YAAY;IAC3B;0EACsE;IACtE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD;2CACuC;IACvC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAkC5E"}
|