charness 0.0.0-stage → 3.1.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 +1196 -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 +1351 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeCliAdapter.js +4239 -0
- package/dist/adapters/claudeCliAdapter.js.map +1 -0
- package/dist/adapters/claudeConfigDir.d.ts +40 -0
- package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
- package/dist/adapters/claudeConfigDir.js +3 -0
- package/dist/adapters/claudeConfigDir.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +580 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.js +1891 -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 +260 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -0
- package/dist/adapters/createAdapter.js +512 -0
- package/dist/adapters/createAdapter.js.map +1 -0
- package/dist/adapters/openCodeAdapter.d.ts +1469 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
- package/dist/adapters/openCodeAdapter.js +4623 -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 +44 -0
- package/dist/agentLogin/agentLogin.d.ts.map +1 -0
- package/dist/agentLogin/agentLogin.js +530 -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 +214 -0
- package/dist/apiErrorRetry.d.ts.map +1 -0
- package/dist/apiErrorRetry.js +382 -0
- package/dist/apiErrorRetry.js.map +1 -0
- package/dist/apiRetryKick.d.ts +157 -0
- package/dist/apiRetryKick.d.ts.map +1 -0
- package/dist/apiRetryKick.js +174 -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 +11226 -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/claudeProfiles.d.ts +42 -0
- package/dist/cli/claudeProfiles.d.ts.map +1 -0
- package/dist/cli/claudeProfiles.js +106 -0
- package/dist/cli/claudeProfiles.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 +140 -0
- package/dist/cli.js.map +1 -0
- package/dist/connectors/jira/adf.d.ts +74 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -0
- package/dist/connectors/jira/adf.js +412 -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 +59 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -0
- package/dist/connectors/jira/answerSink.js +234 -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 +50 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentTool.js +166 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -0
- package/dist/connectors/jira/client.d.ts +522 -0
- package/dist/connectors/jira/client.d.ts.map +1 -0
- package/dist/connectors/jira/client.js +491 -0
- package/dist/connectors/jira/client.js.map +1 -0
- package/dist/connectors/jira/config.d.ts +104 -0
- package/dist/connectors/jira/config.d.ts.map +1 -0
- package/dist/connectors/jira/config.js +323 -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 +71 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -0
- package/dist/connectors/jira/connector.js +312 -0
- package/dist/connectors/jira/connector.js.map +1 -0
- package/dist/connectors/jira/contextLedger.d.ts +60 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
- package/dist/connectors/jira/contextLedger.js +196 -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 +141 -0
- package/dist/connectors/jira/inbound.d.ts.map +1 -0
- package/dist/connectors/jira/inbound.js +331 -0
- package/dist/connectors/jira/inbound.js.map +1 -0
- package/dist/connectors/jira/issueBlocks.d.ts +74 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
- package/dist/connectors/jira/issueBlocks.js +257 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -0
- package/dist/connectors/jira/issueContext.d.ts +31 -0
- package/dist/connectors/jira/issueContext.d.ts.map +1 -0
- package/dist/connectors/jira/issueContext.js +70 -0
- package/dist/connectors/jira/issueContext.js.map +1 -0
- package/dist/connectors/jira/issueDelta.d.ts +38 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
- package/dist/connectors/jira/issueDelta.js +59 -0
- package/dist/connectors/jira/issueDelta.js.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts +22 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.js +105 -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 +39 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -0
- package/dist/connectors/jira/prompt.js +102 -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 +18 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.js +106 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/jira/trigger.d.ts +54 -0
- package/dist/connectors/jira/trigger.d.ts.map +1 -0
- package/dist/connectors/jira/trigger.js +101 -0
- package/dist/connectors/jira/trigger.js.map +1 -0
- package/dist/connectors/jira/triggerLog.d.ts +53 -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/trustedGroup.d.ts +54 -0
- package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
- package/dist/connectors/jira/trustedGroup.js +98 -0
- package/dist/connectors/jira/trustedGroup.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 +34 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js +112 -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/claudeAccounts.d.ts +58 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
- package/dist/connectors/telegram/commands/claudeAccounts.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/fallbackChain.d.ts +49 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +117 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.js +966 -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 +665 -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 +694 -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 +665 -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 +665 -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 +665 -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 +665 -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 +665 -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 +665 -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 +668 -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 +670 -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 +665 -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 +665 -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 +363 -0
- package/dist/scheduler/mcpSurface.d.ts.map +1 -0
- package/dist/scheduler/mcpSurface.js +1297 -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 +1416 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +2128 -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 +1022 -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 +56 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
- package/dist/utils/autoContinueOnLimit.js +79 -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/claudeAccountPickerPlan.d.ts +85 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.js +123 -0
- package/dist/utils/claudeAccountPickerPlan.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/claudeLimitSwitch.d.ts +40 -0
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
- package/dist/utils/claudeLimitSwitch.js +54 -0
- package/dist/utils/claudeLimitSwitch.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/claudeProfileUsageLines.d.ts +15 -0
- package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
- package/dist/utils/claudeProfileUsageLines.js +42 -0
- package/dist/utils/claudeProfileUsageLines.js.map +1 -0
- package/dist/utils/claudeProfiles.d.ts +117 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -0
- package/dist/utils/claudeProfiles.js +285 -0
- package/dist/utils/claudeProfiles.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 +214 -0
- package/dist/utils/claudeStreamJson.d.ts.map +1 -0
- package/dist/utils/claudeStreamJson.js +364 -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/claudeUsage.d.ts +209 -0
- package/dist/utils/claudeUsage.d.ts.map +1 -0
- package/dist/utils/claudeUsage.js +413 -0
- package/dist/utils/claudeUsage.js.map +1 -0
- package/dist/utils/claudeUsageRefresher.d.ts +44 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
- package/dist/utils/claudeUsageRefresher.js +95 -0
- package/dist/utils/claudeUsageRefresher.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/fallbackBridge.d.ts +32 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -0
- package/dist/utils/fallbackBridge.js +62 -0
- package/dist/utils/fallbackBridge.js.map +1 -0
- package/dist/utils/fallbackChain.d.ts +299 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -0
- package/dist/utils/fallbackChain.js +542 -0
- package/dist/utils/fallbackChain.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 +238 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -0
- package/dist/utils/jsonStreamHost.js +438 -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/modelRecentPlan.d.ts +56 -0
- package/dist/utils/modelRecentPlan.d.ts.map +1 -0
- package/dist/utils/modelRecentPlan.js +107 -0
- package/dist/utils/modelRecentPlan.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 +79 -0
- package/dist/utils/threadStatusReport.d.ts.map +1 -0
- package/dist/utils/threadStatusReport.js +88 -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,555 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForeignKeySendRefusedError = exports.RateLimitedError = exports.formatRateSummaryLine = exports.rateLimiterConstants = exports.GlobalSendPacer = exports.shutdownDrainMaxMs = exports.globalSendIntervalMs = void 0;
|
|
4
|
+
exports.__setGlobalPacerForTest = __setGlobalPacerForTest;
|
|
5
|
+
exports.getActiveChatRateSummaries = getActiveChatRateSummaries;
|
|
6
|
+
exports.enterShutdownDrain = enterShutdownDrain;
|
|
7
|
+
exports.drainPendingSends = drainPendingSends;
|
|
8
|
+
exports.checkIsRateLimited = checkIsRateLimited;
|
|
9
|
+
exports.getRateLimitRemainingMs = getRateLimitRemainingMs;
|
|
10
|
+
exports.checkIsRateLimitedError = checkIsRateLimitedError;
|
|
11
|
+
exports.withRateLimitRetry = withRateLimitRetry;
|
|
12
|
+
exports.sendUnpaced = sendUnpaced;
|
|
13
|
+
exports.enqueueSend = enqueueSend;
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
const sessionKey_1 = require("./sessionKey");
|
|
16
|
+
const sessionKeyCodec_1 = require("./connectors/telegram/sessionKeyCodec");
|
|
17
|
+
const foreignKeyFallbacks_1 = require("./connectors/telegram/foreignKeyFallbacks");
|
|
18
|
+
const sendRateTracker_1 = require("./utils/sendRateTracker");
|
|
19
|
+
const rateLimitLog_1 = require("./utils/rateLimitLog");
|
|
20
|
+
Object.defineProperty(exports, "formatRateSummaryLine", { enumerable: true, get: function () { return rateLimitLog_1.formatRateSummaryLine; } });
|
|
21
|
+
const abortableFifo_1 = require("./utils/abortableFifo");
|
|
22
|
+
/**
|
|
23
|
+
* @description Telegram-side rate limiting for the multi-thread bot.
|
|
24
|
+
*
|
|
25
|
+
* Three layers, with different responsibilities:
|
|
26
|
+
*
|
|
27
|
+
* 1. **Per-thread FIFO queue** (`enqueueSend`). Keyed by **SessionKey**
|
|
28
|
+
* (`chatId+threadId`). Its only job is to preserve ordering between
|
|
29
|
+
* *dependent* operations on the same Telegram thread — e.g. an
|
|
30
|
+
* `editMessageText` that depends on a preceding `sendMessage`. Two
|
|
31
|
+
* forum topics interleave freely; only within one thread is ordering
|
|
32
|
+
* guaranteed.
|
|
33
|
+
*
|
|
34
|
+
* 2. **Global send pacer** ({@link GlobalSendPacer}). ONE process-wide
|
|
35
|
+
* frequency gate: it releases at most one send every
|
|
36
|
+
* {@link globalSendIntervalMs} across ALL chats (supergroup + owner DM),
|
|
37
|
+
* FCFS among waiters. It is CLOCK-BASED and NON-BLOCKING: a permit is
|
|
38
|
+
* granted on a timer, decoupled from whether the previous send's `fn`
|
|
39
|
+
* finished, so a slow/stuck send never head-of-line-blocks the others.
|
|
40
|
+
* This replaced the old per-chat priority token bucket: at ~1 send / 2 s
|
|
41
|
+
* Telegram never 429s under normal multi-topic use, and pure temporal
|
|
42
|
+
* FCFS (no priority classes) keeps cross-topic output in the order it
|
|
43
|
+
* was produced.
|
|
44
|
+
*
|
|
45
|
+
* 3. **`withRateLimitRetry`.** Keyed by **chatId**. Reactive: if Telegram
|
|
46
|
+
* still returns 429, sleep `retry_after + jitter` and retry once. A
|
|
47
|
+
* second 429 marks the chat blocked for the cooldown and surfaces a
|
|
48
|
+
* typed {@link RateLimitedError}. 429-state is per-chat because that's
|
|
49
|
+
* how Telegram returns it.
|
|
50
|
+
*
|
|
51
|
+
* The layers compose: `enqueueSend(key, fn)` chains behind the previous send
|
|
52
|
+
* for the *same thread*, then waits the global pacer, then runs `fn` through
|
|
53
|
+
* `withRateLimitRetry`. `withRateLimitRetry` stays exported for callers that
|
|
54
|
+
* need the retry without the proactive pacer (e.g. boot admin / health-check
|
|
55
|
+
* operations).
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* @description The global frequency gate: at most one send is released every
|
|
59
|
+
* {@link globalSendIntervalMs} across ALL chats. Steady state ≈ 1 send / 2 s,
|
|
60
|
+
* so Telegram's per-chat budget is never overrun under multi-topic streaming.
|
|
61
|
+
*/
|
|
62
|
+
exports.globalSendIntervalMs = 2000;
|
|
63
|
+
/**
|
|
64
|
+
* @description Default bound (ms) for {@link drainPendingSends}: how long the
|
|
65
|
+
* graceful-shutdown flush waits for the per-thread send FIFOs to empty before
|
|
66
|
+
* giving up. Sized well under the 10s shutdown watchdog so the later steps
|
|
67
|
+
* (transient-frame sweep, update drain, `state.flush()`) keep their budgets.
|
|
68
|
+
*/
|
|
69
|
+
exports.shutdownDrainMaxMs = 6000;
|
|
70
|
+
const realPacerClock = {
|
|
71
|
+
now: () => Date.now(),
|
|
72
|
+
setTimeout: (fn, ms) => { setTimeout(fn, ms); },
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* @description Process-wide FCFS frequency gate. `acquire()` resolves when a
|
|
76
|
+
* send permit is granted; permits are released one per {@link intervalMs},
|
|
77
|
+
* granted to waiters in strict arrival order (FCFS).
|
|
78
|
+
*
|
|
79
|
+
* CLOCK-BASED + NON-BLOCKING by design: the "next permit" time advances on a
|
|
80
|
+
* timer, never on the completion of a previous caller's send. A caller whose
|
|
81
|
+
* `fn` hangs after `acquire()` therefore cannot delay any other waiter — there
|
|
82
|
+
* is no head-of-line blocking through this gate.
|
|
83
|
+
*/
|
|
84
|
+
class GlobalSendPacer {
|
|
85
|
+
intervalMs;
|
|
86
|
+
clock;
|
|
87
|
+
/** Waiters parked for a permit, resolved in FIFO (arrival) order. */
|
|
88
|
+
waiters = new abortableFifo_1.AbortableFifo();
|
|
89
|
+
/** Earliest clock time the next permit may be granted. */
|
|
90
|
+
nextAllowedAt = 0;
|
|
91
|
+
/** A drain timer is already armed for the current waiter set. */
|
|
92
|
+
timerArmed = false;
|
|
93
|
+
/** Generation token that makes overdue, logically replaced timers inert. */
|
|
94
|
+
timerGeneration = 0;
|
|
95
|
+
/** Shutdown-drain mode: permits are granted immediately, no spacing. */
|
|
96
|
+
isShutdownDraining = false;
|
|
97
|
+
constructor(intervalMs, clock = realPacerClock) {
|
|
98
|
+
this.intervalMs = intervalMs;
|
|
99
|
+
this.clock = clock;
|
|
100
|
+
}
|
|
101
|
+
/** How many sends are currently parked waiting for a permit. */
|
|
102
|
+
getPendingCount() {
|
|
103
|
+
return this.waiters.size;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Flip the pacer into shutdown-drain mode: every parked waiter is released
|
|
107
|
+
* NOW (in FIFO order) and every subsequent `acquire()` resolves immediately.
|
|
108
|
+
* ONLY for the graceful-shutdown flush — during live operation the spacing is
|
|
109
|
+
* what keeps Telegram from 429ing; `withRateLimitRetry` stays on every send
|
|
110
|
+
* either way, so the small shutdown burst remains 429-safe. One-way: the
|
|
111
|
+
* process is exiting, so there is no leave-drain path.
|
|
112
|
+
*/
|
|
113
|
+
enterShutdownDrain() {
|
|
114
|
+
this.isShutdownDraining = true;
|
|
115
|
+
this.invalidateDrainTimer();
|
|
116
|
+
this.waiters.resolveAll();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve when a send permit is granted. Fast path: when nobody is waiting
|
|
120
|
+
* and the window is already open, grant immediately (so a send after a ≥
|
|
121
|
+
* interval-long idle never eats a needless delay). Otherwise queue FIFO and
|
|
122
|
+
* let the clock-driven drain grant it in turn.
|
|
123
|
+
*/
|
|
124
|
+
acquire(signal) {
|
|
125
|
+
if (signal?.aborted)
|
|
126
|
+
return Promise.reject((0, utils_1.getAbortError)(signal));
|
|
127
|
+
if (this.isShutdownDraining)
|
|
128
|
+
return Promise.resolve();
|
|
129
|
+
const now = this.clock.now();
|
|
130
|
+
if (this.waiters.size === 0 && now >= this.nextAllowedAt) {
|
|
131
|
+
this.invalidateDrainTimer();
|
|
132
|
+
this.nextAllowedAt = now + this.intervalMs;
|
|
133
|
+
return Promise.resolve();
|
|
134
|
+
}
|
|
135
|
+
const waiter = this.waiters.wait(signal);
|
|
136
|
+
this.armDrain();
|
|
137
|
+
return waiter;
|
|
138
|
+
}
|
|
139
|
+
/** Arm a single timer to grant the head waiter when the window next opens. */
|
|
140
|
+
armDrain() {
|
|
141
|
+
if (this.timerArmed || this.waiters.size === 0)
|
|
142
|
+
return;
|
|
143
|
+
const waitMs = Math.max(this.nextAllowedAt - this.clock.now(), 0);
|
|
144
|
+
this.timerArmed = true;
|
|
145
|
+
const timerGeneration = ++this.timerGeneration;
|
|
146
|
+
this.clock.setTimeout(() => {
|
|
147
|
+
if (timerGeneration !== this.timerGeneration)
|
|
148
|
+
return;
|
|
149
|
+
this.timerArmed = false;
|
|
150
|
+
this.drainOne();
|
|
151
|
+
}, Math.max(waitMs, 1));
|
|
152
|
+
}
|
|
153
|
+
/** Logically cancel an armed timer when the pacing window is replaced. */
|
|
154
|
+
invalidateDrainTimer() {
|
|
155
|
+
if (!this.timerArmed)
|
|
156
|
+
return;
|
|
157
|
+
this.timerArmed = false;
|
|
158
|
+
this.timerGeneration += 1;
|
|
159
|
+
}
|
|
160
|
+
/** Grant exactly one permit (the head waiter), advance the clock, re-arm. */
|
|
161
|
+
drainOne() {
|
|
162
|
+
if (!this.waiters.resolveNext())
|
|
163
|
+
return;
|
|
164
|
+
// Advance from whichever is later — the scheduled slot or NOW — so a late
|
|
165
|
+
// timer never bunches two grants closer than the interval.
|
|
166
|
+
this.nextAllowedAt = Math.max(this.nextAllowedAt, this.clock.now()) + this.intervalMs;
|
|
167
|
+
if (this.waiters.size > 0)
|
|
168
|
+
this.armDrain();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.GlobalSendPacer = GlobalSendPacer;
|
|
172
|
+
/** The process-wide pacer. Swappable in tests via {@link __setGlobalPacerForTest}. */
|
|
173
|
+
let globalPacer = new GlobalSendPacer(exports.globalSendIntervalMs, realPacerClock);
|
|
174
|
+
/**
|
|
175
|
+
* @description Test-only seam: replace the process pacer with one on a
|
|
176
|
+
* deterministic clock so `enqueueSend` integration tests run instantly instead
|
|
177
|
+
* of waiting real 2 s windows. Never called in production.
|
|
178
|
+
*/
|
|
179
|
+
function __setGlobalPacerForTest(pacer) {
|
|
180
|
+
globalPacer = pacer;
|
|
181
|
+
}
|
|
182
|
+
exports.rateLimiterConstants = {
|
|
183
|
+
globalSendIntervalMs: exports.globalSendIntervalMs,
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* @description Always-on per-chat outbound send-rate instrumentation
|
|
187
|
+
* (plan 2026-06-24-rate-limit-429-metrics). Records every outbound send at the
|
|
188
|
+
* single chokepoint ({@link enqueueSend}), so the rich 429 log line and the
|
|
189
|
+
* periodic rate summary can characterise how hard each chat's channel is being
|
|
190
|
+
* pushed. Bounded + best-effort — it never throws into the send hot path.
|
|
191
|
+
*/
|
|
192
|
+
const sendRateTracker = new sendRateTracker_1.SendRateTracker();
|
|
193
|
+
/**
|
|
194
|
+
* @description Per-chat outbound-rate snapshots for every chat with activity in
|
|
195
|
+
* the rolling minute (silent chats omitted). The `bot.ts` periodic janitor logs
|
|
196
|
+
* these as `[RateLimit] rate …` lines — see {@link formatRateSummaryLine}.
|
|
197
|
+
*/
|
|
198
|
+
function getActiveChatRateSummaries(nowMs = Date.now()) {
|
|
199
|
+
return sendRateTracker.getActiveChats(nowMs).map((chatId) => ({
|
|
200
|
+
chatId,
|
|
201
|
+
sentPerMin: sendRateTracker.getSendsPerMin(chatId, nowMs),
|
|
202
|
+
peak10s: sendRateTracker.getPeakInSubWindow(chatId, undefined, nowMs),
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* @description Per-thread FIFO of in-flight sends, keyed by serialised
|
|
207
|
+
* `SessionKey` (`"<chatId>:<threadId>"`).
|
|
208
|
+
*
|
|
209
|
+
* The global pacer already spaces sends across the whole process; we
|
|
210
|
+
* additionally chain sends within a single Telegram thread so
|
|
211
|
+
* `bot.telegram.sendMessage` returns to callers in the order they were queued.
|
|
212
|
+
* This preserves sequencing for operations that *do* depend on order (an
|
|
213
|
+
* `editMessageText` after the `sendMessage` whose id it edits, a
|
|
214
|
+
* `pinChatMessage` after the banner-send that produced the id) — but only
|
|
215
|
+
* within one thread, where those dependencies actually live. Different threads
|
|
216
|
+
* stay independent, so a slow send / 429 sleep in one thread never freezes the
|
|
217
|
+
* others.
|
|
218
|
+
*/
|
|
219
|
+
const queues = new Map();
|
|
220
|
+
/**
|
|
221
|
+
* @description Flip the process pacer into shutdown-drain mode (immediate
|
|
222
|
+
* release, no 2s spacing). ONLY called from the graceful-shutdown output flush
|
|
223
|
+
* — never during live operation, where the spacing is the 429 protection.
|
|
224
|
+
* Sends drained in this mode still run through {@link withRateLimitRetry}.
|
|
225
|
+
*/
|
|
226
|
+
function enterShutdownDrain() {
|
|
227
|
+
globalPacer.enterShutdownDrain();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* @description Resolve once every per-thread send FIFO is empty, or after
|
|
231
|
+
* `maxWaitMs` — whichever comes first — reporting which. Pure bookkeeping over
|
|
232
|
+
* the existing {@link queues} map: it awaits the current queue tails (which
|
|
233
|
+
* never reject — `enqueueSend` tracks them settled-only) and loops, because a
|
|
234
|
+
* send finishing may have chained a successor onto the same thread's queue.
|
|
235
|
+
* Used by the graceful-shutdown flush after {@link enterShutdownDrain} so
|
|
236
|
+
* already-enqueued output lands before the process exits.
|
|
237
|
+
*/
|
|
238
|
+
async function drainPendingSends(maxWaitMs = exports.shutdownDrainMaxMs) {
|
|
239
|
+
const deadline = Date.now() + maxWaitMs;
|
|
240
|
+
while (queues.size > 0) {
|
|
241
|
+
const remainingMs = deadline - Date.now();
|
|
242
|
+
if (remainingMs <= 0)
|
|
243
|
+
return 'timeout';
|
|
244
|
+
const tails = [...queues.values()];
|
|
245
|
+
const isTimedOut = await Promise.race([
|
|
246
|
+
Promise.all(tails).then(() => false),
|
|
247
|
+
new Promise((resolve) => {
|
|
248
|
+
const timer = setTimeout(() => resolve(true), remainingMs);
|
|
249
|
+
timer.unref?.();
|
|
250
|
+
}),
|
|
251
|
+
]);
|
|
252
|
+
if (isTimedOut)
|
|
253
|
+
return 'timeout';
|
|
254
|
+
// The settled tails delete their map entries in `enqueueSend`'s `finally`,
|
|
255
|
+
// which runs a microtask after the tracked promise resolves — yield one
|
|
256
|
+
// macrotask so those deletes land before the emptiness re-check.
|
|
257
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
258
|
+
}
|
|
259
|
+
return 'drained';
|
|
260
|
+
}
|
|
261
|
+
const rateLimitStates = new Map();
|
|
262
|
+
function getRateLimitState(chatId) {
|
|
263
|
+
let state = rateLimitStates.get(chatId);
|
|
264
|
+
if (!state) {
|
|
265
|
+
state = { blockedUntil: 0 };
|
|
266
|
+
rateLimitStates.set(chatId, state);
|
|
267
|
+
}
|
|
268
|
+
return state;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* @description Check if a chat is currently rate-limited by Telegram.
|
|
272
|
+
* Used by the output debounce to lengthen delays during cooldown.
|
|
273
|
+
*/
|
|
274
|
+
function checkIsRateLimited(chatId) {
|
|
275
|
+
const state = getRateLimitState(chatId);
|
|
276
|
+
return Date.now() < state.blockedUntil;
|
|
277
|
+
}
|
|
278
|
+
/** Get remaining cooldown time in ms, 0 if not limited. */
|
|
279
|
+
function getRateLimitRemainingMs(chatId) {
|
|
280
|
+
const state = getRateLimitState(chatId);
|
|
281
|
+
return Math.max(0, state.blockedUntil - Date.now());
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* @name RateLimitedError
|
|
285
|
+
* @description Thrown by {@link withRateLimitRetry} when a send still gets a
|
|
286
|
+
* 429 *after* the single retry. Carries the chat id and the remaining cooldown
|
|
287
|
+
* as a typed signal. The global pacer makes a sustained 429 essentially
|
|
288
|
+
* impossible, so this no longer drives any redelivery re-arm — it stays a typed
|
|
289
|
+
* error so a caller can recognise the 429 class if it ever surfaces.
|
|
290
|
+
*
|
|
291
|
+
* The original Telegram error payload is preserved on `response` so the
|
|
292
|
+
* existing classifier helpers (`checkIsApiError`, `getErrorCode`,
|
|
293
|
+
* `getErrorDescription`) keep working unchanged on this error.
|
|
294
|
+
*/
|
|
295
|
+
class RateLimitedError extends Error {
|
|
296
|
+
chatId;
|
|
297
|
+
retryAfterMs;
|
|
298
|
+
response;
|
|
299
|
+
constructor(chatId, retryAfterMs, original) {
|
|
300
|
+
super(`Telegram rate limit on chat ${chatId}, cooldown ${Math.ceil(retryAfterMs / 1000)}s`);
|
|
301
|
+
this.chatId = chatId;
|
|
302
|
+
this.retryAfterMs = retryAfterMs;
|
|
303
|
+
this.name = 'RateLimitedError';
|
|
304
|
+
this.response = original?.response;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
exports.RateLimitedError = RateLimitedError;
|
|
308
|
+
function checkIsRateLimitedError(err) {
|
|
309
|
+
return err instanceof RateLimitedError;
|
|
310
|
+
}
|
|
311
|
+
function checkIsTelegramRateLimitError(err) {
|
|
312
|
+
if (typeof err !== 'object' || err === null)
|
|
313
|
+
return false;
|
|
314
|
+
const e = err;
|
|
315
|
+
return e.response?.error_code === 429;
|
|
316
|
+
}
|
|
317
|
+
/** Default cooldown when Telegram omits `retry_after` (mirrors {@link getRetryAfterMs}). */
|
|
318
|
+
const defaultRetryAfterSec = 30;
|
|
319
|
+
function getRetryAfterMs(err) {
|
|
320
|
+
const retryAfterSec = err.response?.parameters?.retry_after ?? defaultRetryAfterSec;
|
|
321
|
+
// Add jitter: multiply by random factor 1.0–1.3 to avoid thundering herd
|
|
322
|
+
const jitter = 1 + Math.random() * 0.3;
|
|
323
|
+
return Math.ceil(retryAfterSec * 1000 * jitter);
|
|
324
|
+
}
|
|
325
|
+
/** The raw `retry_after` Telegram returned (seconds) — the value we log. */
|
|
326
|
+
function getRawRetryAfterSec(err) {
|
|
327
|
+
return err.response?.parameters?.retry_after ?? defaultRetryAfterSec;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* @description Emit the rich, greppable `[RateLimit] 429` instrumentation line
|
|
331
|
+
* for one 429, gathering the measured send-rate (from the tracker) and the
|
|
332
|
+
* global pacer's current queue depth. Best-effort: a failure to build the line
|
|
333
|
+
* must never mask the 429 handling itself.
|
|
334
|
+
*/
|
|
335
|
+
function logRateLimit429(chatId, err, isAfterRetry) {
|
|
336
|
+
try {
|
|
337
|
+
const line = (0, rateLimitLog_1.formatRateLimit429Line)({
|
|
338
|
+
chatId,
|
|
339
|
+
retryAfterSec: getRawRetryAfterSec(err),
|
|
340
|
+
sentPerMin: sendRateTracker.getSendsPerMin(chatId),
|
|
341
|
+
peak10s: sendRateTracker.getPeakInSubWindow(chatId),
|
|
342
|
+
queuedSends: globalPacer.getPendingCount(),
|
|
343
|
+
isAfterRetry,
|
|
344
|
+
});
|
|
345
|
+
if (isAfterRetry)
|
|
346
|
+
console.error(line);
|
|
347
|
+
else
|
|
348
|
+
console.log(line);
|
|
349
|
+
}
|
|
350
|
+
catch { /* instrumentation must never break 429 handling */ }
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* @description Wraps a Telegram API call with 429 retry-after handling.
|
|
354
|
+
* On 429: waits the specified retry_after + jitter, retries once.
|
|
355
|
+
* If second attempt also fails with 429: marks chat as rate-limited, throws.
|
|
356
|
+
*
|
|
357
|
+
* Most call sites should prefer {@link enqueueSend}, which runs `fn` through
|
|
358
|
+
* the global pacer *and* `withRateLimitRetry`. Use this function directly only
|
|
359
|
+
* when you must bypass the proactive pacer (e.g. admin / health-check
|
|
360
|
+
* operations during boot).
|
|
361
|
+
*/
|
|
362
|
+
async function withRateLimitRetry(chatId, operation, signal) {
|
|
363
|
+
if (signal?.aborted)
|
|
364
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
365
|
+
const state = getRateLimitState(chatId);
|
|
366
|
+
// If currently rate-limited, wait for cooldown
|
|
367
|
+
const remainingMs = state.blockedUntil - Date.now();
|
|
368
|
+
if (remainingMs > 0) {
|
|
369
|
+
console.log(`[RateLimit] chat ${chatId} blocked for ${Math.ceil(remainingMs / 1000)}s, waiting...`);
|
|
370
|
+
await (0, utils_1.sleep)(remainingMs, signal);
|
|
371
|
+
}
|
|
372
|
+
try {
|
|
373
|
+
if (signal?.aborted)
|
|
374
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
375
|
+
return await operation();
|
|
376
|
+
}
|
|
377
|
+
catch (err) {
|
|
378
|
+
if (!checkIsTelegramRateLimitError(err))
|
|
379
|
+
throw err;
|
|
380
|
+
const waitMs = getRetryAfterMs(err);
|
|
381
|
+
state.blockedUntil = Date.now() + waitMs;
|
|
382
|
+
logRateLimit429(chatId, err, /* isAfterRetry */ false);
|
|
383
|
+
await (0, utils_1.sleep)(waitMs, signal);
|
|
384
|
+
// Single retry
|
|
385
|
+
try {
|
|
386
|
+
if (signal?.aborted)
|
|
387
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
388
|
+
const result = await operation();
|
|
389
|
+
state.blockedUntil = 0;
|
|
390
|
+
return result;
|
|
391
|
+
}
|
|
392
|
+
catch (retryErr) {
|
|
393
|
+
if (checkIsTelegramRateLimitError(retryErr)) {
|
|
394
|
+
const secondWaitMs = getRetryAfterMs(retryErr);
|
|
395
|
+
state.blockedUntil = Date.now() + secondWaitMs;
|
|
396
|
+
logRateLimit429(chatId, retryErr, /* isAfterRetry */ true);
|
|
397
|
+
// Surface a typed error so a caller can recognise the 429 class. The
|
|
398
|
+
// global pacer makes a sustained double-429 essentially impossible, so
|
|
399
|
+
// this no longer re-arms any redelivery.
|
|
400
|
+
throw new RateLimitedError(chatId, secondWaitMs, retryErr);
|
|
401
|
+
}
|
|
402
|
+
throw retryErr;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* @description A send for a conversation of another platform (Jira connector
|
|
408
|
+
* plan J2b, R2): its operation never runs. Like a failed Telegram call it
|
|
409
|
+
* rejects, so an awaiting caller takes its error path.
|
|
410
|
+
*/
|
|
411
|
+
class ForeignKeySendRefusedError extends Error {
|
|
412
|
+
constructor(key) {
|
|
413
|
+
super(`Telegram send refused: ${key.platform} conversation ${key.space}/${key.thread} ${foreignKeyFallbacks_1.notTelegramChatPhrase}`);
|
|
414
|
+
this.name = 'ForeignKeySendRefusedError';
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.ForeignKeySendRefusedError = ForeignKeySendRefusedError;
|
|
418
|
+
/** The second line behind the bot's per-primitive guards; logs once per entry point and conversation. */
|
|
419
|
+
const checkIsTelegramSendKey = (0, foreignKeyFallbacks_1.createTelegramPrimitiveGuard)();
|
|
420
|
+
/**
|
|
421
|
+
* The refusal of a foreign key's send. A handler is attached before it is
|
|
422
|
+
* returned, so a caller that fires and forgets it never raises an unhandled
|
|
423
|
+
* rejection — which would end the whole process.
|
|
424
|
+
*/
|
|
425
|
+
function getForeignKeySendRefusal(key) {
|
|
426
|
+
const refusal = Promise.reject(new ForeignKeySendRefusedError(key));
|
|
427
|
+
refusal.catch(() => { });
|
|
428
|
+
return refusal;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* @description The shared send tail both the paced and unpaced paths end in:
|
|
432
|
+
* record the outbound send for the per-chat rate summary (best-effort — never
|
|
433
|
+
* throws into the send path), then run `fn` through the reactive 429 retry.
|
|
434
|
+
* Keeping it in one place stops {@link enqueueSend} and {@link sendUnpaced} from
|
|
435
|
+
* drifting on 429-safety or instrumentation.
|
|
436
|
+
*/
|
|
437
|
+
function recordAndRetry(key, fn, signal) {
|
|
438
|
+
// Record exactly one outbound send per logical send (best-effort
|
|
439
|
+
// instrumentation — never let it break a send).
|
|
440
|
+
const chatId = (0, sessionKeyCodec_1.getTelegramChatId)(key);
|
|
441
|
+
try {
|
|
442
|
+
sendRateTracker.recordSend(chatId);
|
|
443
|
+
}
|
|
444
|
+
catch { /* never throw into the send path */ }
|
|
445
|
+
return withRateLimitRetry(chatId, fn, signal);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* @description Send a Telegram operation OUTSIDE the global message pacer and
|
|
449
|
+
* the per-thread FIFO — still 429-safe ({@link withRateLimitRetry}) and still
|
|
450
|
+
* counted by {@link sendRateTracker}, but WITHOUT taking a
|
|
451
|
+
* {@link globalSendIntervalMs} permit and WITHOUT chaining behind the thread's
|
|
452
|
+
* other sends. Runs immediately.
|
|
453
|
+
*
|
|
454
|
+
* Reserved for the rare, non-output sends that must not consume the paced
|
|
455
|
+
* message budget nor queue behind streaming agent output:
|
|
456
|
+
* - the typing indicator (`sendChatAction` — not a Telegram message, not
|
|
457
|
+
* subject to the flood limit, so pacing it just wastes ~60% of the budget);
|
|
458
|
+
* - the voice-transcript echo (the user's own input being acknowledged, which
|
|
459
|
+
* should surface ahead of queued agent output).
|
|
460
|
+
*
|
|
461
|
+
* Do NOT route ordinary agent-output `sendMessage`s through this — that would
|
|
462
|
+
* break the FCFS ordering the pacer guarantees.
|
|
463
|
+
*/
|
|
464
|
+
function sendUnpaced(key, fn, signal) {
|
|
465
|
+
// Not `async`, for the same reason as {@link enqueueSend}.
|
|
466
|
+
if (!checkIsTelegramSendKey(key, 'sendUnpaced'))
|
|
467
|
+
return getForeignKeySendRefusal(key);
|
|
468
|
+
return sendTelegramUnpaced(key, fn, signal);
|
|
469
|
+
}
|
|
470
|
+
/** Async, so a synchronous throw on the way to the send still arrives as a rejection. */
|
|
471
|
+
async function sendTelegramUnpaced(key, fn, signal) {
|
|
472
|
+
return recordAndRetry(key, fn, signal);
|
|
473
|
+
}
|
|
474
|
+
/** Reject while queued, but never race a started operation's cleanup/result. */
|
|
475
|
+
function waitForQueuedExecution(execution, checkOperationStarted, signal) {
|
|
476
|
+
if (!signal)
|
|
477
|
+
return execution;
|
|
478
|
+
if (signal.aborted)
|
|
479
|
+
return Promise.reject((0, utils_1.getAbortError)(signal));
|
|
480
|
+
return new Promise((resolve, reject) => {
|
|
481
|
+
const handleAbort = () => {
|
|
482
|
+
if (!checkOperationStarted())
|
|
483
|
+
reject((0, utils_1.getAbortError)(signal));
|
|
484
|
+
};
|
|
485
|
+
signal.addEventListener('abort', handleAbort, { once: true });
|
|
486
|
+
execution.then((result) => {
|
|
487
|
+
signal.removeEventListener('abort', handleAbort);
|
|
488
|
+
resolve(result);
|
|
489
|
+
}, (error) => {
|
|
490
|
+
signal.removeEventListener('abort', handleAbort);
|
|
491
|
+
reject(error);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* @description Send a Telegram operation through the per-thread FIFO queue, the
|
|
497
|
+
* global send pacer, and per-chat 429 retry.
|
|
498
|
+
*
|
|
499
|
+
* - **Serialised per thread**: the next send for the same `SessionKey` only runs
|
|
500
|
+
* after this one settles (success or failure). Sends for *different* threads
|
|
501
|
+
* run concurrently, gated only by the global pacer.
|
|
502
|
+
* - **Paced globally**: {@link GlobalSendPacer} releases ≤1 send /
|
|
503
|
+
* {@link globalSendIntervalMs} across all chats, FCFS. Permits are granted on
|
|
504
|
+
* a clock, so a slow send never blocks another thread's permit.
|
|
505
|
+
* - **Retry on 429**: reactive backoff via {@link withRateLimitRetry}.
|
|
506
|
+
*
|
|
507
|
+
* Errors from the operation are returned to the caller (we don't swallow
|
|
508
|
+
* them — only the queue tail is swallowed so a single failure doesn't poison
|
|
509
|
+
* every subsequent send on that thread).
|
|
510
|
+
*
|
|
511
|
+
* @example
|
|
512
|
+
* await enqueueSend(key, () =>
|
|
513
|
+
* bot.telegram.sendMessage(key.chatId, text, { message_thread_id: key.threadId }));
|
|
514
|
+
*/
|
|
515
|
+
function enqueueSend(key, fn, signal) {
|
|
516
|
+
// Not `async`: an async function would wrap the handled refusal in a NEW, unhandled promise.
|
|
517
|
+
if (!checkIsTelegramSendKey(key, 'enqueueSend'))
|
|
518
|
+
return getForeignKeySendRefusal(key);
|
|
519
|
+
return enqueueTelegramSend(key, fn, signal);
|
|
520
|
+
}
|
|
521
|
+
async function enqueueTelegramSend(key, fn, signal) {
|
|
522
|
+
if (signal?.aborted)
|
|
523
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
524
|
+
const queueKey = (0, sessionKey_1.keyToString)(key);
|
|
525
|
+
const prev = queues.get(queueKey);
|
|
526
|
+
let isOperationStarted = false;
|
|
527
|
+
const exec = async () => {
|
|
528
|
+
await globalPacer.acquire(signal);
|
|
529
|
+
return recordAndRetry(key, () => {
|
|
530
|
+
isOperationStarted = true;
|
|
531
|
+
return fn();
|
|
532
|
+
}, signal);
|
|
533
|
+
};
|
|
534
|
+
// Chain: wait for prev (ignore its errors), then run our exec.
|
|
535
|
+
const execution = (async () => {
|
|
536
|
+
if (prev) {
|
|
537
|
+
try {
|
|
538
|
+
await prev;
|
|
539
|
+
}
|
|
540
|
+
catch { /* swallow predecessor errors */ }
|
|
541
|
+
}
|
|
542
|
+
if (signal?.aborted)
|
|
543
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
544
|
+
return exec();
|
|
545
|
+
})();
|
|
546
|
+
const tracked = execution.then(() => undefined, () => undefined);
|
|
547
|
+
queues.set(queueKey, tracked);
|
|
548
|
+
void tracked.then(() => {
|
|
549
|
+
if (queues.get(queueKey) === tracked) {
|
|
550
|
+
queues.delete(queueKey);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
return waitForQueuedExecution(execution, () => isOperationStarted, signal);
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../src/rateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type SessionKey } from '../sessionKey';
|
|
2
|
+
import { type AnswerSinks } from '../platform/answerSink';
|
|
3
|
+
import type { RequestLedger } from './requestLedger';
|
|
4
|
+
import type { RequestAnswerKind } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* @description The `answer_request` contract (request/answer core S3), kept out
|
|
7
|
+
* of the MCP surface so the rules are testable without HTTP:
|
|
8
|
+
*
|
|
9
|
+
* unknown id, or an id outside the caller's scope → refused, nothing sent
|
|
10
|
+
* (the two read the same, so a session cannot probe other topics' ids)
|
|
11
|
+
* delivery through the request platform's answer sink fails → refused, the
|
|
12
|
+
* request is unchanged and the agent may retry
|
|
13
|
+
* delivered, request open: progress → counted, stays open
|
|
14
|
+
* question / final → closes the request
|
|
15
|
+
* delivered, request closed: nothing changes (a late answer from a turn that
|
|
16
|
+
* outlived its request is still delivered — content is never dropped); a
|
|
17
|
+
* superseded request's result names the request that replaced it and says
|
|
18
|
+
* its prompt follows — the agent answers only what that one adds, never the
|
|
19
|
+
* same work twice (Claude Code delivers a message written mid-turn only
|
|
20
|
+
* after the turn ends, so this is the normal order there)
|
|
21
|
+
*/
|
|
22
|
+
/** The longest answer body accepted; the sinks split it to their surface's limits. */
|
|
23
|
+
export declare const answerBodyMaxLength = 100000;
|
|
24
|
+
/**
|
|
25
|
+
* @name AnswerRequestDeps
|
|
26
|
+
* @description The ledger (awaited until loaded — the bot MCP server serves
|
|
27
|
+
* before the boot finished) and the answer sinks by platform.
|
|
28
|
+
* `onAnswerDelivered` hears every answer that reached the requester, to an open
|
|
29
|
+
* request or a closed one (the wake-up engine follows what comes after a final).
|
|
30
|
+
*/
|
|
31
|
+
export interface AnswerRequestDeps {
|
|
32
|
+
ledger: Pick<RequestLedger, 'whenLoaded' | 'getRequest' | 'updateOpenRequest' | 'closeRequest'>;
|
|
33
|
+
answerSinks: AnswerSinks;
|
|
34
|
+
onAnswerDelivered?: (key: SessionKey, requestId: string, kind: RequestAnswerKind) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @name AnswerRequestArgs
|
|
38
|
+
* @description One `answer_request` call. `checkIsConversationInScope` answers
|
|
39
|
+
* whether the calling session's token covers a conversation (serialized key).
|
|
40
|
+
*/
|
|
41
|
+
export interface AnswerRequestArgs {
|
|
42
|
+
requestId: string;
|
|
43
|
+
kind: RequestAnswerKind;
|
|
44
|
+
body: string;
|
|
45
|
+
checkIsConversationInScope: (conversationKey: string) => boolean;
|
|
46
|
+
}
|
|
47
|
+
/** @description What the tool reports back to the agent. */
|
|
48
|
+
export type AnswerRequestOutcome = {
|
|
49
|
+
ok: true;
|
|
50
|
+
message: string;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
error: string;
|
|
54
|
+
};
|
|
55
|
+
/** @description Deliver one answer and apply the close rules. */
|
|
56
|
+
export declare function answerRequest(deps: AnswerRequestDeps, args: AnswerRequestArgs): Promise<AnswerRequestOutcome>;
|
|
57
|
+
//# sourceMappingURL=answerRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answerRequest.d.ts","sourceRoot":"","sources":["../../src/requests/answerRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAuB,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAE1F;;;;;;;;;;;;;;;;GAgBG;AAEH,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAS3C;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,YAAY,GAAG,mBAAmB,GAAG,cAAc,CAAC,CAAC;IAChG,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC3F;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC;CAClE;AAED,4DAA4D;AAC5D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAyBhG,iEAAiE;AACjE,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA4CnH"}
|