charness 0.0.0-stage → 3.0.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/.env.example +88 -0
- package/DEVELOPMENT.md +110 -0
- package/LICENSE +21 -0
- package/MIGRATION_1_TO_2.md +24 -0
- package/README.md +1024 -2
- package/dist/accessControl.d.ts +71 -0
- package/dist/accessControl.d.ts.map +1 -0
- package/dist/accessControl.js +108 -0
- package/dist/accessControl.js.map +1 -0
- package/dist/adapters/adapterEventRouting.d.ts +51 -0
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
- package/dist/adapters/adapterEventRouting.js +74 -0
- package/dist/adapters/adapterEventRouting.js.map +1 -0
- package/dist/adapters/adapterNames.d.ts +19 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -0
- package/dist/adapters/adapterNames.js +25 -0
- package/dist/adapters/adapterNames.js.map +1 -0
- package/dist/adapters/claudeCliAdapter.d.ts +1336 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeCliAdapter.js +4204 -0
- package/dist/adapters/claudeCliAdapter.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +548 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.js +1810 -0
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
- package/dist/adapters/claudePlatformFlags.d.ts +35 -0
- package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
- package/dist/adapters/claudePlatformFlags.js +46 -0
- package/dist/adapters/claudePlatformFlags.js.map +1 -0
- package/dist/adapters/createAdapter.d.ts +252 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -0
- package/dist/adapters/createAdapter.js +475 -0
- package/dist/adapters/createAdapter.js.map +1 -0
- package/dist/adapters/openCodeAdapter.d.ts +1446 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
- package/dist/adapters/openCodeAdapter.js +4540 -0
- package/dist/adapters/openCodeAdapter.js.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.js +15 -0
- package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
- package/dist/adapters/terminalAdapter.d.ts +68 -0
- package/dist/adapters/terminalAdapter.d.ts.map +1 -0
- package/dist/adapters/terminalAdapter.js +371 -0
- package/dist/adapters/terminalAdapter.js.map +1 -0
- package/dist/agentLogin/agentLogin.d.ts +31 -0
- package/dist/agentLogin/agentLogin.d.ts.map +1 -0
- package/dist/agentLogin/agentLogin.js +493 -0
- package/dist/agentLogin/agentLogin.js.map +1 -0
- package/dist/agentTrigger.d.ts +28 -0
- package/dist/agentTrigger.d.ts.map +1 -0
- package/dist/agentTrigger.js +53 -0
- package/dist/agentTrigger.js.map +1 -0
- package/dist/apiErrorRetry.d.ts +209 -0
- package/dist/apiErrorRetry.d.ts.map +1 -0
- package/dist/apiErrorRetry.js +351 -0
- package/dist/apiErrorRetry.js.map +1 -0
- package/dist/apiRetryKick.d.ts +148 -0
- package/dist/apiRetryKick.d.ts.map +1 -0
- package/dist/apiRetryKick.js +158 -0
- package/dist/apiRetryKick.js.map +1 -0
- package/dist/bootClassifier.d.ts +46 -0
- package/dist/bootClassifier.d.ts.map +1 -0
- package/dist/bootClassifier.js +43 -0
- package/dist/bootClassifier.js.map +1 -0
- package/dist/bot.d.ts +207 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +10611 -0
- package/dist/bot.js.map +1 -0
- package/dist/botFileStorage.d.ts +60 -0
- package/dist/botFileStorage.d.ts.map +1 -0
- package/dist/botFileStorage.js +205 -0
- package/dist/botFileStorage.js.map +1 -0
- package/dist/cli/applyDnsFix.d.ts +7 -0
- package/dist/cli/applyDnsFix.d.ts.map +1 -0
- package/dist/cli/applyDnsFix.js +46 -0
- package/dist/cli/applyDnsFix.js.map +1 -0
- package/dist/cli/bot.d.ts +27 -0
- package/dist/cli/bot.d.ts.map +1 -0
- package/dist/cli/bot.js +98 -0
- package/dist/cli/bot.js.map +1 -0
- package/dist/cli/botEntry.d.ts +3 -0
- package/dist/cli/botEntry.d.ts.map +1 -0
- package/dist/cli/botEntry.js +11 -0
- package/dist/cli/botEntry.js.map +1 -0
- package/dist/cli/connectorGuards.d.ts +31 -0
- package/dist/cli/connectorGuards.d.ts.map +1 -0
- package/dist/cli/connectorGuards.js +159 -0
- package/dist/cli/connectorGuards.js.map +1 -0
- package/dist/cli/envLoader.d.ts +34 -0
- package/dist/cli/envLoader.d.ts.map +1 -0
- package/dist/cli/envLoader.js +132 -0
- package/dist/cli/envLoader.js.map +1 -0
- package/dist/cli/hot.d.ts +82 -0
- package/dist/cli/hot.d.ts.map +1 -0
- package/dist/cli/hot.js +323 -0
- package/dist/cli/hot.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +130 -0
- package/dist/cli.js.map +1 -0
- package/dist/connectors/jira/adf.d.ts +72 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -0
- package/dist/connectors/jira/adf.js +407 -0
- package/dist/connectors/jira/adf.js.map +1 -0
- package/dist/connectors/jira/agentBinaries.d.ts +14 -0
- package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
- package/dist/connectors/jira/agentBinaries.js +75 -0
- package/dist/connectors/jira/agentBinaries.js.map +1 -0
- package/dist/connectors/jira/answerSink.d.ts +52 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -0
- package/dist/connectors/jira/answerSink.js +220 -0
- package/dist/connectors/jira/answerSink.js.map +1 -0
- package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
- package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentDownload.js +92 -0
- package/dist/connectors/jira/attachmentDownload.js.map +1 -0
- package/dist/connectors/jira/attachmentTool.d.ts +43 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentTool.js +150 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -0
- package/dist/connectors/jira/client.d.ts +490 -0
- package/dist/connectors/jira/client.d.ts.map +1 -0
- package/dist/connectors/jira/client.js +453 -0
- package/dist/connectors/jira/client.js.map +1 -0
- package/dist/connectors/jira/config.d.ts +117 -0
- package/dist/connectors/jira/config.d.ts.map +1 -0
- package/dist/connectors/jira/config.js +350 -0
- package/dist/connectors/jira/config.js.map +1 -0
- package/dist/connectors/jira/configFile.d.ts +10 -0
- package/dist/connectors/jira/configFile.d.ts.map +1 -0
- package/dist/connectors/jira/configFile.js +50 -0
- package/dist/connectors/jira/configFile.js.map +1 -0
- package/dist/connectors/jira/connector.d.ts +68 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -0
- package/dist/connectors/jira/connector.js +257 -0
- package/dist/connectors/jira/connector.js.map +1 -0
- package/dist/connectors/jira/contextLedger.d.ts +59 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
- package/dist/connectors/jira/contextLedger.js +194 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -0
- package/dist/connectors/jira/contextPreamble.d.ts +18 -0
- package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
- package/dist/connectors/jira/contextPreamble.js +31 -0
- package/dist/connectors/jira/contextPreamble.js.map +1 -0
- package/dist/connectors/jira/inbound.d.ts +132 -0
- package/dist/connectors/jira/inbound.d.ts.map +1 -0
- package/dist/connectors/jira/inbound.js +316 -0
- package/dist/connectors/jira/inbound.js.map +1 -0
- package/dist/connectors/jira/issueBlocks.d.ts +51 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
- package/dist/connectors/jira/issueBlocks.js +182 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -0
- package/dist/connectors/jira/issueContext.d.ts +25 -0
- package/dist/connectors/jira/issueContext.d.ts.map +1 -0
- package/dist/connectors/jira/issueContext.js +53 -0
- package/dist/connectors/jira/issueContext.js.map +1 -0
- package/dist/connectors/jira/issueDelta.d.ts +35 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
- package/dist/connectors/jira/issueDelta.js +50 -0
- package/dist/connectors/jira/issueDelta.js.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts +20 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.js +92 -0
- package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
- package/dist/connectors/jira/outbound.d.ts +6 -0
- package/dist/connectors/jira/outbound.d.ts.map +1 -0
- package/dist/connectors/jira/outbound.js +38 -0
- package/dist/connectors/jira/outbound.js.map +1 -0
- package/dist/connectors/jira/prompt.d.ts +37 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -0
- package/dist/connectors/jira/prompt.js +99 -0
- package/dist/connectors/jira/prompt.js.map +1 -0
- package/dist/connectors/jira/promptSpill.d.ts +50 -0
- package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
- package/dist/connectors/jira/promptSpill.js +157 -0
- package/dist/connectors/jira/promptSpill.js.map +1 -0
- package/dist/connectors/jira/promptText.d.ts +7 -0
- package/dist/connectors/jira/promptText.d.ts.map +1 -0
- package/dist/connectors/jira/promptText.js +26 -0
- package/dist/connectors/jira/promptText.js.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts +16 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.js +101 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/jira/trigger.d.ts +50 -0
- package/dist/connectors/jira/trigger.d.ts.map +1 -0
- package/dist/connectors/jira/trigger.js +93 -0
- package/dist/connectors/jira/trigger.js.map +1 -0
- package/dist/connectors/jira/triggerLog.d.ts +51 -0
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
- package/dist/connectors/jira/triggerLog.js +78 -0
- package/dist/connectors/jira/triggerLog.js.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.js +105 -0
- package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
- package/dist/connectors/telegram/answerSink.d.ts +46 -0
- package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
- package/dist/connectors/telegram/answerSink.js +71 -0
- package/dist/connectors/telegram/answerSink.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +31 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js +142 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
- package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/botCore.js +3 -0
- package/dist/connectors/telegram/commands/botCore.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
- package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/compaction.js +868 -0
- package/dist/connectors/telegram/commands/compaction.js.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.js +335 -0
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +95 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.js +841 -0
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
- package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
- package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/reminders.js +624 -0
- package/dist/connectors/telegram/commands/reminders.js.map +1 -0
- package/dist/connectors/telegram/fileIntake.d.ts +166 -0
- package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
- package/dist/connectors/telegram/fileIntake.js +304 -0
- package/dist/connectors/telegram/fileIntake.js.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.js +221 -0
- package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
- package/dist/connectors/telegram/inbound.d.ts +131 -0
- package/dist/connectors/telegram/inbound.d.ts.map +1 -0
- package/dist/connectors/telegram/inbound.js +278 -0
- package/dist/connectors/telegram/inbound.js.map +1 -0
- package/dist/connectors/telegram/languagePicker.d.ts +32 -0
- package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/languagePicker.js +55 -0
- package/dist/connectors/telegram/languagePicker.js.map +1 -0
- package/dist/connectors/telegram/messageSplit.d.ts +62 -0
- package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
- package/dist/connectors/telegram/messageSplit.js +119 -0
- package/dist/connectors/telegram/messageSplit.js.map +1 -0
- package/dist/connectors/telegram/outbound.d.ts +62 -0
- package/dist/connectors/telegram/outbound.d.ts.map +1 -0
- package/dist/connectors/telegram/outbound.js +116 -0
- package/dist/connectors/telegram/outbound.js.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
- package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
- package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.js +120 -0
- package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.js +37 -0
- package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.js +97 -0
- package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
- package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.js +35 -0
- package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
- package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
- package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/timezonePicker.js +142 -0
- package/dist/connectors/telegram/timezonePicker.js.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.js +159 -0
- package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
- package/dist/connectors/test/connector.d.ts +52 -0
- package/dist/connectors/test/connector.d.ts.map +1 -0
- package/dist/connectors/test/connector.js +143 -0
- package/dist/connectors/test/connector.js.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.js +50 -0
- package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
- package/dist/diagLog.d.ts +6 -0
- package/dist/diagLog.d.ts.map +1 -0
- package/dist/diagLog.js +58 -0
- package/dist/diagLog.js.map +1 -0
- package/dist/effortLevels.d.ts +68 -0
- package/dist/effortLevels.d.ts.map +1 -0
- package/dist/effortLevels.js +114 -0
- package/dist/effortLevels.js.map +1 -0
- package/dist/folderName.d.ts +42 -0
- package/dist/folderName.d.ts.map +1 -0
- package/dist/folderName.js +51 -0
- package/dist/folderName.js.map +1 -0
- package/dist/i18n/de.d.ts +2 -0
- package/dist/i18n/de.d.ts.map +1 -0
- package/dist/i18n/de.js +537 -0
- package/dist/i18n/de.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +566 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/es.d.ts +2 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +537 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/fr.d.ts +2 -0
- package/dist/i18n/fr.d.ts.map +1 -0
- package/dist/i18n/fr.js +537 -0
- package/dist/i18n/fr.js.map +1 -0
- package/dist/i18n/hi.d.ts +2 -0
- package/dist/i18n/hi.d.ts.map +1 -0
- package/dist/i18n/hi.js +537 -0
- package/dist/i18n/hi.js.map +1 -0
- package/dist/i18n/ja.d.ts +2 -0
- package/dist/i18n/ja.d.ts.map +1 -0
- package/dist/i18n/ja.js +537 -0
- package/dist/i18n/ja.js.map +1 -0
- package/dist/i18n/ka.d.ts +2 -0
- package/dist/i18n/ka.d.ts.map +1 -0
- package/dist/i18n/ka.js +537 -0
- package/dist/i18n/ka.js.map +1 -0
- package/dist/i18n/pt.d.ts +2 -0
- package/dist/i18n/pt.d.ts.map +1 -0
- package/dist/i18n/pt.js +537 -0
- package/dist/i18n/pt.js.map +1 -0
- package/dist/i18n/ru.d.ts +6 -0
- package/dist/i18n/ru.d.ts.map +1 -0
- package/dist/i18n/ru.js +540 -0
- package/dist/i18n/ru.js.map +1 -0
- package/dist/i18n/uk.d.ts +8 -0
- package/dist/i18n/uk.d.ts.map +1 -0
- package/dist/i18n/uk.js +542 -0
- package/dist/i18n/uk.js.map +1 -0
- package/dist/i18n/uz.d.ts +2 -0
- package/dist/i18n/uz.d.ts.map +1 -0
- package/dist/i18n/uz.js +537 -0
- package/dist/i18n/uz.js.map +1 -0
- package/dist/i18n/zh.d.ts +2 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +537 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/i18n.d.ts +115 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +233 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/installManager.d.ts +99 -0
- package/dist/installManager.d.ts.map +1 -0
- package/dist/installManager.js +943 -0
- package/dist/installManager.js.map +1 -0
- package/dist/instanceLock.d.ts +161 -0
- package/dist/instanceLock.d.ts.map +1 -0
- package/dist/instanceLock.js +388 -0
- package/dist/instanceLock.js.map +1 -0
- package/dist/mcpConfig.d.ts +76 -0
- package/dist/mcpConfig.d.ts.map +1 -0
- package/dist/mcpConfig.js +270 -0
- package/dist/mcpConfig.js.map +1 -0
- package/dist/openCodeOpenQuestion.d.ts +44 -0
- package/dist/openCodeOpenQuestion.d.ts.map +1 -0
- package/dist/openCodeOpenQuestion.js +64 -0
- package/dist/openCodeOpenQuestion.js.map +1 -0
- package/dist/openCodeQuestionFlow.d.ts +105 -0
- package/dist/openCodeQuestionFlow.d.ts.map +1 -0
- package/dist/openCodeQuestionFlow.js +143 -0
- package/dist/openCodeQuestionFlow.js.map +1 -0
- package/dist/openCodeSessionRouting.d.ts +133 -0
- package/dist/openCodeSessionRouting.d.ts.map +1 -0
- package/dist/openCodeSessionRouting.js +253 -0
- package/dist/openCodeSessionRouting.js.map +1 -0
- package/dist/openCodeSessionTitle.d.ts +50 -0
- package/dist/openCodeSessionTitle.d.ts.map +1 -0
- package/dist/openCodeSessionTitle.js +84 -0
- package/dist/openCodeSessionTitle.js.map +1 -0
- package/dist/outputTrace.d.ts +108 -0
- package/dist/outputTrace.d.ts.map +1 -0
- package/dist/outputTrace.js +430 -0
- package/dist/outputTrace.js.map +1 -0
- package/dist/pendingQuestionRepost.d.ts +47 -0
- package/dist/pendingQuestionRepost.d.ts.map +1 -0
- package/dist/pendingQuestionRepost.js +29 -0
- package/dist/pendingQuestionRepost.js.map +1 -0
- package/dist/pinnedStatus.d.ts +52 -0
- package/dist/pinnedStatus.d.ts.map +1 -0
- package/dist/pinnedStatus.js +36 -0
- package/dist/pinnedStatus.js.map +1 -0
- package/dist/platform/answerSink.d.ts +93 -0
- package/dist/platform/answerSink.d.ts.map +1 -0
- package/dist/platform/answerSink.js +31 -0
- package/dist/platform/answerSink.js.map +1 -0
- package/dist/platform/capabilityFallback.d.ts +39 -0
- package/dist/platform/capabilityFallback.d.ts.map +1 -0
- package/dist/platform/capabilityFallback.js +55 -0
- package/dist/platform/capabilityFallback.js.map +1 -0
- package/dist/platform/commandRouter.d.ts +51 -0
- package/dist/platform/commandRouter.d.ts.map +1 -0
- package/dist/platform/commandRouter.js +53 -0
- package/dist/platform/commandRouter.js.map +1 -0
- package/dist/platform/connectorSet.d.ts +39 -0
- package/dist/platform/connectorSet.d.ts.map +1 -0
- package/dist/platform/connectorSet.js +55 -0
- package/dist/platform/connectorSet.js.map +1 -0
- package/dist/platform/inbound.d.ts +147 -0
- package/dist/platform/inbound.d.ts.map +1 -0
- package/dist/platform/inbound.js +18 -0
- package/dist/platform/inbound.js.map +1 -0
- package/dist/platform/outbound.d.ts +225 -0
- package/dist/platform/outbound.d.ts.map +1 -0
- package/dist/platform/outbound.js +30 -0
- package/dist/platform/outbound.js.map +1 -0
- package/dist/platform/unservedStateGuard.d.ts +27 -0
- package/dist/platform/unservedStateGuard.d.ts.map +1 -0
- package/dist/platform/unservedStateGuard.js +42 -0
- package/dist/platform/unservedStateGuard.js.map +1 -0
- package/dist/postToSession.d.ts +94 -0
- package/dist/postToSession.d.ts.map +1 -0
- package/dist/postToSession.js +56 -0
- package/dist/postToSession.js.map +1 -0
- package/dist/progressLine.d.ts +180 -0
- package/dist/progressLine.d.ts.map +1 -0
- package/dist/progressLine.js +293 -0
- package/dist/progressLine.js.map +1 -0
- package/dist/rateLimiter.d.ts +246 -0
- package/dist/rateLimiter.d.ts.map +1 -0
- package/dist/rateLimiter.js +555 -0
- package/dist/rateLimiter.js.map +1 -0
- package/dist/requests/answerRequest.d.ts +57 -0
- package/dist/requests/answerRequest.d.ts.map +1 -0
- package/dist/requests/answerRequest.js +96 -0
- package/dist/requests/answerRequest.js.map +1 -0
- package/dist/requests/answerTail.d.ts +83 -0
- package/dist/requests/answerTail.d.ts.map +1 -0
- package/dist/requests/answerTail.js +102 -0
- package/dist/requests/answerTail.js.map +1 -0
- package/dist/requests/limitWaitAnswer.d.ts +87 -0
- package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
- package/dist/requests/limitWaitAnswer.js +83 -0
- package/dist/requests/limitWaitAnswer.js.map +1 -0
- package/dist/requests/requestGroup.d.ts +44 -0
- package/dist/requests/requestGroup.d.ts.map +1 -0
- package/dist/requests/requestGroup.js +63 -0
- package/dist/requests/requestGroup.js.map +1 -0
- package/dist/requests/requestHeader.d.ts +70 -0
- package/dist/requests/requestHeader.d.ts.map +1 -0
- package/dist/requests/requestHeader.js +83 -0
- package/dist/requests/requestHeader.js.map +1 -0
- package/dist/requests/requestLedger.d.ts +217 -0
- package/dist/requests/requestLedger.d.ts.map +1 -0
- package/dist/requests/requestLedger.js +468 -0
- package/dist/requests/requestLedger.js.map +1 -0
- package/dist/requests/sessionTurnProbe.d.ts +52 -0
- package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
- package/dist/requests/sessionTurnProbe.js +29 -0
- package/dist/requests/sessionTurnProbe.js.map +1 -0
- package/dist/requests/types.d.ts +181 -0
- package/dist/requests/types.d.ts.map +1 -0
- package/dist/requests/types.js +9 -0
- package/dist/requests/types.js.map +1 -0
- package/dist/requests/wakeUpEngine.d.ts +160 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -0
- package/dist/requests/wakeUpEngine.js +399 -0
- package/dist/requests/wakeUpEngine.js.map +1 -0
- package/dist/requests/wakeUpRules.d.ts +151 -0
- package/dist/requests/wakeUpRules.d.ts.map +1 -0
- package/dist/requests/wakeUpRules.js +167 -0
- package/dist/requests/wakeUpRules.js.map +1 -0
- package/dist/resumeContext.d.ts +87 -0
- package/dist/resumeContext.d.ts.map +1 -0
- package/dist/resumeContext.js +114 -0
- package/dist/resumeContext.js.map +1 -0
- package/dist/scheduler/checkRun.d.ts +95 -0
- package/dist/scheduler/checkRun.d.ts.map +1 -0
- package/dist/scheduler/checkRun.js +172 -0
- package/dist/scheduler/checkRun.js.map +1 -0
- package/dist/scheduler/delivery.d.ts +99 -0
- package/dist/scheduler/delivery.d.ts.map +1 -0
- package/dist/scheduler/delivery.js +212 -0
- package/dist/scheduler/delivery.js.map +1 -0
- package/dist/scheduler/deliveryKind.d.ts +29 -0
- package/dist/scheduler/deliveryKind.d.ts.map +1 -0
- package/dist/scheduler/deliveryKind.js +39 -0
- package/dist/scheduler/deliveryKind.js.map +1 -0
- package/dist/scheduler/directoryThreads.d.ts +19 -0
- package/dist/scheduler/directoryThreads.d.ts.map +1 -0
- package/dist/scheduler/directoryThreads.js +28 -0
- package/dist/scheduler/directoryThreads.js.map +1 -0
- package/dist/scheduler/engine.d.ts +77 -0
- package/dist/scheduler/engine.d.ts.map +1 -0
- package/dist/scheduler/engine.js +337 -0
- package/dist/scheduler/engine.js.map +1 -0
- package/dist/scheduler/injection.d.ts +102 -0
- package/dist/scheduler/injection.d.ts.map +1 -0
- package/dist/scheduler/injection.js +122 -0
- package/dist/scheduler/injection.js.map +1 -0
- package/dist/scheduler/mcpBoot.d.ts +65 -0
- package/dist/scheduler/mcpBoot.d.ts.map +1 -0
- package/dist/scheduler/mcpBoot.js +60 -0
- package/dist/scheduler/mcpBoot.js.map +1 -0
- package/dist/scheduler/mcpSurface.d.ts +355 -0
- package/dist/scheduler/mcpSurface.d.ts.map +1 -0
- package/dist/scheduler/mcpSurface.js +1257 -0
- package/dist/scheduler/mcpSurface.js.map +1 -0
- package/dist/scheduler/rebindResume.d.ts +27 -0
- package/dist/scheduler/rebindResume.d.ts.map +1 -0
- package/dist/scheduler/rebindResume.js +17 -0
- package/dist/scheduler/rebindResume.js.map +1 -0
- package/dist/scheduler/recurrence.d.ts +58 -0
- package/dist/scheduler/recurrence.d.ts.map +1 -0
- package/dist/scheduler/recurrence.js +210 -0
- package/dist/scheduler/recurrence.js.map +1 -0
- package/dist/scheduler/runLedger.d.ts +59 -0
- package/dist/scheduler/runLedger.d.ts.map +1 -0
- package/dist/scheduler/runLedger.js +54 -0
- package/dist/scheduler/runLedger.js.map +1 -0
- package/dist/scheduler/store.d.ts +97 -0
- package/dist/scheduler/store.d.ts.map +1 -0
- package/dist/scheduler/store.js +124 -0
- package/dist/scheduler/store.js.map +1 -0
- package/dist/scheduler/timezoneRecompute.d.ts +61 -0
- package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
- package/dist/scheduler/timezoneRecompute.js +46 -0
- package/dist/scheduler/timezoneRecompute.js.map +1 -0
- package/dist/scheduler/types.d.ts +139 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +8 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/sendErrorClassifier.d.ts +45 -0
- package/dist/sendErrorClassifier.d.ts.map +1 -0
- package/dist/sendErrorClassifier.js +65 -0
- package/dist/sendErrorClassifier.js.map +1 -0
- package/dist/sessionKey.d.ts +136 -0
- package/dist/sessionKey.d.ts.map +1 -0
- package/dist/sessionKey.js +153 -0
- package/dist/sessionKey.js.map +1 -0
- package/dist/sessionPick.d.ts +42 -0
- package/dist/sessionPick.d.ts.map +1 -0
- package/dist/sessionPick.js +39 -0
- package/dist/sessionPick.js.map +1 -0
- package/dist/shutdown.d.ts +126 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +164 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/startupPromptBuffer.d.ts +85 -0
- package/dist/startupPromptBuffer.d.ts.map +1 -0
- package/dist/startupPromptBuffer.js +123 -0
- package/dist/startupPromptBuffer.js.map +1 -0
- package/dist/state.d.ts +1245 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +1830 -0
- package/dist/state.js.map +1 -0
- package/dist/threadContextPreamble.d.ts +89 -0
- package/dist/threadContextPreamble.d.ts.map +1 -0
- package/dist/threadContextPreamble.js +102 -0
- package/dist/threadContextPreamble.js.map +1 -0
- package/dist/threadRouting.d.ts +164 -0
- package/dist/threadRouting.d.ts.map +1 -0
- package/dist/threadRouting.js +182 -0
- package/dist/threadRouting.js.map +1 -0
- package/dist/types.d.ts +1015 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abortableFifo.d.ts +10 -0
- package/dist/utils/abortableFifo.d.ts.map +1 -0
- package/dist/utils/abortableFifo.js +55 -0
- package/dist/utils/abortableFifo.js.map +1 -0
- package/dist/utils/adoptedToolList.d.ts +27 -0
- package/dist/utils/adoptedToolList.d.ts.map +1 -0
- package/dist/utils/adoptedToolList.js +22 -0
- package/dist/utils/adoptedToolList.js.map +1 -0
- package/dist/utils/agentEnvironment.d.ts +42 -0
- package/dist/utils/agentEnvironment.d.ts.map +1 -0
- package/dist/utils/agentEnvironment.js +122 -0
- package/dist/utils/agentEnvironment.js.map +1 -0
- package/dist/utils/ansiClean.d.ts +11 -0
- package/dist/utils/ansiClean.d.ts.map +1 -0
- package/dist/utils/ansiClean.js +139 -0
- package/dist/utils/ansiClean.js.map +1 -0
- package/dist/utils/autoContinueOnLimit.d.ts +49 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
- package/dist/utils/autoContinueOnLimit.js +69 -0
- package/dist/utils/autoContinueOnLimit.js.map +1 -0
- package/dist/utils/canonicalPathContainment.d.ts +7 -0
- package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
- package/dist/utils/canonicalPathContainment.js +48 -0
- package/dist/utils/canonicalPathContainment.js.map +1 -0
- package/dist/utils/claudeAuthLogin.d.ts +71 -0
- package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
- package/dist/utils/claudeAuthLogin.js +93 -0
- package/dist/utils/claudeAuthLogin.js.map +1 -0
- package/dist/utils/claudeChunkClassifier.d.ts +97 -0
- package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
- package/dist/utils/claudeChunkClassifier.js +254 -0
- package/dist/utils/claudeChunkClassifier.js.map +1 -0
- package/dist/utils/claudeCodeVersion.d.ts +31 -0
- package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
- package/dist/utils/claudeCodeVersion.js +62 -0
- package/dist/utils/claudeCodeVersion.js.map +1 -0
- package/dist/utils/claudeCompactHook.d.ts +64 -0
- package/dist/utils/claudeCompactHook.d.ts.map +1 -0
- package/dist/utils/claudeCompactHook.js +98 -0
- package/dist/utils/claudeCompactHook.js.map +1 -0
- package/dist/utils/claudeLivenessAction.d.ts +208 -0
- package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
- package/dist/utils/claudeLivenessAction.js +135 -0
- package/dist/utils/claudeLivenessAction.js.map +1 -0
- package/dist/utils/claudeMcpHeal.d.ts +92 -0
- package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
- package/dist/utils/claudeMcpHeal.js +91 -0
- package/dist/utils/claudeMcpHeal.js.map +1 -0
- package/dist/utils/claudeRelayRouting.d.ts +86 -0
- package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
- package/dist/utils/claudeRelayRouting.js +159 -0
- package/dist/utils/claudeRelayRouting.js.map +1 -0
- package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
- package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
- package/dist/utils/claudeRuntimeInfo.js +151 -0
- package/dist/utils/claudeRuntimeInfo.js.map +1 -0
- package/dist/utils/claudeScrapeShapes.d.ts +256 -0
- package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
- package/dist/utils/claudeScrapeShapes.js +290 -0
- package/dist/utils/claudeScrapeShapes.js.map +1 -0
- package/dist/utils/claudeSessionTitle.d.ts +27 -0
- package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
- package/dist/utils/claudeSessionTitle.js +90 -0
- package/dist/utils/claudeSessionTitle.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +202 -0
- package/dist/utils/claudeStreamJson.d.ts.map +1 -0
- package/dist/utils/claudeStreamJson.js +351 -0
- package/dist/utils/claudeStreamJson.js.map +1 -0
- package/dist/utils/claudeSubagentTail.d.ts +93 -0
- package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
- package/dist/utils/claudeSubagentTail.js +136 -0
- package/dist/utils/claudeSubagentTail.js.map +1 -0
- package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
- package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
- package/dist/utils/clearThreadOutputQueues.js +39 -0
- package/dist/utils/clearThreadOutputQueues.js.map +1 -0
- package/dist/utils/compactCommandRoute.d.ts +45 -0
- package/dist/utils/compactCommandRoute.d.ts.map +1 -0
- package/dist/utils/compactCommandRoute.js +36 -0
- package/dist/utils/compactCommandRoute.js.map +1 -0
- package/dist/utils/compactOnIdle.d.ts +329 -0
- package/dist/utils/compactOnIdle.d.ts.map +1 -0
- package/dist/utils/compactOnIdle.js +379 -0
- package/dist/utils/compactOnIdle.js.map +1 -0
- package/dist/utils/consoleFileTap.d.ts +51 -0
- package/dist/utils/consoleFileTap.d.ts.map +1 -0
- package/dist/utils/consoleFileTap.js +86 -0
- package/dist/utils/consoleFileTap.js.map +1 -0
- package/dist/utils/displayVerbosity.d.ts +44 -0
- package/dist/utils/displayVerbosity.d.ts.map +1 -0
- package/dist/utils/displayVerbosity.js +75 -0
- package/dist/utils/displayVerbosity.js.map +1 -0
- package/dist/utils/download.d.ts +72 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +216 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/draftFinalize.d.ts +110 -0
- package/dist/utils/draftFinalize.d.ts.map +1 -0
- package/dist/utils/draftFinalize.js +100 -0
- package/dist/utils/draftFinalize.js.map +1 -0
- package/dist/utils/draftId.d.ts +36 -0
- package/dist/utils/draftId.d.ts.map +1 -0
- package/dist/utils/draftId.js +46 -0
- package/dist/utils/draftId.js.map +1 -0
- package/dist/utils/draftPacer.d.ts +72 -0
- package/dist/utils/draftPacer.d.ts.map +1 -0
- package/dist/utils/draftPacer.js +53 -0
- package/dist/utils/draftPacer.js.map +1 -0
- package/dist/utils/effortStartupKeystroke.d.ts +20 -0
- package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
- package/dist/utils/effortStartupKeystroke.js +28 -0
- package/dist/utils/effortStartupKeystroke.js.map +1 -0
- package/dist/utils/ensureSessionPlan.d.ts +70 -0
- package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
- package/dist/utils/ensureSessionPlan.js +54 -0
- package/dist/utils/ensureSessionPlan.js.map +1 -0
- package/dist/utils/fileSendPlan.d.ts +217 -0
- package/dist/utils/fileSendPlan.d.ts.map +1 -0
- package/dist/utils/fileSendPlan.js +291 -0
- package/dist/utils/fileSendPlan.js.map +1 -0
- package/dist/utils/fileSendService.d.ts +94 -0
- package/dist/utils/fileSendService.d.ts.map +1 -0
- package/dist/utils/fileSendService.js +387 -0
- package/dist/utils/fileSendService.js.map +1 -0
- package/dist/utils/groupFinalizePlan.d.ts +38 -0
- package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
- package/dist/utils/groupFinalizePlan.js +35 -0
- package/dist/utils/groupFinalizePlan.js.map +1 -0
- package/dist/utils/identicalOutputGuard.d.ts +83 -0
- package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
- package/dist/utils/identicalOutputGuard.js +99 -0
- package/dist/utils/identicalOutputGuard.js.map +1 -0
- package/dist/utils/isoTimestamp.d.ts +16 -0
- package/dist/utils/isoTimestamp.d.ts.map +1 -0
- package/dist/utils/isoTimestamp.js +34 -0
- package/dist/utils/isoTimestamp.js.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
- package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
- package/dist/utils/jsonStreamHost.d.ts +227 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -0
- package/dist/utils/jsonStreamHost.js +417 -0
- package/dist/utils/jsonStreamHost.js.map +1 -0
- package/dist/utils/keyedTransitionQueue.d.ts +18 -0
- package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
- package/dist/utils/keyedTransitionQueue.js +34 -0
- package/dist/utils/keyedTransitionQueue.js.map +1 -0
- package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
- package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
- package/dist/utils/limitEpisodeRecovery.js +133 -0
- package/dist/utils/limitEpisodeRecovery.js.map +1 -0
- package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
- package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
- package/dist/utils/limitHeldPromptQueue.js +59 -0
- package/dist/utils/limitHeldPromptQueue.js.map +1 -0
- package/dist/utils/limitHeldPrompts.d.ts +58 -0
- package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
- package/dist/utils/limitHeldPrompts.js +65 -0
- package/dist/utils/limitHeldPrompts.js.map +1 -0
- package/dist/utils/linkPreviewSuppression.d.ts +18 -0
- package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
- package/dist/utils/linkPreviewSuppression.js +37 -0
- package/dist/utils/linkPreviewSuppression.js.map +1 -0
- package/dist/utils/localClock.d.ts +15 -0
- package/dist/utils/localClock.d.ts.map +1 -0
- package/dist/utils/localClock.js +29 -0
- package/dist/utils/localClock.js.map +1 -0
- package/dist/utils/markdownTableRender.d.ts +83 -0
- package/dist/utils/markdownTableRender.d.ts.map +1 -0
- package/dist/utils/markdownTableRender.js +298 -0
- package/dist/utils/markdownTableRender.js.map +1 -0
- package/dist/utils/mediaGroupCollector.d.ts +51 -0
- package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
- package/dist/utils/mediaGroupCollector.js +90 -0
- package/dist/utils/mediaGroupCollector.js.map +1 -0
- package/dist/utils/messageSendService.d.ts +136 -0
- package/dist/utils/messageSendService.d.ts.map +1 -0
- package/dist/utils/messageSendService.js +165 -0
- package/dist/utils/messageSendService.js.map +1 -0
- package/dist/utils/minutesOverride.d.ts +7 -0
- package/dist/utils/minutesOverride.d.ts.map +1 -0
- package/dist/utils/minutesOverride.js +16 -0
- package/dist/utils/minutesOverride.js.map +1 -0
- package/dist/utils/modelPickerPlan.d.ts +119 -0
- package/dist/utils/modelPickerPlan.d.ts.map +1 -0
- package/dist/utils/modelPickerPlan.js +171 -0
- package/dist/utils/modelPickerPlan.js.map +1 -0
- package/dist/utils/modelSetReplyDecision.d.ts +67 -0
- package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
- package/dist/utils/modelSetReplyDecision.js +27 -0
- package/dist/utils/modelSetReplyDecision.js.map +1 -0
- package/dist/utils/openCodeAuthLogin.d.ts +181 -0
- package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
- package/dist/utils/openCodeAuthLogin.js +393 -0
- package/dist/utils/openCodeAuthLogin.js.map +1 -0
- package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
- package/dist/utils/openCodeCompactPlugin.js +146 -0
- package/dist/utils/openCodeCompactPlugin.js.map +1 -0
- package/dist/utils/openCodeTurnActivity.d.ts +67 -0
- package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
- package/dist/utils/openCodeTurnActivity.js +27 -0
- package/dist/utils/openCodeTurnActivity.js.map +1 -0
- package/dist/utils/outputDebounce.d.ts +24 -0
- package/dist/utils/outputDebounce.d.ts.map +1 -0
- package/dist/utils/outputDebounce.js +30 -0
- package/dist/utils/outputDebounce.js.map +1 -0
- package/dist/utils/outputFlushTiming.d.ts +54 -0
- package/dist/utils/outputFlushTiming.d.ts.map +1 -0
- package/dist/utils/outputFlushTiming.js +48 -0
- package/dist/utils/outputFlushTiming.js.map +1 -0
- package/dist/utils/paginateList.d.ts +25 -0
- package/dist/utils/paginateList.d.ts.map +1 -0
- package/dist/utils/paginateList.js +32 -0
- package/dist/utils/paginateList.js.map +1 -0
- package/dist/utils/paneDiff.d.ts +55 -0
- package/dist/utils/paneDiff.d.ts.map +1 -0
- package/dist/utils/paneDiff.js +88 -0
- package/dist/utils/paneDiff.js.map +1 -0
- package/dist/utils/paneResizeGuard.d.ts +69 -0
- package/dist/utils/paneResizeGuard.d.ts.map +1 -0
- package/dist/utils/paneResizeGuard.js +91 -0
- package/dist/utils/paneResizeGuard.js.map +1 -0
- package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
- package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
- package/dist/utils/persistAdapterSessionIds.js +28 -0
- package/dist/utils/persistAdapterSessionIds.js.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.js +20 -0
- package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
- package/dist/utils/pollBackoff.d.ts +45 -0
- package/dist/utils/pollBackoff.d.ts.map +1 -0
- package/dist/utils/pollBackoff.js +44 -0
- package/dist/utils/pollBackoff.js.map +1 -0
- package/dist/utils/promptDelivery.d.ts +46 -0
- package/dist/utils/promptDelivery.d.ts.map +1 -0
- package/dist/utils/promptDelivery.js +49 -0
- package/dist/utils/promptDelivery.js.map +1 -0
- package/dist/utils/providerDisconnectPlan.d.ts +82 -0
- package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
- package/dist/utils/providerDisconnectPlan.js +110 -0
- package/dist/utils/providerDisconnectPlan.js.map +1 -0
- package/dist/utils/rateLimitLog.d.ts +48 -0
- package/dist/utils/rateLimitLog.d.ts.map +1 -0
- package/dist/utils/rateLimitLog.js +43 -0
- package/dist/utils/rateLimitLog.js.map +1 -0
- package/dist/utils/recentRelayWindow.d.ts +165 -0
- package/dist/utils/recentRelayWindow.d.ts.map +1 -0
- package/dist/utils/recentRelayWindow.js +284 -0
- package/dist/utils/recentRelayWindow.js.map +1 -0
- package/dist/utils/recvPreviewRedaction.d.ts +23 -0
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
- package/dist/utils/recvPreviewRedaction.js +39 -0
- package/dist/utils/recvPreviewRedaction.js.map +1 -0
- package/dist/utils/reminderFlow.d.ts +148 -0
- package/dist/utils/reminderFlow.d.ts.map +1 -0
- package/dist/utils/reminderFlow.js +122 -0
- package/dist/utils/reminderFlow.js.map +1 -0
- package/dist/utils/reminderScheduleText.d.ts +87 -0
- package/dist/utils/reminderScheduleText.d.ts.map +1 -0
- package/dist/utils/reminderScheduleText.js +135 -0
- package/dist/utils/reminderScheduleText.js.map +1 -0
- package/dist/utils/reminderWizard.d.ts +710 -0
- package/dist/utils/reminderWizard.d.ts.map +1 -0
- package/dist/utils/reminderWizard.js +1164 -0
- package/dist/utils/reminderWizard.js.map +1 -0
- package/dist/utils/replyQuote.d.ts +111 -0
- package/dist/utils/replyQuote.d.ts.map +1 -0
- package/dist/utils/replyQuote.js +122 -0
- package/dist/utils/replyQuote.js.map +1 -0
- package/dist/utils/resolveBinary.d.ts +25 -0
- package/dist/utils/resolveBinary.d.ts.map +1 -0
- package/dist/utils/resolveBinary.js +99 -0
- package/dist/utils/resolveBinary.js.map +1 -0
- package/dist/utils/retryAfterHeader.d.ts +7 -0
- package/dist/utils/retryAfterHeader.d.ts.map +1 -0
- package/dist/utils/retryAfterHeader.js +17 -0
- package/dist/utils/retryAfterHeader.js.map +1 -0
- package/dist/utils/rotatingJsonlFile.d.ts +40 -0
- package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
- package/dist/utils/rotatingJsonlFile.js +106 -0
- package/dist/utils/rotatingJsonlFile.js.map +1 -0
- package/dist/utils/rotatingLogFile.d.ts +25 -0
- package/dist/utils/rotatingLogFile.d.ts.map +1 -0
- package/dist/utils/rotatingLogFile.js +74 -0
- package/dist/utils/rotatingLogFile.js.map +1 -0
- package/dist/utils/sendRateTracker.d.ts +59 -0
- package/dist/utils/sendRateTracker.d.ts.map +1 -0
- package/dist/utils/sendRateTracker.js +144 -0
- package/dist/utils/sendRateTracker.js.map +1 -0
- package/dist/utils/serialQueue.d.ts +5 -0
- package/dist/utils/serialQueue.d.ts.map +1 -0
- package/dist/utils/serialQueue.js +14 -0
- package/dist/utils/serialQueue.js.map +1 -0
- package/dist/utils/sseStreamLifecycle.d.ts +32 -0
- package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
- package/dist/utils/sseStreamLifecycle.js +41 -0
- package/dist/utils/sseStreamLifecycle.js.map +1 -0
- package/dist/utils/startupReadiness.d.ts +119 -0
- package/dist/utils/startupReadiness.d.ts.map +1 -0
- package/dist/utils/startupReadiness.js +148 -0
- package/dist/utils/startupReadiness.js.map +1 -0
- package/dist/utils/statusFlushDecision.d.ts +18 -0
- package/dist/utils/statusFlushDecision.d.ts.map +1 -0
- package/dist/utils/statusFlushDecision.js +53 -0
- package/dist/utils/statusFlushDecision.js.map +1 -0
- package/dist/utils/subagentRender.d.ts +52 -0
- package/dist/utils/subagentRender.d.ts.map +1 -0
- package/dist/utils/subagentRender.js +66 -0
- package/dist/utils/subagentRender.js.map +1 -0
- package/dist/utils/subagentStatusRender.d.ts +90 -0
- package/dist/utils/subagentStatusRender.d.ts.map +1 -0
- package/dist/utils/subagentStatusRender.js +124 -0
- package/dist/utils/subagentStatusRender.js.map +1 -0
- package/dist/utils/telegramError.d.ts +2 -0
- package/dist/utils/telegramError.d.ts.map +1 -0
- package/dist/utils/telegramError.js +16 -0
- package/dist/utils/telegramError.js.map +1 -0
- package/dist/utils/terminalEmitPlan.d.ts +74 -0
- package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
- package/dist/utils/terminalEmitPlan.js +86 -0
- package/dist/utils/terminalEmitPlan.js.map +1 -0
- package/dist/utils/thinkingRender.d.ts +74 -0
- package/dist/utils/thinkingRender.d.ts.map +1 -0
- package/dist/utils/thinkingRender.js +85 -0
- package/dist/utils/thinkingRender.js.map +1 -0
- package/dist/utils/threadStatusReport.d.ts +55 -0
- package/dist/utils/threadStatusReport.d.ts.map +1 -0
- package/dist/utils/threadStatusReport.js +65 -0
- package/dist/utils/threadStatusReport.js.map +1 -0
- package/dist/utils/threadToggle.d.ts +29 -0
- package/dist/utils/threadToggle.d.ts.map +1 -0
- package/dist/utils/threadToggle.js +39 -0
- package/dist/utils/threadToggle.js.map +1 -0
- package/dist/utils/timezone.d.ts +125 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +278 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/tmuxExec.d.ts +61 -0
- package/dist/utils/tmuxExec.d.ts.map +1 -0
- package/dist/utils/tmuxExec.js +109 -0
- package/dist/utils/tmuxExec.js.map +1 -0
- package/dist/utils/tmuxSessionName.d.ts +34 -0
- package/dist/utils/tmuxSessionName.d.ts.map +1 -0
- package/dist/utils/tmuxSessionName.js +51 -0
- package/dist/utils/tmuxSessionName.js.map +1 -0
- package/dist/utils/toolResultRender.d.ts +61 -0
- package/dist/utils/toolResultRender.d.ts.map +1 -0
- package/dist/utils/toolResultRender.js +62 -0
- package/dist/utils/toolResultRender.js.map +1 -0
- package/dist/utils/topicRequest.d.ts +61 -0
- package/dist/utils/topicRequest.d.ts.map +1 -0
- package/dist/utils/topicRequest.js +68 -0
- package/dist/utils/topicRequest.js.map +1 -0
- package/dist/utils/topicView.d.ts +55 -0
- package/dist/utils/topicView.d.ts.map +1 -0
- package/dist/utils/topicView.js +56 -0
- package/dist/utils/topicView.js.map +1 -0
- package/dist/utils/transcribeAudio.d.ts +89 -0
- package/dist/utils/transcribeAudio.d.ts.map +1 -0
- package/dist/utils/transcribeAudio.js +249 -0
- package/dist/utils/transcribeAudio.js.map +1 -0
- package/dist/utils/transientFrames.d.ts +52 -0
- package/dist/utils/transientFrames.d.ts.map +1 -0
- package/dist/utils/transientFrames.js +41 -0
- package/dist/utils/transientFrames.js.map +1 -0
- package/dist/utils/typingActive.d.ts +35 -0
- package/dist/utils/typingActive.d.ts.map +1 -0
- package/dist/utils/typingActive.js +22 -0
- package/dist/utils/typingActive.js.map +1 -0
- package/dist/utils/typingLoopBackstop.d.ts +64 -0
- package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
- package/dist/utils/typingLoopBackstop.js +68 -0
- package/dist/utils/typingLoopBackstop.js.map +1 -0
- package/dist/utils/verbosityRender.d.ts +18 -0
- package/dist/utils/verbosityRender.d.ts.map +1 -0
- package/dist/utils/verbosityRender.js +17 -0
- package/dist/utils/verbosityRender.js.map +1 -0
- package/dist/utils/wedgeRecovery.d.ts +57 -0
- package/dist/utils/wedgeRecovery.d.ts.map +1 -0
- package/dist/utils/wedgeRecovery.js +24 -0
- package/dist/utils/wedgeRecovery.js.map +1 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +61 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +113 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +226 -0
- package/dist/validation.js.map +1 -0
- package/dist/voiceQueue.d.ts +7 -0
- package/dist/voiceQueue.d.ts.map +1 -0
- package/dist/voiceQueue.js +33 -0
- package/dist/voiceQueue.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/docker-compose.yml +36 -0
- package/package.json +83 -4
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure logic for the OpenCode interactive-question UX (plan
|
|
4
|
+
* `2026-06-09-question-ux.md`, scopes S1 + S2). Kept side-effect-free so the
|
|
5
|
+
* tricky parts — rendering option descriptions and the sequential
|
|
6
|
+
* multi-question answer collection — are exhaustively unit-testable without a
|
|
7
|
+
* live Telegram round-trip (the answer path real topics depend on; a bug here
|
|
8
|
+
* silently breaks question answering and can't be force-triggered on demand).
|
|
9
|
+
*
|
|
10
|
+
* The bot (`bot.ts`) owns all I/O: it calls {@link buildQuestionBodyLines} to
|
|
11
|
+
* render a question's text body, and drives the answer state machine via
|
|
12
|
+
* {@link recordAnswerAndAdvance}, then performs the resulting Telegram send /
|
|
13
|
+
* agent reply.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.buildQuestionBodyLines = buildQuestionBodyLines;
|
|
17
|
+
exports.buildQuestionBodyLinesPlain = buildQuestionBodyLinesPlain;
|
|
18
|
+
exports.getQuestionReplyRoute = getQuestionReplyRoute;
|
|
19
|
+
exports.recordAnswerAndAdvance = recordAnswerAndAdvance;
|
|
20
|
+
exports.migratePendingQuestionState = migratePendingQuestionState;
|
|
21
|
+
/**
|
|
22
|
+
* @description Build the message-BODY text lines for ONE question: the header,
|
|
23
|
+
* the question text (only when it differs from the header), then the numbered
|
|
24
|
+
* option labels each followed by its description (S1 — descriptions were
|
|
25
|
+
* previously discarded even though OpenCode delivers them).
|
|
26
|
+
*
|
|
27
|
+
* The numbering is 1-based and lines up with the inline option buttons
|
|
28
|
+
* (`qa_<qIdx>_<optIdx>`), so a user can answer by tapping a button OR by typing
|
|
29
|
+
* the digit. Descriptions go ONLY in the body (indented under the label), never
|
|
30
|
+
* on the button — buttons stay label-only under Telegram's 40-char cap.
|
|
31
|
+
*
|
|
32
|
+
* `escape` is injected (Markdown or HTML escaper) so this stays pure and
|
|
33
|
+
* backend-agnostic; the bot passes its own `escapeMarkdown`.
|
|
34
|
+
*/
|
|
35
|
+
function buildQuestionBodyLines(question, escape) {
|
|
36
|
+
const header = question.header || question.question || 'Question';
|
|
37
|
+
const lines = [`❓ *${escape(header)}*`];
|
|
38
|
+
if (question.question && question.question !== header) {
|
|
39
|
+
lines.push(escape(question.question));
|
|
40
|
+
}
|
|
41
|
+
question.options.forEach((option, optIdx) => {
|
|
42
|
+
lines.push(`${optIdx + 1}. ${escape(option.label)}`);
|
|
43
|
+
if (option.description) {
|
|
44
|
+
// Indented under the label so it reads as that option's sub-line.
|
|
45
|
+
lines.push(` ${escape(option.description)}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return lines;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Build the same body as {@link buildQuestionBodyLines} but with NO
|
|
52
|
+
* escaping and no bold markers — the plain-text fallback used when Telegram
|
|
53
|
+
* rejects the Markdown render of a question.
|
|
54
|
+
*/
|
|
55
|
+
function buildQuestionBodyLinesPlain(question) {
|
|
56
|
+
const header = question.header || question.question || 'Question';
|
|
57
|
+
const lines = [`❓ ${header}`];
|
|
58
|
+
if (question.question && question.question !== header) {
|
|
59
|
+
lines.push(question.question);
|
|
60
|
+
}
|
|
61
|
+
question.options.forEach((option, optIdx) => {
|
|
62
|
+
lines.push(`${optIdx + 1}. ${option.label}`);
|
|
63
|
+
if (option.description)
|
|
64
|
+
lines.push(` ${option.description}`);
|
|
65
|
+
});
|
|
66
|
+
return lines;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @description Decide how to route a user's reply for a thread that has an
|
|
70
|
+
* OpenCode question on screen. Pure so the digit-in-range precedence is
|
|
71
|
+
* unit-testable without a live session.
|
|
72
|
+
*
|
|
73
|
+
* Only a bare 1-based digit in range of `currentQuestion.options` answers; any
|
|
74
|
+
* other text (out-of-range digit, prose, empty) cancels. A digit answer carries
|
|
75
|
+
* the chosen option label(s) so the caller never re-parses the digit (single
|
|
76
|
+
* source of truth for the digit→label mapping).
|
|
77
|
+
*/
|
|
78
|
+
function getQuestionReplyRoute(text, currentQuestion) {
|
|
79
|
+
const trimmed = text.trim();
|
|
80
|
+
if (currentQuestion && /^\d+$/.test(trimmed)) {
|
|
81
|
+
const optionIndex = parseInt(trimmed, 10) - 1;
|
|
82
|
+
const picked = currentQuestion.options[optionIndex];
|
|
83
|
+
if (picked)
|
|
84
|
+
return { kind: 'answer', labels: [picked.label] };
|
|
85
|
+
}
|
|
86
|
+
return { kind: 'cancel' };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @description Record the user's answer for the CURRENTLY shown question and
|
|
90
|
+
* decide what happens next (S2 — sequential multi-question + local answer
|
|
91
|
+
* collection). Pure: returns the mutated-copy state plus the action; the bot
|
|
92
|
+
* performs the side effect (post the next question OR reply to the agent).
|
|
93
|
+
*
|
|
94
|
+
* The bug this fixes: the old handler closed the whole request on the first
|
|
95
|
+
* answer, sending EMPTY answers for every other question. Here we only submit
|
|
96
|
+
* once NO slot is left `null`.
|
|
97
|
+
*
|
|
98
|
+
* `answerForCurrent` is the chosen option label(s) or the typed text, wrapped
|
|
99
|
+
* as a one-element array per OpenCode's `string[][]` matrix shape.
|
|
100
|
+
*/
|
|
101
|
+
function recordAnswerAndAdvance(state, answerForCurrent) {
|
|
102
|
+
const answers = state.answers.slice();
|
|
103
|
+
answers[state.currentIndex] = answerForCurrent;
|
|
104
|
+
const nextUnansweredIndex = answers.findIndex(slot => slot === null);
|
|
105
|
+
if (nextUnansweredIndex === -1) {
|
|
106
|
+
// All answered → build the matrix. A null slot can only appear here
|
|
107
|
+
// defensively (e.g. a migrated/corrupt state); coerce it to [''] so the
|
|
108
|
+
// reply shape stays valid string[][] and never carries `null`.
|
|
109
|
+
const matrix = answers.map(slot => slot ?? ['']);
|
|
110
|
+
return {
|
|
111
|
+
nextState: { ...state, answers },
|
|
112
|
+
action: { kind: 'submit', matrix },
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
nextState: { ...state, answers, currentIndex: nextUnansweredIndex },
|
|
117
|
+
action: { kind: 'showQuestion', index: nextUnansweredIndex },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @description Restore-compat guard for {@link PendingQuestionState} (S2). The
|
|
122
|
+
* persisted shape grew `answers` + `currentIndex`; an OLD `state.json` entry
|
|
123
|
+
* written before this change has only `{ data, messageId }`. Returning it raw
|
|
124
|
+
* would leave `answers`/`currentIndex` undefined and crash the answer handlers
|
|
125
|
+
* at boot. This normalises any restored entry to the new shape:
|
|
126
|
+
* - missing/mismatched-length `answers` → rebuilt as `[null…]` sized to the
|
|
127
|
+
* question count (the user must re-answer — the in-progress local answers
|
|
128
|
+
* were never sent to the agent anyway);
|
|
129
|
+
* - missing/out-of-range `currentIndex` → `0`.
|
|
130
|
+
*/
|
|
131
|
+
function migratePendingQuestionState(raw) {
|
|
132
|
+
const questionCount = raw.data.questions.length;
|
|
133
|
+
const hasValidAnswers = Array.isArray(raw.answers) && raw.answers.length === questionCount;
|
|
134
|
+
const answers = hasValidAnswers
|
|
135
|
+
? raw.answers
|
|
136
|
+
: new Array(questionCount).fill(null);
|
|
137
|
+
const hasValidIndex = typeof raw.currentIndex === 'number' &&
|
|
138
|
+
raw.currentIndex >= 0 &&
|
|
139
|
+
raw.currentIndex < questionCount;
|
|
140
|
+
const currentIndex = hasValidIndex ? raw.currentIndex : 0;
|
|
141
|
+
return { ...raw, answers, currentIndex };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=openCodeQuestionFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openCodeQuestionFlow.js","sourceRoot":"","sources":["../src/openCodeQuestionFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decide whether an incoming OpenCode SSE event belongs to a thread's bound
|
|
3
|
+
* session — directly, or because the event's session is a SUBAGENT child of
|
|
4
|
+
* it.
|
|
5
|
+
*
|
|
6
|
+
* OpenCode runs subagents (e.g. `@explore` / Task) in CHILD sessions whose
|
|
7
|
+
* `parentID` points at the originating session. Their events (deltas,
|
|
8
|
+
* `session.idle`, …) carry the CHILD sessionID, not the parent's. The bot
|
|
9
|
+
* binds the parent session to a topic, so a child event must be matched by
|
|
10
|
+
* walking up the lineage chain to the bound session — otherwise subagent
|
|
11
|
+
* output is dropped and the topic hangs on the ⏳ loader forever.
|
|
12
|
+
*
|
|
13
|
+
* The visited-set guards against cyclic lineage so a corrupt chain can never
|
|
14
|
+
* spin.
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkIsEventForSession(eventSessionId: string, ownedSessionId: string, childToParent: ReadonlyMap<string, string>): boolean;
|
|
17
|
+
/** Prefix shared by every OpenCode session id (`ses_…`). Used to reject
|
|
18
|
+
* non-session ids (e.g. a `msg_…` id) before recording a lineage link. */
|
|
19
|
+
export declare const openCodeSessionIdPrefix = "ses_";
|
|
20
|
+
/** A bound (active) thread session, reduced to the two fields routing needs. */
|
|
21
|
+
export interface BoundSessionRef {
|
|
22
|
+
/** Serialised `SessionKey` (`"<chatId>:<threadId>"`). */
|
|
23
|
+
keyStr: string;
|
|
24
|
+
/** Server-assigned OpenCode session id (`ses_…`) this thread owns. */
|
|
25
|
+
sessionId: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @description Resolve the SINGLE bound thread that owns an incoming SSE event,
|
|
29
|
+
* so an event is delivered to at most one topic (single-owner delivery).
|
|
30
|
+
*
|
|
31
|
+
* Even on the single global stream (every instance's events multiplexed on
|
|
32
|
+
* one `/global/event`), the same event reaches the dispatcher once and may match
|
|
33
|
+
* more than one bound thread: a false lineage link OR a duplicated session id
|
|
34
|
+
* (two threads
|
|
35
|
+
* accidentally bound to the same server session) would make the event match —
|
|
36
|
+
* and emit to — more than one topic (bug B20: the same answer appeared in two
|
|
37
|
+
* threads). The single-owner rule picks exactly one.
|
|
38
|
+
*
|
|
39
|
+
* Ownership priority:
|
|
40
|
+
* 1. A thread whose own `sessionId` directly equals `eventSessionId` is the
|
|
41
|
+
* canonical owner. Direct ownership always beats lineage descent — a
|
|
42
|
+
* session that IS bound to a thread can never be a routing *descendant* of
|
|
43
|
+
* another thread, so a real (parent) session is never stolen by a topic
|
|
44
|
+
* that merely has it in its lineage chain.
|
|
45
|
+
* 2. Otherwise the event is a subagent (child-session) event: the bound
|
|
46
|
+
* thread whose `sessionId` is the nearest ancestor up the lineage chain
|
|
47
|
+
* owns it.
|
|
48
|
+
*
|
|
49
|
+
* Determinism on collision: if two threads claim the same `sessionId` (the
|
|
50
|
+
* corruption case the prevention layer guards against), the first in iteration
|
|
51
|
+
* order wins — exactly one owner, never two.
|
|
52
|
+
*
|
|
53
|
+
* @returns the owning thread's `keyStr`, or `null` if no bound thread owns it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getEventOwnerKey(eventSessionId: string, boundSessions: readonly BoundSessionRef[], childToParent: ReadonlyMap<string, string>): string | null;
|
|
56
|
+
/**
|
|
57
|
+
* @description Decide whether a "drop" diagnostic for `(eventType,
|
|
58
|
+
* eventSessionId)` should be logged now, throttled to once per `throttleMs`.
|
|
59
|
+
* An orphaned session streams hundreds of deltas; logging each (× each bound
|
|
60
|
+
* thread) floods the diag log (B19). Mutates `lastLoggedAtByKey` to record the
|
|
61
|
+
* log time, evicting the oldest entry past `maxEntries` so the map stays
|
|
62
|
+
* bounded. Pure-ish (single mutation of the passed map) so the throttle is
|
|
63
|
+
* unit-testable without any I/O.
|
|
64
|
+
*
|
|
65
|
+
* @returns `true` if this drop is the first in its window (caller should log).
|
|
66
|
+
*/
|
|
67
|
+
export declare function checkShouldLogDrop(lastLoggedAtByKey: Map<string, number>, eventType: string, eventSessionId: string, now: number, throttleMs: number, maxEntries: number): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* @description Number of lineage hops from `eventSessionId` up to
|
|
70
|
+
* `ancestorSessionId`, or `null` if the ancestor is not on the chain. A
|
|
71
|
+
* visited-set guards against a corrupt cyclic chain. Returns `null` (not 0) for
|
|
72
|
+
* an equal id — a *direct* match is handled separately in `getEventOwnerKey` so
|
|
73
|
+
* it always wins over descent. Exported (besides the routing internals) for the
|
|
74
|
+
* adapter's busy tracking, which must verify a STRICT descendant before
|
|
75
|
+
* recording a busy child — a dir-fallback-routed foreign sibling must never
|
|
76
|
+
* count.
|
|
77
|
+
*/
|
|
78
|
+
export declare function getLineageDepthToAncestor(eventSessionId: string, ancestorSessionId: string, childToParent: ReadonlyMap<string, string>): number | null;
|
|
79
|
+
/**
|
|
80
|
+
* Record a child→parent session link learned from an event that exposes both
|
|
81
|
+
* ids, keeping the map bounded (oldest insertion evicted past `maxEntries`).
|
|
82
|
+
*
|
|
83
|
+
* Originally fed only by `session.updated`, but a child's lineage must be known
|
|
84
|
+
* BEFORE that beat or its earliest events drop "no owner" — so the adapter now
|
|
85
|
+
* records from ANY event whose properties expose `parentID` (S2 lineage
|
|
86
|
+
* durability), not just `session.updated`.
|
|
87
|
+
*
|
|
88
|
+
* Returns `true` only when a genuinely new or changed link was stored, so the
|
|
89
|
+
* caller can emit a diagnostic line for exactly the links worth knowing about.
|
|
90
|
+
* Ignores root sessions (no `parentID`) and any non-`ses_` id.
|
|
91
|
+
*/
|
|
92
|
+
export declare function updateSessionLineage(childToParent: Map<string, string>, childSessionId: string | undefined, parentSessionId: string | undefined, maxEntries: number): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* @description Mark every lineage hop walked to route `eventSessionId` to one of
|
|
95
|
+
* its bound ancestors as MOST-recently-used, so an actively-routing child is
|
|
96
|
+
* never the eviction victim.
|
|
97
|
+
*
|
|
98
|
+
* Why this exists: the lineage map is bounded by `maxEntries` and evicts the
|
|
99
|
+
* OLDEST INSERTION first (a Map preserves insertion order). A long-lived
|
|
100
|
+
* subagent that keeps streaming but never re-emits its `parentID` would, after
|
|
101
|
+
* `maxEntries` newer links land, be evicted mid-turn and its remaining events
|
|
102
|
+
* would drop "no owner" (the ~9 min gap proven live for a child).
|
|
103
|
+
* Re-inserting a USED link (delete + set — a plain `set` on an existing key does
|
|
104
|
+
* NOT reorder a JS Map) moves it to the tail, so the entries doing real routing
|
|
105
|
+
* work are evicted LAST. The cap is untouched; only the victim choice changes
|
|
106
|
+
* from "oldest inserted" to "oldest unused".
|
|
107
|
+
*
|
|
108
|
+
* Walks the same chain as {@link getLineageDepthToAncestor} (visited-set guards
|
|
109
|
+
* a corrupt cycle) and touches each link UP TO `ancestorSessionId` inclusive.
|
|
110
|
+
*/
|
|
111
|
+
export declare function touchLineageOnUse(childToParent: Map<string, string>, eventSessionId: string, ancestorSessionId: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* @description Resolve an event's owner by DIRECTORY when id/lineage resolution
|
|
114
|
+
* has already failed — the SSE-routing fallback. On the single `/global/event`
|
|
115
|
+
* stream every session event is tagged with its owning folder, so an event
|
|
116
|
+
* provably belongs to one of the threads bound to THAT folder, even when the
|
|
117
|
+
* per-session lineage map briefly disagrees (the child's `parentID` link was
|
|
118
|
+
* evicted or not yet recorded). Pure: the caller passes the directory's ACTIVE
|
|
119
|
+
* bound sessions, so it is unit-testable without a live server.
|
|
120
|
+
*
|
|
121
|
+
* Decision rule (never guess a topic — a wrong topic is worse than a logged
|
|
122
|
+
* drop):
|
|
123
|
+
* - exactly ONE active session in the directory → it owns the event;
|
|
124
|
+
* - more than one → disambiguate ONLY via in-memory lineage: route to the one
|
|
125
|
+
* active session that is a lineage ancestor of `eventSessionId`. If zero or
|
|
126
|
+
* several active sessions are ancestors → ambiguous → `null`;
|
|
127
|
+
* - zero active sessions → `null`.
|
|
128
|
+
*
|
|
129
|
+
* @returns the owning thread's `keyStr`, or `null` when it cannot be resolved
|
|
130
|
+
* unambiguously (the caller then loud-drops).
|
|
131
|
+
*/
|
|
132
|
+
export declare function resolveOwnerByDirectoryFallback(eventSessionId: string, directoryActiveSessions: readonly BoundSessionRef[], childToParent: ReadonlyMap<string, string>): string | null;
|
|
133
|
+
//# sourceMappingURL=openCodeSessionRouting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openCodeSessionRouting.d.ts","sourceRoot":"","sources":["../src/openCodeSessionRouting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,OAAO,CAiBT;AAED;0EAC0E;AAC1E,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,SAAS,eAAe,EAAE,EACzC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAWT;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAmBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,GACjB,OAAO,CAoBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAiBN;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,+BAA+B,CAC7C,cAAc,EAAE,MAAM,EACtB,uBAAuB,EAAE,SAAS,eAAe,EAAE,EACnD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAef"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openCodeSessionIdPrefix = void 0;
|
|
4
|
+
exports.checkIsEventForSession = checkIsEventForSession;
|
|
5
|
+
exports.getEventOwnerKey = getEventOwnerKey;
|
|
6
|
+
exports.checkShouldLogDrop = checkShouldLogDrop;
|
|
7
|
+
exports.getLineageDepthToAncestor = getLineageDepthToAncestor;
|
|
8
|
+
exports.updateSessionLineage = updateSessionLineage;
|
|
9
|
+
exports.touchLineageOnUse = touchLineageOnUse;
|
|
10
|
+
exports.resolveOwnerByDirectoryFallback = resolveOwnerByDirectoryFallback;
|
|
11
|
+
/**
|
|
12
|
+
* Decide whether an incoming OpenCode SSE event belongs to a thread's bound
|
|
13
|
+
* session — directly, or because the event's session is a SUBAGENT child of
|
|
14
|
+
* it.
|
|
15
|
+
*
|
|
16
|
+
* OpenCode runs subagents (e.g. `@explore` / Task) in CHILD sessions whose
|
|
17
|
+
* `parentID` points at the originating session. Their events (deltas,
|
|
18
|
+
* `session.idle`, …) carry the CHILD sessionID, not the parent's. The bot
|
|
19
|
+
* binds the parent session to a topic, so a child event must be matched by
|
|
20
|
+
* walking up the lineage chain to the bound session — otherwise subagent
|
|
21
|
+
* output is dropped and the topic hangs on the ⏳ loader forever.
|
|
22
|
+
*
|
|
23
|
+
* The visited-set guards against cyclic lineage so a corrupt chain can never
|
|
24
|
+
* spin.
|
|
25
|
+
*/
|
|
26
|
+
function checkIsEventForSession(eventSessionId, ownedSessionId, childToParent) {
|
|
27
|
+
if (eventSessionId === ownedSessionId)
|
|
28
|
+
return true;
|
|
29
|
+
const visitedSessionIds = new Set();
|
|
30
|
+
let currentSessionId = eventSessionId;
|
|
31
|
+
while (!visitedSessionIds.has(currentSessionId)) {
|
|
32
|
+
visitedSessionIds.add(currentSessionId);
|
|
33
|
+
const parentSessionId = childToParent.get(currentSessionId);
|
|
34
|
+
if (parentSessionId === undefined)
|
|
35
|
+
return false;
|
|
36
|
+
if (parentSessionId === ownedSessionId)
|
|
37
|
+
return true;
|
|
38
|
+
currentSessionId = parentSessionId;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/** Prefix shared by every OpenCode session id (`ses_…`). Used to reject
|
|
43
|
+
* non-session ids (e.g. a `msg_…` id) before recording a lineage link. */
|
|
44
|
+
exports.openCodeSessionIdPrefix = 'ses_';
|
|
45
|
+
/**
|
|
46
|
+
* @description Resolve the SINGLE bound thread that owns an incoming SSE event,
|
|
47
|
+
* so an event is delivered to at most one topic (single-owner delivery).
|
|
48
|
+
*
|
|
49
|
+
* Even on the single global stream (every instance's events multiplexed on
|
|
50
|
+
* one `/global/event`), the same event reaches the dispatcher once and may match
|
|
51
|
+
* more than one bound thread: a false lineage link OR a duplicated session id
|
|
52
|
+
* (two threads
|
|
53
|
+
* accidentally bound to the same server session) would make the event match —
|
|
54
|
+
* and emit to — more than one topic (bug B20: the same answer appeared in two
|
|
55
|
+
* threads). The single-owner rule picks exactly one.
|
|
56
|
+
*
|
|
57
|
+
* Ownership priority:
|
|
58
|
+
* 1. A thread whose own `sessionId` directly equals `eventSessionId` is the
|
|
59
|
+
* canonical owner. Direct ownership always beats lineage descent — a
|
|
60
|
+
* session that IS bound to a thread can never be a routing *descendant* of
|
|
61
|
+
* another thread, so a real (parent) session is never stolen by a topic
|
|
62
|
+
* that merely has it in its lineage chain.
|
|
63
|
+
* 2. Otherwise the event is a subagent (child-session) event: the bound
|
|
64
|
+
* thread whose `sessionId` is the nearest ancestor up the lineage chain
|
|
65
|
+
* owns it.
|
|
66
|
+
*
|
|
67
|
+
* Determinism on collision: if two threads claim the same `sessionId` (the
|
|
68
|
+
* corruption case the prevention layer guards against), the first in iteration
|
|
69
|
+
* order wins — exactly one owner, never two.
|
|
70
|
+
*
|
|
71
|
+
* @returns the owning thread's `keyStr`, or `null` if no bound thread owns it.
|
|
72
|
+
*/
|
|
73
|
+
function getEventOwnerKey(eventSessionId, boundSessions, childToParent) {
|
|
74
|
+
// 1. Direct id match is canonical — a bound session is never a mere descendant.
|
|
75
|
+
for (const bound of boundSessions) {
|
|
76
|
+
if (bound.sessionId === eventSessionId)
|
|
77
|
+
return bound.keyStr;
|
|
78
|
+
}
|
|
79
|
+
// 2. Subagent event: find the bound thread reachable up the lineage chain.
|
|
80
|
+
// Walk once, recording the depth at which each bound session is reached,
|
|
81
|
+
// and pick the nearest (smallest depth) so a child routes to its closest
|
|
82
|
+
// bound ancestor rather than a higher one.
|
|
83
|
+
let nearestOwnerKey = null;
|
|
84
|
+
let nearestDepth = Number.POSITIVE_INFINITY;
|
|
85
|
+
for (const bound of boundSessions) {
|
|
86
|
+
const depth = getLineageDepthToAncestor(eventSessionId, bound.sessionId, childToParent);
|
|
87
|
+
if (depth !== null && depth < nearestDepth) {
|
|
88
|
+
nearestDepth = depth;
|
|
89
|
+
nearestOwnerKey = bound.keyStr;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return nearestOwnerKey;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @description Decide whether a "drop" diagnostic for `(eventType,
|
|
96
|
+
* eventSessionId)` should be logged now, throttled to once per `throttleMs`.
|
|
97
|
+
* An orphaned session streams hundreds of deltas; logging each (× each bound
|
|
98
|
+
* thread) floods the diag log (B19). Mutates `lastLoggedAtByKey` to record the
|
|
99
|
+
* log time, evicting the oldest entry past `maxEntries` so the map stays
|
|
100
|
+
* bounded. Pure-ish (single mutation of the passed map) so the throttle is
|
|
101
|
+
* unit-testable without any I/O.
|
|
102
|
+
*
|
|
103
|
+
* @returns `true` if this drop is the first in its window (caller should log).
|
|
104
|
+
*/
|
|
105
|
+
function checkShouldLogDrop(lastLoggedAtByKey, eventType, eventSessionId, now, throttleMs, maxEntries) {
|
|
106
|
+
const throttleKey = `${eventType}|${eventSessionId}`;
|
|
107
|
+
const lastLoggedAt = lastLoggedAtByKey.get(throttleKey);
|
|
108
|
+
if (lastLoggedAt !== undefined && now - lastLoggedAt < throttleMs)
|
|
109
|
+
return false;
|
|
110
|
+
lastLoggedAtByKey.set(throttleKey, now);
|
|
111
|
+
if (lastLoggedAtByKey.size > maxEntries) {
|
|
112
|
+
const oldestKey = lastLoggedAtByKey.keys().next().value;
|
|
113
|
+
if (oldestKey !== undefined)
|
|
114
|
+
lastLoggedAtByKey.delete(oldestKey);
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @description Number of lineage hops from `eventSessionId` up to
|
|
120
|
+
* `ancestorSessionId`, or `null` if the ancestor is not on the chain. A
|
|
121
|
+
* visited-set guards against a corrupt cyclic chain. Returns `null` (not 0) for
|
|
122
|
+
* an equal id — a *direct* match is handled separately in `getEventOwnerKey` so
|
|
123
|
+
* it always wins over descent. Exported (besides the routing internals) for the
|
|
124
|
+
* adapter's busy tracking, which must verify a STRICT descendant before
|
|
125
|
+
* recording a busy child — a dir-fallback-routed foreign sibling must never
|
|
126
|
+
* count.
|
|
127
|
+
*/
|
|
128
|
+
function getLineageDepthToAncestor(eventSessionId, ancestorSessionId, childToParent) {
|
|
129
|
+
if (eventSessionId === ancestorSessionId)
|
|
130
|
+
return null;
|
|
131
|
+
const visitedSessionIds = new Set();
|
|
132
|
+
let currentSessionId = eventSessionId;
|
|
133
|
+
let depth = 0;
|
|
134
|
+
while (!visitedSessionIds.has(currentSessionId)) {
|
|
135
|
+
visitedSessionIds.add(currentSessionId);
|
|
136
|
+
const parentSessionId = childToParent.get(currentSessionId);
|
|
137
|
+
if (parentSessionId === undefined)
|
|
138
|
+
return null;
|
|
139
|
+
depth += 1;
|
|
140
|
+
if (parentSessionId === ancestorSessionId)
|
|
141
|
+
return depth;
|
|
142
|
+
currentSessionId = parentSessionId;
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Record a child→parent session link learned from an event that exposes both
|
|
148
|
+
* ids, keeping the map bounded (oldest insertion evicted past `maxEntries`).
|
|
149
|
+
*
|
|
150
|
+
* Originally fed only by `session.updated`, but a child's lineage must be known
|
|
151
|
+
* BEFORE that beat or its earliest events drop "no owner" — so the adapter now
|
|
152
|
+
* records from ANY event whose properties expose `parentID` (S2 lineage
|
|
153
|
+
* durability), not just `session.updated`.
|
|
154
|
+
*
|
|
155
|
+
* Returns `true` only when a genuinely new or changed link was stored, so the
|
|
156
|
+
* caller can emit a diagnostic line for exactly the links worth knowing about.
|
|
157
|
+
* Ignores root sessions (no `parentID`) and any non-`ses_` id.
|
|
158
|
+
*/
|
|
159
|
+
function updateSessionLineage(childToParent, childSessionId, parentSessionId, maxEntries) {
|
|
160
|
+
if (typeof childSessionId !== 'string' ||
|
|
161
|
+
typeof parentSessionId !== 'string' ||
|
|
162
|
+
!childSessionId.startsWith(exports.openCodeSessionIdPrefix) ||
|
|
163
|
+
!parentSessionId.startsWith(exports.openCodeSessionIdPrefix)) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
// A session can never be its own parent — a self-link would make the lineage
|
|
167
|
+
// walk treat the session as its own ancestor and corrupt single-owner routing.
|
|
168
|
+
if (childSessionId === parentSessionId)
|
|
169
|
+
return false;
|
|
170
|
+
if (childToParent.get(childSessionId) === parentSessionId)
|
|
171
|
+
return false;
|
|
172
|
+
childToParent.set(childSessionId, parentSessionId);
|
|
173
|
+
if (childToParent.size > maxEntries) {
|
|
174
|
+
const oldestSessionId = childToParent.keys().next().value;
|
|
175
|
+
if (oldestSessionId !== undefined)
|
|
176
|
+
childToParent.delete(oldestSessionId);
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* @description Mark every lineage hop walked to route `eventSessionId` to one of
|
|
182
|
+
* its bound ancestors as MOST-recently-used, so an actively-routing child is
|
|
183
|
+
* never the eviction victim.
|
|
184
|
+
*
|
|
185
|
+
* Why this exists: the lineage map is bounded by `maxEntries` and evicts the
|
|
186
|
+
* OLDEST INSERTION first (a Map preserves insertion order). A long-lived
|
|
187
|
+
* subagent that keeps streaming but never re-emits its `parentID` would, after
|
|
188
|
+
* `maxEntries` newer links land, be evicted mid-turn and its remaining events
|
|
189
|
+
* would drop "no owner" (the ~9 min gap proven live for a child).
|
|
190
|
+
* Re-inserting a USED link (delete + set — a plain `set` on an existing key does
|
|
191
|
+
* NOT reorder a JS Map) moves it to the tail, so the entries doing real routing
|
|
192
|
+
* work are evicted LAST. The cap is untouched; only the victim choice changes
|
|
193
|
+
* from "oldest inserted" to "oldest unused".
|
|
194
|
+
*
|
|
195
|
+
* Walks the same chain as {@link getLineageDepthToAncestor} (visited-set guards
|
|
196
|
+
* a corrupt cycle) and touches each link UP TO `ancestorSessionId` inclusive.
|
|
197
|
+
*/
|
|
198
|
+
function touchLineageOnUse(childToParent, eventSessionId, ancestorSessionId) {
|
|
199
|
+
const visitedSessionIds = new Set();
|
|
200
|
+
let currentSessionId = eventSessionId;
|
|
201
|
+
while (!visitedSessionIds.has(currentSessionId)) {
|
|
202
|
+
visitedSessionIds.add(currentSessionId);
|
|
203
|
+
const parentSessionId = childToParent.get(currentSessionId);
|
|
204
|
+
if (parentSessionId === undefined)
|
|
205
|
+
return;
|
|
206
|
+
// Re-insert to move this link to the tail (most-recently-used).
|
|
207
|
+
childToParent.delete(currentSessionId);
|
|
208
|
+
childToParent.set(currentSessionId, parentSessionId);
|
|
209
|
+
if (parentSessionId === ancestorSessionId)
|
|
210
|
+
return;
|
|
211
|
+
currentSessionId = parentSessionId;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* @description Resolve an event's owner by DIRECTORY when id/lineage resolution
|
|
216
|
+
* has already failed — the SSE-routing fallback. On the single `/global/event`
|
|
217
|
+
* stream every session event is tagged with its owning folder, so an event
|
|
218
|
+
* provably belongs to one of the threads bound to THAT folder, even when the
|
|
219
|
+
* per-session lineage map briefly disagrees (the child's `parentID` link was
|
|
220
|
+
* evicted or not yet recorded). Pure: the caller passes the directory's ACTIVE
|
|
221
|
+
* bound sessions, so it is unit-testable without a live server.
|
|
222
|
+
*
|
|
223
|
+
* Decision rule (never guess a topic — a wrong topic is worse than a logged
|
|
224
|
+
* drop):
|
|
225
|
+
* - exactly ONE active session in the directory → it owns the event;
|
|
226
|
+
* - more than one → disambiguate ONLY via in-memory lineage: route to the one
|
|
227
|
+
* active session that is a lineage ancestor of `eventSessionId`. If zero or
|
|
228
|
+
* several active sessions are ancestors → ambiguous → `null`;
|
|
229
|
+
* - zero active sessions → `null`.
|
|
230
|
+
*
|
|
231
|
+
* @returns the owning thread's `keyStr`, or `null` when it cannot be resolved
|
|
232
|
+
* unambiguously (the caller then loud-drops).
|
|
233
|
+
*/
|
|
234
|
+
function resolveOwnerByDirectoryFallback(eventSessionId, directoryActiveSessions, childToParent) {
|
|
235
|
+
if (directoryActiveSessions.length === 0)
|
|
236
|
+
return null;
|
|
237
|
+
if (directoryActiveSessions.length === 1)
|
|
238
|
+
return directoryActiveSessions[0].keyStr;
|
|
239
|
+
// >1 active in the same folder (two topics on one project): only route when
|
|
240
|
+
// exactly one of them is a genuine lineage ancestor of the event's session.
|
|
241
|
+
let ancestorOwnerKey = null;
|
|
242
|
+
for (const bound of directoryActiveSessions) {
|
|
243
|
+
if (bound.sessionId === eventSessionId)
|
|
244
|
+
return bound.keyStr;
|
|
245
|
+
if (getLineageDepthToAncestor(eventSessionId, bound.sessionId, childToParent) !== null) {
|
|
246
|
+
if (ancestorOwnerKey !== null)
|
|
247
|
+
return null; // two ancestors → ambiguous
|
|
248
|
+
ancestorOwnerKey = bound.keyStr;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return ancestorOwnerKey;
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=openCodeSessionRouting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openCodeSessionRouting.js","sourceRoot":"","sources":["../src/openCodeSessionRouting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for naming bot-created OpenCode sessions.
|
|
3
|
+
*
|
|
4
|
+
* Primary mechanism (R1, verified live 2026-06-04): a session created WITHOUT
|
|
5
|
+
* an explicit `title` lets opencode auto-name it from the first prompt's LLM
|
|
6
|
+
* turn — nicer than any raw snippet, and it ignores the glued thread-context
|
|
7
|
+
* preamble. A session created WITH a title is treated as user-set and never
|
|
8
|
+
* auto-renamed, so the bot only passes a title for the explicit `/opencode
|
|
9
|
+
* <args>` case.
|
|
10
|
+
*
|
|
11
|
+
* Fallback mechanism: if auto-title never lands (the title stays the bare
|
|
12
|
+
* `New session - <ts>` placeholder — e.g. the server failed to generate one),
|
|
13
|
+
* the adapter renames the session itself via `PATCH /session/:id {title}` on
|
|
14
|
+
* the first MEANINGFUL prompt, using {@link buildSessionTitleSnippet}. The
|
|
15
|
+
* snippet always derives from the RAW user text (the caller strips the
|
|
16
|
+
* preamble first), so it can never carry the service header.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Minimum length (chars, after trim) for a prompt to count as "meaningful"
|
|
20
|
+
* enough to name a session after. Short acknowledgements ("да", "go", "ok")
|
|
21
|
+
* sit below it and leave the name to be decided by a later, substantial
|
|
22
|
+
* prompt. 10 is the locked value from the plan's IDEAL.
|
|
23
|
+
*/
|
|
24
|
+
export declare const meaningfulPromptMinLength = 10;
|
|
25
|
+
/** Max length (chars) of a fallback snippet title; longer text is truncated. */
|
|
26
|
+
export declare const sessionTitleSnippetMaxLength = 60;
|
|
27
|
+
/**
|
|
28
|
+
* @description Whether a forwarded prompt is substantial enough to name a
|
|
29
|
+
* session after. A slash command (`/clear`, `/model …`) is a control token,
|
|
30
|
+
* never a name source; anything shorter than {@link meaningfulPromptMinLength}
|
|
31
|
+
* is a throwaway acknowledgement. The argument MUST be the RAW user text —
|
|
32
|
+
* strip the thread-context preamble before calling (see
|
|
33
|
+
* {@link buildSessionTitleSnippet} for the same requirement).
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkIsMeaningfulPrompt(rawText: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* @description Build a fallback session-title snippet from the first
|
|
38
|
+
* meaningful prompt. Collapses all internal whitespace (incl. newlines) to
|
|
39
|
+
* single spaces, trims, and truncates to {@link sessionTitleSnippetMaxLength}
|
|
40
|
+
* with an ellipsis. The thread-context preamble is stripped first so the title
|
|
41
|
+
* reflects what the USER said, never the bot's glue.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildSessionTitleSnippet(rawText: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* @description Whether `title` is one of opencode's "no real name yet"
|
|
46
|
+
* placeholders, so the fallback rename is allowed to overwrite it. A real
|
|
47
|
+
* auto-generated or user-set title returns `false` and is left untouched.
|
|
48
|
+
*/
|
|
49
|
+
export declare function checkIsPlaceholderTitle(title: string | undefined): boolean;
|
|
50
|
+
//# sourceMappingURL=openCodeSessionTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openCodeSessionTitle.d.ts","sourceRoot":"","sources":["../src/openCodeSessionTitle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAe/C;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIhE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG1E"}
|