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,412 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDmOutputTransport = createDmOutputTransport;
|
|
4
|
+
const sessionKey_1 = require("../../../sessionKey");
|
|
5
|
+
const sessionKeyCodec_1 = require("../sessionKeyCodec");
|
|
6
|
+
const draftId_1 = require("../../../utils/draftId");
|
|
7
|
+
const outputFlushPlan_1 = require("../outputFlushPlan");
|
|
8
|
+
const draftPacer_1 = require("../../../utils/draftPacer");
|
|
9
|
+
const draftFinalize_1 = require("../../../utils/draftFinalize");
|
|
10
|
+
const sendErrorClassifier_1 = require("../../../sendErrorClassifier");
|
|
11
|
+
/**
|
|
12
|
+
* @description The DM live-draft output transport — the relocated draft-cursor
|
|
13
|
+
* manager. In DM mode the LIVE phase of a streamed reply is shown as a native
|
|
14
|
+
* Telegram draft (the "bot is typing this message" animation) and FINALIZED to a
|
|
15
|
+
* permanent message at boundaries (idle / overflow / isFinal / new-response /
|
|
16
|
+
* teardown). The draft channel runs OFF the message rate-limiter so a draft 429
|
|
17
|
+
* can never delay a real send; every draft call is best-effort. Both streaming
|
|
18
|
+
* backends use the cursor ({@link DmOutputTransportDeps.checkSupportsDraft}
|
|
19
|
+
* gate): OpenCode marks its continuations, while the Claude scrape adapter emits
|
|
20
|
+
* each poll's prose delta with no meta, so the transport synthesises the
|
|
21
|
+
* continuation flag ({@link getDmDraftContinuation}) — the answer accumulates
|
|
22
|
+
* into ONE draft re-rendered as the full snapshot, with the same boundary set.
|
|
23
|
+
*/
|
|
24
|
+
function createDmOutputTransport(deps) {
|
|
25
|
+
const draftStreams = new Map();
|
|
26
|
+
function getDraftStreamState(key) {
|
|
27
|
+
const k = (0, sessionKey_1.keyToString)(key);
|
|
28
|
+
let s = draftStreams.get(k);
|
|
29
|
+
if (!s) {
|
|
30
|
+
s = {
|
|
31
|
+
draftId: 0,
|
|
32
|
+
accumulatedText: '',
|
|
33
|
+
lastSentText: null,
|
|
34
|
+
lastSentAtMs: null,
|
|
35
|
+
backoffUntilMs: 0,
|
|
36
|
+
pacerTimer: null,
|
|
37
|
+
idleFinalizeTimer: null,
|
|
38
|
+
lastFedAtMs: null,
|
|
39
|
+
active: false,
|
|
40
|
+
};
|
|
41
|
+
draftStreams.set(k, s);
|
|
42
|
+
}
|
|
43
|
+
return s;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Render the FULL accumulated draft text to HTML. The draft is the
|
|
47
|
+
* live "cursor" holding the entire current reply, so it renders the WHOLE
|
|
48
|
+
* `accumulatedText` — never a tail window. The overflow boundary keeps
|
|
49
|
+
* `accumulatedText` short enough that its render stays under the Telegram cap.
|
|
50
|
+
*/
|
|
51
|
+
function renderDraftBody(accumulatedText) {
|
|
52
|
+
return deps.renderAgentHtml(accumulatedText);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @description Rendered-HTML length of `text` — the measure the overflow
|
|
56
|
+
* boundary compares against the cap. A body is sized by its RENDERED length
|
|
57
|
+
* (HTML escaping + tags inflate the source), so the overflow decision must
|
|
58
|
+
* measure the same way `renderDraftBody` / the persist splitter do.
|
|
59
|
+
*/
|
|
60
|
+
function measureDraftRenderedLength(text) {
|
|
61
|
+
return deps.renderAgentHtml(text).length;
|
|
62
|
+
}
|
|
63
|
+
/** Clear both per-draft timers (pacer + idle-finalize) without touching state. */
|
|
64
|
+
function clearDraftTimers(draft) {
|
|
65
|
+
if (draft.pacerTimer) {
|
|
66
|
+
clearTimeout(draft.pacerTimer);
|
|
67
|
+
draft.pacerTimer = null;
|
|
68
|
+
}
|
|
69
|
+
if (draft.idleFinalizeTimer) {
|
|
70
|
+
clearTimeout(draft.idleFinalizeTimer);
|
|
71
|
+
draft.idleFinalizeTimer = null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description Fire ONE draft update for the thread's current accumulated text,
|
|
76
|
+
* reusing the turn's stable draft id. Best-effort: a 429 arms the draft-channel
|
|
77
|
+
* backoff (read from `retry_after` when present, else {@link
|
|
78
|
+
* DRAFT_DEFAULT_BACKOFF_MS}) and re-arms the pacer; any other failure is logged
|
|
79
|
+
* and dropped. Never throws, never touches the message rate-limiter.
|
|
80
|
+
*/
|
|
81
|
+
async function sendDraftNow(key, draft) {
|
|
82
|
+
const text = renderDraftBody(draft.accumulatedText);
|
|
83
|
+
// The cursor invariant keeps `accumulatedText` under the cap; an over-cap
|
|
84
|
+
// render is the TRANSIENT pre-spill state at an overflow feed (the overflow
|
|
85
|
+
// boundary splits it into permanent messages on the same tick). Sending it
|
|
86
|
+
// would only earn `MESSAGE_TOO_LONG`, so skip — the spill carries the content.
|
|
87
|
+
if (text.length > deps.maxMessageLength)
|
|
88
|
+
return;
|
|
89
|
+
const payload = {
|
|
90
|
+
chat_id: (0, sessionKeyCodec_1.getTelegramChatId)(key),
|
|
91
|
+
draft_id: draft.draftId,
|
|
92
|
+
text,
|
|
93
|
+
parse_mode: 'HTML',
|
|
94
|
+
};
|
|
95
|
+
// Mirror `buildSendExtra`'s General handling: omit `message_thread_id` for the
|
|
96
|
+
// DM General thread (`DM_GENERAL_THREAD_ID = 0`).
|
|
97
|
+
if (!deps.checkIsGeneral(key))
|
|
98
|
+
payload.message_thread_id = (0, sessionKeyCodec_1.getTelegramThreadId)(key);
|
|
99
|
+
// Record what we are ABOUT to show + when, before the await, so a concurrent
|
|
100
|
+
// feed paces against this attempt (and a failure below only adjusts backoff).
|
|
101
|
+
draft.lastSentText = draft.accumulatedText;
|
|
102
|
+
draft.lastSentAtMs = Date.now();
|
|
103
|
+
try {
|
|
104
|
+
await deps.callSendMessageDraft('sendMessageDraft', payload);
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
const code = (0, sendErrorClassifier_1.checkIsApiError)(e) ? (0, sendErrorClassifier_1.getErrorCode)(e) : undefined;
|
|
108
|
+
if (code === 429) {
|
|
109
|
+
const retryAfterSec = (0, sendErrorClassifier_1.checkIsApiError)(e) ? (0, sendErrorClassifier_1.getErrorRetryAfterSeconds)(e) : undefined;
|
|
110
|
+
const backoffMs = retryAfterSec ? retryAfterSec * 1000 : draftPacer_1.DRAFT_DEFAULT_BACKOFF_MS;
|
|
111
|
+
draft.backoffUntilMs = Date.now() + backoffMs;
|
|
112
|
+
console.warn(`[draft] ${(0, sessionKey_1.keyToString)(key)} draft 429 — backing off ${backoffMs}ms`);
|
|
113
|
+
armDraftPacerTimer(key, draft);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
console.warn(`[draft] ${(0, sessionKey_1.keyToString)(key)} draft update failed (best-effort, ignored):`, e instanceof Error ? e.message : e);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @description Arm (replacing any existing) the draft pacer timer. It fires
|
|
121
|
+
* after the soonest the pacer could next `send`: the later of the draft-channel
|
|
122
|
+
* backoff remainder and the min-interval remainder since the last send, then
|
|
123
|
+
* re-runs the pacer. The draft keepalive is gone (DM streaming v2): a draft is
|
|
124
|
+
* either updated within the idle window or FINALIZED at the idle boundary, so it
|
|
125
|
+
* never needs to survive the ~30s native ephemerality.
|
|
126
|
+
*/
|
|
127
|
+
function armDraftPacerTimer(key, draft) {
|
|
128
|
+
if (draft.pacerTimer)
|
|
129
|
+
clearTimeout(draft.pacerTimer);
|
|
130
|
+
const now = Date.now();
|
|
131
|
+
const backoffRemainder = Math.max(0, draft.backoffUntilMs - now);
|
|
132
|
+
const intervalRemainder = draft.lastSentAtMs === null
|
|
133
|
+
? 0
|
|
134
|
+
: Math.max(0, draft.lastSentAtMs + draftPacer_1.DRAFT_MIN_INTERVAL_MS - now);
|
|
135
|
+
// The pacer can only `send` once both the backoff and the interval clear.
|
|
136
|
+
const delay = Math.max(backoffRemainder, intervalRemainder);
|
|
137
|
+
draft.pacerTimer = setTimeout(() => {
|
|
138
|
+
draft.pacerTimer = null;
|
|
139
|
+
void runDraftPacer(key);
|
|
140
|
+
}, Math.max(delay, 0));
|
|
141
|
+
draft.pacerTimer.unref?.();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* @description Re-evaluate the pacer for the thread's current accumulated text
|
|
145
|
+
* and act: `send` fires a draft now; `skip`/`defer` re-arm the timer. No-op once
|
|
146
|
+
* the turn is inactive (a teardown / finalize cleared it).
|
|
147
|
+
*/
|
|
148
|
+
async function runDraftPacer(key) {
|
|
149
|
+
const draft = draftStreams.get((0, sessionKey_1.keyToString)(key));
|
|
150
|
+
if (!draft || !draft.active)
|
|
151
|
+
return;
|
|
152
|
+
const now = Date.now();
|
|
153
|
+
const action = (0, draftPacer_1.getDraftPaceAction)({
|
|
154
|
+
nextText: draft.accumulatedText,
|
|
155
|
+
lastSentText: draft.lastSentText,
|
|
156
|
+
nowMs: now,
|
|
157
|
+
lastSentAtMs: draft.lastSentAtMs,
|
|
158
|
+
minIntervalMs: draftPacer_1.DRAFT_MIN_INTERVAL_MS,
|
|
159
|
+
backoffUntilMs: draft.backoffUntilMs,
|
|
160
|
+
});
|
|
161
|
+
if (action === 'send') {
|
|
162
|
+
await sendDraftNow(key, draft);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// `skip` / `defer` → re-arm for the remaining interval / backoff.
|
|
166
|
+
armDraftPacerTimer(key, draft);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* @description Begin a fresh draft turn: allocate a new stable draft id (so this
|
|
170
|
+
* response animates separately from the previous one), reset the accumulator and
|
|
171
|
+
* pacing/idle state, and mark active. Called when a new response begins (a
|
|
172
|
+
* non-continuation output, or a forced new-message break) — the previous turn,
|
|
173
|
+
* if any, was finalized to a permanent message first.
|
|
174
|
+
*
|
|
175
|
+
* Opening the turn CONSUMES the `needsNewMessage` signal: the fresh draft IS the
|
|
176
|
+
* new message, so subsequent continuation tails extend it instead of being
|
|
177
|
+
* mis-read as another new response (in DM the draft path replaces the persist
|
|
178
|
+
* path that used to clear this flag on send).
|
|
179
|
+
*/
|
|
180
|
+
function startDraftTurn(key) {
|
|
181
|
+
const draft = getDraftStreamState(key);
|
|
182
|
+
clearDraftTimers(draft);
|
|
183
|
+
draft.draftId = (0, draftId_1.nextDraftId)(draft.draftId);
|
|
184
|
+
draft.accumulatedText = '';
|
|
185
|
+
draft.lastSentText = null;
|
|
186
|
+
draft.lastSentAtMs = null;
|
|
187
|
+
draft.lastFedAtMs = null;
|
|
188
|
+
draft.backoffUntilMs = 0;
|
|
189
|
+
draft.active = true;
|
|
190
|
+
deps.getThreadMessageState(key).needsNewMessage = false;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* @description Reset a draft turn to fully idle: clear timers + accumulator +
|
|
194
|
+
* pacing state and mark inactive. The shared tail of `finalizeDraft` (after the
|
|
195
|
+
* permanent message is sent) and of a defensive teardown.
|
|
196
|
+
*/
|
|
197
|
+
function resetDraftState(draft) {
|
|
198
|
+
clearDraftTimers(draft);
|
|
199
|
+
draft.active = false;
|
|
200
|
+
draft.accumulatedText = '';
|
|
201
|
+
draft.lastSentText = null;
|
|
202
|
+
draft.lastSentAtMs = null;
|
|
203
|
+
draft.lastFedAtMs = null;
|
|
204
|
+
draft.backoffUntilMs = 0;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* @description Arm (replacing any existing) the idle-finalize timer. It fires
|
|
208
|
+
* {@link FINALIZE_IDLE_MS} after this feed; if no newer output arrived in that
|
|
209
|
+
* window the accumulated draft is FINALIZED into a permanent message (a pause is
|
|
210
|
+
* a natural message boundary). Re-armed on every feed, so a steadily streaming
|
|
211
|
+
* reply never trips it.
|
|
212
|
+
*/
|
|
213
|
+
function armIdleFinalizeTimer(key, draft) {
|
|
214
|
+
if (draft.idleFinalizeTimer)
|
|
215
|
+
clearTimeout(draft.idleFinalizeTimer);
|
|
216
|
+
draft.idleFinalizeTimer = setTimeout(() => {
|
|
217
|
+
draft.idleFinalizeTimer = null;
|
|
218
|
+
const live = draftStreams.get((0, sessionKey_1.keyToString)(key));
|
|
219
|
+
if (!live)
|
|
220
|
+
return;
|
|
221
|
+
if (!(0, draftFinalize_1.checkShouldFinalizeOnIdle)(Date.now(), live.lastFedAtMs, live.active, draftFinalize_1.FINALIZE_IDLE_MS)) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
void finalizeDraft(key);
|
|
225
|
+
}, draftFinalize_1.FINALIZE_IDLE_MS);
|
|
226
|
+
draft.idleFinalizeTimer.unref?.();
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* @description Append `output` to the live draft's accumulator (S5 concat rule —
|
|
230
|
+
* mirroring what the eventual message holds), then pace the draft update and
|
|
231
|
+
* (re)arm the idle-finalize timer. The boundary router (`feedDraft`) calls this
|
|
232
|
+
* for the `append`/`overflow`-remainder/post-`finalizeThenStart` cases.
|
|
233
|
+
* `startsNewParagraph` (Claude only) upgrades a non-continuation join to a
|
|
234
|
+
* blank line so the live preview keeps the pane's paragraph structure.
|
|
235
|
+
*/
|
|
236
|
+
function appendToDraft(key, output, isContinuation, startsNewParagraph = false) {
|
|
237
|
+
const draft = getDraftStreamState(key);
|
|
238
|
+
draft.accumulatedText = (0, outputFlushPlan_1.appendPendingOutput)(draft.accumulatedText === '' ? null : draft.accumulatedText, output, isContinuation, startsNewParagraph);
|
|
239
|
+
draft.lastFedAtMs = Date.now();
|
|
240
|
+
void runDraftPacer(key);
|
|
241
|
+
armIdleFinalizeTimer(key, draft);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @description Finalize the active draft into a PERMANENT message and reset the
|
|
245
|
+
* turn. The accumulated text is the live cursor's full body; by construction
|
|
246
|
+
* (overflow boundary) it renders within one Telegram message, but the
|
|
247
|
+
* render-aware splitter is reused defensively so an edge over the cap still
|
|
248
|
+
* lands every chunk. After the message(s) are sent the draft state is fully
|
|
249
|
+
* reset (inactive, empty, timers cleared) so the NEXT output opens a fresh
|
|
250
|
+
* draft → a new message. Best-effort + idempotent: nothing accumulated, or no
|
|
251
|
+
* draft at all, is a no-op.
|
|
252
|
+
*/
|
|
253
|
+
async function finalizeDraft(key) {
|
|
254
|
+
const draft = draftStreams.get((0, sessionKey_1.keyToString)(key));
|
|
255
|
+
if (!draft)
|
|
256
|
+
return;
|
|
257
|
+
const text = draft.accumulatedText;
|
|
258
|
+
// Reset BEFORE the await so a concurrent feed opens a clean fresh turn rather
|
|
259
|
+
// than appending onto text we are about to ship as a permanent message.
|
|
260
|
+
resetDraftState(draft);
|
|
261
|
+
if (!text.trim())
|
|
262
|
+
return;
|
|
263
|
+
await deps.sendAgentChunks(key, deps.splitMessage(text, deps.maxMessageLength, measureDraftRenderedLength));
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* @description Spill an over-cap draft: split the accumulated text, finalize the
|
|
267
|
+
* leading chunk(s) as permanent message(s), and carry the LAST chunk (the
|
|
268
|
+
* remainder still under the cap) into a fresh draft so the live cursor continues
|
|
269
|
+
* below the finalized content. Called by `feedDraft` on the `overflow` boundary.
|
|
270
|
+
*/
|
|
271
|
+
async function spillDraftOverflow(key) {
|
|
272
|
+
const draft = getDraftStreamState(key);
|
|
273
|
+
const chunks = deps.splitMessage(draft.accumulatedText, deps.maxMessageLength, measureDraftRenderedLength);
|
|
274
|
+
// A single chunk means the render fit after all (e.g. an un-splittable token
|
|
275
|
+
// the splitter emitted whole) — nothing to spill, just keep streaming it.
|
|
276
|
+
if (chunks.length <= 1) {
|
|
277
|
+
void runDraftPacer(key);
|
|
278
|
+
armIdleFinalizeTimer(key, draft);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
// Move the cursor to the remainder SYNCHRONOUSLY before shipping the leading
|
|
282
|
+
// chunk(s): `leadingChunks` is captured in a local and a fresh draft holds only
|
|
283
|
+
// the remainder, so a concurrently-dispatched continuation appends onto the
|
|
284
|
+
// remainder draft (never onto text already being shipped). Without this, a feed
|
|
285
|
+
// arriving during the send below would re-read the un-reset accumulator and
|
|
286
|
+
// re-spill the same leading chunk (duplicate send) or be wiped (lost text).
|
|
287
|
+
// Same invariant as feedDraft: no draft-state mutation AFTER the await.
|
|
288
|
+
const leadingChunks = chunks.slice(0, -1);
|
|
289
|
+
const remainder = chunks[chunks.length - 1];
|
|
290
|
+
startDraftTurn(key);
|
|
291
|
+
appendToDraft(key, remainder, /* isContinuation */ true);
|
|
292
|
+
await deps.sendAgentChunks(key, leadingChunks);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* @description Feed the live draft with one `output` event and route it through
|
|
296
|
+
* the boundary decision ({@link getDraftFeedAction}):
|
|
297
|
+
*
|
|
298
|
+
* - `finalizeThenStart` — a new response began while a draft was active:
|
|
299
|
+
* finalize the previous draft to a permanent message, then open a fresh turn
|
|
300
|
+
* for this output;
|
|
301
|
+
* - `finalize` — the turn's last frame (`isFinal`): append, then finalize and do
|
|
302
|
+
* NOT reopen a draft;
|
|
303
|
+
* - `overflow` — appending makes the render cross the cap: append, then spill
|
|
304
|
+
* the full chunk(s) to permanent message(s) and continue in a new draft;
|
|
305
|
+
* - `append` — ordinary streaming tail: grow the draft, pace it, re-arm idle.
|
|
306
|
+
*
|
|
307
|
+
* Async because a boundary may send a permanent message; the caller calls it
|
|
308
|
+
* fire-and-forget. Lazily opens a turn if none is active.
|
|
309
|
+
*/
|
|
310
|
+
async function feedDraft(key, output, isContinuation, isFinal, startsNewParagraph = false) {
|
|
311
|
+
const draft = getDraftStreamState(key);
|
|
312
|
+
const needsNewMessage = deps.getThreadMessageState(key).needsNewMessage;
|
|
313
|
+
// The text the draft WOULD hold after this output: for a continuation into a
|
|
314
|
+
// live draft it extends the accumulator (so the overflow check measures the
|
|
315
|
+
// real combined length); otherwise the new turn starts from just this output.
|
|
316
|
+
const isAppendingContinuation = draft.active && isContinuation && !needsNewMessage;
|
|
317
|
+
const prospective = isAppendingContinuation
|
|
318
|
+
? (0, outputFlushPlan_1.appendPendingOutput)(draft.accumulatedText || null, output, true)
|
|
319
|
+
: output;
|
|
320
|
+
const action = (0, draftFinalize_1.getDraftFeedAction)({
|
|
321
|
+
isDraftActive: draft.active,
|
|
322
|
+
isContinuation,
|
|
323
|
+
needsNewMessage,
|
|
324
|
+
isFinal,
|
|
325
|
+
prospectiveRenderedLength: measureDraftRenderedLength(prospective),
|
|
326
|
+
renderedCap: deps.maxMessageLength,
|
|
327
|
+
});
|
|
328
|
+
if (action === 'finalizeThenStart') {
|
|
329
|
+
// SYNCHRONOUS reset→restart, no await between: finalizeDraft snapshots the old
|
|
330
|
+
// text and resets state synchronously BEFORE its network send (which then ships
|
|
331
|
+
// fire-and-forget, ordered by the per-thread send FIFO), so opening the new turn
|
|
332
|
+
// immediately runs in one stack. A concurrently-dispatched output event therefore
|
|
333
|
+
// cannot interleave at an await and be wiped by this startDraftTurn. Invariant for
|
|
334
|
+
// this whole family of functions: no draft-state mutation AFTER an await.
|
|
335
|
+
void finalizeDraft(key);
|
|
336
|
+
startDraftTurn(key);
|
|
337
|
+
appendToDraft(key, output, /* isContinuation */ false);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (!draft.active)
|
|
341
|
+
startDraftTurn(key);
|
|
342
|
+
if (action === 'finalize') {
|
|
343
|
+
appendToDraft(key, output, isContinuation, startsNewParagraph);
|
|
344
|
+
await finalizeDraft(key);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
appendToDraft(key, output, isContinuation, startsNewParagraph);
|
|
348
|
+
if (action === 'overflow')
|
|
349
|
+
await spillDraftOverflow(key);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* @description Route one DM `output` event to its message path:
|
|
353
|
+
* • streaming tail (not a one-shot, not a sub-agent) on a draft-capable
|
|
354
|
+
* adapter → the draft manager is the SOLE output→message path;
|
|
355
|
+
* • complete one-shot (`isComplete`) → finalize any live draft first (keeps
|
|
356
|
+
* order), then post it straight as a permanent message (no draft animation);
|
|
357
|
+
* • otherwise (e.g. Claude DM baseline) → the original `queueOutput` path.
|
|
358
|
+
*/
|
|
359
|
+
function deliverOutput(key, output, meta) {
|
|
360
|
+
const isFinal = meta?.isFinal === true;
|
|
361
|
+
const isComplete = meta?.isComplete === true;
|
|
362
|
+
// Claude reports out-of-band that the pane had a paragraph break before this
|
|
363
|
+
// chunk; the draft / baseline join rebuilds the `\n\n` separator so the live
|
|
364
|
+
// preview matches the persisted message (ignored when starting a new turn).
|
|
365
|
+
const startsNewParagraph = meta?.startsNewParagraph === true;
|
|
366
|
+
// For a delta-emitting backend (Claude scrape) the meta carries no
|
|
367
|
+
// continuation, but each poll's prose delta continues the same answer — so
|
|
368
|
+
// accumulate it into the live draft. The real turn boundaries come from
|
|
369
|
+
// `needsNewMessage` / idle / overflow / isFinal, which `feedDraft` honours.
|
|
370
|
+
const isContinuation = (0, draftFinalize_1.getDmDraftContinuation)(meta?.isContinuation === true, deps.checkOutputsDeltas(key));
|
|
371
|
+
if ((0, draftPacer_1.checkShouldStreamAsDraft)(true, meta) && deps.checkSupportsDraft(key)) {
|
|
372
|
+
void feedDraft(key, output, isContinuation, isFinal, startsNewParagraph);
|
|
373
|
+
}
|
|
374
|
+
else if (isComplete) {
|
|
375
|
+
void (async () => {
|
|
376
|
+
await finalizeDraft(key);
|
|
377
|
+
await deps.sendAgentChunks(key, deps.splitMessage(output, deps.maxMessageLength, measureDraftRenderedLength));
|
|
378
|
+
})();
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
deps.queueOutput(key, output, isContinuation, isFinal, isComplete, startsNewParagraph);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
deliverOutput,
|
|
386
|
+
finalizeInFlight: (key) => finalizeDraft(key),
|
|
387
|
+
disposeThread(key) {
|
|
388
|
+
// `finalizeInFlight` (the teardown convergence point) already finalized any
|
|
389
|
+
// accumulated draft text (synchronously capturing it + clearing the timers);
|
|
390
|
+
// drop the now-reset map entry so it doesn't leak across a rebind.
|
|
391
|
+
draftStreams.delete((0, sessionKey_1.keyToString)(key));
|
|
392
|
+
},
|
|
393
|
+
// Peek WITHOUT creating state: a thread with no draft is trivially not
|
|
394
|
+
// streaming. While `active`, the Claude liveness loop must stay noop so its
|
|
395
|
+
// heartbeat can't insert a status frame between prose deltas (which would
|
|
396
|
+
// trip `needsNewMessage` and finalize the draft mid-answer).
|
|
397
|
+
checkIsStreaming(key) {
|
|
398
|
+
return draftStreams.get((0, sessionKey_1.keyToString)(key))?.active === true;
|
|
399
|
+
},
|
|
400
|
+
// Threads with an active draft turn — the shutdown flush finalizes each so
|
|
401
|
+
// the live draft's accumulated text lands as a permanent message before exit.
|
|
402
|
+
getInFlightThreadKeys() {
|
|
403
|
+
const keys = [];
|
|
404
|
+
for (const [keyStr, draft] of draftStreams) {
|
|
405
|
+
if (draft.active)
|
|
406
|
+
keys.push((0, sessionKey_1.keyFromString)(keyStr));
|
|
407
|
+
}
|
|
408
|
+
return keys;
|
|
409
|
+
},
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=dmOutputTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dmOutputTransport.js","sourceRoot":"","sources":["../../../../src/connectors/telegram/output/dmOutputTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure backlog-glue for the per-topic send queue (S2b).
|
|
3
|
+
*
|
|
4
|
+
* When a topic BACKS UP — the global 1/2s send pacer (S1) leaves ≥3 messages
|
|
5
|
+
* waiting to send for one topic — a per-2s trickle reads badly. This collapses
|
|
6
|
+
* that backlog into ONE message (frames joined by a blank line, `\n\n`) so the
|
|
7
|
+
* burst drains in a single send. 1–2 pending frames stay separate (snappy).
|
|
8
|
+
*
|
|
9
|
+
* The join+threshold is a pure, Telegraf-free helper (mirrors
|
|
10
|
+
* `utils/outputFlushPlan.ts` / `utils/groupFinalizePlan.ts`): input = ordered
|
|
11
|
+
* pending frames, output = the fewest messages that fit, each ≤ the cap, frames
|
|
12
|
+
* joined by `\n\n`. Per-topic only — cross-topic messages carry distinct
|
|
13
|
+
* `message_thread_id`s and can never merge, so "in one chat" ⇒ "in one topic's
|
|
14
|
+
* queue".
|
|
15
|
+
*
|
|
16
|
+
* Splitting reuses {@link splitMessage}: it already emits the fewest chunks that
|
|
17
|
+
* fit, preferring newline boundaries (so a glued block breaks on the `\n\n`
|
|
18
|
+
* frame boundaries, never mid-line) and honouring the rendered-length cap when a
|
|
19
|
+
* measure is supplied.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @description Glue threshold: a topic's pending-send backlog collapses only at
|
|
23
|
+
* this many frames or more. Below it, frames stay separate for snappiness.
|
|
24
|
+
*/
|
|
25
|
+
export declare const backlogGlueThreshold = 3;
|
|
26
|
+
/**
|
|
27
|
+
* @description Collapse a topic's ordered pending frames into the fewest
|
|
28
|
+
* `\n\n`-joined messages when the backlog is ≥ {@link backlogGlueThreshold};
|
|
29
|
+
* otherwise return the frames unchanged (1–2 stay separate).
|
|
30
|
+
*
|
|
31
|
+
* @param frames Ordered pending frames (each already a would-be single message).
|
|
32
|
+
* @param maxLen Per-message source-length cap (default {@link MAX_MESSAGE_LEN}).
|
|
33
|
+
* @param measureRendered Optional rendered-length measure; when supplied the
|
|
34
|
+
* split also keeps each message's RENDERED length within Telegram's cap (same
|
|
35
|
+
* contract as {@link splitMessage}). Omit for plain source-length splitting.
|
|
36
|
+
*/
|
|
37
|
+
export declare function glueBacklogFrames(frames: string[], maxLen?: number, measureRendered?: (chunk: string) => number): string[];
|
|
38
|
+
//# sourceMappingURL=outputBacklogGlue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputBacklogGlue.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/outputBacklogGlue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAKtC;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,GAAE,MAAwB,EAChC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAC1C,MAAM,EAAE,CAGV"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure backlog-glue for the per-topic send queue (S2b).
|
|
4
|
+
*
|
|
5
|
+
* When a topic BACKS UP — the global 1/2s send pacer (S1) leaves ≥3 messages
|
|
6
|
+
* waiting to send for one topic — a per-2s trickle reads badly. This collapses
|
|
7
|
+
* that backlog into ONE message (frames joined by a blank line, `\n\n`) so the
|
|
8
|
+
* burst drains in a single send. 1–2 pending frames stay separate (snappy).
|
|
9
|
+
*
|
|
10
|
+
* The join+threshold is a pure, Telegraf-free helper (mirrors
|
|
11
|
+
* `utils/outputFlushPlan.ts` / `utils/groupFinalizePlan.ts`): input = ordered
|
|
12
|
+
* pending frames, output = the fewest messages that fit, each ≤ the cap, frames
|
|
13
|
+
* joined by `\n\n`. Per-topic only — cross-topic messages carry distinct
|
|
14
|
+
* `message_thread_id`s and can never merge, so "in one chat" ⇒ "in one topic's
|
|
15
|
+
* queue".
|
|
16
|
+
*
|
|
17
|
+
* Splitting reuses {@link splitMessage}: it already emits the fewest chunks that
|
|
18
|
+
* fit, preferring newline boundaries (so a glued block breaks on the `\n\n`
|
|
19
|
+
* frame boundaries, never mid-line) and honouring the rendered-length cap when a
|
|
20
|
+
* measure is supplied.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.backlogGlueThreshold = void 0;
|
|
24
|
+
exports.glueBacklogFrames = glueBacklogFrames;
|
|
25
|
+
const messageSplit_1 = require("./messageSplit");
|
|
26
|
+
/**
|
|
27
|
+
* @description Glue threshold: a topic's pending-send backlog collapses only at
|
|
28
|
+
* this many frames or more. Below it, frames stay separate for snappiness.
|
|
29
|
+
*/
|
|
30
|
+
exports.backlogGlueThreshold = 3;
|
|
31
|
+
/** Blank-line separator between glued frames. */
|
|
32
|
+
const frameSeparator = '\n\n';
|
|
33
|
+
/**
|
|
34
|
+
* @description Collapse a topic's ordered pending frames into the fewest
|
|
35
|
+
* `\n\n`-joined messages when the backlog is ≥ {@link backlogGlueThreshold};
|
|
36
|
+
* otherwise return the frames unchanged (1–2 stay separate).
|
|
37
|
+
*
|
|
38
|
+
* @param frames Ordered pending frames (each already a would-be single message).
|
|
39
|
+
* @param maxLen Per-message source-length cap (default {@link MAX_MESSAGE_LEN}).
|
|
40
|
+
* @param measureRendered Optional rendered-length measure; when supplied the
|
|
41
|
+
* split also keeps each message's RENDERED length within Telegram's cap (same
|
|
42
|
+
* contract as {@link splitMessage}). Omit for plain source-length splitting.
|
|
43
|
+
*/
|
|
44
|
+
function glueBacklogFrames(frames, maxLen = messageSplit_1.MAX_MESSAGE_LEN, measureRendered) {
|
|
45
|
+
if (frames.length < exports.backlogGlueThreshold)
|
|
46
|
+
return frames;
|
|
47
|
+
return (0, messageSplit_1.splitMessage)(frames.join(frameSeparator), maxLen, measureRendered);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=outputBacklogGlue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputBacklogGlue.js","sourceRoot":"","sources":["../../../src/connectors/telegram/outputBacklogGlue.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAwBH,8CAOC;AA7BD,iDAA+D;AAE/D;;;GAGG;AACU,QAAA,oBAAoB,GAAG,CAAC,CAAC;AAEtC,iDAAiD;AACjD,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAC/B,MAAgB,EAChB,SAAiB,8BAAe,EAChC,eAA2C;IAE3C,IAAI,MAAM,CAAC,MAAM,GAAG,4BAAoB;QAAE,OAAO,MAAM,CAAC;IACxD,OAAO,IAAA,2BAAY,EAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure planning logic for flushing agent `output` to Telegram —
|
|
3
|
+
* extracted from `bot.ts` so the streaming-append decision is unit-testable
|
|
4
|
+
* without booting Telegraf.
|
|
5
|
+
*
|
|
6
|
+
* Live repro 2026-06-05: OpenCode emits a long reply
|
|
7
|
+
* as incremental tails, and the bot edited the SAME message with only the
|
|
8
|
+
* newest batch each flush — every edit replaced everything before it, so the
|
|
9
|
+
* user could read only the last tail. The fix: a continuation tail is
|
|
10
|
+
* appended to the text already rendered into the last message and the FULL
|
|
11
|
+
* combined text is re-rendered (also re-pairing markdown tokens that straddle
|
|
12
|
+
* two flushes), spilling into new messages when it outgrows the Telegram cap.
|
|
13
|
+
*/
|
|
14
|
+
export interface OutputFlushInput {
|
|
15
|
+
/** The batch of output text to flush (already debounce-coalesced). */
|
|
16
|
+
output: string;
|
|
17
|
+
/** True when `output` continues the text already sent to `lastMessageId`. */
|
|
18
|
+
isContinuation: boolean;
|
|
19
|
+
/** Thread flag: next output must start a new message (user prompt, etc.). */
|
|
20
|
+
needsNewMessage: boolean;
|
|
21
|
+
/** Id of the last agent message in the thread, if editable. */
|
|
22
|
+
lastMessageId: number | null;
|
|
23
|
+
/** Source (pre-render) text currently shown in `lastMessageId`. */
|
|
24
|
+
lastMessageText: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface OutputFlushPlan {
|
|
27
|
+
/** Telegram-sized chunks covering the full (possibly combined) text. */
|
|
28
|
+
chunks: string[];
|
|
29
|
+
/**
|
|
30
|
+
* True → `chunks[0]` re-edits `lastMessageId` in place (append semantics);
|
|
31
|
+
* remaining chunks send as new messages. False → every chunk sends new.
|
|
32
|
+
*/
|
|
33
|
+
shouldEditFirstChunk: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description Decide how a flush lands in Telegram. Append-edit is possible
|
|
37
|
+
* only when the batch is a continuation AND the last message is still
|
|
38
|
+
* editable (id + source text known, no forced break since).
|
|
39
|
+
*/
|
|
40
|
+
export declare function getOutputFlushPlan(input: OutputFlushInput): OutputFlushPlan;
|
|
41
|
+
/**
|
|
42
|
+
* @description The effective continuation flag the GROUP output path should use
|
|
43
|
+
* for an incoming `output`, accounting for adapters that stream WITHOUT marking
|
|
44
|
+
* continuations (the Claude scrape adapter).
|
|
45
|
+
*
|
|
46
|
+
* OpenCode marks every tail except a response's first with `meta.isContinuation`,
|
|
47
|
+
* so the group edit-in-place path already knows which outputs extend the last
|
|
48
|
+
* message; for it (`outputsDeltas === false`) the meta flag passes through
|
|
49
|
+
* unchanged. The Claude scrape adapter emits each poll's prose delta with NO
|
|
50
|
+
* meta even though every delta CONTINUES the same block — treating those as
|
|
51
|
+
* non-continuations made `getOutputFlushPlan` start a new message per poll flush
|
|
52
|
+
* (the one-message-per-scrape flood, and every re-flowed table width its own
|
|
53
|
+
* message).
|
|
54
|
+
*
|
|
55
|
+
* For a delta-emitting adapter a poll delta is therefore a CONTINUATION (it
|
|
56
|
+
* edits the growing message in place) UNLESS the pane had a real block boundary
|
|
57
|
+
* before it — a blank-line paragraph break or a distinct block (a settled
|
|
58
|
+
* table), both surfaced out-of-band as `startsNewParagraph`. At such a boundary
|
|
59
|
+
* the delta starts a NEW message (the locked boundary rule: a new message begins
|
|
60
|
+
* only at a paragraph/section, a distinct block, or a fresh turn — the last via
|
|
61
|
+
* `needsNewMessage`, which `getOutputFlushPlan` already honours). Unlike the DM
|
|
62
|
+
* cursor (one accumulating draft → everything is a continuation,
|
|
63
|
+
* {@link getDmDraftContinuation}), group renders discrete messages, so a
|
|
64
|
+
* paragraph/block boundary must break the message, not glue onto it.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getGroupDeltaContinuation(metaIsContinuation: boolean, outputsDeltas: boolean, startsNewParagraph: boolean): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* @description Coalesce a new output batch into the pending (not yet flushed)
|
|
69
|
+
* buffer. Continuation tails concatenate as-is — they may be cut mid-word, a
|
|
70
|
+
* `\n` would split the word across lines. DISTINCT standalone outputs join with
|
|
71
|
+
* a single `\n` by default, UPGRADED to a BLANK LINE (`\n\n`) only when
|
|
72
|
+
* `startsNewParagraph` is set — the Claude scrape adapter reports out-of-band
|
|
73
|
+
* (`OutboundHints.startsNewParagraph`) when the pane had a real paragraph
|
|
74
|
+
* break before the chunk, so multi-paragraph answers keep their structure while
|
|
75
|
+
* a single wrapped paragraph spanning two polls is NOT split by a blank.
|
|
76
|
+
*/
|
|
77
|
+
export declare function appendPendingOutput(pending: string | null, output: string, isContinuation: boolean, startsNewParagraph?: boolean): string;
|
|
78
|
+
/**
|
|
79
|
+
* @description Compute the text that must be RE-ENQUEUED after a flush where one
|
|
80
|
+
* or more chunks failed to send (live incident 2026-06-11, plan
|
|
81
|
+
* `2026-06-11-claude-wide-table-content-loss` S2: `replyChunkWithFallback`
|
|
82
|
+
* returns `null` when a chunk is dropped on a 429 after the rate-limit queue
|
|
83
|
+
* gives up; the buffer was already cleared, so the chunk was permanently lost).
|
|
84
|
+
*
|
|
85
|
+
* `sentCount` is the number of chunks that landed, counting from the FRONT of
|
|
86
|
+
* `chunks` (sends are in order, so a failure stops the run and everything from
|
|
87
|
+
* the first failure onward is un-sent). Returns the rejoined un-sent remainder,
|
|
88
|
+
* or `null` when everything landed. Idempotent: re-flushing the remainder never
|
|
89
|
+
* re-sends a landed chunk because those are excluded here. Pure + exported for
|
|
90
|
+
* unit tests.
|
|
91
|
+
*/
|
|
92
|
+
export declare function getUnsentRemainder(chunks: string[], sentCount: number): string | null;
|
|
93
|
+
//# sourceMappingURL=outputFlushPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputFlushPlan.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/outputFlushPlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mEAAmE;IACnE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe,CAgB3E;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,OAAO,EAC3B,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,kBAAkB,UAAQ,GACzB,MAAM,CAIR;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrF"}
|