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,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maxTimeoutMs = void 0;
|
|
4
|
+
exports.createSchedulerEngine = createSchedulerEngine;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const recurrence_1 = require("./recurrence");
|
|
7
|
+
/**
|
|
8
|
+
* @description The scheduler timer engine (plan S3). Owns one `setTimeout` per
|
|
9
|
+
* armed job, the boot replay (`rearmAll`), and the no-overlap guard. It is
|
|
10
|
+
* deliberately decoupled from `bot.ts`: every external concern is injected via
|
|
11
|
+
* {@link SchedulerEngineDeps} (the store, the run ledger, a `deliver` callback,
|
|
12
|
+
* a clock, and optional timer functions), so the engine is constructible in a
|
|
13
|
+
* test with a fake clock and a fake `deliver`.
|
|
14
|
+
*
|
|
15
|
+
* Lifecycle of one job:
|
|
16
|
+
*
|
|
17
|
+
* armJob(record) → setTimeout(nextRunAt − now), clamped to {@link maxTimeoutMs}
|
|
18
|
+
* │ (a longer delay arms an INTERMEDIATE timer that re-arms).
|
|
19
|
+
* ▼
|
|
20
|
+
* timer fires → re-read the FRESH record from the store (it may have been
|
|
21
|
+
* │ removed/paused since arming); then:
|
|
22
|
+
* │ gone → disarm, no-op
|
|
23
|
+
* │ paused → ledger 'paused-skip', disarm (do NOT re-arm)
|
|
24
|
+
* │ in-flight → ledger 'skipped-overlap', recompute + re-arm
|
|
25
|
+
* │ otherwise → fire()
|
|
26
|
+
* ▼
|
|
27
|
+
* fire() → ledger begin record → await deliver(job, fireContext) (wrapped:
|
|
28
|
+
* │ a thrown deliver is classified 'failed', never kills the engine)
|
|
29
|
+
* │ → bookkeeping (lastRunAt/lastRunStatus; recurring recompute+re-arm;
|
|
30
|
+
* │ N-times decrement, remove at 0; one-shot remove) → store.flush()
|
|
31
|
+
* ▼ → ledger end record (always written).
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Node's `setTimeout` clamps any delay above 2^31−1 ms (~24.8 days) to 1, which
|
|
35
|
+
* would fire the timer immediately. For a job further out than this we arm an
|
|
36
|
+
* INTERMEDIATE timer at the cap that simply re-arms when it fires, walking the
|
|
37
|
+
* delay down in cap-sized hops until it fits.
|
|
38
|
+
*/
|
|
39
|
+
exports.maxTimeoutMs = 2_147_483_647;
|
|
40
|
+
/** Length of the hex run-id minted per fire for the ledger correlation. */
|
|
41
|
+
const runIdByteLength = 8;
|
|
42
|
+
function createSchedulerEngine(deps) {
|
|
43
|
+
const { store, ledger, deliver, now } = deps;
|
|
44
|
+
const armTimer = deps.setTimeoutFn ?? ((callback, delayMs) => setTimeout(callback, delayMs));
|
|
45
|
+
const clearTimer = deps.clearTimeoutFn ?? ((handle) => clearTimeout(handle));
|
|
46
|
+
/** jobId → its armed timer handle. The single source of truth for "is armed". */
|
|
47
|
+
const timers = new Map();
|
|
48
|
+
/** jobIds whose delivery is currently in flight — the no-overlap guard. */
|
|
49
|
+
const inFlight = new Set();
|
|
50
|
+
/**
|
|
51
|
+
* Every still-running timer-callback chain (`onTimer`). `whenIdle` awaits
|
|
52
|
+
* these; entries remove themselves on settle. A Set (not a count) so the
|
|
53
|
+
* same job firing twice tracks both chains.
|
|
54
|
+
*/
|
|
55
|
+
const activeChains = new Set();
|
|
56
|
+
/** Run an `onTimer` chain, tracking it so {@link whenIdle} can await it. */
|
|
57
|
+
function trackChain(jobId) {
|
|
58
|
+
const chain = onTimer(jobId).finally(() => {
|
|
59
|
+
activeChains.delete(chain);
|
|
60
|
+
});
|
|
61
|
+
activeChains.add(chain);
|
|
62
|
+
}
|
|
63
|
+
async function whenIdle() {
|
|
64
|
+
// Re-snapshot until stable: a settling chain may have re-armed nothing, but
|
|
65
|
+
// an overlap/bookkeeping path can spawn follow-up awaits within the same
|
|
66
|
+
// chain; awaiting the snapshot then re-checking covers chains added late.
|
|
67
|
+
while (activeChains.size > 0) {
|
|
68
|
+
await Promise.allSettled([...activeChains]);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function disarmJob(jobId) {
|
|
72
|
+
const handle = timers.get(jobId);
|
|
73
|
+
if (handle) {
|
|
74
|
+
clearTimer(handle);
|
|
75
|
+
timers.delete(jobId);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Arm a timer for `jobId` due at `dueAtMs`. Delays beyond {@link maxTimeoutMs}
|
|
80
|
+
* arm an intermediate hop that re-arms toward the real due time. Any existing
|
|
81
|
+
* timer for the job is cleared first so re-arming never leaks a timer.
|
|
82
|
+
*/
|
|
83
|
+
function armAt(jobId, dueAtMs) {
|
|
84
|
+
disarmJob(jobId);
|
|
85
|
+
const delayMs = Math.max(0, dueAtMs - now());
|
|
86
|
+
if (delayMs > exports.maxTimeoutMs) {
|
|
87
|
+
const intermediate = armTimer(() => armAt(jobId, dueAtMs), exports.maxTimeoutMs);
|
|
88
|
+
intermediate.unref?.();
|
|
89
|
+
timers.set(jobId, intermediate);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const handle = armTimer(() => {
|
|
93
|
+
trackChain(jobId);
|
|
94
|
+
}, delayMs);
|
|
95
|
+
handle.unref?.();
|
|
96
|
+
timers.set(jobId, handle);
|
|
97
|
+
}
|
|
98
|
+
function armJob(record) {
|
|
99
|
+
if (record.isPaused) {
|
|
100
|
+
// Paused jobs stay disarmed silently — no ledger entry (a 'paused-skip'
|
|
101
|
+
// is only for a fire attempt that races a pause, see onTimer).
|
|
102
|
+
disarmJob(record.id);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (record.nextRunAt === null) {
|
|
106
|
+
disarmJob(record.id);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
armAt(record.id, record.nextRunAt);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Timer callback for `jobId`. Re-reads the fresh record (it may have changed
|
|
113
|
+
* between arm and fire), applies the re-validate / overlap / paused gates,
|
|
114
|
+
* and dispatches to {@link fire}. Never throws — a thrown body would escape
|
|
115
|
+
* the timer callback and could take the process down.
|
|
116
|
+
*/
|
|
117
|
+
async function onTimer(jobId) {
|
|
118
|
+
try {
|
|
119
|
+
// The armed timer has now fired; drop its handle so disarm is a no-op and
|
|
120
|
+
// re-arms below install a clean one.
|
|
121
|
+
timers.delete(jobId);
|
|
122
|
+
const record = store.getSchedules()[jobId];
|
|
123
|
+
if (!record) {
|
|
124
|
+
// Removed between arm and fire — nothing to do, nothing armed.
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (record.isPaused) {
|
|
128
|
+
ledger.append({
|
|
129
|
+
runId: mintRunId(),
|
|
130
|
+
jobId,
|
|
131
|
+
threadKey: record.threadKey,
|
|
132
|
+
firedAt: now(),
|
|
133
|
+
kind: 'paused-skip',
|
|
134
|
+
});
|
|
135
|
+
// Do NOT re-arm — a paused job stays disarmed until resumed (S8).
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (inFlight.has(jobId)) {
|
|
139
|
+
// Previous fire still delivering — skip this occurrence, advance, re-arm.
|
|
140
|
+
ledger.append({
|
|
141
|
+
runId: mintRunId(),
|
|
142
|
+
jobId,
|
|
143
|
+
threadKey: record.threadKey,
|
|
144
|
+
firedAt: now(),
|
|
145
|
+
kind: 'skipped-overlap',
|
|
146
|
+
});
|
|
147
|
+
await advanceOverlap(record);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
await fire(record);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error(`[scheduler] timer callback failed for job ${jobId}:`, error);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* After a skipped-overlap: persist the advanced `nextRunAt` (recurring) or
|
|
158
|
+
* leave a one-shot/N-times-final alone, and re-arm if there is a next run.
|
|
159
|
+
* Bookkeeping here is light — the skip is not a "run", so lastRunStatus is
|
|
160
|
+
* recorded as 'skipped-overlap' for visibility but remainingRuns is untouched.
|
|
161
|
+
*/
|
|
162
|
+
async function advanceOverlap(record) {
|
|
163
|
+
const nextRunAt = (0, recurrence_1.getNextRunAt)(record.spec, now());
|
|
164
|
+
const updated = {
|
|
165
|
+
...record,
|
|
166
|
+
lastRunAt: now(),
|
|
167
|
+
lastRunStatus: 'skipped-overlap',
|
|
168
|
+
nextRunAt,
|
|
169
|
+
updatedAt: new Date(now()).toISOString(),
|
|
170
|
+
};
|
|
171
|
+
if (nextRunAt === null) {
|
|
172
|
+
// A one-shot that overlapped its own (already-elapsed) instant: nothing
|
|
173
|
+
// more to run, drop the record like a completed one-shot.
|
|
174
|
+
await store.removeSchedule(record.id);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
await store.upsertSchedule(updated);
|
|
178
|
+
armAt(record.id, nextRunAt);
|
|
179
|
+
}
|
|
180
|
+
await store.flush();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Execute one fire: ledger begin, await the (wrapped) deliver, bookkeeping,
|
|
184
|
+
* flush, ledger end. Classifies a thrown deliver as 'failed' so an exception
|
|
185
|
+
* never skips bookkeeping or kills the engine.
|
|
186
|
+
*/
|
|
187
|
+
async function fire(record) {
|
|
188
|
+
const runId = mintRunId();
|
|
189
|
+
const firedAt = now();
|
|
190
|
+
const decision = (0, recurrence_1.getCatchUpDecision)({ nextRunAt: record.nextRunAt, nowMs: firedAt });
|
|
191
|
+
const isCatchUp = decision === 'fire-missed';
|
|
192
|
+
const fireContext = isCatchUp
|
|
193
|
+
? { kind: 'catch-up', missedAtMs: record.nextRunAt ?? undefined }
|
|
194
|
+
: { kind: 'on-time' };
|
|
195
|
+
ledger.append({
|
|
196
|
+
runId,
|
|
197
|
+
jobId: record.id,
|
|
198
|
+
threadKey: record.threadKey,
|
|
199
|
+
firedAt,
|
|
200
|
+
kind: isCatchUp ? 'catch-up' : 'on-time',
|
|
201
|
+
});
|
|
202
|
+
inFlight.add(record.id);
|
|
203
|
+
let outcome;
|
|
204
|
+
try {
|
|
205
|
+
outcome = await deliver(record, fireContext);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
outcome = { status: 'failed', error: error instanceof Error ? error.message : String(error) };
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
inFlight.delete(record.id);
|
|
212
|
+
}
|
|
213
|
+
const deliveredAt = now();
|
|
214
|
+
try {
|
|
215
|
+
await applyBookkeeping(record, outcome, deliveredAt);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error(`[scheduler] bookkeeping failed for job ${record.id}:`, error);
|
|
219
|
+
}
|
|
220
|
+
ledger.append({
|
|
221
|
+
runId,
|
|
222
|
+
jobId: record.id,
|
|
223
|
+
threadKey: record.threadKey,
|
|
224
|
+
firedAt,
|
|
225
|
+
kind: isCatchUp ? 'catch-up' : 'on-time',
|
|
226
|
+
deliveredAt,
|
|
227
|
+
...(outcome.status === 'failed' && outcome.error ? { error: outcome.error } : {}),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Update the record after a completed fire and re-arm (or remove). Reads the
|
|
232
|
+
* fresh record again so a pause/removal during delivery is respected. flush()
|
|
233
|
+
* is awaited because `nextRunAt`/`remainingRuns` are crash-critical.
|
|
234
|
+
*/
|
|
235
|
+
async function applyBookkeeping(original, outcome, deliveredAt) {
|
|
236
|
+
const fresh = store.getSchedules()[original.id];
|
|
237
|
+
if (!fresh) {
|
|
238
|
+
// Removed mid-delivery — leave it gone, just make sure nothing is armed.
|
|
239
|
+
disarmJob(original.id);
|
|
240
|
+
await store.flush();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (fresh.isPaused) {
|
|
244
|
+
// Paused DURING delivery (e.g. the deliver callback hit an unbound topic
|
|
245
|
+
// and parked the job, S8): the engine never arms a paused job, so do NOT
|
|
246
|
+
// re-arm a recurring one or delete a one-shot — just stay disarmed and let
|
|
247
|
+
// the rebind-resume path own its lifecycle. (A pause BEFORE the timer fires
|
|
248
|
+
// is caught earlier in onTimer as a paused-skip.)
|
|
249
|
+
disarmJob(fresh.id);
|
|
250
|
+
await store.flush();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const lastRunStatus = outcome.status === 'delivered' ? 'delivered' : 'failed';
|
|
254
|
+
if (fresh.spec.kind === 'once') {
|
|
255
|
+
await store.removeSchedule(fresh.id);
|
|
256
|
+
disarmJob(fresh.id);
|
|
257
|
+
await store.flush();
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// cron (possibly N-times)
|
|
261
|
+
if (typeof fresh.spec.remainingRuns === 'number') {
|
|
262
|
+
const remaining = fresh.spec.remainingRuns - 1;
|
|
263
|
+
if (remaining <= 0) {
|
|
264
|
+
await store.removeSchedule(fresh.id);
|
|
265
|
+
disarmJob(fresh.id);
|
|
266
|
+
await store.flush();
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const nextRunAt = (0, recurrence_1.getNextRunAt)(fresh.spec, deliveredAt);
|
|
270
|
+
const updated = {
|
|
271
|
+
...fresh,
|
|
272
|
+
spec: { ...fresh.spec, remainingRuns: remaining },
|
|
273
|
+
lastRunAt: deliveredAt,
|
|
274
|
+
lastRunStatus,
|
|
275
|
+
nextRunAt,
|
|
276
|
+
updatedAt: new Date(deliveredAt).toISOString(),
|
|
277
|
+
};
|
|
278
|
+
await store.upsertSchedule(updated);
|
|
279
|
+
if (nextRunAt !== null)
|
|
280
|
+
armAt(fresh.id, nextRunAt);
|
|
281
|
+
else
|
|
282
|
+
disarmJob(fresh.id);
|
|
283
|
+
await store.flush();
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// plain recurring cron
|
|
287
|
+
const nextRunAt = (0, recurrence_1.getNextRunAt)(fresh.spec, deliveredAt);
|
|
288
|
+
const updated = {
|
|
289
|
+
...fresh,
|
|
290
|
+
lastRunAt: deliveredAt,
|
|
291
|
+
lastRunStatus,
|
|
292
|
+
nextRunAt,
|
|
293
|
+
updatedAt: new Date(deliveredAt).toISOString(),
|
|
294
|
+
};
|
|
295
|
+
await store.upsertSchedule(updated);
|
|
296
|
+
if (nextRunAt !== null)
|
|
297
|
+
armAt(fresh.id, nextRunAt);
|
|
298
|
+
else
|
|
299
|
+
disarmJob(fresh.id);
|
|
300
|
+
await store.flush();
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Boot replay. Walks every persisted job:
|
|
304
|
+
* - paused → skip silently (stays disarmed; no ledger entry).
|
|
305
|
+
* - nextRunAt missed (getCatchUpDecision → 'fire-missed') → fire ONCE as a
|
|
306
|
+
* catch-up (the deliver callback gets `missedAtMs`), then bookkeeping
|
|
307
|
+
* already recomputed nextRunAt from now and re-armed.
|
|
308
|
+
* - on-time / future → just arm.
|
|
309
|
+
* Catch-ups run sequentially (await) so a burst of missed jobs paces its
|
|
310
|
+
* announcements through the shared chat send budget.
|
|
311
|
+
*/
|
|
312
|
+
async function rearmAll() {
|
|
313
|
+
const all = store.getSchedules();
|
|
314
|
+
for (const record of Object.values(all)) {
|
|
315
|
+
if (record.isPaused)
|
|
316
|
+
continue;
|
|
317
|
+
const decision = (0, recurrence_1.getCatchUpDecision)({ nextRunAt: record.nextRunAt, nowMs: now() });
|
|
318
|
+
if (decision === 'fire-missed') {
|
|
319
|
+
// fire() reads the same catch-up decision and handles re-arming via
|
|
320
|
+
// bookkeeping; nothing else to arm here.
|
|
321
|
+
await fire(record);
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
armJob(record);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function shutdown() {
|
|
328
|
+
for (const handle of timers.values())
|
|
329
|
+
clearTimer(handle);
|
|
330
|
+
timers.clear();
|
|
331
|
+
}
|
|
332
|
+
function mintRunId() {
|
|
333
|
+
return (0, node_crypto_1.randomBytes)(runIdByteLength).toString('hex');
|
|
334
|
+
}
|
|
335
|
+
return { armJob, disarmJob, rearmAll, whenIdle, shutdown };
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/scheduler/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description The single source of the scheduler MCP server entry injected into
|
|
3
|
+
* every bot-started agent session (plan S6). Both backends get the SAME bot-owned
|
|
4
|
+
* `telegramBot` server, just shaped for their respective MCP-config formats:
|
|
5
|
+
* - Claude reads a `--mcp-config` file with a streamable-HTTP `mcpServers` entry
|
|
6
|
+
* (thread-scoped token).
|
|
7
|
+
* - OpenCode is registered at runtime via `POST /mcp?directory=` with a `remote`
|
|
8
|
+
* server entry (directory-scoped token).
|
|
9
|
+
*
|
|
10
|
+
* This server is bot-owned plumbing — it is NOT part of the user-editable `/mcp`
|
|
11
|
+
* hierarchy (`mcpConfig.ts`) and is never written into the user's group/thread
|
|
12
|
+
* config files.
|
|
13
|
+
*
|
|
14
|
+
* INERT until S8 calls {@link configureSchedulerMcpInjection} at boot: unconfigured,
|
|
15
|
+
* every builder returns `null`, so the `prepareMcpFlags` / OpenCode-registration
|
|
16
|
+
* call sites behave byte-identically to before the scheduler existed. The module
|
|
17
|
+
* imports nothing from `bot.ts`; the secret + port arrive through the config
|
|
18
|
+
* singleton, mirroring how `mcpSurface.ts` takes its deps injected.
|
|
19
|
+
*/
|
|
20
|
+
import { type SessionKey } from '../sessionKey';
|
|
21
|
+
import { schedulerMcpClientIdHeader } from './mcpSurface';
|
|
22
|
+
/** The fixed MCP server name both backends register the injected entry under. */
|
|
23
|
+
export declare const schedulerMcpServerName = "telegramBot";
|
|
24
|
+
/**
|
|
25
|
+
* @name SchedulerInjectionConfig
|
|
26
|
+
* @description The boot-supplied dependencies (S8 wires these). `getSecret`
|
|
27
|
+
* returns the persisted HMAC secret used to mint scope tokens (same secret the
|
|
28
|
+
* server verifies against in {@link mcpSurface}); `port` is the bound listen
|
|
29
|
+
* port (resolved after the server starts, since a `0` request port becomes an
|
|
30
|
+
* ephemeral one) so the injected url points at the real listener.
|
|
31
|
+
*/
|
|
32
|
+
interface SchedulerInjectionConfig {
|
|
33
|
+
getSecret: () => Promise<string>;
|
|
34
|
+
port: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Activate scheduler MCP injection (plan S8 calls this at boot,
|
|
38
|
+
* after the MCP server's `start()` resolves so the bound port is known). Until
|
|
39
|
+
* called, all builders are inert. Re-calling overwrites the config (e.g. a
|
|
40
|
+
* server restart that rebinds a different ephemeral port).
|
|
41
|
+
*/
|
|
42
|
+
export declare function configureSchedulerMcpInjection(config: SchedulerInjectionConfig): void;
|
|
43
|
+
/**
|
|
44
|
+
* @description Reset to the inert state. Intended for tests (and a future
|
|
45
|
+
* shutdown path) so a configured singleton can't leak across cases.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resetSchedulerMcpInjection(): void;
|
|
48
|
+
/**
|
|
49
|
+
* @name ClaudeSchedulerMcpConfig
|
|
50
|
+
* @description The exact JSON shape written to the bot-generated `--mcp-config`
|
|
51
|
+
* file for Claude: a single streamable-HTTP `mcpServers` entry keyed by
|
|
52
|
+
* {@link schedulerMcpServerName}, carrying the thread-scoped bearer token.
|
|
53
|
+
*/
|
|
54
|
+
export interface ClaudeSchedulerMcpConfig {
|
|
55
|
+
mcpServers: {
|
|
56
|
+
[schedulerMcpServerName]: {
|
|
57
|
+
type: 'http';
|
|
58
|
+
url: string;
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: string;
|
|
61
|
+
[schedulerMcpClientIdHeader]: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description Build the Claude `--mcp-config` payload for a thread, scoped to
|
|
68
|
+
* that exact thread (`thread:<key>`). Returns `null` when injection is inert
|
|
69
|
+
* (S8 not wired) so the caller adds no extra flag. The thread key is serialised
|
|
70
|
+
* with {@link keyToString} — the same canonical form `serializeSchedulerScope`
|
|
71
|
+
* signs — so the token the server later verifies resolves to this exact thread.
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildClaudeSchedulerMcpConfig(threadKey: SessionKey): Promise<ClaudeSchedulerMcpConfig | null>;
|
|
74
|
+
/**
|
|
75
|
+
* @name OpenCodeSchedulerMcpRegistration
|
|
76
|
+
* @description The body posted to OpenCode's runtime `POST /mcp?directory=` to
|
|
77
|
+
* register the injected server for a bound folder, scoped to that directory
|
|
78
|
+
* (`dir:<path>`). OpenCode's runtime MCP shape is `remote` (vs Claude's `http`),
|
|
79
|
+
* `enabled: true`, with the directory-scoped bearer token in `headers`.
|
|
80
|
+
*/
|
|
81
|
+
export interface OpenCodeSchedulerMcpRegistration {
|
|
82
|
+
name: typeof schedulerMcpServerName;
|
|
83
|
+
config: {
|
|
84
|
+
type: 'remote';
|
|
85
|
+
url: string;
|
|
86
|
+
enabled: true;
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: string;
|
|
89
|
+
[schedulerMcpClientIdHeader]: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @description Build the OpenCode runtime MCP registration body for a directory,
|
|
95
|
+
* scoped to that directory (`dir:<path>`). Returns `null` when injection is
|
|
96
|
+
* inert. The directory is the bound folder (the OpenCode instance selector); the
|
|
97
|
+
* server resolves the single bound thread implicitly, or requires `threadKey`
|
|
98
|
+
* when the folder has more than one bound thread (see `resolveTargetThreadKey`).
|
|
99
|
+
*/
|
|
100
|
+
export declare function buildOpenCodeSchedulerMcpRegistration(directory: string): Promise<OpenCodeSchedulerMcpRegistration | null>;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=injection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection.d.ts","sourceRoot":"","sources":["../../src/scheduler/injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAEL,0BAA0B,EAG3B,MAAM,cAAc,CAAC;AAEtB,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD;;;;;;;GAOG;AACH,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAQD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAErF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAkBD;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE;QACV,CAAC,sBAAsB,CAAC,EAAE;YACxB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,OAAO,EAAE;gBACP,aAAa,EAAE,MAAM,CAAC;gBACtB,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC;aACtC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAiB1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,OAAO,sBAAsB,CAAC;IACpC,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,IAAI,CAAC;QACd,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC;YACtB,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAsB,qCAAqC,CACzD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAiBlD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description The single source of the scheduler MCP server entry injected into
|
|
4
|
+
* every bot-started agent session (plan S6). Both backends get the SAME bot-owned
|
|
5
|
+
* `telegramBot` server, just shaped for their respective MCP-config formats:
|
|
6
|
+
* - Claude reads a `--mcp-config` file with a streamable-HTTP `mcpServers` entry
|
|
7
|
+
* (thread-scoped token).
|
|
8
|
+
* - OpenCode is registered at runtime via `POST /mcp?directory=` with a `remote`
|
|
9
|
+
* server entry (directory-scoped token).
|
|
10
|
+
*
|
|
11
|
+
* This server is bot-owned plumbing — it is NOT part of the user-editable `/mcp`
|
|
12
|
+
* hierarchy (`mcpConfig.ts`) and is never written into the user's group/thread
|
|
13
|
+
* config files.
|
|
14
|
+
*
|
|
15
|
+
* INERT until S8 calls {@link configureSchedulerMcpInjection} at boot: unconfigured,
|
|
16
|
+
* every builder returns `null`, so the `prepareMcpFlags` / OpenCode-registration
|
|
17
|
+
* call sites behave byte-identically to before the scheduler existed. The module
|
|
18
|
+
* imports nothing from `bot.ts`; the secret + port arrive through the config
|
|
19
|
+
* singleton, mirroring how `mcpSurface.ts` takes its deps injected.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.schedulerMcpServerName = void 0;
|
|
23
|
+
exports.configureSchedulerMcpInjection = configureSchedulerMcpInjection;
|
|
24
|
+
exports.resetSchedulerMcpInjection = resetSchedulerMcpInjection;
|
|
25
|
+
exports.buildClaudeSchedulerMcpConfig = buildClaudeSchedulerMcpConfig;
|
|
26
|
+
exports.buildOpenCodeSchedulerMcpRegistration = buildOpenCodeSchedulerMcpRegistration;
|
|
27
|
+
const node_crypto_1 = require("node:crypto");
|
|
28
|
+
const sessionKey_1 = require("../sessionKey");
|
|
29
|
+
const mcpSurface_1 = require("./mcpSurface");
|
|
30
|
+
/** The fixed MCP server name both backends register the injected entry under. */
|
|
31
|
+
exports.schedulerMcpServerName = 'telegramBot';
|
|
32
|
+
/**
|
|
33
|
+
* Module-level singleton. `null` = unconfigured = inert: every builder returns
|
|
34
|
+
* `null` and the call sites add nothing. Set exactly once by S8 at boot.
|
|
35
|
+
*/
|
|
36
|
+
let injectionConfig = null;
|
|
37
|
+
/**
|
|
38
|
+
* @description Activate scheduler MCP injection (plan S8 calls this at boot,
|
|
39
|
+
* after the MCP server's `start()` resolves so the bound port is known). Until
|
|
40
|
+
* called, all builders are inert. Re-calling overwrites the config (e.g. a
|
|
41
|
+
* server restart that rebinds a different ephemeral port).
|
|
42
|
+
*/
|
|
43
|
+
function configureSchedulerMcpInjection(config) {
|
|
44
|
+
injectionConfig = config;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @description Reset to the inert state. Intended for tests (and a future
|
|
48
|
+
* shutdown path) so a configured singleton can't leak across cases.
|
|
49
|
+
*/
|
|
50
|
+
function resetSchedulerMcpInjection() {
|
|
51
|
+
injectionConfig = null;
|
|
52
|
+
}
|
|
53
|
+
/** The loopback url the injected entry points at: `http://127.0.0.1:<port>/mcp`. */
|
|
54
|
+
function buildSchedulerMcpUrl(port) {
|
|
55
|
+
return `http://127.0.0.1:${port}${mcpSurface_1.schedulerMcpPath}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @description Mint a bearer token for a scope using the configured secret.
|
|
59
|
+
* Reuses {@link buildSchedulerMcpToken} (and via it `serializeSchedulerScope`)
|
|
60
|
+
* so the token math lives in exactly one place. Returns `null` when inert.
|
|
61
|
+
*/
|
|
62
|
+
async function buildBearerHeader(scope) {
|
|
63
|
+
if (!injectionConfig)
|
|
64
|
+
return null;
|
|
65
|
+
const secret = await injectionConfig.getSecret();
|
|
66
|
+
return `Bearer ${(0, mcpSurface_1.buildSchedulerMcpToken)(secret, scope)}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @description Build the Claude `--mcp-config` payload for a thread, scoped to
|
|
70
|
+
* that exact thread (`thread:<key>`). Returns `null` when injection is inert
|
|
71
|
+
* (S8 not wired) so the caller adds no extra flag. The thread key is serialised
|
|
72
|
+
* with {@link keyToString} — the same canonical form `serializeSchedulerScope`
|
|
73
|
+
* signs — so the token the server later verifies resolves to this exact thread.
|
|
74
|
+
*/
|
|
75
|
+
async function buildClaudeSchedulerMcpConfig(threadKey) {
|
|
76
|
+
if (!injectionConfig)
|
|
77
|
+
return null;
|
|
78
|
+
const scope = { kind: 'thread', threadKey: (0, sessionKey_1.keyToString)(threadKey) };
|
|
79
|
+
const authorization = await buildBearerHeader(scope);
|
|
80
|
+
if (authorization === null)
|
|
81
|
+
return null;
|
|
82
|
+
return {
|
|
83
|
+
mcpServers: {
|
|
84
|
+
[exports.schedulerMcpServerName]: {
|
|
85
|
+
type: 'http',
|
|
86
|
+
url: buildSchedulerMcpUrl(injectionConfig.port),
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: authorization,
|
|
89
|
+
[mcpSurface_1.schedulerMcpClientIdHeader]: (0, node_crypto_1.randomUUID)(),
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* @description Build the OpenCode runtime MCP registration body for a directory,
|
|
97
|
+
* scoped to that directory (`dir:<path>`). Returns `null` when injection is
|
|
98
|
+
* inert. The directory is the bound folder (the OpenCode instance selector); the
|
|
99
|
+
* server resolves the single bound thread implicitly, or requires `threadKey`
|
|
100
|
+
* when the folder has more than one bound thread (see `resolveTargetThreadKey`).
|
|
101
|
+
*/
|
|
102
|
+
async function buildOpenCodeSchedulerMcpRegistration(directory) {
|
|
103
|
+
if (!injectionConfig)
|
|
104
|
+
return null;
|
|
105
|
+
const scope = { kind: 'dir', directory };
|
|
106
|
+
const authorization = await buildBearerHeader(scope);
|
|
107
|
+
if (authorization === null)
|
|
108
|
+
return null;
|
|
109
|
+
return {
|
|
110
|
+
name: exports.schedulerMcpServerName,
|
|
111
|
+
config: {
|
|
112
|
+
type: 'remote',
|
|
113
|
+
url: buildSchedulerMcpUrl(injectionConfig.port),
|
|
114
|
+
enabled: true,
|
|
115
|
+
headers: {
|
|
116
|
+
Authorization: authorization,
|
|
117
|
+
[mcpSurface_1.schedulerMcpClientIdHeader]: (0, node_crypto_1.randomUUID)(),
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=injection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/scheduler/injection.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAuCH,wEAEC;AAMD,gEAEC;AA4CD,sEAmBC;AA6BD,sFAmBC;AA9JD,6CAAyC;AACzC,8CAA6D;AAC7D,6CAKsB;AAEtB,iFAAiF;AACpE,QAAA,sBAAsB,GAAG,aAAa,CAAC;AAepD;;;GAGG;AACH,IAAI,eAAe,GAAoC,IAAI,CAAC;AAE5D;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,MAAgC;IAC7E,eAAe,GAAG,MAAM,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B;IACxC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,oFAAoF;AACpF,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,oBAAoB,IAAI,GAAG,6BAAgB,EAAE,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAqB;IACpD,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;IACjD,OAAO,UAAU,IAAA,mCAAsB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC3D,CAAC;AAqBD;;;;;;GAMG;AACI,KAAK,UAAU,6BAA6B,CACjD,SAAqB;IAErB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAA,wBAAW,EAAC,SAAS,CAAC,EAAE,CAAC;IACpF,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO;QACL,UAAU,EAAE;YACV,CAAC,8BAAsB,CAAC,EAAE;gBACxB,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC/C,OAAO,EAAE;oBACP,aAAa,EAAE,aAAa;oBAC5B,CAAC,uCAA0B,CAAC,EAAE,IAAA,wBAAU,GAAE;iBAC3C;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAsBD;;;;;;GAMG;AACI,KAAK,UAAU,qCAAqC,CACzD,SAAiB;IAEjB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,8BAAsB;QAC5B,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC;YAC/C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,aAAa;gBAC5B,CAAC,uCAA0B,CAAC,EAAE,IAAA,wBAAU,GAAE;aAC3C;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type SchedulerMcpHandle } from './mcpSurface';
|
|
2
|
+
/**
|
|
3
|
+
* @description Boot-time bring-up of the bot-owned MCP server, and the ORDER of
|
|
4
|
+
* the session phase around it. Kept out of `bot.ts` so the ordering contract is
|
|
5
|
+
* testable (importing `bot.ts` runs its module-scope `parseEnv()`).
|
|
6
|
+
*
|
|
7
|
+
* The contract: the server is bound and injection is configured BEFORE any
|
|
8
|
+
* session is re-attached or resumed. A session (re)spawned at boot builds its
|
|
9
|
+
* `--mcp-config` / OpenCode registration at that moment; with injection still
|
|
10
|
+
* inert it is born WITHOUT the bot's server, and the Claude heal path never
|
|
11
|
+
* repairs an ABSENT server (`decideMcpHeal` maps it to `skip`). Such a Claude
|
|
12
|
+
* session could not reach the bot's tools for the rest of its life.
|
|
13
|
+
*
|
|
14
|
+
* The heals stay AFTER reattach: they walk only ACTIVE sessions, so run before
|
|
15
|
+
* it they would heal nothing. The schedule re-arm stays after reattach too — a
|
|
16
|
+
* catch-up fire needs the re-attached adapters.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @name SchedulerMcpBootDeps
|
|
20
|
+
* @description What {@link startSchedulerMcpForBoot} needs: the server handle,
|
|
21
|
+
* the env-pinned port ({@link defaultSchedulerMcpPort} = not pinned), the
|
|
22
|
+
* persisted port of a prior boot and its writer, and the HMAC secret the
|
|
23
|
+
* injected tokens are signed with.
|
|
24
|
+
*/
|
|
25
|
+
export interface SchedulerMcpBootDeps {
|
|
26
|
+
handle: SchedulerMcpHandle;
|
|
27
|
+
envPort: number;
|
|
28
|
+
getPersistedPort: () => number | undefined;
|
|
29
|
+
persistPort: (port: number) => Promise<void>;
|
|
30
|
+
getSecret: () => Promise<string>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @description Bind the bot MCP server and configure injection toward the bound
|
|
34
|
+
* port. Resolves `true` when the server is up. A bind failure (port busy) is
|
|
35
|
+
* logged and resolves `false`: the bot still boots and injection stays inert,
|
|
36
|
+
* so sessions spawned this run get no bot tools — a Claude one keeps lacking
|
|
37
|
+
* them after a later restart too (its process is adopted, and the heal never
|
|
38
|
+
* adds an absent server). Persisting the port is best-effort: it only serves the
|
|
39
|
+
* NEXT boot, so a failed write is logged and the bound server is still used.
|
|
40
|
+
*/
|
|
41
|
+
export declare function startSchedulerMcpForBoot(deps: SchedulerMcpBootDeps): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* @name SessionBootPhaseSteps
|
|
44
|
+
* @description The boot steps whose relative order {@link runSessionBootPhase}
|
|
45
|
+
* owns. `restoreAfterReattach` is the per-thread state that needs to know which
|
|
46
|
+
* sessions came back (pending questions, armed retries, limit episodes, orphaned
|
|
47
|
+
* status frames); `onSessionsRestored` opens the gate the session-reading MCP
|
|
48
|
+
* tools wait on (the server already serves, a surviving session may call in);
|
|
49
|
+
* `healActiveSessions` runs only when the server is up and is best-effort — a
|
|
50
|
+
* throw is logged and never aborts the boot.
|
|
51
|
+
*/
|
|
52
|
+
export interface SessionBootPhaseSteps {
|
|
53
|
+
startBotMcp: () => Promise<boolean>;
|
|
54
|
+
reattachSessions: () => Promise<void>;
|
|
55
|
+
restoreAfterReattach: () => void;
|
|
56
|
+
onSessionsRestored: () => void;
|
|
57
|
+
healActiveSessions: () => void;
|
|
58
|
+
rearmSchedules: () => Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Run the session phase of the boot in the order the module header
|
|
62
|
+
* explains. Resolves whether the bot MCP server started, for the shutdown path.
|
|
63
|
+
*/
|
|
64
|
+
export declare function runSessionBootPhase(steps: SessionBootPhaseSteps): Promise<boolean>;
|
|
65
|
+
//# sourceMappingURL=mcpBoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpBoot.d.ts","sourceRoot":"","sources":["../../src/scheduler/mcpBoot.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEhF;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B3F;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAcxF"}
|