@yjjeong/omg 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/cli/args.d.ts +39 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +129 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/autoCommit.d.ts +20 -0
- package/dist/cli/autoCommit.d.ts.map +1 -0
- package/dist/cli/autoCommit.js +121 -0
- package/dist/cli/autoCommit.js.map +1 -0
- package/dist/cli/bgTasks.d.ts +57 -0
- package/dist/cli/bgTasks.d.ts.map +1 -0
- package/dist/cli/bgTasks.js +193 -0
- package/dist/cli/bgTasks.js.map +1 -0
- package/dist/cli/compactor.d.ts +48 -0
- package/dist/cli/compactor.d.ts.map +1 -0
- package/dist/cli/compactor.js +73 -0
- package/dist/cli/compactor.js.map +1 -0
- package/dist/cli/doctor.d.ts +77 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +279 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/gitStatus.d.ts +7 -0
- package/dist/cli/gitStatus.d.ts.map +1 -0
- package/dist/cli/gitStatus.js +70 -0
- package/dist/cli/gitStatus.js.map +1 -0
- package/dist/cli/handoff.d.ts +36 -0
- package/dist/cli/handoff.d.ts.map +1 -0
- package/dist/cli/handoff.js +60 -0
- package/dist/cli/handoff.js.map +1 -0
- package/dist/cli/interactive/brokers.d.ts +31 -0
- package/dist/cli/interactive/brokers.d.ts.map +1 -0
- package/dist/cli/interactive/brokers.js +259 -0
- package/dist/cli/interactive/brokers.js.map +1 -0
- package/dist/cli/interactive/index.d.ts +8 -0
- package/dist/cli/interactive/index.d.ts.map +1 -0
- package/dist/cli/interactive/index.js +731 -0
- package/dist/cli/interactive/index.js.map +1 -0
- package/dist/cli/interactive/proxyQuestions.d.ts +15 -0
- package/dist/cli/interactive/proxyQuestions.d.ts.map +1 -0
- package/dist/cli/interactive/proxyQuestions.js +48 -0
- package/dist/cli/interactive/proxyQuestions.js.map +1 -0
- package/dist/cli/interactive/tabManager.d.ts +32 -0
- package/dist/cli/interactive/tabManager.d.ts.map +1 -0
- package/dist/cli/interactive/tabManager.js +244 -0
- package/dist/cli/interactive/tabManager.js.map +1 -0
- package/dist/cli/interactive/teamHint.d.ts +2 -0
- package/dist/cli/interactive/teamHint.d.ts.map +1 -0
- package/dist/cli/interactive/teamHint.js +14 -0
- package/dist/cli/interactive/teamHint.js.map +1 -0
- package/dist/cli/login.d.ts +13 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +53 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/modes/demo.d.ts +12 -0
- package/dist/cli/modes/demo.d.ts.map +1 -0
- package/dist/cli/modes/demo.js +48 -0
- package/dist/cli/modes/demo.js.map +1 -0
- package/dist/cli/modes/doctor.d.ts +28 -0
- package/dist/cli/modes/doctor.d.ts.map +1 -0
- package/dist/cli/modes/doctor.js +79 -0
- package/dist/cli/modes/doctor.js.map +1 -0
- package/dist/cli/modes/login.d.ts +5 -0
- package/dist/cli/modes/login.d.ts.map +1 -0
- package/dist/cli/modes/login.js +40 -0
- package/dist/cli/modes/login.js.map +1 -0
- package/dist/cli/modes/mcpServe.d.ts +9 -0
- package/dist/cli/modes/mcpServe.d.ts.map +1 -0
- package/dist/cli/modes/mcpServe.js +112 -0
- package/dist/cli/modes/mcpServe.js.map +1 -0
- package/dist/cli/modes/orchestrator.d.ts +14 -0
- package/dist/cli/modes/orchestrator.d.ts.map +1 -0
- package/dist/cli/modes/orchestrator.js +64 -0
- package/dist/cli/modes/orchestrator.js.map +1 -0
- package/dist/cli/modes/team.d.ts +14 -0
- package/dist/cli/modes/team.d.ts.map +1 -0
- package/dist/cli/modes/team.js +87 -0
- package/dist/cli/modes/team.js.map +1 -0
- package/dist/cli/registry.d.ts +3 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +15 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/slash/core.d.ts +3 -0
- package/dist/cli/slash/core.d.ts.map +1 -0
- package/dist/cli/slash/core.js +509 -0
- package/dist/cli/slash/core.js.map +1 -0
- package/dist/cli/slash/index.d.ts +3 -0
- package/dist/cli/slash/index.d.ts.map +1 -0
- package/dist/cli/slash/index.js +28 -0
- package/dist/cli/slash/index.js.map +1 -0
- package/dist/cli/slash/modes.d.ts +3 -0
- package/dist/cli/slash/modes.d.ts.map +1 -0
- package/dist/cli/slash/modes.js +530 -0
- package/dist/cli/slash/modes.js.map +1 -0
- package/dist/cli/slash/session.d.ts +3 -0
- package/dist/cli/slash/session.d.ts.map +1 -0
- package/dist/cli/slash/session.js +376 -0
- package/dist/cli/slash/session.js.map +1 -0
- package/dist/cli/slash/shared.d.ts +43 -0
- package/dist/cli/slash/shared.d.ts.map +1 -0
- package/dist/cli/slash/shared.js +6 -0
- package/dist/cli/slash/shared.js.map +1 -0
- package/dist/cli/slash/tabs.d.ts +3 -0
- package/dist/cli/slash/tabs.d.ts.map +1 -0
- package/dist/cli/slash/tabs.js +497 -0
- package/dist/cli/slash/tabs.js.map +1 -0
- package/dist/cli/slash/team.d.ts +3 -0
- package/dist/cli/slash/team.d.ts.map +1 -0
- package/dist/cli/slash/team.js +85 -0
- package/dist/cli/slash/team.js.map +1 -0
- package/dist/cli/slash.d.ts +3 -0
- package/dist/cli/slash.d.ts.map +1 -0
- package/dist/cli/slash.js +8 -0
- package/dist/cli/slash.js.map +1 -0
- package/dist/cli/teamPipeline.d.ts +42 -0
- package/dist/cli/teamPipeline.d.ts.map +1 -0
- package/dist/cli/teamPipeline.js +406 -0
- package/dist/cli/teamPipeline.js.map +1 -0
- package/dist/cli/touchedFiles.d.ts +14 -0
- package/dist/cli/touchedFiles.d.ts.map +1 -0
- package/dist/cli/touchedFiles.js +66 -0
- package/dist/cli/touchedFiles.js.map +1 -0
- package/dist/cli/turn.d.ts +47 -0
- package/dist/cli/turn.d.ts.map +1 -0
- package/dist/cli/turn.js +626 -0
- package/dist/cli/turn.js.map +1 -0
- package/dist/cli/types.d.ts +47 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/uiSession.d.ts +10 -0
- package/dist/cli/uiSession.d.ts.map +1 -0
- package/dist/cli/uiSession.js +66 -0
- package/dist/cli/uiSession.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +128 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/adapter.d.ts +47 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +48 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/adapters/anthropic.d.ts +35 -0
- package/dist/core/adapters/anthropic.d.ts.map +1 -0
- package/dist/core/adapters/anthropic.js +203 -0
- package/dist/core/adapters/anthropic.js.map +1 -0
- package/dist/core/adapters/claudeCli.d.ts +126 -0
- package/dist/core/adapters/claudeCli.d.ts.map +1 -0
- package/dist/core/adapters/claudeCli.js +584 -0
- package/dist/core/adapters/claudeCli.js.map +1 -0
- package/dist/core/adapters/cliAdapterBase.d.ts +48 -0
- package/dist/core/adapters/cliAdapterBase.d.ts.map +1 -0
- package/dist/core/adapters/cliAdapterBase.js +105 -0
- package/dist/core/adapters/cliAdapterBase.js.map +1 -0
- package/dist/core/adapters/cliStderr.d.ts +35 -0
- package/dist/core/adapters/cliStderr.d.ts.map +1 -0
- package/dist/core/adapters/cliStderr.js +87 -0
- package/dist/core/adapters/cliStderr.js.map +1 -0
- package/dist/core/adapters/codexCli.d.ts +113 -0
- package/dist/core/adapters/codexCli.d.ts.map +1 -0
- package/dist/core/adapters/codexCli.js +424 -0
- package/dist/core/adapters/codexCli.js.map +1 -0
- package/dist/core/adapters/gemini.d.ts +17 -0
- package/dist/core/adapters/gemini.d.ts.map +1 -0
- package/dist/core/adapters/gemini.js +133 -0
- package/dist/core/adapters/gemini.js.map +1 -0
- package/dist/core/adapters/geminiCli.d.ts +91 -0
- package/dist/core/adapters/geminiCli.d.ts.map +1 -0
- package/dist/core/adapters/geminiCli.js +276 -0
- package/dist/core/adapters/geminiCli.js.map +1 -0
- package/dist/core/adapters/nudges.d.ts +21 -0
- package/dist/core/adapters/nudges.d.ts.map +1 -0
- package/dist/core/adapters/nudges.js +75 -0
- package/dist/core/adapters/nudges.js.map +1 -0
- package/dist/core/adapters/openai.d.ts +17 -0
- package/dist/core/adapters/openai.d.ts.map +1 -0
- package/dist/core/adapters/openai.js +138 -0
- package/dist/core/adapters/openai.js.map +1 -0
- package/dist/core/adapters/parseFailures.d.ts +10 -0
- package/dist/core/adapters/parseFailures.d.ts.map +1 -0
- package/dist/core/adapters/parseFailures.js +35 -0
- package/dist/core/adapters/parseFailures.js.map +1 -0
- package/dist/core/adapters/utils.d.ts +11 -0
- package/dist/core/adapters/utils.d.ts.map +1 -0
- package/dist/core/adapters/utils.js +33 -0
- package/dist/core/adapters/utils.js.map +1 -0
- package/dist/core/askBroker.d.ts +11 -0
- package/dist/core/askBroker.d.ts.map +1 -0
- package/dist/core/askBroker.js +78 -0
- package/dist/core/askBroker.js.map +1 -0
- package/dist/core/atomicWrite.d.ts +5 -0
- package/dist/core/atomicWrite.d.ts.map +1 -0
- package/dist/core/atomicWrite.js +18 -0
- package/dist/core/atomicWrite.js.map +1 -0
- package/dist/core/brokers/askBroker.d.ts +11 -0
- package/dist/core/brokers/askBroker.d.ts.map +1 -0
- package/dist/core/brokers/askBroker.js +78 -0
- package/dist/core/brokers/askBroker.js.map +1 -0
- package/dist/core/brokers/permissionBroker.d.ts +7 -0
- package/dist/core/brokers/permissionBroker.d.ts.map +1 -0
- package/dist/core/brokers/permissionBroker.js +63 -0
- package/dist/core/brokers/permissionBroker.js.map +1 -0
- package/dist/core/brokers/socketBroker.d.ts +35 -0
- package/dist/core/brokers/socketBroker.d.ts.map +1 -0
- package/dist/core/brokers/socketBroker.js +74 -0
- package/dist/core/brokers/socketBroker.js.map +1 -0
- package/dist/core/clipboard.d.ts +4 -0
- package/dist/core/clipboard.d.ts.map +1 -0
- package/dist/core/clipboard.js +46 -0
- package/dist/core/clipboard.js.map +1 -0
- package/dist/core/compactor.d.ts +32 -0
- package/dist/core/compactor.d.ts.map +1 -0
- package/dist/core/compactor.js +91 -0
- package/dist/core/compactor.js.map +1 -0
- package/dist/core/consensusEngine.d.ts +21 -0
- package/dist/core/consensusEngine.d.ts.map +1 -0
- package/dist/core/consensusEngine.js +116 -0
- package/dist/core/consensusEngine.js.map +1 -0
- package/dist/core/context/contextCompressor.d.ts +10 -0
- package/dist/core/context/contextCompressor.d.ts.map +1 -0
- package/dist/core/context/contextCompressor.js +54 -0
- package/dist/core/context/contextCompressor.js.map +1 -0
- package/dist/core/context/contextWindows.d.ts +25 -0
- package/dist/core/context/contextWindows.d.ts.map +1 -0
- package/dist/core/context/contextWindows.js +101 -0
- package/dist/core/context/contextWindows.js.map +1 -0
- package/dist/core/context/summarizer.d.ts +65 -0
- package/dist/core/context/summarizer.d.ts.map +1 -0
- package/dist/core/context/summarizer.js +184 -0
- package/dist/core/context/summarizer.js.map +1 -0
- package/dist/core/context/usageCache.d.ts +19 -0
- package/dist/core/context/usageCache.d.ts.map +1 -0
- package/dist/core/context/usageCache.js +157 -0
- package/dist/core/context/usageCache.js.map +1 -0
- package/dist/core/context/usageWindow.d.ts +19 -0
- package/dist/core/context/usageWindow.d.ts.map +1 -0
- package/dist/core/context/usageWindow.js +73 -0
- package/dist/core/context/usageWindow.js.map +1 -0
- package/dist/core/contextCompressor.d.ts +10 -0
- package/dist/core/contextCompressor.d.ts.map +1 -0
- package/dist/core/contextCompressor.js +54 -0
- package/dist/core/contextCompressor.js.map +1 -0
- package/dist/core/contextWindows.d.ts +5 -0
- package/dist/core/contextWindows.d.ts.map +1 -0
- package/dist/core/contextWindows.js +60 -0
- package/dist/core/contextWindows.js.map +1 -0
- package/dist/core/continuum/digest.d.ts +35 -0
- package/dist/core/continuum/digest.d.ts.map +1 -0
- package/dist/core/continuum/digest.js +91 -0
- package/dist/core/continuum/digest.js.map +1 -0
- package/dist/core/continuum/index.d.ts +6 -0
- package/dist/core/continuum/index.d.ts.map +1 -0
- package/dist/core/continuum/index.js +7 -0
- package/dist/core/continuum/index.js.map +1 -0
- package/dist/core/continuum/inject.d.ts +9 -0
- package/dist/core/continuum/inject.d.ts.map +1 -0
- package/dist/core/continuum/inject.js +78 -0
- package/dist/core/continuum/inject.js.map +1 -0
- package/dist/core/continuum/projectId.d.ts +10 -0
- package/dist/core/continuum/projectId.d.ts.map +1 -0
- package/dist/core/continuum/projectId.js +60 -0
- package/dist/core/continuum/projectId.js.map +1 -0
- package/dist/core/continuum/store.d.ts +24 -0
- package/dist/core/continuum/store.d.ts.map +1 -0
- package/dist/core/continuum/store.js +144 -0
- package/dist/core/continuum/store.js.map +1 -0
- package/dist/core/continuum/types.d.ts +87 -0
- package/dist/core/continuum/types.d.ts.map +1 -0
- package/dist/core/continuum/types.js +9 -0
- package/dist/core/continuum/types.js.map +1 -0
- package/dist/core/dag.d.ts +21 -0
- package/dist/core/dag.d.ts.map +1 -0
- package/dist/core/dag.js +71 -0
- package/dist/core/dag.js.map +1 -0
- package/dist/core/director.d.ts +11 -0
- package/dist/core/director.d.ts.map +1 -0
- package/dist/core/director.js +37 -0
- package/dist/core/director.js.map +1 -0
- package/dist/core/hookedToolBroker.d.ts +25 -0
- package/dist/core/hookedToolBroker.d.ts.map +1 -0
- package/dist/core/hookedToolBroker.js +95 -0
- package/dist/core/hookedToolBroker.js.map +1 -0
- package/dist/core/langHint.d.ts +9 -0
- package/dist/core/langHint.d.ts.map +1 -0
- package/dist/core/langHint.js +33 -0
- package/dist/core/langHint.js.map +1 -0
- package/dist/core/mcp/mcpClient.d.ts +42 -0
- package/dist/core/mcp/mcpClient.d.ts.map +1 -0
- package/dist/core/mcp/mcpClient.js +134 -0
- package/dist/core/mcp/mcpClient.js.map +1 -0
- package/dist/core/mcp/mcpConfig.d.ts +58 -0
- package/dist/core/mcp/mcpConfig.d.ts.map +1 -0
- package/dist/core/mcp/mcpConfig.js +148 -0
- package/dist/core/mcp/mcpConfig.js.map +1 -0
- package/dist/core/mcp/mcpManager.d.ts +31 -0
- package/dist/core/mcp/mcpManager.d.ts.map +1 -0
- package/dist/core/mcp/mcpManager.js +83 -0
- package/dist/core/mcp/mcpManager.js.map +1 -0
- package/dist/core/mcpClient.d.ts +42 -0
- package/dist/core/mcpClient.d.ts.map +1 -0
- package/dist/core/mcpClient.js +134 -0
- package/dist/core/mcpClient.js.map +1 -0
- package/dist/core/mcpConfig.d.ts +24 -0
- package/dist/core/mcpConfig.d.ts.map +1 -0
- package/dist/core/mcpConfig.js +74 -0
- package/dist/core/mcpConfig.js.map +1 -0
- package/dist/core/mcpManager.d.ts +31 -0
- package/dist/core/mcpManager.d.ts.map +1 -0
- package/dist/core/mcpManager.js +83 -0
- package/dist/core/mcpManager.js.map +1 -0
- package/dist/core/memory.d.ts +22 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +102 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/omgToolManifest.d.ts +34 -0
- package/dist/core/omgToolManifest.d.ts.map +1 -0
- package/dist/core/omgToolManifest.js +59 -0
- package/dist/core/omgToolManifest.js.map +1 -0
- package/dist/core/orchestration/consensusEngine.d.ts +21 -0
- package/dist/core/orchestration/consensusEngine.d.ts.map +1 -0
- package/dist/core/orchestration/consensusEngine.js +116 -0
- package/dist/core/orchestration/consensusEngine.js.map +1 -0
- package/dist/core/orchestration/dag.d.ts +21 -0
- package/dist/core/orchestration/dag.d.ts.map +1 -0
- package/dist/core/orchestration/dag.js +71 -0
- package/dist/core/orchestration/dag.js.map +1 -0
- package/dist/core/orchestration/director.d.ts +11 -0
- package/dist/core/orchestration/director.d.ts.map +1 -0
- package/dist/core/orchestration/director.js +37 -0
- package/dist/core/orchestration/director.js.map +1 -0
- package/dist/core/orchestration/orchestrator.d.ts +32 -0
- package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/orchestrator.js +214 -0
- package/dist/core/orchestration/orchestrator.js.map +1 -0
- package/dist/core/orchestration/roleRouter.d.ts +28 -0
- package/dist/core/orchestration/roleRouter.d.ts.map +1 -0
- package/dist/core/orchestration/roleRouter.js +64 -0
- package/dist/core/orchestration/roleRouter.js.map +1 -0
- package/dist/core/orchestration/teamRunner.d.ts +69 -0
- package/dist/core/orchestration/teamRunner.d.ts.map +1 -0
- package/dist/core/orchestration/teamRunner.js +477 -0
- package/dist/core/orchestration/teamRunner.js.map +1 -0
- package/dist/core/orchestration/types.d.ts +115 -0
- package/dist/core/orchestration/types.d.ts.map +1 -0
- package/dist/core/orchestration/types.js +71 -0
- package/dist/core/orchestration/types.js.map +1 -0
- package/dist/core/orchestrator.d.ts +32 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +214 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/permissionBroker.d.ts +7 -0
- package/dist/core/permissionBroker.d.ts.map +1 -0
- package/dist/core/permissionBroker.js +63 -0
- package/dist/core/permissionBroker.js.map +1 -0
- package/dist/core/planConfig.d.ts +15 -0
- package/dist/core/planConfig.d.ts.map +1 -0
- package/dist/core/planConfig.js +98 -0
- package/dist/core/planConfig.js.map +1 -0
- package/dist/core/presetPersistence.d.ts +4 -0
- package/dist/core/presetPersistence.d.ts.map +1 -0
- package/dist/core/presetPersistence.js +64 -0
- package/dist/core/presetPersistence.js.map +1 -0
- package/dist/core/roleRouter.d.ts +26 -0
- package/dist/core/roleRouter.d.ts.map +1 -0
- package/dist/core/roleRouter.js +62 -0
- package/dist/core/roleRouter.js.map +1 -0
- package/dist/core/sessionList.d.ts +26 -0
- package/dist/core/sessionList.d.ts.map +1 -0
- package/dist/core/sessionList.js +278 -0
- package/dist/core/sessionList.js.map +1 -0
- package/dist/core/slugify.d.ts +2 -0
- package/dist/core/slugify.d.ts.map +1 -0
- package/dist/core/slugify.js +17 -0
- package/dist/core/slugify.js.map +1 -0
- package/dist/core/socketBroker.d.ts +19 -0
- package/dist/core/socketBroker.d.ts.map +1 -0
- package/dist/core/socketBroker.js +48 -0
- package/dist/core/socketBroker.js.map +1 -0
- package/dist/core/state/agentsMdScaffold.d.ts +15 -0
- package/dist/core/state/agentsMdScaffold.d.ts.map +1 -0
- package/dist/core/state/agentsMdScaffold.js +118 -0
- package/dist/core/state/agentsMdScaffold.js.map +1 -0
- package/dist/core/state/atomicWrite.d.ts +5 -0
- package/dist/core/state/atomicWrite.d.ts.map +1 -0
- package/dist/core/state/atomicWrite.js +18 -0
- package/dist/core/state/atomicWrite.js.map +1 -0
- package/dist/core/state/handoff.d.ts +20 -0
- package/dist/core/state/handoff.d.ts.map +1 -0
- package/dist/core/state/handoff.js +71 -0
- package/dist/core/state/handoff.js.map +1 -0
- package/dist/core/state/mcpCatalog.d.ts +11 -0
- package/dist/core/state/mcpCatalog.d.ts.map +1 -0
- package/dist/core/state/mcpCatalog.js +51 -0
- package/dist/core/state/mcpCatalog.js.map +1 -0
- package/dist/core/state/mcpRecommendations.d.ts +7 -0
- package/dist/core/state/mcpRecommendations.d.ts.map +1 -0
- package/dist/core/state/mcpRecommendations.js +57 -0
- package/dist/core/state/mcpRecommendations.js.map +1 -0
- package/dist/core/state/memory.d.ts +22 -0
- package/dist/core/state/memory.d.ts.map +1 -0
- package/dist/core/state/memory.js +102 -0
- package/dist/core/state/memory.js.map +1 -0
- package/dist/core/state/planConfig.d.ts +15 -0
- package/dist/core/state/planConfig.d.ts.map +1 -0
- package/dist/core/state/planConfig.js +98 -0
- package/dist/core/state/planConfig.js.map +1 -0
- package/dist/core/state/presetPersistence.d.ts +4 -0
- package/dist/core/state/presetPersistence.d.ts.map +1 -0
- package/dist/core/state/presetPersistence.js +67 -0
- package/dist/core/state/presetPersistence.js.map +1 -0
- package/dist/core/state/sessionList.d.ts +26 -0
- package/dist/core/state/sessionList.d.ts.map +1 -0
- package/dist/core/state/sessionList.js +278 -0
- package/dist/core/state/sessionList.js.map +1 -0
- package/dist/core/state/stackDetect.d.ts +8 -0
- package/dist/core/state/stackDetect.d.ts.map +1 -0
- package/dist/core/state/stackDetect.js +40 -0
- package/dist/core/state/stackDetect.js.map +1 -0
- package/dist/core/state/tabPersistence.d.ts +29 -0
- package/dist/core/state/tabPersistence.d.ts.map +1 -0
- package/dist/core/state/tabPersistence.js +65 -0
- package/dist/core/state/tabPersistence.js.map +1 -0
- package/dist/core/tabPersistence.d.ts +29 -0
- package/dist/core/tabPersistence.d.ts.map +1 -0
- package/dist/core/tabPersistence.js +65 -0
- package/dist/core/tabPersistence.js.map +1 -0
- package/dist/core/teamRunner.d.ts +42 -0
- package/dist/core/teamRunner.d.ts.map +1 -0
- package/dist/core/teamRunner.js +248 -0
- package/dist/core/teamRunner.js.map +1 -0
- package/dist/core/toolGate.d.ts +23 -0
- package/dist/core/toolGate.d.ts.map +1 -0
- package/dist/core/toolGate.js +51 -0
- package/dist/core/toolGate.js.map +1 -0
- package/dist/core/toolInterceptor.d.ts +7 -0
- package/dist/core/toolInterceptor.d.ts.map +1 -0
- package/dist/core/toolInterceptor.js +108 -0
- package/dist/core/toolInterceptor.js.map +1 -0
- package/dist/core/tools/hookedToolBroker.d.ts +25 -0
- package/dist/core/tools/hookedToolBroker.d.ts.map +1 -0
- package/dist/core/tools/hookedToolBroker.js +95 -0
- package/dist/core/tools/hookedToolBroker.js.map +1 -0
- package/dist/core/tools/omgToolManifest.d.ts +42 -0
- package/dist/core/tools/omgToolManifest.d.ts.map +1 -0
- package/dist/core/tools/omgToolManifest.js +66 -0
- package/dist/core/tools/omgToolManifest.js.map +1 -0
- package/dist/core/tools/toolGate.d.ts +23 -0
- package/dist/core/tools/toolGate.d.ts.map +1 -0
- package/dist/core/tools/toolGate.js +51 -0
- package/dist/core/tools/toolGate.js.map +1 -0
- package/dist/core/tools/toolInterceptor.d.ts +7 -0
- package/dist/core/tools/toolInterceptor.d.ts.map +1 -0
- package/dist/core/tools/toolInterceptor.js +108 -0
- package/dist/core/tools/toolInterceptor.js.map +1 -0
- package/dist/core/tools/tools.d.ts +34 -0
- package/dist/core/tools/tools.d.ts.map +1 -0
- package/dist/core/tools/tools.js +328 -0
- package/dist/core/tools/tools.js.map +1 -0
- package/dist/core/tools.d.ts +34 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +300 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/types.d.ts +107 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +55 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/usageCache.d.ts +19 -0
- package/dist/core/usageCache.d.ts.map +1 -0
- package/dist/core/usageCache.js +157 -0
- package/dist/core/usageCache.js.map +1 -0
- package/dist/core/usageWindow.d.ts +19 -0
- package/dist/core/usageWindow.d.ts.map +1 -0
- package/dist/core/usageWindow.js +73 -0
- package/dist/core/usageWindow.js.map +1 -0
- package/dist/core/util/bgProtocol.d.ts +5 -0
- package/dist/core/util/bgProtocol.d.ts.map +1 -0
- package/dist/core/util/bgProtocol.js +20 -0
- package/dist/core/util/bgProtocol.js.map +1 -0
- package/dist/core/util/clipboard.d.ts +4 -0
- package/dist/core/util/clipboard.d.ts.map +1 -0
- package/dist/core/util/clipboard.js +46 -0
- package/dist/core/util/clipboard.js.map +1 -0
- package/dist/core/util/clipboardImage.d.ts +3 -0
- package/dist/core/util/clipboardImage.d.ts.map +1 -0
- package/dist/core/util/clipboardImage.js +58 -0
- package/dist/core/util/clipboardImage.js.map +1 -0
- package/dist/core/util/langHint.d.ts +9 -0
- package/dist/core/util/langHint.d.ts.map +1 -0
- package/dist/core/util/langHint.js +33 -0
- package/dist/core/util/langHint.js.map +1 -0
- package/dist/core/util/slugify.d.ts +2 -0
- package/dist/core/util/slugify.d.ts.map +1 -0
- package/dist/core/util/slugify.js +28 -0
- package/dist/core/util/slugify.js.map +1 -0
- package/dist/hooks/hookedToolProxy.mjs +118 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/dispatcher.d.ts +21 -0
- package/dist/ipc/dispatcher.d.ts.map +1 -0
- package/dist/ipc/dispatcher.js +160 -0
- package/dist/ipc/dispatcher.js.map +1 -0
- package/dist/ipc/events.d.ts +33 -0
- package/dist/ipc/events.d.ts.map +1 -0
- package/dist/ipc/events.js +42 -0
- package/dist/ipc/events.js.map +1 -0
- package/dist/ipc/rpc.d.ts +31 -0
- package/dist/ipc/rpc.d.ts.map +1 -0
- package/dist/ipc/rpc.js +110 -0
- package/dist/ipc/rpc.js.map +1 -0
- package/dist/ipc/stdio.d.ts +11 -0
- package/dist/ipc/stdio.d.ts.map +1 -0
- package/dist/ipc/stdio.js +52 -0
- package/dist/ipc/stdio.js.map +1 -0
- package/dist/mcp/askClient.d.ts +9 -0
- package/dist/mcp/askClient.d.ts.map +1 -0
- package/dist/mcp/askClient.js +70 -0
- package/dist/mcp/askClient.js.map +1 -0
- package/dist/mcp/constants.d.ts +6 -0
- package/dist/mcp/constants.d.ts.map +1 -0
- package/dist/mcp/constants.js +8 -0
- package/dist/mcp/constants.js.map +1 -0
- package/dist/mcp/permissionClient.d.ts +5 -0
- package/dist/mcp/permissionClient.d.ts.map +1 -0
- package/dist/mcp/permissionClient.js +71 -0
- package/dist/mcp/permissionClient.js.map +1 -0
- package/dist/mcp/schemas.d.ts +9 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +121 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts +41 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +204 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/policy/loader.d.ts +27 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +89 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/team-claude-only.yaml +46 -0
- package/dist/policy/team-codex-only.yaml +46 -0
- package/dist/policy/team-codex.yaml +54 -0
- package/dist/policy/team.yaml +104 -0
- package/dist/toolhook/hookedToolProxy.mjs +118 -0
- package/dist/ui/components/App.d.ts +14 -0
- package/dist/ui/components/App.d.ts.map +1 -0
- package/dist/ui/components/App.js +803 -0
- package/dist/ui/components/App.js.map +1 -0
- package/dist/ui/components/AskPicker.d.ts +8 -0
- package/dist/ui/components/AskPicker.d.ts.map +1 -0
- package/dist/ui/components/AskPicker.js +202 -0
- package/dist/ui/components/AskPicker.js.map +1 -0
- package/dist/ui/components/CommandInput.d.ts +63 -0
- package/dist/ui/components/CommandInput.d.ts.map +1 -0
- package/dist/ui/components/CommandInput.js +994 -0
- package/dist/ui/components/CommandInput.js.map +1 -0
- package/dist/ui/components/DiffView.d.ts +19 -0
- package/dist/ui/components/DiffView.d.ts.map +1 -0
- package/dist/ui/components/DiffView.js +93 -0
- package/dist/ui/components/DiffView.js.map +1 -0
- package/dist/ui/components/Dock.d.ts +49 -0
- package/dist/ui/components/Dock.d.ts.map +1 -0
- package/dist/ui/components/Dock.js +52 -0
- package/dist/ui/components/Dock.js.map +1 -0
- package/dist/ui/components/EventLog.d.ts +42 -0
- package/dist/ui/components/EventLog.d.ts.map +1 -0
- package/dist/ui/components/EventLog.js +450 -0
- package/dist/ui/components/EventLog.js.map +1 -0
- package/dist/ui/components/FileSuggest.d.ts +8 -0
- package/dist/ui/components/FileSuggest.d.ts.map +1 -0
- package/dist/ui/components/FileSuggest.js +19 -0
- package/dist/ui/components/FileSuggest.js.map +1 -0
- package/dist/ui/components/HRule.d.ts +27 -0
- package/dist/ui/components/HRule.d.ts.map +1 -0
- package/dist/ui/components/HRule.js +75 -0
- package/dist/ui/components/HRule.js.map +1 -0
- package/dist/ui/components/HintBar.d.ts +2 -0
- package/dist/ui/components/HintBar.d.ts.map +1 -0
- package/dist/ui/components/HintBar.js +19 -0
- package/dist/ui/components/HintBar.js.map +1 -0
- package/dist/ui/components/MarkdownText.d.ts +13 -0
- package/dist/ui/components/MarkdownText.d.ts.map +1 -0
- package/dist/ui/components/MarkdownText.js +255 -0
- package/dist/ui/components/MarkdownText.js.map +1 -0
- package/dist/ui/components/PermissionPrompt.d.ts +8 -0
- package/dist/ui/components/PermissionPrompt.d.ts.map +1 -0
- package/dist/ui/components/PermissionPrompt.js +37 -0
- package/dist/ui/components/PermissionPrompt.js.map +1 -0
- package/dist/ui/components/SessionPicker.d.ts +16 -0
- package/dist/ui/components/SessionPicker.d.ts.map +1 -0
- package/dist/ui/components/SessionPicker.js +116 -0
- package/dist/ui/components/SessionPicker.js.map +1 -0
- package/dist/ui/components/SlashPalette.d.ts +8 -0
- package/dist/ui/components/SlashPalette.d.ts.map +1 -0
- package/dist/ui/components/SlashPalette.js +41 -0
- package/dist/ui/components/SlashPalette.js.map +1 -0
- package/dist/ui/components/Spinner.d.ts +37 -0
- package/dist/ui/components/Spinner.d.ts.map +1 -0
- package/dist/ui/components/Spinner.js +139 -0
- package/dist/ui/components/Spinner.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +92 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +268 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/TabChip.d.ts +11 -0
- package/dist/ui/components/TabChip.d.ts.map +1 -0
- package/dist/ui/components/TabChip.js +23 -0
- package/dist/ui/components/TabChip.js.map +1 -0
- package/dist/ui/components/TeamIndicator.d.ts +6 -0
- package/dist/ui/components/TeamIndicator.d.ts.map +1 -0
- package/dist/ui/components/TeamIndicator.js +17 -0
- package/dist/ui/components/TeamIndicator.js.map +1 -0
- package/dist/ui/components/TeamStatusPanel.d.ts +14 -0
- package/dist/ui/components/TeamStatusPanel.d.ts.map +1 -0
- package/dist/ui/components/TeamStatusPanel.js +65 -0
- package/dist/ui/components/TeamStatusPanel.js.map +1 -0
- package/dist/ui/components/ThinkingBlock.d.ts +10 -0
- package/dist/ui/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/ui/components/ThinkingBlock.js +21 -0
- package/dist/ui/components/ThinkingBlock.js.map +1 -0
- package/dist/ui/components/TodoIndicator.d.ts +11 -0
- package/dist/ui/components/TodoIndicator.d.ts.map +1 -0
- package/dist/ui/components/TodoIndicator.js +37 -0
- package/dist/ui/components/TodoIndicator.js.map +1 -0
- package/dist/ui/components/ToolCallCard.d.ts +16 -0
- package/dist/ui/components/ToolCallCard.d.ts.map +1 -0
- package/dist/ui/components/ToolCallCard.js +195 -0
- package/dist/ui/components/ToolCallCard.js.map +1 -0
- package/dist/ui/components/Welcome.d.ts +8 -0
- package/dist/ui/components/Welcome.d.ts.map +1 -0
- package/dist/ui/components/Welcome.js +53 -0
- package/dist/ui/components/Welcome.js.map +1 -0
- package/dist/ui/cursorState.d.ts +29 -0
- package/dist/ui/cursorState.d.ts.map +1 -0
- package/dist/ui/cursorState.js +49 -0
- package/dist/ui/cursorState.js.map +1 -0
- package/dist/ui/diff.d.ts +34 -0
- package/dist/ui/diff.d.ts.map +1 -0
- package/dist/ui/diff.js +184 -0
- package/dist/ui/diff.js.map +1 -0
- package/dist/ui/diffLang.d.ts +2 -0
- package/dist/ui/diffLang.d.ts.map +1 -0
- package/dist/ui/diffLang.js +36 -0
- package/dist/ui/diffLang.js.map +1 -0
- package/dist/ui/emoji.d.ts +4 -0
- package/dist/ui/emoji.d.ts.map +1 -0
- package/dist/ui/emoji.js +73 -0
- package/dist/ui/emoji.js.map +1 -0
- package/dist/ui/fileMentions.d.ts +41 -0
- package/dist/ui/fileMentions.d.ts.map +1 -0
- package/dist/ui/fileMentions.js +135 -0
- package/dist/ui/fileMentions.js.map +1 -0
- package/dist/ui/hooks/useLineEditor.d.ts +44 -0
- package/dist/ui/hooks/useLineEditor.d.ts.map +1 -0
- package/dist/ui/hooks/useLineEditor.js +142 -0
- package/dist/ui/hooks/useLineEditor.js.map +1 -0
- package/dist/ui/inputHistory.d.ts +8 -0
- package/dist/ui/inputHistory.d.ts.map +1 -0
- package/dist/ui/inputHistory.js +56 -0
- package/dist/ui/inputHistory.js.map +1 -0
- package/dist/ui/jsonrpc.d.ts +17 -0
- package/dist/ui/jsonrpc.d.ts.map +1 -0
- package/dist/ui/jsonrpc.js +41 -0
- package/dist/ui/jsonrpc.js.map +1 -0
- package/dist/ui/launcher.d.ts +20 -0
- package/dist/ui/launcher.d.ts.map +1 -0
- package/dist/ui/launcher.js +185 -0
- package/dist/ui/launcher.js.map +1 -0
- package/dist/ui/markdown.d.ts +104 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +449 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/mouse.d.ts +22 -0
- package/dist/ui/mouse.d.ts.map +1 -0
- package/dist/ui/mouse.js +31 -0
- package/dist/ui/mouse.js.map +1 -0
- package/dist/ui/outbound.d.ts +20 -0
- package/dist/ui/outbound.d.ts.map +1 -0
- package/dist/ui/outbound.js +49 -0
- package/dist/ui/outbound.js.map +1 -0
- package/dist/ui/screenMode.d.ts +25 -0
- package/dist/ui/screenMode.d.ts.map +1 -0
- package/dist/ui/screenMode.js +43 -0
- package/dist/ui/screenMode.js.map +1 -0
- package/dist/ui/slashCatalog.d.ts +18 -0
- package/dist/ui/slashCatalog.d.ts.map +1 -0
- package/dist/ui/slashCatalog.js +243 -0
- package/dist/ui/slashCatalog.js.map +1 -0
- package/dist/ui/syntax.d.ts +11 -0
- package/dist/ui/syntax.d.ts.map +1 -0
- package/dist/ui/syntax.js +78 -0
- package/dist/ui/syntax.js.map +1 -0
- package/dist/ui/theme.d.ts +165 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +394 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +203 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +53 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +104 -0
package/dist/cli/turn.js
ADDED
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
// omg — turn execution, extracted from cli.ts runInteractive (pure move).
|
|
2
|
+
// runTurnFor drives one chat turn for an owning tab; predictNext ghosts
|
|
3
|
+
// the likely next user message. State the closures mutated by reference
|
|
4
|
+
// travels through TurnContext.
|
|
5
|
+
import { makeAdapter } from "../core/orchestration/orchestrator.js";
|
|
6
|
+
import { EventDispatcher } from "../ipc/dispatcher.js";
|
|
7
|
+
import { contextWindowForProvider, estimateHistoryTokens, usageIsCumulative, } from "../core/context/contextWindows.js";
|
|
8
|
+
import { shouldAutoCompact, compactThreshold, compactTimeoutMs, } from "../core/context/summarizer.js";
|
|
9
|
+
import { compactTab, formatCompactSuccess } from "./compactor.js";
|
|
10
|
+
import { autoCommit, formatAutoCommitOutcome } from "./autoCommit.js";
|
|
11
|
+
import { snapshotChangedPaths, newlyTouched } from "./touchedFiles.js";
|
|
12
|
+
import { appendEntry as appendContinuumEntry, bumpTurn as bumpContinuumTurn, loadManifest as loadContinuumManifest, runDigest as runContinuumDigest, shouldRunDigest as shouldRunContinuumDigest, } from "../core/continuum/index.js";
|
|
13
|
+
import { parseBgTaskResult } from "./bgTasks.js";
|
|
14
|
+
export async function predictNext(tab, lastReply, ctx) {
|
|
15
|
+
const text = lastReply.replace(/\s+/g, " ").trim().slice(0, 1500);
|
|
16
|
+
if (!text)
|
|
17
|
+
return;
|
|
18
|
+
const prompt = "You are predicting the single most likely next message the USER " +
|
|
19
|
+
"will type in this CLI coding session, given the assistant's last " +
|
|
20
|
+
"reply below. Output ONLY that one short line — no quotes, no " +
|
|
21
|
+
"preamble, no explanation. Match the user's language. If you can't " +
|
|
22
|
+
"predict confidently, output nothing.\n\n" +
|
|
23
|
+
"Assistant's last reply:\n" +
|
|
24
|
+
text;
|
|
25
|
+
// Phase 246 (audit): record a cancel handle on the tab so /close
|
|
26
|
+
// can SIGTERM the predict child if the user kills the tab before
|
|
27
|
+
// the prediction lands. Cleared in finally so a stale handle
|
|
28
|
+
// doesn't survive past completion.
|
|
29
|
+
// Phase 249 (2nd-round audit): set the cancel flag BEFORE awaiting
|
|
30
|
+
// makeAdapter — `await` opens a window where /close could fire and
|
|
31
|
+
// find `predictCancel` still undefined, then makeAdapter resolves
|
|
32
|
+
// and spawns the child anyway. Now /close flips `cancelled` first;
|
|
33
|
+
// we observe it post-await and bail out before stream() is called.
|
|
34
|
+
let predictAdapter;
|
|
35
|
+
let cancelled = false;
|
|
36
|
+
tab.predictCancel = () => {
|
|
37
|
+
cancelled = true;
|
|
38
|
+
predictAdapter?.cancel?.();
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
// Cheapest available model: claude-cli → haiku; otherwise reuse
|
|
42
|
+
// the tab's active model (an empty model breaks adapters that
|
|
43
|
+
// require one, so don't force one we can't name).
|
|
44
|
+
const cheapModel = tab.provider === "claude-cli" ? "haiku" : tab.model || "";
|
|
45
|
+
predictAdapter = await makeAdapter(tab.provider, cheapModel, {
|
|
46
|
+
...ctx.adapterOptsBase,
|
|
47
|
+
disableTools: true,
|
|
48
|
+
enableSessionResume: false,
|
|
49
|
+
});
|
|
50
|
+
if (cancelled)
|
|
51
|
+
return;
|
|
52
|
+
const parts = [];
|
|
53
|
+
const stream = predictAdapter.stream(prompt);
|
|
54
|
+
for await (const c of stream) {
|
|
55
|
+
if (cancelled)
|
|
56
|
+
break;
|
|
57
|
+
if (c.type === "text" && typeof c.text === "string")
|
|
58
|
+
parts.push(c.text);
|
|
59
|
+
if (c.type === "stream_end")
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (cancelled)
|
|
63
|
+
return;
|
|
64
|
+
const line = parts.join("").trim().split("\n")[0].trim().slice(0, 200);
|
|
65
|
+
if (line) {
|
|
66
|
+
ctx.pushNotif({
|
|
67
|
+
jsonrpc: "2.0",
|
|
68
|
+
method: "event/predict",
|
|
69
|
+
// Phase 186: tag the prediction with the owning tab so the
|
|
70
|
+
// UI can drop ghosts that belong to a background tab.
|
|
71
|
+
params: { text: line, tabName: tab.name },
|
|
72
|
+
}, tab);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
/* prediction is best-effort */
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
tab.predictCancel = undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Phase 51: one turn body, scoped to a specific owning tab. The
|
|
83
|
+
// tab parameter is captured at the moment the user submitted; if
|
|
84
|
+
// they /switch elsewhere mid-stream, the writer still routes to
|
|
85
|
+
// this tab. UI sees the events only when the tab is currently
|
|
86
|
+
// active (pushNotif's contract).
|
|
87
|
+
export async function runTurnFor(tab, ctx) {
|
|
88
|
+
tab.inFlight = true;
|
|
89
|
+
tab.inFlightSince = Date.now();
|
|
90
|
+
// Phase 221 (hotfix): publish the per-tab state snapshot so the
|
|
91
|
+
// upper-rule chip shows `● <idx>` for background tabs in flight.
|
|
92
|
+
ctx.pushStatus({ tabsState: ctx.snapshotTabsState() });
|
|
93
|
+
// Phase 149: a plain turn is cancelled by SIGTERMing its adapter.
|
|
94
|
+
tab.cancel = () => {
|
|
95
|
+
tab.adapter.cancel?.();
|
|
96
|
+
};
|
|
97
|
+
// Phase 182: if the last turn pushed us past ~80% of the model's
|
|
98
|
+
// context window, summarize the older messages before sending. Empty
|
|
99
|
+
// summary or too few messages → no-op; the original history stays.
|
|
100
|
+
// Phase 207: surface a "compacting…" spinner so the user knows the
|
|
101
|
+
// delay isn't a hang. Mirrors claude-code's visible auto-compact.
|
|
102
|
+
// Phase 321: Phase 317 gated this on `lastRateLimitStatus !==
|
|
103
|
+
// "rejected"` to skip a futile summary while rate-limited — but a stale
|
|
104
|
+
// "rejected" flag (set once, never cleared if no "allowed" event
|
|
105
|
+
// followed) then silently disabled auto-compact forever, leaving the
|
|
106
|
+
// context to grow to 100% with no spinner. Drop the gate: always
|
|
107
|
+
// compact when over threshold. A genuinely rejected summary just
|
|
108
|
+
// returns empty fast (Phase 313's shortened timeout still bounds it),
|
|
109
|
+
// which is far better than never compacting at all.
|
|
110
|
+
if (shouldAutoCompact(tab.tokensIn, contextWindowForProvider(tab.provider, tab.model), compactThreshold(tab.provider))) {
|
|
111
|
+
ctx.pushNotif({
|
|
112
|
+
jsonrpc: "2.0",
|
|
113
|
+
method: "event/stream_start",
|
|
114
|
+
params: { label: "compacting" },
|
|
115
|
+
}, tab);
|
|
116
|
+
// Phase 259: cap compact so a stuck summarizer doesn't hang the
|
|
117
|
+
// whole turn. Wire `tab.cancel` to the summarizer's adapter so Esc
|
|
118
|
+
// kills it mid-flight too — pre-259 the user saw "compacting… 4m"
|
|
119
|
+
// with no way out. The normal cap is sized for the worst-case real
|
|
120
|
+
// run (200K+ tokens through claude-cli haiku takes ~5 min).
|
|
121
|
+
// Phase 313: when the provider is rate-limited (tab.lastRateLimitStatus
|
|
122
|
+
// set), the summary call competes for the throttled quota and stalls,
|
|
123
|
+
// so compactTimeoutMs() drops the cap to ~45s — the user falls through
|
|
124
|
+
// to full context in seconds instead of watching "compacting… 5m".
|
|
125
|
+
const rateLimited = tab.lastRateLimitStatus;
|
|
126
|
+
const timeoutMs = compactTimeoutMs(rateLimited);
|
|
127
|
+
let compactCancelled = false;
|
|
128
|
+
let compactHandle = null;
|
|
129
|
+
tab.cancel = () => {
|
|
130
|
+
compactCancelled = true;
|
|
131
|
+
compactHandle?.cancel();
|
|
132
|
+
};
|
|
133
|
+
const timeoutTimer = setTimeout(() => {
|
|
134
|
+
compactCancelled = true;
|
|
135
|
+
compactHandle?.cancel();
|
|
136
|
+
}, timeoutMs);
|
|
137
|
+
timeoutTimer.unref?.();
|
|
138
|
+
try {
|
|
139
|
+
const r = await compactTab(tab, ctx.adapterOptsBase, {
|
|
140
|
+
onCancel: (h) => {
|
|
141
|
+
compactHandle = h;
|
|
142
|
+
},
|
|
143
|
+
// Phase 318: live "↓ Ntok" motion on the compacting spinner.
|
|
144
|
+
onProgress: (chars) => ctx.pushNotif({
|
|
145
|
+
jsonrpc: "2.0",
|
|
146
|
+
method: "event/stream_progress",
|
|
147
|
+
params: { chars },
|
|
148
|
+
}, tab),
|
|
149
|
+
});
|
|
150
|
+
clearTimeout(timeoutTimer);
|
|
151
|
+
ctx.pushNotif({ jsonrpc: "2.0", method: "event/stream_end", params: {} }, tab);
|
|
152
|
+
if (compactCancelled) {
|
|
153
|
+
// Phase 313: name the rate-limit cause when that's why it was
|
|
154
|
+
// cut short, so the user knows it isn't a plain hang.
|
|
155
|
+
const why = rateLimited
|
|
156
|
+
? `cut short — near your rate limit (${rateLimited}), so the summary call was stalling. `
|
|
157
|
+
: `cancelled — `;
|
|
158
|
+
ctx.pushNotif({
|
|
159
|
+
jsonrpc: "2.0",
|
|
160
|
+
method: "event/text",
|
|
161
|
+
params: {
|
|
162
|
+
text: `[compact] ${why}proceeding with full context. If compact keeps timing out, /reset clears the session.\n`,
|
|
163
|
+
},
|
|
164
|
+
}, tab);
|
|
165
|
+
}
|
|
166
|
+
else if (r.ok) {
|
|
167
|
+
ctx.pushNotif({
|
|
168
|
+
jsonrpc: "2.0",
|
|
169
|
+
method: "event/text",
|
|
170
|
+
params: {
|
|
171
|
+
text: formatCompactSuccess(r),
|
|
172
|
+
},
|
|
173
|
+
}, tab);
|
|
174
|
+
tab.tokensIn = 0;
|
|
175
|
+
// Phase 328: also push the reset to the UI so the info bar's ctx%
|
|
176
|
+
// drops immediately. Without this it kept the stale pre-compact
|
|
177
|
+
// value (e.g. 100%) until the turn's next usage event — the manual
|
|
178
|
+
// /compact path already does this; the auto path didn't.
|
|
179
|
+
ctx.pushStatus({ tokensIn: 0 }, tab);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Phase 258: surface WHY compact didn't help. Pre-258 we hid
|
|
183
|
+
// this — user saw the spinner, no follow-up message, and
|
|
184
|
+
// concluded auto-compact was broken even though it ran. Two
|
|
185
|
+
// failure modes the diagnostic distinguishes:
|
|
186
|
+
// too-short — the entire conversation is in the last few
|
|
187
|
+
// messages (typical when one giant first prompt + few
|
|
188
|
+
// replies pushed us past 80%); compact can't summarize
|
|
189
|
+
// what's about to stay verbatim. Workaround: /reset to
|
|
190
|
+
// drop claude-cli's session entirely.
|
|
191
|
+
// empty-summary — the cheap summarizer returned nothing
|
|
192
|
+
// (rate limit, auth, etc). Workaround: retry next turn,
|
|
193
|
+
// or /compact manually.
|
|
194
|
+
const detail = r.reason === "too-short"
|
|
195
|
+
? `only ${r.messagesCount} messages on this tab (keep-last is ${r.keepLast}). Try /reset to drop the session and start fresh, or split your next message.`
|
|
196
|
+
: "the cheap summarizer (haiku) returned an empty body. Will retry next turn.";
|
|
197
|
+
ctx.pushNotif({
|
|
198
|
+
jsonrpc: "2.0",
|
|
199
|
+
method: "event/text",
|
|
200
|
+
params: {
|
|
201
|
+
text: `[compact] skipped — ${detail}\n`,
|
|
202
|
+
},
|
|
203
|
+
}, tab);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
clearTimeout(timeoutTimer);
|
|
208
|
+
ctx.pushNotif({ jsonrpc: "2.0", method: "event/stream_end", params: {} }, tab);
|
|
209
|
+
/* compaction is best-effort; fall through to the regular turn */
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
// Restore the main-turn cancel handle below at line 158.
|
|
213
|
+
tab.cancel = undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Phase 338: for codex (cumulative usage — not latched mid-turn, Phase
|
|
217
|
+
// 334), seed the context gauge from the carried conversation at turn
|
|
218
|
+
// start so ctx% shows a sane in-progress estimate immediately instead of
|
|
219
|
+
// 0% (first turn) or the stale previous value. It stays ~constant during
|
|
220
|
+
// the turn — codex's internal tool-output growth is invisible to omg —
|
|
221
|
+
// and the end-of-turn recompute then folds in this turn's reply. Runs
|
|
222
|
+
// after any auto-compact above so it reflects the post-compaction size.
|
|
223
|
+
if (usageIsCumulative(tab.provider)) {
|
|
224
|
+
const carried = estimateHistoryTokens(tab.messages);
|
|
225
|
+
if (tab.tokensIn > 0 && tab.tokensIn !== carried) {
|
|
226
|
+
tab.prevTokensIn = tab.tokensIn;
|
|
227
|
+
}
|
|
228
|
+
tab.tokensIn = carried;
|
|
229
|
+
ctx.pushStatus({ tokensIn: carried }, tab);
|
|
230
|
+
}
|
|
231
|
+
ctx.pushNotif({
|
|
232
|
+
jsonrpc: "2.0",
|
|
233
|
+
method: "event/stream_start",
|
|
234
|
+
params: {
|
|
235
|
+
label: `${tab.provider} ${tab.model || ""}`.trim(),
|
|
236
|
+
},
|
|
237
|
+
}, tab);
|
|
238
|
+
// Phase 341: snapshot the working tree so files this turn dirties get
|
|
239
|
+
// attributed to THIS tab (for scoped commits). Best-effort; null off-repo.
|
|
240
|
+
const touchedBefore = await snapshotChangedPaths(tab.cwd);
|
|
241
|
+
const captured = [];
|
|
242
|
+
const toolCalls = [];
|
|
243
|
+
let stepInTurn = 0;
|
|
244
|
+
// Phase 257: remember Bash tool calls whose input asked for
|
|
245
|
+
// `run_in_background: true`. The matching tool_use_end carries the
|
|
246
|
+
// task id + output path in its result text — we register the
|
|
247
|
+
// watcher there.
|
|
248
|
+
const pendingBgStarts = new Map();
|
|
249
|
+
const writer = async (m) => {
|
|
250
|
+
ctx.pushNotif(m, tab);
|
|
251
|
+
if (m.method === "event/text") {
|
|
252
|
+
const t = m.params.text;
|
|
253
|
+
if (typeof t === "string")
|
|
254
|
+
captured.push(t);
|
|
255
|
+
}
|
|
256
|
+
else if (m.method === "event/tool_use_start") {
|
|
257
|
+
const p = m.params;
|
|
258
|
+
toolCalls.push({
|
|
259
|
+
toolId: String(p.id ?? ""),
|
|
260
|
+
toolName: String(p.name ?? ""),
|
|
261
|
+
toolInput: p.input !== null && typeof p.input === "object"
|
|
262
|
+
? { ...p.input }
|
|
263
|
+
: {},
|
|
264
|
+
});
|
|
265
|
+
// Phase 257: stash Bash + run_in_background tool calls so the
|
|
266
|
+
// matching tool_use_end can register the watcher with the
|
|
267
|
+
// command that started it (for the auto-resume prompt).
|
|
268
|
+
if (ctx.bgTasks &&
|
|
269
|
+
String(p.name ?? "") === "Bash" &&
|
|
270
|
+
p.input !== null &&
|
|
271
|
+
typeof p.input === "object") {
|
|
272
|
+
const input = p.input;
|
|
273
|
+
if (input.run_in_background === true) {
|
|
274
|
+
pendingBgStarts.set(String(p.id ?? ""), typeof input.command === "string" ? input.command : "");
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
tab.toolCalls += 1;
|
|
278
|
+
stepInTurn += 1;
|
|
279
|
+
// Phase 228 (hotfix, root cause for "agent on other tab jitter"):
|
|
280
|
+
// toolCalls + step are per-tab. Pre-228 they were pushed without
|
|
281
|
+
// a tab arg, so a background tab's writer kept overwriting the
|
|
282
|
+
// active tab's status bar with its own counts and forcing the
|
|
283
|
+
// whole Ink tree to re-render per tool call. Tagging routes the
|
|
284
|
+
// status through `target === currentTab()` so it ONLY reaches
|
|
285
|
+
// App when the user is looking at this tab.
|
|
286
|
+
ctx.pushStatus({ toolCalls: tab.toolCalls, step: stepInTurn }, tab);
|
|
287
|
+
}
|
|
288
|
+
else if (m.method === "event/tool_use_end") {
|
|
289
|
+
// Phase 257: match against the Bash + run_in_background calls
|
|
290
|
+
// we stashed on tool_use_start. The result text carries the
|
|
291
|
+
// task id and the output file path; parseBgTaskResult handles
|
|
292
|
+
// the format quirks. Register the watcher; cli.ts wired the
|
|
293
|
+
// completion callback that auto-injects a continuation prompt
|
|
294
|
+
// into this tab.
|
|
295
|
+
if (ctx.bgTasks) {
|
|
296
|
+
const p = m.params;
|
|
297
|
+
const toolId = String(p.id ?? "");
|
|
298
|
+
const command = pendingBgStarts.get(toolId);
|
|
299
|
+
if (command !== undefined) {
|
|
300
|
+
pendingBgStarts.delete(toolId);
|
|
301
|
+
const parsed = parseBgTaskResult(p.result);
|
|
302
|
+
if (parsed) {
|
|
303
|
+
const now = Date.now();
|
|
304
|
+
ctx.bgTasks.track({
|
|
305
|
+
tabName: tab.name,
|
|
306
|
+
toolId: parsed.taskId,
|
|
307
|
+
outputPath: parsed.outputPath,
|
|
308
|
+
command,
|
|
309
|
+
startedAt: now,
|
|
310
|
+
lastSize: -1,
|
|
311
|
+
stableSince: now,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
else if (m.method === "event/status") {
|
|
318
|
+
// Rolling usage windows are user-global, not per-tab — push
|
|
319
|
+
// unconditionally so the active tab's bar shows the latest
|
|
320
|
+
// sums even when the activity came from a background tab.
|
|
321
|
+
const p = m.params;
|
|
322
|
+
// Phase 182: latch the latest input-token count on the tab so
|
|
323
|
+
// auto-compact can decide whether the next turn would overflow
|
|
324
|
+
// the model's context window.
|
|
325
|
+
// Phase 334: SKIP this for codex — its usage.input_tokens is
|
|
326
|
+
// cumulative across the turn's tool-call steps (a 31-tool turn
|
|
327
|
+
// reported 910K vs a 256K window), so latching it gives a false
|
|
328
|
+
// "ctx 100%+". For codex the gauge is recomputed from the carried
|
|
329
|
+
// conversation at end-of-turn (see below); the cache split is
|
|
330
|
+
// likewise cumulative and not comparable to that gauge, so it's
|
|
331
|
+
// skipped too.
|
|
332
|
+
if (!usageIsCumulative(tab.provider)) {
|
|
333
|
+
if (typeof p.tokensIn === "number" && p.tokensIn > 0) {
|
|
334
|
+
// Phase 322: remember the pre-turn total so /context can show the
|
|
335
|
+
// per-turn Δ. The first usage event of a turn is the jump from the
|
|
336
|
+
// previous turn; later events within the same turn keep prev fixed.
|
|
337
|
+
if (tab.tokensIn > 0 && tab.tokensIn !== p.tokensIn) {
|
|
338
|
+
tab.prevTokensIn = tab.tokensIn;
|
|
339
|
+
}
|
|
340
|
+
tab.tokensIn = p.tokensIn;
|
|
341
|
+
}
|
|
342
|
+
// Phase 322: latch the prompt-cache split for /context.
|
|
343
|
+
if (typeof p.cacheReadTokens === "number") {
|
|
344
|
+
tab.cacheReadTokens = p.cacheReadTokens;
|
|
345
|
+
}
|
|
346
|
+
if (typeof p.freshTokens === "number") {
|
|
347
|
+
tab.freshTokens = p.freshTokens;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Phase 313: latch the provider's rate-limit status so the next
|
|
351
|
+
// turn's auto-compact can shorten its timeout while throttled.
|
|
352
|
+
// "" (Phase 312's clear-on-allowed) resets it to undefined.
|
|
353
|
+
if (typeof p.rateLimitStatus === "string") {
|
|
354
|
+
tab.lastRateLimitStatus = p.rateLimitStatus || undefined;
|
|
355
|
+
}
|
|
356
|
+
if (typeof p.tokensOut === "number" && p.tokensOut > 0) {
|
|
357
|
+
const now = Date.now();
|
|
358
|
+
ctx.usage.five.record(now, p.tokensOut);
|
|
359
|
+
ctx.usage.weekly.record(now, p.tokensOut);
|
|
360
|
+
ctx.usage.session.tokens += p.tokensOut;
|
|
361
|
+
ctx.pushStatus({
|
|
362
|
+
tokensUsed5h: ctx.usage.five.sum(now),
|
|
363
|
+
tokensUsedWeekly: ctx.usage.weekly.sum(now),
|
|
364
|
+
tokensUsedSession: ctx.usage.session.tokens,
|
|
365
|
+
capFiveHour: ctx.usage.capFive,
|
|
366
|
+
capWeekly: ctx.usage.capWeekly,
|
|
367
|
+
capSession: ctx.usage.capSession,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
// Phase 91: interactive chat wants live streaming. Without a
|
|
373
|
+
// flushThreshold the dispatcher buffers every text chunk until
|
|
374
|
+
// the stream ends (or a non-text boundary lands), which makes
|
|
375
|
+
// the UI feel frozen until the model finishes. A 1-char threshold
|
|
376
|
+
// flushes every adapter delta to the writer immediately — text
|
|
377
|
+
// appears as it's generated, the same as claude code / codex /
|
|
378
|
+
// gemini CLI.
|
|
379
|
+
const dispatcher = new EventDispatcher(writer, { flushThreshold: 1 });
|
|
380
|
+
let streamOk = true;
|
|
381
|
+
// Phase 201d: if /model just swapped providers on this tab, the
|
|
382
|
+
// pendingContinuumInjection carries decisions + recent turns from
|
|
383
|
+
// the project's transcript. Prepend it to the last user message
|
|
384
|
+
// text on THIS stream only — tab.messages itself stays clean.
|
|
385
|
+
let messages = tab.messages;
|
|
386
|
+
if (tab.pendingContinuumInjection) {
|
|
387
|
+
const injection = tab.pendingContinuumInjection;
|
|
388
|
+
tab.pendingContinuumInjection = undefined;
|
|
389
|
+
const copy = [...tab.messages];
|
|
390
|
+
for (let i = copy.length - 1; i >= 0; i--) {
|
|
391
|
+
if (copy[i].role === "user") {
|
|
392
|
+
copy[i] = { role: "user", text: injection + copy[i].text };
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
messages = copy;
|
|
397
|
+
}
|
|
398
|
+
const conv = ctx.state.planMode
|
|
399
|
+
? {
|
|
400
|
+
system: "Plan mode: before acting, outline your plan in numbered steps. " +
|
|
401
|
+
"Do not execute changes until the user approves the plan.",
|
|
402
|
+
messages: [...messages],
|
|
403
|
+
}
|
|
404
|
+
: { messages: [...messages] };
|
|
405
|
+
try {
|
|
406
|
+
await dispatcher.run(tab.adapter.stream(conv));
|
|
407
|
+
}
|
|
408
|
+
catch (e) {
|
|
409
|
+
streamOk = false;
|
|
410
|
+
ctx.pushNotif({
|
|
411
|
+
jsonrpc: "2.0",
|
|
412
|
+
method: "event/text",
|
|
413
|
+
params: { text: `\n[adapter error: ${e.message}]\n` },
|
|
414
|
+
}, tab);
|
|
415
|
+
}
|
|
416
|
+
// Phase 92 → 317: surface "stream ended with no output" so the user
|
|
417
|
+
// doesn't stare at a silent prompt wondering if it's their fault.
|
|
418
|
+
// Lead with the rate/session-limit cause (the common one, and the
|
|
419
|
+
// chip confirms it) — an empty turn is far more often a hit limit than
|
|
420
|
+
// a genuinely silent model. Other causes: a wrong model alias, or auth.
|
|
421
|
+
if (streamOk && captured.length === 0 && toolCalls.length === 0) {
|
|
422
|
+
const limited = tab.lastRateLimitStatus
|
|
423
|
+
? `you've hit a ${tab.provider} rate/usage limit (the [limit:] chip shows when it resets) — switch with /model <prov>/<model> or wait for the reset`
|
|
424
|
+
: `you may have hit a ${tab.provider} rate/usage limit (check the [limit:] chip), the model alias may be wrong (try /model <prov>/<another-model>), or auth is missing`;
|
|
425
|
+
ctx.pushNotif({
|
|
426
|
+
jsonrpc: "2.0",
|
|
427
|
+
method: "event/text",
|
|
428
|
+
params: {
|
|
429
|
+
text: `\n[${tab.provider}/${tab.model || "(default)"}] turn ended with no output. ` +
|
|
430
|
+
`Most likely ${limited}. Run \`OMG_VERBOSE_STDERR=1 omg\` to see the host CLI's stderr.\n`,
|
|
431
|
+
},
|
|
432
|
+
}, tab);
|
|
433
|
+
}
|
|
434
|
+
ctx.pushNotif({
|
|
435
|
+
jsonrpc: "2.0",
|
|
436
|
+
method: "event/stream_end",
|
|
437
|
+
params: { ok: streamOk },
|
|
438
|
+
}, tab);
|
|
439
|
+
const prevSession = tab.sessionId;
|
|
440
|
+
tab.sessionId = tab.adapter.currentSessionId;
|
|
441
|
+
if (tab.sessionId && tab.sessionId !== prevSession) {
|
|
442
|
+
// Phase 72: persist immediately so a crash mid-session doesn't
|
|
443
|
+
// strand a freshly minted sessionId.
|
|
444
|
+
ctx.persistTabs();
|
|
445
|
+
}
|
|
446
|
+
// Phase 228 (hotfix): sessionId + step are per-tab; route with the
|
|
447
|
+
// tab tag so a background tab's turn doesn't overwrite the active
|
|
448
|
+
// tab's status bar with its own session/step values. The
|
|
449
|
+
// activeTab/tabCount/tabIndex fields ARE global UI state, but
|
|
450
|
+
// they're already consistent with whatever the active tab is, so
|
|
451
|
+
// tagging the whole status is safe — if the route filters it out
|
|
452
|
+
// (user on a different tab), the active tab's chip already has
|
|
453
|
+
// the right activeTab value.
|
|
454
|
+
ctx.pushStatus({
|
|
455
|
+
sessionId: tab.adapter.currentSessionId,
|
|
456
|
+
step: 0,
|
|
457
|
+
activeTab: ctx.state.activeTabName,
|
|
458
|
+
tabCount: ctx.tabs.size,
|
|
459
|
+
tabIndex: ctx.tabIndex(ctx.state.activeTabName),
|
|
460
|
+
}, tab);
|
|
461
|
+
// Phase 112: let the usage cache (if configured) override omg's
|
|
462
|
+
// own rolling estimate with the provider's real cap + usage. Runs
|
|
463
|
+
// at turn end so the file is read at most once per turn, not per
|
|
464
|
+
// chunk.
|
|
465
|
+
ctx.refreshUsageFromCache();
|
|
466
|
+
// Phase 88: no bell on slow-turn completion either — Phase 86
|
|
467
|
+
// dropped the background bell; this one was the last source of
|
|
468
|
+
// stray \x07 bytes the user kept seeing as "t"/"b" stutter in
|
|
469
|
+
// their terminal.
|
|
470
|
+
if (streamOk) {
|
|
471
|
+
const assistantText = captured.join("");
|
|
472
|
+
tab.messages.push({
|
|
473
|
+
role: "assistant",
|
|
474
|
+
text: assistantText,
|
|
475
|
+
toolCalls,
|
|
476
|
+
});
|
|
477
|
+
// Phase 334: for codex (cumulative per-turn usage), gauge context from
|
|
478
|
+
// the carried conversation — what omg actually re-sends next turn —
|
|
479
|
+
// now that this turn's reply is in tab.messages. This replaces codex's
|
|
480
|
+
// wildly-overshooting cumulative usage (the false "ctx 100%+") with a
|
|
481
|
+
// bounded, monotonic estimate, and makes auto-compact fire on the real
|
|
482
|
+
// re-sent size (which /compact can then actually shrink). It omits the
|
|
483
|
+
// codex-side floor (AGENTS.md, read by codex from disk and invisible to
|
|
484
|
+
// omg), so it under-rather-than-wildly-over reports — accuracy over a
|
|
485
|
+
// 3.5×-wrong number.
|
|
486
|
+
if (usageIsCumulative(tab.provider)) {
|
|
487
|
+
const carried = estimateHistoryTokens(tab.messages);
|
|
488
|
+
if (tab.tokensIn > 0 && tab.tokensIn !== carried) {
|
|
489
|
+
tab.prevTokensIn = tab.tokensIn;
|
|
490
|
+
}
|
|
491
|
+
tab.tokensIn = carried;
|
|
492
|
+
ctx.pushStatus({ tokensIn: carried }, tab);
|
|
493
|
+
}
|
|
494
|
+
// Phase 341: attribute files this turn dirtied to the tab so a scoped
|
|
495
|
+
// commit (/commit or auto-commit) stages only this tab's work, not the
|
|
496
|
+
// whole shared tree. Best-effort; null snapshots (off-repo) yield [].
|
|
497
|
+
const touchedAfter = await snapshotChangedPaths(tab.cwd);
|
|
498
|
+
const newly = newlyTouched(touchedBefore, touchedAfter);
|
|
499
|
+
if (newly.length > 0) {
|
|
500
|
+
const set = (tab.touchedFiles ??= new Set());
|
|
501
|
+
for (const p of newly)
|
|
502
|
+
set.add(p);
|
|
503
|
+
}
|
|
504
|
+
// Phase 201b: mirror the assistant reply to the continuum + bump
|
|
505
|
+
// turn count. Best-effort; continuum failure must not break a
|
|
506
|
+
// turn that streamed successfully.
|
|
507
|
+
if (tab.continuumId) {
|
|
508
|
+
try {
|
|
509
|
+
appendContinuumEntry(tab.continuumId, {
|
|
510
|
+
version: 1,
|
|
511
|
+
kind: "assistant",
|
|
512
|
+
provider: tab.provider,
|
|
513
|
+
model: tab.model,
|
|
514
|
+
text: assistantText,
|
|
515
|
+
ts: Date.now(),
|
|
516
|
+
tabName: tab.name,
|
|
517
|
+
});
|
|
518
|
+
bumpContinuumTurn(tab.continuumId);
|
|
519
|
+
// Phase 201e: opportunistically fire an auto-digest when the
|
|
520
|
+
// undigested window crosses the threshold. Fire-and-forget;
|
|
521
|
+
// the haiku call runs in the background and never blocks the
|
|
522
|
+
// next turn. shouldRunDigest is cheap (single manifest read).
|
|
523
|
+
const m = loadContinuumManifest(tab.continuumId);
|
|
524
|
+
if (shouldRunContinuumDigest(m)) {
|
|
525
|
+
void runContinuumDigest(tab.continuumId).catch(() => {
|
|
526
|
+
/* digest failure is silent — transcript stays raw */
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
catch {
|
|
531
|
+
/* continuum write best-effort */
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
// Phase 209: opt-in atomic commit. Fire-and-forget; the git
|
|
535
|
+
// commands run via execFile so they don't share stdio with the
|
|
536
|
+
// adapter. Result (sha + message, or a failure reason) is pushed
|
|
537
|
+
// back through the event stream so the user sees the trail in
|
|
538
|
+
// their scrollback.
|
|
539
|
+
if (tab.autoCommit) {
|
|
540
|
+
// Phase 341: scope the auto-commit to this tab's touched files.
|
|
541
|
+
const scopedPaths = [...(tab.touchedFiles ?? [])];
|
|
542
|
+
void autoCommit(tab.cwd, tab.name, assistantText, scopedPaths)
|
|
543
|
+
.then((outcome) => {
|
|
544
|
+
if (outcome.kind === "committed")
|
|
545
|
+
tab.touchedFiles?.clear();
|
|
546
|
+
const line = formatAutoCommitOutcome(outcome);
|
|
547
|
+
if (line) {
|
|
548
|
+
ctx.pushNotif({
|
|
549
|
+
jsonrpc: "2.0",
|
|
550
|
+
method: "event/text",
|
|
551
|
+
params: { text: line + "\n" },
|
|
552
|
+
}, tab);
|
|
553
|
+
}
|
|
554
|
+
})
|
|
555
|
+
.catch(() => {
|
|
556
|
+
/* autoCommit catches its own errors; this is defense in depth */
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
// Phase 120: opt-in next-message prediction. Fire-and-forget so
|
|
560
|
+
// it never blocks the turn; the ghost shows up a beat later.
|
|
561
|
+
if (ctx.state.predictMode)
|
|
562
|
+
void predictNext(tab, assistantText, ctx).catch(() => { });
|
|
563
|
+
}
|
|
564
|
+
tab.inFlight = false;
|
|
565
|
+
tab.inFlightSince = undefined;
|
|
566
|
+
tab.cancel = undefined; // Phase 149: turn done — nothing to cancel.
|
|
567
|
+
// Phase 221 (hotfix): tab flipped from running → idle; publish so
|
|
568
|
+
// the chip drops the `●` marker for this tab.
|
|
569
|
+
ctx.pushStatus({ tabsState: ctx.snapshotTabsState() });
|
|
570
|
+
// Phase 53: if the tab is still wearing its auto-assigned
|
|
571
|
+
// name ("main" / "tab-N"), retitle it from the first user
|
|
572
|
+
// message. Only once per tab; collision-resolved with -2/-3.
|
|
573
|
+
if (tab.autoNamed) {
|
|
574
|
+
const before = tab.name;
|
|
575
|
+
ctx.maybeAutoName(tab);
|
|
576
|
+
if (tab.name !== before) {
|
|
577
|
+
// Refresh status if this is the active tab so the bar shows
|
|
578
|
+
// the new name. The tabIndex doesn't change.
|
|
579
|
+
if (tab === ctx.currentTab()) {
|
|
580
|
+
ctx.pushStatus({
|
|
581
|
+
activeTab: tab.name,
|
|
582
|
+
tabCount: ctx.tabs.size,
|
|
583
|
+
tabIndex: ctx.tabIndex(tab.name),
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
// Phase 52 → 86: signal a finished background tab silently. The
|
|
589
|
+
// active tab's spinner already cleared above; a background tab just
|
|
590
|
+
// raises an unread flag that the status bar surfaces as `ready:N`
|
|
591
|
+
// and that /tabs annotates per-row. No bell, no desktop
|
|
592
|
+
// notification — those fired even for long multi-tab sessions the
|
|
593
|
+
// user didn't want pinged about.
|
|
594
|
+
if (tab !== ctx.currentTab()) {
|
|
595
|
+
tab.hasUnreadCompletion = true;
|
|
596
|
+
ctx.pushStatus({
|
|
597
|
+
tabsReady: ctx.readyCount(),
|
|
598
|
+
tabsState: ctx.snapshotTabsState(),
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
// Phase 159: drain one queued (type-ahead) message — run it as the
|
|
602
|
+
// next turn on this tab. FIFO; further queued messages chain through
|
|
603
|
+
// the same path as each turn completes.
|
|
604
|
+
if (tab.queued && tab.queued.length > 0) {
|
|
605
|
+
const next = tab.queued.shift();
|
|
606
|
+
tab.messages.push({ role: "user", text: next });
|
|
607
|
+
// Phase 201b: queued (type-ahead) user messages are conversation
|
|
608
|
+
// turns too; record them.
|
|
609
|
+
if (tab.continuumId) {
|
|
610
|
+
try {
|
|
611
|
+
appendContinuumEntry(tab.continuumId, {
|
|
612
|
+
version: 1,
|
|
613
|
+
kind: "user",
|
|
614
|
+
text: next,
|
|
615
|
+
ts: Date.now(),
|
|
616
|
+
tabName: tab.name,
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
catch {
|
|
620
|
+
/* continuum write best-effort */
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
void ctx.runTurn(tab).catch(ctx.reportAsyncError("turn", tab));
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
//# sourceMappingURL=turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../../src/cli/turn.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,+BAA+B;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,WAAW,IAAI,oBAAoB,EACnC,QAAQ,IAAI,iBAAiB,EAC7B,YAAY,IAAI,qBAAqB,EACrC,SAAS,IAAI,kBAAkB,EAC/B,eAAe,IAAI,wBAAwB,GAC5C,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAsB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA0DrE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAQ,EACR,SAAiB,EACjB,GAAmB;IAEnB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,MAAM,GACV,kEAAkE;QAClE,mEAAmE;QACnE,+DAA+D;QAC/D,oEAAoE;QACpE,0CAA0C;QAC1C,2BAA2B;QAC3B,IAAI,CAAC;IACP,iEAAiE;IACjE,iEAAiE;IACjE,6DAA6D;IAC7D,mCAAmC;IACnC,mEAAmE;IACnE,mEAAmE;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,mEAAmE;IACnE,IAAI,cAAmE,CAAC;IACxE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,GAAG,CAAC,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,GAAG,IAAI,CAAC;QACjB,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,CAAC;QACH,gEAAgE;QAChE,8DAA8D;QAC9D,kDAAkD;QAClD,MAAM,UAAU,GACd,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,cAAc,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC3D,GAAG,GAAG,CAAC,eAAe;YACtB,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CAAC;QACH,IAAI,SAAS;YAAE,OAAO;QACtB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAGzC,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,SAAS;gBAAE,MAAM;YACrB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;gBAAE,MAAM;QACrC,CAAC;QACD,IAAI,SAAS;YAAE,OAAO;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvE,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,SAAS,CACX;gBACE,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,eAAe;gBACvB,2DAA2D;gBAC3D,sDAAsD;gBACtD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;aAC1C,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC;IAChC,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,8DAA8D;AAC9D,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAQ,EAAE,GAAgB;IACzD,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,gEAAgE;IAChE,iEAAiE;IACjE,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACvD,kEAAkE;IAClE,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QAChB,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACzB,CAAC,CAAC;IACF,iEAAiE;IACjE,qEAAqE;IACrE,mEAAmE;IACnE,mEAAmE;IACnE,kEAAkE;IAClE,8DAA8D;IAC9D,wEAAwE;IACxE,iEAAiE;IACjE,qEAAqE;IACrE,iEAAiE;IACjE,iEAAiE;IACjE,sEAAsE;IACtE,oDAAoD;IACpD,IACE,iBAAiB,CACf,GAAG,CAAC,QAAQ,EACZ,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EACjD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC/B,EACD,CAAC;QACD,GAAG,CAAC,SAAS,CACX;YACE,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;SAChC,EACD,GAAG,CACJ,CAAC;QACF,gEAAgE;QAChE,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,4DAA4D;QAC5D,wEAAwE;QACxE,sEAAsE;QACtE,uEAAuE;QACvE,mEAAmE;QACnE,MAAM,WAAW,GAAG,GAAG,CAAC,mBAAmB,CAAC;QAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,aAAa,GAAkC,IAAI,CAAC;QACxD,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAChB,gBAAgB,GAAG,IAAI,CAAC;YACxB,aAAa,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,gBAAgB,GAAG,IAAI,CAAC;YACxB,aAAa,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC,EAAE,SAAS,CAAC,CAAC;QACb,YAAuC,CAAC,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,eAAe,EAAE;gBACnD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,aAAa,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,6DAA6D;gBAC7D,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CACpB,GAAG,CAAC,SAAS,CACX;oBACE,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,uBAAuB;oBAC/B,MAAM,EAAE,EAAE,KAAK,EAAE;iBAClB,EACD,GAAG,CACJ;aACJ,CAAC,CAAC;YACH,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,GAAG,CAAC,SAAS,CACX,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,EAC1D,GAAG,CACJ,CAAC;YACF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,8DAA8D;gBAC9D,sDAAsD;gBACtD,MAAM,GAAG,GAAG,WAAW;oBACrB,CAAC,CAAC,qCAAqC,WAAW,uCAAuC;oBACzF,CAAC,CAAC,cAAc,CAAC;gBACnB,GAAG,CAAC,SAAS,CACX;oBACE,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE;wBACN,IAAI,EAAE,aAAa,GAAG,yFAAyF;qBAChH;iBACF,EACD,GAAG,CACJ,CAAC;YACJ,CAAC;iBAAM,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,CACX;oBACE,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE;wBACN,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;qBAC9B;iBACF,EACD,GAAG,CACJ,CAAC;gBACF,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACjB,kEAAkE;gBAClE,gEAAgE;gBAChE,mEAAmE;gBACnE,yDAAyD;gBACzD,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,6DAA6D;gBAC7D,yDAAyD;gBACzD,4DAA4D;gBAC5D,8CAA8C;gBAC9C,2DAA2D;gBAC3D,0DAA0D;gBAC1D,2DAA2D;gBAC3D,2DAA2D;gBAC3D,0CAA0C;gBAC1C,0DAA0D;gBAC1D,4DAA4D;gBAC5D,4BAA4B;gBAC5B,MAAM,MAAM,GACV,CAAC,CAAC,MAAM,KAAK,WAAW;oBACtB,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,uCAAuC,CAAC,CAAC,QAAQ,gFAAgF;oBAC1J,CAAC,CAAC,4EAA4E,CAAC;gBACnF,GAAG,CAAC,SAAS,CACX;oBACE,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE;wBACN,IAAI,EAAE,uBAAuB,MAAM,IAAI;qBACxC;iBACF,EACD,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,GAAG,CAAC,SAAS,CACX,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,EAC1D,GAAG,CACJ,CAAC;YACF,iEAAiE;QACnE,CAAC;gBAAS,CAAC;YACT,yDAAyD;YACzD,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,qEAAqE;IACrE,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjD,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;QAClC,CAAC;QACD,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;QACvB,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,GAAG,CAAC,SAAS,CACX;QACE,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE;YACN,KAAK,EAAE,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;SACnD;KACF,EACD,GAAG,CACJ,CAAC;IAEF,sEAAsE;IACtE,2EAA2E;IAC3E,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,4DAA4D;IAC5D,mEAAmE;IACnE,6DAA6D;IAC7D,iBAAiB;IACjB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,EAAE,CAAsB,EAAiB,EAAE;QAC7D,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAI,CAAC,CAAC,MAA6B,CAAC,IAAI,CAAC;YAChD,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,sBAAsB,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,MAA2D,CAAC;YACxE,SAAS,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC1B,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9B,SAAS,EACP,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;oBAC7C,CAAC,CAAC,EAAE,GAAI,CAAC,CAAC,KAAiC,EAAE;oBAC7C,CAAC,CAAC,EAAE;aACT,CAAC,CAAC;YACH,8DAA8D;YAC9D,0DAA0D;YAC1D,wDAAwD;YACxD,IACE,GAAG,CAAC,OAAO;gBACX,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,MAAM;gBAC/B,CAAC,CAAC,KAAK,KAAK,IAAI;gBAChB,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAC3B,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,CAAC,KAGf,CAAC;gBACF,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;oBACrC,eAAe,CAAC,GAAG,CACjB,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACvD,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;YACnB,UAAU,IAAI,CAAC,CAAC;YAChB,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,8DAA8D;YAC9D,gEAAgE;YAChE,8DAA8D;YAC9D,4CAA4C;YAC5C,GAAG,CAAC,UAAU,CACZ,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAC9C,GAAG,CACJ,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;YAC7C,8DAA8D;YAC9D,4DAA4D;YAC5D,8DAA8D;YAC9D,4DAA4D;YAC5D,8DAA8D;YAC9D,iBAAiB;YACjB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,CAAC,MAA4C,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACvB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;4BAChB,OAAO,EAAE,GAAG,CAAC,IAAI;4BACjB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,OAAO;4BACP,SAAS,EAAE,GAAG;4BACd,QAAQ,EAAE,CAAC,CAAC;4BACZ,WAAW,EAAE,GAAG;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACvC,4DAA4D;YAC5D,2DAA2D;YAC3D,0DAA0D;YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,MAMX,CAAC;YACF,8DAA8D;YAC9D,+DAA+D;YAC/D,8BAA8B;YAC9B,6DAA6D;YAC7D,+DAA+D;YAC/D,gEAAgE;YAChE,kEAAkE;YAClE,8DAA8D;YAC9D,gEAAgE;YAChE,eAAe;YACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACrD,kEAAkE;oBAClE,mEAAmE;oBACnE,oEAAoE;oBACpE,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;wBACpD,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAClC,CAAC;oBACD,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC5B,CAAC;gBACD,wDAAwD;gBACxD,IAAI,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;oBAC1C,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;gBAC1C,CAAC;gBACD,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACtC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,gEAAgE;YAChE,+DAA+D;YAC/D,4DAA4D;YAC5D,IAAI,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBAC1C,GAAG,CAAC,mBAAmB,GAAG,CAAC,CAAC,eAAe,IAAI,SAAS,CAAC;YAC3D,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACxC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC;gBACxC,GAAG,CAAC,UAAU,CAAC;oBACb,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBACrC,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC3C,iBAAiB,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;oBAC3C,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO;oBAC9B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS;oBAC9B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,6DAA6D;IAC7D,+DAA+D;IAC/D,8DAA8D;IAC9D,kEAAkE;IAClE,+DAA+D;IAC/D,+DAA+D;IAC/D,cAAc;IACd,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;IAEtE,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,gEAAgE;IAChE,kEAAkE;IAClE,gEAAgE;IAChE,8DAA8D;IAC9D,IAAI,QAAQ,GAAwB,GAAG,CAAC,QAAQ,CAAC;IACjD,IAAI,GAAG,CAAC,yBAAyB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC;QAChD,GAAG,CAAC,yBAAyB,GAAG,SAAS,CAAC;QAC1C,MAAM,IAAI,GAAwB,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,MAAM;YACR,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ;QAC7B,CAAC,CAAE;YACC,MAAM,EACJ,iEAAiE;gBACjE,0DAA0D;YAC5D,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;SACP;QACpB,CAAC,CAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAmB,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,GAAG,KAAK,CAAC;QACjB,GAAG,CAAC,SAAS,CACX;YACE,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAsB,CAAW,CAAC,OAAO,KAAK,EAAE;SACjE,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,uEAAuE;IACvE,wEAAwE;IACxE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB;YACrC,CAAC,CAAC,gBAAgB,GAAG,CAAC,QAAQ,sHAAsH;YACpJ,CAAC,CAAC,sBAAsB,GAAG,CAAC,QAAQ,mIAAmI,CAAC;QAC1K,GAAG,CAAC,SAAS,CACX;YACE,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,IAAI,EACF,MAAM,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,WAAW,+BAA+B;oBAC7E,eAAe,OAAO,oEAAoE;aAC7F;SACF,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,SAAS,CACX;QACE,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;KACzB,EACD,GAAG,CACJ,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;IAClC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC7C,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;QACnD,+DAA+D;QAC/D,qCAAqC;QACrC,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IACD,mEAAmE;IACnE,kEAAkE;IAClE,yDAAyD;IACzD,8DAA8D;IAC9D,iEAAiE;IACjE,iEAAiE;IACjE,+DAA+D;IAC/D,6BAA6B;IAC7B,GAAG,CAAC,UAAU,CACZ;QACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB;QACvC,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;QACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;KAChD,EACD,GAAG,CACJ,CAAC;IACF,gEAAgE;IAChE,kEAAkE;IAClE,iEAAiE;IACjE,SAAS;IACT,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAE5B,8DAA8D;IAC9D,+DAA+D;IAC/D,8DAA8D;IAC9D,kBAAkB;IAElB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,aAAa;YACnB,SAAS;SACV,CAAC,CAAC;QACH,uEAAuE;QACvE,oEAAoE;QACpE,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,qBAAqB;QACrB,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjD,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;YAClC,CAAC;YACD,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;YACvB,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,sEAAsE;QACtE,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,IAAI,GAAG,EAAU,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,iEAAiE;QACjE,8DAA8D;QAC9D,mCAAmC;QACnC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE;oBACpC,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,IAAI,EAAE,aAAa;oBACnB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,GAAG,CAAC,IAAI;iBAClB,CAAC,CAAC;gBACH,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACnC,6DAA6D;gBAC7D,4DAA4D;gBAC5D,6DAA6D;gBAC7D,8DAA8D;gBAC9D,MAAM,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACjD,IAAI,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChC,KAAK,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAClD,qDAAqD;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;QACD,4DAA4D;QAC5D,+DAA+D;QAC/D,iEAAiE;QACjE,8DAA8D;QAC9D,oBAAoB;QACpB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,gEAAgE;YAChE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC;iBAC3D,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;oBAAE,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;gBAC5D,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,GAAG,CAAC,SAAS,CACX;wBACE,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,YAAY;wBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;qBAC9B,EACD,GAAG,CACJ,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,iEAAiE;YACnE,CAAC,CAAC,CAAC;QACP,CAAC;QACD,gEAAgE;QAChE,6DAA6D;QAC7D,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW;YACvB,KAAK,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;IACrB,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC;IAC9B,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,4CAA4C;IACpE,kEAAkE;IAClE,8CAA8C;IAC9C,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACvD,0DAA0D;IAC1D,0DAA0D;IAC1D,6DAA6D;IAC7D,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;QACxB,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,4DAA4D;YAC5D,6CAA6C;YAC7C,IAAI,GAAG,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC7B,GAAG,CAAC,UAAU,CAAC;oBACb,SAAS,EAAE,GAAG,CAAC,IAAI;oBACnB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;oBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,gEAAgE;IAChE,oEAAoE;IACpE,kEAAkE;IAClE,wDAAwD;IACxD,kEAAkE;IAClE,iCAAiC;IACjC,IAAI,GAAG,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QAC7B,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC;YACb,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE;YAC3B,SAAS,EAAE,GAAG,CAAC,iBAAiB,EAAE;SACnC,CAAC,CAAC;IACL,CAAC;IACD,mEAAmE;IACnE,qEAAqE;IACrE,wCAAwC;IACxC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,iEAAiE;QACjE,0BAA0B;QAC1B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE;oBACpC,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI;oBACV,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,GAAG,CAAC,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;QACD,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
|