@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@yjjeong/omg` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2026-06-05
|
|
11
|
+
|
|
12
|
+
Initial public release.
|
|
13
|
+
|
|
14
|
+
### Setup & multi-agent ergonomics
|
|
15
|
+
|
|
16
|
+
- **`omg doctor`** — diagnose provider setup in one command: per-provider
|
|
17
|
+
CLI-on-PATH, login signal, optional-SDK + API-key, and (Gemini) MCP-entry
|
|
18
|
+
status, with the exact fix command for each gap. Only flags providers the
|
|
19
|
+
active team preset actually requires. `--json` for scripting; exits
|
|
20
|
+
non-zero when a required provider is unusable.
|
|
21
|
+
- **First-run preflight nudge** — on TUI launch, if a required provider
|
|
22
|
+
isn't usable, the doctor report prints once (never blocks). Self-limiting;
|
|
23
|
+
suppress with `OMG_SKIP_PREFLIGHT=1`; skipped for the stub provider.
|
|
24
|
+
- **AGENTS.md / CLAUDE.md auto-scaffold** — `omg` writes the
|
|
25
|
+
AGENTS.md-as-source-of-truth + `@AGENTS.md`-importing-CLAUDE.md pair at the
|
|
26
|
+
git root when missing (additive only; never rewrites existing files;
|
|
27
|
+
suppress with `OMG_SKIP_AGENTS_MD=1`).
|
|
28
|
+
- **Shared MCP floor + per-role specialization** — first run detects the
|
|
29
|
+
project stack and writes a starter `<gitroot>/.omg/mcp.json` (safe baseline
|
|
30
|
+
enabled, extras opt-in; suppress with `OMG_SKIP_MCP_SCAFFOLD=1`). Project
|
|
31
|
+
config merges over `~/.omg/mcp.json`; per-server `enabled` + `providers`
|
|
32
|
+
tag; a `team.yaml` role may carry `mcp: [server, ...]` to expose only its
|
|
33
|
+
targeted servers. `/mcp enable|disable <name>` toggles them, and `omg
|
|
34
|
+
doctor` lists them. Tools reach all three CLIs through omg's existing MCP
|
|
35
|
+
proxy — configure once, every agent gets it; native provider skills are
|
|
36
|
+
untouched.
|
|
37
|
+
- **Team loop runs to completion** — the team no longer stops after a fixed
|
|
38
|
+
3 rounds; with the verifier as a completion gate it keeps going until the
|
|
39
|
+
original request is fully satisfied, bounded by a safety cap
|
|
40
|
+
(`OMG_TEAM_MAX_ITERATIONS`, default 8).
|
|
41
|
+
|
|
42
|
+
### Highlights
|
|
43
|
+
|
|
44
|
+
- Multi-LLM TUI orchestrator coordinating **Claude + Codex + Gemini** as a
|
|
45
|
+
team with explicit roles (planner / implementer / reviewer / verifier),
|
|
46
|
+
a shared context bus, and a consensus mechanism with director
|
|
47
|
+
adjudication.
|
|
48
|
+
- **Provider modes**: SDK adapters (`claude` / `codex` / `gemini`) plus
|
|
49
|
+
subscription-CLI adapters (`claude-cli` / `codex-cli` / `gemini-cli`) so
|
|
50
|
+
users can pick API-key or OAuth-subscription auth per role.
|
|
51
|
+
- **Tabbed Ink TUI** with per-tab provider, working directory, history,
|
|
52
|
+
predict ghost, and team status panel.
|
|
53
|
+
- **Continuum** — project-scoped, provider-neutral knowledge thread that
|
|
54
|
+
carries decisions and recent turns across provider switches and
|
|
55
|
+
sessions (`~/.omg/continuums/<project-id>.jsonl`).
|
|
56
|
+
- **PreToolUse hook generalization** — `AskUserQuestion` (and future
|
|
57
|
+
interactive tools) proxy through omg's TUI via a generic
|
|
58
|
+
`hookedToolBroker` so the picker actually works under piped stdio.
|
|
59
|
+
- **Built-in MCP server** (`omg --mcp-serve`) exposing read_file /
|
|
60
|
+
list_dir / write_file / run_shell / ask_user / record_decision /
|
|
61
|
+
delegate to external MCP clients.
|
|
62
|
+
- **Slash commands** for tab management, model switching, preset
|
|
63
|
+
hot-swap (claude-led vs codex-led teams), planner pass, ask-mode,
|
|
64
|
+
per-turn auto-commit, prediction toggle, and more.
|
|
65
|
+
- **Opt-in atomic commit per turn** (`/auto-commit on`) — `git commit`
|
|
66
|
+
fires after each successful turn with a summary derived from the
|
|
67
|
+
assistant reply.
|
|
68
|
+
|
|
69
|
+
### Platform support
|
|
70
|
+
|
|
71
|
+
- Linux (x64 / ARM64)
|
|
72
|
+
- macOS (Intel / Apple Silicon)
|
|
73
|
+
- Windows (x64): experimental — named-pipe broker IPC; pending verification
|
|
74
|
+
on a Windows host. WSL also works.
|
|
75
|
+
|
|
76
|
+
### Notes
|
|
77
|
+
|
|
78
|
+
- 1036 unit + integration + e2e tests passing.
|
|
79
|
+
- Build artifact ~470 kB packed / ~2 MB unpacked.
|
|
80
|
+
- Provider SDKs (`@anthropic-ai/sdk`, `openai`, `@google/genai`) are
|
|
81
|
+
optional peer dependencies — install only when using the matching
|
|
82
|
+
SDK provider.
|
|
83
|
+
|
|
84
|
+
[Unreleased]: https://github.com/jyj902/omg/compare/v0.1.0...HEAD
|
|
85
|
+
[0.1.0]: https://github.com/jyj902/omg/releases/tag/v0.1.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 정영재 <yj.jeong@laonpeople.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# omg
|
|
2
|
+
|
|
3
|
+
> Multi-LLM team orchestrator for a single working directory.
|
|
4
|
+
|
|
5
|
+
`omg` coordinates **Claude, Codex, and Gemini** as a team — each LLM gets a
|
|
6
|
+
role (planner / implementer / reviewer / verifier), a single director resolves
|
|
7
|
+
their conflicts, and a shared context bus keeps their handoffs intact.
|
|
8
|
+
|
|
9
|
+
A TUI (Ink/React) sits on top, so the team's reasoning, tool calls, and
|
|
10
|
+
verdicts are visible at a glance.
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
Most multi-LLM tools either pick one model per task or run them in isolation.
|
|
15
|
+
`omg` treats them as a **team with explicit roles and a consensus mechanism** —
|
|
16
|
+
a planning step from Claude actually informs the implementation step from
|
|
17
|
+
Codex, and a review verdict from Gemini doesn't silently stall the pipeline.
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
- **Node ≥ 20**
|
|
22
|
+
- **Linux, macOS, or Windows.** The internal broker IPC uses a Unix-domain
|
|
23
|
+
socket on POSIX and a named pipe on Windows. Windows support is
|
|
24
|
+
**experimental** in v0.x — verify in your environment; WSL also works.
|
|
25
|
+
- **At least one provider CLI installed and logged in**, OR `--demo` /
|
|
26
|
+
`--provider stub` for a no-deps trial. Provider options:
|
|
27
|
+
- [`claude`](https://docs.claude.com/en/docs/claude-code/quickstart)
|
|
28
|
+
— Claude Code; run `claude /login` after install.
|
|
29
|
+
- [`codex`](https://github.com/openai/codex) — Codex CLI; `codex login`
|
|
30
|
+
after install.
|
|
31
|
+
- [`gemini`](https://github.com/google-gemini/gemini-cli) — Gemini CLI;
|
|
32
|
+
`gemini` once for first-time auth.
|
|
33
|
+
|
|
34
|
+
`omg` never sees your provider tokens; it spawns the CLIs you already
|
|
35
|
+
authed.
|
|
36
|
+
|
|
37
|
+
After install, run **`omg doctor`** to verify your providers are installed,
|
|
38
|
+
logged in, and (for Gemini) MCP-registered — it prints the exact fix command
|
|
39
|
+
for any gap, and only flags the providers your active team preset actually
|
|
40
|
+
uses. `omg login <provider>` re-runs a provider CLI's own login when its auth
|
|
41
|
+
has expired.
|
|
42
|
+
|
|
43
|
+
## Quick Start
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install -g @yjjeong/omg
|
|
47
|
+
|
|
48
|
+
omg --demo # no external CLI required
|
|
49
|
+
omg --run "hi" --provider stub --headless # stubbed orchestrator turn
|
|
50
|
+
omg # full TUI (provider CLI required)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`omg --demo` is the safest first-impression — it runs the full pipeline
|
|
54
|
+
against a built-in stub provider, no auth or external binary needed.
|
|
55
|
+
|
|
56
|
+
## Usage examples
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Real provider via OAuth subscription (no API credit consumed).
|
|
60
|
+
omg --run "draft a release note" --provider claude-cli
|
|
61
|
+
omg --run "draft a release note" --provider codex-cli
|
|
62
|
+
omg --run "draft a release note" --provider gemini-cli
|
|
63
|
+
|
|
64
|
+
# Real provider via API key (uses official SDK; installs on demand).
|
|
65
|
+
omg --run "draft a release note" --provider claude # @anthropic-ai/sdk
|
|
66
|
+
omg --run "draft a release note" --provider codex # openai
|
|
67
|
+
omg --run "draft a release note" --provider gemini # @google/genai
|
|
68
|
+
|
|
69
|
+
# Multi-role team with voting consensus.
|
|
70
|
+
omg --team-run "ship a python hello world" --provider claude-cli --headless \
|
|
71
|
+
--reviewers reviewer,verifier --strategy voting
|
|
72
|
+
|
|
73
|
+
# Agentic loop — tool results feed back into the next turn.
|
|
74
|
+
omg --run "demo" --provider stub --tools --loop --headless
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## CLI surface
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
omg [--version] [--help]
|
|
81
|
+
omg doctor [--json] # diagnose provider install / auth
|
|
82
|
+
omg login <claude|codex|gemini> # (re)authenticate a provider CLI
|
|
83
|
+
omg --demo [--headless] [--tools | --write-tools] [--ask]
|
|
84
|
+
omg --run <PROMPT> [--role <ROLE>] [--provider <P>] [--headless]
|
|
85
|
+
[--tools | --write-tools] [--loop --max-steps N]
|
|
86
|
+
omg --team-run <PROMPT> [--reviewers role1,role2,...] [--strategy S]
|
|
87
|
+
[--max-iterations N] [--provider <P>] [--headless]
|
|
88
|
+
[--tools | --write-tools]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Providers**: `policy` (read from `src/policy/team.yaml`), `stub`, `claude`
|
|
92
|
+
/ `codex` / `gemini` (SDK), `claude-cli` / `codex-cli` / `gemini-cli`
|
|
93
|
+
(subscription CLIs).
|
|
94
|
+
|
|
95
|
+
**Consensus strategies**: `escalate` (default — severity-first veto),
|
|
96
|
+
`voting` (plurality), `hierarchy` (top reviewer wins).
|
|
97
|
+
|
|
98
|
+
## Interactive TUI
|
|
99
|
+
|
|
100
|
+
Running `omg` with no flags opens the Ink TUI. Inside:
|
|
101
|
+
|
|
102
|
+
- `/help` shows the full slash command list (`/new`, `/switch`, `/team`,
|
|
103
|
+
`/preset`, `/auto-commit`, `/predict`, `/mcp`, `/memory`, `/clear`, etc.)
|
|
104
|
+
- `Ctrl-O` / `Ctrl-P` cycles tabs; `Opt-1..9` jumps to a tab by index
|
|
105
|
+
- `Ctrl-R` opens reverse history search
|
|
106
|
+
- `Ctrl-Z` / `Ctrl-Y` undo / redo the current input
|
|
107
|
+
- `/quit` or `Ctrl-C` to exit
|
|
108
|
+
|
|
109
|
+
State lives in `~/.omg/`:
|
|
110
|
+
`team-preset`, `plan.json`, `memory.md`, `tabs/`, `continuums/`, `mcp.json`.
|
|
111
|
+
|
|
112
|
+
## Troubleshooting
|
|
113
|
+
|
|
114
|
+
- **Not sure what's misconfigured?** Run `omg doctor` — it reports
|
|
115
|
+
per-provider install / login / MCP status and the exact command to fix
|
|
116
|
+
each gap. `omg doctor --json` emits the same as machine-readable JSON.
|
|
117
|
+
- **"binary not found on PATH"** — install the provider CLI shown in the
|
|
118
|
+
error message, or try `omg --demo` to confirm omg itself works.
|
|
119
|
+
- **TUI doesn't render properly** — use a modern terminal (iTerm2,
|
|
120
|
+
Alacritty, Kitty, Wezterm, recent Terminal.app, recent Windows Terminal
|
|
121
|
+
via WSL). Legacy `xterm` with limited ANSI support may misrender.
|
|
122
|
+
- **Doesn't exit on `/quit`** — `Ctrl-C` twice escalates; please file an
|
|
123
|
+
issue if you hit this consistently.
|
|
124
|
+
- **"Cannot find module '@anthropic-ai/sdk'"** when using `--provider
|
|
125
|
+
claude` (the SDK, not `claude-cli`) — install it: `npm install -g
|
|
126
|
+
@anthropic-ai/sdk`. Provider SDKs are optional peer dependencies.
|
|
127
|
+
|
|
128
|
+
## Platform support
|
|
129
|
+
|
|
130
|
+
| Platform | Status |
|
|
131
|
+
|---|---|
|
|
132
|
+
| Linux (x64 / ARM64) | ✅ Supported |
|
|
133
|
+
| macOS (Intel / Apple Silicon) | ✅ Supported |
|
|
134
|
+
| Windows (x64) | 🧪 Experimental — named-pipe IPC; verify locally. WSL also works. |
|
|
135
|
+
|
|
136
|
+
## Development
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
git clone https://github.com/jyj902/omg.git
|
|
140
|
+
cd omg
|
|
141
|
+
npm install
|
|
142
|
+
npm run build # tsc + copy-assets (verifies dist/cli.js --version)
|
|
143
|
+
npm test # full vitest suite
|
|
144
|
+
npm link # `omg` global symlink → dist/cli.js
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The repo's full design rationale lives in `AGENTS.md` (the single source of
|
|
148
|
+
truth for all agents; `CLAUDE.md` is a thin stub that imports it) and
|
|
149
|
+
`.omg/audit/` (the architectural audit + cleanup queue).
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface CliOptions {
|
|
2
|
+
headless?: boolean;
|
|
3
|
+
demo?: boolean;
|
|
4
|
+
run?: string;
|
|
5
|
+
role: string;
|
|
6
|
+
provider: string;
|
|
7
|
+
teamRun?: string;
|
|
8
|
+
reviewers: string;
|
|
9
|
+
strategy: string;
|
|
10
|
+
maxIterations: string;
|
|
11
|
+
maxSteps: string;
|
|
12
|
+
tools?: boolean;
|
|
13
|
+
writeTools?: boolean;
|
|
14
|
+
shellTools?: boolean;
|
|
15
|
+
cliTools?: string;
|
|
16
|
+
defaultTools?: boolean;
|
|
17
|
+
cliPermissionMode?: string;
|
|
18
|
+
ask?: boolean;
|
|
19
|
+
altScreen?: boolean;
|
|
20
|
+
loop?: boolean;
|
|
21
|
+
mcpServe?: boolean;
|
|
22
|
+
mcpAllow?: string;
|
|
23
|
+
mcpProvider?: string;
|
|
24
|
+
exposeOmgTools?: boolean;
|
|
25
|
+
restoreTabs?: boolean;
|
|
26
|
+
login?: string;
|
|
27
|
+
doctor?: boolean;
|
|
28
|
+
doctorJson?: boolean;
|
|
29
|
+
json?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ParsedCli {
|
|
32
|
+
opts: CliOptions;
|
|
33
|
+
toolsEnabled: boolean;
|
|
34
|
+
writable: boolean;
|
|
35
|
+
shell: boolean;
|
|
36
|
+
adapterOpts: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export declare function parseArgs(argv: string[]): ParsedCli;
|
|
39
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IAItB,KAAK,CAAC,EAAE,MAAM,CAAC;IAKf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAoLnD"}
|
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// omg — CLI argument parsing, extracted from cli.ts (pure move).
|
|
2
|
+
// Builds the Commander program, parses argv, applies the env side
|
|
3
|
+
// effects that gate runtime behaviour (OMG_RESTORE_TABS / OMG_ALT_SCREEN),
|
|
4
|
+
// and derives the tool-tier + adapter-opts blocks the run-modes consume.
|
|
5
|
+
// Behaviour is byte-identical to the pre-split inline parser.
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import { VERSION } from "../index.js";
|
|
8
|
+
export function parseArgs(argv) {
|
|
9
|
+
const program = new Command();
|
|
10
|
+
program
|
|
11
|
+
.name("omg")
|
|
12
|
+
.description("Multi-LLM team orchestrator")
|
|
13
|
+
.version(VERSION, "-V, --version")
|
|
14
|
+
.option("--headless", "Emit JSON-RPC events to stdout instead of launching the UI.")
|
|
15
|
+
.option("--demo", "Run a scripted demo pipeline.")
|
|
16
|
+
.option("--run <PROMPT>", "Run one orchestrator turn against PROMPT.")
|
|
17
|
+
.option("--role <ROLE>", "Role to invoke for --run.", "implementer")
|
|
18
|
+
.option("--provider <P>", "Adapter (policy|stub|claude|codex|gemini|claude-cli|codex-cli|gemini-cli).", "policy")
|
|
19
|
+
.option("--team-run <PROMPT>", "Run a multi-role team against PROMPT.")
|
|
20
|
+
.option("--reviewers <ROLES>", "Comma-separated reviewer roles.", "reviewer")
|
|
21
|
+
.option("--strategy <S>", "Consensus strategy (escalate|voting|hierarchy).", "escalate")
|
|
22
|
+
.option("--max-iterations <N>", "Max team iterations.", "3")
|
|
23
|
+
.option("--max-steps <N>", "Max steps for --run --loop.", "5")
|
|
24
|
+
.option("--tools", "Enable read-only tool execution.")
|
|
25
|
+
.option("--write-tools", "Enable write tools (implies --tools).")
|
|
26
|
+
.option("--shell-tools", "Enable run_shell + write tools. Privileged; pair with --ask.")
|
|
27
|
+
.option("--cli-tools <list>", "(claude-cli only) Activate CLI-native tools; comma- or space-separated, e.g. 'Read,Edit,Bash'. Tools execute inside the CLI; omg shows them but does not re-run.")
|
|
28
|
+
.option("--no-default-tools", "(interactive chat only) Disable the host CLI's native tools. Default is on for interactive chat so the model can actually read/edit files; pass this to chat tool-free.")
|
|
29
|
+
.option("--cli-permission-mode <mode>", "(claude-cli only) Permission mode for --cli-tools (acceptEdits|auto|bypassPermissions|default|dontAsk|plan).")
|
|
30
|
+
.option("--ask", "Require UI permission before each tool call (UI mode only).")
|
|
31
|
+
.option("--alt-screen", "Use Codex-style alternate screen mode. Default is normal-screen transcript mode, which keeps native terminal scrollback, search, and copy.")
|
|
32
|
+
.option("--loop", "Run an agentic multi-step loop with --run.")
|
|
33
|
+
.option("--mcp-serve", "Run omg as an MCP server over stdio. Exposes the registry chosen by --tools/--write-tools/--shell-tools.")
|
|
34
|
+
.option("--mcp-allow <names>", "(with --mcp-serve) Comma-separated external MCP server names to expose; others are withheld. Set per-role by the team pipeline.")
|
|
35
|
+
.option("--mcp-provider <p>", "(with --mcp-serve) Base provider this server child serves, so provider-tagged servers are scoped correctly.")
|
|
36
|
+
.option("--expose-omg-tools", "(claude-cli) Spawn omg's MCP server as a child of the CLI so omg's tools (echo / read_file / ask_user / etc.) are callable from the model alongside the CLI's native tools. On by default for interactive chat.")
|
|
37
|
+
.option("--no-expose-omg-tools", "Opt out of exposing omg's tools (disables the ask_user picker and omg's run_shell/delegate in chat).")
|
|
38
|
+
.option("--restore-tabs", "Re-open the tabs from the previous chat session (~/.omg/tabs/state.json). Conversation content is not restored; sessionId is, so /resume revives a thread.")
|
|
39
|
+
.option("--json", "(omg doctor) Emit the diagnosis as JSON.")
|
|
40
|
+
.allowExcessArguments(true)
|
|
41
|
+
.helpOption("-h, --help");
|
|
42
|
+
program.parse(argv, { from: "user" });
|
|
43
|
+
const opts = program.opts();
|
|
44
|
+
// Phase 293: `omg login [provider]` arrives as positional args (the
|
|
45
|
+
// program only declares options, and allowExcessArguments lets these
|
|
46
|
+
// through). argv "login codex" → program.args ["login", "codex"].
|
|
47
|
+
if (program.args[0] === "login") {
|
|
48
|
+
opts.login = (program.args[1] ?? "").toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
// Phase 344: `omg doctor [--json]`. `--json` rides through as an excess
|
|
51
|
+
// arg (allowExcessArguments), so we read it off program.args directly.
|
|
52
|
+
if (program.args[0] === "doctor") {
|
|
53
|
+
opts.doctor = true;
|
|
54
|
+
opts.doctorJson = !!opts.json;
|
|
55
|
+
}
|
|
56
|
+
// Phase 264: --reset-tabs flag removed — wipe via
|
|
57
|
+
// `rm ~/.omg/tabs/state.json` when a persisted entry's provider is
|
|
58
|
+
// no longer installed. --inject-memory flag removed; runtime
|
|
59
|
+
// `/memory inject [on|off]` is the canonical toggle, with
|
|
60
|
+
// `OMG_INJECT_MEMORY=1` as the equivalent startup env var. The
|
|
61
|
+
// env var path here stays so existing shells/scripts that export
|
|
62
|
+
// it keep working.
|
|
63
|
+
if (opts.restoreTabs) {
|
|
64
|
+
process.env.OMG_RESTORE_TABS = "1";
|
|
65
|
+
}
|
|
66
|
+
if (opts.altScreen) {
|
|
67
|
+
process.env.OMG_ALT_SCREEN = "1";
|
|
68
|
+
}
|
|
69
|
+
const toolsEnabled = !!(opts.tools || opts.writeTools || opts.shellTools);
|
|
70
|
+
const writable = !!(opts.writeTools || opts.shellTools);
|
|
71
|
+
const shell = !!opts.shellTools;
|
|
72
|
+
// Adapter-specific opts threaded down through makeAdapter / make
|
|
73
|
+
// TeamStubAdapter. `cliTools` semantics are provider-specific:
|
|
74
|
+
// claude-cli : comma/space-separated tool whitelist
|
|
75
|
+
// codex-cli : sandbox mode (e.g. "read-only", "workspace-write")
|
|
76
|
+
// gemini-cli : any non-empty value enables --yolo
|
|
77
|
+
// Each adapter parses the raw string itself. Other adapters ignore
|
|
78
|
+
// unknown fields safely.
|
|
79
|
+
// "interactive" = not one of the scripting subcommands. Computed up
|
|
80
|
+
// front because the omg-tools default depends on it. Phase 264:
|
|
81
|
+
// `--chat` is gone; bare invocation always drops into chat, so
|
|
82
|
+
// "interactive" is just "no scripting flag set".
|
|
83
|
+
const scripting = !!opts.run ||
|
|
84
|
+
!!opts.teamRun ||
|
|
85
|
+
!!opts.demo ||
|
|
86
|
+
!!opts.mcpServe ||
|
|
87
|
+
!!opts.headless;
|
|
88
|
+
const interactive = !scripting;
|
|
89
|
+
// Phase 155: expose omg's tools (ask_user picker, run_shell, delegate,
|
|
90
|
+
// external MCP) by default in interactive chat. `--no-expose-omg-tools`
|
|
91
|
+
// opts out (commander sets exposeOmgTools=false). Scripting modes stay
|
|
92
|
+
// off unless explicitly enabled.
|
|
93
|
+
const exposeOmg = opts.exposeOmgTools !== false && interactive;
|
|
94
|
+
const adapterOpts = {};
|
|
95
|
+
if (opts.cliTools)
|
|
96
|
+
adapterOpts.cliTools = opts.cliTools;
|
|
97
|
+
if (opts.cliPermissionMode)
|
|
98
|
+
adapterOpts.permissionMode = opts.cliPermissionMode;
|
|
99
|
+
// Phase 264: --verbose-stderr flag removed; debug toggles belong in
|
|
100
|
+
// env vars. OMG_VERBOSE_STDERR=1 passes the CLI subprocess's full
|
|
101
|
+
// stderr through to omg's stderr (instead of the default filtered
|
|
102
|
+
// stream that drops Codex's "Reading additional input..." / Gemini's
|
|
103
|
+
// YOLO/Ripgrep banners / deprecation warnings).
|
|
104
|
+
if (process.env.OMG_VERBOSE_STDERR === "1") {
|
|
105
|
+
adapterOpts.verboseStderr = true;
|
|
106
|
+
}
|
|
107
|
+
if (exposeOmg) {
|
|
108
|
+
adapterOpts.omgTools = {
|
|
109
|
+
writable: !!opts.writeTools,
|
|
110
|
+
shell: !!opts.shellTools,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Phase 91: interactive chat is a coding assistant. Without
|
|
114
|
+
// tools the model hallucinates them as XML text in its reply
|
|
115
|
+
// (claude-cli without --tools "" disabled emits "<tool_use>..."
|
|
116
|
+
// text-only fallbacks). Leave the host CLI's native tool set on
|
|
117
|
+
// by default for chat; explicit --cli-tools still takes precedence,
|
|
118
|
+
// and --no-default-tools opts out.
|
|
119
|
+
// commander turns --no-default-tools into defaultTools: false.
|
|
120
|
+
// Default is undefined (= treat as on) so chat enables tools.
|
|
121
|
+
if (interactive &&
|
|
122
|
+
!opts.cliTools &&
|
|
123
|
+
!exposeOmg &&
|
|
124
|
+
opts.defaultTools !== false) {
|
|
125
|
+
adapterOpts.disableTools = false;
|
|
126
|
+
}
|
|
127
|
+
return { opts, toolsEnabled, writable, shell, adapterOpts };
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,kEAAkE;AAClE,2EAA2E;AAC3E,yEAAyE;AACzE,8DAA8D;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAgDtC,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,6BAA6B,CAAC;SAC1C,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;SACjC,MAAM,CACL,YAAY,EACZ,6DAA6D,CAC9D;SACA,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;SACrE,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,aAAa,CAAC;SACnE,MAAM,CACL,gBAAgB,EAChB,4EAA4E,EAC5E,QAAQ,CACT;SACA,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;SACtE,MAAM,CACL,qBAAqB,EACrB,iCAAiC,EACjC,UAAU,CACX;SACA,MAAM,CACL,gBAAgB,EAChB,iDAAiD,EACjD,UAAU,CACX;SACA,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,CAAC;SAC3D,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SAC7D,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CACL,eAAe,EACf,8DAA8D,CAC/D;SACA,MAAM,CACL,oBAAoB,EACpB,kKAAkK,CACnK;SACA,MAAM,CACL,oBAAoB,EACpB,yKAAyK,CAC1K;SACA,MAAM,CACL,8BAA8B,EAC9B,8GAA8G,CAC/G;SACA,MAAM,CACL,OAAO,EACP,6DAA6D,CAC9D;SACA,MAAM,CACL,cAAc,EACd,4IAA4I,CAC7I;SACA,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAC9D,MAAM,CACL,aAAa,EACb,0GAA0G,CAC3G;SACA,MAAM,CACL,qBAAqB,EACrB,iIAAiI,CAClI;SACA,MAAM,CACL,oBAAoB,EACpB,6GAA6G,CAC9G;SACA,MAAM,CACL,oBAAoB,EACpB,iNAAiN,CAClN;SACA,MAAM,CACL,uBAAuB,EACvB,sGAAsG,CACvG;SACA,MAAM,CACL,gBAAgB,EAChB,4JAA4J,CAC7J;SACA,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC;SAC5D,oBAAoB,CAAC,IAAI,CAAC;SAC1B,UAAU,CAAC,YAAY,CAAC,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAc,CAAC;IAExC,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,kDAAkD;IAClD,mEAAmE;IACnE,6DAA6D;IAC7D,0DAA0D;IAC1D,+DAA+D;IAC/D,iEAAiE;IACjE,mBAAmB;IACnB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;IACnC,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAEhC,iEAAiE;IACjE,+DAA+D;IAC/D,sDAAsD;IACtD,oEAAoE;IACpE,oDAAoD;IACpD,mEAAmE;IACnE,yBAAyB;IACzB,oEAAoE;IACpE,gEAAgE;IAChE,+DAA+D;IAC/D,iDAAiD;IACjD,MAAM,SAAS,GACb,CAAC,CAAC,IAAI,CAAC,GAAG;QACV,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,IAAI,CAAC,QAAQ;QACf,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClB,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC;IAC/B,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,KAAK,KAAK,IAAI,WAAW,CAAC;IAE/D,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,IAAI,IAAI,CAAC,QAAQ;QAAE,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACxD,IAAI,IAAI,CAAC,iBAAiB;QACxB,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACtD,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,qEAAqE;IACrE,gDAAgD;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;QAC3C,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,WAAW,CAAC,QAAQ,GAAG;YACrB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;SACzB,CAAC;IACJ,CAAC;IACD,4DAA4D;IAC5D,6DAA6D;IAC7D,gEAAgE;IAChE,gEAAgE;IAChE,oEAAoE;IACpE,mCAAmC;IACnC,+DAA+D;IAC/D,8DAA8D;IAC9D,IACE,WAAW;QACX,CAAC,IAAI,CAAC,QAAQ;QACd,CAAC,SAAS;QACV,IAAI,CAAC,YAAY,KAAK,KAAK,EAC3B,CAAC;QACD,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type AutoCommitOutcome = {
|
|
2
|
+
kind: "committed";
|
|
3
|
+
sha: string;
|
|
4
|
+
message: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: "no-changes";
|
|
7
|
+
} | {
|
|
8
|
+
kind: "not-a-repo";
|
|
9
|
+
} | {
|
|
10
|
+
kind: "failed";
|
|
11
|
+
reason: string;
|
|
12
|
+
};
|
|
13
|
+
/** Run one auto-commit pass against `cwd`. Returns an outcome the
|
|
14
|
+
* caller can render as a one-line notification. Never throws. */
|
|
15
|
+
export declare function autoCommit(cwd: string, tabName: string, assistantText: string, paths?: readonly string[]): Promise<AutoCommitOutcome>;
|
|
16
|
+
/** Render an outcome as a one-line user-visible message. Returns null
|
|
17
|
+
* when the outcome is silent (no-changes / not-a-repo — auto-commit
|
|
18
|
+
* is opportunistic, so the absence of work isn't surfaced). */
|
|
19
|
+
export declare function formatAutoCommitOutcome(outcome: AutoCommitOutcome): string | null;
|
|
20
|
+
//# sourceMappingURL=autoCommit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoCommit.d.ts","sourceRoot":"","sources":["../../src/cli/autoCommit.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;kEACkE;AAClE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAKrB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAuE5B;AAQD;;gEAEgE;AAChE,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GACzB,MAAM,GAAG,IAAI,CAUf"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Phase 209: opt-in atomic commit per turn (Aider-style).
|
|
2
|
+
//
|
|
3
|
+
// When a tab has auto-commit enabled, the end of each successful turn
|
|
4
|
+
// fires a best-effort `git add -A && git commit -m "[omg/<tab>] <summary>"`
|
|
5
|
+
// against the tab's cwd. Surfaces the resulting short SHA + message as
|
|
6
|
+
// an `event/text` line in the log; failures (not a repo, no changes,
|
|
7
|
+
// pre-commit hook reject) surface a single warning line and never
|
|
8
|
+
// block the turn.
|
|
9
|
+
//
|
|
10
|
+
// Per [feedback_ui-restraint], default is OFF — auto-commit on a
|
|
11
|
+
// repo with conventional commit hooks would explode the history with
|
|
12
|
+
// "[omg/main] ok" rows.
|
|
13
|
+
import { execFile } from "node:child_process";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
// Phase 154 / Hotfix-post-Phase-218: `detached: true` + `unref()` so a
|
|
16
|
+
// slow pre-commit hook can't keep omg alive past `/quit`. The git
|
|
17
|
+
// child keeps running in the background; if the commit succeeds the
|
|
18
|
+
// user sees the notification on next omg invocation via the repo log,
|
|
19
|
+
// not via in-app event. If pre-commit rejects, the warning line just
|
|
20
|
+
// doesn't surface — acceptable for an opt-in tool that the user can
|
|
21
|
+
// always check with `git log`.
|
|
22
|
+
const execAsync = promisify(execFile);
|
|
23
|
+
const SPAWN_OPTS = { detached: true };
|
|
24
|
+
const SUMMARY_LIMIT = 70;
|
|
25
|
+
/** Run one auto-commit pass against `cwd`. Returns an outcome the
|
|
26
|
+
* caller can render as a one-line notification. Never throws. */
|
|
27
|
+
export async function autoCommit(cwd, tabName, assistantText,
|
|
28
|
+
// Phase 341: when provided, commit ONLY these paths (this tab's touched
|
|
29
|
+
// files) — `git add -- <paths>` + `git commit -- <paths>`, so other tabs'
|
|
30
|
+
// changes in the shared tree are left alone. An empty array means "this
|
|
31
|
+
// tab changed nothing" → no-changes. Omitted = legacy whole-tree `add -A`.
|
|
32
|
+
paths) {
|
|
33
|
+
const scoped = paths !== undefined;
|
|
34
|
+
if (scoped && paths.length === 0)
|
|
35
|
+
return { kind: "no-changes" };
|
|
36
|
+
// 1. Confirm we're in a git work tree. `rev-parse` is the cheapest
|
|
37
|
+
// "is this a repo?" probe and is silent on success.
|
|
38
|
+
try {
|
|
39
|
+
await execAsync("git", ["rev-parse", "--is-inside-work-tree"], {
|
|
40
|
+
cwd,
|
|
41
|
+
...SPAWN_OPTS,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return { kind: "not-a-repo" };
|
|
46
|
+
}
|
|
47
|
+
// 2. Anything to commit? Scope the dirty-check to this tab's paths so a
|
|
48
|
+
// tab whose own files are clean reports no-changes even when other
|
|
49
|
+
// tabs left the tree dirty.
|
|
50
|
+
let dirty;
|
|
51
|
+
try {
|
|
52
|
+
const statusArgs = scoped
|
|
53
|
+
? ["status", "--porcelain", "--", ...paths]
|
|
54
|
+
: ["status", "--porcelain"];
|
|
55
|
+
const { stdout } = await execAsync("git", statusArgs, {
|
|
56
|
+
cwd,
|
|
57
|
+
...SPAWN_OPTS,
|
|
58
|
+
});
|
|
59
|
+
dirty = stdout.trim();
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
return { kind: "failed", reason: e.message };
|
|
63
|
+
}
|
|
64
|
+
if (dirty.length === 0)
|
|
65
|
+
return { kind: "no-changes" };
|
|
66
|
+
// 3. Compose the message. First non-empty line of the assistant
|
|
67
|
+
// reply, collapsed whitespace, truncated. Fall back to "auto-commit"
|
|
68
|
+
// when the reply was tool-only with no prose.
|
|
69
|
+
const summary = buildSummary(assistantText);
|
|
70
|
+
const message = `[omg/${tabName}] ${summary || "auto-commit"}`;
|
|
71
|
+
// 4. Stage + commit. Pre-commit hooks run by default; if they reject
|
|
72
|
+
// we surface the failure. Never use --no-verify here — silently
|
|
73
|
+
// bypassing a project's hooks would surprise the user. Scoped mode
|
|
74
|
+
// stages only this tab's paths and commits with the same pathspec
|
|
75
|
+
// (`commit -- <paths>` = --only), so other staged/dirty files in the
|
|
76
|
+
// shared tree are NOT swept into this commit.
|
|
77
|
+
try {
|
|
78
|
+
if (scoped) {
|
|
79
|
+
await execAsync("git", ["add", "--", ...paths], { cwd, ...SPAWN_OPTS });
|
|
80
|
+
await execAsync("git", ["commit", "-m", message, "--", ...paths], {
|
|
81
|
+
cwd,
|
|
82
|
+
...SPAWN_OPTS,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
await execAsync("git", ["add", "-A"], { cwd, ...SPAWN_OPTS });
|
|
87
|
+
await execAsync("git", ["commit", "-m", message], { cwd, ...SPAWN_OPTS });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
return { kind: "failed", reason: e.message.split("\n")[0] };
|
|
92
|
+
}
|
|
93
|
+
// 5. Short SHA for the notification.
|
|
94
|
+
try {
|
|
95
|
+
const { stdout } = await execAsync("git", ["rev-parse", "--short", "HEAD"], { cwd, ...SPAWN_OPTS });
|
|
96
|
+
return { kind: "committed", sha: stdout.trim(), message };
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Commit landed but we can't read the sha — still report success.
|
|
100
|
+
return { kind: "committed", sha: "?", message };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function buildSummary(assistantText) {
|
|
104
|
+
const line = assistantText.split("\n").find((l) => l.trim().length > 0) ?? "";
|
|
105
|
+
return line.replace(/\s+/g, " ").trim().slice(0, SUMMARY_LIMIT);
|
|
106
|
+
}
|
|
107
|
+
/** Render an outcome as a one-line user-visible message. Returns null
|
|
108
|
+
* when the outcome is silent (no-changes / not-a-repo — auto-commit
|
|
109
|
+
* is opportunistic, so the absence of work isn't surfaced). */
|
|
110
|
+
export function formatAutoCommitOutcome(outcome) {
|
|
111
|
+
switch (outcome.kind) {
|
|
112
|
+
case "committed":
|
|
113
|
+
return `[auto-commit] ${outcome.sha} ${outcome.message}`;
|
|
114
|
+
case "failed":
|
|
115
|
+
return `[auto-commit] failed: ${outcome.reason}`;
|
|
116
|
+
case "no-changes":
|
|
117
|
+
case "not-a-repo":
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=autoCommit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoCommit.js","sourceRoot":"","sources":["../../src/cli/autoCommit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface BgTaskInfo {
|
|
2
|
+
/** Owning tab — captured at task-start so /switch doesn't re-route
|
|
3
|
+
* the continuation. */
|
|
4
|
+
tabName: string;
|
|
5
|
+
/** claude-cli's task id (the suffix in the output filename). */
|
|
6
|
+
toolId: string;
|
|
7
|
+
/** Absolute path to the background task's output file. */
|
|
8
|
+
outputPath: string;
|
|
9
|
+
/** The shell command claude asked us to run. Surfaced in the
|
|
10
|
+
* continuation prompt so the model can identify what finished. */
|
|
11
|
+
command: string;
|
|
12
|
+
/** ms-epoch when we registered the task. */
|
|
13
|
+
startedAt: number;
|
|
14
|
+
/** Internal: last observed file size. Used by the watcher to
|
|
15
|
+
* detect stabilization. */
|
|
16
|
+
lastSize: number;
|
|
17
|
+
/** Internal: ms-epoch when `lastSize` was first observed. */
|
|
18
|
+
stableSince: number;
|
|
19
|
+
}
|
|
20
|
+
export type BgTaskCallback = (task: BgTaskInfo, output: string) => void | Promise<void>;
|
|
21
|
+
/** Read the last `maxBytes` of a file as UTF-8 (the whole file when it's
|
|
22
|
+
* smaller). Used to cheaply scan a growing output tail for the
|
|
23
|
+
* completion marker. Exported for tests. */
|
|
24
|
+
export declare function readTail(path: string, maxBytes?: number): Promise<string>;
|
|
25
|
+
export declare class BgTaskWatcher {
|
|
26
|
+
private readonly onComplete;
|
|
27
|
+
private readonly tasks;
|
|
28
|
+
private timer;
|
|
29
|
+
constructor(onComplete: BgTaskCallback);
|
|
30
|
+
/** Register a task. The watcher polls until the task's output
|
|
31
|
+
* file size has been stable for STABLE_MS, then fires the
|
|
32
|
+
* callback once and forgets it. */
|
|
33
|
+
track(task: BgTaskInfo): void;
|
|
34
|
+
/** Drop a tracked task without firing — used when the owning tab
|
|
35
|
+
* is closed before the task settles. */
|
|
36
|
+
untrack(toolId: string): void;
|
|
37
|
+
/** Drop every tracked task for a given tab. Called on /close. */
|
|
38
|
+
untrackTab(tabName: string): void;
|
|
39
|
+
close(): void;
|
|
40
|
+
private poll;
|
|
41
|
+
}
|
|
42
|
+
/** Pull the task id + output path out of a Bash tool_use_end result.
|
|
43
|
+
*
|
|
44
|
+
* claude-cli's hint reads roughly:
|
|
45
|
+
* Command running in background with ID: <id>. Output is being
|
|
46
|
+
* written to: <path>. You will be notified when it completes.
|
|
47
|
+
*
|
|
48
|
+
* Both the leading text and the trailing punctuation are stable;
|
|
49
|
+
* the regex tolerates the trailing period plus optional whitespace.
|
|
50
|
+
* Returns null when the result doesn't match (a regular Bash result
|
|
51
|
+
* with command output) — caller treats null as "not a background
|
|
52
|
+
* task." */
|
|
53
|
+
export declare function parseBgTaskResult(result: unknown): {
|
|
54
|
+
taskId: string;
|
|
55
|
+
outputPath: string;
|
|
56
|
+
} | null;
|
|
57
|
+
//# sourceMappingURL=bgTasks.d.ts.map
|