@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,91 @@
|
|
|
1
|
+
import { type ParseFailuresHolder } from "./parseFailures.js";
|
|
2
|
+
import { type OmgToolsConfig } from "../tools/omgToolManifest.js";
|
|
3
|
+
import { type AdapterInput, type Chunk } from "../orchestration/types.js";
|
|
4
|
+
import type { LLMAdapter } from "../adapter.js";
|
|
5
|
+
export interface GeminiCliAdapterOpts {
|
|
6
|
+
command?: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
/** Phase 17-e: any non-empty value enables `--yolo` (auto-approve
|
|
9
|
+
* all CLI-native tool calls). For finer control, use extraArgs to
|
|
10
|
+
* pass --allowed-tools or --approval-mode directly. */
|
|
11
|
+
cliTools?: string;
|
|
12
|
+
/** When true, every stderr line passes through. Default false
|
|
13
|
+
* filters known noise ("YOLO mode is enabled", "Ripgrep is not
|
|
14
|
+
* available", deprecation warnings). */
|
|
15
|
+
verboseStderr?: boolean;
|
|
16
|
+
/** Phase 19: when true, capture `session_id` from the init envelope
|
|
17
|
+
* on the first call, and pass `--resume <id>` plus only the last
|
|
18
|
+
* user message on subsequent calls. */
|
|
19
|
+
enableSessionResume?: boolean;
|
|
20
|
+
/** Phase 37: invoked when a stderr line announces a rate-limit
|
|
21
|
+
* retry (gemini emits "Retrying after Nms..." regularly). The
|
|
22
|
+
* UI surfaces this as a countdown in the status bar. */
|
|
23
|
+
onThrottle?: (info: {
|
|
24
|
+
resetMs: number;
|
|
25
|
+
reason: string;
|
|
26
|
+
}) => void;
|
|
27
|
+
/** Phase 54: per-spawn working directory. */
|
|
28
|
+
cwd?: string;
|
|
29
|
+
/** Phase 17-f follow-up: ensure omg is registered as an MCP server
|
|
30
|
+
* in `~/.gemini/settings.json` (user scope) before each call and
|
|
31
|
+
* switch the CLI to yolo so the model can call the MCP tool
|
|
32
|
+
* without an approval prompt. Tier is picked by .writable /
|
|
33
|
+
* .shell. The settings entry is idempotent — once written, it
|
|
34
|
+
* stays put.
|
|
35
|
+
*
|
|
36
|
+
* We deliberately don't use the project-local
|
|
37
|
+
* `<cwd>/.gemini/settings.json`: gemini's trust gate ignores
|
|
38
|
+
* project mcpServers unless the directory is permanently marked
|
|
39
|
+
* trusted, which `--skip-trust` does not flip on. User scope is
|
|
40
|
+
* the only path that works headlessly.
|
|
41
|
+
*
|
|
42
|
+
* `settingsPath` overrides the location (used by tests). */
|
|
43
|
+
omgTools?: OmgToolsConfig & {
|
|
44
|
+
settingsPath?: string;
|
|
45
|
+
};
|
|
46
|
+
extraArgs?: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
export declare class GeminiCliAdapter implements LLMAdapter {
|
|
49
|
+
private readonly opts;
|
|
50
|
+
readonly provider = "gemini-cli";
|
|
51
|
+
/** Phase 19: captured from the init envelope on the first call. */
|
|
52
|
+
private sessionId;
|
|
53
|
+
/** Phase 21: live child handle for cancel(). */
|
|
54
|
+
private currentChild;
|
|
55
|
+
constructor(opts?: GeminiCliAdapterOpts);
|
|
56
|
+
get currentSessionId(): string | undefined;
|
|
57
|
+
setCwd(cwd: string): void;
|
|
58
|
+
restoreSession(sessionId: string): void;
|
|
59
|
+
setModel(model: string): void;
|
|
60
|
+
resetSession(): void;
|
|
61
|
+
cancel(): void;
|
|
62
|
+
private promptFor;
|
|
63
|
+
stream(input: AdapterInput): AsyncIterable<Chunk>;
|
|
64
|
+
/** Public for testing. With resume on and a captured id, adds
|
|
65
|
+
* `--resume <id>`; without an id, leaves it off and the init
|
|
66
|
+
* envelope's session_id is captured for next time. */
|
|
67
|
+
buildArgs(prompt: string): string[];
|
|
68
|
+
}
|
|
69
|
+
/** Merge `mcpServers.omg = { command, args }` into the project's
|
|
70
|
+
* `.gemini/settings.json`. Idempotent: if the existing entry
|
|
71
|
+
* matches the desired shape, no write. */
|
|
72
|
+
export declare function ensureGeminiOmgServer(opts: OmgToolsConfig & {
|
|
73
|
+
settingsPath?: string;
|
|
74
|
+
}): void;
|
|
75
|
+
/** Transform Gemini CLI envelope lines into omg Chunks.
|
|
76
|
+
*
|
|
77
|
+
* Envelope variants:
|
|
78
|
+
* init — informational
|
|
79
|
+
* message role:user — echo of prompt; dropped
|
|
80
|
+
* message role:assistant delta:true — TextChunk
|
|
81
|
+
* tool_use {tool_name, tool_id, parameters} — ToolUseStart
|
|
82
|
+
* tool_result {tool_id, status, output} — ToolUseEnd
|
|
83
|
+
* result {status, stats} — StreamEnd
|
|
84
|
+
*
|
|
85
|
+
* Non-JSON lines (Gemini sometimes prints "Ripgrep is not available...")
|
|
86
|
+
* are dropped silently.
|
|
87
|
+
*/
|
|
88
|
+
export declare function translateGeminiCliLines(lines: AsyncIterable<string>, sessionHolder?: {
|
|
89
|
+
value: string | undefined;
|
|
90
|
+
}, parseFailures?: ParseFailuresHolder): AsyncIterable<Chunk>;
|
|
91
|
+
//# sourceMappingURL=geminiCli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geminiCli.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/geminiCli.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EAKX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;4DAEwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;6CAEyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;4CAEwC;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;6DAEyD;IACzD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;iEAa6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,qBAAa,gBAAiB,YAAW,UAAU;IAQrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,QAAQ,CAAC,QAAQ,gBAAgB;IAEjC,mEAAmE;IACnE,OAAO,CAAC,SAAS,CAAiC;IAClD,gDAAgD;IAChD,OAAO,CAAC,YAAY,CAA0D;gBAEjD,IAAI,GAAE,oBAAyB;IAE5D,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEzC;IACD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAGzB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAGvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAG7B,YAAY,IAAI,IAAI;IAIpB,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,SAAS;IAeV,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IAgCxD;;2DAEuD;IACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAiBpC;AAED;;2CAE2C;AAC3C,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,IAAI,CA+CN;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAuB,uBAAuB,CAC5C,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,CAAC,EAAE,mBAAmB,GAClC,aAAa,CAAC,KAAK,CAAC,CAyFtB"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// Gemini CLI adapter (Phase 17-b).
|
|
2
|
+
//
|
|
3
|
+
// Spawns `gemini -p <prompt> --output-format stream-json --skip-trust`
|
|
4
|
+
// and parses the JSONL envelope. Auth: the CLI's own OAuth session
|
|
5
|
+
// (Google account + Gemini subscription). No API key, no per-request
|
|
6
|
+
// credit (subject to the user's plan's quota).
|
|
7
|
+
//
|
|
8
|
+
// Gemini's envelope:
|
|
9
|
+
// {type:"init", session_id, model}
|
|
10
|
+
// {type:"message", role:"user", content}
|
|
11
|
+
// {type:"message", role:"assistant", content, delta:true}
|
|
12
|
+
// {type:"result", status, stats}
|
|
13
|
+
//
|
|
14
|
+
// `delta:true` on assistant messages indicates each one is an incremental
|
|
15
|
+
// chunk. We emit a TextChunk per non-empty assistant message and a
|
|
16
|
+
// StreamEnd on `result`.
|
|
17
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
import { homedir } from "node:os";
|
|
20
|
+
import { GEMINI_NOISE_PATTERNS } from "./cliStderr.js";
|
|
21
|
+
import { recordParseFailure, } from "./parseFailures.js";
|
|
22
|
+
import { runCliAdapterStream } from "./cliAdapterBase.js";
|
|
23
|
+
import { buildOmgServerSpec, } from "../tools/omgToolManifest.js";
|
|
24
|
+
import { flattenConversation, streamEnd, text as textChunk, usage, } from "../orchestration/types.js";
|
|
25
|
+
import { isObject } from "./utils.js";
|
|
26
|
+
export class GeminiCliAdapter {
|
|
27
|
+
opts;
|
|
28
|
+
provider = "gemini-cli";
|
|
29
|
+
/** Phase 19: captured from the init envelope on the first call. */
|
|
30
|
+
sessionId = undefined;
|
|
31
|
+
/** Phase 21: live child handle for cancel(). */
|
|
32
|
+
currentChild = null;
|
|
33
|
+
constructor(opts = {}) {
|
|
34
|
+
this.opts = opts;
|
|
35
|
+
}
|
|
36
|
+
get currentSessionId() {
|
|
37
|
+
return this.sessionId;
|
|
38
|
+
}
|
|
39
|
+
setCwd(cwd) {
|
|
40
|
+
this.opts.cwd = cwd;
|
|
41
|
+
}
|
|
42
|
+
restoreSession(sessionId) {
|
|
43
|
+
this.sessionId = sessionId;
|
|
44
|
+
}
|
|
45
|
+
setModel(model) {
|
|
46
|
+
this.opts.model = model;
|
|
47
|
+
}
|
|
48
|
+
resetSession() {
|
|
49
|
+
this.sessionId = undefined;
|
|
50
|
+
}
|
|
51
|
+
cancel() {
|
|
52
|
+
if (this.currentChild && !this.currentChild.killed) {
|
|
53
|
+
this.currentChild.kill("SIGTERM");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
promptFor(input) {
|
|
57
|
+
if (this.opts.enableSessionResume &&
|
|
58
|
+
this.sessionId !== undefined &&
|
|
59
|
+
typeof input !== "string") {
|
|
60
|
+
const messages = input.messages;
|
|
61
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
62
|
+
const m = messages[i];
|
|
63
|
+
if (m.role === "user")
|
|
64
|
+
return m.text;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return inputToPrompt(input);
|
|
68
|
+
}
|
|
69
|
+
async *stream(input) {
|
|
70
|
+
if (this.opts.omgTools) {
|
|
71
|
+
// Gemini doesn't accept an inline MCP config on the command
|
|
72
|
+
// line — it reads `<cwd>/.gemini/settings.json`. Touch the
|
|
73
|
+
// file before spawning so the registration is in place when
|
|
74
|
+
// gemini boots.
|
|
75
|
+
ensureGeminiOmgServer(this.opts.omgTools);
|
|
76
|
+
}
|
|
77
|
+
const prompt = this.promptFor(input);
|
|
78
|
+
const args = this.buildArgs(prompt);
|
|
79
|
+
const childEnv = this.opts.cwd
|
|
80
|
+
? { ...process.env, OMG_TAB_CWD: this.opts.cwd }
|
|
81
|
+
: process.env;
|
|
82
|
+
yield* runCliAdapterStream({
|
|
83
|
+
command: this.opts.command ?? "gemini",
|
|
84
|
+
args,
|
|
85
|
+
cwd: this.opts.cwd,
|
|
86
|
+
env: childEnv,
|
|
87
|
+
noisePatterns: GEMINI_NOISE_PATTERNS,
|
|
88
|
+
verboseStderr: this.opts.verboseStderr === true,
|
|
89
|
+
onThrottle: this.opts.onThrottle,
|
|
90
|
+
provider: "gemini-cli",
|
|
91
|
+
translate: (rl, sh, pf) => translateGeminiCliLines(rl, sh, pf),
|
|
92
|
+
setChild: (c) => {
|
|
93
|
+
this.currentChild = c;
|
|
94
|
+
},
|
|
95
|
+
onSession: (sid) => {
|
|
96
|
+
if (this.opts.enableSessionResume && sid)
|
|
97
|
+
this.sessionId = sid;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Public for testing. With resume on and a captured id, adds
|
|
102
|
+
* `--resume <id>`; without an id, leaves it off and the init
|
|
103
|
+
* envelope's session_id is captured for next time. */
|
|
104
|
+
buildArgs(prompt) {
|
|
105
|
+
const args = [
|
|
106
|
+
"-p",
|
|
107
|
+
prompt,
|
|
108
|
+
"--output-format",
|
|
109
|
+
"stream-json",
|
|
110
|
+
"--skip-trust",
|
|
111
|
+
];
|
|
112
|
+
if (this.opts.enableSessionResume && this.sessionId !== undefined) {
|
|
113
|
+
args.push("--resume", this.sessionId);
|
|
114
|
+
}
|
|
115
|
+
if (this.opts.cliTools || this.opts.omgTools)
|
|
116
|
+
args.push("--yolo");
|
|
117
|
+
if (this.opts.omgTools)
|
|
118
|
+
args.push("--allowed-mcp-server-names", "omg");
|
|
119
|
+
if (this.opts.model)
|
|
120
|
+
args.push("--model", this.opts.model);
|
|
121
|
+
if (this.opts.extraArgs)
|
|
122
|
+
args.push(...this.opts.extraArgs);
|
|
123
|
+
return args;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Merge `mcpServers.omg = { command, args }` into the project's
|
|
127
|
+
* `.gemini/settings.json`. Idempotent: if the existing entry
|
|
128
|
+
* matches the desired shape, no write. */
|
|
129
|
+
export function ensureGeminiOmgServer(opts) {
|
|
130
|
+
// Phase 210: canonical manifest. The {command, args} shape is
|
|
131
|
+
// shared with claude + codex; gemini's only addition is the
|
|
132
|
+
// settings.json file location.
|
|
133
|
+
const spec = buildOmgServerSpec(opts);
|
|
134
|
+
const cmd = spec.command;
|
|
135
|
+
const serveArgs = spec.args;
|
|
136
|
+
const path = opts.settingsPath ?? join(homedir(), ".gemini", "settings.json");
|
|
137
|
+
let existing = {};
|
|
138
|
+
if (existsSync(path)) {
|
|
139
|
+
try {
|
|
140
|
+
existing = JSON.parse(readFileSync(path, "utf-8"));
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Corrupt — back up and start fresh so we don't lose the user's
|
|
144
|
+
// file silently.
|
|
145
|
+
try {
|
|
146
|
+
const backup = `${path}.omg-bak`;
|
|
147
|
+
writeFileSync(backup, readFileSync(path));
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
/* best-effort */
|
|
151
|
+
}
|
|
152
|
+
existing = {};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const servers = existing.mcpServers && typeof existing.mcpServers === "object"
|
|
156
|
+
? existing.mcpServers
|
|
157
|
+
: {};
|
|
158
|
+
const current = servers.omg;
|
|
159
|
+
const matches = current !== undefined &&
|
|
160
|
+
current.command === cmd &&
|
|
161
|
+
Array.isArray(current.args) &&
|
|
162
|
+
current.args.length === serveArgs.length &&
|
|
163
|
+
current.args.every((a, i) => a === serveArgs[i]);
|
|
164
|
+
if (matches)
|
|
165
|
+
return;
|
|
166
|
+
servers.omg = { command: cmd, args: serveArgs };
|
|
167
|
+
existing.mcpServers = servers;
|
|
168
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
169
|
+
writeFileSync(path, JSON.stringify(existing, null, 2));
|
|
170
|
+
}
|
|
171
|
+
function inputToPrompt(input) {
|
|
172
|
+
return typeof input === "string" ? input : flattenConversation(input);
|
|
173
|
+
}
|
|
174
|
+
/** Transform Gemini CLI envelope lines into omg Chunks.
|
|
175
|
+
*
|
|
176
|
+
* Envelope variants:
|
|
177
|
+
* init — informational
|
|
178
|
+
* message role:user — echo of prompt; dropped
|
|
179
|
+
* message role:assistant delta:true — TextChunk
|
|
180
|
+
* tool_use {tool_name, tool_id, parameters} — ToolUseStart
|
|
181
|
+
* tool_result {tool_id, status, output} — ToolUseEnd
|
|
182
|
+
* result {status, stats} — StreamEnd
|
|
183
|
+
*
|
|
184
|
+
* Non-JSON lines (Gemini sometimes prints "Ripgrep is not available...")
|
|
185
|
+
* are dropped silently.
|
|
186
|
+
*/
|
|
187
|
+
export async function* translateGeminiCliLines(lines, sessionHolder, parseFailures) {
|
|
188
|
+
let endEmitted = false;
|
|
189
|
+
let stopReason = "stop";
|
|
190
|
+
for await (const line of lines) {
|
|
191
|
+
const trimmed = line.trim();
|
|
192
|
+
if (!trimmed)
|
|
193
|
+
continue;
|
|
194
|
+
let msg;
|
|
195
|
+
try {
|
|
196
|
+
msg = JSON.parse(trimmed);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
recordParseFailure(parseFailures, trimmed);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const type = msg.type;
|
|
203
|
+
if (type === "init") {
|
|
204
|
+
const sid = msg.session_id;
|
|
205
|
+
if (sessionHolder && typeof sid === "string" && sid) {
|
|
206
|
+
sessionHolder.value = sid;
|
|
207
|
+
}
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (type === "message") {
|
|
211
|
+
const role = msg.role;
|
|
212
|
+
if (role === "assistant") {
|
|
213
|
+
const content = msg.content;
|
|
214
|
+
if (typeof content === "string" && content)
|
|
215
|
+
yield textChunk(content);
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (type === "tool_use") {
|
|
220
|
+
const toolId = String(msg.tool_id ?? "");
|
|
221
|
+
const toolName = String(msg.tool_name ?? "");
|
|
222
|
+
const params = msg.parameters;
|
|
223
|
+
yield {
|
|
224
|
+
type: "tool_use_start",
|
|
225
|
+
toolId,
|
|
226
|
+
toolName,
|
|
227
|
+
toolInput: isObject(params)
|
|
228
|
+
? { ...params }
|
|
229
|
+
: {},
|
|
230
|
+
};
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (type === "tool_result") {
|
|
234
|
+
const toolId = String(msg.tool_id ?? "");
|
|
235
|
+
const status = msg.status;
|
|
236
|
+
const output = msg.output;
|
|
237
|
+
const ok = status === "success";
|
|
238
|
+
// Phase 163: a structured (object) output must be stringified, or
|
|
239
|
+
// `value` becomes a raw object that breaks when fed back to the
|
|
240
|
+
// model as the tool_result text / rendered in the tool card.
|
|
241
|
+
const value = typeof output === "string"
|
|
242
|
+
? output
|
|
243
|
+
: output === undefined || output === null
|
|
244
|
+
? null
|
|
245
|
+
: JSON.stringify(output);
|
|
246
|
+
yield {
|
|
247
|
+
type: "tool_use_end",
|
|
248
|
+
toolId,
|
|
249
|
+
result: {
|
|
250
|
+
ok,
|
|
251
|
+
value,
|
|
252
|
+
error: ok ? "" : `status: ${status ?? "unknown"}`,
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (type === "result") {
|
|
258
|
+
const status = msg.status;
|
|
259
|
+
if (typeof status === "string" && status)
|
|
260
|
+
stopReason = status;
|
|
261
|
+
const stats = msg.stats;
|
|
262
|
+
if (isObject(stats)) {
|
|
263
|
+
const tin = Number(stats.input_tokens ?? 0);
|
|
264
|
+
const tout = Number(stats.output_tokens ?? 0);
|
|
265
|
+
if (tin > 0 || tout > 0)
|
|
266
|
+
yield usage(tin, tout);
|
|
267
|
+
}
|
|
268
|
+
yield streamEnd(stopReason);
|
|
269
|
+
endEmitted = true;
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (!endEmitted)
|
|
274
|
+
yield streamEnd(stopReason);
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=geminiCli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geminiCli.js","sourceRoot":"","sources":["../../../src/core/adapters/geminiCli.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,qEAAqE;AACrE,+CAA+C;AAC/C,EAAE;AACF,qBAAqB;AACrB,qCAAqC;AACrC,2CAA2C;AAC3C,4DAA4D;AAC5D,mCAAmC;AACnC,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AACnE,yBAAyB;AAEzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,kBAAkB,GAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,mBAAmB,EACnB,SAAS,EACT,IAAI,IAAI,SAAS,EACjB,KAAK,GACN,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAyCtC,MAAM,OAAO,gBAAgB;IAQE;IAPpB,QAAQ,GAAG,YAAY,CAAC;IAEjC,mEAAmE;IAC3D,SAAS,GAAuB,SAAS,CAAC;IAClD,gDAAgD;IACxC,YAAY,GAAqD,IAAI,CAAC;IAE9E,YAA6B,OAA6B,EAAE;QAA/B,SAAI,GAAJ,IAAI,CAA2B;IAAG,CAAC;IAEhE,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,cAAc,CAAC,SAAiB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,YAAY;QACV,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,KAAmB;QACnC,IACE,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAC7B,IAAI,CAAC,SAAS,KAAK,SAAS;YAC5B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,CAAC,CAAC,IAAI,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,KAAmB;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvB,4DAA4D;YAC5D,2DAA2D;YAC3D,4DAA4D;YAC5D,gBAAgB;YAChB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;YAC5B,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YAChD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChB,KAAK,CAAC,CAAC,mBAAmB,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ;YACtC,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YAClB,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE,qBAAqB;YACpC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI;YAC/C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC9D,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,GAAG;oBAAE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACjE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;2DAEuD;IACvD,SAAS,CAAC,MAAc;QACtB,MAAM,IAAI,GAAa;YACrB,IAAI;YACJ,MAAM;YACN,iBAAiB;YACjB,aAAa;YACb,cAAc;SACf,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;2CAE2C;AAC3C,MAAM,UAAU,qBAAqB,CACnC,IAAgD;IAEhD,8DAA8D;IAC9D,4DAA4D;IAC5D,+BAA+B;IAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;IAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC9E,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAGhD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;YAChE,iBAAiB;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC;gBACjC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GACX,QAAQ,CAAC,UAAU,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;QAC5D,CAAC,CAAE,QAAQ,CAAC,UAAsC;QAClD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,OAAO,GAAG,OAAO,CAAC,GAEX,CAAC;IACd,MAAM,OAAO,GACX,OAAO,KAAK,SAAS;QACrB,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,OAAO;QAAE,OAAO;IAEpB,OAAO,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChD,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,uBAAuB,CAC5C,KAA4B,EAC5B,aAA6C,EAC7C,aAAmC;IAEnC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,UAAU,GAAG,MAAM,CAAC;IAExB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,GAAI,GAAgC,CAAC,UAAU,CAAC;YACzD,IAAI,aAAa,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE,CAAC;gBACpD,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC;YAC5B,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;oBAAE,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACvE,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,CAAE,GAA6B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,CAAE,GAA+B,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAI,GAAgC,CAAC,UAAU,CAAC;YAC5D,MAAM;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,MAAM;gBACN,QAAQ;gBACR,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;oBACzB,CAAC,CAAC,EAAE,GAAI,MAAkC,EAAE;oBAC5C,CAAC,CAAC,EAAE;aACP,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,CAAE,GAA6B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,MAAM,GAAI,GAA4B,CAAC,MAAM,CAAC;YACpD,MAAM,MAAM,GAAI,GAA4B,CAAC,MAAM,CAAC;YACpD,MAAM,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC;YAChC,kEAAkE;YAClE,gEAAgE;YAChE,6DAA6D;YAC7D,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;oBACvC,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM;gBACJ,IAAI,EAAE,cAAc;gBACpB,MAAM;gBACN,MAAM,EAAE;oBACN,EAAE;oBACF,KAAK;oBACL,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,MAAM,IAAI,SAAS,EAAE;iBAClD;aACF,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM;gBAAE,UAAU,GAAG,MAAM,CAAC;YAC9D,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;YACjD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,MAAM,CACf,KAAoC,CAAC,YAAY,IAAI,CAAC,CACxD,CAAC;gBACF,MAAM,IAAI,GAAG,MAAM,CAChB,KAAqC,CAAC,aAAa,IAAI,CAAC,CAC1D,CAAC;gBACF,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;oBAAE,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC5B,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** claude variant — references the built-in AskUserQuestion tool that the
|
|
2
|
+
* PreToolUse proxy makes reliable. */
|
|
3
|
+
export declare const ASK_USER_NUDGE: string;
|
|
4
|
+
/** codex variant — references the `ask_user` omg-MCP tool. Codex has no
|
|
5
|
+
* built-in AskUserQuestion; the ask_user broker round-trips to the same
|
|
6
|
+
* TUI picker and blocks until the user answers, so it is reliable. */
|
|
7
|
+
export declare const ASK_USER_NUDGE_CODEX: string;
|
|
8
|
+
/** Shared — record_decision is the same omg-MCP tool on both providers. */
|
|
9
|
+
export declare const RECORD_DECISION_NUDGE: string;
|
|
10
|
+
/** claude variant — its native Bash tool timeout is generous (Phase 331),
|
|
11
|
+
* so bounded work runs in the foreground; only indefinite processes go to
|
|
12
|
+
* run_in_background with the completion marker. */
|
|
13
|
+
export declare const BACKGROUND_TASK_NUDGE: string;
|
|
14
|
+
/** codex variant — codex's built-in shell is capped at ~30s upstream
|
|
15
|
+
* (openai/codex#3287, closed "not planned"), which kills any slow build
|
|
16
|
+
* and strands the turn. omg's `run_shell` tool runs in the omg process
|
|
17
|
+
* with a timeout omg controls (up to 30 min, Phase 333/W3), so route
|
|
18
|
+
* bounded long commands through it. Only emit when the shell tier is on
|
|
19
|
+
* (run_shell is exposed). */
|
|
20
|
+
export declare const BACKGROUND_TASK_NUDGE_CODEX: string;
|
|
21
|
+
//# sourceMappingURL=nudges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudges.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/nudges.ts"],"names":[],"mappings":"AAyBA;uCACuC;AACvC,eAAO,MAAM,cAAc,QAKf,CAAC;AAEb;;uEAEuE;AACvE,eAAO,MAAM,oBAAoB,QAKhB,CAAC;AAElB,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,QAOnB,CAAC;AAEhB;;oDAEoD;AACpD,eAAO,MAAM,qBAAqB,QAY+B,CAAC;AAElE;;;;;8BAK8B;AAC9B,eAAO,MAAM,2BAA2B,QAOoC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Phase 333: behavioral nudges shared across CLI adapters.
|
|
2
|
+
//
|
|
3
|
+
// These short system-prompt fragments steer the wrapped model toward the
|
|
4
|
+
// behaviors omg's UX depends on: surfacing decisions instead of bailing,
|
|
5
|
+
// keeping bounded long-running work in-turn, and recording durable
|
|
6
|
+
// decisions. They used to live only in claudeCli.ts (gated on the
|
|
7
|
+
// PreToolUse-hooked AskUserQuestion + omgTools), so `via codex` got NONE
|
|
8
|
+
// of them — interactive codex ran with zero omg behavioral guidance and
|
|
9
|
+
// felt materially worse than `via claude`. The external research (Aider's
|
|
10
|
+
// reminder=sys, opencode's structured-output enforcement) confirms GPT/
|
|
11
|
+
// codex needs equal-or-stronger behavioral prompting than Claude, so this
|
|
12
|
+
// is a parity necessity, not a nicety.
|
|
13
|
+
//
|
|
14
|
+
// claude and codex reach the same intent through different tools:
|
|
15
|
+
// - claude calls the built-in `AskUserQuestion` (hooked via PreToolUse);
|
|
16
|
+
// codex calls the `ask_user` omg-MCP tool (provider-neutral broker).
|
|
17
|
+
// - claude runs bounded builds in its native Bash tool (timeout raised
|
|
18
|
+
// in Phase 331); codex's native shell is capped at ~30s upstream
|
|
19
|
+
// (openai/codex#3287, "not planned") so it must route long commands
|
|
20
|
+
// through omg's `run_shell` tool instead (omg owns that timeout).
|
|
21
|
+
// Hence the per-provider ASK / BACKGROUND variants below; RECORD_DECISION
|
|
22
|
+
// is identical for both (same `record_decision` omg-MCP tool).
|
|
23
|
+
import { BG_DONE_MARKER } from "../util/bgProtocol.js";
|
|
24
|
+
/** claude variant — references the built-in AskUserQuestion tool that the
|
|
25
|
+
* PreToolUse proxy makes reliable. */
|
|
26
|
+
export const ASK_USER_NUDGE = "When a step needs interactive user input (a sudo password, an OAuth " +
|
|
27
|
+
"flow, a yes/no decision, picking between options), do NOT abandon the " +
|
|
28
|
+
"step or tell the user to run it themselves. Call AskUserQuestion with " +
|
|
29
|
+
"concrete options to surface the decision, then continue once the user " +
|
|
30
|
+
"answers.";
|
|
31
|
+
/** codex variant — references the `ask_user` omg-MCP tool. Codex has no
|
|
32
|
+
* built-in AskUserQuestion; the ask_user broker round-trips to the same
|
|
33
|
+
* TUI picker and blocks until the user answers, so it is reliable. */
|
|
34
|
+
export const ASK_USER_NUDGE_CODEX = "When a step needs interactive user input (a sudo password, an OAuth " +
|
|
35
|
+
"flow, a yes/no decision, picking between options), do NOT abandon the " +
|
|
36
|
+
"step or tell the user to run it themselves. Call the `ask_user` tool " +
|
|
37
|
+
"with concrete options to surface the decision, then continue once the " +
|
|
38
|
+
"user answers.";
|
|
39
|
+
/** Shared — record_decision is the same omg-MCP tool on both providers. */
|
|
40
|
+
export const RECORD_DECISION_NUDGE = "When the conversation reaches a durable conclusion — abandoning an " +
|
|
41
|
+
"approach, settling on a library, accepting a constraint — call the " +
|
|
42
|
+
"record_decision MCP tool with a single-line summary. These persist " +
|
|
43
|
+
"in the project's continuum so future turns (and future provider " +
|
|
44
|
+
"switches) see them without re-reading the whole transcript. Use it " +
|
|
45
|
+
"sparingly; only for outcomes a future session would otherwise have to " +
|
|
46
|
+
"rediscover.";
|
|
47
|
+
/** claude variant — its native Bash tool timeout is generous (Phase 331),
|
|
48
|
+
* so bounded work runs in the foreground; only indefinite processes go to
|
|
49
|
+
* run_in_background with the completion marker. */
|
|
50
|
+
export const BACKGROUND_TASK_NUDGE = "Long but BOUNDED commands (build, test suite, deploy — they finish in " +
|
|
51
|
+
"minutes) should run in the FOREGROUND and wait for the result: the Bash " +
|
|
52
|
+
"timeout is generous here (set an explicit `timeout` up to ~30 min for a " +
|
|
53
|
+
"slow one). You get the output and continue in the SAME turn — do NOT " +
|
|
54
|
+
"background a bounded task. " +
|
|
55
|
+
"Use `run_in_background: true` ONLY for INDEFINITE processes that never " +
|
|
56
|
+
"exit on their own (dev server, file watcher, `tail -f`). For those, make " +
|
|
57
|
+
`the last step echo ${BG_DONE_MARKER} (e.g. \`<cmd> ; echo ${BG_DONE_MARKER} rc=$?\`) ` +
|
|
58
|
+
"so omg can auto-continue when it settles, and never background at the " +
|
|
59
|
+
"shell level (`cmd &`, `nohup`, `disown`) — omg can't watch that. " +
|
|
60
|
+
'Never end a turn with "I\'ll wait" / "I\'ll notify you" and no foreground ' +
|
|
61
|
+
"result or run_in_background task — there is no other channel.";
|
|
62
|
+
/** codex variant — codex's built-in shell is capped at ~30s upstream
|
|
63
|
+
* (openai/codex#3287, closed "not planned"), which kills any slow build
|
|
64
|
+
* and strands the turn. omg's `run_shell` tool runs in the omg process
|
|
65
|
+
* with a timeout omg controls (up to 30 min, Phase 333/W3), so route
|
|
66
|
+
* bounded long commands through it. Only emit when the shell tier is on
|
|
67
|
+
* (run_shell is exposed). */
|
|
68
|
+
export const BACKGROUND_TASK_NUDGE_CODEX = "For any command that may take more than ~20 seconds (build, test suite, " +
|
|
69
|
+
"deploy, install), use the `run_shell` tool with an explicit " +
|
|
70
|
+
"`timeout_ms` up to 1800000 (30 min) — do NOT use your built-in shell " +
|
|
71
|
+
"for these: it is capped at ~30s and will kill a slow build mid-run. " +
|
|
72
|
+
"`run_shell` returns the full output and you continue in the SAME turn. " +
|
|
73
|
+
'Never end a turn with "I\'ll wait" / "I\'ll notify you" — there is no ' +
|
|
74
|
+
"other channel; finish the command via run_shell or report what you have.";
|
|
75
|
+
//# sourceMappingURL=nudges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudges.js","sourceRoot":"","sources":["../../../src/core/adapters/nudges.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,mEAAmE;AACnE,kEAAkE;AAClE,yEAAyE;AACzE,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,uCAAuC;AACvC,EAAE;AACF,kEAAkE;AAClE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,+DAA+D;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;uCACuC;AACvC,MAAM,CAAC,MAAM,cAAc,GACzB,sEAAsE;IACtE,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,UAAU,CAAC;AAEb;;uEAEuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,eAAe,CAAC;AAElB,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAChC,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,wEAAwE;IACxE,aAAa,CAAC;AAEhB;;oDAEoD;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAChC,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,6BAA6B;IAC7B,yEAAyE;IACzE,2EAA2E;IAC3E,sBAAsB,cAAc,yBAAyB,cAAc,YAAY;IACvF,wEAAwE;IACxE,mEAAmE;IACnE,4EAA4E;IAC5E,+DAA+D,CAAC;AAElE;;;;;8BAK8B;AAC9B,MAAM,CAAC,MAAM,2BAA2B,GACtC,0EAA0E;IAC1E,8DAA8D;IAC9D,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AdapterInput, type Chunk, type ConversationMessage } from "../orchestration/types.js";
|
|
2
|
+
import type { LLMAdapter } from "../adapter.js";
|
|
3
|
+
export declare function translateOpenAIEvents(events: AsyncIterable<unknown>): AsyncIterable<Chunk>;
|
|
4
|
+
export declare function openaiMessage(msg: ConversationMessage): Record<string, unknown> | Record<string, unknown>[];
|
|
5
|
+
export declare class OpenAIAdapter implements LLMAdapter {
|
|
6
|
+
private readonly opts;
|
|
7
|
+
readonly provider = "codex";
|
|
8
|
+
constructor(opts: {
|
|
9
|
+
model: string;
|
|
10
|
+
client?: unknown;
|
|
11
|
+
system?: string;
|
|
12
|
+
});
|
|
13
|
+
stream(input: AdapterInput): AsyncIterable<Chunk>;
|
|
14
|
+
buildArgs(input: AdapterInput): Record<string, unknown>;
|
|
15
|
+
private lazyClient;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/openai.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,mBAAmB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAShD,wBAAuB,qBAAqB,CAC1C,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,aAAa,CAAC,KAAK,CAAC,CAiDtB;AAOD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAwBrD;AAGD,qBAAa,aAAc,YAAW,UAAU;IAI5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,QAAQ,CAAC,QAAQ,WAAW;gBAGT,IAAI,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAGI,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IAiBxD,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAwBzC,UAAU;CAmBzB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// OpenAI adapter — Chat Completions streaming chunks → omg Chunks.
|
|
2
|
+
//
|
|
3
|
+
// Mirror of legacy/omg/core/adapters/openai.py. Tool calls accumulate
|
|
4
|
+
// per choices[0].delta.tool_calls[].index until finish_reason; the end
|
|
5
|
+
// of the stream emits a ToolUseStart per accumulated entry + StreamEnd.
|
|
6
|
+
import { streamEnd, text as textChunk, toolUseStart, } from "../orchestration/types.js";
|
|
7
|
+
import { isObject, parseJsonOrEmpty } from "./utils.js";
|
|
8
|
+
export async function* translateOpenAIEvents(events) {
|
|
9
|
+
const pendingTools = new Map();
|
|
10
|
+
let stopReason = null;
|
|
11
|
+
for await (const ev of events) {
|
|
12
|
+
if (!isObject(ev))
|
|
13
|
+
continue;
|
|
14
|
+
const choices = ev.choices;
|
|
15
|
+
if (!Array.isArray(choices) || choices.length === 0)
|
|
16
|
+
continue;
|
|
17
|
+
const choice = choices[0];
|
|
18
|
+
const delta = choice.delta;
|
|
19
|
+
if (isObject(delta)) {
|
|
20
|
+
const content = delta.content;
|
|
21
|
+
if (typeof content === "string" && content.length > 0) {
|
|
22
|
+
yield textChunk(content);
|
|
23
|
+
}
|
|
24
|
+
const toolCalls = delta.tool_calls;
|
|
25
|
+
if (Array.isArray(toolCalls)) {
|
|
26
|
+
for (const tc of toolCalls) {
|
|
27
|
+
if (!isObject(tc))
|
|
28
|
+
continue;
|
|
29
|
+
const idx = typeof tc.index === "number" ? tc.index : 0;
|
|
30
|
+
let slot = pendingTools.get(idx);
|
|
31
|
+
if (slot === undefined) {
|
|
32
|
+
slot = { id: "", name: "", buf: "" };
|
|
33
|
+
pendingTools.set(idx, slot);
|
|
34
|
+
}
|
|
35
|
+
if (typeof tc.id === "string" && tc.id)
|
|
36
|
+
slot.id = tc.id;
|
|
37
|
+
const fn = tc.function;
|
|
38
|
+
if (isObject(fn)) {
|
|
39
|
+
if (typeof fn.name === "string" && fn.name)
|
|
40
|
+
slot.name = fn.name;
|
|
41
|
+
if (typeof fn.arguments === "string" && fn.arguments) {
|
|
42
|
+
slot.buf += fn.arguments;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const fr = choice.finish_reason;
|
|
49
|
+
if (typeof fr === "string" && fr.length > 0)
|
|
50
|
+
stopReason = fr;
|
|
51
|
+
}
|
|
52
|
+
const indices = [...pendingTools.keys()].sort((a, b) => a - b);
|
|
53
|
+
for (const idx of indices) {
|
|
54
|
+
const slot = pendingTools.get(idx);
|
|
55
|
+
if (!slot.id && !slot.name)
|
|
56
|
+
continue;
|
|
57
|
+
yield toolUseStart(slot.id, slot.name, parseJsonOrEmpty(slot.buf));
|
|
58
|
+
}
|
|
59
|
+
yield streamEnd(stopReason ?? "stop");
|
|
60
|
+
}
|
|
61
|
+
// Render one ConversationMessage as OpenAI chat.completions messages.
|
|
62
|
+
// - user → { role: "user", content }
|
|
63
|
+
// - assistant → { role: "assistant", content, tool_calls: [...] }
|
|
64
|
+
// - tool_result → { role: "tool", tool_call_id, content }
|
|
65
|
+
export function openaiMessage(msg) {
|
|
66
|
+
if (msg.role === "user") {
|
|
67
|
+
return { role: "user", content: msg.text };
|
|
68
|
+
}
|
|
69
|
+
if (msg.role === "assistant") {
|
|
70
|
+
const out = {
|
|
71
|
+
role: "assistant",
|
|
72
|
+
content: msg.text,
|
|
73
|
+
};
|
|
74
|
+
if (msg.toolCalls.length > 0) {
|
|
75
|
+
out.tool_calls = msg.toolCalls.map((call) => ({
|
|
76
|
+
id: call.toolId,
|
|
77
|
+
type: "function",
|
|
78
|
+
function: {
|
|
79
|
+
name: call.toolName,
|
|
80
|
+
arguments: JSON.stringify(call.toolInput),
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
const content = typeof msg.result === "string" ? msg.result : JSON.stringify(msg.result);
|
|
87
|
+
return { role: "tool", tool_call_id: msg.toolId, content };
|
|
88
|
+
}
|
|
89
|
+
export class OpenAIAdapter {
|
|
90
|
+
opts;
|
|
91
|
+
provider = "codex";
|
|
92
|
+
constructor(opts) {
|
|
93
|
+
this.opts = opts;
|
|
94
|
+
}
|
|
95
|
+
async *stream(input) {
|
|
96
|
+
const client = this.opts.client ?? (await this.lazyClient());
|
|
97
|
+
const stream = (await client.chat.completions.create(this.buildArgs(input)));
|
|
98
|
+
yield* translateOpenAIEvents(stream);
|
|
99
|
+
}
|
|
100
|
+
buildArgs(input) {
|
|
101
|
+
const messages = [];
|
|
102
|
+
const system = typeof input === "string"
|
|
103
|
+
? this.opts.system
|
|
104
|
+
: (input.system ?? this.opts.system);
|
|
105
|
+
if (system !== undefined)
|
|
106
|
+
messages.push({ role: "system", content: system });
|
|
107
|
+
if (typeof input === "string") {
|
|
108
|
+
messages.push({ role: "user", content: input });
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (const msg of input.messages) {
|
|
112
|
+
const rendered = openaiMessage(msg);
|
|
113
|
+
if (Array.isArray(rendered))
|
|
114
|
+
messages.push(...rendered);
|
|
115
|
+
else
|
|
116
|
+
messages.push(rendered);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
model: this.opts.model,
|
|
121
|
+
messages,
|
|
122
|
+
stream: true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
async lazyClient() {
|
|
126
|
+
const name = "openai";
|
|
127
|
+
let mod;
|
|
128
|
+
try {
|
|
129
|
+
mod = (await import(name));
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
throw new Error("openai not installed; run `npm install openai`");
|
|
133
|
+
}
|
|
134
|
+
const OpenAI = mod.default;
|
|
135
|
+
return new OpenAI();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=openai.js.map
|