@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,157 @@
|
|
|
1
|
+
// Phase 112: opt-in usage cache reader.
|
|
2
|
+
//
|
|
3
|
+
// omg never touches a provider OAuth token — it delegates to the CLIs
|
|
4
|
+
// (claude-cli / codex-cli / gemini-cli), and the CLI stream exposes
|
|
5
|
+
// no plan-quota numbers (only a reset deadline + allow/deny status).
|
|
6
|
+
// So omg can't compute a real 5h/wk/sn usage percentage on its own.
|
|
7
|
+
//
|
|
8
|
+
// But other tools (e.g. the oh-my-claudecode statusline) already call
|
|
9
|
+
// the provider's usage endpoint with their own token and cache the
|
|
10
|
+
// result to a JSON file. Point omg at that file via OMG_USAGE_CACHE
|
|
11
|
+
// and it reads the cap + used numbers from it — credential-free,
|
|
12
|
+
// fully opt-in.
|
|
13
|
+
//
|
|
14
|
+
// Canonical omg schema (the form we document):
|
|
15
|
+
//
|
|
16
|
+
// {
|
|
17
|
+
// "five_hour": { "used": 34000, "limit": 100000, "resetsAt": <ms-epoch> },
|
|
18
|
+
// "weekly": { "used": 1500000, "limit": 5000000 },
|
|
19
|
+
// "session": { "used": 0, "limit": 50000 }
|
|
20
|
+
// }
|
|
21
|
+
//
|
|
22
|
+
// The reader is tolerant: window keys accept aliases (5h / fiveHour /
|
|
23
|
+
// five_hour, wk / week / weekly, sn / session), each window accepts
|
|
24
|
+
// either used+limit OR a direct percentage field (utilization /
|
|
25
|
+
// percent / used_pct), and resetsAt may be ms or seconds.
|
|
26
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
27
|
+
const WINDOW_ALIASES = {
|
|
28
|
+
fiveHour: ["five_hour", "fiveHour", "5h", "fivehour"],
|
|
29
|
+
weekly: ["weekly", "week", "wk"],
|
|
30
|
+
session: ["session", "sn"],
|
|
31
|
+
};
|
|
32
|
+
function num(v) {
|
|
33
|
+
const n = Number(v);
|
|
34
|
+
return Number.isFinite(n) ? n : undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Normalise a possibly-seconds epoch to ms. Values below ~1e12 are
|
|
37
|
+
* treated as seconds. */
|
|
38
|
+
function toMs(v) {
|
|
39
|
+
const n = num(v);
|
|
40
|
+
if (n === undefined || n <= 0)
|
|
41
|
+
return undefined;
|
|
42
|
+
return n < 1e12 ? Math.round(n * 1000) : Math.round(n);
|
|
43
|
+
}
|
|
44
|
+
/** Pull a window's usage out of a record, trying used+limit first,
|
|
45
|
+
* then a direct percentage (mapped to used=pct, limit=100). */
|
|
46
|
+
function parseWindow(obj) {
|
|
47
|
+
if (!obj || typeof obj !== "object")
|
|
48
|
+
return undefined;
|
|
49
|
+
const o = obj;
|
|
50
|
+
const resetsAt = toMs(o.resetsAt ?? o.resets_at ?? o.reset ?? o.resetTime);
|
|
51
|
+
const used = num(o.used ?? o.consumed ?? o.tokensUsed ?? o.tokens_used);
|
|
52
|
+
const limit = num(o.limit ?? o.cap ?? o.max ?? o.quota);
|
|
53
|
+
if (used !== undefined && limit !== undefined && limit > 0) {
|
|
54
|
+
return { used, limit, resetsAt };
|
|
55
|
+
}
|
|
56
|
+
// Direct percentage form.
|
|
57
|
+
const pct = num(o.utilization ?? o.percent ?? o.used_pct ?? o.usedPct ?? o.pct);
|
|
58
|
+
if (pct !== undefined) {
|
|
59
|
+
return { used: Math.max(0, Math.min(100, pct)), limit: 100, resetsAt };
|
|
60
|
+
}
|
|
61
|
+
// Reset-only (no usage) still useful for the countdown.
|
|
62
|
+
if (resetsAt !== undefined)
|
|
63
|
+
return { resetsAt };
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
function findWindow(root, aliases) {
|
|
67
|
+
for (const a of aliases) {
|
|
68
|
+
if (a in root)
|
|
69
|
+
return root[a];
|
|
70
|
+
}
|
|
71
|
+
// Some caches nest windows under a "windows" key.
|
|
72
|
+
const nested = root.windows;
|
|
73
|
+
if (nested && typeof nested === "object") {
|
|
74
|
+
const n = nested;
|
|
75
|
+
for (const a of aliases) {
|
|
76
|
+
if (a in n)
|
|
77
|
+
return n[a];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
/** Phase 214 (F4.5): cache file is considered stale (and the snapshot
|
|
83
|
+
* is dropped) when mtime is older than this many milliseconds.
|
|
84
|
+
* 10 minutes is the audit's recommended default — long enough for a
|
|
85
|
+
* cooperating tool to refresh on a normal cadence, short enough that
|
|
86
|
+
* the user doesn't make decisions on usage numbers from an hour ago
|
|
87
|
+
* if the producer crashed. Override via OMG_USAGE_CACHE_TTL_MS for
|
|
88
|
+
* tools with a different refresh cycle. */
|
|
89
|
+
const DEFAULT_TTL_MS = 10 * 60 * 1000;
|
|
90
|
+
function resolvedTtlMs() {
|
|
91
|
+
const raw = process.env.OMG_USAGE_CACHE_TTL_MS;
|
|
92
|
+
if (!raw)
|
|
93
|
+
return DEFAULT_TTL_MS;
|
|
94
|
+
const n = Number(raw);
|
|
95
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_TTL_MS;
|
|
96
|
+
}
|
|
97
|
+
/** Read the usage cache pointed to by OMG_USAGE_CACHE (or the explicit
|
|
98
|
+
* path). Returns null when the env var is unset, the file is missing,
|
|
99
|
+
* the JSON is unparseable, or the file's mtime is older than the TTL
|
|
100
|
+
* — callers fall back to raw "~" usage instead of rendering a stale
|
|
101
|
+
* percentage from a dead producer. */
|
|
102
|
+
export function loadUsageCache(path = process.env.OMG_USAGE_CACHE) {
|
|
103
|
+
if (!path)
|
|
104
|
+
return null;
|
|
105
|
+
if (!existsSync(path))
|
|
106
|
+
return null;
|
|
107
|
+
// Phase 214: drop snapshots whose producer hasn't refreshed within
|
|
108
|
+
// the TTL window — a stale chip ("ctx 67%") is worse than no chip
|
|
109
|
+
// because the user might make decisions on it.
|
|
110
|
+
try {
|
|
111
|
+
const st = statSync(path);
|
|
112
|
+
if (Date.now() - st.mtimeMs > resolvedTtlMs())
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// stat failed — let the read path handle the error; if statSync
|
|
117
|
+
// fails the read almost certainly will too.
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const raw = readFileSync(path, "utf-8");
|
|
121
|
+
const parsed = JSON.parse(raw);
|
|
122
|
+
if (!parsed || typeof parsed !== "object")
|
|
123
|
+
return null;
|
|
124
|
+
const snap = {};
|
|
125
|
+
for (const key of Object.keys(WINDOW_ALIASES)) {
|
|
126
|
+
const w = parseWindow(findWindow(parsed, WINDOW_ALIASES[key]));
|
|
127
|
+
if (w)
|
|
128
|
+
snap[key] = w;
|
|
129
|
+
}
|
|
130
|
+
return Object.keys(snap).length > 0 ? snap : null;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Flatten a UsageSnapshot into the status-bar fields the gauge reads. */
|
|
137
|
+
export function usageStatusFields(snap) {
|
|
138
|
+
const out = {};
|
|
139
|
+
const map = [
|
|
140
|
+
["fiveHour", "tokensUsed5h", "capFiveHour", "fiveHourResetsAt"],
|
|
141
|
+
["weekly", "tokensUsedWeekly", "capWeekly", "weeklyResetsAt"],
|
|
142
|
+
["session", "tokensUsedSession", "capSession", "sessionResetsAt"],
|
|
143
|
+
];
|
|
144
|
+
for (const [key, usedField, capField, resetField] of map) {
|
|
145
|
+
const w = snap[key];
|
|
146
|
+
if (!w)
|
|
147
|
+
continue;
|
|
148
|
+
if (w.used !== undefined)
|
|
149
|
+
out[usedField] = w.used;
|
|
150
|
+
if (w.limit !== undefined)
|
|
151
|
+
out[capField] = w.limit;
|
|
152
|
+
if (w.resetsAt !== undefined)
|
|
153
|
+
out[resetField] = w.resetsAt;
|
|
154
|
+
}
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=usageCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageCache.js","sourceRoot":"","sources":["../../src/core/usageCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare class RollingUsage {
|
|
2
|
+
private readonly windowMs;
|
|
3
|
+
/** Entries of [ms-epoch, tokens] — old ones drop on prune. */
|
|
4
|
+
private entries;
|
|
5
|
+
constructor(windowMs: number);
|
|
6
|
+
record(ts: number, tokens: number): void;
|
|
7
|
+
/** Total tokens within the trailing windowMs ending at `now`. */
|
|
8
|
+
sum(now: number): number;
|
|
9
|
+
/** Visible for tests. */
|
|
10
|
+
get size(): number;
|
|
11
|
+
private prune;
|
|
12
|
+
}
|
|
13
|
+
/** Resolve a user-supplied plan cap. Env vars override the persisted
|
|
14
|
+
* ~/.omg/plan.json (Phase 82); both override "no cap". Returns
|
|
15
|
+
* undefined when neither is set, so the bar falls back to raw
|
|
16
|
+
* "Nk used" with no percent. */
|
|
17
|
+
export declare function planCapFor(kind: "five_hour" | "weekly" | "session"): number | undefined;
|
|
18
|
+
export declare function setPlanCapResolver(fn: (kind: "five_hour" | "weekly" | "session") => number | undefined): void;
|
|
19
|
+
//# sourceMappingURL=usageWindow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageWindow.d.ts","sourceRoot":"","sources":["../../src/core/usageWindow.ts"],"names":[],"mappings":"AAaA,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,8DAA8D;IAC9D,OAAO,CAAC,OAAO,CAA+B;gBAEjB,QAAQ,EAAE,MAAM;IAI7C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMxC,iEAAiE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOxB,yBAAyB;IACzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,KAAK;CAMd;AAED;;;iCAGiC;AACjC,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAGpB;AAoBD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,GACnE,IAAI,CAEN"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Phase 45: rolling token-usage windows.
|
|
2
|
+
//
|
|
3
|
+
// claude's rate_limit_event tells us *when* the next 5h / weekly /
|
|
4
|
+
// session reset lands, but not *how much* of the quota is left.
|
|
5
|
+
// omg can't read the user's actual plan limits, so the best we can
|
|
6
|
+
// do is track tokens spent in each rolling window and surface them
|
|
7
|
+
// as an approximate number. If the caller knows their plan's cap
|
|
8
|
+
// (via env vars), the bar also shows a percent.
|
|
9
|
+
//
|
|
10
|
+
// Metric: model output_tokens (additive, one number per turn). We
|
|
11
|
+
// could use input_tokens, but those grow with conversation history
|
|
12
|
+
// and double-count every turn — output_tokens reads as "model work".
|
|
13
|
+
export class RollingUsage {
|
|
14
|
+
windowMs;
|
|
15
|
+
/** Entries of [ms-epoch, tokens] — old ones drop on prune. */
|
|
16
|
+
entries = [];
|
|
17
|
+
constructor(windowMs) {
|
|
18
|
+
this.windowMs = windowMs;
|
|
19
|
+
if (windowMs <= 0)
|
|
20
|
+
throw new Error("windowMs must be positive");
|
|
21
|
+
}
|
|
22
|
+
record(ts, tokens) {
|
|
23
|
+
if (tokens <= 0)
|
|
24
|
+
return;
|
|
25
|
+
this.entries.push([ts, tokens]);
|
|
26
|
+
this.prune(ts);
|
|
27
|
+
}
|
|
28
|
+
/** Total tokens within the trailing windowMs ending at `now`. */
|
|
29
|
+
sum(now) {
|
|
30
|
+
this.prune(now);
|
|
31
|
+
let total = 0;
|
|
32
|
+
for (const [, t] of this.entries)
|
|
33
|
+
total += t;
|
|
34
|
+
return total;
|
|
35
|
+
}
|
|
36
|
+
/** Visible for tests. */
|
|
37
|
+
get size() {
|
|
38
|
+
return this.entries.length;
|
|
39
|
+
}
|
|
40
|
+
prune(now) {
|
|
41
|
+
const cutoff = now - this.windowMs;
|
|
42
|
+
while (this.entries.length > 0 && this.entries[0][0] < cutoff) {
|
|
43
|
+
this.entries.shift();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Resolve a user-supplied plan cap. Env vars override the persisted
|
|
48
|
+
* ~/.omg/plan.json (Phase 82); both override "no cap". Returns
|
|
49
|
+
* undefined when neither is set, so the bar falls back to raw
|
|
50
|
+
* "Nk used" with no percent. */
|
|
51
|
+
export function planCapFor(kind) {
|
|
52
|
+
// Lazy import to avoid a node:fs dependency cycle.
|
|
53
|
+
return planCapResolvedRef(kind);
|
|
54
|
+
}
|
|
55
|
+
// Default resolver: env-only, identical to the pre-Phase-82 behaviour.
|
|
56
|
+
// cli.ts overrides via setPlanCapResolver() to also consult
|
|
57
|
+
// ~/.omg/plan.json (Phase 82). Tests that don't import planConfig
|
|
58
|
+
// still see the original env semantics.
|
|
59
|
+
let planCapResolvedRef = (kind) => {
|
|
60
|
+
const env = kind === "five_hour"
|
|
61
|
+
? process.env.OMG_PLAN_5H_TOKENS
|
|
62
|
+
: kind === "weekly"
|
|
63
|
+
? process.env.OMG_PLAN_WEEKLY_TOKENS
|
|
64
|
+
: process.env.OMG_PLAN_SESSION_TOKENS;
|
|
65
|
+
if (!env)
|
|
66
|
+
return undefined;
|
|
67
|
+
const n = Number(env);
|
|
68
|
+
return Number.isFinite(n) && n > 0 ? n : undefined;
|
|
69
|
+
};
|
|
70
|
+
export function setPlanCapResolver(fn) {
|
|
71
|
+
planCapResolvedRef = fn;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=usageWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageWindow.js","sourceRoot":"","sources":["../../src/core/usageWindow.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,mEAAmE;AACnE,gEAAgE;AAChE,mEAAmE;AACnE,mEAAmE;AACnE,iEAAiE;AACjE,gDAAgD;AAChD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,qEAAqE;AAErE,MAAM,OAAO,YAAY;IAIM;IAH7B,8DAA8D;IACtD,OAAO,GAA4B,EAAE,CAAC;IAE9C,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAC3C,IAAI,QAAQ,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,MAAc;QAC/B,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,iEAAiE;IACjE,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yBAAyB;IACzB,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,GAAW;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAED;;;iCAGiC;AACjC,MAAM,UAAU,UAAU,CACxB,IAAwC;IAExC,mDAAmD;IACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,uEAAuE;AACvE,4DAA4D;AAC5D,kEAAkE;AAClE,wCAAwC;AACxC,IAAI,kBAAkB,GAEI,CAAC,IAAI,EAAE,EAAE;IACjC,MAAM,GAAG,GACP,IAAI,KAAK,WAAW;QAClB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChC,CAAC,CAAC,IAAI,KAAK,QAAQ;YACjB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;YACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,EAAoE;IAEpE,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const BG_DONE_MARKER = "__OMG_BG_DONE__";
|
|
2
|
+
/** True when a background task's output (or its tail) shows the explicit
|
|
3
|
+
* completion marker — definitive proof the command finished. */
|
|
4
|
+
export declare function outputSignalsCompletion(text: string): boolean;
|
|
5
|
+
//# sourceMappingURL=bgProtocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bgProtocol.d.ts","sourceRoot":"","sources":["../../../src/core/util/bgProtocol.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD;iEACiE;AACjE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Phase 315: background-task completion protocol.
|
|
2
|
+
//
|
|
3
|
+
// omg auto-continues a turn when a `run_in_background` Bash task finishes
|
|
4
|
+
// (Phase 257). The watcher's default signal is "output file size stable
|
|
5
|
+
// for STABLE_MS" — a heuristic that a deploy's silent phases (a long
|
|
6
|
+
// `next build`, a detached `compose up -d`) can mis-trigger or stall on.
|
|
7
|
+
//
|
|
8
|
+
// This marker is the precise alternative: the claude-cli nudge tells the
|
|
9
|
+
// model to echo it as the LAST line of a backgrounded command, and the
|
|
10
|
+
// watcher fires the instant it appears — faster (no STABLE_MS wait) and
|
|
11
|
+
// exact (no false positive from quiet output). Kept in core so both the
|
|
12
|
+
// adapter (core, owns the nudge) and the watcher (cli) can import it
|
|
13
|
+
// without crossing the core → cli layering boundary.
|
|
14
|
+
export const BG_DONE_MARKER = "__OMG_BG_DONE__";
|
|
15
|
+
/** True when a background task's output (or its tail) shows the explicit
|
|
16
|
+
* completion marker — definitive proof the command finished. */
|
|
17
|
+
export function outputSignalsCompletion(text) {
|
|
18
|
+
return text.includes(BG_DONE_MARKER);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=bgProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bgProtocol.js","sourceRoot":"","sources":["../../../src/core/util/bgProtocol.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,yEAAyE;AACzE,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,qEAAqE;AACrE,qDAAqD;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEhD;iEACiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/core/util/clipboard.ts"],"names":[],"mappings":"AAoCA;kEACkE;AAClE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Phase 172: copy text to the system clipboard via the platform's
|
|
2
|
+
// native utility. macOS uses pbcopy; Linux tries the common
|
|
3
|
+
// wayland/X11 tools; Windows uses clip. Each candidate is piped the
|
|
4
|
+
// text on stdin and we take the first one that exits cleanly.
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
/** Ordered list of `argv` candidates per platform. The first one that
|
|
7
|
+
* runs without erroring wins, so a machine missing wl-copy can still
|
|
8
|
+
* fall through to xclip / xsel. */
|
|
9
|
+
const CANDIDATES = {
|
|
10
|
+
darwin: [["pbcopy"]],
|
|
11
|
+
linux: [
|
|
12
|
+
["wl-copy"],
|
|
13
|
+
["xclip", "-selection", "clipboard"],
|
|
14
|
+
["xsel", "--clipboard", "--input"],
|
|
15
|
+
],
|
|
16
|
+
win32: [["clip"]],
|
|
17
|
+
};
|
|
18
|
+
function pipeToCommand(bin, args, text) {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
const child = spawn(bin, args, { stdio: ["pipe", "ignore", "ignore"] });
|
|
21
|
+
child.on("error", reject);
|
|
22
|
+
child.on("close", (code) => code === 0 ? resolve() : reject(new Error(`${bin} exited ${code}`)));
|
|
23
|
+
child.stdin.on("error", reject);
|
|
24
|
+
child.stdin.end(text);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Copy `text` to the clipboard. Resolves with the utility that
|
|
28
|
+
* succeeded (e.g. "pbcopy"); rejects when no candidate works. */
|
|
29
|
+
export async function copyToClipboard(text) {
|
|
30
|
+
const candidates = CANDIDATES[process.platform] ?? [];
|
|
31
|
+
if (candidates.length === 0) {
|
|
32
|
+
throw new Error(`no clipboard utility known for platform ${process.platform}`);
|
|
33
|
+
}
|
|
34
|
+
let lastErr;
|
|
35
|
+
for (const [bin, ...args] of candidates) {
|
|
36
|
+
try {
|
|
37
|
+
await pipeToCommand(bin, args, text);
|
|
38
|
+
return bin;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
lastErr = e;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`clipboard copy failed (tried ${candidates.map((c) => c[0]).join(", ")}): ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../../src/core/util/clipboard.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,4DAA4D;AAC5D,oEAAoE;AACpE,8DAA8D;AAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;oCAEoC;AACpC,MAAM,UAAU,GAA+B;IAC7C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,EAAE;QACL,CAAC,SAAS,CAAC;QACX,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC;QACpC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC;KACnC;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;CAClB,CAAC;AAEF,SAAS,aAAa,CACpB,GAAW,EACX,IAAc,EACd,IAAY;IAEZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,WAAW,IAAI,EAAE,CAAC,CAAC,CACpE,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;kEACkE;AAClE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,2CAA2C,OAAO,CAAC,QAAQ,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,OAAgB,CAAC;IACrB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,gCAAgC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MACpE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAC7D,EAAE,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboardImage.d.ts","sourceRoot":"","sources":["../../../src/core/util/clipboardImage.ts"],"names":[],"mappings":"AA8BA,yEAAyE;AACzE,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CA6BrD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Phase 340: capture an image sitting on the OS clipboard to a temp file so
|
|
2
|
+
// it can be attached to a turn (codex `-i`, claude Read reference).
|
|
3
|
+
//
|
|
4
|
+
// Terminals don't deliver image bytes on Cmd+V — the paste keystroke yields
|
|
5
|
+
// nothing (or an empty bracketed paste). So omg can't receive the image
|
|
6
|
+
// inline; instead, when a paste looks empty, it PROBES the clipboard here.
|
|
7
|
+
// macOS only for now: `pngpaste` if installed (fast), else AppleScript via
|
|
8
|
+
// `osascript` reading `«class PNGf»` (no dependency). Returns the temp file
|
|
9
|
+
// path, or null when there's no image / not macOS / capture failed — callers
|
|
10
|
+
// treat null as "nothing to attach" and fall back to the `@path` flow.
|
|
11
|
+
import { execFileSync } from "node:child_process";
|
|
12
|
+
import { existsSync, statSync } from "node:fs";
|
|
13
|
+
import { tmpdir } from "node:os";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
let seq = 0;
|
|
16
|
+
function tmpPngPath() {
|
|
17
|
+
seq += 1;
|
|
18
|
+
// pid + seq avoids collisions across concurrent omg processes without
|
|
19
|
+
// needing Date.now()/random (kept deterministic-ish; uniqueness is enough).
|
|
20
|
+
return join(tmpdir(), `omg-clip-${process.pid}-${seq}.png`);
|
|
21
|
+
}
|
|
22
|
+
/** True only on macOS — the only platform we have a clipboard-image path for. */
|
|
23
|
+
function isMac() {
|
|
24
|
+
return process.platform === "darwin";
|
|
25
|
+
}
|
|
26
|
+
/** Capture a clipboard image to a temp PNG. Returns its path or null. */
|
|
27
|
+
export function captureClipboardImage() {
|
|
28
|
+
if (!isMac())
|
|
29
|
+
return null;
|
|
30
|
+
const out = tmpPngPath();
|
|
31
|
+
// Fast path: pngpaste writes the clipboard image straight to a file and
|
|
32
|
+
// exits non-zero when the clipboard holds no image.
|
|
33
|
+
try {
|
|
34
|
+
execFileSync("pngpaste", [out], { stdio: "ignore", timeout: 4000 });
|
|
35
|
+
if (existsSync(out) && statSync(out).size > 0)
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
/* pngpaste missing or no image — fall through to osascript */
|
|
40
|
+
}
|
|
41
|
+
// Dependency-free path: AppleScript pulls the PNG representation and we
|
|
42
|
+
// write the raw bytes. `the clipboard as «class PNGf»` throws when the
|
|
43
|
+
// clipboard has no image, which osascript surfaces as a non-zero exit.
|
|
44
|
+
try {
|
|
45
|
+
const script = `set thePNG to (the clipboard as «class PNGf»)\nset fh to open for access POSIX file ${JSON.stringify(out)} with write permission\nwrite thePNG to fh\nclose access fh`;
|
|
46
|
+
execFileSync("osascript", ["-e", script], {
|
|
47
|
+
stdio: "ignore",
|
|
48
|
+
timeout: 4000,
|
|
49
|
+
});
|
|
50
|
+
if (existsSync(out) && statSync(out).size > 0)
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
/* no image on the clipboard, or osascript unavailable */
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=clipboardImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboardImage.js","sourceRoot":"","sources":["../../../src/core/util/clipboardImage.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,oEAAoE;AACpE,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEZ,SAAS,UAAU;IACjB,GAAG,IAAI,CAAC,CAAC;IACT,sEAAsE;IACtE,4EAA4E;IAC5E,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,iFAAiF;AACjF,SAAS,KAAK;IACZ,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IAEzB,wEAAwE;IACxE,oDAAoD;IACpD,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,uEAAuE;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,uFAAuF,IAAI,CAAC,SAAS,CAClH,GAAG,CACJ,6DAA6D,CAAC;QAC/D,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACxC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Best-effort script detection → a human language name, or null when we
|
|
2
|
+
* can't confidently name it (Latin text covers many languages, so we
|
|
3
|
+
* fall back to the generic "same language" instruction). */
|
|
4
|
+
export declare function languageOf(text: string): string | null;
|
|
5
|
+
/** The system-prompt directive to append for a given task. Always asks
|
|
6
|
+
* the model to mirror the user's language; when the script is
|
|
7
|
+
* recognizable, it also names it concretely (more reliable). */
|
|
8
|
+
export declare function languageDirective(task: string): string;
|
|
9
|
+
//# sourceMappingURL=langHint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langHint.d.ts","sourceRoot":"","sources":["../../../src/core/util/langHint.ts"],"names":[],"mappings":"AASA;;6DAE6D;AAC7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMtD;AAED;;iEAEiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOtD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Phase 141: derive a "respond in the user's language" directive for
|
|
2
|
+
// team role system prompts.
|
|
3
|
+
//
|
|
4
|
+
// Team roles (implementer / reviewer / director / pm) otherwise reply in
|
|
5
|
+
// whatever language their policy/context biases them toward — so a Korean
|
|
6
|
+
// request got English reviews. We bake a language directive into each
|
|
7
|
+
// role's adapter system prompt at construction; for claude-cli that lands
|
|
8
|
+
// as `--append-system-prompt`, for API adapters as the `system` field.
|
|
9
|
+
/** Best-effort script detection → a human language name, or null when we
|
|
10
|
+
* can't confidently name it (Latin text covers many languages, so we
|
|
11
|
+
* fall back to the generic "same language" instruction). */
|
|
12
|
+
export function languageOf(text) {
|
|
13
|
+
if (/[가-ᄀ-ᇿ]/.test(text))
|
|
14
|
+
return "Korean";
|
|
15
|
+
if (/[-ヿ]/.test(text))
|
|
16
|
+
return "Japanese"; // kana
|
|
17
|
+
if (/[一-鿿]/.test(text))
|
|
18
|
+
return "Chinese"; // CJK ideographs (no kana)
|
|
19
|
+
if (/[Ѐ-ӿ]/.test(text))
|
|
20
|
+
return "Russian";
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
/** The system-prompt directive to append for a given task. Always asks
|
|
24
|
+
* the model to mirror the user's language; when the script is
|
|
25
|
+
* recognizable, it also names it concretely (more reliable). */
|
|
26
|
+
export function languageDirective(task) {
|
|
27
|
+
const base = "Always respond in the same language the user used in their request.";
|
|
28
|
+
const lang = languageOf(task);
|
|
29
|
+
return lang
|
|
30
|
+
? `${base} The user's request is in ${lang}; respond in ${lang}.`
|
|
31
|
+
: base;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=langHint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langHint.js","sourceRoot":"","sources":["../../../src/core/util/langHint.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,4BAA4B;AAC5B,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,0EAA0E;AAC1E,uEAAuE;AAEvE;;6DAE6D;AAC7D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,OAAO;IAClD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,2BAA2B;IACrE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;iEAEiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GACR,qEAAqE,CAAC;IACxE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI;QACT,CAAC,CAAC,GAAG,IAAI,6BAA6B,IAAI,gBAAgB,IAAI,GAAG;QACjE,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../../src/core/util/slugify.ts"],"names":[],"mappings":"AAMA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoB5C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Phase 53: derive a tab name from a free-form string (typically
|
|
2
|
+
// the first user message). The output is ASCII alnum + dashes,
|
|
3
|
+
// lowercased, capped at 32 chars, never empty. Non-ASCII
|
|
4
|
+
// characters get stripped — if the message is entirely non-ASCII
|
|
5
|
+
// (Korean / Japanese / etc.) we return the placeholder "tab".
|
|
6
|
+
export function slugify(text) {
|
|
7
|
+
const normalized = text
|
|
8
|
+
.toLowerCase()
|
|
9
|
+
.replace(/[^a-z0-9\s_-]+/g, "")
|
|
10
|
+
.trim()
|
|
11
|
+
.replace(/[\s_]+/g, "-")
|
|
12
|
+
.replace(/-+/g, "-")
|
|
13
|
+
.replace(/^-+|-+$/g, "");
|
|
14
|
+
// Phase 286: collapse repeated tokens so a message that mentions the
|
|
15
|
+
// same word several times ("UI … UI … UI") yields "ui", not
|
|
16
|
+
// "ui-ui-ui-ui". First-occurrence order is preserved.
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const tokens = [];
|
|
19
|
+
for (const tok of normalized.split("-")) {
|
|
20
|
+
if (!tok || seen.has(tok))
|
|
21
|
+
continue;
|
|
22
|
+
seen.add(tok);
|
|
23
|
+
tokens.push(tok);
|
|
24
|
+
}
|
|
25
|
+
const slug = tokens.join("-").slice(0, 32).replace(/-+$/, "");
|
|
26
|
+
return slug || "tab";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=slugify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slugify.js","sourceRoot":"","sources":["../../../src/core/util/slugify.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,+DAA+D;AAC/D,yDAAyD;AACzD,iEAAiE;AACjE,8DAA8D;AAE9D,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,UAAU,GAAG,IAAI;SACpB,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,qEAAqE;IACrE,4DAA4D;IAC5D,sDAAsD;IACtD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI,IAAI,KAAK,CAAC;AACvB,CAAC"}
|