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 @@
|
|
|
1
|
+
{"version":3,"file":"rotatingJsonlFile.js","sourceRoot":"","sources":["../../src/utils/rotatingJsonlFile.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAuG;AACvG,0DAA6B;AAG7B;;;;;;;;;;;;GAYG;AACH,MAAa,iBAAiB;IACX,IAAI,CAAS;IACb,QAAQ,CAAS;IAC1B,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,QAAgB,EAAE,QAAgB;QAC5C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,mDAAmD;IACnD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QACnC,IAAI,IAAA,kBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtD,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,6FAA6F;IAC7F,MAAM,CAAC,MAAe;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,IAAA,mBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAA,wBAAc,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,kBAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBAC7D,MAAM,CAAC,CAAC;YACV,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,MAAwB;QACxC,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1C,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;gBACzC,YAAY,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACnC,CAAC;CACF;AA/ED,8CA+EC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Shared retention window for the time-bucketed log files (the
|
|
3
|
+
* output trace and the bot-console tee). Both prune buckets older than this.
|
|
4
|
+
*/
|
|
5
|
+
export declare const retentionHours = 6;
|
|
6
|
+
/** Retention window in milliseconds, derived from {@link retentionHours}. */
|
|
7
|
+
export declare const retentionMs: number;
|
|
8
|
+
/**
|
|
9
|
+
* @description Path of the hourly bucket file a write at `nowMs` belongs to:
|
|
10
|
+
* `<dir>/<base>-YYYYMMDDHH.<ext>`, using the HOST-LOCAL clock (so the operator
|
|
11
|
+
* reading the file sees buckets aligned to their own wall time). Pure — does no
|
|
12
|
+
* IO, just composes the name.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getHourBucketPath(dir: string, base: string, ext: string, nowMs: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* @description Delete every bucket file for `<base>.<ext>` (including its `.1`
|
|
17
|
+
* rollover) whose mtime is older than the retention window. Time-bucketing means
|
|
18
|
+
* we only ever unlink WHOLE buckets the writer is no longer appending to — no
|
|
19
|
+
* race with the live writer (it only ever touches the current bucket). Pruning
|
|
20
|
+
* is best-effort: a missing dir, an unreadable entry, or a failed `unlink` is
|
|
21
|
+
* swallowed per-file so one bad entry can never abort the sweep or throw into
|
|
22
|
+
* the boot/interval path.
|
|
23
|
+
*/
|
|
24
|
+
export declare function pruneExpiredBuckets(dir: string, base: string, ext: string, retentionWindowMs: number, nowMs: number): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=rotatingLogFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotatingLogFile.d.ts","sourceRoot":"","sources":["../../src/utils/rotatingLogFile.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAIhC,6EAA6E;AAC7E,eAAO,MAAM,WAAW,QAAuC,CAAC;AAMhE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ/F;AAQD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.retentionMs = exports.retentionHours = void 0;
|
|
7
|
+
exports.getHourBucketPath = getHourBucketPath;
|
|
8
|
+
exports.pruneExpiredBuckets = pruneExpiredBuckets;
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
/**
|
|
12
|
+
* @description Shared retention window for the time-bucketed log files (the
|
|
13
|
+
* output trace and the bot-console tee). Both prune buckets older than this.
|
|
14
|
+
*/
|
|
15
|
+
exports.retentionHours = 6;
|
|
16
|
+
const millisecondsPerHour = 60 * 60 * 1000;
|
|
17
|
+
/** Retention window in milliseconds, derived from {@link retentionHours}. */
|
|
18
|
+
exports.retentionMs = exports.retentionHours * millisecondsPerHour;
|
|
19
|
+
function padTwo(value) {
|
|
20
|
+
return value.toString().padStart(2, '0');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @description Path of the hourly bucket file a write at `nowMs` belongs to:
|
|
24
|
+
* `<dir>/<base>-YYYYMMDDHH.<ext>`, using the HOST-LOCAL clock (so the operator
|
|
25
|
+
* reading the file sees buckets aligned to their own wall time). Pure — does no
|
|
26
|
+
* IO, just composes the name.
|
|
27
|
+
*/
|
|
28
|
+
function getHourBucketPath(dir, base, ext, nowMs) {
|
|
29
|
+
const now = new Date(nowMs);
|
|
30
|
+
const stamp = `${now.getFullYear()}` +
|
|
31
|
+
padTwo(now.getMonth() + 1) +
|
|
32
|
+
padTwo(now.getDate()) +
|
|
33
|
+
padTwo(now.getHours());
|
|
34
|
+
return node_path_1.default.join(dir, `${base}-${stamp}.${ext}`);
|
|
35
|
+
}
|
|
36
|
+
/** Match `<base>-<10 digits>.<ext>` and its `.1` rollover sibling. */
|
|
37
|
+
function buildBucketMatcher(base, ext) {
|
|
38
|
+
const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
39
|
+
return new RegExp(`^${escape(base)}-\\d{10}\\.${escape(ext)}(?:\\.1)?$`);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @description Delete every bucket file for `<base>.<ext>` (including its `.1`
|
|
43
|
+
* rollover) whose mtime is older than the retention window. Time-bucketing means
|
|
44
|
+
* we only ever unlink WHOLE buckets the writer is no longer appending to — no
|
|
45
|
+
* race with the live writer (it only ever touches the current bucket). Pruning
|
|
46
|
+
* is best-effort: a missing dir, an unreadable entry, or a failed `unlink` is
|
|
47
|
+
* swallowed per-file so one bad entry can never abort the sweep or throw into
|
|
48
|
+
* the boot/interval path.
|
|
49
|
+
*/
|
|
50
|
+
async function pruneExpiredBuckets(dir, base, ext, retentionWindowMs, nowMs) {
|
|
51
|
+
const matcher = buildBucketMatcher(base, ext);
|
|
52
|
+
let entries;
|
|
53
|
+
try {
|
|
54
|
+
entries = await node_fs_1.promises.readdir(dir);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const cutoffMs = nowMs - retentionWindowMs;
|
|
60
|
+
for (const name of entries) {
|
|
61
|
+
if (!matcher.test(name))
|
|
62
|
+
continue;
|
|
63
|
+
const filePath = node_path_1.default.join(dir, name);
|
|
64
|
+
try {
|
|
65
|
+
const stat = await node_fs_1.promises.stat(filePath);
|
|
66
|
+
if (stat.mtimeMs < cutoffMs)
|
|
67
|
+
await node_fs_1.promises.unlink(filePath);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Best-effort: ignore a vanished/locked file, keep sweeping the rest.
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rotatingLogFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotatingLogFile.js","sourceRoot":"","sources":["../../src/utils/rotatingLogFile.ts"],"names":[],"mappings":";;;;;;AAwBA,8CAQC;AAiBD,kDAyBC;AA1ED,qCAA0C;AAC1C,0DAA6B;AAE7B;;;GAGG;AACU,QAAA,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,6EAA6E;AAChE,QAAA,WAAW,GAAG,sBAAc,GAAG,mBAAmB,CAAC;AAEhE,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,IAAY,EAAE,GAAW,EAAE,KAAa;IACrF,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,KAAK,GACT,GAAG,GAAG,CAAC,WAAW,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzB,OAAO,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,sEAAsE;AACtE,SAAS,kBAAkB,CAAC,IAAY,EAAE,GAAW;IACnD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACvE,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,mBAAmB,CACvC,GAAW,EACX,IAAY,EACZ,GAAW,EACX,iBAAyB,EACzB,KAAa;IAEb,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,kBAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,GAAG,QAAQ;gBAAE,MAAM,kBAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure, bounded rolling per-chat outbound send-rate tracker.
|
|
3
|
+
*
|
|
4
|
+
* A real Telegram 429 only fires under genuine concurrent multi-topic load and
|
|
5
|
+
* cannot be reproduced from a single client, so the bot keeps ALWAYS-ON
|
|
6
|
+
* instrumentation that characterises how hard each chat's outbound channel is
|
|
7
|
+
* being pushed. This helper is the measurement core: it records a timestamp per
|
|
8
|
+
* outbound send (hooked at the single send chokepoint in `rateLimiter.ts`) into
|
|
9
|
+
* a bounded rolling window per chat, and answers two questions used by the rich
|
|
10
|
+
* 429 log line and the periodic rate summary:
|
|
11
|
+
*
|
|
12
|
+
* - sends in the last 60s (the sustained rate/min we pace against), and
|
|
13
|
+
* - the PEAK count in any short sub-window (e.g. busiest 10s burst), which
|
|
14
|
+
* reveals spikes the per-minute average hides.
|
|
15
|
+
*
|
|
16
|
+
* Bounded + best-effort by construction: each chat keeps at most
|
|
17
|
+
* {@link maxTimestampsPerChat} timestamps (old ones evicted on every record),
|
|
18
|
+
* so a runaway send loop can't grow memory without bound. It NEVER throws — the
|
|
19
|
+
* caller hooks it on the send hot path and must not let instrumentation break a
|
|
20
|
+
* send.
|
|
21
|
+
*
|
|
22
|
+
* The clock is injected (same `() => number` shape as {@link BucketClock.now})
|
|
23
|
+
* so unit tests drive it deterministically with a fake clock.
|
|
24
|
+
*/
|
|
25
|
+
/** Default sub-window for the peak burst query (busiest 10s). */
|
|
26
|
+
export declare const defaultPeakSubWindowMs = 10000;
|
|
27
|
+
export declare class SendRateTracker {
|
|
28
|
+
private readonly now;
|
|
29
|
+
private readonly logs;
|
|
30
|
+
constructor(now?: () => number);
|
|
31
|
+
/**
|
|
32
|
+
* Record one outbound send for a chat. Evicts timestamps that have aged out
|
|
33
|
+
* of the rolling window and enforces the per-chat hard cap. Never throws.
|
|
34
|
+
*/
|
|
35
|
+
recordSend(chatId: number, nowMs?: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Number of sends within the last `windowMs` for a chat. Defaults to the
|
|
38
|
+
* 60s window (sends/min — the sustained rate we pace against).
|
|
39
|
+
*/
|
|
40
|
+
getSendsInWindow(chatId: number, windowMs?: number, nowMs?: number): number;
|
|
41
|
+
/** Sends in the last 60s for a chat (the sustained rate/min). */
|
|
42
|
+
getSendsPerMin(chatId: number, nowMs?: number): number;
|
|
43
|
+
/**
|
|
44
|
+
* Peak number of sends in ANY sliding `subWindowMs` window across the
|
|
45
|
+
* retained (last-60s) timestamps — the busiest short burst, which the
|
|
46
|
+
* per-minute average can hide. Defaults to a 10s sub-window.
|
|
47
|
+
*/
|
|
48
|
+
getPeakInSubWindow(chatId: number, subWindowMs?: number, nowMs?: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* Chat ids that have at least one send still inside the rolling minute — the
|
|
51
|
+
* chats worth logging in the periodic rate summary (silent chats are skipped).
|
|
52
|
+
* Also opportunistically drops fully-aged-out chat logs so the map doesn't
|
|
53
|
+
* accumulate stale chats forever.
|
|
54
|
+
*/
|
|
55
|
+
getActiveChats(nowMs?: number): number[];
|
|
56
|
+
/** Evict timestamps older than the rolling window and enforce the hard cap. */
|
|
57
|
+
private evict;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=sendRateTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendRateTracker.d.ts","sourceRoot":"","sources":["../../src/utils/sendRateTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAe7C,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;gBAE1B,GAAG,GAAE,MAAM,MAAyB;IAEjE;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,IAAI;IAU5D;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAqB,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM;IAarG,iEAAiE;IACjE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM;IAIlE;;;;OAIG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAA+B,EAC5C,KAAK,GAAE,MAAmB,GACzB,MAAM;IAsBT;;;;;OAKG;IACH,cAAc,CAAC,KAAK,GAAE,MAAmB,GAAG,MAAM,EAAE;IAapD,+EAA+E;IAC/E,OAAO,CAAC,KAAK;CAWd"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure, bounded rolling per-chat outbound send-rate tracker.
|
|
4
|
+
*
|
|
5
|
+
* A real Telegram 429 only fires under genuine concurrent multi-topic load and
|
|
6
|
+
* cannot be reproduced from a single client, so the bot keeps ALWAYS-ON
|
|
7
|
+
* instrumentation that characterises how hard each chat's outbound channel is
|
|
8
|
+
* being pushed. This helper is the measurement core: it records a timestamp per
|
|
9
|
+
* outbound send (hooked at the single send chokepoint in `rateLimiter.ts`) into
|
|
10
|
+
* a bounded rolling window per chat, and answers two questions used by the rich
|
|
11
|
+
* 429 log line and the periodic rate summary:
|
|
12
|
+
*
|
|
13
|
+
* - sends in the last 60s (the sustained rate/min we pace against), and
|
|
14
|
+
* - the PEAK count in any short sub-window (e.g. busiest 10s burst), which
|
|
15
|
+
* reveals spikes the per-minute average hides.
|
|
16
|
+
*
|
|
17
|
+
* Bounded + best-effort by construction: each chat keeps at most
|
|
18
|
+
* {@link maxTimestampsPerChat} timestamps (old ones evicted on every record),
|
|
19
|
+
* so a runaway send loop can't grow memory without bound. It NEVER throws — the
|
|
20
|
+
* caller hooks it on the send hot path and must not let instrumentation break a
|
|
21
|
+
* send.
|
|
22
|
+
*
|
|
23
|
+
* The clock is injected (same `() => number` shape as {@link BucketClock.now})
|
|
24
|
+
* so unit tests drive it deterministically with a fake clock.
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.SendRateTracker = exports.defaultPeakSubWindowMs = void 0;
|
|
28
|
+
/** Rolling window the per-minute rate is measured over. */
|
|
29
|
+
const rateWindowMs = 60_000;
|
|
30
|
+
/** Default sub-window for the peak burst query (busiest 10s). */
|
|
31
|
+
exports.defaultPeakSubWindowMs = 10_000;
|
|
32
|
+
/**
|
|
33
|
+
* Hard cap on retained timestamps per chat. At the 40/min sustained ceiling a
|
|
34
|
+
* 60s window holds ~40 sends; a generous cap absorbs bursts well past the
|
|
35
|
+
* ceiling while still bounding memory if a send loop misbehaves. Oldest are
|
|
36
|
+
* dropped first.
|
|
37
|
+
*/
|
|
38
|
+
const maxTimestampsPerChat = 600;
|
|
39
|
+
class SendRateTracker {
|
|
40
|
+
now;
|
|
41
|
+
logs = new Map();
|
|
42
|
+
constructor(now = () => Date.now()) {
|
|
43
|
+
this.now = now;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Record one outbound send for a chat. Evicts timestamps that have aged out
|
|
47
|
+
* of the rolling window and enforces the per-chat hard cap. Never throws.
|
|
48
|
+
*/
|
|
49
|
+
recordSend(chatId, nowMs = this.now()) {
|
|
50
|
+
let log = this.logs.get(chatId);
|
|
51
|
+
if (!log) {
|
|
52
|
+
log = [];
|
|
53
|
+
this.logs.set(chatId, log);
|
|
54
|
+
}
|
|
55
|
+
log.push(nowMs);
|
|
56
|
+
this.evict(log, nowMs);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Number of sends within the last `windowMs` for a chat. Defaults to the
|
|
60
|
+
* 60s window (sends/min — the sustained rate we pace against).
|
|
61
|
+
*/
|
|
62
|
+
getSendsInWindow(chatId, windowMs = rateWindowMs, nowMs = this.now()) {
|
|
63
|
+
const log = this.logs.get(chatId);
|
|
64
|
+
if (!log)
|
|
65
|
+
return 0;
|
|
66
|
+
const cutoff = nowMs - windowMs;
|
|
67
|
+
let count = 0;
|
|
68
|
+
// Oldest-first; walk from the end while inside the window.
|
|
69
|
+
for (let i = log.length - 1; i >= 0; i -= 1) {
|
|
70
|
+
if (log[i] <= cutoff)
|
|
71
|
+
break;
|
|
72
|
+
count += 1;
|
|
73
|
+
}
|
|
74
|
+
return count;
|
|
75
|
+
}
|
|
76
|
+
/** Sends in the last 60s for a chat (the sustained rate/min). */
|
|
77
|
+
getSendsPerMin(chatId, nowMs = this.now()) {
|
|
78
|
+
return this.getSendsInWindow(chatId, rateWindowMs, nowMs);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Peak number of sends in ANY sliding `subWindowMs` window across the
|
|
82
|
+
* retained (last-60s) timestamps — the busiest short burst, which the
|
|
83
|
+
* per-minute average can hide. Defaults to a 10s sub-window.
|
|
84
|
+
*/
|
|
85
|
+
getPeakInSubWindow(chatId, subWindowMs = exports.defaultPeakSubWindowMs, nowMs = this.now()) {
|
|
86
|
+
const log = this.logs.get(chatId);
|
|
87
|
+
if (!log || log.length === 0)
|
|
88
|
+
return 0;
|
|
89
|
+
const windowStart = nowMs - rateWindowMs;
|
|
90
|
+
// Only consider timestamps still inside the rolling minute, oldest-first.
|
|
91
|
+
const recent = log.filter((ts) => ts > windowStart);
|
|
92
|
+
if (recent.length === 0)
|
|
93
|
+
return 0;
|
|
94
|
+
// Sliding window over the sorted timestamps: for each start, count how many
|
|
95
|
+
// fall within [ts, ts + subWindowMs).
|
|
96
|
+
let peak = 0;
|
|
97
|
+
let right = 0;
|
|
98
|
+
for (let left = 0; left < recent.length; left += 1) {
|
|
99
|
+
if (right < left)
|
|
100
|
+
right = left;
|
|
101
|
+
while (right < recent.length && recent[right] - recent[left] < subWindowMs) {
|
|
102
|
+
right += 1;
|
|
103
|
+
}
|
|
104
|
+
const count = right - left;
|
|
105
|
+
if (count > peak)
|
|
106
|
+
peak = count;
|
|
107
|
+
}
|
|
108
|
+
return peak;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Chat ids that have at least one send still inside the rolling minute — the
|
|
112
|
+
* chats worth logging in the periodic rate summary (silent chats are skipped).
|
|
113
|
+
* Also opportunistically drops fully-aged-out chat logs so the map doesn't
|
|
114
|
+
* accumulate stale chats forever.
|
|
115
|
+
*/
|
|
116
|
+
getActiveChats(nowMs = this.now()) {
|
|
117
|
+
const active = [];
|
|
118
|
+
for (const [chatId, log] of this.logs) {
|
|
119
|
+
this.evict(log, nowMs);
|
|
120
|
+
if (log.length === 0) {
|
|
121
|
+
this.logs.delete(chatId);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
active.push(chatId);
|
|
125
|
+
}
|
|
126
|
+
return active;
|
|
127
|
+
}
|
|
128
|
+
/** Evict timestamps older than the rolling window and enforce the hard cap. */
|
|
129
|
+
evict(log, nowMs) {
|
|
130
|
+
const cutoff = nowMs - rateWindowMs;
|
|
131
|
+
// Drop the aged-out prefix (oldest-first → contiguous prefix).
|
|
132
|
+
let dropTo = 0;
|
|
133
|
+
while (dropTo < log.length && log[dropTo] <= cutoff)
|
|
134
|
+
dropTo += 1;
|
|
135
|
+
if (dropTo > 0)
|
|
136
|
+
log.splice(0, dropTo);
|
|
137
|
+
// Hard cap: if still over, drop the oldest overflow.
|
|
138
|
+
if (log.length > maxTimestampsPerChat) {
|
|
139
|
+
log.splice(0, log.length - maxTimestampsPerChat);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.SendRateTracker = SendRateTracker;
|
|
144
|
+
//# sourceMappingURL=sendRateTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendRateTracker.js","sourceRoot":"","sources":["../../src/utils/sendRateTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialQueue.d.ts","sourceRoot":"","sources":["../../src/utils/serialQueue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1C;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAU/C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSerialQueue = createSerialQueue;
|
|
4
|
+
function createSerialQueue() {
|
|
5
|
+
let tail = Promise.resolve();
|
|
6
|
+
return {
|
|
7
|
+
run(fn) {
|
|
8
|
+
const next = tail.then(fn, fn);
|
|
9
|
+
tail = next.catch(() => undefined);
|
|
10
|
+
return next;
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=serialQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialQueue.js","sourceRoot":"","sources":["../../src/utils/serialQueue.ts"],"names":[],"mappings":";;AAIA,8CAUC;AAVD,SAAgB,iBAAiB;IAC/B,IAAI,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/C,OAAO;QACL,GAAG,CAAI,EAAoB;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision logic for the OpenCode adapter's SSE stream
|
|
3
|
+
* lifecycle — extracted from `openCodeAdapter.ts` so the "open on the first
|
|
4
|
+
* session, close on the last" rule is unit-testable without a live server or
|
|
5
|
+
* sockets.
|
|
6
|
+
*
|
|
7
|
+
* Background (plan 2026-06-17): the adapter owns ONE `/global/event` stream for
|
|
8
|
+
* the whole server (it superseded both the per-thread `/global/event` model of
|
|
9
|
+
* plan 2026-06-05 and the per-directory `/event?directory=` model, the latter
|
|
10
|
+
* going silent for an aged sole subscriber on opencode 1.14.41). Every event is
|
|
11
|
+
* JSON-parsed exactly once and routed by the envelope `directory` + `sessionID`.
|
|
12
|
+
* The single stream's lifecycle is reference-counted by the TOTAL active-session
|
|
13
|
+
* count: it opens when the FIRST active session (any folder) appears and closes
|
|
14
|
+
* when the LAST one goes away — `getSseStreamTransition` is driven with those
|
|
15
|
+
* totals.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @description Decide what to do with the SSE stream after the count of active
|
|
19
|
+
* sessions changes by one. Driven with the TOTAL active-session count (plan
|
|
20
|
+
* 2026-06-17): the single global stream opens on the first session anywhere and
|
|
21
|
+
* closes on the last.
|
|
22
|
+
*
|
|
23
|
+
* `open` — went from zero active sessions to one: start the stream.
|
|
24
|
+
* `close` — went from one active session to zero: tear it down.
|
|
25
|
+
* `none` — a sibling session already keeps (or still keeps) the stream alive,
|
|
26
|
+
* or the change is a no-op.
|
|
27
|
+
*
|
|
28
|
+
* @param activeSessionCountBefore active sessions BEFORE the change (must be ≥ 0).
|
|
29
|
+
* @param activeSessionCountAfter active sessions AFTER the change (must be ≥ 0).
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSseStreamTransition(activeSessionCountBefore: number, activeSessionCountAfter: number): 'open' | 'close' | 'none';
|
|
32
|
+
//# sourceMappingURL=sseStreamLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseStreamLifecycle.d.ts","sourceRoot":"","sources":["../../src/utils/sseStreamLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,wBAAwB,EAAE,MAAM,EAChC,uBAAuB,EAAE,MAAM,GAC9B,MAAM,GAAG,OAAO,GAAG,MAAM,CAI3B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decision logic for the OpenCode adapter's SSE stream
|
|
4
|
+
* lifecycle — extracted from `openCodeAdapter.ts` so the "open on the first
|
|
5
|
+
* session, close on the last" rule is unit-testable without a live server or
|
|
6
|
+
* sockets.
|
|
7
|
+
*
|
|
8
|
+
* Background (plan 2026-06-17): the adapter owns ONE `/global/event` stream for
|
|
9
|
+
* the whole server (it superseded both the per-thread `/global/event` model of
|
|
10
|
+
* plan 2026-06-05 and the per-directory `/event?directory=` model, the latter
|
|
11
|
+
* going silent for an aged sole subscriber on opencode 1.14.41). Every event is
|
|
12
|
+
* JSON-parsed exactly once and routed by the envelope `directory` + `sessionID`.
|
|
13
|
+
* The single stream's lifecycle is reference-counted by the TOTAL active-session
|
|
14
|
+
* count: it opens when the FIRST active session (any folder) appears and closes
|
|
15
|
+
* when the LAST one goes away — `getSseStreamTransition` is driven with those
|
|
16
|
+
* totals.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.getSseStreamTransition = getSseStreamTransition;
|
|
20
|
+
/**
|
|
21
|
+
* @description Decide what to do with the SSE stream after the count of active
|
|
22
|
+
* sessions changes by one. Driven with the TOTAL active-session count (plan
|
|
23
|
+
* 2026-06-17): the single global stream opens on the first session anywhere and
|
|
24
|
+
* closes on the last.
|
|
25
|
+
*
|
|
26
|
+
* `open` — went from zero active sessions to one: start the stream.
|
|
27
|
+
* `close` — went from one active session to zero: tear it down.
|
|
28
|
+
* `none` — a sibling session already keeps (or still keeps) the stream alive,
|
|
29
|
+
* or the change is a no-op.
|
|
30
|
+
*
|
|
31
|
+
* @param activeSessionCountBefore active sessions BEFORE the change (must be ≥ 0).
|
|
32
|
+
* @param activeSessionCountAfter active sessions AFTER the change (must be ≥ 0).
|
|
33
|
+
*/
|
|
34
|
+
function getSseStreamTransition(activeSessionCountBefore, activeSessionCountAfter) {
|
|
35
|
+
if (activeSessionCountBefore <= 0 && activeSessionCountAfter > 0)
|
|
36
|
+
return 'open';
|
|
37
|
+
if (activeSessionCountBefore > 0 && activeSessionCountAfter <= 0)
|
|
38
|
+
return 'close';
|
|
39
|
+
return 'none';
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=sseStreamLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseStreamLifecycle.js","sourceRoot":"","sources":["../../src/utils/sseStreamLifecycle.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAgBH,wDAOC;AArBD;;;;;;;;;;;;;GAaG;AACH,SAAgB,sBAAsB,CACpC,wBAAgC,EAChC,uBAA+B;IAE/B,IAAI,wBAAwB,IAAI,CAAC,IAAI,uBAAuB,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAChF,IAAI,wBAAwB,GAAG,CAAC,IAAI,uBAAuB,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACjF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision layer for the boot-time readiness status message
|
|
3
|
+
* (plan 2026-07-12-startup-readiness-status). On startup the bot tells the owner
|
|
4
|
+
* whether it can process messages in the topics / group, or — if not — a numbered
|
|
5
|
+
* list of only the setup steps that are still unmet. This module holds the pure,
|
|
6
|
+
* unit-testable core: which items are unmet, whether the bot is ready, the
|
|
7
|
+
* cadence gate, and the full message composition (via an injected translate so
|
|
8
|
+
* the numbering / header logic is testable without the i18n runtime). `bot.ts`
|
|
9
|
+
* gathers the live facts and does the actual Telegram send.
|
|
10
|
+
*/
|
|
11
|
+
/** One of the three Telegram admin rights the bot needs in the paired group. */
|
|
12
|
+
export type BotRightKey = 'manageTopics' | 'pin' | 'delete';
|
|
13
|
+
/** The three admin rights, resolved from the bot's `getChatMember` in the group. */
|
|
14
|
+
export interface BotAdminRights {
|
|
15
|
+
manageTopics: boolean;
|
|
16
|
+
pin: boolean;
|
|
17
|
+
delete: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @description The checklist items, in the fixed order they render. The first
|
|
21
|
+
* four are REQUIRED (their unmet state makes the bot not-ready); the two
|
|
22
|
+
* `optional_*` items are informational only and never affect {@link
|
|
23
|
+
* ReadinessReport.isReady}.
|
|
24
|
+
*/
|
|
25
|
+
export type ReadinessItemKey = 'create_group' | 'grant_admin' | 'bind_topic' | 'install_agent' | 'optional_groq' | 'optional_owner';
|
|
26
|
+
/** The live facts `bot.ts` gathers at boot and feeds to {@link buildReadinessReport}. */
|
|
27
|
+
export interface ReadinessFacts {
|
|
28
|
+
/** A forum supergroup is paired (`getAllowedGroupId() != null`). */
|
|
29
|
+
groupPaired: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The bot's admin rights in the paired group, or `null` when unpaired / the
|
|
32
|
+
* bot is not an administrator / the rights could not be read.
|
|
33
|
+
*/
|
|
34
|
+
botRights: BotAdminRights | null;
|
|
35
|
+
/** At least one topic in the paired group is bound to a folder. */
|
|
36
|
+
hasBinding: boolean;
|
|
37
|
+
/** Installed agent CLIs among `claude` / `opencode` (empty ⇒ none installed). */
|
|
38
|
+
availableAgents: string[];
|
|
39
|
+
/** `GROQ_API_KEY` is present (optional — enables voice input). */
|
|
40
|
+
hasGroq: boolean;
|
|
41
|
+
/** `OWNER_USER_ID` is set. */
|
|
42
|
+
ownerSet: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Delivery fell back to the group's General topic because the owner DM was
|
|
45
|
+
* unreachable / unset. Only ever surfaces the `optional_owner` hint (and only
|
|
46
|
+
* when `ownerSet` is false — a set-but-unopened DM is not the same problem).
|
|
47
|
+
*/
|
|
48
|
+
usedGeneralFallback: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** The pure verdict {@link buildReadinessReport} produces. */
|
|
51
|
+
export interface ReadinessReport {
|
|
52
|
+
/** True iff every REQUIRED item is met (optional items never block this). */
|
|
53
|
+
isReady: boolean;
|
|
54
|
+
/** The unmet items, in render order — drives the numbered checklist. */
|
|
55
|
+
unmetKeys: ReadinessItemKey[];
|
|
56
|
+
/** Which specific admin rights are missing (for the `grant_admin` item copy). */
|
|
57
|
+
missingRights: BotRightKey[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @description Telegram's canonical permission names for the three rights the
|
|
61
|
+
* bot needs — proper nouns shown verbatim in the `grant_admin` item so the
|
|
62
|
+
* operator can find the exact toggles in Telegram's admin UI. Kept here (not in
|
|
63
|
+
* i18n) because they are feature identifiers, not translated prose.
|
|
64
|
+
*/
|
|
65
|
+
export declare const botRightLabels: Record<BotRightKey, string>;
|
|
66
|
+
/**
|
|
67
|
+
* @description The admin rights the bot is missing. A `null` rights object (not
|
|
68
|
+
* an admin / unreadable) counts as ALL three missing.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getMissingBotRights(rights: BotAdminRights | null): BotRightKey[];
|
|
71
|
+
/** Join the missing rights into the human list for the `grant_admin` item copy. */
|
|
72
|
+
export declare function formatMissingRights(keys: BotRightKey[]): string;
|
|
73
|
+
/**
|
|
74
|
+
* @description Turn the live facts into the readiness verdict.
|
|
75
|
+
*
|
|
76
|
+
* `isReady` is true iff NONE of the required items are unmet:
|
|
77
|
+
* groupPaired && all admin rights held && a binding exists && an agent CLI installed.
|
|
78
|
+
* The optional groq / owner items are informational — they populate `unmetKeys`
|
|
79
|
+
* (so they render inside a not-ready checklist) but never flip `isReady`.
|
|
80
|
+
*
|
|
81
|
+
* `grant_admin` is only unmet while a group IS paired (you cannot grant admin
|
|
82
|
+
* before the group exists — an unpaired bot shows `create_group` instead).
|
|
83
|
+
*/
|
|
84
|
+
export declare function buildReadinessReport(facts: ReadinessFacts): ReadinessReport;
|
|
85
|
+
/**
|
|
86
|
+
* @description Cadence gate. A COLD start always sends (ready or not). A HOT
|
|
87
|
+
* reload stays silent when fully ready (no spam on frequent rebuilds) and sends
|
|
88
|
+
* only when something is missing.
|
|
89
|
+
*/
|
|
90
|
+
export declare function checkShouldSendStartupStatus(input: {
|
|
91
|
+
isHotReload: boolean;
|
|
92
|
+
isReady: boolean;
|
|
93
|
+
}): boolean;
|
|
94
|
+
/** A resolved delivery surface for the boot-time status: the owner DM or the group's General topic. */
|
|
95
|
+
export type StartupTarget = 'owner' | 'general';
|
|
96
|
+
/**
|
|
97
|
+
* @description Resolve the ordered delivery targets for the boot-time status.
|
|
98
|
+
*
|
|
99
|
+
* The READY status is only meaningful in the owner's private DM, so it is
|
|
100
|
+
* DM-ONLY and NEVER falls back to the group's General topic (a "✅ Ready" in the
|
|
101
|
+
* shared group is pure noise). If there is no owner DM, a ready status resolves
|
|
102
|
+
* to an empty list — nothing is delivered (the caller logs it).
|
|
103
|
+
*
|
|
104
|
+
* The NOT-READY checklist is actionable, so it uses the owner DM when available
|
|
105
|
+
* and falls back to General otherwise (owner first):
|
|
106
|
+
*
|
|
107
|
+
* ready → hasOwnerTarget ? ['owner'] : [] (private-only, never 'general')
|
|
108
|
+
* not-ready → ['owner', 'general'] filtered to the available surfaces (owner first)
|
|
109
|
+
*/
|
|
110
|
+
export declare function resolveStartupTargets(isReady: boolean, hasOwnerTarget: boolean, hasGeneralTarget: boolean): StartupTarget[];
|
|
111
|
+
/** Injected translate — `(code, opts) => string`, so composition is testable without the i18n runtime. */
|
|
112
|
+
export type StartupStatusTranslate = (code: string, opts?: Record<string, string>) => string;
|
|
113
|
+
/**
|
|
114
|
+
* @description Compose the full status message. Ready ⇒ the short ready line.
|
|
115
|
+
* Not ready ⇒ a header followed by the unmet items renumbered 1..N (the
|
|
116
|
+
* `grant_admin` line interpolates the missing-rights list).
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildStartupStatusText(report: ReadinessReport, translate: StartupStatusTranslate): string;
|
|
119
|
+
//# sourceMappingURL=startupReadiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startupReadiness.d.ts","sourceRoot":"","sources":["../../src/utils/startupReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,eAAe,GACf,eAAe,GACf,gBAAgB,CAAC;AAErB,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,WAAW,EAAE,CAOhF;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAe3E;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAEV;AAED,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,EACvB,gBAAgB,EAAE,OAAO,GACxB,aAAa,EAAE,CAQjB;AAED,0GAA0G;AAC1G,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,sBAAsB,GAChC,MAAM,CAaR"}
|