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,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decisions behind SWITCHING A TOPIC TO ANOTHER CLAUDE ACCOUNT when its own hits a usage
|
|
4
|
+
* limit (`utils/claudeProfiles.ts`, `utils/claudeUsage.ts`): which profiles may take the work over, ranked by
|
|
5
|
+
* headroom, and until when the exhausted one is marked limited. This ranking is what the fallback chain
|
|
6
|
+
* (`utils/fallbackChain.ts`) falls back to when the operator configured no chain: the within-Claude
|
|
7
|
+
* account→account switch as it existed before the chain. The auto / offer decision, the notice's buttons and
|
|
8
|
+
* the auto-switch toggle (`/account`, `/fallback`; OFF by default — the operator opts in, because moving work
|
|
9
|
+
* between subscriptions is an account-policy decision) live in the chain module.
|
|
10
|
+
*
|
|
11
|
+
* No I/O, no `Date.now()`: the caller passes the clock and the profile views, so every rule is unit-tested.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.resolveClaudeAutoSwitchOnLimitEnabled = void 0;
|
|
15
|
+
exports.pickClaudeLimitSwitchCandidates = pickClaudeLimitSwitchCandidates;
|
|
16
|
+
exports.resolveClaudeLimitedUntil = resolveClaudeLimitedUntil;
|
|
17
|
+
const claudeUsage_1 = require("./claudeUsage");
|
|
18
|
+
/** The toggle's resolver (OFF when unset) lives beside `/auto_continue_limits`'s, where `state.ts` reads it. */
|
|
19
|
+
var autoContinueOnLimit_1 = require("./autoContinueOnLimit");
|
|
20
|
+
Object.defineProperty(exports, "resolveClaudeAutoSwitchOnLimitEnabled", { enumerable: true, get: function () { return autoContinueOnLimit_1.resolveClaudeAutoSwitchOnLimitEnabled; } });
|
|
21
|
+
/**
|
|
22
|
+
* @description The profiles that may take a topic's work over, best first: signed in, not marked limited, with
|
|
23
|
+
* KNOWN and fresh usage that leaves headroom on the windows `model` drains, and not the profile that just hit
|
|
24
|
+
* the limit. A profile whose usage is unknown or stale is left out on purpose — the switch is sold as "this
|
|
25
|
+
* one has room", and a guess could land the topic in a second limit.
|
|
26
|
+
*/
|
|
27
|
+
function pickClaudeLimitSwitchCandidates(input) {
|
|
28
|
+
const report = (0, claudeUsage_1.buildClaudeProfilesReport)(input.profiles, input.model, input.nowMs);
|
|
29
|
+
return report.profiles
|
|
30
|
+
.filter((entry) => entry.name !== input.currentName)
|
|
31
|
+
.filter((entry) => entry.isEligible && entry.loggedIn === true && !entry.isUsageStale)
|
|
32
|
+
.filter((entry) => entry.headroomPercent !== null && entry.headroomPercent > 0)
|
|
33
|
+
.sort((a, b) => (b.headroomPercent ?? 0) - (a.headroomPercent ?? 0))
|
|
34
|
+
.map((entry) => entry.name);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Until when the profile that hit the limit is marked limited, so the ranking skips it before the
|
|
38
|
+
* window resets: the instant the error named, else the profile's own session-window reset when that lies ahead,
|
|
39
|
+
* else `fallbackMs` from now (the retry's blind delay). A mark already further in the future is kept.
|
|
40
|
+
*/
|
|
41
|
+
function resolveClaudeLimitedUntil(input) {
|
|
42
|
+
const sessionReset = (0, claudeUsage_1.getClaudeUsageBucket)(input.usage, 'session')?.resetsAt ?? null;
|
|
43
|
+
const sessionResetMs = sessionReset === null ? Number.NaN : Date.parse(sessionReset);
|
|
44
|
+
let untilMs = input.resetAtMs !== undefined && input.resetAtMs > input.nowMs
|
|
45
|
+
? input.resetAtMs
|
|
46
|
+
: Number.isFinite(sessionResetMs) && sessionResetMs > input.nowMs
|
|
47
|
+
? sessionResetMs
|
|
48
|
+
: input.nowMs + input.fallbackMs;
|
|
49
|
+
const existingMs = input.existingLimitedUntil === null ? Number.NaN : Date.parse(input.existingLimitedUntil);
|
|
50
|
+
if (Number.isFinite(existingMs) && existingMs > untilMs)
|
|
51
|
+
untilMs = existingMs;
|
|
52
|
+
return new Date(untilMs).toISOString();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=claudeLimitSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLimitSwitch.js","sourceRoot":"","sources":["../../src/utils/claudeLimitSwitch.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAaH,0EAcC;AAOD,8DAiBC;AAjDD,+CAAuI;AAEvI,gHAAgH;AAChH,6DAA8E;AAArE,4IAAA,qCAAqC,OAAA;AAE9C;;;;;GAKG;AACH,SAAgB,+BAA+B,CAAC,KAM/C;IACC,MAAM,MAAM,GAAG,IAAA,uCAAyB,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,QAAQ;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC;SACnD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;SACrF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;SAC9E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,KAMzC;IACC,MAAM,YAAY,GAAG,IAAA,kCAAoB,EAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IACpF,MAAM,cAAc,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrF,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;QAC1E,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,KAAK,CAAC,KAAK;YAC/D,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7G,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,OAAO;QAAE,OAAO,GAAG,UAAU,CAAC;IAC9E,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision for the Claude per-thread liveness loop: given the
|
|
3
|
+
* session's current busy state, whether a rolling status frame is on screen,
|
|
4
|
+
* whether real output is actively streaming, and whether this tick crossed a
|
|
5
|
+
* busy→idle edge, decide what the loop should do with the status frame.
|
|
6
|
+
*
|
|
7
|
+
* Why a separate machine (not folded into the status coalescer): the live bug
|
|
8
|
+
* (#11) is that a busy Claude session can show NOTHING in Telegram — the frame
|
|
9
|
+
* is emitted only opportunistically when a spinner line happens to be scraped,
|
|
10
|
+
* and `handleAgentOutput` DELETES it on every real output chunk. So while the
|
|
11
|
+
* agent keeps working after some output (or thinks quietly during the poll
|
|
12
|
+
* backoff) the topic looks idle/hung. The fix drives the frame off the cheap,
|
|
13
|
+
* reliable `checkIsBusy` footer signal instead of the scrape, and this pure
|
|
14
|
+
* function is the single owner of the create/tick/delete decision so the loop
|
|
15
|
+
* and `handleAgentOutput` can't thrash (delete→instant-recreate flicker / a
|
|
16
|
+
* 429 storm of editMessageText).
|
|
17
|
+
*
|
|
18
|
+
* Extracted from `bot.ts` so the rule is unit-testable without the
|
|
19
|
+
* Telegraf / tmux machinery (same pattern as `statusFlushDecision.ts`).
|
|
20
|
+
*
|
|
21
|
+
* @name ClaudeLivenessAction
|
|
22
|
+
*
|
|
23
|
+
* (S1/S2 — working-status un-freeze + pane-static idle removal, plan
|
|
24
|
+
* `2026-06-29-claude-working-status-liveness-and-idle-removal.md`: this module
|
|
25
|
+
* also owns {@link buildClaudeLivenessFrameText} — the frame text carries a live
|
|
26
|
+
* elapsed `m:ss` so a glyph-only tick is no longer the ONLY change the dedup
|
|
27
|
+
* strips — and {@link checkShouldForceIdleRemoval} — the 30s pane-static net.)
|
|
28
|
+
* @description
|
|
29
|
+
* - `create` — busy, no frame on screen, output not streaming: send a fresh
|
|
30
|
+
* activity frame to the bottom of the topic (THE bug — recreate after an
|
|
31
|
+
* output chunk deleted it while work continues).
|
|
32
|
+
* - `tick` — busy, frame already present, output not streaming: re-edit it
|
|
33
|
+
* so it reads as alive during a quiet thinking stretch / poll backoff.
|
|
34
|
+
* - `delete` — the session went idle (busy→idle edge or simply not busy) and a
|
|
35
|
+
* frame is still on screen: remove it (idle-only removal).
|
|
36
|
+
* - `noop` — nothing to do: output is actively streaming (let it own the
|
|
37
|
+
* message — don't fight it), or the session is idle with no frame.
|
|
38
|
+
*/
|
|
39
|
+
export type ClaudeLivenessAction = 'create' | 'tick' | 'delete' | 'noop';
|
|
40
|
+
export interface ClaudeLivenessActionInput {
|
|
41
|
+
/** Is the Claude session mid-turn right now (`adapter.checkIsBusy`)? */
|
|
42
|
+
isBusy: boolean;
|
|
43
|
+
/** Is a rolling status frame currently on screen for this thread? */
|
|
44
|
+
hasStatusFrame: boolean;
|
|
45
|
+
/** Is real agent output actively streaming (queued / debouncing / sending)? */
|
|
46
|
+
isOutputStreaming: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Did this tick observe a busy→idle edge? Folds into the same removal as
|
|
49
|
+
* `!isBusy`; kept explicit so a caller that tracks the edge (and tests) can
|
|
50
|
+
* assert the transition removes the frame even if a later poll flips busy
|
|
51
|
+
* back on.
|
|
52
|
+
*/
|
|
53
|
+
idleTransition: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Idle-removal latch (S2): a previous tick force-removed the frame because
|
|
56
|
+
* the scraped pane went static for ≥ the idle threshold, so the agent is
|
|
57
|
+
* treated as idle until the next prompt re-arms activity. While latched the
|
|
58
|
+
* loop must NEVER `create`/`tick` a fresh working frame (it would resurrect
|
|
59
|
+
* the very status the 30s net just removed); a stray frame is cleaned up.
|
|
60
|
+
* Cleared on a new prompt / the next fresh liveness arm.
|
|
61
|
+
*/
|
|
62
|
+
isSuppressed: boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @description Decide what the Claude liveness loop should do this tick.
|
|
66
|
+
*
|
|
67
|
+
* Priority order matters:
|
|
68
|
+
* 1. Streaming output wins — never edit/delete the frame while output owns the
|
|
69
|
+
* message (anti-thrash with `handleAgentOutput`'s delete-on-output).
|
|
70
|
+
* 2. Idle (edge or steady) with a frame still up → `delete` (idle-only removal;
|
|
71
|
+
* a false-idle would reintroduce the gap, a false-busy a stuck spinner, so
|
|
72
|
+
* the caller anchors `isBusy` to the footer signal that drops on idle).
|
|
73
|
+
* 3. Busy without a frame → `create` (the bug).
|
|
74
|
+
* 4. Busy with a frame → `tick` (keep it visibly alive).
|
|
75
|
+
* 5. Otherwise (idle, no frame) → `noop`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getClaudeLivenessAction(input: ClaudeLivenessActionInput): ClaudeLivenessAction;
|
|
78
|
+
/**
|
|
79
|
+
* @description Whether the liveness loop may STOP after this tick. Kept separate
|
|
80
|
+
* from the create/tick/delete action because the stop decision must ALSO weigh
|
|
81
|
+
* the status COALESCER: `sendStatusFrame` stores `statusMessageId` only AFTER its
|
|
82
|
+
* network await, so a frame create can still be in flight on a tick that reads
|
|
83
|
+
* `hasStatusFrame === false`. Stopping then strands the just-sent frame with no
|
|
84
|
+
* loop left to delete it on idle — an orphan that lingers until the next message
|
|
85
|
+
* (live 2026-06-29: a hung "☁️ thinking …" whose final frame landed exactly as
|
|
86
|
+
* the agent went idle, so the idle tick saw no frame, stopped, and the send then
|
|
87
|
+
* resurrected one with nothing watching it).
|
|
88
|
+
*
|
|
89
|
+
* Stop ONLY when idle, no frame tracked, AND the coalescer is fully drained
|
|
90
|
+
* (nothing in flight, queued, or deferred behind a 429 cooldown). While any of
|
|
91
|
+
* those hold, keep ticking: the pending send lands, the next idle tick deletes
|
|
92
|
+
* the frame, and the loop then stops cleanly.
|
|
93
|
+
*
|
|
94
|
+
* S2 busy-onset arming grace: when the loop is armed by a freshly-forwarded
|
|
95
|
+
* prompt (not by a scrape emit), Claude has not flipped its footer busy signal
|
|
96
|
+
* yet, so the first tick reads idle. Without the grace the loop would self-stop
|
|
97
|
+
* immediately (idle, no frame, nothing pending) and never show a working frame
|
|
98
|
+
* for a long quiet think. While `withinArmingGrace`, NEVER stop — keep ticking
|
|
99
|
+
* until Claude goes busy (normal flow takes over) or the grace expires (then the
|
|
100
|
+
* idle stop applies as usual).
|
|
101
|
+
*/
|
|
102
|
+
export declare function getClaudeLivenessShouldStop(input: {
|
|
103
|
+
isBusy: boolean;
|
|
104
|
+
hasStatusFrame: boolean;
|
|
105
|
+
statusSendPending: boolean;
|
|
106
|
+
withinArmingGrace: boolean;
|
|
107
|
+
}): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* @description Resolve what `sendStatusFrame` must do with a status message it
|
|
110
|
+
* just CREATED (a brand-new Telegram message id, from the no-existing-frame
|
|
111
|
+
* branch), once the create's `await` resolves.
|
|
112
|
+
*
|
|
113
|
+
* The bug this guards (#11 follow-up — orphaned/duplicate spinner frames): the
|
|
114
|
+
* status-frame lifecycle mutates `statusMessageId` across `await` boundaries
|
|
115
|
+
* from THREE concurrent paths — the liveness tick (`create`/`tick`), the scraped
|
|
116
|
+
* status coalescer, and `handleAgentOutput`'s delete-on-output. `sendStatusFrame`
|
|
117
|
+
* reads `statusMessageId` at entry but only writes the new id back AFTER its
|
|
118
|
+
* network `await`. If a `deleteStatusMessage` runs during that window it sees a
|
|
119
|
+
* still-`null` id (or a stale one), deletes nothing of the in-flight message, and
|
|
120
|
+
* the create then resurrects `statusMessageId` pointing at a message nothing will
|
|
121
|
+
* ever remove → an orphan left on screen after idle, and a second `create` (the
|
|
122
|
+
* next glyph tick) spawning a SEPARATE message instead of editing the one frame.
|
|
123
|
+
*
|
|
124
|
+
* Fix: a monotonic per-thread `generation`, bumped on every `deleteStatusMessage`.
|
|
125
|
+
* `sendStatusFrame` captures the generation before creating, and feeds it here
|
|
126
|
+
* with the generation observed after the `await`:
|
|
127
|
+
* - unchanged → `store` : safe to record the new id as the single tracked frame.
|
|
128
|
+
* - changed → `discard` : a delete (idle / output-supersede) landed mid-create;
|
|
129
|
+
* the new message is already orphaned — delete it, DON'T store its id.
|
|
130
|
+
*
|
|
131
|
+
* Pure + tiny so the invariant ("delete during an in-flight create wins, no
|
|
132
|
+
* orphan, single tracked id") is unit-testable without the Telegraf/tmux stack.
|
|
133
|
+
*/
|
|
134
|
+
export type StatusFrameStoreDecision = 'store' | 'discard';
|
|
135
|
+
export declare function getStatusFrameStoreDecision(generationAtCreateStart: number, generationNow: number): StatusFrameStoreDecision;
|
|
136
|
+
/**
|
|
137
|
+
* @description Decide whether the liveness loop should RE-RENDER+SEND the
|
|
138
|
+
* working-status frame on this tick (S3 — cooldown-scaled throttle).
|
|
139
|
+
*
|
|
140
|
+
* Mirrors the relay output debounce ({@link ./outputFlushTiming.ts}): the 1s
|
|
141
|
+
* idle-CHECK tick must not turn into a per-second `editMessageText`, so a `tick`
|
|
142
|
+
* (frame already on screen) only re-sends after the throttle window. The window
|
|
143
|
+
* is the LONGER of the base refresh floor and the live remaining 429 cooldown —
|
|
144
|
+
* so while the chat is throttling, the status frame coalesces into one larger,
|
|
145
|
+
* later edit instead of piling more requests onto the storm (the status frame was
|
|
146
|
+
* ~half the 429-storm traffic, live 2026-06-29). A `create` (no frame yet) always
|
|
147
|
+
* sends so the indicator appears immediately, regardless of cooldown.
|
|
148
|
+
*
|
|
149
|
+
* Pure so the cadence rule is unit-testable without the Telegraf/tmux stack.
|
|
150
|
+
*/
|
|
151
|
+
export declare function checkShouldSendLivenessFrame(input: {
|
|
152
|
+
/** Is this a `create` (no frame on screen yet)? Then always send. */
|
|
153
|
+
isCreate: boolean;
|
|
154
|
+
/** Ms since the loop last sent the frame. */
|
|
155
|
+
msSinceLastSent: number;
|
|
156
|
+
/** Base refresh floor (`claudeWorkingStatusRefreshMs`). */
|
|
157
|
+
refreshMs: number;
|
|
158
|
+
/** Live remaining 429 cooldown for the chat, ms (0 when not limited). */
|
|
159
|
+
remainingCooldownMs: number;
|
|
160
|
+
}): boolean;
|
|
161
|
+
/**
|
|
162
|
+
* @description Build the Claude working-status frame text (S1 un-freeze).
|
|
163
|
+
*
|
|
164
|
+
* Root cause of the freeze: the loop rotated a leading spinner glyph each tick
|
|
165
|
+
* to look alive, but `getStatusFlushAction` STRIPS that lead glyph before its
|
|
166
|
+
* dedup compare — so when the scraped activity line had no ticking tail (a
|
|
167
|
+
* generic tool / "working…" indicator), the only thing changing was the part
|
|
168
|
+
* the dedup removed → every tick `skip`ped → the frame sat static for minutes,
|
|
169
|
+
* indistinguishable from a hung agent.
|
|
170
|
+
*
|
|
171
|
+
* Fix: append a live elapsed `m:ss` tail (reusing the shared {@link formatElapsed}
|
|
172
|
+
* the sub-agent status uses) anchored at `workingSince`. The elapsed advances
|
|
173
|
+
* every second and is NOT stripped by `stripLeadingSpinnerGlyph`, so a re-render
|
|
174
|
+
* a few seconds later differs after the glyph strip → the coalescer `send`s it →
|
|
175
|
+
* the frame visibly ticks. Prefers the scraped activity word (e.g. "Clauding…",
|
|
176
|
+
* lead glyph swapped for our rotating one) over `fallbackText` (a neutral
|
|
177
|
+
* localized "working…"). `workingSince === null` ⇒ no tail (defensive; the loop
|
|
178
|
+
* always sets it on a fresh turn).
|
|
179
|
+
*/
|
|
180
|
+
export declare function buildClaudeLivenessFrameText(input: {
|
|
181
|
+
/** Rotating heartbeat glyph for this tick (from `CLAUDE_LIVENESS_GLYPHS`). */
|
|
182
|
+
glyph: string;
|
|
183
|
+
/** Latest scraped activity line, or null when none has been seen this turn. */
|
|
184
|
+
activityText: string | null;
|
|
185
|
+
/** Already-localized neutral fallback (i18n `agent.workingIndicator`). */
|
|
186
|
+
fallbackText: string;
|
|
187
|
+
/** Epoch ms the current busy turn started, or null when not tracking. */
|
|
188
|
+
workingSince: number | null;
|
|
189
|
+
/** Now, epoch ms — the elapsed base for `m:ss`. */
|
|
190
|
+
nowMs: number;
|
|
191
|
+
}): string;
|
|
192
|
+
/**
|
|
193
|
+
* @description S2 hard anti-hang net: should the liveness loop FORCE-remove the
|
|
194
|
+
* working-status frame because the scraped TUI pane has gone static for too long?
|
|
195
|
+
*
|
|
196
|
+
* The frame is normally removed on the busy→idle edge (`getClaudeLivenessAction`
|
|
197
|
+
* `delete`), but that anchors on Claude's footer busy signal, which can wrongly
|
|
198
|
+
* stay "busy" after a turn ends — leaving a working status hanging for minutes
|
|
199
|
+
* (live 2026-06-29). A genuinely working agent keeps the pane changing every
|
|
200
|
+
* second (animated spinner + the TUI's own elapsed timer), so a pane that has
|
|
201
|
+
* NOT changed for `idlePaneThresholdMs` is idle regardless of the footer: remove
|
|
202
|
+
* the frame and stop the loop. `null` age (no live session) never triggers it.
|
|
203
|
+
*/
|
|
204
|
+
export declare function checkShouldForceIdleRemoval(input: {
|
|
205
|
+
msSincePaneChange: number | null;
|
|
206
|
+
idlePaneThresholdMs: number;
|
|
207
|
+
}): boolean;
|
|
208
|
+
//# sourceMappingURL=claudeLivenessAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLivenessAction.d.ts","sourceRoot":"","sources":["../../src/utils/claudeLivenessAction.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,oBAAoB,CAU9F;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAGV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3D,wBAAgB,2BAA2B,CACzC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,MAAM,GACpB,wBAAwB,CAE1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAGV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAUT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAGV"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getClaudeLivenessAction = getClaudeLivenessAction;
|
|
4
|
+
exports.getClaudeLivenessShouldStop = getClaudeLivenessShouldStop;
|
|
5
|
+
exports.getStatusFrameStoreDecision = getStatusFrameStoreDecision;
|
|
6
|
+
exports.checkShouldSendLivenessFrame = checkShouldSendLivenessFrame;
|
|
7
|
+
exports.buildClaudeLivenessFrameText = buildClaudeLivenessFrameText;
|
|
8
|
+
exports.checkShouldForceIdleRemoval = checkShouldForceIdleRemoval;
|
|
9
|
+
const claudeScrapeShapes_1 = require("./claudeScrapeShapes");
|
|
10
|
+
const subagentStatusRender_1 = require("./subagentStatusRender");
|
|
11
|
+
/**
|
|
12
|
+
* @description Decide what the Claude liveness loop should do this tick.
|
|
13
|
+
*
|
|
14
|
+
* Priority order matters:
|
|
15
|
+
* 1. Streaming output wins — never edit/delete the frame while output owns the
|
|
16
|
+
* message (anti-thrash with `handleAgentOutput`'s delete-on-output).
|
|
17
|
+
* 2. Idle (edge or steady) with a frame still up → `delete` (idle-only removal;
|
|
18
|
+
* a false-idle would reintroduce the gap, a false-busy a stuck spinner, so
|
|
19
|
+
* the caller anchors `isBusy` to the footer signal that drops on idle).
|
|
20
|
+
* 3. Busy without a frame → `create` (the bug).
|
|
21
|
+
* 4. Busy with a frame → `tick` (keep it visibly alive).
|
|
22
|
+
* 5. Otherwise (idle, no frame) → `noop`.
|
|
23
|
+
*/
|
|
24
|
+
function getClaudeLivenessAction(input) {
|
|
25
|
+
if (input.isOutputStreaming)
|
|
26
|
+
return 'noop';
|
|
27
|
+
if (!input.isBusy || input.idleTransition) {
|
|
28
|
+
return input.hasStatusFrame ? 'delete' : 'noop';
|
|
29
|
+
}
|
|
30
|
+
// Idle-removal latch (S2): the pane went static ≥ threshold this turn, so the
|
|
31
|
+
// agent is treated as idle until the next prompt. Never create/tick a fresh
|
|
32
|
+
// working frame while latched; clean up a stray one if it somehow exists.
|
|
33
|
+
if (input.isSuppressed)
|
|
34
|
+
return input.hasStatusFrame ? 'delete' : 'noop';
|
|
35
|
+
return input.hasStatusFrame ? 'tick' : 'create';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @description Whether the liveness loop may STOP after this tick. Kept separate
|
|
39
|
+
* from the create/tick/delete action because the stop decision must ALSO weigh
|
|
40
|
+
* the status COALESCER: `sendStatusFrame` stores `statusMessageId` only AFTER its
|
|
41
|
+
* network await, so a frame create can still be in flight on a tick that reads
|
|
42
|
+
* `hasStatusFrame === false`. Stopping then strands the just-sent frame with no
|
|
43
|
+
* loop left to delete it on idle — an orphan that lingers until the next message
|
|
44
|
+
* (live 2026-06-29: a hung "☁️ thinking …" whose final frame landed exactly as
|
|
45
|
+
* the agent went idle, so the idle tick saw no frame, stopped, and the send then
|
|
46
|
+
* resurrected one with nothing watching it).
|
|
47
|
+
*
|
|
48
|
+
* Stop ONLY when idle, no frame tracked, AND the coalescer is fully drained
|
|
49
|
+
* (nothing in flight, queued, or deferred behind a 429 cooldown). While any of
|
|
50
|
+
* those hold, keep ticking: the pending send lands, the next idle tick deletes
|
|
51
|
+
* the frame, and the loop then stops cleanly.
|
|
52
|
+
*
|
|
53
|
+
* S2 busy-onset arming grace: when the loop is armed by a freshly-forwarded
|
|
54
|
+
* prompt (not by a scrape emit), Claude has not flipped its footer busy signal
|
|
55
|
+
* yet, so the first tick reads idle. Without the grace the loop would self-stop
|
|
56
|
+
* immediately (idle, no frame, nothing pending) and never show a working frame
|
|
57
|
+
* for a long quiet think. While `withinArmingGrace`, NEVER stop — keep ticking
|
|
58
|
+
* until Claude goes busy (normal flow takes over) or the grace expires (then the
|
|
59
|
+
* idle stop applies as usual).
|
|
60
|
+
*/
|
|
61
|
+
function getClaudeLivenessShouldStop(input) {
|
|
62
|
+
if (input.withinArmingGrace)
|
|
63
|
+
return false;
|
|
64
|
+
return !input.isBusy && !input.hasStatusFrame && !input.statusSendPending;
|
|
65
|
+
}
|
|
66
|
+
function getStatusFrameStoreDecision(generationAtCreateStart, generationNow) {
|
|
67
|
+
return generationAtCreateStart === generationNow ? 'store' : 'discard';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @description Decide whether the liveness loop should RE-RENDER+SEND the
|
|
71
|
+
* working-status frame on this tick (S3 — cooldown-scaled throttle).
|
|
72
|
+
*
|
|
73
|
+
* Mirrors the relay output debounce ({@link ./outputFlushTiming.ts}): the 1s
|
|
74
|
+
* idle-CHECK tick must not turn into a per-second `editMessageText`, so a `tick`
|
|
75
|
+
* (frame already on screen) only re-sends after the throttle window. The window
|
|
76
|
+
* is the LONGER of the base refresh floor and the live remaining 429 cooldown —
|
|
77
|
+
* so while the chat is throttling, the status frame coalesces into one larger,
|
|
78
|
+
* later edit instead of piling more requests onto the storm (the status frame was
|
|
79
|
+
* ~half the 429-storm traffic, live 2026-06-29). A `create` (no frame yet) always
|
|
80
|
+
* sends so the indicator appears immediately, regardless of cooldown.
|
|
81
|
+
*
|
|
82
|
+
* Pure so the cadence rule is unit-testable without the Telegraf/tmux stack.
|
|
83
|
+
*/
|
|
84
|
+
function checkShouldSendLivenessFrame(input) {
|
|
85
|
+
if (input.isCreate)
|
|
86
|
+
return true;
|
|
87
|
+
return input.msSinceLastSent >= Math.max(input.refreshMs, input.remainingCooldownMs);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @description Build the Claude working-status frame text (S1 un-freeze).
|
|
91
|
+
*
|
|
92
|
+
* Root cause of the freeze: the loop rotated a leading spinner glyph each tick
|
|
93
|
+
* to look alive, but `getStatusFlushAction` STRIPS that lead glyph before its
|
|
94
|
+
* dedup compare — so when the scraped activity line had no ticking tail (a
|
|
95
|
+
* generic tool / "working…" indicator), the only thing changing was the part
|
|
96
|
+
* the dedup removed → every tick `skip`ped → the frame sat static for minutes,
|
|
97
|
+
* indistinguishable from a hung agent.
|
|
98
|
+
*
|
|
99
|
+
* Fix: append a live elapsed `m:ss` tail (reusing the shared {@link formatElapsed}
|
|
100
|
+
* the sub-agent status uses) anchored at `workingSince`. The elapsed advances
|
|
101
|
+
* every second and is NOT stripped by `stripLeadingSpinnerGlyph`, so a re-render
|
|
102
|
+
* a few seconds later differs after the glyph strip → the coalescer `send`s it →
|
|
103
|
+
* the frame visibly ticks. Prefers the scraped activity word (e.g. "Clauding…",
|
|
104
|
+
* lead glyph swapped for our rotating one) over `fallbackText` (a neutral
|
|
105
|
+
* localized "working…"). `workingSince === null` ⇒ no tail (defensive; the loop
|
|
106
|
+
* always sets it on a fresh turn).
|
|
107
|
+
*/
|
|
108
|
+
function buildClaudeLivenessFrameText(input) {
|
|
109
|
+
const elapsedSuffix = input.workingSince === null ? '' : ` · ${(0, subagentStatusRender_1.formatElapsed)(input.nowMs - input.workingSince)}`;
|
|
110
|
+
const activity = input.activityText?.trim();
|
|
111
|
+
if (activity) {
|
|
112
|
+
// Swap the scrape's own leading spinner glyph for our rotating one so the
|
|
113
|
+
// heartbeat shows while preserving the activity word + any scraped tail.
|
|
114
|
+
return `${input.glyph} ${(0, claudeScrapeShapes_1.stripLeadingSpinnerGlyph)(activity)}${elapsedSuffix}`;
|
|
115
|
+
}
|
|
116
|
+
return `${input.fallbackText}${elapsedSuffix}`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @description S2 hard anti-hang net: should the liveness loop FORCE-remove the
|
|
120
|
+
* working-status frame because the scraped TUI pane has gone static for too long?
|
|
121
|
+
*
|
|
122
|
+
* The frame is normally removed on the busy→idle edge (`getClaudeLivenessAction`
|
|
123
|
+
* `delete`), but that anchors on Claude's footer busy signal, which can wrongly
|
|
124
|
+
* stay "busy" after a turn ends — leaving a working status hanging for minutes
|
|
125
|
+
* (live 2026-06-29). A genuinely working agent keeps the pane changing every
|
|
126
|
+
* second (animated spinner + the TUI's own elapsed timer), so a pane that has
|
|
127
|
+
* NOT changed for `idlePaneThresholdMs` is idle regardless of the footer: remove
|
|
128
|
+
* the frame and stop the loop. `null` age (no live session) never triggers it.
|
|
129
|
+
*/
|
|
130
|
+
function checkShouldForceIdleRemoval(input) {
|
|
131
|
+
if (input.msSincePaneChange === null)
|
|
132
|
+
return false;
|
|
133
|
+
return input.msSincePaneChange >= input.idlePaneThresholdMs;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=claudeLivenessAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLivenessAction.js","sourceRoot":"","sources":["../../src/utils/claudeLivenessAction.ts"],"names":[],"mappings":";;AAiFA,0DAUC;AA0BD,kEAQC;AA8BD,kEAKC;AAiBD,oEAYC;AAqBD,oEAqBC;AAcD,kEAMC;AA3PD,6DAAgE;AAChE,iEAAuD;AAmEvD;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CAAC,KAAgC;IACtE,IAAI,KAAK,CAAC,iBAAiB;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,2BAA2B,CAAC,KAK3C;IACC,IAAI,KAAK,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC5E,CAAC;AA8BD,SAAgB,2BAA2B,CACzC,uBAA+B,EAC/B,aAAqB;IAErB,OAAO,uBAAuB,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,4BAA4B,CAAC,KAS5C;IACC,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,4BAA4B,CAAC,KAW5C;IACC,MAAM,aAAa,GACjB,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAA,oCAAa,EAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC7F,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,0EAA0E;QAC1E,yEAAyE;QACzE,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,IAAA,6CAAwB,EAAC,QAAQ,CAAC,GAAG,aAAa,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,2BAA2B,CAAC,KAG3C;IACC,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,mBAAmB,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description The wire shapes + the decision behind healing a `claude` session
|
|
3
|
+
* whose bot-injected MCP server (`telegramBot`) has latched `failed`.
|
|
4
|
+
*
|
|
5
|
+
* WHY this exists: a json-stream session is an EXTERNAL process, so it survives
|
|
6
|
+
* every bot restart — but the MCP client inside it does not retry a server it
|
|
7
|
+
* once failed to reach. A session that was alive across a restart therefore kept
|
|
8
|
+
* reporting `{name:'telegramBot', status:'failed'}` for the rest of its life and
|
|
9
|
+
* lost `schedule_*` / `compact_conversation` / `send_file_to_user` /
|
|
10
|
+
* `send_messages_to_user` with nothing short of replacing the session to bring
|
|
11
|
+
* them back. The CLI answers `mcp_status` / `mcp_reconnect` on the SAME stdio
|
|
12
|
+
* control channel the adapter already uses for permissions, and a reconnect
|
|
13
|
+
* measurably moves the server `failed` → `connected`.
|
|
14
|
+
*
|
|
15
|
+
* The request/response format is reverse-engineered (measured against a live
|
|
16
|
+
* `claude` process, not documented anywhere), so it lives in exactly ONE tested
|
|
17
|
+
* place — the adapter only mints ids, writes the frames, and reads the verdict.
|
|
18
|
+
* Pure: no IO, no timers, no adapter imports.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* @description How long to wait for ONE control round-trip before treating the
|
|
22
|
+
* server status as unknown. The channel is loopback stdio answered by a process
|
|
23
|
+
* that is already running, so a healthy reply lands in milliseconds — this is a
|
|
24
|
+
* generous upper bound that keeps a silent CLI from hanging the caller, not a
|
|
25
|
+
* tuning knob.
|
|
26
|
+
*/
|
|
27
|
+
export declare const mcpControlRequestTimeoutMs = 15000;
|
|
28
|
+
/** `mcp_status` — ask the CLI for every MCP server it holds and its state. */
|
|
29
|
+
export interface McpStatusControlRequest {
|
|
30
|
+
type: 'control_request';
|
|
31
|
+
request_id: string;
|
|
32
|
+
request: {
|
|
33
|
+
subtype: 'mcp_status';
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** `mcp_reconnect` — make the CLI re-handshake ONE server by name. */
|
|
37
|
+
export interface McpReconnectControlRequest {
|
|
38
|
+
type: 'control_request';
|
|
39
|
+
request_id: string;
|
|
40
|
+
request: {
|
|
41
|
+
subtype: 'mcp_reconnect';
|
|
42
|
+
serverName: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @name McpHealDecision
|
|
47
|
+
* @description What to do about one server's reported status.
|
|
48
|
+
*/
|
|
49
|
+
export type McpHealDecision = 'reconnect' | 'healthy' | 'skip';
|
|
50
|
+
/**
|
|
51
|
+
* @name McpHealOutcome
|
|
52
|
+
* @description What a heal attempt actually achieved — the adapter method's
|
|
53
|
+
* result, so a caller can log only the sessions it really repaired.
|
|
54
|
+
* - `healed` — the server was `failed` and the reconnect answered success.
|
|
55
|
+
* - `healthy` — nothing was wrong, no frame written beyond the status ask.
|
|
56
|
+
* - `skipped` — the status says a reconnect is not the right move
|
|
57
|
+
* ({@link decideMcpHeal}).
|
|
58
|
+
* - `unavailable` — the heal could not be completed: no live session, the CLI
|
|
59
|
+
* never answered (or refused) the status ask, or the reconnect itself was
|
|
60
|
+
* refused. In every case the server is still whatever it was.
|
|
61
|
+
*/
|
|
62
|
+
export type McpHealOutcome = 'healed' | 'healthy' | 'skipped' | 'unavailable';
|
|
63
|
+
/** Build the `mcp_status` control request (`requestId` is echoed back in the
|
|
64
|
+
* response's `request_id`, which is how the reply is matched). */
|
|
65
|
+
export declare function buildMcpStatusControlRequest(requestId: string): McpStatusControlRequest;
|
|
66
|
+
/** Build the `mcp_reconnect` control request for ONE server. `serverName` is
|
|
67
|
+
* camelCase on the wire (unlike the snake_case envelope fields). */
|
|
68
|
+
export declare function buildMcpReconnectControlRequest(requestId: string, serverName: string): McpReconnectControlRequest;
|
|
69
|
+
/**
|
|
70
|
+
* @description Read one server's `status` out of an `mcp_status` response
|
|
71
|
+
* payload (`{mcpServers:[{name, status, …}]}`). Returns `null` when the payload
|
|
72
|
+
* is absent / not the expected shape, when no entry carries that name, or when
|
|
73
|
+
* the entry has no string status — every one of which means "unknown", which
|
|
74
|
+
* {@link decideMcpHeal} deliberately refuses to act on.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getMcpServerStatus(payload: Record<string, unknown> | null, serverName: string): string | null;
|
|
77
|
+
/**
|
|
78
|
+
* @description Decide what a reported MCP server status calls for.
|
|
79
|
+
*
|
|
80
|
+
* - `connected` → `healthy`: the server completed its handshake, so touching it
|
|
81
|
+
* would only risk interrupting live tools.
|
|
82
|
+
* - `failed` → `reconnect`: the exact latched state this whole path exists for —
|
|
83
|
+
* the CLI never retries it on its own, and a reconnect is measurably what
|
|
84
|
+
* brings the tools back.
|
|
85
|
+
* - `needs-auth` → `skip`: a human must authorise that server; reconnecting
|
|
86
|
+
* would fail again immediately and loop.
|
|
87
|
+
* - anything else, INCLUDING `null` → `skip`: an unknown or unreadable status
|
|
88
|
+
* must never be guessed into a live session. A future status name is then
|
|
89
|
+
* inert rather than wrongly acted on.
|
|
90
|
+
*/
|
|
91
|
+
export declare function decideMcpHeal(status: string | null): McpHealDecision;
|
|
92
|
+
//# sourceMappingURL=claudeMcpHeal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeMcpHeal.d.ts","sourceRoot":"","sources":["../../src/utils/claudeMcpHeal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;CACpC;AAED,sEAAsE;AACtE,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,OAAO,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAO9E;mEACmE;AACnE,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,CAEvF;AAED;qEACqE;AACrE,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,0BAA0B,CAEjH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,CAIpE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description The wire shapes + the decision behind healing a `claude` session
|
|
4
|
+
* whose bot-injected MCP server (`telegramBot`) has latched `failed`.
|
|
5
|
+
*
|
|
6
|
+
* WHY this exists: a json-stream session is an EXTERNAL process, so it survives
|
|
7
|
+
* every bot restart — but the MCP client inside it does not retry a server it
|
|
8
|
+
* once failed to reach. A session that was alive across a restart therefore kept
|
|
9
|
+
* reporting `{name:'telegramBot', status:'failed'}` for the rest of its life and
|
|
10
|
+
* lost `schedule_*` / `compact_conversation` / `send_file_to_user` /
|
|
11
|
+
* `send_messages_to_user` with nothing short of replacing the session to bring
|
|
12
|
+
* them back. The CLI answers `mcp_status` / `mcp_reconnect` on the SAME stdio
|
|
13
|
+
* control channel the adapter already uses for permissions, and a reconnect
|
|
14
|
+
* measurably moves the server `failed` → `connected`.
|
|
15
|
+
*
|
|
16
|
+
* The request/response format is reverse-engineered (measured against a live
|
|
17
|
+
* `claude` process, not documented anywhere), so it lives in exactly ONE tested
|
|
18
|
+
* place — the adapter only mints ids, writes the frames, and reads the verdict.
|
|
19
|
+
* Pure: no IO, no timers, no adapter imports.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.mcpControlRequestTimeoutMs = void 0;
|
|
23
|
+
exports.buildMcpStatusControlRequest = buildMcpStatusControlRequest;
|
|
24
|
+
exports.buildMcpReconnectControlRequest = buildMcpReconnectControlRequest;
|
|
25
|
+
exports.getMcpServerStatus = getMcpServerStatus;
|
|
26
|
+
exports.decideMcpHeal = decideMcpHeal;
|
|
27
|
+
const claudeStreamJson_1 = require("./claudeStreamJson");
|
|
28
|
+
/**
|
|
29
|
+
* @description How long to wait for ONE control round-trip before treating the
|
|
30
|
+
* server status as unknown. The channel is loopback stdio answered by a process
|
|
31
|
+
* that is already running, so a healthy reply lands in milliseconds — this is a
|
|
32
|
+
* generous upper bound that keeps a silent CLI from hanging the caller, not a
|
|
33
|
+
* tuning knob.
|
|
34
|
+
*/
|
|
35
|
+
exports.mcpControlRequestTimeoutMs = 15000;
|
|
36
|
+
/** The status of a server that completed its handshake — nothing to do. */
|
|
37
|
+
const mcpStatusConnected = 'connected';
|
|
38
|
+
/** The status of a server whose connection attempt failed and is never retried. */
|
|
39
|
+
const mcpStatusFailed = 'failed';
|
|
40
|
+
/** Build the `mcp_status` control request (`requestId` is echoed back in the
|
|
41
|
+
* response's `request_id`, which is how the reply is matched). */
|
|
42
|
+
function buildMcpStatusControlRequest(requestId) {
|
|
43
|
+
return { type: 'control_request', request_id: requestId, request: { subtype: 'mcp_status' } };
|
|
44
|
+
}
|
|
45
|
+
/** Build the `mcp_reconnect` control request for ONE server. `serverName` is
|
|
46
|
+
* camelCase on the wire (unlike the snake_case envelope fields). */
|
|
47
|
+
function buildMcpReconnectControlRequest(requestId, serverName) {
|
|
48
|
+
return { type: 'control_request', request_id: requestId, request: { subtype: 'mcp_reconnect', serverName } };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Read one server's `status` out of an `mcp_status` response
|
|
52
|
+
* payload (`{mcpServers:[{name, status, …}]}`). Returns `null` when the payload
|
|
53
|
+
* is absent / not the expected shape, when no entry carries that name, or when
|
|
54
|
+
* the entry has no string status — every one of which means "unknown", which
|
|
55
|
+
* {@link decideMcpHeal} deliberately refuses to act on.
|
|
56
|
+
*/
|
|
57
|
+
function getMcpServerStatus(payload, serverName) {
|
|
58
|
+
if (!payload)
|
|
59
|
+
return null;
|
|
60
|
+
const servers = payload.mcpServers;
|
|
61
|
+
if (!Array.isArray(servers))
|
|
62
|
+
return null;
|
|
63
|
+
for (const entry of servers) {
|
|
64
|
+
if (!(0, claudeStreamJson_1.checkIsStreamRecord)(entry) || entry.name !== serverName)
|
|
65
|
+
continue;
|
|
66
|
+
return typeof entry.status === 'string' ? entry.status : null;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @description Decide what a reported MCP server status calls for.
|
|
72
|
+
*
|
|
73
|
+
* - `connected` → `healthy`: the server completed its handshake, so touching it
|
|
74
|
+
* would only risk interrupting live tools.
|
|
75
|
+
* - `failed` → `reconnect`: the exact latched state this whole path exists for —
|
|
76
|
+
* the CLI never retries it on its own, and a reconnect is measurably what
|
|
77
|
+
* brings the tools back.
|
|
78
|
+
* - `needs-auth` → `skip`: a human must authorise that server; reconnecting
|
|
79
|
+
* would fail again immediately and loop.
|
|
80
|
+
* - anything else, INCLUDING `null` → `skip`: an unknown or unreadable status
|
|
81
|
+
* must never be guessed into a live session. A future status name is then
|
|
82
|
+
* inert rather than wrongly acted on.
|
|
83
|
+
*/
|
|
84
|
+
function decideMcpHeal(status) {
|
|
85
|
+
if (status === mcpStatusConnected)
|
|
86
|
+
return 'healthy';
|
|
87
|
+
if (status === mcpStatusFailed)
|
|
88
|
+
return 'reconnect';
|
|
89
|
+
return 'skip';
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=claudeMcpHeal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeMcpHeal.js","sourceRoot":"","sources":["../../src/utils/claudeMcpHeal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAsDH,oEAEC;AAID,0EAEC;AASD,gDASC;AAgBD,sCAIC;AAlGD,yDAAyD;AAEzD;;;;;;GAMG;AACU,QAAA,0BAA0B,GAAG,KAAK,CAAC;AAoChD,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG,WAAW,CAAC;AACvC,mFAAmF;AACnF,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC;mEACmE;AACnE,SAAgB,4BAA4B,CAAC,SAAiB;IAC5D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AAChG,CAAC;AAED;qEACqE;AACrE,SAAgB,+BAA+B,CAAC,SAAiB,EAAE,UAAkB;IACnF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC;AAC/G,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,OAAuC,EAAE,UAAkB;IAC5F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAA,sCAAmB,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QACvE,OAAO,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,aAAa,CAAC,MAAqB;IACjD,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,WAAW,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ClaudeUsageSnapshot } from './claudeUsage';
|
|
2
|
+
/** What the lines read of a profile: its usage snapshot and limit mark (a state record and a usage view both fit). */
|
|
3
|
+
export interface ClaudeProfileUsageSource {
|
|
4
|
+
usage?: ClaudeUsageSnapshot;
|
|
5
|
+
limitedUntil?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @description The profile's usage as display lines: the windows as `used% 🔄 reset` — 5h and weekly always (`—`
|
|
9
|
+
* for one the snapshot lacks), Fable only when the account HAS that window (a corporate seat has none: nothing
|
|
10
|
+
* is written about it) — `(stale)` when the last poll could not refresh, and the limit mark while it holds, the
|
|
11
|
+
* reset instant in `timezone`. The lines carry the locale's own indentation (they hang under a row); empty for a
|
|
12
|
+
* profile never polled and not limited.
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatClaudeProfileUsageLines(source: ClaudeProfileUsageSource | undefined, timezone: string, nowMs: number): string[];
|
|
15
|
+
//# sourceMappingURL=claudeProfileUsageLines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeProfileUsageLines.d.ts","sourceRoot":"","sources":["../../src/utils/claudeProfileUsageLines.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AAEvB,sHAAsH;AACtH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBrI"}
|