@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,83 @@
|
|
|
1
|
+
// Phase 128: connect the configured external MCP servers and surface
|
|
2
|
+
// their tools through omg's ToolRegistry, so the agentic loop and the
|
|
3
|
+
// `delegate` tool can call them just like built-in tools.
|
|
4
|
+
//
|
|
5
|
+
// Tools are namespaced `mcp__<server>__<tool>` (the Claude Code
|
|
6
|
+
// convention) to avoid collisions between servers and with built-ins.
|
|
7
|
+
// A failed server is skipped, not fatal — its tools simply don't appear.
|
|
8
|
+
import { McpClient } from "./mcpClient.js";
|
|
9
|
+
/** Build the namespaced registry id for a server's tool. */
|
|
10
|
+
export function mcpToolId(server, tool) {
|
|
11
|
+
return `mcp__${server}__${tool}`;
|
|
12
|
+
}
|
|
13
|
+
export class McpManager {
|
|
14
|
+
clients = new Map();
|
|
15
|
+
/** Spawn + handshake every configured server in parallel. Servers
|
|
16
|
+
* that fail to start are reported in `failed` and skipped. */
|
|
17
|
+
async connectAll(config, opts = {}) {
|
|
18
|
+
const result = { connected: [], failed: [] };
|
|
19
|
+
const entries = Object.entries(config.servers);
|
|
20
|
+
await Promise.all(entries.map(async ([name, cfg]) => {
|
|
21
|
+
const client = new McpClient({
|
|
22
|
+
command: cfg.command,
|
|
23
|
+
args: cfg.args,
|
|
24
|
+
env: cfg.env,
|
|
25
|
+
cwd: cfg.cwd ?? opts.cwd,
|
|
26
|
+
stderr: opts.stderr,
|
|
27
|
+
name,
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
await client.start();
|
|
31
|
+
this.clients.set(name, client);
|
|
32
|
+
result.connected.push(name);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
await client.stop().catch(() => { });
|
|
36
|
+
result.failed.push({
|
|
37
|
+
name,
|
|
38
|
+
error: e instanceof Error ? e.message : String(e),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/** Register every connected server's tools into `registry` under the
|
|
45
|
+
* `mcp__<server>__<tool>` namespace. Returns the registered ids.
|
|
46
|
+
* A tool whose call fails (isError) throws so the registry reports
|
|
47
|
+
* ok:false, matching built-in tool semantics. */
|
|
48
|
+
registerInto(registry) {
|
|
49
|
+
const ids = [];
|
|
50
|
+
for (const [server, client] of this.clients) {
|
|
51
|
+
for (const tool of client.listTools()) {
|
|
52
|
+
const id = mcpToolId(server, tool.name);
|
|
53
|
+
if (registry.has(id))
|
|
54
|
+
continue;
|
|
55
|
+
registry.register(id, async (args) => {
|
|
56
|
+
const r = await client.callTool(tool.name, args);
|
|
57
|
+
if (r.isError)
|
|
58
|
+
throw new Error(r.text || `${id} failed`);
|
|
59
|
+
return r.text;
|
|
60
|
+
});
|
|
61
|
+
ids.push(id);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return ids;
|
|
65
|
+
}
|
|
66
|
+
/** Connected server names. */
|
|
67
|
+
get servers() {
|
|
68
|
+
return [...this.clients.keys()];
|
|
69
|
+
}
|
|
70
|
+
/** Tools discovered per connected server. */
|
|
71
|
+
toolsByServer() {
|
|
72
|
+
const out = {};
|
|
73
|
+
for (const [server, client] of this.clients) {
|
|
74
|
+
out[server] = client.listTools().map((t) => t.name);
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
async stopAll() {
|
|
79
|
+
await Promise.all([...this.clients.values()].map((c) => c.stop()));
|
|
80
|
+
this.clients.clear();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=mcpManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpManager.js","sourceRoot":"","sources":["../../src/core/mcpManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function memoryFile(home?: string): string;
|
|
2
|
+
/** Append one bullet entry to the memory file. Returns the trimmed
|
|
3
|
+
* text that was actually written (empty input is a no-op). */
|
|
4
|
+
export declare function addMemory(text: string, home?: string): string;
|
|
5
|
+
/** Return the full memory file content. Empty string when there's
|
|
6
|
+
* no file yet. Never throws. */
|
|
7
|
+
export declare function loadMemory(home?: string): string;
|
|
8
|
+
/** Parse the file into a list of `- foo` bullets for `/memory list`.
|
|
9
|
+
* Lines that aren't bullets are ignored — the user can edit the
|
|
10
|
+
* file by hand without breaking the slash output. */
|
|
11
|
+
export declare function listMemory(home?: string): string[];
|
|
12
|
+
/** Truncate the memory file to empty. Idempotent.
|
|
13
|
+
* Phase 200b: atomic rewrite so a concurrent `/memory add` doesn't
|
|
14
|
+
* briefly resurrect bytes the clear was supposed to erase. */
|
|
15
|
+
export declare function clearMemory(home?: string): void;
|
|
16
|
+
/** Build the prefix to inject into the first user message of a new
|
|
17
|
+
* tab when `OMG_INJECT_MEMORY=1` is set or `/memory inject on` is
|
|
18
|
+
* the active runtime toggle. Returns empty string when memory is
|
|
19
|
+
* empty — caller can use the result directly without an existence
|
|
20
|
+
* check. */
|
|
21
|
+
export declare function buildInjectionPrefix(home?: string): string;
|
|
22
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAsBA,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAEhE;AAOD;+DAC+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAuB,GAAG,MAAM,CAW7E;AAED;iCACiC;AACjC,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAQhE;AAED;;sDAEsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,EAAE,CASlE;AAED;;+DAE+D;AAC/D,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAuB,GAAG,IAAI,CAQ/D;AAED;;;;aAIa;AACb,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAY1E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Phase 77: persistent user memory.
|
|
2
|
+
//
|
|
3
|
+
// A single markdown file at `~/.omg/memory.md` keeps free-form notes
|
|
4
|
+
// the user wants to carry across sessions — "this project uses uv,
|
|
5
|
+
// not pip", "the api gateway lives in apps/gateway", that kind of
|
|
6
|
+
// thing.
|
|
7
|
+
//
|
|
8
|
+
// The store is intentionally dumb:
|
|
9
|
+
// - One markdown file, appended bullet-style by `/memory add`.
|
|
10
|
+
// - Read-as-string for display and (optional) injection into the
|
|
11
|
+
// first user message of each new tab.
|
|
12
|
+
//
|
|
13
|
+
// No structured entries, no tagging, no metadata. If the user wants
|
|
14
|
+
// structure they can write it directly in the file.
|
|
15
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { atomicWriteSync } from "./atomicWrite.js";
|
|
19
|
+
const DEFAULT_HOME = () => process.env.HOME ?? homedir();
|
|
20
|
+
export function memoryFile(home = DEFAULT_HOME()) {
|
|
21
|
+
return join(home, ".omg", "memory.md");
|
|
22
|
+
}
|
|
23
|
+
function ensureDir(file) {
|
|
24
|
+
const dir = file.slice(0, file.lastIndexOf("/"));
|
|
25
|
+
if (!existsSync(dir))
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
/** Append one bullet entry to the memory file. Returns the trimmed
|
|
29
|
+
* text that was actually written (empty input is a no-op). */
|
|
30
|
+
export function addMemory(text, home = DEFAULT_HOME()) {
|
|
31
|
+
const trimmed = text.trim();
|
|
32
|
+
if (!trimmed)
|
|
33
|
+
return "";
|
|
34
|
+
const file = memoryFile(home);
|
|
35
|
+
ensureDir(file);
|
|
36
|
+
// Make sure the entry is on its own line. Existing files may or
|
|
37
|
+
// may not end in a newline.
|
|
38
|
+
const prefix = existsSync(file) && readFileSync(file, "utf-8").endsWith("\n") ? "" : "\n";
|
|
39
|
+
appendFileSync(file, `${prefix}- ${trimmed}\n`, "utf-8");
|
|
40
|
+
return trimmed;
|
|
41
|
+
}
|
|
42
|
+
/** Return the full memory file content. Empty string when there's
|
|
43
|
+
* no file yet. Never throws. */
|
|
44
|
+
export function loadMemory(home = DEFAULT_HOME()) {
|
|
45
|
+
const file = memoryFile(home);
|
|
46
|
+
if (!existsSync(file))
|
|
47
|
+
return "";
|
|
48
|
+
try {
|
|
49
|
+
return readFileSync(file, "utf-8");
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Parse the file into a list of `- foo` bullets for `/memory list`.
|
|
56
|
+
* Lines that aren't bullets are ignored — the user can edit the
|
|
57
|
+
* file by hand without breaking the slash output. */
|
|
58
|
+
export function listMemory(home = DEFAULT_HOME()) {
|
|
59
|
+
const body = loadMemory(home);
|
|
60
|
+
if (!body)
|
|
61
|
+
return [];
|
|
62
|
+
return body
|
|
63
|
+
.split("\n")
|
|
64
|
+
.map((l) => l.trim())
|
|
65
|
+
.filter((l) => l.startsWith("- "))
|
|
66
|
+
.map((l) => l.slice(2).trim())
|
|
67
|
+
.filter((l) => l.length > 0);
|
|
68
|
+
}
|
|
69
|
+
/** Truncate the memory file to empty. Idempotent.
|
|
70
|
+
* Phase 200b: atomic rewrite so a concurrent `/memory add` doesn't
|
|
71
|
+
* briefly resurrect bytes the clear was supposed to erase. */
|
|
72
|
+
export function clearMemory(home = DEFAULT_HOME()) {
|
|
73
|
+
const file = memoryFile(home);
|
|
74
|
+
if (!existsSync(file))
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
atomicWriteSync(file, "");
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
/* best-effort */
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Build the prefix to inject into the first user message of a new
|
|
84
|
+
* tab when `OMG_INJECT_MEMORY=1` is set or `/memory inject on` is
|
|
85
|
+
* the active runtime toggle. Returns empty string when memory is
|
|
86
|
+
* empty — caller can use the result directly without an existence
|
|
87
|
+
* check. */
|
|
88
|
+
export function buildInjectionPrefix(home = DEFAULT_HOME()) {
|
|
89
|
+
const items = listMemory(home);
|
|
90
|
+
if (items.length === 0)
|
|
91
|
+
return "";
|
|
92
|
+
const bullets = items.map((s) => `- ${s}`).join("\n");
|
|
93
|
+
return [
|
|
94
|
+
"<user-memory>",
|
|
95
|
+
"Context the user wants you to carry across sessions:",
|
|
96
|
+
bullets,
|
|
97
|
+
"</user-memory>",
|
|
98
|
+
"",
|
|
99
|
+
"",
|
|
100
|
+
].join("\n");
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,qEAAqE;AACrE,mEAAmE;AACnE,kEAAkE;AAClE,SAAS;AACT,EAAE;AACF,mCAAmC;AACnC,iEAAiE;AACjE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,oEAAoE;AACpE,oDAAoD;AAEpD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AAEjE,MAAM,UAAU,UAAU,CAAC,OAAe,YAAY,EAAE;IACtD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACzC,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;+DAC+D;AAC/D,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe,YAAY,EAAE;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,gEAAgE;IAChE,4BAA4B;IAC5B,MAAM,MAAM,GACV,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,cAAc,CAAC,IAAI,EAAE,GAAG,MAAM,KAAK,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;iCACiC;AACjC,MAAM,UAAU,UAAU,CAAC,OAAe,YAAY,EAAE;IACtD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;sDAEsD;AACtD,MAAM,UAAU,UAAU,CAAC,OAAe,YAAY,EAAE;IACtD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;+DAE+D;AAC/D,MAAM,UAAU,WAAW,CAAC,OAAe,YAAY,EAAE;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,IAAI,CAAC;QACH,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED;;;;aAIa;AACb,MAAM,UAAU,oBAAoB,CAAC,OAAe,YAAY,EAAE;IAChE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO;QACL,eAAe;QACf,sDAAsD;QACtD,OAAO;QACP,gBAAgB;QAChB,EAAE;QACF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface OmgToolsConfig {
|
|
2
|
+
/** When true, the spawned omg MCP server includes write_file in
|
|
3
|
+
* addition to the read-only defaults. */
|
|
4
|
+
writable?: boolean;
|
|
5
|
+
/** When true, the spawned omg MCP server includes run_shell on
|
|
6
|
+
* top of `writable`. (Shell implies writable in practice — the
|
|
7
|
+
* model that can run shell can already mutate the filesystem.) */
|
|
8
|
+
shell?: boolean;
|
|
9
|
+
/** Override the binary name. Default "omg" picks up whatever the
|
|
10
|
+
* user has on PATH (typically the global symlink to dist/cli.js). */
|
|
11
|
+
command?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OmgServerSpec {
|
|
14
|
+
command: string;
|
|
15
|
+
args: string[];
|
|
16
|
+
}
|
|
17
|
+
/** Compose the {command, args} pair every adapter ultimately renders.
|
|
18
|
+
* Adding a new tier or flag belongs here; the three adapters only
|
|
19
|
+
* consume this and format it for their respective config surfaces. */
|
|
20
|
+
export declare function buildOmgServerSpec(opts: OmgToolsConfig): OmgServerSpec;
|
|
21
|
+
/** Stringify the spec as a TOML inline table — what codex's
|
|
22
|
+
* `-c mcp_servers.omg=…` expects. Kept here so the TOML shape stays
|
|
23
|
+
* next to the JSON one (any future field added to OmgServerSpec
|
|
24
|
+
* needs both renderers).
|
|
25
|
+
*
|
|
26
|
+
* Throws if `command` or any `args` entry contains a `"` — TOML
|
|
27
|
+
* basic strings can't carry an embedded double quote, and silently
|
|
28
|
+
* emitting broken TOML would just produce a `codex` parse error
|
|
29
|
+
* with no hint where it came from. */
|
|
30
|
+
export declare function toCodexTomlInline(spec: OmgServerSpec): string;
|
|
31
|
+
/** JSON envelope claude's `--mcp-config` wants: a wrapper with
|
|
32
|
+
* `mcpServers.omg = {command, args}`. */
|
|
33
|
+
export declare function toClaudeMcpConfig(spec: OmgServerSpec): string;
|
|
34
|
+
//# sourceMappingURL=omgToolManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omgToolManifest.d.ts","sourceRoot":"","sources":["../../src/core/omgToolManifest.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B;8CAC0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;uEAEmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;0EACsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;uEAEuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAKtE;AAED;;;;;;;;uCAQuC;AACvC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAe7D;AAED;0CAC0C;AAC1C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Phase 210: single canonical manifest for omg's MCP-tool exposure.
|
|
2
|
+
//
|
|
3
|
+
// All three CLI adapters (claude/codex/gemini) wire the wrapped model
|
|
4
|
+
// to omg's own MCP server so the model can call read_file / write_file /
|
|
5
|
+
// run_shell / record_decision / ask_user / etc. Each adapter renders
|
|
6
|
+
// the registration in its provider-native format:
|
|
7
|
+
//
|
|
8
|
+
// claude: --mcp-config '{"mcpServers":{"omg":{"command":"omg","args":[...]}}}'
|
|
9
|
+
// codex: -c mcp_servers.omg='{command="omg", args=[...]}' (TOML inline)
|
|
10
|
+
// gemini: ~/.gemini/settings.json → mcpServers.omg = {command:"omg", args:[...]}
|
|
11
|
+
//
|
|
12
|
+
// The {command, args} shape was duplicated three ways. Drift between
|
|
13
|
+
// them is silent — a typo in one adapter, or a new flag added in one
|
|
14
|
+
// place, only shows up when that specific provider runs and the model
|
|
15
|
+
// asks for a missing tool. The audit (External MED: tool manifest
|
|
16
|
+
// consistency) flagged this as one of omg's hidden cross-provider
|
|
17
|
+
// drift surfaces.
|
|
18
|
+
//
|
|
19
|
+
// This module owns the canonical spec. Adapters import
|
|
20
|
+
// `buildOmgServerSpec` to get the {command, args}; they only own the
|
|
21
|
+
// per-provider serialization on top of it.
|
|
22
|
+
/** Compose the {command, args} pair every adapter ultimately renders.
|
|
23
|
+
* Adding a new tier or flag belongs here; the three adapters only
|
|
24
|
+
* consume this and format it for their respective config surfaces. */
|
|
25
|
+
export function buildOmgServerSpec(opts) {
|
|
26
|
+
const args = ["--mcp-serve"];
|
|
27
|
+
if (opts.shell)
|
|
28
|
+
args.push("--shell-tools");
|
|
29
|
+
else if (opts.writable)
|
|
30
|
+
args.push("--write-tools");
|
|
31
|
+
return { command: opts.command ?? "omg", args };
|
|
32
|
+
}
|
|
33
|
+
/** Stringify the spec as a TOML inline table — what codex's
|
|
34
|
+
* `-c mcp_servers.omg=…` expects. Kept here so the TOML shape stays
|
|
35
|
+
* next to the JSON one (any future field added to OmgServerSpec
|
|
36
|
+
* needs both renderers).
|
|
37
|
+
*
|
|
38
|
+
* Throws if `command` or any `args` entry contains a `"` — TOML
|
|
39
|
+
* basic strings can't carry an embedded double quote, and silently
|
|
40
|
+
* emitting broken TOML would just produce a `codex` parse error
|
|
41
|
+
* with no hint where it came from. */
|
|
42
|
+
export function toCodexTomlInline(spec) {
|
|
43
|
+
if (spec.command.includes('"')) {
|
|
44
|
+
throw new Error(`toCodexTomlInline: command contains a double quote (${JSON.stringify(spec.command)}); not representable as a TOML basic string`);
|
|
45
|
+
}
|
|
46
|
+
for (const a of spec.args) {
|
|
47
|
+
if (a.includes('"')) {
|
|
48
|
+
throw new Error(`toCodexTomlInline: args entry contains a double quote (${JSON.stringify(a)}); not representable as a TOML basic string`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const argsToml = spec.args.map((a) => `"${a}"`).join(", ");
|
|
52
|
+
return `{command="${spec.command}", args=[${argsToml}]}`;
|
|
53
|
+
}
|
|
54
|
+
/** JSON envelope claude's `--mcp-config` wants: a wrapper with
|
|
55
|
+
* `mcpServers.omg = {command, args}`. */
|
|
56
|
+
export function toClaudeMcpConfig(spec) {
|
|
57
|
+
return JSON.stringify({ mcpServers: { omg: spec } });
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=omgToolManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omgToolManifest.js","sourceRoot":"","sources":["../../src/core/omgToolManifest.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,qEAAqE;AACrE,kDAAkD;AAClD,EAAE;AACF,kFAAkF;AAClF,6EAA6E;AAC7E,oFAAoF;AACpF,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,kEAAkE;AAClE,kEAAkE;AAClE,kBAAkB;AAClB,EAAE;AACF,uDAAuD;AACvD,qEAAqE;AACrE,2CAA2C;AAoB3C;;uEAEuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACrD,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACtC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;uCAQuC;AACvC,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,6CAA6C,CACjI,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,0DAA0D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,6CAA6C,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,aAAa,IAAI,CAAC,OAAO,YAAY,QAAQ,IAAI,CAAC;AAC3D,CAAC;AAED;0CAC0C;AAC1C,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ConsensusOutcome, LaneVerdict } from "./types.js";
|
|
2
|
+
export interface ConsensusStrategy {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
decide(lanes: readonly LaneVerdict[]): ConsensusOutcome;
|
|
5
|
+
}
|
|
6
|
+
export declare class HierarchyStrategy implements ConsensusStrategy {
|
|
7
|
+
readonly name = "hierarchy";
|
|
8
|
+
private readonly priority;
|
|
9
|
+
constructor(priority: readonly string[]);
|
|
10
|
+
decide(lanes: readonly LaneVerdict[]): ConsensusOutcome;
|
|
11
|
+
}
|
|
12
|
+
export declare class VotingStrategy implements ConsensusStrategy {
|
|
13
|
+
readonly name = "voting";
|
|
14
|
+
decide(lanes: readonly LaneVerdict[]): ConsensusOutcome;
|
|
15
|
+
}
|
|
16
|
+
export declare class DirectorEscalateStrategy implements ConsensusStrategy {
|
|
17
|
+
readonly name = "director_escalate";
|
|
18
|
+
private static readonly SEVERITY;
|
|
19
|
+
decide(lanes: readonly LaneVerdict[]): ConsensusOutcome;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=consensusEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensusEngine.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/consensusEngine.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAW,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB,CAAC;CACzD;AAED,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;gBAEjC,QAAQ,EAAE,SAAS,MAAM,EAAE;IAOvC,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB;CAsBxD;AAED,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,IAAI,YAAY;IAEzB,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB;CAoCxD;AAED,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,QAAQ,CAAC,IAAI,uBAAuB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAK9B;IAEF,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB;CA0BxD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Consensus strategies — turn lane verdicts into one outcome (G3).
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/core/consensus_engine.py. Strategies never
|
|
4
|
+
// return null/undefined; an unparseable input yields "escalate".
|
|
5
|
+
export class HierarchyStrategy {
|
|
6
|
+
name = "hierarchy";
|
|
7
|
+
priority;
|
|
8
|
+
constructor(priority) {
|
|
9
|
+
if (priority.length === 0) {
|
|
10
|
+
throw new Error("HierarchyStrategy requires a non-empty priority list");
|
|
11
|
+
}
|
|
12
|
+
this.priority = [...priority];
|
|
13
|
+
}
|
|
14
|
+
decide(lanes) {
|
|
15
|
+
const byLane = new Map();
|
|
16
|
+
for (const lv of lanes)
|
|
17
|
+
byLane.set(lv.lane, lv);
|
|
18
|
+
for (const laneName of this.priority) {
|
|
19
|
+
const lv = byLane.get(laneName);
|
|
20
|
+
if (lv !== undefined) {
|
|
21
|
+
return {
|
|
22
|
+
final: lv.verdict,
|
|
23
|
+
strategy: this.name,
|
|
24
|
+
lanes,
|
|
25
|
+
rationale: `${laneName} ranked highest, voted ${lv.verdict}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const saw = [...byLane.keys()].sort();
|
|
30
|
+
return {
|
|
31
|
+
final: "escalate",
|
|
32
|
+
strategy: this.name,
|
|
33
|
+
lanes,
|
|
34
|
+
rationale: `no priority lane voted (priority=[${this.priority.join(", ")}], saw=[${saw.join(", ")}])`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class VotingStrategy {
|
|
39
|
+
name = "voting";
|
|
40
|
+
decide(lanes) {
|
|
41
|
+
if (lanes.length === 0) {
|
|
42
|
+
return {
|
|
43
|
+
final: "escalate",
|
|
44
|
+
strategy: this.name,
|
|
45
|
+
lanes,
|
|
46
|
+
rationale: "no lane verdicts to count",
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const tally = new Map();
|
|
50
|
+
for (const lv of lanes) {
|
|
51
|
+
tally.set(lv.verdict, (tally.get(lv.verdict) ?? 0) + 1);
|
|
52
|
+
}
|
|
53
|
+
let topCount = 0;
|
|
54
|
+
for (const c of tally.values())
|
|
55
|
+
if (c > topCount)
|
|
56
|
+
topCount = c;
|
|
57
|
+
const winners = [];
|
|
58
|
+
for (const [v, c] of tally)
|
|
59
|
+
if (c === topCount)
|
|
60
|
+
winners.push(v);
|
|
61
|
+
if (winners.length === 1) {
|
|
62
|
+
return {
|
|
63
|
+
final: winners[0],
|
|
64
|
+
strategy: this.name,
|
|
65
|
+
lanes,
|
|
66
|
+
rationale: `plurality ${topCount}/${lanes.length} for ${winners[0]}`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const tieList = winners
|
|
70
|
+
.map((v) => `'${v}'`)
|
|
71
|
+
.sort()
|
|
72
|
+
.join(", ");
|
|
73
|
+
return {
|
|
74
|
+
final: "escalate",
|
|
75
|
+
strategy: this.name,
|
|
76
|
+
lanes,
|
|
77
|
+
rationale: `tie at ${topCount} votes among [${tieList}]`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export class DirectorEscalateStrategy {
|
|
82
|
+
name = "director_escalate";
|
|
83
|
+
static SEVERITY = [
|
|
84
|
+
"reject",
|
|
85
|
+
"request_rework",
|
|
86
|
+
"escalate",
|
|
87
|
+
"approve",
|
|
88
|
+
];
|
|
89
|
+
decide(lanes) {
|
|
90
|
+
if (lanes.length === 0) {
|
|
91
|
+
return {
|
|
92
|
+
final: "escalate",
|
|
93
|
+
strategy: this.name,
|
|
94
|
+
lanes,
|
|
95
|
+
rationale: "no lane verdicts; escalating by default",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const present = new Set(lanes.map((lv) => lv.verdict));
|
|
99
|
+
for (const v of DirectorEscalateStrategy.SEVERITY) {
|
|
100
|
+
if (present.has(v)) {
|
|
101
|
+
const voters = lanes
|
|
102
|
+
.filter((lv) => lv.verdict === v)
|
|
103
|
+
.map((lv) => lv.lane);
|
|
104
|
+
return {
|
|
105
|
+
final: v,
|
|
106
|
+
strategy: this.name,
|
|
107
|
+
lanes,
|
|
108
|
+
rationale: `${v} raised by [${voters.map((s) => `'${s}'`).join(", ")}]`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Unreachable: SEVERITY covers every Verdict.
|
|
113
|
+
throw new Error("Verdict domain drifted; SEVERITY must cover all members");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=consensusEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensusEngine.js","sourceRoot":"","sources":["../../../src/core/orchestration/consensusEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type NodeStatus = "pending" | "active" | "done" | "rework" | "rejected" | "escalated";
|
|
2
|
+
export interface TaskNode {
|
|
3
|
+
name: string;
|
|
4
|
+
role: string;
|
|
5
|
+
status: NodeStatus;
|
|
6
|
+
notes: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function makeNode(name: string, role: string, status?: NodeStatus): TaskNode;
|
|
9
|
+
export declare class TaskGraph {
|
|
10
|
+
nodes: TaskNode[];
|
|
11
|
+
cursor: number;
|
|
12
|
+
history: string[];
|
|
13
|
+
frozen: boolean;
|
|
14
|
+
constructor(nodes: TaskNode[], cursor?: number);
|
|
15
|
+
get current(): TaskNode | null;
|
|
16
|
+
get isComplete(): boolean;
|
|
17
|
+
advance(): void;
|
|
18
|
+
loopBackTo(role: string, mark: NodeStatus, note?: string): void;
|
|
19
|
+
freeze(note: string): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=dag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/dag.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,UAAU,GACV,WAAW,CAAC;AAEhB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,UAAsB,GAC7B,QAAQ,CAEV;AAED,qBAAa,SAAS;IAMX,KAAK,EAAE,QAAQ,EAAE;IAL1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;gBAGP,KAAK,EAAE,QAAQ,EAAE,EACxB,MAAM,SAAI;IAOZ,IAAI,OAAO,IAAI,QAAQ,GAAG,IAAI,CAG7B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,OAAO,IAAI,IAAI;IAUf,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAkB/D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAY3B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Minimal task DAG the Director mutates in response to verdicts (G3).
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/core/dag.py. Linear cursor over named nodes —
|
|
4
|
+
// branching DAGs land if/when needed.
|
|
5
|
+
export function makeNode(name, role, status = "pending") {
|
|
6
|
+
return { name, role, status, notes: [] };
|
|
7
|
+
}
|
|
8
|
+
export class TaskGraph {
|
|
9
|
+
nodes;
|
|
10
|
+
cursor;
|
|
11
|
+
history;
|
|
12
|
+
frozen;
|
|
13
|
+
constructor(nodes, cursor = 0) {
|
|
14
|
+
this.nodes = nodes;
|
|
15
|
+
this.cursor = cursor;
|
|
16
|
+
this.history = [];
|
|
17
|
+
this.frozen = false;
|
|
18
|
+
}
|
|
19
|
+
get current() {
|
|
20
|
+
if (this.cursor < 0 || this.cursor >= this.nodes.length)
|
|
21
|
+
return null;
|
|
22
|
+
return this.nodes[this.cursor];
|
|
23
|
+
}
|
|
24
|
+
get isComplete() {
|
|
25
|
+
return this.cursor >= this.nodes.length;
|
|
26
|
+
}
|
|
27
|
+
advance() {
|
|
28
|
+
if (this.frozen)
|
|
29
|
+
throw new Error("graph is frozen; advance is not permitted");
|
|
30
|
+
const node = this.current;
|
|
31
|
+
if (node === null)
|
|
32
|
+
throw new Error("no active node to advance from");
|
|
33
|
+
node.status = "done";
|
|
34
|
+
this.history.push(`advance:${node.name}`);
|
|
35
|
+
this.cursor += 1;
|
|
36
|
+
}
|
|
37
|
+
loopBackTo(role, mark, note) {
|
|
38
|
+
if (this.frozen)
|
|
39
|
+
throw new Error("graph is frozen; loopBackTo is not permitted");
|
|
40
|
+
const current = this.current;
|
|
41
|
+
if (current === null)
|
|
42
|
+
throw new Error("no active node to loop back from");
|
|
43
|
+
for (let i = 0; i < this.nodes.length; i++) {
|
|
44
|
+
if (this.nodes[i].role === role) {
|
|
45
|
+
current.status = mark;
|
|
46
|
+
if (note)
|
|
47
|
+
current.notes.push(note);
|
|
48
|
+
this.history.push(`loop:${current.name}->${this.nodes[i].name}`);
|
|
49
|
+
this.cursor = i;
|
|
50
|
+
this.nodes[i].status = "active";
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`no node with role '${role}' to loop back to`);
|
|
55
|
+
}
|
|
56
|
+
freeze(note) {
|
|
57
|
+
if (this.frozen)
|
|
58
|
+
return;
|
|
59
|
+
const node = this.current;
|
|
60
|
+
if (node !== null) {
|
|
61
|
+
node.status = "escalated";
|
|
62
|
+
node.notes.push(note);
|
|
63
|
+
this.history.push(`freeze:${node.name}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.history.push("freeze:<no-current>");
|
|
67
|
+
}
|
|
68
|
+
this.frozen = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=dag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../../src/core/orchestration/dag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ConsensusOutcome, LaneVerdict } from "./types.js";
|
|
2
|
+
import type { ConsensusStrategy } from "./consensusEngine.js";
|
|
3
|
+
import { type TaskGraph } from "./dag.js";
|
|
4
|
+
export declare class Director {
|
|
5
|
+
private readonly strategy;
|
|
6
|
+
constructor(strategy: ConsensusStrategy);
|
|
7
|
+
get strategyName(): string;
|
|
8
|
+
adjudicate(lanes: readonly LaneVerdict[], graph?: TaskGraph | null, reworkRole?: string): ConsensusOutcome;
|
|
9
|
+
private apply;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=director.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"director.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/director.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,iBAAiB;IAExD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,UAAU,CACR,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,KAAK,GAAE,SAAS,GAAG,IAAW,EAC9B,UAAU,SAAgB,GACzB,gBAAgB;IAQnB,OAAO,CAAC,KAAK;CAoBd"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Director — runs a consensus strategy and mutates the graph (G3).
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/core/director.py. Every adjudicate() returns
|
|
4
|
+
// exactly one ConsensusOutcome — silent stalls are impossible.
|
|
5
|
+
export class Director {
|
|
6
|
+
strategy;
|
|
7
|
+
constructor(strategy) {
|
|
8
|
+
this.strategy = strategy;
|
|
9
|
+
}
|
|
10
|
+
get strategyName() {
|
|
11
|
+
return this.strategy.name;
|
|
12
|
+
}
|
|
13
|
+
adjudicate(lanes, graph = null, reworkRole = "implementer") {
|
|
14
|
+
const outcome = this.strategy.decide(lanes);
|
|
15
|
+
if (graph !== null && !graph.frozen && graph.current !== null) {
|
|
16
|
+
this.apply(outcome, graph, reworkRole);
|
|
17
|
+
}
|
|
18
|
+
return outcome;
|
|
19
|
+
}
|
|
20
|
+
apply(outcome, graph, reworkRole) {
|
|
21
|
+
switch (outcome.final) {
|
|
22
|
+
case "approve":
|
|
23
|
+
graph.advance();
|
|
24
|
+
return;
|
|
25
|
+
case "reject":
|
|
26
|
+
graph.loopBackTo(reworkRole, "rejected", outcome.rationale);
|
|
27
|
+
return;
|
|
28
|
+
case "request_rework":
|
|
29
|
+
graph.loopBackTo(reworkRole, "rework", outcome.rationale);
|
|
30
|
+
return;
|
|
31
|
+
case "escalate":
|
|
32
|
+
graph.freeze(outcome.rationale);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=director.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"director.js","sourceRoot":"","sources":["../../../src/core/orchestration/director.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,oEAAoE;AACpE,+DAA+D;AAM/D,MAAM,OAAO,QAAQ;IACU;IAA7B,YAA6B,QAA2B;QAA3B,aAAQ,GAAR,QAAQ,CAAmB;IAAG,CAAC;IAE5D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,UAAU,CACR,KAA6B,EAC7B,QAA0B,IAAI,EAC9B,UAAU,GAAG,aAAa;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CACX,OAAyB,EACzB,KAAgB,EAChB,UAAkB;QAElB,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,KAAK,SAAS;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO;YACT,KAAK,QAAQ;gBACX,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5D,OAAO;YACT,KAAK,gBAAgB;gBACnB,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1D,OAAO;YACT,KAAK,UAAU;gBACb,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAChC,OAAO;QACX,CAAC;IACH,CAAC;CACF"}
|