@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,65 @@
|
|
|
1
|
+
// Phase 72: persist the list of open tabs across omg restarts.
|
|
2
|
+
//
|
|
3
|
+
// Scope is *layout*, not content — name, provider, model, cwd, and
|
|
4
|
+
// (when the CLI emitted one) sessionId. Conversation messages are
|
|
5
|
+
// deliberately excluded; if the user wants to revive a conversation
|
|
6
|
+
// they /resume the saved sessionId.
|
|
7
|
+
//
|
|
8
|
+
// State lives at `~/.omg/tabs/<pid-or-host>.json`. We use a single
|
|
9
|
+
// canonical filename per host so a second omg launching on the same
|
|
10
|
+
// machine picks up the previous run's tabs. The pid suffix is only
|
|
11
|
+
// used during writes (atomic rename) to avoid two omg instances
|
|
12
|
+
// racing each other.
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { atomicWriteSync } from "./atomicWrite.js";
|
|
17
|
+
const DEFAULT_HOME = () => process.env.HOME ?? homedir();
|
|
18
|
+
export function tabsFile(home = DEFAULT_HOME()) {
|
|
19
|
+
return join(home, ".omg", "tabs", "state.json");
|
|
20
|
+
}
|
|
21
|
+
function ensureDir(file) {
|
|
22
|
+
const dir = file.slice(0, file.lastIndexOf("/"));
|
|
23
|
+
if (!existsSync(dir))
|
|
24
|
+
mkdirSync(dir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
/** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
|
|
27
|
+
export function saveTabs(state, home = DEFAULT_HOME()) {
|
|
28
|
+
const file = tabsFile(home);
|
|
29
|
+
ensureDir(file);
|
|
30
|
+
atomicWriteSync(file, JSON.stringify(state, null, 2));
|
|
31
|
+
}
|
|
32
|
+
/** Load the snapshot, or null if there isn't one (or it's malformed
|
|
33
|
+
* / a version we don't recognise). Never throws. */
|
|
34
|
+
export function loadTabs(home = DEFAULT_HOME()) {
|
|
35
|
+
const file = tabsFile(home);
|
|
36
|
+
if (!existsSync(file))
|
|
37
|
+
return null;
|
|
38
|
+
try {
|
|
39
|
+
const raw = readFileSync(file, "utf-8");
|
|
40
|
+
const parsed = JSON.parse(raw);
|
|
41
|
+
if (parsed.version !== 1)
|
|
42
|
+
return null;
|
|
43
|
+
if (!Array.isArray(parsed.tabs))
|
|
44
|
+
return null;
|
|
45
|
+
return parsed;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Drop the saved file. Kept exported so tests + future slash
|
|
52
|
+
* commands (`/tabs reset`) can wipe layout; the legacy
|
|
53
|
+
* `--reset-tabs` flag was removed in Phase 264. Idempotent. */
|
|
54
|
+
export function clearTabs(home = DEFAULT_HOME()) {
|
|
55
|
+
const file = tabsFile(home);
|
|
56
|
+
if (existsSync(file)) {
|
|
57
|
+
try {
|
|
58
|
+
unlinkSync(file);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* best-effort */
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=tabPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabPersistence.js","sourceRoot":"","sources":["../../../src/core/state/tabPersistence.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,oEAAoE;AACpE,oCAAoC;AACpC,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,gEAAgE;AAChE,qBAAqB;AAErB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsBnD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CACtB,KAAqB,EACrB,OAAe,YAAY,EAAE;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;qDACqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,SAAS,CAAC,OAAe,YAAY,EAAE;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface PersistedTab {
|
|
2
|
+
name: string;
|
|
3
|
+
provider: string;
|
|
4
|
+
model: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
autoNamed: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface PersistedState {
|
|
10
|
+
/** Schema version. Bump when the shape changes incompatibly so
|
|
11
|
+
* older / newer omg can refuse to load instead of crashing. */
|
|
12
|
+
version: 1;
|
|
13
|
+
/** Saved at (ms epoch). For debugging only. */
|
|
14
|
+
savedAt: number;
|
|
15
|
+
/** Active tab when the snapshot was taken. */
|
|
16
|
+
activeTab: string;
|
|
17
|
+
tabs: PersistedTab[];
|
|
18
|
+
}
|
|
19
|
+
export declare function tabsFile(home?: string): string;
|
|
20
|
+
/** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
|
|
21
|
+
export declare function saveTabs(state: PersistedState, home?: string): void;
|
|
22
|
+
/** Load the snapshot, or null if there isn't one (or it's malformed
|
|
23
|
+
* / a version we don't recognise). Never throws. */
|
|
24
|
+
export declare function loadTabs(home?: string): PersistedState | null;
|
|
25
|
+
/** Drop the saved file. Kept exported so tests + future slash
|
|
26
|
+
* commands (`/tabs reset`) can wipe layout; the legacy
|
|
27
|
+
* `--reset-tabs` flag was removed in Phase 264. Idempotent. */
|
|
28
|
+
export declare function clearTabs(home?: string): void;
|
|
29
|
+
//# sourceMappingURL=tabPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabPersistence.d.ts","sourceRoot":"","sources":["../../src/core/tabPersistence.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B;oEACgE;IAChE,OAAO,EAAE,CAAC,CAAC;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAID,wBAAgB,QAAQ,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAE9D;AAOD,oEAAoE;AACpE,wBAAgB,QAAQ,CACtB,KAAK,EAAE,cAAc,EACrB,IAAI,GAAE,MAAuB,GAC5B,IAAI,CAIN;AAED;qDACqD;AACrD,wBAAgB,QAAQ,CAAC,IAAI,GAAE,MAAuB,GAAG,cAAc,GAAG,IAAI,CAY7E;AAED;;gEAEgE;AAChE,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAuB,GAAG,IAAI,CAS7D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Phase 72: persist the list of open tabs across omg restarts.
|
|
2
|
+
//
|
|
3
|
+
// Scope is *layout*, not content — name, provider, model, cwd, and
|
|
4
|
+
// (when the CLI emitted one) sessionId. Conversation messages are
|
|
5
|
+
// deliberately excluded; if the user wants to revive a conversation
|
|
6
|
+
// they /resume the saved sessionId.
|
|
7
|
+
//
|
|
8
|
+
// State lives at `~/.omg/tabs/<pid-or-host>.json`. We use a single
|
|
9
|
+
// canonical filename per host so a second omg launching on the same
|
|
10
|
+
// machine picks up the previous run's tabs. The pid suffix is only
|
|
11
|
+
// used during writes (atomic rename) to avoid two omg instances
|
|
12
|
+
// racing each other.
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { atomicWriteSync } from "./atomicWrite.js";
|
|
17
|
+
const DEFAULT_HOME = () => process.env.HOME ?? homedir();
|
|
18
|
+
export function tabsFile(home = DEFAULT_HOME()) {
|
|
19
|
+
return join(home, ".omg", "tabs", "state.json");
|
|
20
|
+
}
|
|
21
|
+
function ensureDir(file) {
|
|
22
|
+
const dir = file.slice(0, file.lastIndexOf("/"));
|
|
23
|
+
if (!existsSync(dir))
|
|
24
|
+
mkdirSync(dir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
/** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
|
|
27
|
+
export function saveTabs(state, home = DEFAULT_HOME()) {
|
|
28
|
+
const file = tabsFile(home);
|
|
29
|
+
ensureDir(file);
|
|
30
|
+
atomicWriteSync(file, JSON.stringify(state, null, 2));
|
|
31
|
+
}
|
|
32
|
+
/** Load the snapshot, or null if there isn't one (or it's malformed
|
|
33
|
+
* / a version we don't recognise). Never throws. */
|
|
34
|
+
export function loadTabs(home = DEFAULT_HOME()) {
|
|
35
|
+
const file = tabsFile(home);
|
|
36
|
+
if (!existsSync(file))
|
|
37
|
+
return null;
|
|
38
|
+
try {
|
|
39
|
+
const raw = readFileSync(file, "utf-8");
|
|
40
|
+
const parsed = JSON.parse(raw);
|
|
41
|
+
if (parsed.version !== 1)
|
|
42
|
+
return null;
|
|
43
|
+
if (!Array.isArray(parsed.tabs))
|
|
44
|
+
return null;
|
|
45
|
+
return parsed;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Drop the saved file. Kept exported so tests + future slash
|
|
52
|
+
* commands (`/tabs reset`) can wipe layout; the legacy
|
|
53
|
+
* `--reset-tabs` flag was removed in Phase 264. Idempotent. */
|
|
54
|
+
export function clearTabs(home = DEFAULT_HOME()) {
|
|
55
|
+
const file = tabsFile(home);
|
|
56
|
+
if (existsSync(file)) {
|
|
57
|
+
try {
|
|
58
|
+
unlinkSync(file);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* best-effort */
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=tabPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabPersistence.js","sourceRoot":"","sources":["../../src/core/tabPersistence.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,oEAAoE;AACpE,oCAAoC;AACpC,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,gEAAgE;AAChE,qBAAqB;AAErB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsBnD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CACtB,KAAqB,EACrB,OAAe,YAAY,EAAE;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;qDACqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,SAAS,CAAC,OAAe,YAAY,EAAE;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ConsensusOutcome, Verdict } from "./types.js";
|
|
2
|
+
import type { LLMAdapter } from "./adapter.js";
|
|
3
|
+
import { RoleRouter } from "./roleRouter.js";
|
|
4
|
+
import { type ConsensusStrategy } from "./consensusEngine.js";
|
|
5
|
+
import type { ToolGate } from "./tools/toolGate.js";
|
|
6
|
+
import type { ToolRegistry } from "./tools/tools.js";
|
|
7
|
+
import { type WriterFn } from "../ipc/dispatcher.js";
|
|
8
|
+
export type AdapterFactory = (role: string) => LLMAdapter;
|
|
9
|
+
export interface TeamRunOpts {
|
|
10
|
+
implementerRole?: string;
|
|
11
|
+
reviewerRoles?: readonly string[];
|
|
12
|
+
strategy?: ConsensusStrategy;
|
|
13
|
+
maxIterations?: number;
|
|
14
|
+
/** Phase 102: when set, run this role first to break the task into
|
|
15
|
+
* a numbered plan, then hand the plan to the implementer as extra
|
|
16
|
+
* context. Typically "planner". Omit to keep the straight
|
|
17
|
+
* implementer→review loop. */
|
|
18
|
+
plannerRole?: string;
|
|
19
|
+
/** Phase 149: abort the pipeline between role turns. The caller also
|
|
20
|
+
* SIGTERMs the in-flight adapter so the current role stops now; this
|
|
21
|
+
* signal stops the loop from starting the next role. */
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
export declare class TeamRunner {
|
|
25
|
+
private readonly router;
|
|
26
|
+
private readonly writer;
|
|
27
|
+
private readonly adapterFor;
|
|
28
|
+
private readonly opts;
|
|
29
|
+
private readonly compressor;
|
|
30
|
+
constructor(router: RoleRouter, writer: WriterFn, adapterFor: AdapterFactory, opts?: {
|
|
31
|
+
toolRegistry?: ToolRegistry;
|
|
32
|
+
toolGate?: ToolGate;
|
|
33
|
+
});
|
|
34
|
+
runTeam(prompt: string, opts?: TeamRunOpts): Promise<ConsensusOutcome>;
|
|
35
|
+
private captureTurn;
|
|
36
|
+
private captureTurnInto;
|
|
37
|
+
private banner;
|
|
38
|
+
private emitRole;
|
|
39
|
+
private emitVerdict;
|
|
40
|
+
}
|
|
41
|
+
export declare function parseVerdictFromText(text: string): Verdict;
|
|
42
|
+
//# sourceMappingURL=teamRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamRunner.d.ts","sourceRoot":"","sources":["../../src/core/teamRunner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,OAAO,EACR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQtE,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;mCAG+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;6DAEyD;IACzD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG5B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,cAAc,EAC1B,IAAI,GAAE;QACrB,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;KAChB;IAKF,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC;YAmKd,WAAW;YAWX,eAAe;YAqCf,MAAM;YASN,QAAQ;YAmBR,WAAW;CAa1B;AAQD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiB1D"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
// TeamRunner — multi-role orchestration (implementer → reviewers → director).
|
|
2
|
+
// Mirror of legacy/omg/core/team_runner.py (phase 8 + 8.5 + 14).
|
|
3
|
+
import { ContextCompressor } from "./context/contextCompressor.js";
|
|
4
|
+
import { Director } from "./director.js";
|
|
5
|
+
import { DirectorEscalateStrategy, } from "./consensusEngine.js";
|
|
6
|
+
import { interceptToolCalls } from "./tools/toolInterceptor.js";
|
|
7
|
+
import { EventDispatcher } from "../ipc/dispatcher.js";
|
|
8
|
+
import { METHOD_TEXT, roleStatusEvent, verdictEvent, } from "../ipc/events.js";
|
|
9
|
+
export class TeamRunner {
|
|
10
|
+
router;
|
|
11
|
+
writer;
|
|
12
|
+
adapterFor;
|
|
13
|
+
opts;
|
|
14
|
+
compressor;
|
|
15
|
+
constructor(router, writer, adapterFor, opts = {}) {
|
|
16
|
+
this.router = router;
|
|
17
|
+
this.writer = writer;
|
|
18
|
+
this.adapterFor = adapterFor;
|
|
19
|
+
this.opts = opts;
|
|
20
|
+
this.compressor = new ContextCompressor(router);
|
|
21
|
+
}
|
|
22
|
+
async runTeam(prompt, opts = {}) {
|
|
23
|
+
const implementerRole = opts.implementerRole ?? "implementer";
|
|
24
|
+
const reviewerRoles = opts.reviewerRoles ?? ["reviewer"];
|
|
25
|
+
const maxIterations = opts.maxIterations ?? 3;
|
|
26
|
+
if (reviewerRoles.length === 0) {
|
|
27
|
+
throw new Error("reviewerRoles must contain at least one role");
|
|
28
|
+
}
|
|
29
|
+
const strategy = opts.strategy ?? new DirectorEscalateStrategy();
|
|
30
|
+
const director = new Director(strategy);
|
|
31
|
+
// Phase 149: bail between role turns when the caller cancels.
|
|
32
|
+
const abortIfCancelled = () => {
|
|
33
|
+
if (opts.signal?.aborted)
|
|
34
|
+
throw new Error("team run cancelled");
|
|
35
|
+
};
|
|
36
|
+
// Phase 102: optional planning pass. The planner role decomposes
|
|
37
|
+
// the task into a numbered plan, which becomes a Bundle handed to
|
|
38
|
+
// the implementer on every iteration — so the implementer works
|
|
39
|
+
// from an explicit plan rather than the raw prompt alone.
|
|
40
|
+
let planBundle = null;
|
|
41
|
+
if (opts.plannerRole) {
|
|
42
|
+
abortIfCancelled();
|
|
43
|
+
await this.banner(`◆ planning · ${opts.plannerRole}\n`);
|
|
44
|
+
const planPrompt = "Break the following task into a short numbered plan " +
|
|
45
|
+
"(steps, files to touch, risks). Keep it tight — this guides " +
|
|
46
|
+
"the implementer, it is not the implementation.\n\n" +
|
|
47
|
+
`Task:\n${prompt}`;
|
|
48
|
+
await this.emitRole(opts.plannerRole, "running");
|
|
49
|
+
const plannerStart = Date.now();
|
|
50
|
+
const planText = await this.captureTurn(opts.plannerRole, planPrompt);
|
|
51
|
+
await this.emitRole(opts.plannerRole, "done", Date.now() - plannerStart);
|
|
52
|
+
planBundle = {
|
|
53
|
+
kind: "plan",
|
|
54
|
+
source: `${opts.plannerRole}-plan.txt`,
|
|
55
|
+
body: planText,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
let workingPrompt = prompt;
|
|
59
|
+
let lastOutcome = null;
|
|
60
|
+
for (let iteration = 0; iteration < maxIterations; iteration++) {
|
|
61
|
+
abortIfCancelled();
|
|
62
|
+
await this.banner(`◆ iteration ${iteration + 1}/${maxIterations} · implementer\n`);
|
|
63
|
+
// Phase 102: hand the plan (if any) to the implementer as a
|
|
64
|
+
// bundle so it's compressed/packed alongside the prompt.
|
|
65
|
+
const implBundles = planBundle ? [planBundle] : [];
|
|
66
|
+
await this.emitRole(implementerRole, "running");
|
|
67
|
+
const implStart = Date.now();
|
|
68
|
+
const implText = await this.captureTurn(implementerRole, workingPrompt, implBundles);
|
|
69
|
+
await this.emitRole(implementerRole, "done", Date.now() - implStart);
|
|
70
|
+
const reviewBundle = {
|
|
71
|
+
kind: "impl_output",
|
|
72
|
+
source: `impl-iter-${iteration + 1}.txt`,
|
|
73
|
+
body: implText,
|
|
74
|
+
};
|
|
75
|
+
const reviewPrompt = "Review the following implementation. Reply with one of " +
|
|
76
|
+
"APPROVE, REJECT, REQUEST_REWORK, or ESCALATE as the first word, " +
|
|
77
|
+
"followed by your reasoning.";
|
|
78
|
+
// Parallel reviewer execution. Each lane's events are buffered
|
|
79
|
+
// into its own bucket so stdout/UI doesn't interleave. After all
|
|
80
|
+
// reviewers complete, buffers flush in declared role order.
|
|
81
|
+
abortIfCancelled();
|
|
82
|
+
const buckets = reviewerRoles.map(() => []);
|
|
83
|
+
const tasks = reviewerRoles.map((role, i) => (async () => {
|
|
84
|
+
// Phase 142: role_status goes to the LIVE writer so each
|
|
85
|
+
// parallel reviewer's running/done shows individually, even
|
|
86
|
+
// though its text output stays buffered until all finish.
|
|
87
|
+
await this.emitRole(role, "running");
|
|
88
|
+
const start = Date.now();
|
|
89
|
+
const text = await this.captureTurnInto(role, reviewPrompt, [reviewBundle], async (msg) => {
|
|
90
|
+
buckets[i].push(msg);
|
|
91
|
+
});
|
|
92
|
+
await this.emitRole(role, "done", Date.now() - start);
|
|
93
|
+
return text;
|
|
94
|
+
})());
|
|
95
|
+
const reviewTextResults = await Promise.all(tasks);
|
|
96
|
+
const lanes = [];
|
|
97
|
+
const reviewTexts = [];
|
|
98
|
+
for (let i = 0; i < reviewerRoles.length; i++) {
|
|
99
|
+
const role = reviewerRoles[i];
|
|
100
|
+
const reviewText = reviewTextResults[i];
|
|
101
|
+
await this.banner(`◆ iteration ${iteration + 1} · ${role}\n`);
|
|
102
|
+
for (const msg of buckets[i]) {
|
|
103
|
+
await this.writer(msg);
|
|
104
|
+
}
|
|
105
|
+
// Phase 223 → 233 (hotfix): when reviewer's text comes back
|
|
106
|
+
// empty, surface a diagnostic line so the user knows WHY the
|
|
107
|
+
// verdict defaulted instead of accepting "escalate" out of
|
|
108
|
+
// thin air. Phase 233 adds the role's adapter info + first
|
|
109
|
+
// emitted event (if any) so the cause is easier to pin —
|
|
110
|
+
// e.g. "codex-cli emitted 0 events; check `codex login`" vs.
|
|
111
|
+
// "codex-cli emitted reasoning only; ask it to include the
|
|
112
|
+
// verdict word in the agent_message".
|
|
113
|
+
if (!reviewText.trim()) {
|
|
114
|
+
const llm = this.router.llmFor(role);
|
|
115
|
+
const events = buckets[i].length;
|
|
116
|
+
const kinds = new Set(buckets[i].map((m) => m.method));
|
|
117
|
+
const hadOnlyEnd = events <= 1 && kinds.has("event/end");
|
|
118
|
+
const detail = hadOnlyEnd
|
|
119
|
+
? `${llm.provider}/${llm.model} returned no body. Run \`${llm.provider.replace("-cli", "")} login\` if the auth expired, or run \`OMG_VERBOSE_STDERR=1 omg\` to see the host CLI's stderr.`
|
|
120
|
+
: `${llm.provider}/${llm.model} emitted ${events} event(s) but no APPROVE/REJECT/REQUEST_REWORK/ESCALATE word.`;
|
|
121
|
+
await this.writer({
|
|
122
|
+
jsonrpc: "2.0",
|
|
123
|
+
method: "event/text",
|
|
124
|
+
params: {
|
|
125
|
+
text: ` [${role}] no verdict found — defaulting to escalate. ${detail}\n`,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
lanes.push({
|
|
130
|
+
lane: role,
|
|
131
|
+
verdict: parseVerdictFromText(reviewText),
|
|
132
|
+
reason: reviewText,
|
|
133
|
+
});
|
|
134
|
+
reviewTexts.push([role, reviewText]);
|
|
135
|
+
}
|
|
136
|
+
const outcome = director.adjudicate(lanes);
|
|
137
|
+
lastOutcome = outcome;
|
|
138
|
+
await this.emitVerdict(iteration + 1, outcome);
|
|
139
|
+
if (outcome.final === "approve" || outcome.final === "escalate") {
|
|
140
|
+
return outcome;
|
|
141
|
+
}
|
|
142
|
+
const feedbackBlock = reviewTexts
|
|
143
|
+
.map(([role, text]) => ` [${role}]: ${text}`)
|
|
144
|
+
.join("\n");
|
|
145
|
+
workingPrompt =
|
|
146
|
+
`Original task:\n${prompt}\n\n` +
|
|
147
|
+
`Reviewer feedback (iteration ${iteration + 1}):\n${feedbackBlock}\n\n` +
|
|
148
|
+
`Address the feedback above and try again.`;
|
|
149
|
+
}
|
|
150
|
+
const final = {
|
|
151
|
+
final: "escalate",
|
|
152
|
+
strategy: strategy.name,
|
|
153
|
+
lanes: lastOutcome !== null ? lastOutcome.lanes : [],
|
|
154
|
+
rationale: `max_iterations=${maxIterations} exhausted without APPROVE`,
|
|
155
|
+
};
|
|
156
|
+
await this.emitVerdict(maxIterations, final);
|
|
157
|
+
return final;
|
|
158
|
+
}
|
|
159
|
+
async captureTurn(role, prompt, bundles = []) {
|
|
160
|
+
return this.captureTurnInto(role, prompt, bundles, (m) => this.writer(m));
|
|
161
|
+
}
|
|
162
|
+
// Phase 16-prep: variant that lets the caller substitute the live
|
|
163
|
+
// writer with a buffer. Parallel reviewer execution uses this to
|
|
164
|
+
// capture each lane's events without interleaving on stdout.
|
|
165
|
+
async captureTurnInto(role, prompt, bundles, sink) {
|
|
166
|
+
const packed = this.compressor.pack(bundles, role);
|
|
167
|
+
const fullPrompt = packed.text ? `${packed.text}\n\n${prompt}` : prompt;
|
|
168
|
+
const adapter = this.adapterFor(role);
|
|
169
|
+
const captured = [];
|
|
170
|
+
// Phase 223 (hotfix): also fold `event/thinking` into the captured
|
|
171
|
+
// text. Some providers (codex-cli's `reasoning` items, claude's
|
|
172
|
+
// extended-thinking chunks) emit the reviewer's actual verdict
|
|
173
|
+
// rationale as a thinking chunk rather than an `agent_message`.
|
|
174
|
+
// Pre-Phase-223, captured stayed empty in that case →
|
|
175
|
+
// `parseVerdictFromText("")` defaulted to "escalate" without the
|
|
176
|
+
// user seeing why. Including thinking text lets parseVerdict find
|
|
177
|
+
// the verdict word and gives non-empty review text to surface.
|
|
178
|
+
const tee = async (msg) => {
|
|
179
|
+
await sink(msg);
|
|
180
|
+
if (msg.method === METHOD_TEXT || msg.method === "event/thinking") {
|
|
181
|
+
const t = msg.params.text;
|
|
182
|
+
if (typeof t === "string")
|
|
183
|
+
captured.push(t);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
let stream = adapter.stream(fullPrompt);
|
|
187
|
+
if (this.opts.toolRegistry !== undefined) {
|
|
188
|
+
stream = interceptToolCalls(stream, this.opts.toolRegistry, {
|
|
189
|
+
gate: this.opts.toolGate,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
await new EventDispatcher(tee).run(stream);
|
|
193
|
+
return captured.join("");
|
|
194
|
+
}
|
|
195
|
+
async banner(text) {
|
|
196
|
+
await this.writer({
|
|
197
|
+
jsonrpc: "2.0",
|
|
198
|
+
method: METHOD_TEXT,
|
|
199
|
+
params: { text },
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// Phase 142: announce a role's lifecycle on the live writer.
|
|
203
|
+
async emitRole(role, status, elapsedMs) {
|
|
204
|
+
// Phase 173: tag the event with the role's provider/model from
|
|
205
|
+
// team.yaml so the status panel shows which engine ran each role.
|
|
206
|
+
const llm = this.router.llmFor(role);
|
|
207
|
+
await this.writer(roleStatusEvent({
|
|
208
|
+
role,
|
|
209
|
+
status,
|
|
210
|
+
elapsedMs,
|
|
211
|
+
provider: llm.provider,
|
|
212
|
+
model: llm.model,
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
async emitVerdict(iteration, outcome) {
|
|
216
|
+
await this.writer(verdictEvent({
|
|
217
|
+
iteration,
|
|
218
|
+
verdict: outcome.final,
|
|
219
|
+
strategy: outcome.strategy,
|
|
220
|
+
rationale: outcome.rationale,
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Reviewers are told to lead with one of APPROVE / REJECT /
|
|
225
|
+
// REQUEST_REWORK / ESCALATE. We match those as WHOLE WORDS and take the
|
|
226
|
+
// EARLIEST one by position, so the stated verdict wins and an incidental
|
|
227
|
+
// mention can't flip it. Phase 145: the old substring scan read "REJECT"
|
|
228
|
+
// inside the URL "/orders/rejected" and turned every APPROVE into a
|
|
229
|
+
// reject — three wasted iterations, then escalate.
|
|
230
|
+
export function parseVerdictFromText(text) {
|
|
231
|
+
const upper = text.toUpperCase();
|
|
232
|
+
const patterns = [
|
|
233
|
+
[/\bREQUEST[_ ]?REWORK\b/, "request_rework"],
|
|
234
|
+
[/\bREWORK\b/, "request_rework"],
|
|
235
|
+
[/\bREJECT\b/, "reject"],
|
|
236
|
+
[/\bESCALATE\b/, "escalate"],
|
|
237
|
+
[/\bAPPROVE\b/, "approve"],
|
|
238
|
+
];
|
|
239
|
+
let best = null;
|
|
240
|
+
for (const [re, verdict] of patterns) {
|
|
241
|
+
const m = re.exec(upper);
|
|
242
|
+
if (m && (best === null || m.index < best.idx)) {
|
|
243
|
+
best = { idx: m.index, verdict };
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return best?.verdict ?? "escalate";
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=teamRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamRunner.js","sourceRoot":"","sources":["../../src/core/teamRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/toolGate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA0B,MAAM,eAAe,CAAC;AAEtE,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/toolGate.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAiB,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMtE,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 "./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/toolInterceptor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAA+B,MAAM,YAAY,CAAC;AACrE,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"}
|