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,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure pre-processing pass that turns raw GitHub-flavored
|
|
4
|
+
* markdown tables (`| a | b |` …) into a readable Telegram form.
|
|
5
|
+
*
|
|
6
|
+
* Why this exists: OpenCode replies often contain GFM tables as plain pipe
|
|
7
|
+
* text, which is unreadable on a phone. This module detects those blocks and
|
|
8
|
+
* rewrites each one to a HYBRID rendering chosen by width:
|
|
9
|
+
* - narrow table (aligned form fits {@link tableMaxMonospaceWidth}) → a
|
|
10
|
+
* column-aligned box-drawing frame WRAPPED in a ``` fence, so the shared
|
|
11
|
+
* `renderAgentHtml` fence machinery turns it into a `<pre>` (monospace).
|
|
12
|
+
* - wide table → per-row "field: value" blocks as plain markdown lines, which
|
|
13
|
+
* flow through the normal bold/inline passes.
|
|
14
|
+
*
|
|
15
|
+
* It is wired as step 0.5 of `renderAgentHtml` (after the control-char strip,
|
|
16
|
+
* before the fence regex) and therefore runs on EVERY agent output for BOTH
|
|
17
|
+
* backends. Two safety invariants follow from that:
|
|
18
|
+
* 1. it is FENCE-AWARE — lines inside an existing ```-delimited region are
|
|
19
|
+
* never scanned for tables (a code block full of pipes must survive);
|
|
20
|
+
* 2. it leaves all non-table text byte-for-byte identical.
|
|
21
|
+
*
|
|
22
|
+
* The detector is narrow on purpose (header pipe row + GFM separator row +
|
|
23
|
+
* ≥1 body rows), so ordinary prose containing a stray `|` never matches.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.tableMaxMonospaceWidth = void 0;
|
|
27
|
+
exports.detectTables = detectTables;
|
|
28
|
+
exports.parseTable = parseTable;
|
|
29
|
+
exports.renderAligned = renderAligned;
|
|
30
|
+
exports.renderFieldValue = renderFieldValue;
|
|
31
|
+
exports.renderTable = renderTable;
|
|
32
|
+
exports.renderMarkdownTables = renderMarkdownTables;
|
|
33
|
+
/**
|
|
34
|
+
* Width budget (in monospace code points) for the aligned form. If the widest
|
|
35
|
+
* line of the box-drawing render exceeds this, the renderer falls back to the
|
|
36
|
+
* "field: value" form instead. Chosen so an aligned table still fits a typical
|
|
37
|
+
* phone without horizontal scroll. Tunable — the main agent confirms/adjusts
|
|
38
|
+
* the exact value via live verification.
|
|
39
|
+
*/
|
|
40
|
+
exports.tableMaxMonospaceWidth = 42;
|
|
41
|
+
// Box-drawing glyphs for the aligned frame.
|
|
42
|
+
const boxTopLeft = '┌';
|
|
43
|
+
const boxTopMid = '┬';
|
|
44
|
+
const boxTopRight = '┐';
|
|
45
|
+
const boxMidLeft = '├';
|
|
46
|
+
const boxMidMid = '┼';
|
|
47
|
+
const boxMidRight = '┤';
|
|
48
|
+
const boxBottomLeft = '└';
|
|
49
|
+
const boxBottomMid = '┴';
|
|
50
|
+
const boxBottomRight = '┘';
|
|
51
|
+
const boxVertical = '│';
|
|
52
|
+
const boxHorizontal = '─';
|
|
53
|
+
/** Field-value form: the marker that precedes each row's key cell. */
|
|
54
|
+
const fieldValueRowMarker = '▸';
|
|
55
|
+
/**
|
|
56
|
+
* A GFM separator row: each column is dashes with optional leading/trailing
|
|
57
|
+
* colons for alignment, cells split by `|`, outer pipes optional. At least one
|
|
58
|
+
* dash per column. Examples: `|---|---|`, `:--:|:-:`, `| --- | :---: |`.
|
|
59
|
+
*/
|
|
60
|
+
const separatorRowRegex = /^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/;
|
|
61
|
+
/** A line that looks like a table row: contains at least one `|`. The narrow
|
|
62
|
+
* detector below additionally requires a valid separator row to follow the
|
|
63
|
+
* header, so this loose check alone never triggers on prose. */
|
|
64
|
+
function checkIsPipeRow(line) {
|
|
65
|
+
return line.includes('|');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Split one table row on UNESCAPED `|`, trim each cell, and drop the empty
|
|
69
|
+
* edge cells produced by outer pipes (`| a | b |` → `['a', 'b']`). Escaped
|
|
70
|
+
* `\|` is preserved as a literal pipe inside a cell.
|
|
71
|
+
*/
|
|
72
|
+
function parseRowCells(line) {
|
|
73
|
+
const cells = [];
|
|
74
|
+
let current = '';
|
|
75
|
+
let index = 0;
|
|
76
|
+
while (index < line.length) {
|
|
77
|
+
const char = line[index];
|
|
78
|
+
if (char === '\\' && line[index + 1] === '|') {
|
|
79
|
+
current += '|';
|
|
80
|
+
index += 2;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (char === '|') {
|
|
84
|
+
cells.push(current);
|
|
85
|
+
current = '';
|
|
86
|
+
index += 1;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
current += char;
|
|
90
|
+
index += 1;
|
|
91
|
+
}
|
|
92
|
+
cells.push(current);
|
|
93
|
+
const trimmed = cells.map((cell) => cell.trim());
|
|
94
|
+
// Drop a single empty cell at each edge — the artifact of outer pipes. Only
|
|
95
|
+
// ONE per side: an intentionally-empty interior cell stays.
|
|
96
|
+
if (trimmed.length > 0 && trimmed[0] === '')
|
|
97
|
+
trimmed.shift();
|
|
98
|
+
if (trimmed.length > 0 && trimmed[trimmed.length - 1] === '')
|
|
99
|
+
trimmed.pop();
|
|
100
|
+
return trimmed;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Find every GFM table block in `text`, returning their line ranges. A block
|
|
104
|
+
* is a header pipe row, a separator row directly below it, then ≥1 consecutive
|
|
105
|
+
* pipe body rows. Lines inside an existing ```-fenced region are skipped, so a
|
|
106
|
+
* code block containing pipes never matches.
|
|
107
|
+
*/
|
|
108
|
+
function detectTables(text) {
|
|
109
|
+
const lines = text.split('\n');
|
|
110
|
+
const ranges = [];
|
|
111
|
+
let isInsideFence = false;
|
|
112
|
+
let lineIndex = 0;
|
|
113
|
+
while (lineIndex < lines.length) {
|
|
114
|
+
const line = lines[lineIndex];
|
|
115
|
+
// Track ``` fence open/close state line by line — never scan inside one.
|
|
116
|
+
if (/^\s*```/.test(line)) {
|
|
117
|
+
isInsideFence = !isInsideFence;
|
|
118
|
+
lineIndex += 1;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (isInsideFence) {
|
|
122
|
+
lineIndex += 1;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const separatorIndex = lineIndex + 1;
|
|
126
|
+
const headerCells = parseRowCells(line);
|
|
127
|
+
const isTableStart = checkIsPipeRow(line) &&
|
|
128
|
+
separatorIndex < lines.length &&
|
|
129
|
+
separatorRowRegex.test(lines[separatorIndex]) &&
|
|
130
|
+
// A bare separator with no header text isn't a table.
|
|
131
|
+
headerCells.length > 0 &&
|
|
132
|
+
// GFM requires the delimiter row to match the header's column count. This
|
|
133
|
+
// also rejects a `---` thematic break sitting under a pipe-bearing prose
|
|
134
|
+
// line (which `separatorRowRegex` alone would accept) — a false positive
|
|
135
|
+
// that matters because this runs on EVERY agent output.
|
|
136
|
+
parseRowCells(lines[separatorIndex]).length === headerCells.length;
|
|
137
|
+
if (!isTableStart) {
|
|
138
|
+
lineIndex += 1;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Consume consecutive body rows after the separator.
|
|
142
|
+
let bodyIndex = separatorIndex + 1;
|
|
143
|
+
while (bodyIndex < lines.length && !/^\s*```/.test(lines[bodyIndex]) && checkIsPipeRow(lines[bodyIndex])) {
|
|
144
|
+
bodyIndex += 1;
|
|
145
|
+
}
|
|
146
|
+
// Require ≥1 body row — a header+separator with no rows isn't worth a frame.
|
|
147
|
+
if (bodyIndex > separatorIndex + 1) {
|
|
148
|
+
ranges.push({ startLine: lineIndex, endLineExclusive: bodyIndex });
|
|
149
|
+
lineIndex = bodyIndex;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
lineIndex += 1;
|
|
153
|
+
}
|
|
154
|
+
return ranges;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Parse a table block (the raw lines of one detected range, joined by `\n`)
|
|
158
|
+
* into headers + rows. Ragged rows shorter than the header are padded with
|
|
159
|
+
* `''`; rows longer than the header keep their extra cells (so nothing is
|
|
160
|
+
* silently lost — the aligned form widens to fit).
|
|
161
|
+
*/
|
|
162
|
+
function parseTable(block) {
|
|
163
|
+
const lines = block.split('\n').filter((line) => line.trim().length > 0);
|
|
164
|
+
const headers = parseRowCells(lines[0]);
|
|
165
|
+
// lines[1] is the separator row — skip it.
|
|
166
|
+
const bodyLines = lines.slice(2);
|
|
167
|
+
const rows = bodyLines.map((line) => {
|
|
168
|
+
const cells = parseRowCells(line);
|
|
169
|
+
while (cells.length < headers.length)
|
|
170
|
+
cells.push('');
|
|
171
|
+
return cells;
|
|
172
|
+
});
|
|
173
|
+
return { headers, rows };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Strip the inline-markdown markers (`**`, `*`, `` ` ``) that are invisible in
|
|
177
|
+
* the final render, so column width is measured on the VISIBLE text. Used for
|
|
178
|
+
* width math only — the rendered cell keeps its markers.
|
|
179
|
+
*/
|
|
180
|
+
function getVisibleCellText(cell) {
|
|
181
|
+
return cell.replace(/\*\*/g, '').replace(/\*/g, '').replace(/`/g, '');
|
|
182
|
+
}
|
|
183
|
+
/** Display width of a cell in CODE POINTS (not UTF-16 units), counted on the
|
|
184
|
+
* visible text so Cyrillic / emoji columns align. */
|
|
185
|
+
function getCellDisplayWidth(cell) {
|
|
186
|
+
return [...getVisibleCellText(cell)].length;
|
|
187
|
+
}
|
|
188
|
+
/** Right-pad `cell` with spaces to `width` code points (visible width). */
|
|
189
|
+
function padCellToWidth(cell, width) {
|
|
190
|
+
const padding = width - getCellDisplayWidth(cell);
|
|
191
|
+
return padding > 0 ? cell + ' '.repeat(padding) : cell;
|
|
192
|
+
}
|
|
193
|
+
/** Per-column max display width across header + all rows. */
|
|
194
|
+
function getColumnWidths(table) {
|
|
195
|
+
const columnCount = table.rows.reduce((max, row) => Math.max(max, row.length), table.headers.length);
|
|
196
|
+
const widths = [];
|
|
197
|
+
for (let column = 0; column < columnCount; column += 1) {
|
|
198
|
+
const headerWidth = column < table.headers.length ? getCellDisplayWidth(table.headers[column]) : 0;
|
|
199
|
+
const bodyWidth = table.rows.reduce((max, row) => Math.max(max, column < row.length ? getCellDisplayWidth(row[column]) : 0), 0);
|
|
200
|
+
widths.push(Math.max(headerWidth, bodyWidth));
|
|
201
|
+
}
|
|
202
|
+
return widths;
|
|
203
|
+
}
|
|
204
|
+
/** Build one bordered content line: `│ cell │ cell │` padded to column widths. */
|
|
205
|
+
function buildAlignedRow(cells, widths) {
|
|
206
|
+
const padded = widths.map((width, column) => padCellToWidth(cells[column] ?? '', width));
|
|
207
|
+
return `${boxVertical} ${padded.join(` ${boxVertical} `)} ${boxVertical}`;
|
|
208
|
+
}
|
|
209
|
+
/** Build one frame line (top / middle / bottom) from the three corner glyphs. */
|
|
210
|
+
function buildFrameLine(left, mid, right, widths) {
|
|
211
|
+
const segments = widths.map((width) => boxHorizontal.repeat(width + 2));
|
|
212
|
+
return `${left}${segments.join(mid)}${right}`;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Render the table as a monospace, column-aligned box-drawing frame. The
|
|
216
|
+
* caller wraps the result in a ``` fence so the HTML layer makes it a `<pre>`.
|
|
217
|
+
*/
|
|
218
|
+
function renderAligned(table) {
|
|
219
|
+
const widths = getColumnWidths(table);
|
|
220
|
+
const out = [];
|
|
221
|
+
out.push(buildFrameLine(boxTopLeft, boxTopMid, boxTopRight, widths));
|
|
222
|
+
out.push(buildAlignedRow(table.headers, widths));
|
|
223
|
+
out.push(buildFrameLine(boxMidLeft, boxMidMid, boxMidRight, widths));
|
|
224
|
+
for (const row of table.rows)
|
|
225
|
+
out.push(buildAlignedRow(row, widths));
|
|
226
|
+
out.push(buildFrameLine(boxBottomLeft, boxBottomMid, boxBottomRight, widths));
|
|
227
|
+
return out.join('\n');
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Render the table as per-row "field: value" blocks for the wide case. The
|
|
231
|
+
* first column is the key cell (after `▸`); remaining columns become
|
|
232
|
+
* ` <header>: <cell>` lines. Inline markdown in cell text is kept — the HTML
|
|
233
|
+
* layer renders it. When there is only one column (no obvious key/value split)
|
|
234
|
+
* the rows are numbered instead.
|
|
235
|
+
*/
|
|
236
|
+
function renderFieldValue(table) {
|
|
237
|
+
const hasKeyColumn = table.headers.length >= 2;
|
|
238
|
+
const blocks = table.rows.map((row, rowIndex) => {
|
|
239
|
+
const lines = [];
|
|
240
|
+
if (hasKeyColumn) {
|
|
241
|
+
lines.push(`${fieldValueRowMarker} ${row[0] ?? ''}`);
|
|
242
|
+
for (let column = 1; column < table.headers.length; column += 1) {
|
|
243
|
+
lines.push(` ${table.headers[column]}: ${row[column] ?? ''}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// No key column to anchor on — number the rows so they stay distinct.
|
|
248
|
+
lines.push(`${fieldValueRowMarker} ${rowIndex + 1}. ${row[0] ?? ''}`);
|
|
249
|
+
}
|
|
250
|
+
return lines.join('\n');
|
|
251
|
+
});
|
|
252
|
+
return blocks.join('\n');
|
|
253
|
+
}
|
|
254
|
+
/** Widest line (in code points) of an aligned render — the width-budget input. */
|
|
255
|
+
function getAlignedWidestLineWidth(aligned) {
|
|
256
|
+
return aligned.split('\n').reduce((max, line) => Math.max(max, [...line].length), 0);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Pick the rendering for one table: aligned (fenced) if its widest line fits
|
|
260
|
+
* {@link tableMaxMonospaceWidth}, else the field-value form. Returns the text
|
|
261
|
+
* already wrapped for the HTML layer (``` fence for aligned, plain lines for
|
|
262
|
+
* field-value).
|
|
263
|
+
*/
|
|
264
|
+
function renderTable(table) {
|
|
265
|
+
const aligned = renderAligned(table);
|
|
266
|
+
if (getAlignedWidestLineWidth(aligned) <= exports.tableMaxMonospaceWidth) {
|
|
267
|
+
return `\`\`\`\n${aligned}\n\`\`\``;
|
|
268
|
+
}
|
|
269
|
+
return renderFieldValue(table);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Replace every detected GFM table block in `text` with its chosen rendering,
|
|
273
|
+
* in place. Non-table text and fenced regions are returned byte-for-byte
|
|
274
|
+
* unchanged. This is the single entry point wired into `renderAgentHtml`.
|
|
275
|
+
*/
|
|
276
|
+
function renderMarkdownTables(text) {
|
|
277
|
+
const ranges = detectTables(text);
|
|
278
|
+
if (ranges.length === 0)
|
|
279
|
+
return text;
|
|
280
|
+
const lines = text.split('\n');
|
|
281
|
+
const out = [];
|
|
282
|
+
let lineIndex = 0;
|
|
283
|
+
let rangeIndex = 0;
|
|
284
|
+
while (lineIndex < lines.length) {
|
|
285
|
+
const range = ranges[rangeIndex];
|
|
286
|
+
if (range && lineIndex === range.startLine) {
|
|
287
|
+
const block = lines.slice(range.startLine, range.endLineExclusive).join('\n');
|
|
288
|
+
out.push(renderTable(parseTable(block)));
|
|
289
|
+
lineIndex = range.endLineExclusive;
|
|
290
|
+
rangeIndex += 1;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
out.push(lines[lineIndex]);
|
|
294
|
+
lineIndex += 1;
|
|
295
|
+
}
|
|
296
|
+
return out.join('\n');
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=markdownTableRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownTableRender.js","sourceRoot":"","sources":["../../src/utils/markdownTableRender.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Debounced batching of Telegram media-album items.
|
|
3
|
+
*
|
|
4
|
+
* A media album (multiple photos/files sent as one visual message) arrives over
|
|
5
|
+
* the Bot API as N SEPARATE messages that share a `media_group_id`, delivered in
|
|
6
|
+
* a quick burst. Forwarding each as its own agent prompt makes them abort one
|
|
7
|
+
* another's generation, and any per-item gating hint ("no agent running") fires
|
|
8
|
+
* N times. This collector coalesces a group: each {@link MediaGroupCollector.collect}
|
|
9
|
+
* call appends the item and resets a per-group debounce timer; once the burst
|
|
10
|
+
* settles (no new item for `debounceMs`) the `onFlush` callback fires ONCE with
|
|
11
|
+
* the group's items in arrival order.
|
|
12
|
+
*
|
|
13
|
+
* It also owns the per-group HINT DEDUPE ({@link MediaGroupCollector.checkShouldAnnounceOnce}):
|
|
14
|
+
* a small set keyed by the same group key so a gating reply (no agent / unbound)
|
|
15
|
+
* or a download-error reply is emitted only once per album. Entries are dropped
|
|
16
|
+
* when the group flushes or times out, so the structure can't leak; an explicit
|
|
17
|
+
* cap bounds it even against a pathological flood of distinct group keys.
|
|
18
|
+
*
|
|
19
|
+
* Side-effect-free apart from timers — `debounceMs` is a constructor param so
|
|
20
|
+
* tests drive it with real short timers (e.g. 50ms) instead of mocking the clock.
|
|
21
|
+
*/
|
|
22
|
+
export interface MediaGroupCollector<TItem> {
|
|
23
|
+
/**
|
|
24
|
+
* Append an item to its group and (re)arm the group's debounce timer. The
|
|
25
|
+
* group flushes `debounceMs` after the LAST collected item.
|
|
26
|
+
*/
|
|
27
|
+
collect(groupKey: string, item: TItem): void;
|
|
28
|
+
/**
|
|
29
|
+
* One-shot guard for per-group side effects (gating hints, dedup'd error
|
|
30
|
+
* replies). Returns `true` the FIRST time it is called for a still-open group
|
|
31
|
+
* key and `false` for every subsequent call until that group flushes. A group
|
|
32
|
+
* key with no live entry is created on demand so a hint can be claimed before
|
|
33
|
+
* (or without) any item is collected.
|
|
34
|
+
*/
|
|
35
|
+
checkShouldAnnounceOnce(groupKey: string): boolean;
|
|
36
|
+
/** Number of groups currently buffered — for tests / diagnostics. */
|
|
37
|
+
readonly size: number;
|
|
38
|
+
}
|
|
39
|
+
export interface MediaGroupCollectorOptions<TItem> {
|
|
40
|
+
/** Quiet period after the last item before a group flushes. */
|
|
41
|
+
debounceMs: number;
|
|
42
|
+
/** Invoked once per settled group with its items in arrival order. */
|
|
43
|
+
onFlush: (groupKey: string, items: TItem[]) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Create a {@link MediaGroupCollector}. The returned object holds
|
|
47
|
+
* per-group timers internally; there is no global timer, so an idle collector
|
|
48
|
+
* costs nothing.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createMediaGroupCollector<TItem>(options: MediaGroupCollectorOptions<TItem>): MediaGroupCollector<TItem>;
|
|
51
|
+
//# sourceMappingURL=mediaGroupCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaGroupCollector.d.ts","sourceRoot":"","sources":["../../src/utils/mediaGroupCollector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAiBH,MAAM,WAAW,mBAAmB,CAAC,KAAK;IACxC;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7C;;;;;;OAMG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACnD,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B,CAAC,KAAK;IAC/C,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAC7C,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC,GACzC,mBAAmB,CAAC,KAAK,CAAC,CAmD5B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Debounced batching of Telegram media-album items.
|
|
4
|
+
*
|
|
5
|
+
* A media album (multiple photos/files sent as one visual message) arrives over
|
|
6
|
+
* the Bot API as N SEPARATE messages that share a `media_group_id`, delivered in
|
|
7
|
+
* a quick burst. Forwarding each as its own agent prompt makes them abort one
|
|
8
|
+
* another's generation, and any per-item gating hint ("no agent running") fires
|
|
9
|
+
* N times. This collector coalesces a group: each {@link MediaGroupCollector.collect}
|
|
10
|
+
* call appends the item and resets a per-group debounce timer; once the burst
|
|
11
|
+
* settles (no new item for `debounceMs`) the `onFlush` callback fires ONCE with
|
|
12
|
+
* the group's items in arrival order.
|
|
13
|
+
*
|
|
14
|
+
* It also owns the per-group HINT DEDUPE ({@link MediaGroupCollector.checkShouldAnnounceOnce}):
|
|
15
|
+
* a small set keyed by the same group key so a gating reply (no agent / unbound)
|
|
16
|
+
* or a download-error reply is emitted only once per album. Entries are dropped
|
|
17
|
+
* when the group flushes or times out, so the structure can't leak; an explicit
|
|
18
|
+
* cap bounds it even against a pathological flood of distinct group keys.
|
|
19
|
+
*
|
|
20
|
+
* Side-effect-free apart from timers — `debounceMs` is a constructor param so
|
|
21
|
+
* tests drive it with real short timers (e.g. 50ms) instead of mocking the clock.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.createMediaGroupCollector = createMediaGroupCollector;
|
|
25
|
+
/**
|
|
26
|
+
* Hard ceiling on concurrently-tracked groups. Telegram albums settle within a
|
|
27
|
+
* couple of seconds, so live groups are normally 0–1; this only guards against a
|
|
28
|
+
* degenerate flood of distinct keys never flushing. When exceeded, the oldest
|
|
29
|
+
* group is force-flushed to reclaim its slot rather than dropped silently.
|
|
30
|
+
*/
|
|
31
|
+
const maxConcurrentGroups = 256;
|
|
32
|
+
/**
|
|
33
|
+
* @description Create a {@link MediaGroupCollector}. The returned object holds
|
|
34
|
+
* per-group timers internally; there is no global timer, so an idle collector
|
|
35
|
+
* costs nothing.
|
|
36
|
+
*/
|
|
37
|
+
function createMediaGroupCollector(options) {
|
|
38
|
+
const { debounceMs, onFlush } = options;
|
|
39
|
+
const groups = new Map();
|
|
40
|
+
function flush(groupKey) {
|
|
41
|
+
const group = groups.get(groupKey);
|
|
42
|
+
if (!group)
|
|
43
|
+
return;
|
|
44
|
+
clearTimeout(group.timer);
|
|
45
|
+
groups.delete(groupKey);
|
|
46
|
+
// Flush even an item-less group (it may exist only to hold a claimed hint);
|
|
47
|
+
// an empty array is a harmless no-op for the typical onFlush.
|
|
48
|
+
onFlush(groupKey, group.items);
|
|
49
|
+
}
|
|
50
|
+
function armTimer(groupKey) {
|
|
51
|
+
const timer = setTimeout(() => flush(groupKey), debounceMs);
|
|
52
|
+
// Don't let a pending album timer keep the process alive on shutdown.
|
|
53
|
+
if (typeof timer.unref === 'function')
|
|
54
|
+
timer.unref();
|
|
55
|
+
return timer;
|
|
56
|
+
}
|
|
57
|
+
function ensureGroup(groupKey) {
|
|
58
|
+
const existing = groups.get(groupKey);
|
|
59
|
+
if (existing)
|
|
60
|
+
return existing;
|
|
61
|
+
if (groups.size >= maxConcurrentGroups) {
|
|
62
|
+
// Reclaim a slot by flushing the oldest (insertion-ordered) group.
|
|
63
|
+
const oldestKey = groups.keys().next().value;
|
|
64
|
+
if (oldestKey !== undefined)
|
|
65
|
+
flush(oldestKey);
|
|
66
|
+
}
|
|
67
|
+
const created = { items: [], timer: armTimer(groupKey), isAnnounced: false };
|
|
68
|
+
groups.set(groupKey, created);
|
|
69
|
+
return created;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
collect(groupKey, item) {
|
|
73
|
+
const group = ensureGroup(groupKey);
|
|
74
|
+
group.items.push(item);
|
|
75
|
+
clearTimeout(group.timer);
|
|
76
|
+
group.timer = armTimer(groupKey);
|
|
77
|
+
},
|
|
78
|
+
checkShouldAnnounceOnce(groupKey) {
|
|
79
|
+
const group = ensureGroup(groupKey);
|
|
80
|
+
if (group.isAnnounced)
|
|
81
|
+
return false;
|
|
82
|
+
group.isAnnounced = true;
|
|
83
|
+
return true;
|
|
84
|
+
},
|
|
85
|
+
get size() {
|
|
86
|
+
return groups.size;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=mediaGroupCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaGroupCollector.js","sourceRoot":"","sources":["../../src/utils/mediaGroupCollector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AA+CH,8DAqDC;AAlGD;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAkChC;;;;GAIG;AACH,SAAgB,yBAAyB,CACvC,OAA0C;IAE1C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEpD,SAAS,KAAK,CAAC,QAAgB;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxB,4EAA4E;QAC5E,8DAA8D;QAC9D,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,QAAQ,CAAC,QAAgB;QAChC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5D,sEAAsE;QACtE,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,WAAW,CAAC,QAAgB;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACvC,mEAAmE;YACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC7C,IAAI,SAAS,KAAK,SAAS;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,OAAO,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAChG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,OAAO,CAAC,QAAQ,EAAE,IAAI;YACpB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,uBAAuB,CAAC,QAAQ;YAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,WAAW;gBAAE,OAAO,KAAK,CAAC;YACpC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI;YACN,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { SendFilesToThread } from './fileSendService';
|
|
2
|
+
/**
|
|
3
|
+
* @description Deliver a batch of DISCRETE messages into a topic. Unlike the
|
|
4
|
+
* normal agent-output path (which coalesces / glues a burst into the fewest
|
|
5
|
+
* messages), this sends each input item as its OWN Telegram message — the
|
|
6
|
+
* primitive behind the `send_messages_to_user` MCP tool, used when an agent
|
|
7
|
+
* wants several separate messages (e.g. a per-item news digest: one message per
|
|
8
|
+
* headline). A single input string that renders past Telegram's cap is split
|
|
9
|
+
* defensively, but two distinct inputs are NEVER merged.
|
|
10
|
+
*
|
|
11
|
+
* Each item may ALSO carry ONE attachment: an item with a `path` is delivered
|
|
12
|
+
* through the SAME secure file-send pipeline as `send_file_to_user` (its `text`
|
|
13
|
+
* becomes the media caption, trimmed to Telegram's 1024-char cap), reusing all
|
|
14
|
+
* of that pipeline's path-safety, media classification, and dispatch. An item
|
|
15
|
+
* without a `path` is a plain text message exactly as before.
|
|
16
|
+
*
|
|
17
|
+
* Kept dependency-free of `bot.ts` (which builds a Telegraf instance at module
|
|
18
|
+
* load): the caller injects the target resolver, the per-chunk sender, and the
|
|
19
|
+
* reusable file-send closure, so this service composes with the same paced send
|
|
20
|
+
* path the rest of the bot uses and stays unit-testable in isolation (mirrors
|
|
21
|
+
* `createSendFilesToThread`).
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* @name DiscreteMessageItem
|
|
25
|
+
* @description One item of a `send_messages_to_user` batch. A plain string is a
|
|
26
|
+
* text-only message (backward-compatible). An object may carry a text body, an
|
|
27
|
+
* attachment `path` (relative to the bound folder), or both; `asFile` forces the
|
|
28
|
+
* document override on the attachment. At least one of `text`/`path` must be
|
|
29
|
+
* non-empty on an object item.
|
|
30
|
+
*/
|
|
31
|
+
export type DiscreteMessageItem = string | {
|
|
32
|
+
text?: string;
|
|
33
|
+
path?: string;
|
|
34
|
+
asFile?: boolean;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* @name SendMessagesToThreadResult
|
|
38
|
+
* @description `undeliveredCount` on success counts the messages that were
|
|
39
|
+
* attempted but did not land (a partial delivery stays `ok`), so a caller can
|
|
40
|
+
* tell a partial delivery from a full one without parsing `summary`.
|
|
41
|
+
* `sentMessageIds` are the TEXT messages that landed, in order — what a caller
|
|
42
|
+
* pins or edits afterwards (an answer's pin, S8); attachments are not listed.
|
|
43
|
+
*/
|
|
44
|
+
export type SendMessagesToThreadResult = {
|
|
45
|
+
ok: true;
|
|
46
|
+
summary: string;
|
|
47
|
+
undeliveredCount: number;
|
|
48
|
+
sentMessageIds: number[];
|
|
49
|
+
} | {
|
|
50
|
+
ok: false;
|
|
51
|
+
error: string;
|
|
52
|
+
} | {
|
|
53
|
+
ok: false;
|
|
54
|
+
kind: 'deliveryUnknown';
|
|
55
|
+
error: string;
|
|
56
|
+
};
|
|
57
|
+
export type SendMessagesToThread = (threadKey: string, args: SendMessagesToThreadOptions) => Promise<SendMessagesToThreadResult>;
|
|
58
|
+
export interface SendMessagesToThreadOptions {
|
|
59
|
+
/** The items to deliver, in order; each becomes its own Telegram message. */
|
|
60
|
+
messages: DiscreteMessageItem[];
|
|
61
|
+
/**
|
|
62
|
+
* Canonical directory granted by a directory-scoped MCP token. Threaded into
|
|
63
|
+
* every attachment send so the file pipeline re-checks the binding, exactly
|
|
64
|
+
* like `send_file_to_user`.
|
|
65
|
+
*/
|
|
66
|
+
authorizedWorkDir?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Optional cancellation — checked between items (best-effort, coarse) AND
|
|
69
|
+
* caught when an in-flight attachment send rejects with it, so either way the
|
|
70
|
+
* caller gets the structured "cancelled after delivering N" result.
|
|
71
|
+
*/
|
|
72
|
+
signal?: AbortSignal;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Upper bound on how many discrete messages one call may deliver. A per-item
|
|
76
|
+
* news digest is ~30–40 messages; 50 leaves headroom while bounding a runaway
|
|
77
|
+
* call (each message is separately rate-paced, so a large batch also floods the
|
|
78
|
+
* topic with notifications).
|
|
79
|
+
*/
|
|
80
|
+
export declare const maxDiscreteMessages = 50;
|
|
81
|
+
export interface SendMessagesToThreadDeps<TTarget> {
|
|
82
|
+
/** Map the scope-resolved thread key string to the concrete send target. */
|
|
83
|
+
resolveTarget(threadKey: string): {
|
|
84
|
+
ok: true;
|
|
85
|
+
target: TTarget;
|
|
86
|
+
} | {
|
|
87
|
+
ok: false;
|
|
88
|
+
error: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Send ONE already-split chunk as its own permanent message; resolves the sent
|
|
92
|
+
* message id, `null` when it did not land. The caller wires this to the bot's
|
|
93
|
+
* paced HTML-with-plain-fallback send so ordering / rate-limiting / `/clear`
|
|
94
|
+
* tracking are reused.
|
|
95
|
+
*/
|
|
96
|
+
sendChunk(target: TTarget, chunk: string, signal?: AbortSignal): Promise<number | null>;
|
|
97
|
+
/**
|
|
98
|
+
* Deliver ONE attachment via the SAME reusable file-send pipeline behind
|
|
99
|
+
* `send_file_to_user` (path-safety, media classification, album/size rules,
|
|
100
|
+
* 1024-char caption trim all reused). The caller injects the exact
|
|
101
|
+
* `sendFilesToThread` closure it already built for the file tool.
|
|
102
|
+
*/
|
|
103
|
+
sendFiles: SendFilesToThread;
|
|
104
|
+
/**
|
|
105
|
+
* The connector's own splitter — injected rather than imported so this
|
|
106
|
+
* service stays platform-neutral (the cap and the split rule are the
|
|
107
|
+
* surface's, not this service's).
|
|
108
|
+
*/
|
|
109
|
+
splitMessage(text: string, maxLength: number, measureRendered: (chunk: string) => number): string[];
|
|
110
|
+
/** Max SOURCE length per message handed to {@link SendMessagesToThreadDeps.splitMessage} (defensive split). */
|
|
111
|
+
maxMessageLength: number;
|
|
112
|
+
/** Rendered-length measure so an over-cap RENDERED message is split like normal output. */
|
|
113
|
+
measureRendered(chunk: string): number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* @description Build the discrete-message sender. Each item is delivered as its
|
|
117
|
+
* OWN message, preserving order: a text item is split (defensively) into
|
|
118
|
+
* Telegram-sized chunks and each chunk sent separately; an attachment item goes
|
|
119
|
+
* through the injected file-send pipeline as a single path (text → caption).
|
|
120
|
+
* Cancellation is checked between items (coarse — a chunk already dispatched to
|
|
121
|
+
* the pacer still lands) and is ALSO caught when it is raised from inside an
|
|
122
|
+
* in-flight attachment send: `sendFiles` rejects on abort rather than returning,
|
|
123
|
+
* and letting that escape hid how many messages had already landed (the agent's
|
|
124
|
+
* natural retry then posted them twice).
|
|
125
|
+
*
|
|
126
|
+
* Items are validated up front (an all-empty object → error, nothing sent) so
|
|
127
|
+
* the service mirrors the MCP schema's all-or-nothing rejection. Failure is NOT
|
|
128
|
+
* swallowed: if every send failed the result is an ERROR (with any attachment
|
|
129
|
+
* errors named), so the agent knows nothing reached the topic instead of reading
|
|
130
|
+
* a false "Delivered 0" success; a partial failure stays `ok` but says how many
|
|
131
|
+
* landed. An attachment whose delivery outcome is unknown terminates the batch
|
|
132
|
+
* with a `deliveryUnknown` result so the agent does not blindly retry (mirrors
|
|
133
|
+
* `send_file_to_user`).
|
|
134
|
+
*/
|
|
135
|
+
export declare function createSendMessagesToThread<TTarget>(deps: SendMessagesToThreadDeps<TTarget>): SendMessagesToThread;
|
|
136
|
+
//# sourceMappingURL=messageSendService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageSendService.d.ts","sourceRoot":"","sources":["../../src/utils/messageSendService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA2B,MAAM,mBAAmB,CAAC;AAEpF;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,GACjF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,KAC9B,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEzC,MAAM,WAAW,2BAA2B;IAC1C,6EAA6E;IAC7E,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAC/C,4EAA4E;IAC5E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/F;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxF;;;;;OAKG;IACH,SAAS,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC;IACpG,+GAA+G;IAC/G,gBAAgB,EAAE,MAAM,CAAC;IACzB,2FAA2F;IAC3F,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxC;AA8DD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAChD,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACtC,oBAAoB,CAwFtB"}
|