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,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure planning logic for flushing agent `output` to Telegram —
|
|
4
|
+
* extracted from `bot.ts` so the streaming-append decision is unit-testable
|
|
5
|
+
* without booting Telegraf.
|
|
6
|
+
*
|
|
7
|
+
* Live repro 2026-06-05: OpenCode emits a long reply
|
|
8
|
+
* as incremental tails, and the bot edited the SAME message with only the
|
|
9
|
+
* newest batch each flush — every edit replaced everything before it, so the
|
|
10
|
+
* user could read only the last tail. The fix: a continuation tail is
|
|
11
|
+
* appended to the text already rendered into the last message and the FULL
|
|
12
|
+
* combined text is re-rendered (also re-pairing markdown tokens that straddle
|
|
13
|
+
* two flushes), spilling into new messages when it outgrows the Telegram cap.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.getOutputFlushPlan = getOutputFlushPlan;
|
|
17
|
+
exports.getGroupDeltaContinuation = getGroupDeltaContinuation;
|
|
18
|
+
exports.appendPendingOutput = appendPendingOutput;
|
|
19
|
+
exports.getUnsentRemainder = getUnsentRemainder;
|
|
20
|
+
const messageSplit_1 = require("./messageSplit");
|
|
21
|
+
const renderAgentHtml_1 = require("./renderAgentHtml");
|
|
22
|
+
/** Inject the real render into the splitter so chunks are sized by their
|
|
23
|
+
* rendered HTML length (escaping + tags inflate the source past Telegram's
|
|
24
|
+
* cap), keeping `messageSplit.ts` dependency-free. */
|
|
25
|
+
const measureRenderedLength = (chunk) => (0, renderAgentHtml_1.renderAgentHtml)(chunk).length;
|
|
26
|
+
/**
|
|
27
|
+
* @description Decide how a flush lands in Telegram. Append-edit is possible
|
|
28
|
+
* only when the batch is a continuation AND the last message is still
|
|
29
|
+
* editable (id + source text known, no forced break since).
|
|
30
|
+
*/
|
|
31
|
+
function getOutputFlushPlan(input) {
|
|
32
|
+
const canAppend = input.isContinuation &&
|
|
33
|
+
!input.needsNewMessage &&
|
|
34
|
+
input.lastMessageId !== null &&
|
|
35
|
+
input.lastMessageText !== null;
|
|
36
|
+
if (!canAppend) {
|
|
37
|
+
return {
|
|
38
|
+
chunks: (0, messageSplit_1.splitMessage)(input.output, undefined, measureRenderedLength),
|
|
39
|
+
shouldEditFirstChunk: false,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
chunks: (0, messageSplit_1.splitMessage)(input.lastMessageText + input.output, undefined, measureRenderedLength),
|
|
44
|
+
shouldEditFirstChunk: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @description The effective continuation flag the GROUP output path should use
|
|
49
|
+
* for an incoming `output`, accounting for adapters that stream WITHOUT marking
|
|
50
|
+
* continuations (the Claude scrape adapter).
|
|
51
|
+
*
|
|
52
|
+
* OpenCode marks every tail except a response's first with `meta.isContinuation`,
|
|
53
|
+
* so the group edit-in-place path already knows which outputs extend the last
|
|
54
|
+
* message; for it (`outputsDeltas === false`) the meta flag passes through
|
|
55
|
+
* unchanged. The Claude scrape adapter emits each poll's prose delta with NO
|
|
56
|
+
* meta even though every delta CONTINUES the same block — treating those as
|
|
57
|
+
* non-continuations made `getOutputFlushPlan` start a new message per poll flush
|
|
58
|
+
* (the one-message-per-scrape flood, and every re-flowed table width its own
|
|
59
|
+
* message).
|
|
60
|
+
*
|
|
61
|
+
* For a delta-emitting adapter a poll delta is therefore a CONTINUATION (it
|
|
62
|
+
* edits the growing message in place) UNLESS the pane had a real block boundary
|
|
63
|
+
* before it — a blank-line paragraph break or a distinct block (a settled
|
|
64
|
+
* table), both surfaced out-of-band as `startsNewParagraph`. At such a boundary
|
|
65
|
+
* the delta starts a NEW message (the locked boundary rule: a new message begins
|
|
66
|
+
* only at a paragraph/section, a distinct block, or a fresh turn — the last via
|
|
67
|
+
* `needsNewMessage`, which `getOutputFlushPlan` already honours). Unlike the DM
|
|
68
|
+
* cursor (one accumulating draft → everything is a continuation,
|
|
69
|
+
* {@link getDmDraftContinuation}), group renders discrete messages, so a
|
|
70
|
+
* paragraph/block boundary must break the message, not glue onto it.
|
|
71
|
+
*/
|
|
72
|
+
function getGroupDeltaContinuation(metaIsContinuation, outputsDeltas, startsNewParagraph) {
|
|
73
|
+
if (!outputsDeltas)
|
|
74
|
+
return metaIsContinuation;
|
|
75
|
+
return !startsNewParagraph;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description Coalesce a new output batch into the pending (not yet flushed)
|
|
79
|
+
* buffer. Continuation tails concatenate as-is — they may be cut mid-word, a
|
|
80
|
+
* `\n` would split the word across lines. DISTINCT standalone outputs join with
|
|
81
|
+
* a single `\n` by default, UPGRADED to a BLANK LINE (`\n\n`) only when
|
|
82
|
+
* `startsNewParagraph` is set — the Claude scrape adapter reports out-of-band
|
|
83
|
+
* (`OutboundHints.startsNewParagraph`) when the pane had a real paragraph
|
|
84
|
+
* break before the chunk, so multi-paragraph answers keep their structure while
|
|
85
|
+
* a single wrapped paragraph spanning two polls is NOT split by a blank.
|
|
86
|
+
*/
|
|
87
|
+
function appendPendingOutput(pending, output, isContinuation, startsNewParagraph = false) {
|
|
88
|
+
if (!pending)
|
|
89
|
+
return output;
|
|
90
|
+
if (isContinuation)
|
|
91
|
+
return pending + output;
|
|
92
|
+
return startsNewParagraph ? `${pending}\n\n${output}` : `${pending}\n${output}`;
|
|
93
|
+
}
|
|
94
|
+
/** Separator used to re-join un-sent chunks before re-enqueueing them (S2). The
|
|
95
|
+
* planner re-splits the rejoined text next flush, so a blank line keeps the
|
|
96
|
+
* chunk boundary readable without gluing two messages together. */
|
|
97
|
+
const unsentRemainderSeparator = '\n\n';
|
|
98
|
+
/**
|
|
99
|
+
* @description Compute the text that must be RE-ENQUEUED after a flush where one
|
|
100
|
+
* or more chunks failed to send (live incident 2026-06-11, plan
|
|
101
|
+
* `2026-06-11-claude-wide-table-content-loss` S2: `replyChunkWithFallback`
|
|
102
|
+
* returns `null` when a chunk is dropped on a 429 after the rate-limit queue
|
|
103
|
+
* gives up; the buffer was already cleared, so the chunk was permanently lost).
|
|
104
|
+
*
|
|
105
|
+
* `sentCount` is the number of chunks that landed, counting from the FRONT of
|
|
106
|
+
* `chunks` (sends are in order, so a failure stops the run and everything from
|
|
107
|
+
* the first failure onward is un-sent). Returns the rejoined un-sent remainder,
|
|
108
|
+
* or `null` when everything landed. Idempotent: re-flushing the remainder never
|
|
109
|
+
* re-sends a landed chunk because those are excluded here. Pure + exported for
|
|
110
|
+
* unit tests.
|
|
111
|
+
*/
|
|
112
|
+
function getUnsentRemainder(chunks, sentCount) {
|
|
113
|
+
if (sentCount >= chunks.length)
|
|
114
|
+
return null;
|
|
115
|
+
const remainder = chunks.slice(sentCount);
|
|
116
|
+
if (remainder.length === 0)
|
|
117
|
+
return null;
|
|
118
|
+
return remainder.join(unsentRemainderSeparator);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=outputFlushPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputFlushPlan.js","sourceRoot":"","sources":["../../../src/connectors/telegram/outputFlushPlan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAsCH,gDAgBC;AA2BD,8DAOC;AAYD,kDASC;AAqBD,gDAKC;AArID,iDAA8C;AAC9C,uDAAoD;AAEpD;;uDAEuD;AACvD,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAA,iCAAe,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAyBvF;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAAuB;IACxD,MAAM,SAAS,GACb,KAAK,CAAC,cAAc;QACpB,CAAC,KAAK,CAAC,eAAe;QACtB,KAAK,CAAC,aAAa,KAAK,IAAI;QAC5B,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,IAAA,2BAAY,EAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,qBAAqB,CAAC;YACpE,oBAAoB,EAAE,KAAK;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,IAAA,2BAAY,EAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,qBAAqB,CAAC;QAC5F,oBAAoB,EAAE,IAAI;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,yBAAyB,CACvC,kBAA2B,EAC3B,aAAsB,EACtB,kBAA2B;IAE3B,IAAI,CAAC,aAAa;QAAE,OAAO,kBAAkB,CAAC;IAC9C,OAAO,CAAC,kBAAkB,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,OAAsB,EACtB,MAAc,EACd,cAAuB,EACvB,kBAAkB,GAAG,KAAK;IAE1B,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5B,IAAI,cAAc;QAAE,OAAO,OAAO,GAAG,MAAM,CAAC;IAC5C,OAAO,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;AAClF,CAAC;AAED;;oEAEoE;AACpE,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,SAAgB,kBAAkB,CAAC,MAAgB,EAAE,SAAiB;IACpE,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The inline keyboard of a pending question's options and the `extra` object a send carries it in.
|
|
3
|
+
*/
|
|
4
|
+
import type { InlineKeyboardMarkup } from 'telegraf/typings/core/types/typegram';
|
|
5
|
+
import type { OpenCodeQuestion } from '../../types';
|
|
6
|
+
/**
|
|
7
|
+
* @description Build the tappable keyboard for an OpenCode question's options.
|
|
8
|
+
*
|
|
9
|
+
* The bot offers a question's options twice with different callback wiring —
|
|
10
|
+
* the live answer buttons (`qa_<qIdx>_<optIdx>`) and the idle-compaction re-ask
|
|
11
|
+
* buttons (`reask_<optIdx>`) — so `buildCallbackId` is the only thing that
|
|
12
|
+
* varies. Labels are passed through untouched: the button width cap and its
|
|
13
|
+
* elision are Telegram's, and belong to the connector's
|
|
14
|
+
* {@link buildOptionsKeyboard}, not here.
|
|
15
|
+
*
|
|
16
|
+
* `buildCallbackId` must produce an id the matching `bot.action` regex accepts.
|
|
17
|
+
* The index it receives is the 0-based position in `question.options`; the body
|
|
18
|
+
* shows that option as `index + 1`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildQuestionOptionsKeyboard(question: OpenCodeQuestion, buildCallbackId: (optionIndex: number) => string): InlineKeyboardMarkup | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* @description Attach an optional inline keyboard to a {@link replyToThread}
|
|
23
|
+
* `extra`.
|
|
24
|
+
*
|
|
25
|
+
* One place owns the `reply_markup` spelling, because getting it wrong fails
|
|
26
|
+
* SILENTLY: the message still sends, just with no buttons, and Telegram reports
|
|
27
|
+
* nothing. `base` carries whatever else the send needs (a `parse_mode`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildKeyboardExtra(keyboard: InlineKeyboardMarkup | undefined, base?: Record<string, unknown>): Record<string, unknown>;
|
|
30
|
+
//# sourceMappingURL=questionKeyboards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionKeyboards.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/questionKeyboards.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAC/C,oBAAoB,GAAG,SAAS,CAOlC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,EAC1C,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildQuestionOptionsKeyboard = buildQuestionOptionsKeyboard;
|
|
4
|
+
exports.buildKeyboardExtra = buildKeyboardExtra;
|
|
5
|
+
const outbound_1 = require("./outbound");
|
|
6
|
+
/**
|
|
7
|
+
* @description Build the tappable keyboard for an OpenCode question's options.
|
|
8
|
+
*
|
|
9
|
+
* The bot offers a question's options twice with different callback wiring —
|
|
10
|
+
* the live answer buttons (`qa_<qIdx>_<optIdx>`) and the idle-compaction re-ask
|
|
11
|
+
* buttons (`reask_<optIdx>`) — so `buildCallbackId` is the only thing that
|
|
12
|
+
* varies. Labels are passed through untouched: the button width cap and its
|
|
13
|
+
* elision are Telegram's, and belong to the connector's
|
|
14
|
+
* {@link buildOptionsKeyboard}, not here.
|
|
15
|
+
*
|
|
16
|
+
* `buildCallbackId` must produce an id the matching `bot.action` regex accepts.
|
|
17
|
+
* The index it receives is the 0-based position in `question.options`; the body
|
|
18
|
+
* shows that option as `index + 1`.
|
|
19
|
+
*/
|
|
20
|
+
function buildQuestionOptionsKeyboard(question, buildCallbackId) {
|
|
21
|
+
return (0, outbound_1.buildOptionsKeyboard)(question.options.map((option, optionIndex) => ({
|
|
22
|
+
id: buildCallbackId(optionIndex),
|
|
23
|
+
label: option.label,
|
|
24
|
+
})));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @description Attach an optional inline keyboard to a {@link replyToThread}
|
|
28
|
+
* `extra`.
|
|
29
|
+
*
|
|
30
|
+
* One place owns the `reply_markup` spelling, because getting it wrong fails
|
|
31
|
+
* SILENTLY: the message still sends, just with no buttons, and Telegram reports
|
|
32
|
+
* nothing. `base` carries whatever else the send needs (a `parse_mode`).
|
|
33
|
+
*/
|
|
34
|
+
function buildKeyboardExtra(keyboard, base = {}) {
|
|
35
|
+
return keyboard ? { ...base, reply_markup: keyboard } : { ...base };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=questionKeyboards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionKeyboards.js","sourceRoot":"","sources":["../../../src/connectors/telegram/questionKeyboards.ts"],"names":[],"mappings":";;AAqBA,oEAUC;AAUD,gDAKC;AAzCD,yCAAkD;AAElD;;;;;;;;;;;;;GAaG;AACH,SAAgB,4BAA4B,CAC1C,QAA0B,EAC1B,eAAgD;IAEhD,OAAO,IAAA,+BAAoB,EACzB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7C,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,QAA0C,EAC1C,OAAgC,EAAE;IAElC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Render the agent adapters' "markdown-ish" output
|
|
3
|
+
* (`*bold*`, `**bold**`, `# headings`, `` `inline` ``, ```` ```fenced``` ````,
|
|
4
|
+
* `[text](url)`) into Telegram **HTML**.
|
|
5
|
+
*
|
|
6
|
+
* Why HTML instead of the legacy Markdown path: Telegram's classic Markdown
|
|
7
|
+
* drops the WHOLE message to unformatted plain text on a single stray `*` or
|
|
8
|
+
* an unbalanced backtick — this is the live "git diff shows literal ``` ``` ```
|
|
9
|
+
* ``` characters" bug. HTML's only specials are `& < >`, so lone punctuation is
|
|
10
|
+
* inert and fenced code / diffs render as real monospaced blocks.
|
|
11
|
+
*
|
|
12
|
+
* Used ONLY for streamed agent output + status frames. Bot-authored `t(...)`
|
|
13
|
+
* templates keep their legacy Markdown rendering — they don't have the bug.
|
|
14
|
+
* Both adapters (Claude + OpenCode) share this single render path.
|
|
15
|
+
*/
|
|
16
|
+
/** HTML-escape the three characters Telegram's HTML parse_mode treats as
|
|
17
|
+
* special. Nothing else needs escaping in HTML text nodes / code spans. */
|
|
18
|
+
export declare function escapeHtmlText(text: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Code spans are protected first (stashed as placeholders) so prose-level
|
|
21
|
+
* bold/link substitution can't reach inside them, then everything is
|
|
22
|
+
* HTML-escaped, then bold/links are applied to the already-escaped prose (so
|
|
23
|
+
* the tags we insert are not themselves escaped, and a lone `*`/backtick in
|
|
24
|
+
* prose stays literal instead of breaking the parse).
|
|
25
|
+
*/
|
|
26
|
+
export declare function renderAgentHtml(text: string): string;
|
|
27
|
+
//# sourceMappingURL=renderAgentHtml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderAgentHtml.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/renderAgentHtml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;4EAC4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AA0BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmDpD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Render the agent adapters' "markdown-ish" output
|
|
4
|
+
* (`*bold*`, `**bold**`, `# headings`, `` `inline` ``, ```` ```fenced``` ````,
|
|
5
|
+
* `[text](url)`) into Telegram **HTML**.
|
|
6
|
+
*
|
|
7
|
+
* Why HTML instead of the legacy Markdown path: Telegram's classic Markdown
|
|
8
|
+
* drops the WHOLE message to unformatted plain text on a single stray `*` or
|
|
9
|
+
* an unbalanced backtick — this is the live "git diff shows literal ``` ``` ```
|
|
10
|
+
* ``` characters" bug. HTML's only specials are `& < >`, so lone punctuation is
|
|
11
|
+
* inert and fenced code / diffs render as real monospaced blocks.
|
|
12
|
+
*
|
|
13
|
+
* Used ONLY for streamed agent output + status frames. Bot-authored `t(...)`
|
|
14
|
+
* templates keep their legacy Markdown rendering — they don't have the bug.
|
|
15
|
+
* Both adapters (Claude + OpenCode) share this single render path.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.escapeHtmlText = escapeHtmlText;
|
|
19
|
+
exports.renderAgentHtml = renderAgentHtml;
|
|
20
|
+
const markdownTableRender_1 = require("../../utils/markdownTableRender");
|
|
21
|
+
/** HTML-escape the three characters Telegram's HTML parse_mode treats as
|
|
22
|
+
* special. Nothing else needs escaping in HTML text nodes / code spans. */
|
|
23
|
+
function escapeHtmlText(text) {
|
|
24
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
25
|
+
}
|
|
26
|
+
// Matchers for the adapter's "markdown-ish" intermediate. Hoisted so they
|
|
27
|
+
// aren't recompiled per chunk; `g`-flag regexes are stateful, so every use
|
|
28
|
+
// goes through `String.replace` (which resets `lastIndex`), never `.exec`.
|
|
29
|
+
const FENCE_REGEX = /```([^\n`]*)\n?([\s\S]*?)```/g;
|
|
30
|
+
const INLINE_CODE_REGEX = /`([^`\n]+)`/g;
|
|
31
|
+
// `**bold**` must run BEFORE the single-star `*bold*` matcher: otherwise the
|
|
32
|
+
// single-star regex matches from the 2nd asterisk of `**` and leaves a stray
|
|
33
|
+
// leading `*` (live OpenCode trace: `*<b>bold</b>*`). Non-greedy so adjacent
|
|
34
|
+
// pairs `**a** **b**` don't merge into one span.
|
|
35
|
+
const DOUBLE_BOLD_REGEX = /\*\*([^\n]+?)\*\*/g;
|
|
36
|
+
const BOLD_REGEX = /\*([^*\n]+)\*/g;
|
|
37
|
+
const LINK_REGEX = /\[([^\]\n]+)\]\(([^)\s]+)\)/g;
|
|
38
|
+
// Markdown ATX headings (`#`…`######` + text). Telegram has no heading
|
|
39
|
+
// element, so render the line as bold — the established convention. Anchored
|
|
40
|
+
// to line start with the `m` flag, so a `#` mid-line stays literal.
|
|
41
|
+
const HEADING_REGEX = /^#{1,6}\s+(.+)$/gm;
|
|
42
|
+
const PLACEHOLDER_REGEX = /\x00(\d+)\x00/g;
|
|
43
|
+
/**
|
|
44
|
+
* C0 control chars except `\n` and `\t`. They never belong in a Telegram
|
|
45
|
+
* message, and a stray `\x00` would collide with the placeholder sentinel
|
|
46
|
+
* `\x00N\x00` and resurrect a wrong / `undefined` span — strip up front.
|
|
47
|
+
*/
|
|
48
|
+
const CONTROL_CHARS_REGEX = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
|
|
49
|
+
/**
|
|
50
|
+
* Code spans are protected first (stashed as placeholders) so prose-level
|
|
51
|
+
* bold/link substitution can't reach inside them, then everything is
|
|
52
|
+
* HTML-escaped, then bold/links are applied to the already-escaped prose (so
|
|
53
|
+
* the tags we insert are not themselves escaped, and a lone `*`/backtick in
|
|
54
|
+
* prose stays literal instead of breaking the parse).
|
|
55
|
+
*/
|
|
56
|
+
function renderAgentHtml(text) {
|
|
57
|
+
const placeholders = [];
|
|
58
|
+
const stash = (html) => {
|
|
59
|
+
placeholders.push(html);
|
|
60
|
+
return `\x00${placeholders.length - 1}\x00`;
|
|
61
|
+
};
|
|
62
|
+
// 0. Drop control chars up front so the placeholder sentinel we add in
|
|
63
|
+
// `stash` is the only `\x00` left to restore in step 5.
|
|
64
|
+
const source = text.replace(CONTROL_CHARS_REGEX, '');
|
|
65
|
+
// 0.5. Rewrite raw GFM markdown tables (mostly from OpenCode) into a readable
|
|
66
|
+
// form: narrow tables become a ```-fenced box (→ <pre> below), wide ones
|
|
67
|
+
// become plain "field: value" lines. Fence-aware + leaves non-table text
|
|
68
|
+
// untouched, so the downstream passes are unchanged.
|
|
69
|
+
const withTables = (0, markdownTableRender_1.renderMarkdownTables)(source);
|
|
70
|
+
// 1. Fenced blocks first — they contain the backticks inline code would
|
|
71
|
+
// otherwise mis-match. Escape only `& < >` inside code.
|
|
72
|
+
let work = withTables.replace(FENCE_REGEX, (_match, info, body) => {
|
|
73
|
+
// The info string's first token is the language (CommonMark); ignore any
|
|
74
|
+
// trailing metadata. Escape `"` too, or it would break the class attribute.
|
|
75
|
+
const language = info.trim().split(/\s+/)[0] ?? '';
|
|
76
|
+
const cls = language
|
|
77
|
+
? ` class="language-${escapeHtmlText(language).replace(/"/g, '"')}"`
|
|
78
|
+
: '';
|
|
79
|
+
return stash(`<pre><code${cls}>${escapeHtmlText(body.replace(/\n$/, ''))}</code></pre>`);
|
|
80
|
+
});
|
|
81
|
+
// 2. Inline code.
|
|
82
|
+
work = work.replace(INLINE_CODE_REGEX, (_match, body) => stash(`<code>${escapeHtmlText(body)}</code>`));
|
|
83
|
+
// 3. Escape the remaining prose.
|
|
84
|
+
work = escapeHtmlText(work);
|
|
85
|
+
// 4. Bold + links + headings on the escaped prose. Label/URL are already
|
|
86
|
+
// escaped by step 3, so we only additionally guard `"` in the href
|
|
87
|
+
// attribute. `**bold**` runs before `*bold*` (see DOUBLE_BOLD_REGEX).
|
|
88
|
+
work = work.replace(DOUBLE_BOLD_REGEX, '<b>$1</b>');
|
|
89
|
+
work = work.replace(BOLD_REGEX, '<b>$1</b>');
|
|
90
|
+
work = work.replace(LINK_REGEX, (_match, label, url) => `<a href="${url.replace(/"/g, '"')}">${label}</a>`);
|
|
91
|
+
// Headings after bold/links: a heading line may already carry `<b>` from the
|
|
92
|
+
// bold pass; Telegram accepts nested `<b>`, so no special-casing needed.
|
|
93
|
+
work = work.replace(HEADING_REGEX, '<b>$1</b>');
|
|
94
|
+
// 5. Restore the stashed code spans (already valid HTML — do not re-escape).
|
|
95
|
+
return work.replace(PLACEHOLDER_REGEX, (match, idx) => placeholders[Number(idx)] ?? match);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=renderAgentHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderAgentHtml.js","sourceRoot":"","sources":["../../../src/connectors/telegram/renderAgentHtml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type SessionKey, type SessionKeyCodec } from '../../sessionKey';
|
|
2
|
+
/**
|
|
3
|
+
* @description Telegram's {@link SessionKeyCodec}. `matches` is what lets the
|
|
4
|
+
* core decode a string with no platform in hand: the all-numeric shape is
|
|
5
|
+
* unambiguous against every prefixed format a later connector will use.
|
|
6
|
+
*/
|
|
7
|
+
export declare const telegramSessionKeyCodec: SessionKeyCodec;
|
|
8
|
+
/**
|
|
9
|
+
* @description Build a Telegram {@link SessionKey} from the native numeric ids.
|
|
10
|
+
*
|
|
11
|
+
* The single construction point for Telegram keys — production and tests alike.
|
|
12
|
+
* Funnelling every literal through it is what keeps the string/number boundary
|
|
13
|
+
* in one place instead of 200 scattered object literals.
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeTelegramKey(chatId: number, threadId: number): SessionKey;
|
|
16
|
+
/**
|
|
17
|
+
* @description Does this key address the Telegram surface? Core predicates use
|
|
18
|
+
* it to answer `false` for a foreign key instead of throwing out of the native
|
|
19
|
+
* accessors below.
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkIsTelegramKey(key: SessionKey): boolean;
|
|
22
|
+
/** How a native accessor's refusal of a foreign key starts — shared with the test that proves none was reached. */
|
|
23
|
+
export declare const foreignKeyAccessorErrorPrefix = "Expected a Telegram SessionKey";
|
|
24
|
+
/** The native Telegram chat id — what the Bot API expects on every send. */
|
|
25
|
+
export declare function getTelegramChatId(key: SessionKey): number;
|
|
26
|
+
/** The native Telegram `message_thread_id` (`0` = owner-DM main thread). */
|
|
27
|
+
export declare function getTelegramThreadId(key: SessionKey): number;
|
|
28
|
+
//# sourceMappingURL=sessionKeyCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeyCodec.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/sessionKeyCodec.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AA2B1B;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,eAyBrC,CAAC;AAYF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAE3D;AAED,mHAAmH;AACnH,eAAO,MAAM,6BAA6B,mCAAmC,CAAC;AAa9E,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.foreignKeyAccessorErrorPrefix = exports.telegramSessionKeyCodec = void 0;
|
|
4
|
+
exports.makeTelegramKey = makeTelegramKey;
|
|
5
|
+
exports.checkIsTelegramKey = checkIsTelegramKey;
|
|
6
|
+
exports.getTelegramChatId = getTelegramChatId;
|
|
7
|
+
exports.getTelegramThreadId = getTelegramThreadId;
|
|
8
|
+
const sessionKey_1 = require("../../sessionKey");
|
|
9
|
+
/** The platform id this connector answers to. */
|
|
10
|
+
const telegramPlatform = 'telegram';
|
|
11
|
+
/**
|
|
12
|
+
* @description The historical on-the-wire spelling: `"<chatId>:<threadId>"`.
|
|
13
|
+
*
|
|
14
|
+
* Deliberately UNCHANGED from the pre-seam `keyToString`. The same string is a
|
|
15
|
+
* `state.json` field name, the tail of a tmux session name
|
|
16
|
+
* (`claude-<chatId>-<threadId>`), a per-thread JSON map key and (with `:` swapped
|
|
17
|
+
* for `_`) a file-intake directory name. Changing it would rename all four and
|
|
18
|
+
* orphan every live agent session, so this format is frozen: new platforms
|
|
19
|
+
* differentiate by prefixing their own id, never by touching this one.
|
|
20
|
+
*
|
|
21
|
+
* Chat ids are negative for forum supergroups; thread ids are never negative
|
|
22
|
+
* (`0` = the owner-DM main thread, `1` = the supergroup General topic). The
|
|
23
|
+
* per-half strictness matters — a plain `Number()` would accept `1e5`, `0x10`,
|
|
24
|
+
* `1.5` and `" 42 "`, letting a foreign string masquerade as one of ours.
|
|
25
|
+
*/
|
|
26
|
+
const telegramKeyRe = /^(-?\d+):(\d+)$/;
|
|
27
|
+
function decodeTelegramKey(serialized) {
|
|
28
|
+
const match = telegramKeyRe.exec(serialized);
|
|
29
|
+
return match ? { platform: telegramPlatform, space: match[1], thread: match[2] } : null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @description Telegram's {@link SessionKeyCodec}. `matches` is what lets the
|
|
33
|
+
* core decode a string with no platform in hand: the all-numeric shape is
|
|
34
|
+
* unambiguous against every prefixed format a later connector will use.
|
|
35
|
+
*/
|
|
36
|
+
exports.telegramSessionKeyCodec = {
|
|
37
|
+
platform: telegramPlatform,
|
|
38
|
+
encode(key) {
|
|
39
|
+
return `${key.space}:${key.thread}`;
|
|
40
|
+
},
|
|
41
|
+
decode(serialized) {
|
|
42
|
+
const key = decodeTelegramKey(serialized);
|
|
43
|
+
if (!key)
|
|
44
|
+
throw new Error(`Invalid Telegram SessionKey string: "${serialized}"`);
|
|
45
|
+
return key;
|
|
46
|
+
},
|
|
47
|
+
matches(serialized) {
|
|
48
|
+
return telegramKeyRe.test(serialized);
|
|
49
|
+
},
|
|
50
|
+
// The key has exactly one `:`, so the slug splits on its LAST separator: a
|
|
51
|
+
// negative chat id keeps its own leading minus (`-100123-42` with `-`).
|
|
52
|
+
decodeSlug(slug, separator) {
|
|
53
|
+
const lastSeparator = slug.lastIndexOf(separator);
|
|
54
|
+
if (lastSeparator <= 0)
|
|
55
|
+
return null;
|
|
56
|
+
const serialized = `${slug.slice(0, lastSeparator)}:${slug.slice(lastSeparator + separator.length)}`;
|
|
57
|
+
return decodeTelegramKey(serialized);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Self-registering on import so every module that constructs or reads a
|
|
62
|
+
* Telegram key transitively arms the decoder. The composition roots
|
|
63
|
+
* (`bot.ts`, the test bootstrap) import this module explicitly for the paths —
|
|
64
|
+
* `state.ts`, the `DATA_DIR` janitors — that decode without ever building a key.
|
|
65
|
+
* {@link registerSessionKeyCodec} is idempotent per platform, so a repeated
|
|
66
|
+
* import is harmless.
|
|
67
|
+
*/
|
|
68
|
+
(0, sessionKey_1.registerSessionKeyCodec)(exports.telegramSessionKeyCodec);
|
|
69
|
+
/**
|
|
70
|
+
* @description Build a Telegram {@link SessionKey} from the native numeric ids.
|
|
71
|
+
*
|
|
72
|
+
* The single construction point for Telegram keys — production and tests alike.
|
|
73
|
+
* Funnelling every literal through it is what keeps the string/number boundary
|
|
74
|
+
* in one place instead of 200 scattered object literals.
|
|
75
|
+
*/
|
|
76
|
+
function makeTelegramKey(chatId, threadId) {
|
|
77
|
+
return { platform: telegramPlatform, space: `${chatId}`, thread: `${threadId}` };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @description Does this key address the Telegram surface? Core predicates use
|
|
81
|
+
* it to answer `false` for a foreign key instead of throwing out of the native
|
|
82
|
+
* accessors below.
|
|
83
|
+
*/
|
|
84
|
+
function checkIsTelegramKey(key) {
|
|
85
|
+
return key.platform === telegramPlatform;
|
|
86
|
+
}
|
|
87
|
+
/** How a native accessor's refusal of a foreign key starts — shared with the test that proves none was reached. */
|
|
88
|
+
exports.foreignKeyAccessorErrorPrefix = 'Expected a Telegram SessionKey';
|
|
89
|
+
function getTelegramNumber(key, field) {
|
|
90
|
+
if (!checkIsTelegramKey(key)) {
|
|
91
|
+
throw new Error(`${exports.foreignKeyAccessorErrorPrefix}, got platform "${key.platform}"`);
|
|
92
|
+
}
|
|
93
|
+
const value = Number(key[field]);
|
|
94
|
+
if (!Number.isFinite(value)) {
|
|
95
|
+
throw new Error(`Invalid Telegram ${field} in SessionKey: "${key[field]}"`);
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
/** The native Telegram chat id — what the Bot API expects on every send. */
|
|
100
|
+
function getTelegramChatId(key) {
|
|
101
|
+
return getTelegramNumber(key, 'space');
|
|
102
|
+
}
|
|
103
|
+
/** The native Telegram `message_thread_id` (`0` = owner-DM main thread). */
|
|
104
|
+
function getTelegramThreadId(key) {
|
|
105
|
+
return getTelegramNumber(key, 'thread');
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=sessionKeyCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeyCodec.js","sourceRoot":"","sources":["../../../src/connectors/telegram/sessionKeyCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CallApiHost } from '../../outputTrace';
|
|
2
|
+
/**
|
|
3
|
+
* @description An instance that does not serve Telegram (Jira connector plan J3,
|
|
4
|
+
* D9) still constructs the Telegram client — `bot.ts` is built around it — but
|
|
5
|
+
* must never reach the Bot API: no token is configured, and a call slipping
|
|
6
|
+
* through means a Telegram path a Jira conversation was supposed to stay out of.
|
|
7
|
+
* Installed OUTERMOST, so the call fails before anything is sent or traced, and
|
|
8
|
+
* logged here: many callers treat a failed Bot API call as best-effort and drop
|
|
9
|
+
* the error, which would hide the very path this guard exists to expose. Logged
|
|
10
|
+
* once per method: a path reached per output chunk or per timer tick must expose
|
|
11
|
+
* itself, not flood the log (and the console tee) with the same line.
|
|
12
|
+
*/
|
|
13
|
+
export declare class TelegramDisabledError extends Error {
|
|
14
|
+
constructor(method: string);
|
|
15
|
+
}
|
|
16
|
+
/** The log line of a refused call — written by the guard itself, as a caller may swallow the rejection. */
|
|
17
|
+
export declare const telegramCallRefusedLogPrefix = "[telegram-guard] refused";
|
|
18
|
+
export declare function installTelegramCallGuard(host: CallApiHost): void;
|
|
19
|
+
//# sourceMappingURL=telegramCallGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegramCallGuard.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/telegramCallGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,MAAM,EAAE,MAAM;CAI3B;AAED,2GAA2G;AAC3G,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AAEvE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAShE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.telegramCallRefusedLogPrefix = exports.TelegramDisabledError = void 0;
|
|
4
|
+
exports.installTelegramCallGuard = installTelegramCallGuard;
|
|
5
|
+
/**
|
|
6
|
+
* @description An instance that does not serve Telegram (Jira connector plan J3,
|
|
7
|
+
* D9) still constructs the Telegram client — `bot.ts` is built around it — but
|
|
8
|
+
* must never reach the Bot API: no token is configured, and a call slipping
|
|
9
|
+
* through means a Telegram path a Jira conversation was supposed to stay out of.
|
|
10
|
+
* Installed OUTERMOST, so the call fails before anything is sent or traced, and
|
|
11
|
+
* logged here: many callers treat a failed Bot API call as best-effort and drop
|
|
12
|
+
* the error, which would hide the very path this guard exists to expose. Logged
|
|
13
|
+
* once per method: a path reached per output chunk or per timer tick must expose
|
|
14
|
+
* itself, not flood the log (and the console tee) with the same line.
|
|
15
|
+
*/
|
|
16
|
+
class TelegramDisabledError extends Error {
|
|
17
|
+
constructor(method) {
|
|
18
|
+
super(`Telegram API call "${method}" refused: the telegram connector is off for this instance`);
|
|
19
|
+
this.name = 'TelegramDisabledError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.TelegramDisabledError = TelegramDisabledError;
|
|
23
|
+
/** The log line of a refused call — written by the guard itself, as a caller may swallow the rejection. */
|
|
24
|
+
exports.telegramCallRefusedLogPrefix = '[telegram-guard] refused';
|
|
25
|
+
function installTelegramCallGuard(host) {
|
|
26
|
+
const loggedMethods = new Set();
|
|
27
|
+
host.callApi = async (method) => {
|
|
28
|
+
if (!loggedMethods.has(method)) {
|
|
29
|
+
loggedMethods.add(method);
|
|
30
|
+
console.error(`${exports.telegramCallRefusedLogPrefix} ${method}: a Telegram path was reached in an instance without the telegram connector`);
|
|
31
|
+
}
|
|
32
|
+
throw new TelegramDisabledError(method);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=telegramCallGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegramCallGuard.js","sourceRoot":"","sources":["../../../src/connectors/telegram/telegramCallGuard.ts"],"names":[],"mappings":";;;AAuBA,4DASC;AA9BD;;;;;;;;;;GAUG;AACH,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,MAAc;QACxB,KAAK,CAAC,sBAAsB,MAAM,4DAA4D,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AALD,sDAKC;AAED,2GAA2G;AAC9F,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAEvE,SAAgB,wBAAwB,CAAC,IAAiB;IACxD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,oCAA4B,IAAI,MAAM,6EAA6E,CAAC,CAAC;QACxI,CAAC;QACD,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure builders + callback codec for the two-level `/timezone`
|
|
3
|
+
* picker: level 1 is the 10 IANA regions, level 2 is that region's zones,
|
|
4
|
+
* paginated.
|
|
5
|
+
*
|
|
6
|
+
* Two levels rather than one flat list because there are 418 zones — the same
|
|
7
|
+
* constraint that forced `/model` into a provider → models picker once a
|
|
8
|
+
* provider with hundreds of models appeared. And every callback carries INDEXES
|
|
9
|
+
* rather than the zone name: `America/Argentina/Buenos_Aires` plus a region
|
|
10
|
+
* index and a page number does not reliably fit Telegram's 64-BYTE
|
|
11
|
+
* `callback_data` cap, and a truncated id resolves to the wrong zone silently.
|
|
12
|
+
*
|
|
13
|
+
* Kept pure (no `t()`, no bot state) so the `✓` placement, the pagination
|
|
14
|
+
* clamping and the codec round-trip are unit-testable without a Telegram
|
|
15
|
+
* surface. Header TEXT is the caller's job — it is localized, the keyboard is
|
|
16
|
+
* not.
|
|
17
|
+
*/
|
|
18
|
+
import { Markup } from 'telegraf';
|
|
19
|
+
/** Zones listed per level-2 page — one per row, matching `/model`'s page size. */
|
|
20
|
+
export declare const timezonePageSize = 10;
|
|
21
|
+
/** Back to the region level (level 2 → level 1). */
|
|
22
|
+
export declare const timezonePickerBackCallback = "tzback";
|
|
23
|
+
/** Reset the setting to the host zone. */
|
|
24
|
+
export declare const timezoneAutoCallback = "tzauto";
|
|
25
|
+
/** Anchored matchers for `bot.action(...)` — the wire format's single definition. */
|
|
26
|
+
export declare const regionPageCallbackRe: RegExp;
|
|
27
|
+
export declare const zonePickCallbackRe: RegExp;
|
|
28
|
+
/** A region index paired with a page index (level-2 navigation). */
|
|
29
|
+
export interface RegionPageRef {
|
|
30
|
+
regionIndex: number;
|
|
31
|
+
page: number;
|
|
32
|
+
}
|
|
33
|
+
/** A region index paired with a zone index WITHIN that region's list. */
|
|
34
|
+
export interface ZonePickRef {
|
|
35
|
+
regionIndex: number;
|
|
36
|
+
zoneIndex: number;
|
|
37
|
+
}
|
|
38
|
+
export declare function buildRegionPageCallback(regionIndex: number, page: number): string;
|
|
39
|
+
export declare function buildZonePickCallback(regionIndex: number, zoneIndex: number): string;
|
|
40
|
+
export declare function parseRegionPageCallback(callbackData: string): RegionPageRef | null;
|
|
41
|
+
export declare function parseZonePickCallback(callbackData: string): ZonePickRef | null;
|
|
42
|
+
/**
|
|
43
|
+
* @description Resolve a level-2 pick back to its zone name, or `null` when the
|
|
44
|
+
* indexes no longer resolve. Stale keyboards stay tappable forever in Telegram,
|
|
45
|
+
* so an out-of-range index must answer "nothing" rather than pick a neighbour.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getTimezoneAt(regionIndex: number, zoneIndex: number): string | null;
|
|
48
|
+
/** The region name at `regionIndex`, or `null` for a stale index. */
|
|
49
|
+
export declare function getTimezoneRegionAt(regionIndex: number): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* @description Build the level-1 region keyboard, two regions per row, plus a
|
|
52
|
+
* full-width `🌐 Auto (host zone)` reset row.
|
|
53
|
+
*
|
|
54
|
+
* The `✓` marks the region CONTAINING the current zone (so the operator can see
|
|
55
|
+
* where they are without opening a page), or the Auto row when nothing is
|
|
56
|
+
* stored. A fixed-offset zone (`+04:00`) belongs to no region, so no region is
|
|
57
|
+
* marked — that is honest rather than arbitrarily highlighting one.
|
|
58
|
+
*
|
|
59
|
+
* `🌐 Auto (host zone)` is a fixed glyph+word rather than a translated string,
|
|
60
|
+
* mirroring the `/language` picker's Auto row: recognisable across locales and
|
|
61
|
+
* one less per-locale key to keep in parity.
|
|
62
|
+
*/
|
|
63
|
+
export declare function buildTimezoneRegionPicker(currentZone: string | null): Markup.Markup<import("@telegraf/types").InlineKeyboardMarkup>;
|
|
64
|
+
/**
|
|
65
|
+
* @description One rendered level-2 page: the keyboard plus the numbers the
|
|
66
|
+
* caller needs for the localized header. `currentPage` is already CLAMPED by
|
|
67
|
+
* {@link paginateList}, so a stale page index lands on the last real page rather
|
|
68
|
+
* than rendering an empty body.
|
|
69
|
+
*/
|
|
70
|
+
export interface TimezonePageRender {
|
|
71
|
+
region: string;
|
|
72
|
+
keyboard: ReturnType<typeof Markup.inlineKeyboard>;
|
|
73
|
+
/** Zero-based, clamped. */
|
|
74
|
+
currentPage: number;
|
|
75
|
+
totalPages: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description Build a region's zone page: one zone per row (names are long),
|
|
79
|
+
* with a `‹ Prev` / page pill / `⬅ Regions` / `Next ›` navigation row.
|
|
80
|
+
*
|
|
81
|
+
* Returns `null` for a region index that no longer resolves — a stale callback
|
|
82
|
+
* must be answered as expired, not rendered against a different region.
|
|
83
|
+
*/
|
|
84
|
+
export declare function buildTimezoneZonePicker(regionIndex: number, page: number, currentZone: string | null): TimezonePageRender | null;
|
|
85
|
+
//# sourceMappingURL=timezonePicker.d.ts.map
|