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,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision layer for the auto-retry-after-API-error feature
|
|
3
|
+
* (plan `agent/tasks/actual/2026-06-09-api-error-auto-retry.md`, S1). No I/O and
|
|
4
|
+
* no `Date.now()` inside: every caller passes `now` so the module is fully
|
|
5
|
+
* deterministic and unit-testable on a fixed clock.
|
|
6
|
+
*
|
|
7
|
+
* Two responsibilities:
|
|
8
|
+
* - {@link classifyAgentApiError} — read a terminal error string and decide
|
|
9
|
+
* whether (and how) it should be auto-retried. ORDER MATTERS (see the fn doc).
|
|
10
|
+
* - {@link getRetryPlan} — given a class + the current attempt, decide the next
|
|
11
|
+
* backoff delay or that we should give up.
|
|
12
|
+
*
|
|
13
|
+
* The same classifier serves BOTH backends: Claude surfaces the provider's
|
|
14
|
+
* "API Error" line in its TUI pane; OpenCode surfaces the same provider text
|
|
15
|
+
* through `session.error`.
|
|
16
|
+
*/
|
|
17
|
+
import type { AgentApiErrorClass } from './types';
|
|
18
|
+
/**
|
|
19
|
+
* Transient backoff schedule (one entry per attempt): attempt 1 → 5m,
|
|
20
|
+
* 2 → 10m, 3 → 20m. After the last entry the retry gives up.
|
|
21
|
+
*/
|
|
22
|
+
export declare const transientBackoffMinutes: readonly [5, 10, 20];
|
|
23
|
+
/** Max transient attempts before giving up (= `transientBackoffMinutes.length`). */
|
|
24
|
+
export declare const transientMaxAttempts: 3;
|
|
25
|
+
/**
|
|
26
|
+
* Fixed delay for a usage-limit error whose text exposed no reset time (the
|
|
27
|
+
* common case for Claude's "blocked" message): 60 minutes, re-armed on each
|
|
28
|
+
* repeat until {@link usageLimitMaxAttempts}.
|
|
29
|
+
*/
|
|
30
|
+
export declare const usageLimitDefaultMs: number;
|
|
31
|
+
/** Max usage-limit attempts before giving up (~6h with the default delay). */
|
|
32
|
+
export declare const usageLimitMaxAttempts = 6;
|
|
33
|
+
/**
|
|
34
|
+
* Grace window after a retry fires: another API error within this window counts
|
|
35
|
+
* as the SAME error episode (escalate to attempt+1, longer backoff); an error
|
|
36
|
+
* later than this is a FRESH episode (reset to attempt 1). Decouples the
|
|
37
|
+
* decision from session-end events — a recovered turn just leaves a stale record
|
|
38
|
+
* that the next, much-later error resets to attempt 1.
|
|
39
|
+
*/
|
|
40
|
+
export declare const retryRecurrenceGraceMs: number;
|
|
41
|
+
/**
|
|
42
|
+
* Padding added to a parsed reset time so the retry fires just AFTER the window
|
|
43
|
+
* actually rolls over, never a hair before it (which would re-error instantly).
|
|
44
|
+
*/
|
|
45
|
+
export declare const resetBufferMs = 60000;
|
|
46
|
+
/**
|
|
47
|
+
* @description The auth / logged-out phrases (`please run /login`, `not logged
|
|
48
|
+
* in`, `invalid authentication credentials`). Shared with the Claude scrape
|
|
49
|
+
* detector (`getClaudeAgentErrorLine`) so the two never drift. NOT global — used
|
|
50
|
+
* with `.test()`, so lastIndex never carries between calls.
|
|
51
|
+
*/
|
|
52
|
+
export declare const authErrorPhrasesRe: RegExp;
|
|
53
|
+
/**
|
|
54
|
+
* @description Alternation SOURCE (no anchors, no flags) of the explicit
|
|
55
|
+
* usage/session-limit wordings — {@link usageWindowPhrases} plus a bare
|
|
56
|
+
* `limit reached`. Exported as a source string — not just a compiled
|
|
57
|
+
* regex — because the Claude scrape detector (`getClaudeAgentErrorLine`) has to
|
|
58
|
+
* ANCHOR the same phrases at the start of a pane row, and a single source keeps
|
|
59
|
+
* the two from drifting (the `authErrorPhrasesRe` precedent).
|
|
60
|
+
*/
|
|
61
|
+
export declare const usageLimitPhraseSource: string;
|
|
62
|
+
/** {@link usageLimitPhraseSource} compiled for a whole-text `.test()`. */
|
|
63
|
+
export declare const usageLimitPhrasesRe: RegExp;
|
|
64
|
+
/**
|
|
65
|
+
* @description Whether an error text is a usage / session / window limit.
|
|
66
|
+
*
|
|
67
|
+
* Two tiers, and the second one is the point: the explicit
|
|
68
|
+
* {@link usageLimitPhraseSource} list catches every wording we have actually
|
|
69
|
+
* seen, and the GENERIC fallback (a limit mention PLUS a reset/retry hint) still
|
|
70
|
+
* catches a wording the provider invents later — a rephrased limit message must
|
|
71
|
+
* not silently fall back to "relay the raw text and look hung", which is exactly
|
|
72
|
+
* what happened to `You've hit your session limit · resets 10:50pm (UTC)`.
|
|
73
|
+
*
|
|
74
|
+
* Ahead of both tiers sits {@link nonUsageLimitRe}: a context/token overflow is a
|
|
75
|
+
* limit no wait can clear, so it must never arm one.
|
|
76
|
+
*/
|
|
77
|
+
export declare function checkIsUsageLimitText(text: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* @description Classify a backend error string into an error class, or `null`
|
|
80
|
+
* when it is not a recognised provider error.
|
|
81
|
+
*
|
|
82
|
+
* ORDER IS LOAD-BEARING — branches are evaluated top to bottom and return on
|
|
83
|
+
* first match:
|
|
84
|
+
* 1. auth / logged out (login, bad credentials) → `{ kind: 'auth' }`. Must win:
|
|
85
|
+
* a wait never fixes these (they need a re-login or server restart), so they
|
|
86
|
+
* are SURFACED (a pinned notice), never auto-retried. Used to return `null`.
|
|
87
|
+
* 2. transient (rate-limited, overloaded, 429/503/529) → `{ kind: 'transient' }`.
|
|
88
|
+
* Tested BEFORE usage on purpose: the live transient string literally reads
|
|
89
|
+
* "...(not your usage limit)...", so a naive usage check would false-match it.
|
|
90
|
+
* Because transient returns here, the usage branch never sees that substring.
|
|
91
|
+
* 3. usage / session / window limit → `{ kind: 'usageLimit', resetAt? }`, decided
|
|
92
|
+
* by {@link checkIsUsageLimitText} (explicit wordings + a generic fallback).
|
|
93
|
+
* Anything else (normal prose, unrelated text) → `null`.
|
|
94
|
+
*
|
|
95
|
+
* @param now Current epoch ms — only consulted to resolve a relative/absolute
|
|
96
|
+
* reset time for the usage class; the transient/auth branches ignore it.
|
|
97
|
+
*/
|
|
98
|
+
export declare function classifyAgentApiError(text: string, now: number): AgentApiErrorClass | null;
|
|
99
|
+
/**
|
|
100
|
+
* @description Best-effort parse of a "reset time" out of a usage-limit message.
|
|
101
|
+
* Never throws: any unparseable / absent time yields `undefined`, which the
|
|
102
|
+
* caller treats as "use the fixed delay". Handles three shapes, in order:
|
|
103
|
+
* - relative: "resets in 2h" / "in 45m" → `now + duration`.
|
|
104
|
+
* - absolute clock: "resets at 3pm" / "at 15:00" / "resets 10:50pm (UTC)" → the
|
|
105
|
+
* NEXT occurrence of that clock time at or after `now`. An EXPLICIT zone
|
|
106
|
+
* suffix is load-bearing: the clock is then resolved IN THAT ZONE, not in the
|
|
107
|
+
* instance/host zone. Without it a `10:50pm (UTC)` reset on a `+04:00` box
|
|
108
|
+
* resolved four hours EARLY — the retry fires while the limit still holds,
|
|
109
|
+
* re-errors, and burns one of the six attempts for nothing.
|
|
110
|
+
* - ISO timestamp anywhere in the text → `Date.parse`.
|
|
111
|
+
*
|
|
112
|
+
* A clock shape that fails to resolve (out-of-range hour) falls THROUGH to the
|
|
113
|
+
* ISO branch rather than giving up, so a message carrying both still parses.
|
|
114
|
+
*
|
|
115
|
+
* @param now Current epoch ms, used to resolve relative durations and to pick
|
|
116
|
+
* the next occurrence of an absolute clock time.
|
|
117
|
+
*/
|
|
118
|
+
export declare function parseResetAt(text: string, now: number): number | undefined;
|
|
119
|
+
export interface RetryPlanArgs {
|
|
120
|
+
kind: AgentApiErrorClass['kind'];
|
|
121
|
+
/** 1-based attempt number for the delay we are about to schedule. */
|
|
122
|
+
attempt: number;
|
|
123
|
+
/** Parsed reset time (usage class only); absent → the fixed default delay. */
|
|
124
|
+
resetAt?: number;
|
|
125
|
+
/** Current epoch ms (to size a reset-time-relative delay). */
|
|
126
|
+
now: number;
|
|
127
|
+
}
|
|
128
|
+
export type RetryPlan = {
|
|
129
|
+
delayMs: number;
|
|
130
|
+
} | {
|
|
131
|
+
giveUp: true;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* @description Decide the next backoff for an attempt, or that the retry loop
|
|
135
|
+
* should give up. Every returned `delayMs` is clamped to `[0, maxTimeoutMs]`
|
|
136
|
+
* (the same `setTimeout` cap the scheduler engine uses) so a far-future reset
|
|
137
|
+
* time never overflows the timer.
|
|
138
|
+
* - transient: {@link transientBackoffMinutes}[attempt-1]; giveUp once attempt
|
|
139
|
+
* exceeds {@link transientMaxAttempts}.
|
|
140
|
+
* - usageLimit: `resetAt` present → `resetAt - now + resetBufferMs`; else
|
|
141
|
+
* {@link usageLimitDefaultMs}; giveUp once attempt exceeds
|
|
142
|
+
* {@link usageLimitMaxAttempts}.
|
|
143
|
+
*/
|
|
144
|
+
export declare function getRetryPlan(args: RetryPlanArgs): RetryPlan;
|
|
145
|
+
/**
|
|
146
|
+
* @description A read-only view of the bot's per-thread armed-retry record, fed
|
|
147
|
+
* into {@link decideRetryAction}. The bot owns the live `Map`; this snapshot is
|
|
148
|
+
* the only state the pure decision needs.
|
|
149
|
+
*/
|
|
150
|
+
export interface RetryEntrySnapshot {
|
|
151
|
+
/** 1-based attempt of the currently / last armed retry. */
|
|
152
|
+
attempt: number;
|
|
153
|
+
/** Epoch ms when the last armed retry actually fired, or `null` if still pending. */
|
|
154
|
+
firedAt: number | null;
|
|
155
|
+
/** True while a retry timer is armed and has not fired yet. */
|
|
156
|
+
pending: boolean;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @description The action the bot must take in response to one `apiError`:
|
|
160
|
+
* - `surface` — an auth / logged-out error: post a pinned notice, arm NO timer
|
|
161
|
+
* (a wait never fixes it). The bot dedups repeats via its own per-thread
|
|
162
|
+
* auth-notice flag, so no attempt bookkeeping is needed here.
|
|
163
|
+
* - `ignore` — a retry is already armed and waiting; dedup this duplicate
|
|
164
|
+
* error frame (Claude re-scrapes the same line; OpenCode can repeat
|
|
165
|
+
* `session.error`).
|
|
166
|
+
* - `arm` — arm a timer for `attempt` after `delayMs` (firing at `fireAt`).
|
|
167
|
+
* - `giveUp` — the retry cap was reached; `attempts` is how many were already
|
|
168
|
+
* made before giving up.
|
|
169
|
+
*/
|
|
170
|
+
export type RetryAction = {
|
|
171
|
+
action: 'surface';
|
|
172
|
+
} | {
|
|
173
|
+
action: 'ignore';
|
|
174
|
+
} | {
|
|
175
|
+
action: 'arm';
|
|
176
|
+
attempt: number;
|
|
177
|
+
delayMs: number;
|
|
178
|
+
fireAt: number;
|
|
179
|
+
} | {
|
|
180
|
+
action: 'giveUp';
|
|
181
|
+
attempts: number;
|
|
182
|
+
};
|
|
183
|
+
export interface DecideRetryActionArgs {
|
|
184
|
+
kind: AgentApiErrorClass['kind'];
|
|
185
|
+
/** Parsed reset time (usage class only); absent → the fixed default delay. */
|
|
186
|
+
resetAt?: number;
|
|
187
|
+
/** Current epoch ms. */
|
|
188
|
+
now: number;
|
|
189
|
+
/** The thread's existing armed-retry snapshot, or `null` if none. */
|
|
190
|
+
prev: RetryEntrySnapshot | null;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* @description Decide the bot's reaction to an incoming API error, combining the
|
|
194
|
+
* episode/attempt bookkeeping with {@link getRetryPlan}. Pure — the caller
|
|
195
|
+
* passes `now` and the `prev` snapshot, so the decision is deterministic.
|
|
196
|
+
*
|
|
197
|
+
* Rules (evaluated in order):
|
|
198
|
+
* 0. `auth` → `surface` (never a timer, no attempt bookkeeping — the bot posts
|
|
199
|
+
* a deduped pinned notice; a wait can't recover a logged-out session).
|
|
200
|
+
* 1. `prev.pending` → `ignore` (a retry is already armed — dedup the episode;
|
|
201
|
+
* this is what stops Claude's repeated scrape frames AND any duplicate
|
|
202
|
+
* `session.error` from re-arming).
|
|
203
|
+
* 2. same episode (a `prev` that fired within {@link retryRecurrenceGraceMs}) →
|
|
204
|
+
* escalate to `prev.attempt + 1`; otherwise a fresh episode → attempt 1.
|
|
205
|
+
* 3. ask {@link getRetryPlan}: `giveUp` → `giveUp` with `attempts` already made
|
|
206
|
+
* (= attempt − 1); else `arm` at `now + delayMs`.
|
|
207
|
+
*/
|
|
208
|
+
export declare function decideRetryAction(args: DecideRetryActionArgs): RetryAction;
|
|
209
|
+
//# sourceMappingURL=apiErrorRetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiErrorRetry.d.ts","sourceRoot":"","sources":["../src/apiErrorRetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAQlD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,sBAAuB,CAAC;AAC5D,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAiC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AACtD;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,CAAC;AA2BpC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAyE,CAAC;AAmBzG;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAGxB,CAAC;AAEZ,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAwB3E;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAW1F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB1E;AA8DD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAe3D;AAOD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CAW1E"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decision layer for the auto-retry-after-API-error feature
|
|
4
|
+
* (plan `agent/tasks/actual/2026-06-09-api-error-auto-retry.md`, S1). No I/O and
|
|
5
|
+
* no `Date.now()` inside: every caller passes `now` so the module is fully
|
|
6
|
+
* deterministic and unit-testable on a fixed clock.
|
|
7
|
+
*
|
|
8
|
+
* Two responsibilities:
|
|
9
|
+
* - {@link classifyAgentApiError} — read a terminal error string and decide
|
|
10
|
+
* whether (and how) it should be auto-retried. ORDER MATTERS (see the fn doc).
|
|
11
|
+
* - {@link getRetryPlan} — given a class + the current attempt, decide the next
|
|
12
|
+
* backoff delay or that we should give up.
|
|
13
|
+
*
|
|
14
|
+
* The same classifier serves BOTH backends: Claude surfaces the provider's
|
|
15
|
+
* "API Error" line in its TUI pane; OpenCode surfaces the same provider text
|
|
16
|
+
* through `session.error`.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.usageLimitPhrasesRe = exports.usageLimitPhraseSource = exports.authErrorPhrasesRe = exports.resetBufferMs = exports.retryRecurrenceGraceMs = exports.usageLimitMaxAttempts = exports.usageLimitDefaultMs = exports.transientMaxAttempts = exports.transientBackoffMinutes = void 0;
|
|
20
|
+
exports.checkIsUsageLimitText = checkIsUsageLimitText;
|
|
21
|
+
exports.classifyAgentApiError = classifyAgentApiError;
|
|
22
|
+
exports.parseResetAt = parseResetAt;
|
|
23
|
+
exports.getRetryPlan = getRetryPlan;
|
|
24
|
+
exports.decideRetryAction = decideRetryAction;
|
|
25
|
+
const engine_1 = require("./scheduler/engine");
|
|
26
|
+
/** One minute in milliseconds — the unit the backoff schedules are expressed in. */
|
|
27
|
+
const msPerMinute = 60_000;
|
|
28
|
+
/** One hour in milliseconds. */
|
|
29
|
+
const msPerHour = 60 * msPerMinute;
|
|
30
|
+
/**
|
|
31
|
+
* Transient backoff schedule (one entry per attempt): attempt 1 → 5m,
|
|
32
|
+
* 2 → 10m, 3 → 20m. After the last entry the retry gives up.
|
|
33
|
+
*/
|
|
34
|
+
exports.transientBackoffMinutes = [5, 10, 20];
|
|
35
|
+
/** Max transient attempts before giving up (= `transientBackoffMinutes.length`). */
|
|
36
|
+
exports.transientMaxAttempts = exports.transientBackoffMinutes.length;
|
|
37
|
+
/**
|
|
38
|
+
* Fixed delay for a usage-limit error whose text exposed no reset time (the
|
|
39
|
+
* common case for Claude's "blocked" message): 60 minutes, re-armed on each
|
|
40
|
+
* repeat until {@link usageLimitMaxAttempts}.
|
|
41
|
+
*/
|
|
42
|
+
exports.usageLimitDefaultMs = 60 * msPerMinute;
|
|
43
|
+
/** Max usage-limit attempts before giving up (~6h with the default delay). */
|
|
44
|
+
exports.usageLimitMaxAttempts = 6;
|
|
45
|
+
/**
|
|
46
|
+
* Grace window after a retry fires: another API error within this window counts
|
|
47
|
+
* as the SAME error episode (escalate to attempt+1, longer backoff); an error
|
|
48
|
+
* later than this is a FRESH episode (reset to attempt 1). Decouples the
|
|
49
|
+
* decision from session-end events — a recovered turn just leaves a stale record
|
|
50
|
+
* that the next, much-later error resets to attempt 1.
|
|
51
|
+
*/
|
|
52
|
+
exports.retryRecurrenceGraceMs = 2 * msPerMinute;
|
|
53
|
+
/**
|
|
54
|
+
* Padding added to a parsed reset time so the retry fires just AFTER the window
|
|
55
|
+
* actually rolls over, never a hair before it (which would re-error instantly).
|
|
56
|
+
*/
|
|
57
|
+
exports.resetBufferMs = 60_000;
|
|
58
|
+
/** Matches reset phrasings like "resets in 2h", "in 45m", "in 90 min". */
|
|
59
|
+
const relativeResetRegex = /\bin\s+(\d+)\s*(h|hours?|m|min|minutes?)\b/i;
|
|
60
|
+
/**
|
|
61
|
+
* Matches absolute clock phrasings after a reset trigger word. The trigger is
|
|
62
|
+
* either `at` (`resets at 3pm`, `at 15:00`) OR a BARE `reset`/`resets` — Claude's
|
|
63
|
+
* session-limit render drops the "at" entirely (`resets 10:50pm (UTC)`), which
|
|
64
|
+
* the old `at`-only pattern missed, leaving the retry on its blind 60-min delay.
|
|
65
|
+
* The hour's `(?!\d)` guard stops a leading ISO date (`2026-09-24`) from being
|
|
66
|
+
* read as an hour before the ISO branch gets its turn.
|
|
67
|
+
*/
|
|
68
|
+
const clockResetRegex = /\b(?:reset(?:s|ting)?|at)\s+(\d{1,2})(?!\d)(?::(\d{2}))?\s*(am|pm)?/i;
|
|
69
|
+
/**
|
|
70
|
+
* An EXPLICIT timezone immediately after the clock — `(UTC)`, ` UTC`, `Z`,
|
|
71
|
+
* `+05:00`, `-0700`. Anchored at the remainder's start so only a suffix of THAT
|
|
72
|
+
* clock counts, and `\b`-terminated so a word merely starting with `Z` (`Zulu`,
|
|
73
|
+
* `Zoom`) is not read as the Zulu zone.
|
|
74
|
+
*/
|
|
75
|
+
const trailingZoneRegex = /^\s*\(?\s*(UTC|GMT|Z|[+-]\d{2}:?\d{2})\b\s*\)?/i;
|
|
76
|
+
/** Matches an ISO-8601 timestamp anywhere in the text. */
|
|
77
|
+
const isoTimestampRegex = /\b\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?\b/;
|
|
78
|
+
const hoursPerDay = 24;
|
|
79
|
+
const minutesPerHour = 60;
|
|
80
|
+
const msPerDay = hoursPerDay * msPerHour;
|
|
81
|
+
/**
|
|
82
|
+
* @description The auth / logged-out phrases (`please run /login`, `not logged
|
|
83
|
+
* in`, `invalid authentication credentials`). Shared with the Claude scrape
|
|
84
|
+
* detector (`getClaudeAgentErrorLine`) so the two never drift. NOT global — used
|
|
85
|
+
* with `.test()`, so lastIndex never carries between calls.
|
|
86
|
+
*/
|
|
87
|
+
exports.authErrorPhrasesRe = /please run \/login|not logged in|invalid authentication credentials/i;
|
|
88
|
+
/**
|
|
89
|
+
* The wordings that name a usage WINDOW or an exhausted balance EXPLICITLY: the
|
|
90
|
+
* qualified window limits (`session limit`, `weekly limit`, `5-hour limit`), the
|
|
91
|
+
* `hit your … limit` phrasings Claude now uses, and the balance/quota exhaustion
|
|
92
|
+
* wordings that are not spelled as a "limit" at all. Kept apart from the bare
|
|
93
|
+
* `limit reached` below because this subset is what exempts a text from
|
|
94
|
+
* {@link nonUsageLimitRe} — "hit your weekly token limit" IS a usage window, a bare
|
|
95
|
+
* "context limit exceeded" is not.
|
|
96
|
+
*/
|
|
97
|
+
const usageWindowPhrases = [
|
|
98
|
+
String.raw `(?:session|usage|weekly|daily|monthly|hourly|\d+-hours?)\s+limit`,
|
|
99
|
+
String.raw `(?:hit|reached|exceeded)\s+your\s+(?:[\w-]+\s+){0,3}limit`,
|
|
100
|
+
String.raw `credit balance (?:is )?too low`,
|
|
101
|
+
String.raw `out of (?:credits|usage)`,
|
|
102
|
+
String.raw `quota`,
|
|
103
|
+
];
|
|
104
|
+
/**
|
|
105
|
+
* @description Alternation SOURCE (no anchors, no flags) of the explicit
|
|
106
|
+
* usage/session-limit wordings — {@link usageWindowPhrases} plus a bare
|
|
107
|
+
* `limit reached`. Exported as a source string — not just a compiled
|
|
108
|
+
* regex — because the Claude scrape detector (`getClaudeAgentErrorLine`) has to
|
|
109
|
+
* ANCHOR the same phrases at the start of a pane row, and a single source keeps
|
|
110
|
+
* the two from drifting (the `authErrorPhrasesRe` precedent).
|
|
111
|
+
*/
|
|
112
|
+
exports.usageLimitPhraseSource = [
|
|
113
|
+
...usageWindowPhrases,
|
|
114
|
+
String.raw `limit\s+(?:reached|exceeded)`,
|
|
115
|
+
].join('|');
|
|
116
|
+
/** {@link usageLimitPhraseSource} compiled for a whole-text `.test()`. */
|
|
117
|
+
exports.usageLimitPhrasesRe = new RegExp(exports.usageLimitPhraseSource, 'i');
|
|
118
|
+
/** {@link usageWindowPhrases} compiled — the {@link nonUsageLimitRe} exemption. */
|
|
119
|
+
const usageWindowPhrasesRe = new RegExp(usageWindowPhrases.join('|'), 'i');
|
|
120
|
+
/**
|
|
121
|
+
* A limit that WAITING can never clear: a context / token / prompt-length overflow
|
|
122
|
+
* is fixed by sending less, not by sitting out a window. The real provider wording
|
|
123
|
+
* ("input length and `max_tokens` exceed context limit: … decrease input length …
|
|
124
|
+
* and try again") carries both a limit mention and a retry hint, so without this
|
|
125
|
+
* guard the generic fallback below classified it as `usageLimit` and armed a 6-hour
|
|
126
|
+
* futile wait instead of surfacing an error the operator has to act on.
|
|
127
|
+
*/
|
|
128
|
+
const nonUsageLimitRe = /\b(?:context|token|input|output|prompt|character)\s+(?:length\s+)?limits?\b/i;
|
|
129
|
+
/**
|
|
130
|
+
* The GENERIC fallback's two required signals: the text mentions a limit AND
|
|
131
|
+
* carries a reset/retry hint. BOTH are required on purpose — "limit" alone
|
|
132
|
+
* matches ordinary prose ("the API limit is 5 requests per minute"), while the
|
|
133
|
+
* pairing is what every real limit message has (it always tells you when you get
|
|
134
|
+
* back in).
|
|
135
|
+
*/
|
|
136
|
+
const limitMentionRe = /\blimits?\b/i;
|
|
137
|
+
const limitResetHintRe = /\breset(?:s|ting)?\b|\btry again\b|\bresumes?\b/i;
|
|
138
|
+
/**
|
|
139
|
+
* @description Whether an error text is a usage / session / window limit.
|
|
140
|
+
*
|
|
141
|
+
* Two tiers, and the second one is the point: the explicit
|
|
142
|
+
* {@link usageLimitPhraseSource} list catches every wording we have actually
|
|
143
|
+
* seen, and the GENERIC fallback (a limit mention PLUS a reset/retry hint) still
|
|
144
|
+
* catches a wording the provider invents later — a rephrased limit message must
|
|
145
|
+
* not silently fall back to "relay the raw text and look hung", which is exactly
|
|
146
|
+
* what happened to `You've hit your session limit · resets 10:50pm (UTC)`.
|
|
147
|
+
*
|
|
148
|
+
* Ahead of both tiers sits {@link nonUsageLimitRe}: a context/token overflow is a
|
|
149
|
+
* limit no wait can clear, so it must never arm one.
|
|
150
|
+
*/
|
|
151
|
+
function checkIsUsageLimitText(text) {
|
|
152
|
+
if (nonUsageLimitRe.test(text) && !usageWindowPhrasesRe.test(text))
|
|
153
|
+
return false;
|
|
154
|
+
if (exports.usageLimitPhrasesRe.test(text))
|
|
155
|
+
return true;
|
|
156
|
+
return limitMentionRe.test(text) && limitResetHintRe.test(text);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @description Classify a backend error string into an error class, or `null`
|
|
160
|
+
* when it is not a recognised provider error.
|
|
161
|
+
*
|
|
162
|
+
* ORDER IS LOAD-BEARING — branches are evaluated top to bottom and return on
|
|
163
|
+
* first match:
|
|
164
|
+
* 1. auth / logged out (login, bad credentials) → `{ kind: 'auth' }`. Must win:
|
|
165
|
+
* a wait never fixes these (they need a re-login or server restart), so they
|
|
166
|
+
* are SURFACED (a pinned notice), never auto-retried. Used to return `null`.
|
|
167
|
+
* 2. transient (rate-limited, overloaded, 429/503/529) → `{ kind: 'transient' }`.
|
|
168
|
+
* Tested BEFORE usage on purpose: the live transient string literally reads
|
|
169
|
+
* "...(not your usage limit)...", so a naive usage check would false-match it.
|
|
170
|
+
* Because transient returns here, the usage branch never sees that substring.
|
|
171
|
+
* 3. usage / session / window limit → `{ kind: 'usageLimit', resetAt? }`, decided
|
|
172
|
+
* by {@link checkIsUsageLimitText} (explicit wordings + a generic fallback).
|
|
173
|
+
* Anything else (normal prose, unrelated text) → `null`.
|
|
174
|
+
*
|
|
175
|
+
* @param now Current epoch ms — only consulted to resolve a relative/absolute
|
|
176
|
+
* reset time for the usage class; the transient/auth branches ignore it.
|
|
177
|
+
*/
|
|
178
|
+
function classifyAgentApiError(text, now) {
|
|
179
|
+
if (exports.authErrorPhrasesRe.test(text)) {
|
|
180
|
+
return { kind: 'auth' };
|
|
181
|
+
}
|
|
182
|
+
if (/rate.?limited?|temporarily limiting requests|too many requests|overloaded|\b(429|503|529)\b/i.test(text)) {
|
|
183
|
+
return { kind: 'transient' };
|
|
184
|
+
}
|
|
185
|
+
if (checkIsUsageLimitText(text)) {
|
|
186
|
+
return { kind: 'usageLimit', resetAt: parseResetAt(text, now) };
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @description Best-effort parse of a "reset time" out of a usage-limit message.
|
|
192
|
+
* Never throws: any unparseable / absent time yields `undefined`, which the
|
|
193
|
+
* caller treats as "use the fixed delay". Handles three shapes, in order:
|
|
194
|
+
* - relative: "resets in 2h" / "in 45m" → `now + duration`.
|
|
195
|
+
* - absolute clock: "resets at 3pm" / "at 15:00" / "resets 10:50pm (UTC)" → the
|
|
196
|
+
* NEXT occurrence of that clock time at or after `now`. An EXPLICIT zone
|
|
197
|
+
* suffix is load-bearing: the clock is then resolved IN THAT ZONE, not in the
|
|
198
|
+
* instance/host zone. Without it a `10:50pm (UTC)` reset on a `+04:00` box
|
|
199
|
+
* resolved four hours EARLY — the retry fires while the limit still holds,
|
|
200
|
+
* re-errors, and burns one of the six attempts for nothing.
|
|
201
|
+
* - ISO timestamp anywhere in the text → `Date.parse`.
|
|
202
|
+
*
|
|
203
|
+
* A clock shape that fails to resolve (out-of-range hour) falls THROUGH to the
|
|
204
|
+
* ISO branch rather than giving up, so a message carrying both still parses.
|
|
205
|
+
*
|
|
206
|
+
* @param now Current epoch ms, used to resolve relative durations and to pick
|
|
207
|
+
* the next occurrence of an absolute clock time.
|
|
208
|
+
*/
|
|
209
|
+
function parseResetAt(text, now) {
|
|
210
|
+
const relativeMatch = relativeResetRegex.exec(text);
|
|
211
|
+
if (relativeMatch) {
|
|
212
|
+
const amount = Number.parseInt(relativeMatch[1], 10);
|
|
213
|
+
const unit = relativeMatch[2].toLowerCase();
|
|
214
|
+
const isHours = unit.startsWith('h');
|
|
215
|
+
return now + amount * (isHours ? msPerHour : msPerMinute);
|
|
216
|
+
}
|
|
217
|
+
const clockMatch = clockResetRegex.exec(text);
|
|
218
|
+
if (clockMatch) {
|
|
219
|
+
const resolved = resolveNextClockTime(clockMatch, text, now);
|
|
220
|
+
if (resolved !== undefined)
|
|
221
|
+
return resolved;
|
|
222
|
+
}
|
|
223
|
+
const isoMatch = isoTimestampRegex.exec(text);
|
|
224
|
+
if (isoMatch) {
|
|
225
|
+
const parsed = Date.parse(isoMatch[0]);
|
|
226
|
+
if (!Number.isNaN(parsed))
|
|
227
|
+
return parsed;
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Read an explicit zone token to an offset from UTC in ms, or `undefined` when it
|
|
233
|
+
* is not a zone we can resolve arithmetically. `Z`/`UTC`/`GMT` are zero;
|
|
234
|
+
* `±HH:MM` / `±HHMM` are taken literally (a fixed offset needs no DST rules).
|
|
235
|
+
*/
|
|
236
|
+
function getZoneOffsetMs(zone) {
|
|
237
|
+
const upper = zone.toUpperCase();
|
|
238
|
+
if (upper === 'UTC' || upper === 'GMT' || upper === 'Z')
|
|
239
|
+
return 0;
|
|
240
|
+
const match = /^([+-])(\d{2}):?(\d{2})$/.exec(zone);
|
|
241
|
+
if (!match)
|
|
242
|
+
return undefined;
|
|
243
|
+
const hours = Number.parseInt(match[2], 10);
|
|
244
|
+
const minutes = Number.parseInt(match[3], 10);
|
|
245
|
+
if (hours >= hoursPerDay || minutes >= minutesPerHour)
|
|
246
|
+
return undefined;
|
|
247
|
+
const sign = match[1] === '-' ? -1 : 1;
|
|
248
|
+
return sign * (hours * msPerHour + minutes * msPerMinute);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Resolve a clock match to the next epoch ms at or after `now` that lands on that
|
|
252
|
+
* wall-clock time. When the text carries an explicit zone right after the clock
|
|
253
|
+
* the arithmetic is done in THAT zone (pure offset math, no `Intl`); otherwise it
|
|
254
|
+
* falls back to the process-local zone (which `/timezone` already re-bases).
|
|
255
|
+
* Returns `undefined` for an out-of-range hour/minute rather than guessing.
|
|
256
|
+
*/
|
|
257
|
+
function resolveNextClockTime(match, text, now) {
|
|
258
|
+
const rawHour = Number.parseInt(match[1], 10);
|
|
259
|
+
const minute = match[2] ? Number.parseInt(match[2], 10) : 0;
|
|
260
|
+
const meridiem = match[3]?.toLowerCase();
|
|
261
|
+
let hour = rawHour;
|
|
262
|
+
if (meridiem === 'pm' && rawHour < 12)
|
|
263
|
+
hour = rawHour + 12;
|
|
264
|
+
else if (meridiem === 'am' && rawHour === 12)
|
|
265
|
+
hour = 0;
|
|
266
|
+
if (hour < 0 || hour >= hoursPerDay || minute < 0 || minute >= minutesPerHour) {
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
const zoneMatch = trailingZoneRegex.exec(text.slice(match.index + match[0].length));
|
|
270
|
+
const offsetMs = zoneMatch ? getZoneOffsetMs(zoneMatch[1]) : undefined;
|
|
271
|
+
if (offsetMs !== undefined) {
|
|
272
|
+
// Shift onto the zone's timeline, snap to that zone's midnight, then shift
|
|
273
|
+
// back — `Date`'s local-zone getters are unusable for a foreign zone.
|
|
274
|
+
const shiftedNow = now + offsetMs;
|
|
275
|
+
const zoneDayStart = Math.floor(shiftedNow / msPerDay) * msPerDay;
|
|
276
|
+
let candidateShifted = zoneDayStart + hour * msPerHour + minute * msPerMinute;
|
|
277
|
+
if (candidateShifted < shiftedNow)
|
|
278
|
+
candidateShifted += msPerDay;
|
|
279
|
+
return candidateShifted - offsetMs;
|
|
280
|
+
}
|
|
281
|
+
const candidate = new Date(now);
|
|
282
|
+
candidate.setHours(hour, minute, 0, 0);
|
|
283
|
+
let candidateMs = candidate.getTime();
|
|
284
|
+
if (candidateMs < now) {
|
|
285
|
+
// Already past today — roll to the same clock time tomorrow.
|
|
286
|
+
candidate.setDate(candidate.getDate() + 1);
|
|
287
|
+
candidateMs = candidate.getTime();
|
|
288
|
+
}
|
|
289
|
+
return candidateMs;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* @description Decide the next backoff for an attempt, or that the retry loop
|
|
293
|
+
* should give up. Every returned `delayMs` is clamped to `[0, maxTimeoutMs]`
|
|
294
|
+
* (the same `setTimeout` cap the scheduler engine uses) so a far-future reset
|
|
295
|
+
* time never overflows the timer.
|
|
296
|
+
* - transient: {@link transientBackoffMinutes}[attempt-1]; giveUp once attempt
|
|
297
|
+
* exceeds {@link transientMaxAttempts}.
|
|
298
|
+
* - usageLimit: `resetAt` present → `resetAt - now + resetBufferMs`; else
|
|
299
|
+
* {@link usageLimitDefaultMs}; giveUp once attempt exceeds
|
|
300
|
+
* {@link usageLimitMaxAttempts}.
|
|
301
|
+
*/
|
|
302
|
+
function getRetryPlan(args) {
|
|
303
|
+
// auth is never retried (it is surfaced by `decideRetryAction` before this is
|
|
304
|
+
// reached); guard so it can never fall through into the usageLimit branch.
|
|
305
|
+
if (args.kind === 'auth')
|
|
306
|
+
return { giveUp: true };
|
|
307
|
+
if (args.kind === 'transient') {
|
|
308
|
+
if (args.attempt > exports.transientMaxAttempts)
|
|
309
|
+
return { giveUp: true };
|
|
310
|
+
const minutes = exports.transientBackoffMinutes[args.attempt - 1];
|
|
311
|
+
return { delayMs: clampDelay(minutes * msPerMinute) };
|
|
312
|
+
}
|
|
313
|
+
if (args.attempt > exports.usageLimitMaxAttempts)
|
|
314
|
+
return { giveUp: true };
|
|
315
|
+
const rawDelayMs = typeof args.resetAt === 'number' ? args.resetAt - args.now + exports.resetBufferMs : exports.usageLimitDefaultMs;
|
|
316
|
+
return { delayMs: clampDelay(rawDelayMs) };
|
|
317
|
+
}
|
|
318
|
+
/** Clamp a delay into `[0, maxTimeoutMs]` (the Node `setTimeout` safe range). */
|
|
319
|
+
function clampDelay(delayMs) {
|
|
320
|
+
return Math.min(Math.max(0, delayMs), engine_1.maxTimeoutMs);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* @description Decide the bot's reaction to an incoming API error, combining the
|
|
324
|
+
* episode/attempt bookkeeping with {@link getRetryPlan}. Pure — the caller
|
|
325
|
+
* passes `now` and the `prev` snapshot, so the decision is deterministic.
|
|
326
|
+
*
|
|
327
|
+
* Rules (evaluated in order):
|
|
328
|
+
* 0. `auth` → `surface` (never a timer, no attempt bookkeeping — the bot posts
|
|
329
|
+
* a deduped pinned notice; a wait can't recover a logged-out session).
|
|
330
|
+
* 1. `prev.pending` → `ignore` (a retry is already armed — dedup the episode;
|
|
331
|
+
* this is what stops Claude's repeated scrape frames AND any duplicate
|
|
332
|
+
* `session.error` from re-arming).
|
|
333
|
+
* 2. same episode (a `prev` that fired within {@link retryRecurrenceGraceMs}) →
|
|
334
|
+
* escalate to `prev.attempt + 1`; otherwise a fresh episode → attempt 1.
|
|
335
|
+
* 3. ask {@link getRetryPlan}: `giveUp` → `giveUp` with `attempts` already made
|
|
336
|
+
* (= attempt − 1); else `arm` at `now + delayMs`.
|
|
337
|
+
*/
|
|
338
|
+
function decideRetryAction(args) {
|
|
339
|
+
const { kind, resetAt, now, prev } = args;
|
|
340
|
+
if (kind === 'auth')
|
|
341
|
+
return { action: 'surface' };
|
|
342
|
+
if (prev?.pending)
|
|
343
|
+
return { action: 'ignore' };
|
|
344
|
+
const sameEpisode = !!prev && prev.firedAt != null && now - prev.firedAt <= exports.retryRecurrenceGraceMs;
|
|
345
|
+
const attempt = sameEpisode ? prev.attempt + 1 : 1;
|
|
346
|
+
const plan = getRetryPlan({ kind, attempt, resetAt, now });
|
|
347
|
+
if ('giveUp' in plan)
|
|
348
|
+
return { action: 'giveUp', attempts: attempt - 1 };
|
|
349
|
+
return { action: 'arm', attempt, delayMs: plan.delayMs, fireAt: now + plan.delayMs };
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=apiErrorRetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiErrorRetry.js","sourceRoot":"","sources":["../src/apiErrorRetry.ts"],"names":[],"mappings":"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"}
|