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,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultDisplayVerbosityMode = exports.displayVerbosityModeOptions = void 0;
|
|
4
|
+
exports.getDefaultDisplayPrefs = getDefaultDisplayPrefs;
|
|
5
|
+
exports.checkIsDisplayVerbosityMode = checkIsDisplayVerbosityMode;
|
|
6
|
+
exports.normalizeDisplayVerbosityMode = normalizeDisplayVerbosityMode;
|
|
7
|
+
const topicView_1 = require("./topicView");
|
|
8
|
+
/** Every selectable display-verbosity mode, in picker-button order (quiet →
|
|
9
|
+
* loud). Single source of truth for arg validation and the mode keyboards of
|
|
10
|
+
* all three display commands. */
|
|
11
|
+
exports.displayVerbosityModeOptions = ['minimal', 'short', 'full'];
|
|
12
|
+
/**
|
|
13
|
+
* @description Locked default for EVERY display pref (user decision
|
|
14
|
+
* 2026-06-11: "по умолчанию минимум"). `state.ts` resolves absent persisted
|
|
15
|
+
* fields to it, and the adapters fall back to it for reads that happen before
|
|
16
|
+
* the bot injects its mode reader at boot.
|
|
17
|
+
*/
|
|
18
|
+
exports.defaultDisplayVerbosityMode = 'minimal';
|
|
19
|
+
/**
|
|
20
|
+
* @description Every display pref at its locked default — what the adapters
|
|
21
|
+
* resolve for a read that happens before the bot injects its prefs reader at
|
|
22
|
+
* boot, and the baseline `state.ts` fills absent persisted fields from.
|
|
23
|
+
*/
|
|
24
|
+
function getDefaultDisplayPrefs() {
|
|
25
|
+
return {
|
|
26
|
+
thinking: exports.defaultDisplayVerbosityMode,
|
|
27
|
+
toolResults: exports.defaultDisplayVerbosityMode,
|
|
28
|
+
subagent: exports.defaultDisplayVerbosityMode,
|
|
29
|
+
view: topicView_1.defaultTopicView,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @description Type guard: is `value` one of the {@link DisplayVerbosityMode}
|
|
34
|
+
* options? Narrows a free-form string to the union WITHOUT a cast. Accepts
|
|
35
|
+
* ONLY the new vocabulary — legacy names go through
|
|
36
|
+
* {@link normalizeDisplayVerbosityMode}.
|
|
37
|
+
*/
|
|
38
|
+
function checkIsDisplayVerbosityMode(value) {
|
|
39
|
+
return exports.displayVerbosityModeOptions.includes(value);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @description The retired per-command mode names mapped onto the unified
|
|
43
|
+
* vocabulary, preserving each one's behavior:
|
|
44
|
+
*
|
|
45
|
+
* - `detailed` → `full` (thinking: keep the streamed reasoning)
|
|
46
|
+
* - `brief` → `short` (thinking: collapse to "thought for {N}s")
|
|
47
|
+
* - `hide` → `minimal` (thinking/tool-results: nothing permanent remains)
|
|
48
|
+
* - `compact` → `short` (subagent: status-only)
|
|
49
|
+
*
|
|
50
|
+
* No name collides across the three commands, so ONE shared map covers them
|
|
51
|
+
* all. Used both for old values persisted in `state.json` and for old names
|
|
52
|
+
* arriving from command args / stale picker buttons.
|
|
53
|
+
*/
|
|
54
|
+
const legacyDisplayVerbosityAliases = {
|
|
55
|
+
detailed: 'full',
|
|
56
|
+
brief: 'short',
|
|
57
|
+
hide: 'minimal',
|
|
58
|
+
compact: 'short',
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* @description Normalize a mode string to the unified vocabulary: a new name
|
|
62
|
+
* passes through, a legacy name maps per
|
|
63
|
+
* {@link legacyDisplayVerbosityAliases}, anything else (unknown string,
|
|
64
|
+
* `undefined`) → `null` so the caller decides between "use the default"
|
|
65
|
+
* (read-time normalization of persisted values) and "reject the input"
|
|
66
|
+
* (command arg / callback validation).
|
|
67
|
+
*/
|
|
68
|
+
function normalizeDisplayVerbosityMode(value) {
|
|
69
|
+
if (value === undefined)
|
|
70
|
+
return null;
|
|
71
|
+
if (checkIsDisplayVerbosityMode(value))
|
|
72
|
+
return value;
|
|
73
|
+
return legacyDisplayVerbosityAliases[value] ?? null;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=displayVerbosity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayVerbosity.js","sourceRoot":"","sources":["../../src/utils/displayVerbosity.ts"],"names":[],"mappings":";;;AA8BA,wDAOC;AAQD,kEAEC;AA8BD,sEAIC;AAvED,2CAA+C;AAE/C;;iCAEiC;AACpB,QAAA,2BAA2B,GAAoC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEzG;;;;;GAKG;AACU,QAAA,2BAA2B,GAAyB,SAAS,CAAC;AAE3E;;;;GAIG;AACH,SAAgB,sBAAsB;IACpC,OAAO;QACL,QAAQ,EAAE,mCAA2B;QACrC,WAAW,EAAE,mCAA2B;QACxC,QAAQ,EAAE,mCAA2B;QACrC,IAAI,EAAE,4BAAgB;KACvB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B,CAAC,KAAa;IACvD,OAAQ,mCAAiD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,6BAA6B,GAA4D;IAC7F,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,6BAA6B,CAAC,KAAyB;IACrE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,2BAA2B,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,6BAA6B,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Resilient file download for Telegram media (voice notes, etc.).
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `bot.ts` so it is side-effect-free and unit-testable against a
|
|
5
|
+
* local HTTP server (importing `bot.ts` would construct a Telegraf instance and
|
|
6
|
+
* read ENV at module load).
|
|
7
|
+
*
|
|
8
|
+
* Why this exists as its own module with retries:
|
|
9
|
+
*
|
|
10
|
+
* Telegram **API calls** (getUpdates, getFileLink, sendMessage) ride a tuned,
|
|
11
|
+
* keep-alive, IPv4-pinned `https.Agent` shared by Telegraf — so they reuse a
|
|
12
|
+
* warm socket. File **downloads** previously used the global agent: a fresh
|
|
13
|
+
* cold TCP+TLS handshake to `api.telegram.org` on every voice note. On a
|
|
14
|
+
* throttled / high-latency link that handshake intermittently stalls and trips
|
|
15
|
+
* the 20s timeout — surfacing to the user as "Download timed out", forcing a
|
|
16
|
+
* manual re-send. We fix that two ways:
|
|
17
|
+
*
|
|
18
|
+
* 1. Reuse the caller's warm agent (passed via `opts.agent`) so downloads
|
|
19
|
+
* ride the same pooled IPv4 connection as the API calls.
|
|
20
|
+
* 2. Retry transient failures (timeout / connection reset / 5xx / 429)
|
|
21
|
+
* automatically with exponential backoff, so a single stall recovers on
|
|
22
|
+
* its own instead of bubbling up to the user.
|
|
23
|
+
*/
|
|
24
|
+
import * as https from 'https';
|
|
25
|
+
export interface DownloadOptions {
|
|
26
|
+
/** Reuse a warm keep-alive agent (HTTPS only). Cuts the cold-handshake stall. */
|
|
27
|
+
agent?: https.Agent;
|
|
28
|
+
/** Per-attempt socket timeout. */
|
|
29
|
+
timeoutMs?: number;
|
|
30
|
+
/** Number of RETRIES after the first attempt (so attempts = retries + 1). */
|
|
31
|
+
retries?: number;
|
|
32
|
+
/** Observability hook fired before each retry (1-based attempt that just failed). */
|
|
33
|
+
onRetry?: (attempt: number, err: Error, delayMs: number) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description A download failure that knows whether retrying could help.
|
|
37
|
+
* Network stalls (timeout, ECONNRESET, …), HTTP 429 and 5xx are retryable;
|
|
38
|
+
* HTTP 4xx and "too many redirects" are not (resending the same request will
|
|
39
|
+
* keep failing).
|
|
40
|
+
*/
|
|
41
|
+
export declare class DownloadError extends Error {
|
|
42
|
+
readonly retryable: boolean;
|
|
43
|
+
readonly statusCode?: number;
|
|
44
|
+
constructor(message: string, opts: {
|
|
45
|
+
retryable: boolean;
|
|
46
|
+
statusCode?: number;
|
|
47
|
+
cause?: unknown;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Classify an arbitrary thrown value into retryable / not.
|
|
52
|
+
* `DownloadError` carries its own verdict; raw socket errors are matched by
|
|
53
|
+
* `code`; an unknown error is treated as NON-retryable (fail fast rather than
|
|
54
|
+
* loop on a bug).
|
|
55
|
+
*/
|
|
56
|
+
export declare function checkIsRetryableDownloadError(err: unknown): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* @description One download attempt. Follows up to {@link MAX_REDIRECTS} 3xx
|
|
59
|
+
* hops, rejects non-2xx with a status-tagged {@link DownloadError}, and tears
|
|
60
|
+
* down the partial file on any failure. Reuses `opts.agent` for HTTPS so the
|
|
61
|
+
* request rides the warm pooled connection instead of a cold handshake.
|
|
62
|
+
*/
|
|
63
|
+
export declare function downloadFileOnce(url: string, destPath: string, opts?: DownloadOptions, depth?: number): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* @description Download with automatic retries on transient failures. Resolves
|
|
66
|
+
* once the file is written; rejects with the LAST error after exhausting
|
|
67
|
+
* retries (or immediately on a non-retryable error). This is the function
|
|
68
|
+
* callers should use — a stalled connection now recovers on its own instead of
|
|
69
|
+
* forcing the user to re-send the media.
|
|
70
|
+
*/
|
|
71
|
+
export declare function downloadFile(url: string, destPath: string, opts?: DownloadOptions): Promise<void>;
|
|
72
|
+
//# sourceMappingURL=download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/utils/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IACpB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAOhG;AAcD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EpH;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3G"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Resilient file download for Telegram media (voice notes, etc.).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `bot.ts` so it is side-effect-free and unit-testable against a
|
|
6
|
+
* local HTTP server (importing `bot.ts` would construct a Telegraf instance and
|
|
7
|
+
* read ENV at module load).
|
|
8
|
+
*
|
|
9
|
+
* Why this exists as its own module with retries:
|
|
10
|
+
*
|
|
11
|
+
* Telegram **API calls** (getUpdates, getFileLink, sendMessage) ride a tuned,
|
|
12
|
+
* keep-alive, IPv4-pinned `https.Agent` shared by Telegraf — so they reuse a
|
|
13
|
+
* warm socket. File **downloads** previously used the global agent: a fresh
|
|
14
|
+
* cold TCP+TLS handshake to `api.telegram.org` on every voice note. On a
|
|
15
|
+
* throttled / high-latency link that handshake intermittently stalls and trips
|
|
16
|
+
* the 20s timeout — surfacing to the user as "Download timed out", forcing a
|
|
17
|
+
* manual re-send. We fix that two ways:
|
|
18
|
+
*
|
|
19
|
+
* 1. Reuse the caller's warm agent (passed via `opts.agent`) so downloads
|
|
20
|
+
* ride the same pooled IPv4 connection as the API calls.
|
|
21
|
+
* 2. Retry transient failures (timeout / connection reset / 5xx / 429)
|
|
22
|
+
* automatically with exponential backoff, so a single stall recovers on
|
|
23
|
+
* its own instead of bubbling up to the user.
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.DownloadError = void 0;
|
|
60
|
+
exports.checkIsRetryableDownloadError = checkIsRetryableDownloadError;
|
|
61
|
+
exports.downloadFileOnce = downloadFileOnce;
|
|
62
|
+
exports.downloadFile = downloadFile;
|
|
63
|
+
const https = __importStar(require("https"));
|
|
64
|
+
const http = __importStar(require("http"));
|
|
65
|
+
const fs = __importStar(require("fs"));
|
|
66
|
+
const fs_1 = require("fs");
|
|
67
|
+
const DEFAULT_TIMEOUT_MS = 20_000;
|
|
68
|
+
const DEFAULT_RETRIES = 2; // → up to 3 attempts total
|
|
69
|
+
const MAX_REDIRECTS = 5;
|
|
70
|
+
/** Backoff before retry attempt N (1-based): 500ms, 1500ms, 3500ms, … (capped). */
|
|
71
|
+
function backoffMs(attempt) {
|
|
72
|
+
return Math.min(500 * (2 ** attempt - 1), 8_000);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description A download failure that knows whether retrying could help.
|
|
76
|
+
* Network stalls (timeout, ECONNRESET, …), HTTP 429 and 5xx are retryable;
|
|
77
|
+
* HTTP 4xx and "too many redirects" are not (resending the same request will
|
|
78
|
+
* keep failing).
|
|
79
|
+
*/
|
|
80
|
+
class DownloadError extends Error {
|
|
81
|
+
retryable;
|
|
82
|
+
statusCode;
|
|
83
|
+
constructor(message, opts) {
|
|
84
|
+
super(message);
|
|
85
|
+
this.name = 'DownloadError';
|
|
86
|
+
this.retryable = opts.retryable;
|
|
87
|
+
this.statusCode = opts.statusCode;
|
|
88
|
+
if (opts.cause !== undefined)
|
|
89
|
+
this.cause = opts.cause;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.DownloadError = DownloadError;
|
|
93
|
+
/** Node socket/DNS error codes that are worth a retry. */
|
|
94
|
+
const RETRYABLE_CODES = new Set([
|
|
95
|
+
'ECONNRESET',
|
|
96
|
+
'ETIMEDOUT',
|
|
97
|
+
'ECONNREFUSED',
|
|
98
|
+
'EAI_AGAIN',
|
|
99
|
+
'EPIPE',
|
|
100
|
+
'ENETUNREACH',
|
|
101
|
+
'EHOSTUNREACH',
|
|
102
|
+
'ECONNABORTED',
|
|
103
|
+
]);
|
|
104
|
+
/**
|
|
105
|
+
* @description Classify an arbitrary thrown value into retryable / not.
|
|
106
|
+
* `DownloadError` carries its own verdict; raw socket errors are matched by
|
|
107
|
+
* `code`; an unknown error is treated as NON-retryable (fail fast rather than
|
|
108
|
+
* loop on a bug).
|
|
109
|
+
*/
|
|
110
|
+
function checkIsRetryableDownloadError(err) {
|
|
111
|
+
if (err instanceof DownloadError)
|
|
112
|
+
return err.retryable;
|
|
113
|
+
const code = err?.code;
|
|
114
|
+
if (code && RETRYABLE_CODES.has(code))
|
|
115
|
+
return true;
|
|
116
|
+
// Telegraf/undici sometimes surface socket resets as a bare "socket hang up".
|
|
117
|
+
const msg = err instanceof Error ? err.message : '';
|
|
118
|
+
return /socket hang up|timed out|timeout/i.test(msg);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @description One download attempt. Follows up to {@link MAX_REDIRECTS} 3xx
|
|
122
|
+
* hops, rejects non-2xx with a status-tagged {@link DownloadError}, and tears
|
|
123
|
+
* down the partial file on any failure. Reuses `opts.agent` for HTTPS so the
|
|
124
|
+
* request rides the warm pooled connection instead of a cold handshake.
|
|
125
|
+
*/
|
|
126
|
+
function downloadFileOnce(url, destPath, opts = {}, depth = 0) {
|
|
127
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
128
|
+
if (depth > MAX_REDIRECTS) {
|
|
129
|
+
return Promise.reject(new DownloadError(`Too many redirects (>${MAX_REDIRECTS}) for ${url}`, { retryable: false }));
|
|
130
|
+
}
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
const isHttps = url.startsWith('https');
|
|
133
|
+
const client = isHttps ? https : http;
|
|
134
|
+
const file = fs.createWriteStream(destPath);
|
|
135
|
+
const cleanup = () => fs_1.promises.unlink(destPath).catch(() => { });
|
|
136
|
+
// Only an https.Agent makes sense for https requests; never hand it to the
|
|
137
|
+
// plain-http client (Telegram file URLs are https, but stay defensive).
|
|
138
|
+
const reqOptions = isHttps && opts.agent ? { agent: opts.agent } : {};
|
|
139
|
+
const req = client.get(url, reqOptions, (response) => {
|
|
140
|
+
const status = response.statusCode ?? 0;
|
|
141
|
+
// Follow redirects (301/302/303/307/308). Drain the response so the
|
|
142
|
+
// socket can be returned to the keep-alive pool instead of being torn
|
|
143
|
+
// down — important when reusing a shared agent.
|
|
144
|
+
if ([301, 302, 303, 307, 308].includes(status)) {
|
|
145
|
+
const redirectUrl = response.headers.location;
|
|
146
|
+
if (redirectUrl) {
|
|
147
|
+
response.resume();
|
|
148
|
+
file.close(() => {
|
|
149
|
+
cleanup().then(() => downloadFileOnce(redirectUrl, destPath, opts, depth + 1).then(resolve, reject));
|
|
150
|
+
});
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Anything outside 2xx is a failure. Without this the error body (HTML /
|
|
155
|
+
// JSON) was piped into the file, yielding broken "audio" that Whisper
|
|
156
|
+
// later rejected with an opaque 400. 4xx is permanent; 429/5xx may pass
|
|
157
|
+
// on a retry.
|
|
158
|
+
if (status < 200 || status >= 300) {
|
|
159
|
+
response.resume();
|
|
160
|
+
const retryable = status === 429 || status >= 500;
|
|
161
|
+
file.close(() => {
|
|
162
|
+
cleanup().then(() => reject(new DownloadError(`Download failed: HTTP ${status} ${response.statusMessage ?? ''}`.trim(), { retryable, statusCode: status })));
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
response.pipe(file);
|
|
167
|
+
file.on('finish', () => { file.close(() => resolve()); });
|
|
168
|
+
file.on('error', (err) => {
|
|
169
|
+
// A local write error (disk full, etc.) is not worth retrying.
|
|
170
|
+
cleanup().then(() => reject(new DownloadError(`Write failed: ${err.message}`, { retryable: false, cause: err })));
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
req.setTimeout(timeoutMs, () => {
|
|
174
|
+
req.destroy(new DownloadError(`Download timed out after ${timeoutMs}ms`, { retryable: true }));
|
|
175
|
+
});
|
|
176
|
+
req.on('error', (err) => {
|
|
177
|
+
cleanup().then(() => {
|
|
178
|
+
// `req.destroy(downloadError)` re-emits our own error here — pass it
|
|
179
|
+
// through unchanged so its `retryable` verdict survives.
|
|
180
|
+
if (err instanceof DownloadError) {
|
|
181
|
+
reject(err);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
reject(new DownloadError(err.message, { retryable: checkIsRetryableDownloadError(err), cause: err }));
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* @description Download with automatic retries on transient failures. Resolves
|
|
191
|
+
* once the file is written; rejects with the LAST error after exhausting
|
|
192
|
+
* retries (or immediately on a non-retryable error). This is the function
|
|
193
|
+
* callers should use — a stalled connection now recovers on its own instead of
|
|
194
|
+
* forcing the user to re-send the media.
|
|
195
|
+
*/
|
|
196
|
+
async function downloadFile(url, destPath, opts = {}) {
|
|
197
|
+
const retries = opts.retries ?? DEFAULT_RETRIES;
|
|
198
|
+
let lastErr = new DownloadError('download not attempted', { retryable: false });
|
|
199
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
200
|
+
try {
|
|
201
|
+
await downloadFileOnce(url, destPath, opts);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
lastErr = err instanceof Error ? err : new Error(String(err));
|
|
206
|
+
const canRetry = attempt < retries && checkIsRetryableDownloadError(err);
|
|
207
|
+
if (!canRetry)
|
|
208
|
+
throw lastErr;
|
|
209
|
+
const delay = backoffMs(attempt + 1);
|
|
210
|
+
opts.onRetry?.(attempt + 1, lastErr, delay);
|
|
211
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
throw lastErr;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/utils/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure boundary/finalize decision for the DM-mode draft "cursor"
|
|
3
|
+
* (DM streaming v2). The bot keeps ONE accumulating draft holding the full
|
|
4
|
+
* current reply text and FINALIZES it into a permanent `sendMessage` on a
|
|
5
|
+
* boundary; after a finalize the next output starts a fresh draft → a new
|
|
6
|
+
* message.
|
|
7
|
+
*
|
|
8
|
+
* This module decides WHICH boundary (if any) a given feed / idle tick hits; the
|
|
9
|
+
* `bot.ts` draft manager owns the real timers and the Telegram IO (rendering,
|
|
10
|
+
* `splitMessage`, `sendMessageDraft`, `replyToThread`). Keeping the decision
|
|
11
|
+
* pure lets a timeline test with an injectable clock prove the gates fire
|
|
12
|
+
* (mirrors `draftPacer.test.ts`).
|
|
13
|
+
*
|
|
14
|
+
* The boundaries (locked in the plan):
|
|
15
|
+
* - new-response — a non-continuation output (or a forced new-message break)
|
|
16
|
+
* arriving while a draft is already active: finalize the previous draft, then
|
|
17
|
+
* start a fresh one for this output;
|
|
18
|
+
* - overflow — the prospective accumulated text would render past the Telegram
|
|
19
|
+
* cap: finalize the full chunk(s) and continue the remainder in a new draft;
|
|
20
|
+
* - isFinal — the turn's last frame: finalize and do not reopen a draft;
|
|
21
|
+
* - idle — no new output for {@link FINALIZE_IDLE_MS}: finalize the snapshot;
|
|
22
|
+
* - append — none of the above: just grow the draft and pace it.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Idle window after the last draft feed with no new output before the draft is
|
|
26
|
+
* FINALIZED into a permanent message (a pause is a natural message boundary —
|
|
27
|
+
* like sending what you've typed, then continuing in a new bubble). Repurposes
|
|
28
|
+
* the value the removed `OUTPUT_DEBOUNCE_MS_DM` held; it is NOT a send-throttle.
|
|
29
|
+
*/
|
|
30
|
+
export declare const FINALIZE_IDLE_MS = 4000;
|
|
31
|
+
/**
|
|
32
|
+
* @name DraftFeedAction
|
|
33
|
+
* @description What the draft manager should do with an incoming `output` feed.
|
|
34
|
+
*
|
|
35
|
+
* - `finalizeThenStart` — a new response began while a draft was active: finalize
|
|
36
|
+
* the active draft to a permanent message FIRST, then open a fresh draft and
|
|
37
|
+
* append this output.
|
|
38
|
+
* - `finalize` — the turn ended (`isFinal`): finalize the active draft (with this
|
|
39
|
+
* output appended) and do NOT reopen a draft.
|
|
40
|
+
* - `overflow` — appending this output makes the draft render past the cap:
|
|
41
|
+
* finalize the full chunk(s) as permanent message(s) and carry the remainder
|
|
42
|
+
* into a new draft.
|
|
43
|
+
* - `append` — ordinary streaming tail: grow the draft and pace the update.
|
|
44
|
+
*/
|
|
45
|
+
export type DraftFeedAction = 'finalizeThenStart' | 'finalize' | 'overflow' | 'append';
|
|
46
|
+
export interface DraftFeedInput {
|
|
47
|
+
/** Is a draft turn currently active (a response is mid-stream)? */
|
|
48
|
+
isDraftActive: boolean;
|
|
49
|
+
/** Does this output continue the in-flight response (vs a standalone one)? */
|
|
50
|
+
isContinuation: boolean;
|
|
51
|
+
/** Thread flag: the next output must start a new message (user prompt, etc.). */
|
|
52
|
+
needsNewMessage: boolean;
|
|
53
|
+
/** Is this the turn's last frame (`OutboundHints.isFinal`)? */
|
|
54
|
+
isFinal: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Rendered length of the PROSPECTIVE accumulated text once this output is
|
|
57
|
+
* appended to the active draft (the bot measures it the same way it renders
|
|
58
|
+
* the draft body). Compared against {@link DraftFeedInput.renderedCap}.
|
|
59
|
+
*/
|
|
60
|
+
prospectiveRenderedLength: number;
|
|
61
|
+
/** The rendered-length cap a single draft/message must fit under. */
|
|
62
|
+
renderedCap: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @description Decide what the draft manager does with an incoming feed.
|
|
66
|
+
*
|
|
67
|
+
* Order matters and is load-bearing:
|
|
68
|
+
* 1. new-response (active draft + a non-continuation / forced break) →
|
|
69
|
+
* `finalizeThenStart`: the previous reply is complete, snapshot it before the
|
|
70
|
+
* new one overwrites the cursor. Checked before overflow because the
|
|
71
|
+
* prospective length is computed against the OLD accumulator and would be
|
|
72
|
+
* meaningless across a response boundary.
|
|
73
|
+
* 2. isFinal → `finalize`: end the turn; no new draft.
|
|
74
|
+
* 3. overflow (prospective render > cap) → `overflow`: spill into permanent
|
|
75
|
+
* message(s) + a fresh draft for the remainder.
|
|
76
|
+
* 4. otherwise → `append`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function getDraftFeedAction(input: DraftFeedInput): DraftFeedAction;
|
|
79
|
+
/**
|
|
80
|
+
* @description The effective continuation flag the DM draft cursor should use
|
|
81
|
+
* for an incoming `output`, accounting for adapters that stream WITHOUT marking
|
|
82
|
+
* continuations.
|
|
83
|
+
*
|
|
84
|
+
* OpenCode marks every tail except the first of a response with
|
|
85
|
+
* `meta.isContinuation` (it tracks `lastEmittedLength`), so the cursor knows
|
|
86
|
+
* which outputs accumulate into the live draft. The Claude scrape adapter emits
|
|
87
|
+
* each poll's delta with NO meta — `metaIsContinuation` is always false — even
|
|
88
|
+
* though every delta is the SAME answer continuing. Treating those as
|
|
89
|
+
* non-continuations would hit the new-response boundary on every poll
|
|
90
|
+
* (`getDraftFeedAction` → `finalizeThenStart`) and flood the topic with one tiny
|
|
91
|
+
* message per delta.
|
|
92
|
+
*
|
|
93
|
+
* For a delta-emitting adapter the answer therefore accumulates as a
|
|
94
|
+
* continuation; the real turn boundaries are driven separately by
|
|
95
|
+
* `needsNewMessage` (a new prompt, or the answer→tool transition the bot marks
|
|
96
|
+
* when output resumes after a status frame), the idle timer, overflow, and
|
|
97
|
+
* isFinal — exactly the boundary set `getDraftFeedAction` already honours. For a
|
|
98
|
+
* continuation-marking adapter the meta flag is authoritative and passes through
|
|
99
|
+
* unchanged.
|
|
100
|
+
*/
|
|
101
|
+
export declare function getDmDraftContinuation(metaIsContinuation: boolean, outputsDeltas: boolean): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* @description Should the idle timer finalize the draft now? True once a draft
|
|
104
|
+
* is active and at least {@link FINALIZE_IDLE_MS} has elapsed since the last
|
|
105
|
+
* feed with no newer output. Never true when nothing has been fed yet
|
|
106
|
+
* (`lastFedAtMs === null`) or the draft is inactive — there is nothing to
|
|
107
|
+
* finalize.
|
|
108
|
+
*/
|
|
109
|
+
export declare function checkShouldFinalizeOnIdle(nowMs: number, lastFedAtMs: number | null, isDraftActive: boolean, idleMs: number): boolean;
|
|
110
|
+
//# sourceMappingURL=draftFinalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draftFinalize.d.ts","sourceRoot":"","sources":["../../src/utils/draftFinalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,aAAa,EAAE,OAAO,CAAC;IACvB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;IACxB,iFAAiF;IACjF,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAMzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,OAAO,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAIT"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure boundary/finalize decision for the DM-mode draft "cursor"
|
|
4
|
+
* (DM streaming v2). The bot keeps ONE accumulating draft holding the full
|
|
5
|
+
* current reply text and FINALIZES it into a permanent `sendMessage` on a
|
|
6
|
+
* boundary; after a finalize the next output starts a fresh draft → a new
|
|
7
|
+
* message.
|
|
8
|
+
*
|
|
9
|
+
* This module decides WHICH boundary (if any) a given feed / idle tick hits; the
|
|
10
|
+
* `bot.ts` draft manager owns the real timers and the Telegram IO (rendering,
|
|
11
|
+
* `splitMessage`, `sendMessageDraft`, `replyToThread`). Keeping the decision
|
|
12
|
+
* pure lets a timeline test with an injectable clock prove the gates fire
|
|
13
|
+
* (mirrors `draftPacer.test.ts`).
|
|
14
|
+
*
|
|
15
|
+
* The boundaries (locked in the plan):
|
|
16
|
+
* - new-response — a non-continuation output (or a forced new-message break)
|
|
17
|
+
* arriving while a draft is already active: finalize the previous draft, then
|
|
18
|
+
* start a fresh one for this output;
|
|
19
|
+
* - overflow — the prospective accumulated text would render past the Telegram
|
|
20
|
+
* cap: finalize the full chunk(s) and continue the remainder in a new draft;
|
|
21
|
+
* - isFinal — the turn's last frame: finalize and do not reopen a draft;
|
|
22
|
+
* - idle — no new output for {@link FINALIZE_IDLE_MS}: finalize the snapshot;
|
|
23
|
+
* - append — none of the above: just grow the draft and pace it.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.FINALIZE_IDLE_MS = void 0;
|
|
27
|
+
exports.getDraftFeedAction = getDraftFeedAction;
|
|
28
|
+
exports.getDmDraftContinuation = getDmDraftContinuation;
|
|
29
|
+
exports.checkShouldFinalizeOnIdle = checkShouldFinalizeOnIdle;
|
|
30
|
+
/**
|
|
31
|
+
* Idle window after the last draft feed with no new output before the draft is
|
|
32
|
+
* FINALIZED into a permanent message (a pause is a natural message boundary —
|
|
33
|
+
* like sending what you've typed, then continuing in a new bubble). Repurposes
|
|
34
|
+
* the value the removed `OUTPUT_DEBOUNCE_MS_DM` held; it is NOT a send-throttle.
|
|
35
|
+
*/
|
|
36
|
+
exports.FINALIZE_IDLE_MS = 4000;
|
|
37
|
+
/**
|
|
38
|
+
* @description Decide what the draft manager does with an incoming feed.
|
|
39
|
+
*
|
|
40
|
+
* Order matters and is load-bearing:
|
|
41
|
+
* 1. new-response (active draft + a non-continuation / forced break) →
|
|
42
|
+
* `finalizeThenStart`: the previous reply is complete, snapshot it before the
|
|
43
|
+
* new one overwrites the cursor. Checked before overflow because the
|
|
44
|
+
* prospective length is computed against the OLD accumulator and would be
|
|
45
|
+
* meaningless across a response boundary.
|
|
46
|
+
* 2. isFinal → `finalize`: end the turn; no new draft.
|
|
47
|
+
* 3. overflow (prospective render > cap) → `overflow`: spill into permanent
|
|
48
|
+
* message(s) + a fresh draft for the remainder.
|
|
49
|
+
* 4. otherwise → `append`.
|
|
50
|
+
*/
|
|
51
|
+
function getDraftFeedAction(input) {
|
|
52
|
+
const isStartOfResponse = !input.isContinuation || input.needsNewMessage;
|
|
53
|
+
if (input.isDraftActive && isStartOfResponse)
|
|
54
|
+
return 'finalizeThenStart';
|
|
55
|
+
if (input.isFinal)
|
|
56
|
+
return 'finalize';
|
|
57
|
+
if (input.prospectiveRenderedLength > input.renderedCap)
|
|
58
|
+
return 'overflow';
|
|
59
|
+
return 'append';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description The effective continuation flag the DM draft cursor should use
|
|
63
|
+
* for an incoming `output`, accounting for adapters that stream WITHOUT marking
|
|
64
|
+
* continuations.
|
|
65
|
+
*
|
|
66
|
+
* OpenCode marks every tail except the first of a response with
|
|
67
|
+
* `meta.isContinuation` (it tracks `lastEmittedLength`), so the cursor knows
|
|
68
|
+
* which outputs accumulate into the live draft. The Claude scrape adapter emits
|
|
69
|
+
* each poll's delta with NO meta — `metaIsContinuation` is always false — even
|
|
70
|
+
* though every delta is the SAME answer continuing. Treating those as
|
|
71
|
+
* non-continuations would hit the new-response boundary on every poll
|
|
72
|
+
* (`getDraftFeedAction` → `finalizeThenStart`) and flood the topic with one tiny
|
|
73
|
+
* message per delta.
|
|
74
|
+
*
|
|
75
|
+
* For a delta-emitting adapter the answer therefore accumulates as a
|
|
76
|
+
* continuation; the real turn boundaries are driven separately by
|
|
77
|
+
* `needsNewMessage` (a new prompt, or the answer→tool transition the bot marks
|
|
78
|
+
* when output resumes after a status frame), the idle timer, overflow, and
|
|
79
|
+
* isFinal — exactly the boundary set `getDraftFeedAction` already honours. For a
|
|
80
|
+
* continuation-marking adapter the meta flag is authoritative and passes through
|
|
81
|
+
* unchanged.
|
|
82
|
+
*/
|
|
83
|
+
function getDmDraftContinuation(metaIsContinuation, outputsDeltas) {
|
|
84
|
+
return outputsDeltas ? true : metaIsContinuation;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @description Should the idle timer finalize the draft now? True once a draft
|
|
88
|
+
* is active and at least {@link FINALIZE_IDLE_MS} has elapsed since the last
|
|
89
|
+
* feed with no newer output. Never true when nothing has been fed yet
|
|
90
|
+
* (`lastFedAtMs === null`) or the draft is inactive — there is nothing to
|
|
91
|
+
* finalize.
|
|
92
|
+
*/
|
|
93
|
+
function checkShouldFinalizeOnIdle(nowMs, lastFedAtMs, isDraftActive, idleMs) {
|
|
94
|
+
if (!isDraftActive)
|
|
95
|
+
return false;
|
|
96
|
+
if (lastFedAtMs === null)
|
|
97
|
+
return false;
|
|
98
|
+
return nowMs - lastFedAtMs >= idleMs;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=draftFinalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draftFinalize.js","sourceRoot":"","sources":["../../src/utils/draftFinalize.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AA2DH,gDAMC;AAwBD,wDAKC;AASD,8DASC;AA9GD;;;;;GAKG;AACU,QAAA,gBAAgB,GAAG,IAAI,CAAC;AAqCrC;;;;;;;;;;;;;GAaG;AACH,SAAgB,kBAAkB,CAAC,KAAqB;IACtD,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,eAAe,CAAC;IACzE,IAAI,KAAK,CAAC,aAAa,IAAI,iBAAiB;QAAE,OAAO,mBAAmB,CAAC;IACzE,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,UAAU,CAAC;IACrC,IAAI,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC;IAC3E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,sBAAsB,CACpC,kBAA2B,EAC3B,aAAsB;IAEtB,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,KAAa,EACb,WAA0B,EAC1B,aAAsB,EACtB,MAAc;IAEd,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,KAAK,GAAG,WAAW,IAAI,MAAM,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Draft-id allocator for the DM-mode live-streaming draft channel
|
|
3
|
+
* (P3). Telegram's `sendMessageDraft` animates updates that share the SAME
|
|
4
|
+
* `draft_id` as one in-progress draft; a NEW id starts a fresh draft. So one
|
|
5
|
+
* streamed response must keep ONE stable id across all its updates, and each new
|
|
6
|
+
* response (a fresh, non-continuation turn) must get a DISTINCT id so it animates
|
|
7
|
+
* separately from the previous turn.
|
|
8
|
+
*
|
|
9
|
+
* A pure module-scoped monotonic counter gives both: {@link nextDraftId} is
|
|
10
|
+
* called ONCE per response (at `startDraftTurn`), and the returned id is then
|
|
11
|
+
* stored on the per-thread draft state and reused for every update of that
|
|
12
|
+
* response. Two DM topics streaming at once get distinct ids because each pulls
|
|
13
|
+
* its own value off the shared counter.
|
|
14
|
+
*
|
|
15
|
+
* The id is folded into a NON-ZERO 31-bit positive int: Telegram requires a
|
|
16
|
+
* non-zero draft id, and a small positive int avoids any signedness surprises in
|
|
17
|
+
* the Bot API. The counter wraps at {@link DRAFT_ID_MODULO} without ever
|
|
18
|
+
* yielding 0.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Wrap point for the draft-id counter. Kept well inside the 31-bit positive
|
|
22
|
+
* range (2_147_483_647) so the `+1` fold can never reach a 32-bit boundary.
|
|
23
|
+
*/
|
|
24
|
+
export declare const DRAFT_ID_MODULO = 2000000000;
|
|
25
|
+
/**
|
|
26
|
+
* @description Allocate the next draft id. Monotonic per process, folded into a
|
|
27
|
+
* non-zero positive 31-bit int via `(counter % MODULO) + 1`, so the value is
|
|
28
|
+
* always in `[1, DRAFT_ID_MODULO]` and never 0 even at the wrap boundary.
|
|
29
|
+
*
|
|
30
|
+
* `prevId` is accepted for symmetry with the per-thread state (and to make a
|
|
31
|
+
* future "derive from previous" tweak local to this module) but is intentionally
|
|
32
|
+
* unused: uniqueness comes from the shared monotonic counter, not the caller's
|
|
33
|
+
* last id, so two interleaved per-thread turns can never collide.
|
|
34
|
+
*/
|
|
35
|
+
export declare function nextDraftId(prevId: number | null): number;
|
|
36
|
+
//# sourceMappingURL=draftId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draftId.d.ts","sourceRoot":"","sources":["../../src/utils/draftId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe,aAAgB,CAAC;AAI7C;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKzD"}
|