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,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Platform-agnostic conversation addressing for the core.
|
|
3
|
+
*
|
|
4
|
+
* The core routes every agent session, every output frame and every piece of
|
|
5
|
+
* persisted state by a {@link SessionKey}. It deliberately knows NOTHING about
|
|
6
|
+
* how that key is spelled on the wire: serialization belongs to the connector
|
|
7
|
+
* that owns the surface (see {@link SessionKeyCodec}).
|
|
8
|
+
*
|
|
9
|
+
* That split is load-bearing rather than cosmetic. The serialized key leaks onto
|
|
10
|
+
* disk in four places — `state.json` field names, tmux session names, the
|
|
11
|
+
* per-thread JSON maps under `DATA_DIR`, and the file-intake directories — so a
|
|
12
|
+
* unified cross-platform format would rename all of them and orphan every live
|
|
13
|
+
* agent session. Keeping the format inside the connector lets Telegram keep its
|
|
14
|
+
* historical `"<chatId>:<threadId>"` spelling byte-for-byte while a future
|
|
15
|
+
* tracker or Teams connector picks a prefixed form of its own.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @name PlatformId
|
|
19
|
+
* @description The surfaces the core can address. `test` is the in-repo test
|
|
20
|
+
* double used to exercise degraded capability paths; real surfaces are added
|
|
21
|
+
* here when their connector lands.
|
|
22
|
+
*/
|
|
23
|
+
export type PlatformId = 'telegram' | 'jira' | 'test';
|
|
24
|
+
/**
|
|
25
|
+
* @description The core's routing key: a conversation on one platform.
|
|
26
|
+
*
|
|
27
|
+
* - `space` — the container: Telegram chat id, tracker project, Teams channel.
|
|
28
|
+
* - `thread` — the conversation inside it: Telegram `message_thread_id`,
|
|
29
|
+
* tracker issue key, Teams thread id.
|
|
30
|
+
*
|
|
31
|
+
* Both are strings because only Telegram's ids happen to be numeric; the core
|
|
32
|
+
* never does arithmetic on them, it only compares and serializes. A connector
|
|
33
|
+
* that needs the native type converts at its own boundary.
|
|
34
|
+
*/
|
|
35
|
+
export interface SessionKey {
|
|
36
|
+
platform: PlatformId;
|
|
37
|
+
space: string;
|
|
38
|
+
thread: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @description The connector's ownership of its own key spelling.
|
|
42
|
+
*
|
|
43
|
+
* `matches` is what makes {@link keyFromString} work without a platform
|
|
44
|
+
* argument: the 20-odd decode call sites read strings back out of `state.json`,
|
|
45
|
+
* `DATA_DIR` maps and the scheduler's MCP surface, where no platform is in hand.
|
|
46
|
+
* The registry asks each codec whether a string is its own and the first owner
|
|
47
|
+
* decodes, so recognition stays with the connector that defined the format.
|
|
48
|
+
*
|
|
49
|
+
* Formats MUST be mutually unambiguous. Telegram's is all-numeric
|
|
50
|
+
* (`-100123:42`); every later platform uses a `<platform>:` prefix, which the
|
|
51
|
+
* numeric shape can never match.
|
|
52
|
+
*/
|
|
53
|
+
export interface SessionKeyCodec {
|
|
54
|
+
readonly platform: PlatformId;
|
|
55
|
+
encode(key: SessionKey): string;
|
|
56
|
+
decode(serialized: string): SessionKey;
|
|
57
|
+
matches(serialized: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Inverse of {@link keyToSlug} for this platform's keys: the key a slug was
|
|
60
|
+
* built from with `separator`, or `null` when the slug is not one of this
|
|
61
|
+
* platform's. Only the codec knows where its halves end once every `:` became
|
|
62
|
+
* the separator. Optional — a codec without it is never read back from a
|
|
63
|
+
* tmux session or directory name.
|
|
64
|
+
*
|
|
65
|
+
* Slug shapes MUST be mutually unambiguous too, and that is a separate
|
|
66
|
+
* guarantee: `keyToSlug` is lossy, so formats that are disjoint as strings
|
|
67
|
+
* can still collide as slugs. {@link tryKeyFromSlug} takes the first codec
|
|
68
|
+
* that claims a name, and a misread name is a session adopted or reaped for
|
|
69
|
+
* the wrong conversation.
|
|
70
|
+
*/
|
|
71
|
+
decodeSlug?(slug: string, separator: string): SessionKey | null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description Register (or replace) a platform's codec. Idempotent per
|
|
75
|
+
* platform so a module that self-registers on import is safe to import twice,
|
|
76
|
+
* and so a test can swap a codec without leaving a duplicate behind.
|
|
77
|
+
*/
|
|
78
|
+
export declare function registerSessionKeyCodec(codec: SessionKeyCodec): void;
|
|
79
|
+
/** Drop a platform's codec — only the S5 test double needs this. */
|
|
80
|
+
export declare function unregisterSessionKeyCodec(platform: PlatformId): void;
|
|
81
|
+
/** The codec owning `platform`, or `null` when none is registered. */
|
|
82
|
+
export declare function getSessionKeyCodec(platform: PlatformId): SessionKeyCodec | null;
|
|
83
|
+
/**
|
|
84
|
+
* @description Canonical serialization of a {@link SessionKey} — the `Map` key
|
|
85
|
+
* and `state.json` field name form. Dispatches to the owning connector's codec.
|
|
86
|
+
*
|
|
87
|
+
* Round-trips losslessly with {@link keyFromString}.
|
|
88
|
+
*/
|
|
89
|
+
export declare function keyToString(key: SessionKey): string;
|
|
90
|
+
/**
|
|
91
|
+
* @description Inverse of {@link keyToString}. Throws on input no registered
|
|
92
|
+
* codec claims — callers should only feed strings that came from
|
|
93
|
+
* {@link keyToString} or from a trusted state file. Use
|
|
94
|
+
* {@link tryKeyFromString} where a hand-edited state file must be survivable.
|
|
95
|
+
*/
|
|
96
|
+
export declare function keyFromString(serialized: string): SessionKey;
|
|
97
|
+
/**
|
|
98
|
+
* @description Non-throwing {@link keyFromString} — returns `null` so callers
|
|
99
|
+
* iterating a persisted map can skip a rogue field instead of aborting the
|
|
100
|
+
* whole load. Deliberately still throws when NO codec is registered at all
|
|
101
|
+
* (see {@link assertRegistryArmed}): skipping every field silently is the one
|
|
102
|
+
* outcome worse than crashing.
|
|
103
|
+
*/
|
|
104
|
+
export declare function tryKeyFromString(serialized: string): SessionKey | null;
|
|
105
|
+
/**
|
|
106
|
+
* @description The serialized key rewritten for a context that cannot carry
|
|
107
|
+
* `:` — a tmux session name (`-`) or a directory name (`_`).
|
|
108
|
+
*
|
|
109
|
+
* Single source of truth for the three on-disk name shapes that embed a key:
|
|
110
|
+
* tmux sessions, the `DATA_DIR/files/` intake dirs and the
|
|
111
|
+
* `DATA_DIR/jsonstream/` session dirs. All three previously open-coded the
|
|
112
|
+
* same substitution.
|
|
113
|
+
*
|
|
114
|
+
* The inverse is {@link tryKeyFromSlug}: each codec reads its own slugs back,
|
|
115
|
+
* since a format with more than one `:` (Jira's) cannot be split on a fixed
|
|
116
|
+
* position once they all became the separator.
|
|
117
|
+
*/
|
|
118
|
+
export declare function keyToSlug(key: SessionKey, separator: string): string;
|
|
119
|
+
/**
|
|
120
|
+
* @description Inverse of {@link keyToSlug}: the first registered codec that
|
|
121
|
+
* recognises the slug decodes it, so a tmux session or directory name of any
|
|
122
|
+
* platform parses back to its key. `null` for a slug no codec claims (an
|
|
123
|
+
* unrelated tmux session, a foreign directory). Throws on an empty registry,
|
|
124
|
+
* like {@link tryKeyFromString}.
|
|
125
|
+
*/
|
|
126
|
+
export declare function tryKeyFromSlug(slug: string, separator: string): SessionKey | null;
|
|
127
|
+
/**
|
|
128
|
+
* @description Structural equality for two keys.
|
|
129
|
+
*
|
|
130
|
+
* `platform` is part of the comparison on purpose: without it a Telegram
|
|
131
|
+
* conversation `{space:'123', thread:'5'}` would equal a tracker one with the
|
|
132
|
+
* same ids, and two unrelated conversations would silently collide in any Map
|
|
133
|
+
* or lookup built on this predicate.
|
|
134
|
+
*/
|
|
135
|
+
export declare function keysEqual(a: SessionKey, b: SessionKey): boolean;
|
|
136
|
+
//# sourceMappingURL=sessionKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKey.d.ts","sourceRoot":"","sources":["../src/sessionKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IACvC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CACjE;AAKD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAOpE;AAED,oEAAoE;AACpE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAGpE;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAInD;AAkBD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAK5D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAStE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOjF;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAE/D"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Platform-agnostic conversation addressing for the core.
|
|
4
|
+
*
|
|
5
|
+
* The core routes every agent session, every output frame and every piece of
|
|
6
|
+
* persisted state by a {@link SessionKey}. It deliberately knows NOTHING about
|
|
7
|
+
* how that key is spelled on the wire: serialization belongs to the connector
|
|
8
|
+
* that owns the surface (see {@link SessionKeyCodec}).
|
|
9
|
+
*
|
|
10
|
+
* That split is load-bearing rather than cosmetic. The serialized key leaks onto
|
|
11
|
+
* disk in four places — `state.json` field names, tmux session names, the
|
|
12
|
+
* per-thread JSON maps under `DATA_DIR`, and the file-intake directories — so a
|
|
13
|
+
* unified cross-platform format would rename all of them and orphan every live
|
|
14
|
+
* agent session. Keeping the format inside the connector lets Telegram keep its
|
|
15
|
+
* historical `"<chatId>:<threadId>"` spelling byte-for-byte while a future
|
|
16
|
+
* tracker or Teams connector picks a prefixed form of its own.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.registerSessionKeyCodec = registerSessionKeyCodec;
|
|
20
|
+
exports.unregisterSessionKeyCodec = unregisterSessionKeyCodec;
|
|
21
|
+
exports.getSessionKeyCodec = getSessionKeyCodec;
|
|
22
|
+
exports.keyToString = keyToString;
|
|
23
|
+
exports.keyFromString = keyFromString;
|
|
24
|
+
exports.tryKeyFromString = tryKeyFromString;
|
|
25
|
+
exports.keyToSlug = keyToSlug;
|
|
26
|
+
exports.tryKeyFromSlug = tryKeyFromSlug;
|
|
27
|
+
exports.keysEqual = keysEqual;
|
|
28
|
+
/** Registration order matters: {@link keyFromString} asks `matches` in it. */
|
|
29
|
+
const codecs = [];
|
|
30
|
+
/**
|
|
31
|
+
* @description Register (or replace) a platform's codec. Idempotent per
|
|
32
|
+
* platform so a module that self-registers on import is safe to import twice,
|
|
33
|
+
* and so a test can swap a codec without leaving a duplicate behind.
|
|
34
|
+
*/
|
|
35
|
+
function registerSessionKeyCodec(codec) {
|
|
36
|
+
const existing = codecs.findIndex((registered) => registered.platform === codec.platform);
|
|
37
|
+
if (existing >= 0) {
|
|
38
|
+
codecs[existing] = codec;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
codecs.push(codec);
|
|
42
|
+
}
|
|
43
|
+
/** Drop a platform's codec — only the S5 test double needs this. */
|
|
44
|
+
function unregisterSessionKeyCodec(platform) {
|
|
45
|
+
const existing = codecs.findIndex((registered) => registered.platform === platform);
|
|
46
|
+
if (existing >= 0)
|
|
47
|
+
codecs.splice(existing, 1);
|
|
48
|
+
}
|
|
49
|
+
/** The codec owning `platform`, or `null` when none is registered. */
|
|
50
|
+
function getSessionKeyCodec(platform) {
|
|
51
|
+
return codecs.find((registered) => registered.platform === platform) ?? null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Canonical serialization of a {@link SessionKey} — the `Map` key
|
|
55
|
+
* and `state.json` field name form. Dispatches to the owning connector's codec.
|
|
56
|
+
*
|
|
57
|
+
* Round-trips losslessly with {@link keyFromString}.
|
|
58
|
+
*/
|
|
59
|
+
function keyToString(key) {
|
|
60
|
+
const codec = getSessionKeyCodec(key.platform);
|
|
61
|
+
if (!codec)
|
|
62
|
+
throw new Error(`No SessionKeyCodec registered for platform "${key.platform}"`);
|
|
63
|
+
return codec.encode(key);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @description Guard against the one failure mode the registry could otherwise
|
|
67
|
+
* hide: an entry point that reaches a decode site without ever importing a
|
|
68
|
+
* connector. Every codec-less decode would then look like ordinary malformed
|
|
69
|
+
* data, so `state.json` would load as zero bindings and every live agent
|
|
70
|
+
* session would appear orphaned — silently. An empty registry is a wiring bug,
|
|
71
|
+
* never bad data, so it throws from BOTH the strict and the lenient decoder.
|
|
72
|
+
*/
|
|
73
|
+
function assertRegistryArmed() {
|
|
74
|
+
if (codecs.length === 0) {
|
|
75
|
+
throw new Error('No SessionKeyCodec registered — the platform connector module was never imported');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @description Inverse of {@link keyToString}. Throws on input no registered
|
|
80
|
+
* codec claims — callers should only feed strings that came from
|
|
81
|
+
* {@link keyToString} or from a trusted state file. Use
|
|
82
|
+
* {@link tryKeyFromString} where a hand-edited state file must be survivable.
|
|
83
|
+
*/
|
|
84
|
+
function keyFromString(serialized) {
|
|
85
|
+
assertRegistryArmed();
|
|
86
|
+
const codec = codecs.find((registered) => registered.matches(serialized));
|
|
87
|
+
if (!codec)
|
|
88
|
+
throw new Error(`Invalid SessionKey string: "${serialized}"`);
|
|
89
|
+
return codec.decode(serialized);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @description Non-throwing {@link keyFromString} — returns `null` so callers
|
|
93
|
+
* iterating a persisted map can skip a rogue field instead of aborting the
|
|
94
|
+
* whole load. Deliberately still throws when NO codec is registered at all
|
|
95
|
+
* (see {@link assertRegistryArmed}): skipping every field silently is the one
|
|
96
|
+
* outcome worse than crashing.
|
|
97
|
+
*/
|
|
98
|
+
function tryKeyFromString(serialized) {
|
|
99
|
+
assertRegistryArmed();
|
|
100
|
+
const codec = codecs.find((registered) => registered.matches(serialized));
|
|
101
|
+
if (!codec)
|
|
102
|
+
return null;
|
|
103
|
+
try {
|
|
104
|
+
return codec.decode(serialized);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @description The serialized key rewritten for a context that cannot carry
|
|
112
|
+
* `:` — a tmux session name (`-`) or a directory name (`_`).
|
|
113
|
+
*
|
|
114
|
+
* Single source of truth for the three on-disk name shapes that embed a key:
|
|
115
|
+
* tmux sessions, the `DATA_DIR/files/` intake dirs and the
|
|
116
|
+
* `DATA_DIR/jsonstream/` session dirs. All three previously open-coded the
|
|
117
|
+
* same substitution.
|
|
118
|
+
*
|
|
119
|
+
* The inverse is {@link tryKeyFromSlug}: each codec reads its own slugs back,
|
|
120
|
+
* since a format with more than one `:` (Jira's) cannot be split on a fixed
|
|
121
|
+
* position once they all became the separator.
|
|
122
|
+
*/
|
|
123
|
+
function keyToSlug(key, separator) {
|
|
124
|
+
return keyToString(key).replaceAll(':', separator);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @description Inverse of {@link keyToSlug}: the first registered codec that
|
|
128
|
+
* recognises the slug decodes it, so a tmux session or directory name of any
|
|
129
|
+
* platform parses back to its key. `null` for a slug no codec claims (an
|
|
130
|
+
* unrelated tmux session, a foreign directory). Throws on an empty registry,
|
|
131
|
+
* like {@link tryKeyFromString}.
|
|
132
|
+
*/
|
|
133
|
+
function tryKeyFromSlug(slug, separator) {
|
|
134
|
+
assertRegistryArmed();
|
|
135
|
+
for (const codec of codecs) {
|
|
136
|
+
const key = codec.decodeSlug?.(slug, separator) ?? null;
|
|
137
|
+
if (key)
|
|
138
|
+
return key;
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* @description Structural equality for two keys.
|
|
144
|
+
*
|
|
145
|
+
* `platform` is part of the comparison on purpose: without it a Telegram
|
|
146
|
+
* conversation `{space:'123', thread:'5'}` would equal a tracker one with the
|
|
147
|
+
* same ids, and two unrelated conversations would silently collide in any Map
|
|
148
|
+
* or lookup built on this predicate.
|
|
149
|
+
*/
|
|
150
|
+
function keysEqual(a, b) {
|
|
151
|
+
return a.platform === b.platform && a.space === b.space && a.thread === b.thread;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=sessionKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKey.js","sourceRoot":"","sources":["../src/sessionKey.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAqEH,0DAOC;AAGD,8DAGC;AAGD,gDAEC;AAQD,kCAIC;AAwBD,sCAKC;AASD,4CASC;AAeD,8BAEC;AASD,wCAOC;AAUD,8BAEC;AAlID,8EAA8E;AAC9E,MAAM,MAAM,GAAsB,EAAE,CAAC;AAErC;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,KAAsB;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1F,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,oEAAoE;AACpE,SAAgB,yBAAyB,CAAC,QAAoB;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACpF,IAAI,QAAQ,IAAI,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,sEAAsE;AACtE,SAAgB,kBAAkB,CAAC,QAAoB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAe;IACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB;IAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,UAAkB;IAC9C,mBAAmB,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,GAAG,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,mBAAmB,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,SAAS,CAAC,GAAe,EAAE,SAAiB;IAC1D,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,SAAiB;IAC5D,mBAAmB,EAAE,CAAC;IACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;QACxD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,CAAa,EAAE,CAAa;IACpD,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision logic for the `/sessions` number-reply picker.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `bot.ts` so it can be unit-tested without booting Telegraf
|
|
5
|
+
* (mirrors `agentTrigger.ts` / `threadRouting.ts`). Given the raw reply text
|
|
6
|
+
* and how many sessions were shown, it decides what the bot should do — it
|
|
7
|
+
* does NOT touch any state or perform the resume itself.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @name SessionPickAction
|
|
11
|
+
* @description Discriminated outcome of interpreting a reply while a thread
|
|
12
|
+
* is armed in session-pick mode.
|
|
13
|
+
*
|
|
14
|
+
* - `cancel` — user typed `0` (or `/cancel` is handled separately); exit pick-mode.
|
|
15
|
+
* - `select` — a valid 1-based number; `index` is the 0-based list index to resume.
|
|
16
|
+
* - `invalid` — a number outside `1..listLength`; stay armed, show an error.
|
|
17
|
+
* - `passthrough`— non-numeric text; exit pick-mode and let normal handling run.
|
|
18
|
+
*/
|
|
19
|
+
export type SessionPickAction = {
|
|
20
|
+
kind: 'cancel';
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'select';
|
|
23
|
+
index: number;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'invalid';
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'passthrough';
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* @description Decide how to treat `text` for a thread armed in session-pick
|
|
31
|
+
* mode, given that `listLength` sessions were shown.
|
|
32
|
+
*
|
|
33
|
+
* Rules:
|
|
34
|
+
* - "0" → cancel
|
|
35
|
+
* - "n" (1..len) → select index n-1
|
|
36
|
+
* - "n" (out of range)→ invalid (caller keeps the thread armed)
|
|
37
|
+
* - anything else → passthrough (caller disarms, normal flow continues)
|
|
38
|
+
*
|
|
39
|
+
* Surrounding whitespace on a bare number is tolerated (" 3 " → select 2).
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkSessionPickAction(text: string, listLength: number): SessionPickAction;
|
|
42
|
+
//# sourceMappingURL=sessionPick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionPick.d.ts","sourceRoot":"","sources":["../src/sessionPick.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAQ5B;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAQ1F"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decision logic for the `/sessions` number-reply picker.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `bot.ts` so it can be unit-tested without booting Telegraf
|
|
6
|
+
* (mirrors `agentTrigger.ts` / `threadRouting.ts`). Given the raw reply text
|
|
7
|
+
* and how many sessions were shown, it decides what the bot should do — it
|
|
8
|
+
* does NOT touch any state or perform the resume itself.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.checkSessionPickAction = checkSessionPickAction;
|
|
12
|
+
/** Matches a reply that is ONLY an optional-whitespace-wrapped run of digits. */
|
|
13
|
+
const bareNumberPattern = /^\s*(\d+)\s*$/;
|
|
14
|
+
/** The sentinel number a user sends to cancel the picker without resuming. */
|
|
15
|
+
const cancelNumber = 0;
|
|
16
|
+
/**
|
|
17
|
+
* @description Decide how to treat `text` for a thread armed in session-pick
|
|
18
|
+
* mode, given that `listLength` sessions were shown.
|
|
19
|
+
*
|
|
20
|
+
* Rules:
|
|
21
|
+
* - "0" → cancel
|
|
22
|
+
* - "n" (1..len) → select index n-1
|
|
23
|
+
* - "n" (out of range)→ invalid (caller keeps the thread armed)
|
|
24
|
+
* - anything else → passthrough (caller disarms, normal flow continues)
|
|
25
|
+
*
|
|
26
|
+
* Surrounding whitespace on a bare number is tolerated (" 3 " → select 2).
|
|
27
|
+
*/
|
|
28
|
+
function checkSessionPickAction(text, listLength) {
|
|
29
|
+
const match = bareNumberPattern.exec(text);
|
|
30
|
+
if (!match)
|
|
31
|
+
return { kind: 'passthrough' };
|
|
32
|
+
const picked = Number(match[1]);
|
|
33
|
+
if (picked === cancelNumber)
|
|
34
|
+
return { kind: 'cancel' };
|
|
35
|
+
if (picked >= 1 && picked <= listLength)
|
|
36
|
+
return { kind: 'select', index: picked - 1 };
|
|
37
|
+
return { kind: 'invalid' };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=sessionPick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionPick.js","sourceRoot":"","sources":["../src/sessionPick.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAoCH,wDAQC;AA1BD,iFAAiF;AACjF,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,8EAA8E;AAC9E,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;;;;;;;;;GAWG;AACH,SAAgB,sBAAsB,CAAC,IAAY,EAAE,UAAkB;IACrE,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACtF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Ordered, deterministic graceful-shutdown sequence shared by
|
|
3
|
+
* every signal-driven exit path (`SIGINT`, `SIGTERM`) of the bot.
|
|
4
|
+
*
|
|
5
|
+
* **Why a dedicated module:**
|
|
6
|
+
*
|
|
7
|
+
* - **Single owner of exit ordering.** The previous code had two SIGTERM
|
|
8
|
+
* handlers: `installLockCleanupHandlers()` (in `instanceLock.ts`) was
|
|
9
|
+
* registered first and called `releaseLock(); process.exit(0)` *synchronously*,
|
|
10
|
+
* pre-empting the bot's own async `state.flush()`. Frequent reloads
|
|
11
|
+
* under nodemon could therefore lose the last <500ms of state (one
|
|
12
|
+
* debounce window). The fix is to remove the lock module's signal
|
|
13
|
+
* handlers entirely and route every signal through this orchestrator,
|
|
14
|
+
* which awaits the flush before releasing the lock.
|
|
15
|
+
*
|
|
16
|
+
* - **Bounded by a watchdog.** If `state.flush()` hangs (disk full,
|
|
17
|
+
* network FS that lost its mount), the sequence still terminates
|
|
18
|
+
* within {@link DEFAULT_WATCHDOG_MS} so the next nodemon respawn can
|
|
19
|
+
* reclaim the lock instead of waiting forever.
|
|
20
|
+
*
|
|
21
|
+
* - **Testable.** Dependencies are injected, so a unit test can assert
|
|
22
|
+
* ordering (`state.flush()` resolves before `releaseLock()`) and
|
|
23
|
+
* watchdog behaviour without spinning up Telegram or the lockfile.
|
|
24
|
+
*
|
|
25
|
+
* **What it deliberately does NOT do:** stop tmux sessions or kill the
|
|
26
|
+
* OpenCode HTTP server. Both run in external process groups and survive
|
|
27
|
+
* the bot process by design — the reattach path on the next boot picks
|
|
28
|
+
* them up. Killing them here would defeat the whole "hot reload keeps
|
|
29
|
+
* agents alive" property the surrounding plan rests on.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* @description Upper bound (ms) on the whole graceful-shutdown sequence — the
|
|
33
|
+
* watchdog forces `releaseLock(); exit(0)` when it elapses first. Raised from
|
|
34
|
+
* 3s when the sequence gained the bounded (≤~7s) output flush. Exported because
|
|
35
|
+
* the lock module's same-token handoff wait must OUT-WAIT this window (the
|
|
36
|
+
* incoming nodemon respawn polls the lock while the predecessor finishes
|
|
37
|
+
* shutting down); an undersized wait aborts the new process and leaves the bot
|
|
38
|
+
* down until the next file change.
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_WATCHDOG_MS = 10000;
|
|
41
|
+
export interface ShutdownDeps {
|
|
42
|
+
/** Name of the triggering signal (`SIGINT` / `SIGTERM` / etc.), for logs. */
|
|
43
|
+
signal: string;
|
|
44
|
+
/** Telegraf bot; only `.stop(signal)` is called. */
|
|
45
|
+
bot: {
|
|
46
|
+
stop: (signal?: string) => void;
|
|
47
|
+
};
|
|
48
|
+
/** State store; only `.flush()` is awaited. */
|
|
49
|
+
state: {
|
|
50
|
+
flush: () => Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Optional: drain the off-loop update dispatcher's per-thread queues so
|
|
54
|
+
* updates enqueued during the ~1s hot-reload window still finish routing to
|
|
55
|
+
* their live agent (the `dropPendingUpdates:false` guarantee). Runs AFTER
|
|
56
|
+
* `bot.stop()` (polling halted → no new enqueue) and BEFORE `state.flush()`
|
|
57
|
+
* (so the drained handlers' state writes land in the flush). MUST self-bound
|
|
58
|
+
* (the dispatcher races its own timeout) so it can't eat the flush's watchdog
|
|
59
|
+
* budget; the outer watchdog is the backstop.
|
|
60
|
+
*/
|
|
61
|
+
drainPendingUpdates?: () => Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Optional: flush every thread's not-yet-delivered agent output (the
|
|
64
|
+
* coalesce buffers / DM drafts, then the paced send FIFOs) so a hot-reload
|
|
65
|
+
* restart can't swallow answer chunks that were already emitted but not yet
|
|
66
|
+
* sent. Runs AFTER {@link cleanupTimers} and BEFORE {@link clearTransientFrames}
|
|
67
|
+
* (content lands first, then the transient frames are deleted) — both before
|
|
68
|
+
* `bot.stop()`, while the Telegram client is fully alive. MUST self-bound
|
|
69
|
+
* (the bot-side flush races its own timeout) so a hung Telegram API can't
|
|
70
|
+
* eat the whole watchdog budget; the outer watchdog is the backstop.
|
|
71
|
+
*/
|
|
72
|
+
finalizePendingOutput?: () => Promise<void>;
|
|
73
|
+
/** Release the single-instance lockfile (idempotent — owner-checked inside). */
|
|
74
|
+
releaseLock: () => void;
|
|
75
|
+
/** Terminate the process. Real prod value: `(code) => process.exit(code)`. */
|
|
76
|
+
exit: (code: number) => void;
|
|
77
|
+
/** Optional: clear any setInterval handles the bot kept (GC sweep, etc.). */
|
|
78
|
+
cleanupTimers?: () => void;
|
|
79
|
+
/**
|
|
80
|
+
* Optional: best-effort delete of any TRANSIENT status frames (the
|
|
81
|
+
* "✽ working…" liveness frame, the live thinking indicator, the dedicated
|
|
82
|
+
* sub-agent status) still on screen, so a graceful exit doesn't leave them
|
|
83
|
+
* orphaned in a topic forever (their ids live only in volatile in-memory
|
|
84
|
+
* state). Runs AFTER {@link cleanupTimers} (so no tick re-creates a frame
|
|
85
|
+
* mid-sweep) and BEFORE `bot.stop()` (the Telegram client must still send the
|
|
86
|
+
* deletes). MUST self-bound (see the bot-side sweep) so a slow API can't eat
|
|
87
|
+
* into `state.flush()`'s watchdog budget; the outer watchdog is the backstop.
|
|
88
|
+
*/
|
|
89
|
+
clearTransientFrames?: () => Promise<void>;
|
|
90
|
+
/** Logger; defaults to `console.log`. Tests pass a sink to silence output. */
|
|
91
|
+
log?: (msg: string) => void;
|
|
92
|
+
/** Override the watchdog for tests. */
|
|
93
|
+
watchdogMs?: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* @description Run the ordered shutdown sequence:
|
|
97
|
+
*
|
|
98
|
+
* 1. `cleanupTimers()` — drop any background `setInterval`s so they
|
|
99
|
+
* don't fire mid-shutdown and re-dirty state.
|
|
100
|
+
* 1a. `await finalizePendingOutput()` — flush the not-yet-delivered agent
|
|
101
|
+
* output (coalesce buffers / DM drafts → send FIFOs) while the Telegram
|
|
102
|
+
* client is still up, so a restart can't swallow it. Self-bounded.
|
|
103
|
+
* 1b. `await clearTransientFrames()` — best-effort delete of the
|
|
104
|
+
* "✽ working…" / thinking / sub-agent status frames still on screen,
|
|
105
|
+
* while the Telegram client is still up. Self-bounded so it can't
|
|
106
|
+
* starve the flush.
|
|
107
|
+
* 2. `bot.stop(signal)` — Telegraf stops long-polling. Synchronous in
|
|
108
|
+
* Telegraf 4.x, so safe to call before the flush.
|
|
109
|
+
* 2b. `await drainPendingUpdates()` — drain the off-loop update queues so
|
|
110
|
+
* updates enqueued during a hot-reload still route to their live agent.
|
|
111
|
+
* Self-bounded, so it can't starve the flush's watchdog budget.
|
|
112
|
+
* 3. `await state.flush()` — atomic-write any pending state changes.
|
|
113
|
+
* THIS is the step the old `releaseLock(); process.exit(0)` raced;
|
|
114
|
+
* we wait for the on-disk rename to land here.
|
|
115
|
+
* 4. `releaseLock()` — drop the lockfile so the incoming nodemon
|
|
116
|
+
* respawn can claim it. Idempotent and owner-checked, so the
|
|
117
|
+
* `process.on('exit')` safety net in `lock.ts` finding nothing to do
|
|
118
|
+
* is fine.
|
|
119
|
+
* 5. `exit(0)` — let Node tear the rest down.
|
|
120
|
+
*
|
|
121
|
+
* The watchdog races the whole sequence (steps 2-4): if it fires first,
|
|
122
|
+
* we still call `releaseLock(); exit(0)` so the operator's terminal
|
|
123
|
+
* unblocks and nodemon's next iteration finds a free lock.
|
|
124
|
+
*/
|
|
125
|
+
export declare function gracefulShutdown(deps: ShutdownDeps): Promise<void>;
|
|
126
|
+
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,GAAG,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACzC,+CAA+C;IAC/C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtC;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,gFAAgF;IAChF,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,8EAA8E;IAC9E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,8EAA8E;IAC9E,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFxE"}
|