@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,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Phase 206: generic PreToolUse hook for omg's hookedToolBroker.
|
|
3
|
+
//
|
|
4
|
+
// claude-cli runs this once per matched tool call. The hook:
|
|
5
|
+
// 1. reads the PreToolUse payload from stdin (JSON with tool_name +
|
|
6
|
+
// tool_input)
|
|
7
|
+
// 2. forwards both to omg's parent via the socket at
|
|
8
|
+
// OMG_HOOKED_TOOL_SOCKET, identifying the tool by name
|
|
9
|
+
// 3. emits a PreToolUse decision based on the broker's reply:
|
|
10
|
+
// reason: <string> → deny + surface the string to the model
|
|
11
|
+
// reason: null → allow (let the tool run normally)
|
|
12
|
+
//
|
|
13
|
+
// Any failure (no socket, broker dead, malformed payload, handler
|
|
14
|
+
// missing or throwing) falls back to the "user did not answer"
|
|
15
|
+
// sentinel — so a broken broker NEVER hangs the model.
|
|
16
|
+
//
|
|
17
|
+
// Output is line-of-text JSON on stdout only. Stderr noise here would
|
|
18
|
+
// corrupt claude-cli's hook protocol, so failures stay silent.
|
|
19
|
+
|
|
20
|
+
import { createConnection } from "node:net";
|
|
21
|
+
import { readFileSync } from "node:fs";
|
|
22
|
+
import { createInterface } from "node:readline";
|
|
23
|
+
|
|
24
|
+
const NO_ANSWER_SENTINEL = "user did not answer";
|
|
25
|
+
|
|
26
|
+
function emit(reason) {
|
|
27
|
+
const payload = {
|
|
28
|
+
hookSpecificOutput: {
|
|
29
|
+
hookEventName: "PreToolUse",
|
|
30
|
+
permissionDecision: reason === null ? "allow" : "deny",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
if (reason !== null) {
|
|
34
|
+
payload.hookSpecificOutput.permissionDecisionReason = reason;
|
|
35
|
+
}
|
|
36
|
+
process.stdout.write(JSON.stringify(payload));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function ask(socketPath, payload) {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const sock = createConnection(socketPath);
|
|
42
|
+
const rl = createInterface({ input: sock, crlfDelay: Infinity });
|
|
43
|
+
let settled = false;
|
|
44
|
+
const settle = (fn, val) => {
|
|
45
|
+
if (settled) return;
|
|
46
|
+
settled = true;
|
|
47
|
+
try {
|
|
48
|
+
sock.end();
|
|
49
|
+
} catch {
|
|
50
|
+
/* already closed */
|
|
51
|
+
}
|
|
52
|
+
fn(val);
|
|
53
|
+
};
|
|
54
|
+
sock.on("error", (err) => settle(reject, err));
|
|
55
|
+
rl.on("line", (line) => {
|
|
56
|
+
try {
|
|
57
|
+
settle(resolve, JSON.parse(line));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
settle(reject, e);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
sock.on("connect", () => {
|
|
63
|
+
sock.write(JSON.stringify(payload) + "\n");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function main() {
|
|
69
|
+
const socketPath = process.env.OMG_HOOKED_TOOL_SOCKET;
|
|
70
|
+
if (!socketPath) {
|
|
71
|
+
emit(NO_ANSWER_SENTINEL);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let payload;
|
|
76
|
+
try {
|
|
77
|
+
payload = JSON.parse(readFileSync(0, "utf8"));
|
|
78
|
+
} catch {
|
|
79
|
+
emit(NO_ANSWER_SENTINEL);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const tool_name = payload?.tool_name;
|
|
84
|
+
const tool_input = payload?.tool_input;
|
|
85
|
+
if (typeof tool_name !== "string" || !tool_name) {
|
|
86
|
+
emit(NO_ANSWER_SENTINEL);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Phase 243: forward OMG_TAB_NAME so the broker can route the
|
|
91
|
+
// picker to the source tab without the heuristic in findAskingTab.
|
|
92
|
+
// Adapter sets this per-spawn (see claudeCli.ts), so each tab's
|
|
93
|
+
// child carries its own tab name.
|
|
94
|
+
const tab_name = process.env.OMG_TAB_NAME;
|
|
95
|
+
let response;
|
|
96
|
+
try {
|
|
97
|
+
response = await ask(socketPath, {
|
|
98
|
+
id: 1,
|
|
99
|
+
tool_name,
|
|
100
|
+
tool_input,
|
|
101
|
+
...(tab_name ? { tab_name } : {}),
|
|
102
|
+
});
|
|
103
|
+
} catch {
|
|
104
|
+
emit(NO_ANSWER_SENTINEL);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const reason = response?.reason;
|
|
109
|
+
if (typeof reason === "string") {
|
|
110
|
+
emit(reason);
|
|
111
|
+
} else if (reason === null) {
|
|
112
|
+
emit(null);
|
|
113
|
+
} else {
|
|
114
|
+
emit(NO_ANSWER_SENTINEL);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
await main();
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// omg public surface — Node migration (Phase B).
|
|
2
|
+
//
|
|
3
|
+
// Phases M0–M6 (in progress) move every Python module to TypeScript.
|
|
4
|
+
// Until M6 ships the cleanup, the legacy/ tree still holds the Python
|
|
5
|
+
// reference implementation; both side-by-side is intentional during the
|
|
6
|
+
// migration window.
|
|
7
|
+
export const VERSION = "0.1.0";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE;AACxE,oBAAoB;AAEpB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Chunk } from "../core/orchestration/types.js";
|
|
2
|
+
import { type JsonRpcNotification } from "./events.js";
|
|
3
|
+
export type WriterFn = (msg: JsonRpcNotification) => Promise<void>;
|
|
4
|
+
/** Decide whether a provider rate-limit status is worth a chip. "allowed"
|
|
5
|
+
* never is; a hard block (rejected / anything not a warning) always is; a
|
|
6
|
+
* soft warning only when its reset is within the horizon. */
|
|
7
|
+
export declare function shouldSurfaceRateLimit(status: string, resetsAt: number, now: number): boolean;
|
|
8
|
+
export interface DispatcherOpts {
|
|
9
|
+
flushThreshold?: number | null;
|
|
10
|
+
}
|
|
11
|
+
export declare class EventDispatcher {
|
|
12
|
+
private readonly writer;
|
|
13
|
+
private readonly flushThreshold;
|
|
14
|
+
private buf;
|
|
15
|
+
private bufSize;
|
|
16
|
+
constructor(writer: WriterFn, opts?: DispatcherOpts);
|
|
17
|
+
run(stream: AsyncIterable<Chunk>): Promise<void>;
|
|
18
|
+
private flushText;
|
|
19
|
+
private emitBoundary;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/ipc/dispatcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AASnE;;8DAE8D;AAC9D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAKT;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;gBAER,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAE,cAAmB;IAUjD,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAoCxC,SAAS;YAQT,YAAY;CAiF3B"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// EventDispatcher — adapter Chunk stream → JSON-RPC notifications.
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/ipc/dispatcher.py. Tool-boundary flush
|
|
4
|
+
// guarantee (G4): no non-text chunk emits until the text buffer is
|
|
5
|
+
// drained to the writer first.
|
|
6
|
+
import { endEvent, textEvent, toolUseEndEvent, toolUseProgressEvent, toolUseStartEvent, } from "./events.js";
|
|
7
|
+
/** Phase 319: a soft "*_warning" status is only actionable when its window
|
|
8
|
+
* is about to reset — a weekly warning 6 days out just means "you have a
|
|
9
|
+
* week to pace", which read as startup noise. Show warnings only within
|
|
10
|
+
* this horizon; a 5-hour window (always ≤5h out) still surfaces, the
|
|
11
|
+
* weekly one stays quiet until its final hours. */
|
|
12
|
+
const RATE_LIMIT_WARNING_HORIZON_MS = 6 * 3_600_000;
|
|
13
|
+
/** Decide whether a provider rate-limit status is worth a chip. "allowed"
|
|
14
|
+
* never is; a hard block (rejected / anything not a warning) always is; a
|
|
15
|
+
* soft warning only when its reset is within the horizon. */
|
|
16
|
+
export function shouldSurfaceRateLimit(status, resetsAt, now) {
|
|
17
|
+
if (!status || status === "allowed")
|
|
18
|
+
return false;
|
|
19
|
+
const isWarning = status.toLowerCase().includes("warning");
|
|
20
|
+
if (!isWarning)
|
|
21
|
+
return true;
|
|
22
|
+
return resetsAt > 0 && resetsAt - now < RATE_LIMIT_WARNING_HORIZON_MS;
|
|
23
|
+
}
|
|
24
|
+
export class EventDispatcher {
|
|
25
|
+
writer;
|
|
26
|
+
flushThreshold;
|
|
27
|
+
buf = [];
|
|
28
|
+
bufSize = 0;
|
|
29
|
+
constructor(writer, opts = {}) {
|
|
30
|
+
if (opts.flushThreshold !== undefined && opts.flushThreshold !== null) {
|
|
31
|
+
if (!Number.isInteger(opts.flushThreshold) || opts.flushThreshold <= 0) {
|
|
32
|
+
throw new Error("flushThreshold must be a positive integer or null");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.writer = writer;
|
|
36
|
+
this.flushThreshold = opts.flushThreshold ?? null;
|
|
37
|
+
}
|
|
38
|
+
async run(stream) {
|
|
39
|
+
for await (const chunk of stream) {
|
|
40
|
+
if (chunk.type === "text") {
|
|
41
|
+
if (chunk.text) {
|
|
42
|
+
this.buf.push(chunk.text);
|
|
43
|
+
this.bufSize += chunk.text.length;
|
|
44
|
+
if (this.flushThreshold !== null &&
|
|
45
|
+
this.bufSize >= this.flushThreshold) {
|
|
46
|
+
await this.flushText();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Thinking is conceptually parallel to text — it streams in
|
|
52
|
+
// small deltas the user wants to see live. Emit it directly,
|
|
53
|
+
// but flush any pending visible text first so the reading
|
|
54
|
+
// order in the UI matches the model's emission order.
|
|
55
|
+
if (chunk.type === "thinking") {
|
|
56
|
+
if (chunk.text) {
|
|
57
|
+
await this.flushText();
|
|
58
|
+
await this.writer({
|
|
59
|
+
jsonrpc: "2.0",
|
|
60
|
+
method: "event/thinking",
|
|
61
|
+
params: { text: chunk.text },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
await this.flushText();
|
|
67
|
+
await this.emitBoundary(chunk);
|
|
68
|
+
}
|
|
69
|
+
await this.flushText();
|
|
70
|
+
}
|
|
71
|
+
async flushText() {
|
|
72
|
+
if (this.bufSize === 0)
|
|
73
|
+
return;
|
|
74
|
+
const payload = this.buf.join("");
|
|
75
|
+
this.buf = [];
|
|
76
|
+
this.bufSize = 0;
|
|
77
|
+
await this.writer(textEvent(payload));
|
|
78
|
+
}
|
|
79
|
+
async emitBoundary(chunk) {
|
|
80
|
+
switch (chunk.type) {
|
|
81
|
+
case "tool_use_start":
|
|
82
|
+
await this.writer(toolUseStartEvent(chunk.toolId, chunk.toolName, chunk.toolInput));
|
|
83
|
+
return;
|
|
84
|
+
case "tool_use_progress":
|
|
85
|
+
await this.writer(toolUseProgressEvent(chunk.toolId, chunk.text));
|
|
86
|
+
return;
|
|
87
|
+
case "tool_use_end":
|
|
88
|
+
await this.writer(toolUseEndEvent(chunk.toolId, chunk.result));
|
|
89
|
+
return;
|
|
90
|
+
case "stream_end":
|
|
91
|
+
await this.writer(endEvent(chunk.stopReason));
|
|
92
|
+
return;
|
|
93
|
+
case "usage":
|
|
94
|
+
await this.writer({
|
|
95
|
+
jsonrpc: "2.0",
|
|
96
|
+
method: "event/status",
|
|
97
|
+
params: {
|
|
98
|
+
tokensIn: chunk.tokensIn,
|
|
99
|
+
tokensOut: chunk.tokensOut,
|
|
100
|
+
// Phase 322: forward the cache split (undefined for providers
|
|
101
|
+
// without prompt caching) so /context can show reused vs fresh.
|
|
102
|
+
...(chunk.cacheReadTokens !== undefined
|
|
103
|
+
? { cacheReadTokens: chunk.cacheReadTokens }
|
|
104
|
+
: {}),
|
|
105
|
+
...(chunk.freshTokens !== undefined
|
|
106
|
+
? { freshTokens: chunk.freshTokens }
|
|
107
|
+
: {}),
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
case "rate_limit": {
|
|
112
|
+
// Phase 44: route claude's rate_limit_event into status fields
|
|
113
|
+
// the bar can read directly. One field per kind so the bar
|
|
114
|
+
// can show all three countdowns side by side.
|
|
115
|
+
const params = {};
|
|
116
|
+
if (chunk.kind === "five_hour")
|
|
117
|
+
params.fiveHourResetsAt = chunk.resetsAt;
|
|
118
|
+
else if (chunk.kind === "weekly")
|
|
119
|
+
params.weeklyResetsAt = chunk.resetsAt;
|
|
120
|
+
else if (chunk.kind === "session")
|
|
121
|
+
params.sessionResetsAt = chunk.resetsAt;
|
|
122
|
+
// Phase 110: surface the provider's allow/deny status — the
|
|
123
|
+
// only real near-limit signal (no token caps in the envelope).
|
|
124
|
+
// Only forward when it's something other than the normal
|
|
125
|
+
// "allowed", so the bar stays quiet in the common case.
|
|
126
|
+
// Phase 319: only surface a status worth acting on — a hard block,
|
|
127
|
+
// or a warning whose window is about to reset. A far-out weekly
|
|
128
|
+
// warning (resets in days) is suppressed like "allowed" so the chip
|
|
129
|
+
// doesn't nag at startup when there's plenty of quota left.
|
|
130
|
+
if (chunk.status) {
|
|
131
|
+
if (shouldSurfaceRateLimit(chunk.status, chunk.resetsAt, Date.now())) {
|
|
132
|
+
params.rateLimitStatus = chunk.status;
|
|
133
|
+
// Phase 312: pair the status with its window so the bar can
|
|
134
|
+
// name it ("5h") and show that window's reset countdown.
|
|
135
|
+
params.rateLimitKind = chunk.kind;
|
|
136
|
+
// Phase 314: also forward THIS event's reset time directly.
|
|
137
|
+
// The kind-routed fields above only populate for a recognized
|
|
138
|
+
// window; an unrecognized type otherwise dropped the reset, so
|
|
139
|
+
// the chip showed a bare "[limit: near]" with no countdown.
|
|
140
|
+
params.rateLimitResetsAt = chunk.resetsAt;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// "allowed", or a non-actionable far warning → clear any stale
|
|
144
|
+
// chip. "" (not undefined, which JSON-RPC drops) hides it.
|
|
145
|
+
params.rateLimitStatus = "";
|
|
146
|
+
params.rateLimitKind = "";
|
|
147
|
+
params.rateLimitResetsAt = 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
await this.writer({
|
|
151
|
+
jsonrpc: "2.0",
|
|
152
|
+
method: "event/status",
|
|
153
|
+
params,
|
|
154
|
+
});
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/ipc/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const METHOD_TEXT = "event/text";
|
|
2
|
+
export declare const METHOD_TOOL_USE_START = "event/tool_use_start";
|
|
3
|
+
export declare const METHOD_TOOL_USE_PROGRESS = "event/tool_use_progress";
|
|
4
|
+
export declare const METHOD_TOOL_USE_END = "event/tool_use_end";
|
|
5
|
+
export declare const METHOD_END = "event/end";
|
|
6
|
+
export declare const METHOD_VERDICT = "event/verdict";
|
|
7
|
+
export declare const METHOD_ROLE_STATUS = "event/role_status";
|
|
8
|
+
export interface JsonRpcNotification {
|
|
9
|
+
jsonrpc: "2.0";
|
|
10
|
+
method: string;
|
|
11
|
+
params: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare function textEvent(text: string): JsonRpcNotification;
|
|
14
|
+
export declare function toolUseStartEvent(toolId: string, toolName: string, toolInput: Record<string, unknown>): JsonRpcNotification;
|
|
15
|
+
export declare function toolUseProgressEvent(toolId: string, text: string): JsonRpcNotification;
|
|
16
|
+
export declare function toolUseEndEvent(toolId: string, result: unknown): JsonRpcNotification;
|
|
17
|
+
export declare function endEvent(stopReason: string): JsonRpcNotification;
|
|
18
|
+
export declare function roleStatusEvent(params: {
|
|
19
|
+
role: string;
|
|
20
|
+
status: "running" | "done" | "error";
|
|
21
|
+
elapsedMs?: number;
|
|
22
|
+
/** Phase 173: the provider/model the role runs on (from team.yaml),
|
|
23
|
+
* so the status panel can show which engine each sub-agent uses. */
|
|
24
|
+
provider?: string;
|
|
25
|
+
model?: string;
|
|
26
|
+
}): JsonRpcNotification;
|
|
27
|
+
export declare function verdictEvent(params: {
|
|
28
|
+
iteration: number;
|
|
29
|
+
verdict: string;
|
|
30
|
+
strategy: string;
|
|
31
|
+
rationale: string;
|
|
32
|
+
}): JsonRpcNotification;
|
|
33
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/ipc/events.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,eAAe,CAAC;AACxC,eAAO,MAAM,qBAAqB,yBAAyB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAClE,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AACxD,eAAO,MAAM,UAAU,cAAc,CAAC;AACtC,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AASD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAE3D;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,mBAAmB,CAMrB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,mBAAmB,CAErB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACd,mBAAmB,CAErB;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAEhE;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;yEACqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,mBAAmB,CAEtB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,mBAAmB,CAEtB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// JSON-RPC 2.0 notification builders. Wire format identical to
|
|
2
|
+
// legacy/omg/ipc/events.py so the existing Ink UI keeps working.
|
|
3
|
+
export const METHOD_TEXT = "event/text";
|
|
4
|
+
export const METHOD_TOOL_USE_START = "event/tool_use_start";
|
|
5
|
+
export const METHOD_TOOL_USE_PROGRESS = "event/tool_use_progress";
|
|
6
|
+
export const METHOD_TOOL_USE_END = "event/tool_use_end";
|
|
7
|
+
export const METHOD_END = "event/end";
|
|
8
|
+
export const METHOD_VERDICT = "event/verdict";
|
|
9
|
+
export const METHOD_ROLE_STATUS = "event/role_status";
|
|
10
|
+
function notif(method, params) {
|
|
11
|
+
return { jsonrpc: "2.0", method, params };
|
|
12
|
+
}
|
|
13
|
+
export function textEvent(text) {
|
|
14
|
+
return notif(METHOD_TEXT, { text });
|
|
15
|
+
}
|
|
16
|
+
export function toolUseStartEvent(toolId, toolName, toolInput) {
|
|
17
|
+
return notif(METHOD_TOOL_USE_START, {
|
|
18
|
+
id: toolId,
|
|
19
|
+
name: toolName,
|
|
20
|
+
input: { ...toolInput },
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function toolUseProgressEvent(toolId, text) {
|
|
24
|
+
return notif(METHOD_TOOL_USE_PROGRESS, { id: toolId, text });
|
|
25
|
+
}
|
|
26
|
+
export function toolUseEndEvent(toolId, result) {
|
|
27
|
+
return notif(METHOD_TOOL_USE_END, { id: toolId, result });
|
|
28
|
+
}
|
|
29
|
+
export function endEvent(stopReason) {
|
|
30
|
+
return notif(METHOD_END, { stop_reason: stopReason });
|
|
31
|
+
}
|
|
32
|
+
// Phase 142: per-role lifecycle so the UI can show live parallel
|
|
33
|
+
// progress (which sub-agent is running / done). Sent on the LIVE writer
|
|
34
|
+
// so parallel reviewers surface individually, even though their text
|
|
35
|
+
// output is buffered until all finish.
|
|
36
|
+
export function roleStatusEvent(params) {
|
|
37
|
+
return notif(METHOD_ROLE_STATUS, { ...params });
|
|
38
|
+
}
|
|
39
|
+
export function verdictEvent(params) {
|
|
40
|
+
return notif(METHOD_VERDICT, { ...params });
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/ipc/events.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,iEAAiE;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAQtD,SAAS,KAAK,CACZ,MAAc,EACd,MAA+B;IAE/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,QAAgB,EAChB,SAAkC;IAElC,OAAO,KAAK,CAAC,qBAAqB,EAAE;QAClC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,IAAY;IAEZ,OAAO,KAAK,CAAC,wBAAwB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,MAAe;IAEf,OAAO,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,UAAkB;IACzC,OAAO,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,iEAAiE;AACjE,wEAAwE;AACxE,qEAAqE;AACrE,uCAAuC;AACvC,MAAM,UAAU,eAAe,CAAC,MAQ/B;IACC,OAAO,KAAK,CAAC,kBAAkB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAK5B;IACC,OAAO,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { JsonRpcNotification } from "./events.js";
|
|
2
|
+
export type RpcWriter = (msg: Record<string, unknown> | JsonRpcNotification) => Promise<void>;
|
|
3
|
+
export type NotificationHandler = (msg: Record<string, unknown>) => Promise<void> | void;
|
|
4
|
+
export declare class RpcError extends Error {
|
|
5
|
+
readonly payload: unknown;
|
|
6
|
+
constructor(payload: unknown);
|
|
7
|
+
}
|
|
8
|
+
export declare class JsonRpcClient {
|
|
9
|
+
private nextId;
|
|
10
|
+
private readonly pending;
|
|
11
|
+
private readerPromise;
|
|
12
|
+
private readerDone;
|
|
13
|
+
private aborted;
|
|
14
|
+
private readonly onNotification?;
|
|
15
|
+
private readonly writer;
|
|
16
|
+
private readonly inbound;
|
|
17
|
+
constructor(writer: RpcWriter, inbound: AsyncIterable<Record<string, unknown>>, opts?: {
|
|
18
|
+
onNotification?: NotificationHandler;
|
|
19
|
+
});
|
|
20
|
+
start(): void;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
request<T = unknown>(method: string, params: Record<string, unknown>, opts?: {
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
}): Promise<T>;
|
|
25
|
+
private readLoop;
|
|
26
|
+
get isStopped(): boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class TimeoutError extends Error {
|
|
29
|
+
constructor(message: string);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/ipc/rpc.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,KAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,MAAM,MAAM,mBAAmB,GAAG,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBACd,OAAO,EAAE,OAAO;CAK7B;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAG/D,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,IAAI,GAAE;QAAE,cAAc,CAAC,EAAE,mBAAmB,CAAA;KAAO;IAOrD,KAAK,IAAI,IAAI;IAKP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC,CAAC,CAAC;YAkCC,QAAQ;IAwBtB,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/ipc/rpc.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// JSON-RPC 2.0 client: send requests, await responses by id.
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/ipc/rpc.py. Reader task is lazy-started on the
|
|
4
|
+
// first request; stop() cancels it and any pending requests.
|
|
5
|
+
export class RpcError extends Error {
|
|
6
|
+
payload;
|
|
7
|
+
constructor(payload) {
|
|
8
|
+
super(typeof payload === "string" ? payload : JSON.stringify(payload));
|
|
9
|
+
this.name = "RpcError";
|
|
10
|
+
this.payload = payload;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class JsonRpcClient {
|
|
14
|
+
nextId = 0;
|
|
15
|
+
pending = new Map();
|
|
16
|
+
readerPromise = null;
|
|
17
|
+
readerDone = false;
|
|
18
|
+
aborted = false;
|
|
19
|
+
onNotification;
|
|
20
|
+
writer;
|
|
21
|
+
inbound;
|
|
22
|
+
constructor(writer, inbound, opts = {}) {
|
|
23
|
+
this.writer = writer;
|
|
24
|
+
this.inbound = inbound;
|
|
25
|
+
this.onNotification = opts.onNotification;
|
|
26
|
+
}
|
|
27
|
+
start() {
|
|
28
|
+
if (this.readerPromise !== null)
|
|
29
|
+
return;
|
|
30
|
+
this.readerPromise = this.readLoop();
|
|
31
|
+
}
|
|
32
|
+
async stop() {
|
|
33
|
+
this.aborted = true;
|
|
34
|
+
for (const [, p] of this.pending) {
|
|
35
|
+
p.reject(new Error("JsonRpcClient stopped"));
|
|
36
|
+
}
|
|
37
|
+
this.pending.clear();
|
|
38
|
+
}
|
|
39
|
+
async request(method, params, opts = {}) {
|
|
40
|
+
if (this.readerPromise === null)
|
|
41
|
+
this.start();
|
|
42
|
+
this.nextId += 1;
|
|
43
|
+
const id = `r${this.nextId}`;
|
|
44
|
+
const responsePromise = new Promise((resolve, reject) => {
|
|
45
|
+
this.pending.set(id, {
|
|
46
|
+
resolve: (value) => resolve(value),
|
|
47
|
+
reject,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
await this.writer({ jsonrpc: "2.0", id, method, params });
|
|
51
|
+
if (opts.timeoutMs === undefined) {
|
|
52
|
+
try {
|
|
53
|
+
return await responsePromise;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
this.pending.delete(id);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let timer;
|
|
60
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
61
|
+
timer = setTimeout(() => reject(new TimeoutError(`request '${method}' timed out`)), opts.timeoutMs);
|
|
62
|
+
});
|
|
63
|
+
try {
|
|
64
|
+
return await Promise.race([responsePromise, timeoutPromise]);
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
if (timer !== undefined)
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
this.pending.delete(id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async readLoop() {
|
|
73
|
+
try {
|
|
74
|
+
for await (const msg of this.inbound) {
|
|
75
|
+
if (this.aborted)
|
|
76
|
+
return;
|
|
77
|
+
const id = msg.id;
|
|
78
|
+
if (id === undefined || id === null) {
|
|
79
|
+
if (this.onNotification)
|
|
80
|
+
await this.onNotification(msg);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const key = String(id);
|
|
84
|
+
const pending = this.pending.get(key);
|
|
85
|
+
if (pending === undefined)
|
|
86
|
+
continue;
|
|
87
|
+
this.pending.delete(key);
|
|
88
|
+
if ("error" in msg) {
|
|
89
|
+
pending.reject(new RpcError(msg.error));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
pending.resolve(msg.result);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
this.readerDone = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
get isStopped() {
|
|
101
|
+
return this.aborted || this.readerDone;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class TimeoutError extends Error {
|
|
105
|
+
constructor(message) {
|
|
106
|
+
super(message);
|
|
107
|
+
this.name = "TimeoutError";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/ipc/rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Writable, Readable } from "node:stream";
|
|
2
|
+
import type { JsonRpcNotification } from "./events.js";
|
|
3
|
+
export declare class StdoutLineWriter {
|
|
4
|
+
private readonly stream;
|
|
5
|
+
constructor(stream?: NodeJS.WritableStream);
|
|
6
|
+
write(message: JsonRpcNotification | Record<string, unknown>): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function readJsonLines(input: Readable): AsyncIterable<Record<string, unknown>>;
|
|
9
|
+
export declare function parseJsonRpcLines(text: string): Record<string, unknown>[];
|
|
10
|
+
export type StdioWritable = Writable;
|
|
11
|
+
//# sourceMappingURL=stdio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/ipc/stdio.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,MAAM,CAAC,cAA+B;IAG3D,KAAK,CACT,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC;CAMjB;AAED,wBAAuB,aAAa,CAClC,KAAK,EAAE,QAAQ,GACd,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkBxC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAezE;AAGD,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Line-delimited JSON-RPC stdio transport.
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/ipc/stdio.py. Writer + reader for the
|
|
4
|
+
// Python ↔ UI channel; same line format so existing dogfood works.
|
|
5
|
+
import { createInterface } from "node:readline";
|
|
6
|
+
export class StdoutLineWriter {
|
|
7
|
+
stream;
|
|
8
|
+
constructor(stream = process.stdout) {
|
|
9
|
+
this.stream = stream;
|
|
10
|
+
}
|
|
11
|
+
async write(message) {
|
|
12
|
+
const line = JSON.stringify(message) + "\n";
|
|
13
|
+
await new Promise((resolve, reject) => {
|
|
14
|
+
this.stream.write(line, (err) => (err ? reject(err) : resolve()));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function* readJsonLines(input) {
|
|
19
|
+
const rl = createInterface({ input, crlfDelay: Infinity });
|
|
20
|
+
for await (const line of rl) {
|
|
21
|
+
const trimmed = line.trim();
|
|
22
|
+
if (!trimmed)
|
|
23
|
+
continue;
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(trimmed);
|
|
26
|
+
if (typeof parsed === "object" &&
|
|
27
|
+
parsed !== null &&
|
|
28
|
+
!Array.isArray(parsed)) {
|
|
29
|
+
yield parsed;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// skip malformed lines
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function parseJsonRpcLines(text) {
|
|
38
|
+
const out = [];
|
|
39
|
+
for (const raw of text.split("\n")) {
|
|
40
|
+
const line = raw.trim();
|
|
41
|
+
if (!line)
|
|
42
|
+
continue;
|
|
43
|
+
const parsed = JSON.parse(line);
|
|
44
|
+
if (typeof parsed === "object" &&
|
|
45
|
+
parsed !== null &&
|
|
46
|
+
!Array.isArray(parsed)) {
|
|
47
|
+
out.push(parsed);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/ipc/stdio.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,6DAA6D;AAC7D,mEAAmE;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,OAAO,gBAAgB;IAER;IADnB,YACmB,SAAgC,OAAO,CAAC,MAAM;QAA9C,WAAM,GAAN,MAAM,CAAwC;IAC9D,CAAC;IAEJ,KAAK,CAAC,KAAK,CACT,OAAsD;QAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QAC5C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAClC,KAAe;IAEf,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IACE,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,KAAK,IAAI;gBACf,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,CAAC;gBACD,MAAM,MAAiC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,GAAG,GAA8B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IACE,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,KAAK,IAAI;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,MAAiC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|