charness 0.0.0-stage → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +88 -0
- package/DEVELOPMENT.md +110 -0
- package/LICENSE +21 -0
- package/MIGRATION_1_TO_2.md +24 -0
- package/README.md +1024 -2
- package/dist/accessControl.d.ts +71 -0
- package/dist/accessControl.d.ts.map +1 -0
- package/dist/accessControl.js +108 -0
- package/dist/accessControl.js.map +1 -0
- package/dist/adapters/adapterEventRouting.d.ts +51 -0
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
- package/dist/adapters/adapterEventRouting.js +74 -0
- package/dist/adapters/adapterEventRouting.js.map +1 -0
- package/dist/adapters/adapterNames.d.ts +19 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -0
- package/dist/adapters/adapterNames.js +25 -0
- package/dist/adapters/adapterNames.js.map +1 -0
- package/dist/adapters/claudeCliAdapter.d.ts +1336 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeCliAdapter.js +4204 -0
- package/dist/adapters/claudeCliAdapter.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +548 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.js +1810 -0
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
- package/dist/adapters/claudePlatformFlags.d.ts +35 -0
- package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
- package/dist/adapters/claudePlatformFlags.js +46 -0
- package/dist/adapters/claudePlatformFlags.js.map +1 -0
- package/dist/adapters/createAdapter.d.ts +252 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -0
- package/dist/adapters/createAdapter.js +475 -0
- package/dist/adapters/createAdapter.js.map +1 -0
- package/dist/adapters/openCodeAdapter.d.ts +1446 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
- package/dist/adapters/openCodeAdapter.js +4540 -0
- package/dist/adapters/openCodeAdapter.js.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.js +15 -0
- package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
- package/dist/adapters/terminalAdapter.d.ts +68 -0
- package/dist/adapters/terminalAdapter.d.ts.map +1 -0
- package/dist/adapters/terminalAdapter.js +371 -0
- package/dist/adapters/terminalAdapter.js.map +1 -0
- package/dist/agentLogin/agentLogin.d.ts +31 -0
- package/dist/agentLogin/agentLogin.d.ts.map +1 -0
- package/dist/agentLogin/agentLogin.js +493 -0
- package/dist/agentLogin/agentLogin.js.map +1 -0
- package/dist/agentTrigger.d.ts +28 -0
- package/dist/agentTrigger.d.ts.map +1 -0
- package/dist/agentTrigger.js +53 -0
- package/dist/agentTrigger.js.map +1 -0
- package/dist/apiErrorRetry.d.ts +209 -0
- package/dist/apiErrorRetry.d.ts.map +1 -0
- package/dist/apiErrorRetry.js +351 -0
- package/dist/apiErrorRetry.js.map +1 -0
- package/dist/apiRetryKick.d.ts +148 -0
- package/dist/apiRetryKick.d.ts.map +1 -0
- package/dist/apiRetryKick.js +158 -0
- package/dist/apiRetryKick.js.map +1 -0
- package/dist/bootClassifier.d.ts +46 -0
- package/dist/bootClassifier.d.ts.map +1 -0
- package/dist/bootClassifier.js +43 -0
- package/dist/bootClassifier.js.map +1 -0
- package/dist/bot.d.ts +207 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +10611 -0
- package/dist/bot.js.map +1 -0
- package/dist/botFileStorage.d.ts +60 -0
- package/dist/botFileStorage.d.ts.map +1 -0
- package/dist/botFileStorage.js +205 -0
- package/dist/botFileStorage.js.map +1 -0
- package/dist/cli/applyDnsFix.d.ts +7 -0
- package/dist/cli/applyDnsFix.d.ts.map +1 -0
- package/dist/cli/applyDnsFix.js +46 -0
- package/dist/cli/applyDnsFix.js.map +1 -0
- package/dist/cli/bot.d.ts +27 -0
- package/dist/cli/bot.d.ts.map +1 -0
- package/dist/cli/bot.js +98 -0
- package/dist/cli/bot.js.map +1 -0
- package/dist/cli/botEntry.d.ts +3 -0
- package/dist/cli/botEntry.d.ts.map +1 -0
- package/dist/cli/botEntry.js +11 -0
- package/dist/cli/botEntry.js.map +1 -0
- package/dist/cli/connectorGuards.d.ts +31 -0
- package/dist/cli/connectorGuards.d.ts.map +1 -0
- package/dist/cli/connectorGuards.js +159 -0
- package/dist/cli/connectorGuards.js.map +1 -0
- package/dist/cli/envLoader.d.ts +34 -0
- package/dist/cli/envLoader.d.ts.map +1 -0
- package/dist/cli/envLoader.js +132 -0
- package/dist/cli/envLoader.js.map +1 -0
- package/dist/cli/hot.d.ts +82 -0
- package/dist/cli/hot.d.ts.map +1 -0
- package/dist/cli/hot.js +323 -0
- package/dist/cli/hot.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +130 -0
- package/dist/cli.js.map +1 -0
- package/dist/connectors/jira/adf.d.ts +72 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -0
- package/dist/connectors/jira/adf.js +407 -0
- package/dist/connectors/jira/adf.js.map +1 -0
- package/dist/connectors/jira/agentBinaries.d.ts +14 -0
- package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
- package/dist/connectors/jira/agentBinaries.js +75 -0
- package/dist/connectors/jira/agentBinaries.js.map +1 -0
- package/dist/connectors/jira/answerSink.d.ts +52 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -0
- package/dist/connectors/jira/answerSink.js +220 -0
- package/dist/connectors/jira/answerSink.js.map +1 -0
- package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
- package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentDownload.js +92 -0
- package/dist/connectors/jira/attachmentDownload.js.map +1 -0
- package/dist/connectors/jira/attachmentTool.d.ts +43 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentTool.js +150 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -0
- package/dist/connectors/jira/client.d.ts +490 -0
- package/dist/connectors/jira/client.d.ts.map +1 -0
- package/dist/connectors/jira/client.js +453 -0
- package/dist/connectors/jira/client.js.map +1 -0
- package/dist/connectors/jira/config.d.ts +117 -0
- package/dist/connectors/jira/config.d.ts.map +1 -0
- package/dist/connectors/jira/config.js +350 -0
- package/dist/connectors/jira/config.js.map +1 -0
- package/dist/connectors/jira/configFile.d.ts +10 -0
- package/dist/connectors/jira/configFile.d.ts.map +1 -0
- package/dist/connectors/jira/configFile.js +50 -0
- package/dist/connectors/jira/configFile.js.map +1 -0
- package/dist/connectors/jira/connector.d.ts +68 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -0
- package/dist/connectors/jira/connector.js +257 -0
- package/dist/connectors/jira/connector.js.map +1 -0
- package/dist/connectors/jira/contextLedger.d.ts +59 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
- package/dist/connectors/jira/contextLedger.js +194 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -0
- package/dist/connectors/jira/contextPreamble.d.ts +18 -0
- package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
- package/dist/connectors/jira/contextPreamble.js +31 -0
- package/dist/connectors/jira/contextPreamble.js.map +1 -0
- package/dist/connectors/jira/inbound.d.ts +132 -0
- package/dist/connectors/jira/inbound.d.ts.map +1 -0
- package/dist/connectors/jira/inbound.js +316 -0
- package/dist/connectors/jira/inbound.js.map +1 -0
- package/dist/connectors/jira/issueBlocks.d.ts +51 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
- package/dist/connectors/jira/issueBlocks.js +182 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -0
- package/dist/connectors/jira/issueContext.d.ts +25 -0
- package/dist/connectors/jira/issueContext.d.ts.map +1 -0
- package/dist/connectors/jira/issueContext.js +53 -0
- package/dist/connectors/jira/issueContext.js.map +1 -0
- package/dist/connectors/jira/issueDelta.d.ts +35 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
- package/dist/connectors/jira/issueDelta.js +50 -0
- package/dist/connectors/jira/issueDelta.js.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts +20 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.js +92 -0
- package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
- package/dist/connectors/jira/outbound.d.ts +6 -0
- package/dist/connectors/jira/outbound.d.ts.map +1 -0
- package/dist/connectors/jira/outbound.js +38 -0
- package/dist/connectors/jira/outbound.js.map +1 -0
- package/dist/connectors/jira/prompt.d.ts +37 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -0
- package/dist/connectors/jira/prompt.js +99 -0
- package/dist/connectors/jira/prompt.js.map +1 -0
- package/dist/connectors/jira/promptSpill.d.ts +50 -0
- package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
- package/dist/connectors/jira/promptSpill.js +157 -0
- package/dist/connectors/jira/promptSpill.js.map +1 -0
- package/dist/connectors/jira/promptText.d.ts +7 -0
- package/dist/connectors/jira/promptText.d.ts.map +1 -0
- package/dist/connectors/jira/promptText.js +26 -0
- package/dist/connectors/jira/promptText.js.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts +16 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.js +101 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/jira/trigger.d.ts +50 -0
- package/dist/connectors/jira/trigger.d.ts.map +1 -0
- package/dist/connectors/jira/trigger.js +93 -0
- package/dist/connectors/jira/trigger.js.map +1 -0
- package/dist/connectors/jira/triggerLog.d.ts +51 -0
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
- package/dist/connectors/jira/triggerLog.js +78 -0
- package/dist/connectors/jira/triggerLog.js.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.js +105 -0
- package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
- package/dist/connectors/telegram/answerSink.d.ts +46 -0
- package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
- package/dist/connectors/telegram/answerSink.js +71 -0
- package/dist/connectors/telegram/answerSink.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +31 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js +142 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
- package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/botCore.js +3 -0
- package/dist/connectors/telegram/commands/botCore.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
- package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/compaction.js +868 -0
- package/dist/connectors/telegram/commands/compaction.js.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.js +335 -0
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +95 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.js +841 -0
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
- package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
- package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/reminders.js +624 -0
- package/dist/connectors/telegram/commands/reminders.js.map +1 -0
- package/dist/connectors/telegram/fileIntake.d.ts +166 -0
- package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
- package/dist/connectors/telegram/fileIntake.js +304 -0
- package/dist/connectors/telegram/fileIntake.js.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.js +221 -0
- package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
- package/dist/connectors/telegram/inbound.d.ts +131 -0
- package/dist/connectors/telegram/inbound.d.ts.map +1 -0
- package/dist/connectors/telegram/inbound.js +278 -0
- package/dist/connectors/telegram/inbound.js.map +1 -0
- package/dist/connectors/telegram/languagePicker.d.ts +32 -0
- package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/languagePicker.js +55 -0
- package/dist/connectors/telegram/languagePicker.js.map +1 -0
- package/dist/connectors/telegram/messageSplit.d.ts +62 -0
- package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
- package/dist/connectors/telegram/messageSplit.js +119 -0
- package/dist/connectors/telegram/messageSplit.js.map +1 -0
- package/dist/connectors/telegram/outbound.d.ts +62 -0
- package/dist/connectors/telegram/outbound.d.ts.map +1 -0
- package/dist/connectors/telegram/outbound.js +116 -0
- package/dist/connectors/telegram/outbound.js.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
- package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
- package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.js +120 -0
- package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.js +37 -0
- package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.js +97 -0
- package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
- package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.js +35 -0
- package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
- package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
- package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/timezonePicker.js +142 -0
- package/dist/connectors/telegram/timezonePicker.js.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.js +159 -0
- package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
- package/dist/connectors/test/connector.d.ts +52 -0
- package/dist/connectors/test/connector.d.ts.map +1 -0
- package/dist/connectors/test/connector.js +143 -0
- package/dist/connectors/test/connector.js.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.js +50 -0
- package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
- package/dist/diagLog.d.ts +6 -0
- package/dist/diagLog.d.ts.map +1 -0
- package/dist/diagLog.js +58 -0
- package/dist/diagLog.js.map +1 -0
- package/dist/effortLevels.d.ts +68 -0
- package/dist/effortLevels.d.ts.map +1 -0
- package/dist/effortLevels.js +114 -0
- package/dist/effortLevels.js.map +1 -0
- package/dist/folderName.d.ts +42 -0
- package/dist/folderName.d.ts.map +1 -0
- package/dist/folderName.js +51 -0
- package/dist/folderName.js.map +1 -0
- package/dist/i18n/de.d.ts +2 -0
- package/dist/i18n/de.d.ts.map +1 -0
- package/dist/i18n/de.js +537 -0
- package/dist/i18n/de.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +566 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/es.d.ts +2 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +537 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/fr.d.ts +2 -0
- package/dist/i18n/fr.d.ts.map +1 -0
- package/dist/i18n/fr.js +537 -0
- package/dist/i18n/fr.js.map +1 -0
- package/dist/i18n/hi.d.ts +2 -0
- package/dist/i18n/hi.d.ts.map +1 -0
- package/dist/i18n/hi.js +537 -0
- package/dist/i18n/hi.js.map +1 -0
- package/dist/i18n/ja.d.ts +2 -0
- package/dist/i18n/ja.d.ts.map +1 -0
- package/dist/i18n/ja.js +537 -0
- package/dist/i18n/ja.js.map +1 -0
- package/dist/i18n/ka.d.ts +2 -0
- package/dist/i18n/ka.d.ts.map +1 -0
- package/dist/i18n/ka.js +537 -0
- package/dist/i18n/ka.js.map +1 -0
- package/dist/i18n/pt.d.ts +2 -0
- package/dist/i18n/pt.d.ts.map +1 -0
- package/dist/i18n/pt.js +537 -0
- package/dist/i18n/pt.js.map +1 -0
- package/dist/i18n/ru.d.ts +6 -0
- package/dist/i18n/ru.d.ts.map +1 -0
- package/dist/i18n/ru.js +540 -0
- package/dist/i18n/ru.js.map +1 -0
- package/dist/i18n/uk.d.ts +8 -0
- package/dist/i18n/uk.d.ts.map +1 -0
- package/dist/i18n/uk.js +542 -0
- package/dist/i18n/uk.js.map +1 -0
- package/dist/i18n/uz.d.ts +2 -0
- package/dist/i18n/uz.d.ts.map +1 -0
- package/dist/i18n/uz.js +537 -0
- package/dist/i18n/uz.js.map +1 -0
- package/dist/i18n/zh.d.ts +2 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +537 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/i18n.d.ts +115 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +233 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/installManager.d.ts +99 -0
- package/dist/installManager.d.ts.map +1 -0
- package/dist/installManager.js +943 -0
- package/dist/installManager.js.map +1 -0
- package/dist/instanceLock.d.ts +161 -0
- package/dist/instanceLock.d.ts.map +1 -0
- package/dist/instanceLock.js +388 -0
- package/dist/instanceLock.js.map +1 -0
- package/dist/mcpConfig.d.ts +76 -0
- package/dist/mcpConfig.d.ts.map +1 -0
- package/dist/mcpConfig.js +270 -0
- package/dist/mcpConfig.js.map +1 -0
- package/dist/openCodeOpenQuestion.d.ts +44 -0
- package/dist/openCodeOpenQuestion.d.ts.map +1 -0
- package/dist/openCodeOpenQuestion.js +64 -0
- package/dist/openCodeOpenQuestion.js.map +1 -0
- package/dist/openCodeQuestionFlow.d.ts +105 -0
- package/dist/openCodeQuestionFlow.d.ts.map +1 -0
- package/dist/openCodeQuestionFlow.js +143 -0
- package/dist/openCodeQuestionFlow.js.map +1 -0
- package/dist/openCodeSessionRouting.d.ts +133 -0
- package/dist/openCodeSessionRouting.d.ts.map +1 -0
- package/dist/openCodeSessionRouting.js +253 -0
- package/dist/openCodeSessionRouting.js.map +1 -0
- package/dist/openCodeSessionTitle.d.ts +50 -0
- package/dist/openCodeSessionTitle.d.ts.map +1 -0
- package/dist/openCodeSessionTitle.js +84 -0
- package/dist/openCodeSessionTitle.js.map +1 -0
- package/dist/outputTrace.d.ts +108 -0
- package/dist/outputTrace.d.ts.map +1 -0
- package/dist/outputTrace.js +430 -0
- package/dist/outputTrace.js.map +1 -0
- package/dist/pendingQuestionRepost.d.ts +47 -0
- package/dist/pendingQuestionRepost.d.ts.map +1 -0
- package/dist/pendingQuestionRepost.js +29 -0
- package/dist/pendingQuestionRepost.js.map +1 -0
- package/dist/pinnedStatus.d.ts +52 -0
- package/dist/pinnedStatus.d.ts.map +1 -0
- package/dist/pinnedStatus.js +36 -0
- package/dist/pinnedStatus.js.map +1 -0
- package/dist/platform/answerSink.d.ts +93 -0
- package/dist/platform/answerSink.d.ts.map +1 -0
- package/dist/platform/answerSink.js +31 -0
- package/dist/platform/answerSink.js.map +1 -0
- package/dist/platform/capabilityFallback.d.ts +39 -0
- package/dist/platform/capabilityFallback.d.ts.map +1 -0
- package/dist/platform/capabilityFallback.js +55 -0
- package/dist/platform/capabilityFallback.js.map +1 -0
- package/dist/platform/commandRouter.d.ts +51 -0
- package/dist/platform/commandRouter.d.ts.map +1 -0
- package/dist/platform/commandRouter.js +53 -0
- package/dist/platform/commandRouter.js.map +1 -0
- package/dist/platform/connectorSet.d.ts +39 -0
- package/dist/platform/connectorSet.d.ts.map +1 -0
- package/dist/platform/connectorSet.js +55 -0
- package/dist/platform/connectorSet.js.map +1 -0
- package/dist/platform/inbound.d.ts +147 -0
- package/dist/platform/inbound.d.ts.map +1 -0
- package/dist/platform/inbound.js +18 -0
- package/dist/platform/inbound.js.map +1 -0
- package/dist/platform/outbound.d.ts +225 -0
- package/dist/platform/outbound.d.ts.map +1 -0
- package/dist/platform/outbound.js +30 -0
- package/dist/platform/outbound.js.map +1 -0
- package/dist/platform/unservedStateGuard.d.ts +27 -0
- package/dist/platform/unservedStateGuard.d.ts.map +1 -0
- package/dist/platform/unservedStateGuard.js +42 -0
- package/dist/platform/unservedStateGuard.js.map +1 -0
- package/dist/postToSession.d.ts +94 -0
- package/dist/postToSession.d.ts.map +1 -0
- package/dist/postToSession.js +56 -0
- package/dist/postToSession.js.map +1 -0
- package/dist/progressLine.d.ts +180 -0
- package/dist/progressLine.d.ts.map +1 -0
- package/dist/progressLine.js +293 -0
- package/dist/progressLine.js.map +1 -0
- package/dist/rateLimiter.d.ts +246 -0
- package/dist/rateLimiter.d.ts.map +1 -0
- package/dist/rateLimiter.js +555 -0
- package/dist/rateLimiter.js.map +1 -0
- package/dist/requests/answerRequest.d.ts +57 -0
- package/dist/requests/answerRequest.d.ts.map +1 -0
- package/dist/requests/answerRequest.js +96 -0
- package/dist/requests/answerRequest.js.map +1 -0
- package/dist/requests/answerTail.d.ts +83 -0
- package/dist/requests/answerTail.d.ts.map +1 -0
- package/dist/requests/answerTail.js +102 -0
- package/dist/requests/answerTail.js.map +1 -0
- package/dist/requests/limitWaitAnswer.d.ts +87 -0
- package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
- package/dist/requests/limitWaitAnswer.js +83 -0
- package/dist/requests/limitWaitAnswer.js.map +1 -0
- package/dist/requests/requestGroup.d.ts +44 -0
- package/dist/requests/requestGroup.d.ts.map +1 -0
- package/dist/requests/requestGroup.js +63 -0
- package/dist/requests/requestGroup.js.map +1 -0
- package/dist/requests/requestHeader.d.ts +70 -0
- package/dist/requests/requestHeader.d.ts.map +1 -0
- package/dist/requests/requestHeader.js +83 -0
- package/dist/requests/requestHeader.js.map +1 -0
- package/dist/requests/requestLedger.d.ts +217 -0
- package/dist/requests/requestLedger.d.ts.map +1 -0
- package/dist/requests/requestLedger.js +468 -0
- package/dist/requests/requestLedger.js.map +1 -0
- package/dist/requests/sessionTurnProbe.d.ts +52 -0
- package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
- package/dist/requests/sessionTurnProbe.js +29 -0
- package/dist/requests/sessionTurnProbe.js.map +1 -0
- package/dist/requests/types.d.ts +181 -0
- package/dist/requests/types.d.ts.map +1 -0
- package/dist/requests/types.js +9 -0
- package/dist/requests/types.js.map +1 -0
- package/dist/requests/wakeUpEngine.d.ts +160 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -0
- package/dist/requests/wakeUpEngine.js +399 -0
- package/dist/requests/wakeUpEngine.js.map +1 -0
- package/dist/requests/wakeUpRules.d.ts +151 -0
- package/dist/requests/wakeUpRules.d.ts.map +1 -0
- package/dist/requests/wakeUpRules.js +167 -0
- package/dist/requests/wakeUpRules.js.map +1 -0
- package/dist/resumeContext.d.ts +87 -0
- package/dist/resumeContext.d.ts.map +1 -0
- package/dist/resumeContext.js +114 -0
- package/dist/resumeContext.js.map +1 -0
- package/dist/scheduler/checkRun.d.ts +95 -0
- package/dist/scheduler/checkRun.d.ts.map +1 -0
- package/dist/scheduler/checkRun.js +172 -0
- package/dist/scheduler/checkRun.js.map +1 -0
- package/dist/scheduler/delivery.d.ts +99 -0
- package/dist/scheduler/delivery.d.ts.map +1 -0
- package/dist/scheduler/delivery.js +212 -0
- package/dist/scheduler/delivery.js.map +1 -0
- package/dist/scheduler/deliveryKind.d.ts +29 -0
- package/dist/scheduler/deliveryKind.d.ts.map +1 -0
- package/dist/scheduler/deliveryKind.js +39 -0
- package/dist/scheduler/deliveryKind.js.map +1 -0
- package/dist/scheduler/directoryThreads.d.ts +19 -0
- package/dist/scheduler/directoryThreads.d.ts.map +1 -0
- package/dist/scheduler/directoryThreads.js +28 -0
- package/dist/scheduler/directoryThreads.js.map +1 -0
- package/dist/scheduler/engine.d.ts +77 -0
- package/dist/scheduler/engine.d.ts.map +1 -0
- package/dist/scheduler/engine.js +337 -0
- package/dist/scheduler/engine.js.map +1 -0
- package/dist/scheduler/injection.d.ts +102 -0
- package/dist/scheduler/injection.d.ts.map +1 -0
- package/dist/scheduler/injection.js +122 -0
- package/dist/scheduler/injection.js.map +1 -0
- package/dist/scheduler/mcpBoot.d.ts +65 -0
- package/dist/scheduler/mcpBoot.d.ts.map +1 -0
- package/dist/scheduler/mcpBoot.js +60 -0
- package/dist/scheduler/mcpBoot.js.map +1 -0
- package/dist/scheduler/mcpSurface.d.ts +355 -0
- package/dist/scheduler/mcpSurface.d.ts.map +1 -0
- package/dist/scheduler/mcpSurface.js +1257 -0
- package/dist/scheduler/mcpSurface.js.map +1 -0
- package/dist/scheduler/rebindResume.d.ts +27 -0
- package/dist/scheduler/rebindResume.d.ts.map +1 -0
- package/dist/scheduler/rebindResume.js +17 -0
- package/dist/scheduler/rebindResume.js.map +1 -0
- package/dist/scheduler/recurrence.d.ts +58 -0
- package/dist/scheduler/recurrence.d.ts.map +1 -0
- package/dist/scheduler/recurrence.js +210 -0
- package/dist/scheduler/recurrence.js.map +1 -0
- package/dist/scheduler/runLedger.d.ts +59 -0
- package/dist/scheduler/runLedger.d.ts.map +1 -0
- package/dist/scheduler/runLedger.js +54 -0
- package/dist/scheduler/runLedger.js.map +1 -0
- package/dist/scheduler/store.d.ts +97 -0
- package/dist/scheduler/store.d.ts.map +1 -0
- package/dist/scheduler/store.js +124 -0
- package/dist/scheduler/store.js.map +1 -0
- package/dist/scheduler/timezoneRecompute.d.ts +61 -0
- package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
- package/dist/scheduler/timezoneRecompute.js +46 -0
- package/dist/scheduler/timezoneRecompute.js.map +1 -0
- package/dist/scheduler/types.d.ts +139 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +8 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/sendErrorClassifier.d.ts +45 -0
- package/dist/sendErrorClassifier.d.ts.map +1 -0
- package/dist/sendErrorClassifier.js +65 -0
- package/dist/sendErrorClassifier.js.map +1 -0
- package/dist/sessionKey.d.ts +136 -0
- package/dist/sessionKey.d.ts.map +1 -0
- package/dist/sessionKey.js +153 -0
- package/dist/sessionKey.js.map +1 -0
- package/dist/sessionPick.d.ts +42 -0
- package/dist/sessionPick.d.ts.map +1 -0
- package/dist/sessionPick.js +39 -0
- package/dist/sessionPick.js.map +1 -0
- package/dist/shutdown.d.ts +126 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +164 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/startupPromptBuffer.d.ts +85 -0
- package/dist/startupPromptBuffer.d.ts.map +1 -0
- package/dist/startupPromptBuffer.js +123 -0
- package/dist/startupPromptBuffer.js.map +1 -0
- package/dist/state.d.ts +1245 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +1830 -0
- package/dist/state.js.map +1 -0
- package/dist/threadContextPreamble.d.ts +89 -0
- package/dist/threadContextPreamble.d.ts.map +1 -0
- package/dist/threadContextPreamble.js +102 -0
- package/dist/threadContextPreamble.js.map +1 -0
- package/dist/threadRouting.d.ts +164 -0
- package/dist/threadRouting.d.ts.map +1 -0
- package/dist/threadRouting.js +182 -0
- package/dist/threadRouting.js.map +1 -0
- package/dist/types.d.ts +1015 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abortableFifo.d.ts +10 -0
- package/dist/utils/abortableFifo.d.ts.map +1 -0
- package/dist/utils/abortableFifo.js +55 -0
- package/dist/utils/abortableFifo.js.map +1 -0
- package/dist/utils/adoptedToolList.d.ts +27 -0
- package/dist/utils/adoptedToolList.d.ts.map +1 -0
- package/dist/utils/adoptedToolList.js +22 -0
- package/dist/utils/adoptedToolList.js.map +1 -0
- package/dist/utils/agentEnvironment.d.ts +42 -0
- package/dist/utils/agentEnvironment.d.ts.map +1 -0
- package/dist/utils/agentEnvironment.js +122 -0
- package/dist/utils/agentEnvironment.js.map +1 -0
- package/dist/utils/ansiClean.d.ts +11 -0
- package/dist/utils/ansiClean.d.ts.map +1 -0
- package/dist/utils/ansiClean.js +139 -0
- package/dist/utils/ansiClean.js.map +1 -0
- package/dist/utils/autoContinueOnLimit.d.ts +49 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
- package/dist/utils/autoContinueOnLimit.js +69 -0
- package/dist/utils/autoContinueOnLimit.js.map +1 -0
- package/dist/utils/canonicalPathContainment.d.ts +7 -0
- package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
- package/dist/utils/canonicalPathContainment.js +48 -0
- package/dist/utils/canonicalPathContainment.js.map +1 -0
- package/dist/utils/claudeAuthLogin.d.ts +71 -0
- package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
- package/dist/utils/claudeAuthLogin.js +93 -0
- package/dist/utils/claudeAuthLogin.js.map +1 -0
- package/dist/utils/claudeChunkClassifier.d.ts +97 -0
- package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
- package/dist/utils/claudeChunkClassifier.js +254 -0
- package/dist/utils/claudeChunkClassifier.js.map +1 -0
- package/dist/utils/claudeCodeVersion.d.ts +31 -0
- package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
- package/dist/utils/claudeCodeVersion.js +62 -0
- package/dist/utils/claudeCodeVersion.js.map +1 -0
- package/dist/utils/claudeCompactHook.d.ts +64 -0
- package/dist/utils/claudeCompactHook.d.ts.map +1 -0
- package/dist/utils/claudeCompactHook.js +98 -0
- package/dist/utils/claudeCompactHook.js.map +1 -0
- package/dist/utils/claudeLivenessAction.d.ts +208 -0
- package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
- package/dist/utils/claudeLivenessAction.js +135 -0
- package/dist/utils/claudeLivenessAction.js.map +1 -0
- package/dist/utils/claudeMcpHeal.d.ts +92 -0
- package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
- package/dist/utils/claudeMcpHeal.js +91 -0
- package/dist/utils/claudeMcpHeal.js.map +1 -0
- package/dist/utils/claudeRelayRouting.d.ts +86 -0
- package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
- package/dist/utils/claudeRelayRouting.js +159 -0
- package/dist/utils/claudeRelayRouting.js.map +1 -0
- package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
- package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
- package/dist/utils/claudeRuntimeInfo.js +151 -0
- package/dist/utils/claudeRuntimeInfo.js.map +1 -0
- package/dist/utils/claudeScrapeShapes.d.ts +256 -0
- package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
- package/dist/utils/claudeScrapeShapes.js +290 -0
- package/dist/utils/claudeScrapeShapes.js.map +1 -0
- package/dist/utils/claudeSessionTitle.d.ts +27 -0
- package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
- package/dist/utils/claudeSessionTitle.js +90 -0
- package/dist/utils/claudeSessionTitle.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +202 -0
- package/dist/utils/claudeStreamJson.d.ts.map +1 -0
- package/dist/utils/claudeStreamJson.js +351 -0
- package/dist/utils/claudeStreamJson.js.map +1 -0
- package/dist/utils/claudeSubagentTail.d.ts +93 -0
- package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
- package/dist/utils/claudeSubagentTail.js +136 -0
- package/dist/utils/claudeSubagentTail.js.map +1 -0
- package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
- package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
- package/dist/utils/clearThreadOutputQueues.js +39 -0
- package/dist/utils/clearThreadOutputQueues.js.map +1 -0
- package/dist/utils/compactCommandRoute.d.ts +45 -0
- package/dist/utils/compactCommandRoute.d.ts.map +1 -0
- package/dist/utils/compactCommandRoute.js +36 -0
- package/dist/utils/compactCommandRoute.js.map +1 -0
- package/dist/utils/compactOnIdle.d.ts +329 -0
- package/dist/utils/compactOnIdle.d.ts.map +1 -0
- package/dist/utils/compactOnIdle.js +379 -0
- package/dist/utils/compactOnIdle.js.map +1 -0
- package/dist/utils/consoleFileTap.d.ts +51 -0
- package/dist/utils/consoleFileTap.d.ts.map +1 -0
- package/dist/utils/consoleFileTap.js +86 -0
- package/dist/utils/consoleFileTap.js.map +1 -0
- package/dist/utils/displayVerbosity.d.ts +44 -0
- package/dist/utils/displayVerbosity.d.ts.map +1 -0
- package/dist/utils/displayVerbosity.js +75 -0
- package/dist/utils/displayVerbosity.js.map +1 -0
- package/dist/utils/download.d.ts +72 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +216 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/draftFinalize.d.ts +110 -0
- package/dist/utils/draftFinalize.d.ts.map +1 -0
- package/dist/utils/draftFinalize.js +100 -0
- package/dist/utils/draftFinalize.js.map +1 -0
- package/dist/utils/draftId.d.ts +36 -0
- package/dist/utils/draftId.d.ts.map +1 -0
- package/dist/utils/draftId.js +46 -0
- package/dist/utils/draftId.js.map +1 -0
- package/dist/utils/draftPacer.d.ts +72 -0
- package/dist/utils/draftPacer.d.ts.map +1 -0
- package/dist/utils/draftPacer.js +53 -0
- package/dist/utils/draftPacer.js.map +1 -0
- package/dist/utils/effortStartupKeystroke.d.ts +20 -0
- package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
- package/dist/utils/effortStartupKeystroke.js +28 -0
- package/dist/utils/effortStartupKeystroke.js.map +1 -0
- package/dist/utils/ensureSessionPlan.d.ts +70 -0
- package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
- package/dist/utils/ensureSessionPlan.js +54 -0
- package/dist/utils/ensureSessionPlan.js.map +1 -0
- package/dist/utils/fileSendPlan.d.ts +217 -0
- package/dist/utils/fileSendPlan.d.ts.map +1 -0
- package/dist/utils/fileSendPlan.js +291 -0
- package/dist/utils/fileSendPlan.js.map +1 -0
- package/dist/utils/fileSendService.d.ts +94 -0
- package/dist/utils/fileSendService.d.ts.map +1 -0
- package/dist/utils/fileSendService.js +387 -0
- package/dist/utils/fileSendService.js.map +1 -0
- package/dist/utils/groupFinalizePlan.d.ts +38 -0
- package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
- package/dist/utils/groupFinalizePlan.js +35 -0
- package/dist/utils/groupFinalizePlan.js.map +1 -0
- package/dist/utils/identicalOutputGuard.d.ts +83 -0
- package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
- package/dist/utils/identicalOutputGuard.js +99 -0
- package/dist/utils/identicalOutputGuard.js.map +1 -0
- package/dist/utils/isoTimestamp.d.ts +16 -0
- package/dist/utils/isoTimestamp.d.ts.map +1 -0
- package/dist/utils/isoTimestamp.js +34 -0
- package/dist/utils/isoTimestamp.js.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
- package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
- package/dist/utils/jsonStreamHost.d.ts +227 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -0
- package/dist/utils/jsonStreamHost.js +417 -0
- package/dist/utils/jsonStreamHost.js.map +1 -0
- package/dist/utils/keyedTransitionQueue.d.ts +18 -0
- package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
- package/dist/utils/keyedTransitionQueue.js +34 -0
- package/dist/utils/keyedTransitionQueue.js.map +1 -0
- package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
- package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
- package/dist/utils/limitEpisodeRecovery.js +133 -0
- package/dist/utils/limitEpisodeRecovery.js.map +1 -0
- package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
- package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
- package/dist/utils/limitHeldPromptQueue.js +59 -0
- package/dist/utils/limitHeldPromptQueue.js.map +1 -0
- package/dist/utils/limitHeldPrompts.d.ts +58 -0
- package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
- package/dist/utils/limitHeldPrompts.js +65 -0
- package/dist/utils/limitHeldPrompts.js.map +1 -0
- package/dist/utils/linkPreviewSuppression.d.ts +18 -0
- package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
- package/dist/utils/linkPreviewSuppression.js +37 -0
- package/dist/utils/linkPreviewSuppression.js.map +1 -0
- package/dist/utils/localClock.d.ts +15 -0
- package/dist/utils/localClock.d.ts.map +1 -0
- package/dist/utils/localClock.js +29 -0
- package/dist/utils/localClock.js.map +1 -0
- package/dist/utils/markdownTableRender.d.ts +83 -0
- package/dist/utils/markdownTableRender.d.ts.map +1 -0
- package/dist/utils/markdownTableRender.js +298 -0
- package/dist/utils/markdownTableRender.js.map +1 -0
- package/dist/utils/mediaGroupCollector.d.ts +51 -0
- package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
- package/dist/utils/mediaGroupCollector.js +90 -0
- package/dist/utils/mediaGroupCollector.js.map +1 -0
- package/dist/utils/messageSendService.d.ts +136 -0
- package/dist/utils/messageSendService.d.ts.map +1 -0
- package/dist/utils/messageSendService.js +165 -0
- package/dist/utils/messageSendService.js.map +1 -0
- package/dist/utils/minutesOverride.d.ts +7 -0
- package/dist/utils/minutesOverride.d.ts.map +1 -0
- package/dist/utils/minutesOverride.js +16 -0
- package/dist/utils/minutesOverride.js.map +1 -0
- package/dist/utils/modelPickerPlan.d.ts +119 -0
- package/dist/utils/modelPickerPlan.d.ts.map +1 -0
- package/dist/utils/modelPickerPlan.js +171 -0
- package/dist/utils/modelPickerPlan.js.map +1 -0
- package/dist/utils/modelSetReplyDecision.d.ts +67 -0
- package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
- package/dist/utils/modelSetReplyDecision.js +27 -0
- package/dist/utils/modelSetReplyDecision.js.map +1 -0
- package/dist/utils/openCodeAuthLogin.d.ts +181 -0
- package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
- package/dist/utils/openCodeAuthLogin.js +393 -0
- package/dist/utils/openCodeAuthLogin.js.map +1 -0
- package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
- package/dist/utils/openCodeCompactPlugin.js +146 -0
- package/dist/utils/openCodeCompactPlugin.js.map +1 -0
- package/dist/utils/openCodeTurnActivity.d.ts +67 -0
- package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
- package/dist/utils/openCodeTurnActivity.js +27 -0
- package/dist/utils/openCodeTurnActivity.js.map +1 -0
- package/dist/utils/outputDebounce.d.ts +24 -0
- package/dist/utils/outputDebounce.d.ts.map +1 -0
- package/dist/utils/outputDebounce.js +30 -0
- package/dist/utils/outputDebounce.js.map +1 -0
- package/dist/utils/outputFlushTiming.d.ts +54 -0
- package/dist/utils/outputFlushTiming.d.ts.map +1 -0
- package/dist/utils/outputFlushTiming.js +48 -0
- package/dist/utils/outputFlushTiming.js.map +1 -0
- package/dist/utils/paginateList.d.ts +25 -0
- package/dist/utils/paginateList.d.ts.map +1 -0
- package/dist/utils/paginateList.js +32 -0
- package/dist/utils/paginateList.js.map +1 -0
- package/dist/utils/paneDiff.d.ts +55 -0
- package/dist/utils/paneDiff.d.ts.map +1 -0
- package/dist/utils/paneDiff.js +88 -0
- package/dist/utils/paneDiff.js.map +1 -0
- package/dist/utils/paneResizeGuard.d.ts +69 -0
- package/dist/utils/paneResizeGuard.d.ts.map +1 -0
- package/dist/utils/paneResizeGuard.js +91 -0
- package/dist/utils/paneResizeGuard.js.map +1 -0
- package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
- package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
- package/dist/utils/persistAdapterSessionIds.js +28 -0
- package/dist/utils/persistAdapterSessionIds.js.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.js +20 -0
- package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
- package/dist/utils/pollBackoff.d.ts +45 -0
- package/dist/utils/pollBackoff.d.ts.map +1 -0
- package/dist/utils/pollBackoff.js +44 -0
- package/dist/utils/pollBackoff.js.map +1 -0
- package/dist/utils/promptDelivery.d.ts +46 -0
- package/dist/utils/promptDelivery.d.ts.map +1 -0
- package/dist/utils/promptDelivery.js +49 -0
- package/dist/utils/promptDelivery.js.map +1 -0
- package/dist/utils/providerDisconnectPlan.d.ts +82 -0
- package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
- package/dist/utils/providerDisconnectPlan.js +110 -0
- package/dist/utils/providerDisconnectPlan.js.map +1 -0
- package/dist/utils/rateLimitLog.d.ts +48 -0
- package/dist/utils/rateLimitLog.d.ts.map +1 -0
- package/dist/utils/rateLimitLog.js +43 -0
- package/dist/utils/rateLimitLog.js.map +1 -0
- package/dist/utils/recentRelayWindow.d.ts +165 -0
- package/dist/utils/recentRelayWindow.d.ts.map +1 -0
- package/dist/utils/recentRelayWindow.js +284 -0
- package/dist/utils/recentRelayWindow.js.map +1 -0
- package/dist/utils/recvPreviewRedaction.d.ts +23 -0
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
- package/dist/utils/recvPreviewRedaction.js +39 -0
- package/dist/utils/recvPreviewRedaction.js.map +1 -0
- package/dist/utils/reminderFlow.d.ts +148 -0
- package/dist/utils/reminderFlow.d.ts.map +1 -0
- package/dist/utils/reminderFlow.js +122 -0
- package/dist/utils/reminderFlow.js.map +1 -0
- package/dist/utils/reminderScheduleText.d.ts +87 -0
- package/dist/utils/reminderScheduleText.d.ts.map +1 -0
- package/dist/utils/reminderScheduleText.js +135 -0
- package/dist/utils/reminderScheduleText.js.map +1 -0
- package/dist/utils/reminderWizard.d.ts +710 -0
- package/dist/utils/reminderWizard.d.ts.map +1 -0
- package/dist/utils/reminderWizard.js +1164 -0
- package/dist/utils/reminderWizard.js.map +1 -0
- package/dist/utils/replyQuote.d.ts +111 -0
- package/dist/utils/replyQuote.d.ts.map +1 -0
- package/dist/utils/replyQuote.js +122 -0
- package/dist/utils/replyQuote.js.map +1 -0
- package/dist/utils/resolveBinary.d.ts +25 -0
- package/dist/utils/resolveBinary.d.ts.map +1 -0
- package/dist/utils/resolveBinary.js +99 -0
- package/dist/utils/resolveBinary.js.map +1 -0
- package/dist/utils/retryAfterHeader.d.ts +7 -0
- package/dist/utils/retryAfterHeader.d.ts.map +1 -0
- package/dist/utils/retryAfterHeader.js +17 -0
- package/dist/utils/retryAfterHeader.js.map +1 -0
- package/dist/utils/rotatingJsonlFile.d.ts +40 -0
- package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
- package/dist/utils/rotatingJsonlFile.js +106 -0
- package/dist/utils/rotatingJsonlFile.js.map +1 -0
- package/dist/utils/rotatingLogFile.d.ts +25 -0
- package/dist/utils/rotatingLogFile.d.ts.map +1 -0
- package/dist/utils/rotatingLogFile.js +74 -0
- package/dist/utils/rotatingLogFile.js.map +1 -0
- package/dist/utils/sendRateTracker.d.ts +59 -0
- package/dist/utils/sendRateTracker.d.ts.map +1 -0
- package/dist/utils/sendRateTracker.js +144 -0
- package/dist/utils/sendRateTracker.js.map +1 -0
- package/dist/utils/serialQueue.d.ts +5 -0
- package/dist/utils/serialQueue.d.ts.map +1 -0
- package/dist/utils/serialQueue.js +14 -0
- package/dist/utils/serialQueue.js.map +1 -0
- package/dist/utils/sseStreamLifecycle.d.ts +32 -0
- package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
- package/dist/utils/sseStreamLifecycle.js +41 -0
- package/dist/utils/sseStreamLifecycle.js.map +1 -0
- package/dist/utils/startupReadiness.d.ts +119 -0
- package/dist/utils/startupReadiness.d.ts.map +1 -0
- package/dist/utils/startupReadiness.js +148 -0
- package/dist/utils/startupReadiness.js.map +1 -0
- package/dist/utils/statusFlushDecision.d.ts +18 -0
- package/dist/utils/statusFlushDecision.d.ts.map +1 -0
- package/dist/utils/statusFlushDecision.js +53 -0
- package/dist/utils/statusFlushDecision.js.map +1 -0
- package/dist/utils/subagentRender.d.ts +52 -0
- package/dist/utils/subagentRender.d.ts.map +1 -0
- package/dist/utils/subagentRender.js +66 -0
- package/dist/utils/subagentRender.js.map +1 -0
- package/dist/utils/subagentStatusRender.d.ts +90 -0
- package/dist/utils/subagentStatusRender.d.ts.map +1 -0
- package/dist/utils/subagentStatusRender.js +124 -0
- package/dist/utils/subagentStatusRender.js.map +1 -0
- package/dist/utils/telegramError.d.ts +2 -0
- package/dist/utils/telegramError.d.ts.map +1 -0
- package/dist/utils/telegramError.js +16 -0
- package/dist/utils/telegramError.js.map +1 -0
- package/dist/utils/terminalEmitPlan.d.ts +74 -0
- package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
- package/dist/utils/terminalEmitPlan.js +86 -0
- package/dist/utils/terminalEmitPlan.js.map +1 -0
- package/dist/utils/thinkingRender.d.ts +74 -0
- package/dist/utils/thinkingRender.d.ts.map +1 -0
- package/dist/utils/thinkingRender.js +85 -0
- package/dist/utils/thinkingRender.js.map +1 -0
- package/dist/utils/threadStatusReport.d.ts +55 -0
- package/dist/utils/threadStatusReport.d.ts.map +1 -0
- package/dist/utils/threadStatusReport.js +65 -0
- package/dist/utils/threadStatusReport.js.map +1 -0
- package/dist/utils/threadToggle.d.ts +29 -0
- package/dist/utils/threadToggle.d.ts.map +1 -0
- package/dist/utils/threadToggle.js +39 -0
- package/dist/utils/threadToggle.js.map +1 -0
- package/dist/utils/timezone.d.ts +125 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +278 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/tmuxExec.d.ts +61 -0
- package/dist/utils/tmuxExec.d.ts.map +1 -0
- package/dist/utils/tmuxExec.js +109 -0
- package/dist/utils/tmuxExec.js.map +1 -0
- package/dist/utils/tmuxSessionName.d.ts +34 -0
- package/dist/utils/tmuxSessionName.d.ts.map +1 -0
- package/dist/utils/tmuxSessionName.js +51 -0
- package/dist/utils/tmuxSessionName.js.map +1 -0
- package/dist/utils/toolResultRender.d.ts +61 -0
- package/dist/utils/toolResultRender.d.ts.map +1 -0
- package/dist/utils/toolResultRender.js +62 -0
- package/dist/utils/toolResultRender.js.map +1 -0
- package/dist/utils/topicRequest.d.ts +61 -0
- package/dist/utils/topicRequest.d.ts.map +1 -0
- package/dist/utils/topicRequest.js +68 -0
- package/dist/utils/topicRequest.js.map +1 -0
- package/dist/utils/topicView.d.ts +55 -0
- package/dist/utils/topicView.d.ts.map +1 -0
- package/dist/utils/topicView.js +56 -0
- package/dist/utils/topicView.js.map +1 -0
- package/dist/utils/transcribeAudio.d.ts +89 -0
- package/dist/utils/transcribeAudio.d.ts.map +1 -0
- package/dist/utils/transcribeAudio.js +249 -0
- package/dist/utils/transcribeAudio.js.map +1 -0
- package/dist/utils/transientFrames.d.ts +52 -0
- package/dist/utils/transientFrames.d.ts.map +1 -0
- package/dist/utils/transientFrames.js +41 -0
- package/dist/utils/transientFrames.js.map +1 -0
- package/dist/utils/typingActive.d.ts +35 -0
- package/dist/utils/typingActive.d.ts.map +1 -0
- package/dist/utils/typingActive.js +22 -0
- package/dist/utils/typingActive.js.map +1 -0
- package/dist/utils/typingLoopBackstop.d.ts +64 -0
- package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
- package/dist/utils/typingLoopBackstop.js +68 -0
- package/dist/utils/typingLoopBackstop.js.map +1 -0
- package/dist/utils/verbosityRender.d.ts +18 -0
- package/dist/utils/verbosityRender.d.ts.map +1 -0
- package/dist/utils/verbosityRender.js +17 -0
- package/dist/utils/verbosityRender.js.map +1 -0
- package/dist/utils/wedgeRecovery.d.ts +57 -0
- package/dist/utils/wedgeRecovery.d.ts.map +1 -0
- package/dist/utils/wedgeRecovery.js +24 -0
- package/dist/utils/wedgeRecovery.js.map +1 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +61 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +113 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +226 -0
- package/dist/validation.js.map +1 -0
- package/dist/voiceQueue.d.ts +7 -0
- package/dist/voiceQueue.d.ts.map +1 -0
- package/dist/voiceQueue.js +33 -0
- package/dist/voiceQueue.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/docker-compose.yml +36 -0
- package/package.json +83 -4
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Rolling window of recently-RELAYED Claude pane lines — the
|
|
4
|
+
* long-horizon companion to the per-poll line-set diff (`getNewPaneContent`
|
|
5
|
+
* in `adapters/claudeCliAdapter.ts`).
|
|
6
|
+
*
|
|
7
|
+
* WHY it exists (live incident 2026-06-10, plan
|
|
8
|
+
* `agent/tasks/actual/2026-06-10-claude-stale-rescrape-dedup.md`): the
|
|
9
|
+
* per-poll diff only knows the immediately-previous pane capture. When the
|
|
10
|
+
* Claude TUI re-renders hours-old scrollback (full repaint, scroll-through,
|
|
11
|
+
* resize), the redrawn lines are absent from that previous capture, so the
|
|
12
|
+
* diff classifies them as "new" and re-relays them — chunked and overlapping
|
|
13
|
+
* as the pane scrolls (a topic was flooded with ~12 chunks of a stale ~1400
|
|
14
|
+
* line diff). This window remembers what was actually RELAYED to the topic,
|
|
15
|
+
* so a re-render of already-sent content is suppressed regardless of WHAT
|
|
16
|
+
* triggered the redraw.
|
|
17
|
+
*
|
|
18
|
+
* Locked tradeoff — the SAME direction as the per-poll set diff (see
|
|
19
|
+
* `getNewPaneContent`'s JSDoc): err toward DROPPING a re-render duplicate. A
|
|
20
|
+
* re-send flood is the user-visible bug; a rare suppressed legit repeat (e.g.
|
|
21
|
+
* re-running an identical long command within the window horizon) is a
|
|
22
|
+
* low-cost loss. Like `lastContent`, the window does not self-heal a
|
|
23
|
+
* wrongly-suppressed line within its horizon. Two guards bound the damage:
|
|
24
|
+
* only SUBSTANTIAL lines (≥ {@link relayDedupMinLineLength} after
|
|
25
|
+
* normalization) are ever recorded or suppressed — short lines ("yes",
|
|
26
|
+
* "done", list bullets) repeat legitimately all the time and always pass —
|
|
27
|
+
* and the FIFO bound means old lines eventually evict as new content is
|
|
28
|
+
* relayed.
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.relayBlockSignatureMax = exports.relayWindowMaxLines = exports.relayDedupMinLineLength = void 0;
|
|
32
|
+
exports.normalizeForComparison = normalizeForComparison;
|
|
33
|
+
exports.normalizeForRelayDedup = normalizeForRelayDedup;
|
|
34
|
+
exports.buildRelayBlockSignature = buildRelayBlockSignature;
|
|
35
|
+
exports.createRecentRelayWindow = createRecentRelayWindow;
|
|
36
|
+
exports.seedRelayWindowFromPane = seedRelayWindowFromPane;
|
|
37
|
+
exports.getRelayDedupedChunk = getRelayDedupedChunk;
|
|
38
|
+
const claudeScrapeShapes_1 = require("./claudeScrapeShapes");
|
|
39
|
+
const progressLine_1 = require("../progressLine");
|
|
40
|
+
/**
|
|
41
|
+
* @description Minimum NORMALIZED line length for the window to record or
|
|
42
|
+
* suppress a line. Shorter lines repeat legitimately too often (confirmations,
|
|
43
|
+
* bullets, numbers) to ever be treated as re-render duplicates.
|
|
44
|
+
*/
|
|
45
|
+
exports.relayDedupMinLineLength = 16;
|
|
46
|
+
/**
|
|
47
|
+
* @description Whether a NORMALIZED line is the short `NN +` diff-gutter shape
|
|
48
|
+
* that bypasses the length gate (record + suppress on re-appearance).
|
|
49
|
+
*
|
|
50
|
+
* WHY a targeted bypass (live leak 2026-06-24, topic my-health): a short `NN +`
|
|
51
|
+
* gutter scrolled off, was RE-SCRAPED on a later poll, re-emitted as fresh
|
|
52
|
+
* output, and prepended onto the next real message. Being under the 16-char gate
|
|
53
|
+
* it bypassed the dedup entirely. The gutter shape — a leading line number, then
|
|
54
|
+
* a literal `+` change marker — is never legitimate short prose ("done", "yes",
|
|
55
|
+
* "+1 done", "3 lines changed" all fail it), so suppressing its RE-render is
|
|
56
|
+
* safe. Strictly `+` (additions); `-` deletion gutters and everything else stay
|
|
57
|
+
* outside this bypass and keep the normal length gate. Reuses the single
|
|
58
|
+
* source-of-truth shape {@link DIFF_CHANGE_GUTTER_RE} (called on the same
|
|
59
|
+
* coarse-normalized form `record`/`checkHasLine` key on, so gate and key agree).
|
|
60
|
+
*/
|
|
61
|
+
function checkIsDiffChangeGutter(normalizedLine) {
|
|
62
|
+
return claudeScrapeShapes_1.DIFF_CHANGE_GUTTER_RE.test(normalizedLine);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @description Window capacity in lines. Sized to cover the incident-scale
|
|
66
|
+
* re-render (a ~1400-line stale diff) with headroom, while keeping the memory
|
|
67
|
+
* bound trivial and letting truly old content evict.
|
|
68
|
+
*/
|
|
69
|
+
exports.relayWindowMaxLines = 1500;
|
|
70
|
+
/**
|
|
71
|
+
* @description Capacity of the block-signature FIFO behind
|
|
72
|
+
* {@link RecentRelayWindow.checkBlockAlreadyRelayed}. A block is one emitted
|
|
73
|
+
* chunk (a table, a prose paragraph) recorded as a SINGLE joined signature, so
|
|
74
|
+
* far fewer entries than the per-line window need bounding. Sized to remember a
|
|
75
|
+
* good run of recent emitted blocks (covers a looped table re-printed many times
|
|
76
|
+
* within a turn) while keeping the memory bound trivial.
|
|
77
|
+
*/
|
|
78
|
+
exports.relayBlockSignatureMax = 200;
|
|
79
|
+
/**
|
|
80
|
+
* @description Leading-glyph strip for line-identity comparison: the ANIMATED
|
|
81
|
+
* spinner/tick set (shared {@link spinnerGlyphClass}, so it never drifts from
|
|
82
|
+
* `PROGRESS_LINE_RE`) PLUS the bullet/tool STATE glyphs `⏺ ⏳ ✓` (`⏺` U+23FA is
|
|
83
|
+
* the real assistant-output bullet in Claude v2.1.177). The animated glyphs
|
|
84
|
+
* (`✻ ✽ ✶ ✢ · *`) rotate every frame, so without stripping them a stable line
|
|
85
|
+
* re-animated to another frame (`✻X` vs `✽X`) looks NEW to the diff and re-emits;
|
|
86
|
+
* the state glyphs let a tool header match regardless of its `⏳`/`✓` state.
|
|
87
|
+
*/
|
|
88
|
+
const LEADING_COMPARISON_GLYPH_RE = new RegExp(`^[${progressLine_1.spinnerGlyphClass}⏺⏳✓]\\s*`);
|
|
89
|
+
/**
|
|
90
|
+
* @description Normalise a pane line for line-identity comparison: trim, then
|
|
91
|
+
* drop a single leading spinner/state glyph ({@link LEADING_COMPARISON_GLYPH_RE}).
|
|
92
|
+
*
|
|
93
|
+
* Single source of truth for BOTH dedup layers — the per-poll set diff
|
|
94
|
+
* (`getNewPaneContent`) and this relay window — which MUST share one
|
|
95
|
+
* normalization domain: the window stores the same normalized forms the pane
|
|
96
|
+
* diff compares, otherwise a redraw would slip past one layer or the other.
|
|
97
|
+
* Comparison-ONLY: this shapes equality/dedup keys, never the text emitted.
|
|
98
|
+
*/
|
|
99
|
+
function normalizeForComparison(line) {
|
|
100
|
+
return line.trim().replace(LEADING_COMPARISON_GLYPH_RE, '');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @description COARSER normalization for the LONG-HORIZON relay-window dedup
|
|
104
|
+
* (record + suppress). Builds on {@link normalizeForComparison} and ADDITIONALLY
|
|
105
|
+
* strips markdown emphasis/code markers (`*`, `_`, `` ` ``, `~`) and collapses
|
|
106
|
+
* whitespace runs.
|
|
107
|
+
*
|
|
108
|
+
* WHY a second, coarser form (live re-emit 2026-06-15): a line that scrolled off
|
|
109
|
+
* and was re-rendered comes back with the SAME text but different emphasis spans
|
|
110
|
+
* — `the Claude *liveness loop* …` one capture, `the Claude *liveness* *loop* …`
|
|
111
|
+
* the next — or shifted padding/wrapping. The per-poll diff's plain
|
|
112
|
+
* normalization left those as DIFFERENT strings, so the window failed to
|
|
113
|
+
* recognise the re-render and re-emitted it. Stripping the volatile markup makes
|
|
114
|
+
* the re-render match.
|
|
115
|
+
*
|
|
116
|
+
* It is a strict COARSENING of {@link normalizeForComparison} (only further
|
|
117
|
+
* transforms its output), so the window still recognises every line the per-poll
|
|
118
|
+
* diff emitted (it can only match MORE, never fewer) — the "no redraw slips past
|
|
119
|
+
* one layer" guarantee holds, WITHOUT touching the per-poll core diff (and group
|
|
120
|
+
* mode), where over-suppression would risk dropping genuinely-new content.
|
|
121
|
+
*/
|
|
122
|
+
function normalizeForRelayDedup(line) {
|
|
123
|
+
return normalizeForComparison(line)
|
|
124
|
+
.replace(/[*_`~]/g, '')
|
|
125
|
+
.replace(/\s+/g, ' ')
|
|
126
|
+
.trim();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @description Build a single normalized signature for a WHOLE block (a table,
|
|
130
|
+
* a paragraph) so a fully-duplicate block can be recognised even when its
|
|
131
|
+
* individual lines are too short to clear the per-line {@link
|
|
132
|
+
* relayDedupMinLineLength} gate — table border rows (`├──┤`) and tiny cells
|
|
133
|
+
* (`│ ✅ │`) are exactly that case. Drops blank lines, normalizes each surviving
|
|
134
|
+
* line in the SAME coarse domain {@link normalizeForRelayDedup} uses, and joins
|
|
135
|
+
* with `\n`. Returns `''` for a block with no substantial content (so a
|
|
136
|
+
* whitespace-only block is never treated as a relayed block).
|
|
137
|
+
*/
|
|
138
|
+
function buildRelayBlockSignature(blockText) {
|
|
139
|
+
const normalizedLines = blockText
|
|
140
|
+
.split('\n')
|
|
141
|
+
.map(normalizeForRelayDedup)
|
|
142
|
+
.filter(line => line.length > 0);
|
|
143
|
+
return normalizedLines.join('\n');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* @description Create an empty relay window holding up to `maxLines`
|
|
147
|
+
* normalized lines; the oldest line is evicted first once full.
|
|
148
|
+
*/
|
|
149
|
+
function createRecentRelayWindow(maxLines = exports.relayWindowMaxLines) {
|
|
150
|
+
/** Insertion-ordered normalized lines — defines eviction order. */
|
|
151
|
+
const lineFifo = [];
|
|
152
|
+
/** Same lines as `lineFifo`, for O(1) membership checks. */
|
|
153
|
+
const lineSet = new Set();
|
|
154
|
+
/** Insertion-ordered joined block signatures — defines block eviction order. */
|
|
155
|
+
const blockSignatureFifo = [];
|
|
156
|
+
/** Same signatures as `blockSignatureFifo`, for O(1) membership checks. */
|
|
157
|
+
const blockSignatureSet = new Set();
|
|
158
|
+
return {
|
|
159
|
+
record(chunkText) {
|
|
160
|
+
for (const line of chunkText.split('\n')) {
|
|
161
|
+
const normalized = normalizeForRelayDedup(line);
|
|
162
|
+
// A short `NN +` diff gutter is recorded too (it re-renders and leaks);
|
|
163
|
+
// every other short line stays out of the window (legit repeats).
|
|
164
|
+
if (normalized.length < exports.relayDedupMinLineLength && !checkIsDiffChangeGutter(normalized))
|
|
165
|
+
continue;
|
|
166
|
+
// A line repeated within one chunk must occupy ONE slot, or the FIFO
|
|
167
|
+
// and the Set would desync on eviction.
|
|
168
|
+
if (lineSet.has(normalized))
|
|
169
|
+
continue;
|
|
170
|
+
lineFifo.push(normalized);
|
|
171
|
+
lineSet.add(normalized);
|
|
172
|
+
if (lineFifo.length > maxLines) {
|
|
173
|
+
const evictedLine = lineFifo.shift();
|
|
174
|
+
if (evictedLine !== undefined)
|
|
175
|
+
lineSet.delete(evictedLine);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Also record the chunk's whole-block signature so a fully-duplicate
|
|
179
|
+
// block (a re-printed table whose individual lines are too short for the
|
|
180
|
+
// per-line gate) is recognised by `checkBlockAlreadyRelayed`.
|
|
181
|
+
const blockSignature = buildRelayBlockSignature(chunkText);
|
|
182
|
+
if (blockSignature && !blockSignatureSet.has(blockSignature)) {
|
|
183
|
+
blockSignatureFifo.push(blockSignature);
|
|
184
|
+
blockSignatureSet.add(blockSignature);
|
|
185
|
+
if (blockSignatureFifo.length > exports.relayBlockSignatureMax) {
|
|
186
|
+
const evictedSignature = blockSignatureFifo.shift();
|
|
187
|
+
if (evictedSignature !== undefined)
|
|
188
|
+
blockSignatureSet.delete(evictedSignature);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
checkHasLine(line) {
|
|
193
|
+
const normalized = normalizeForRelayDedup(line);
|
|
194
|
+
// Same bypass as `record`: a short `NN +` diff gutter is eligible for
|
|
195
|
+
// suppression (only on RE-appearance — it had to be recorded first); any
|
|
196
|
+
// other short line is never suppressed.
|
|
197
|
+
if (normalized.length < exports.relayDedupMinLineLength && !checkIsDiffChangeGutter(normalized))
|
|
198
|
+
return false;
|
|
199
|
+
return lineSet.has(normalized);
|
|
200
|
+
},
|
|
201
|
+
checkBlockAlreadyRelayed(blockText) {
|
|
202
|
+
const blockSignature = buildRelayBlockSignature(blockText);
|
|
203
|
+
if (!blockSignature)
|
|
204
|
+
return false;
|
|
205
|
+
return blockSignatureSet.has(blockSignature);
|
|
206
|
+
},
|
|
207
|
+
reset() {
|
|
208
|
+
lineFifo.length = 0;
|
|
209
|
+
lineSet.clear();
|
|
210
|
+
blockSignatureFifo.length = 0;
|
|
211
|
+
blockSignatureSet.clear();
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* @description Seed a FRESH relay window from a full pane snapshot so a re-render
|
|
217
|
+
* of content ALREADY ON the pane is recognised as already-relayed on the very
|
|
218
|
+
* first poll — never re-emitted.
|
|
219
|
+
*
|
|
220
|
+
* WHY (live incident 2026-06-24): on adopt/re-attach the bot already
|
|
221
|
+
* seeds the pane-diff baseline (`lastContent`), which suppresses re-appearing
|
|
222
|
+
* PROSE. But a SETTLED table already on the pane is deduped ONLY at the BLOCK
|
|
223
|
+
* level ({@link RecentRelayWindow.checkBlockAlreadyRelayed} in
|
|
224
|
+
* `emitStabilizedTable`) — its border rows and tiny cells fall under the per-line
|
|
225
|
+
* gate. Adopt did NOT seed this window, so the first post-adopt poll saw the
|
|
226
|
+
* table's block signature as unknown and RE-EMITTED the whole table once per
|
|
227
|
+
* restart (~1100 chars). Recording the pane (per-line + whole-pane block) AND the
|
|
228
|
+
* settled table's OWN block signature here makes that first re-render hit
|
|
229
|
+
* `checkBlockAlreadyRelayed === true` and be suppressed.
|
|
230
|
+
*
|
|
231
|
+
* `getTableBlock` is injected (the adapter passes its `getLastSharpTableBlock`)
|
|
232
|
+
* to keep this module free of an adapter import — the adapter already imports
|
|
233
|
+
* from here, so the reverse would be a cycle. Pure (no I/O); the `record` calls
|
|
234
|
+
* are byte-identical to the ones the live emit path makes, so the window's
|
|
235
|
+
* domains agree.
|
|
236
|
+
*/
|
|
237
|
+
function seedRelayWindowFromPane(window, paneText, getTableBlock) {
|
|
238
|
+
if (!paneText)
|
|
239
|
+
return;
|
|
240
|
+
// Records the pane's substantial lines (per-line dedup) AND a whole-pane block
|
|
241
|
+
// signature so a long-horizon re-render of the same pane is recognised.
|
|
242
|
+
window.record(paneText);
|
|
243
|
+
// Record the settled table's OWN block signature in the SAME domain
|
|
244
|
+
// `emitStabilizedTable` records/checks, so the first post-adopt table re-emit
|
|
245
|
+
// is suppressed.
|
|
246
|
+
const seedTable = getTableBlock(paneText);
|
|
247
|
+
if (seedTable)
|
|
248
|
+
window.record(seedTable);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* @description Filter a pane-diff chunk against the window: drop every line
|
|
252
|
+
* whose normalized form was already relayed (substantial lines only — short
|
|
253
|
+
* lines always pass). Returns `''` when nothing survives, so the caller can
|
|
254
|
+
* skip the poll's emit entirely (no empty messages).
|
|
255
|
+
*
|
|
256
|
+
* Blank-line shaping mirrors `getNewPaneContent`'s pending-blank exactly: a
|
|
257
|
+
* single blank that sat BETWEEN two surviving lines is preserved as a
|
|
258
|
+
* paragraph separator; leading/trailing blanks and blanks adjacent to dropped
|
|
259
|
+
* lines never leak out. An already-shaped chunk passes through an empty
|
|
260
|
+
* window byte-identical — fresh output is never altered.
|
|
261
|
+
*/
|
|
262
|
+
function getRelayDedupedChunk(relayWindow, chunkText) {
|
|
263
|
+
if (!chunkText)
|
|
264
|
+
return '';
|
|
265
|
+
const keptParts = [];
|
|
266
|
+
let pendingBlank = false;
|
|
267
|
+
for (const line of chunkText.split('\n')) {
|
|
268
|
+
const normalized = normalizeForComparison(line);
|
|
269
|
+
if (!normalized) {
|
|
270
|
+
pendingBlank = true;
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (relayWindow.checkHasLine(line)) {
|
|
274
|
+
pendingBlank = false;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
if (pendingBlank && keptParts.length > 0)
|
|
278
|
+
keptParts.push('');
|
|
279
|
+
keptParts.push(line);
|
|
280
|
+
pendingBlank = false;
|
|
281
|
+
}
|
|
282
|
+
return keptParts.join('\n').trim();
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=recentRelayWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recentRelayWindow.js","sourceRoot":"","sources":["../../src/utils/recentRelayWindow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Recorded instead of a pasted provider API key while `/connect` is pending. */
|
|
2
|
+
export declare const redactedConnectKeyPreview = "[redacted: provider API key]";
|
|
3
|
+
/** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
|
|
4
|
+
export declare const redactedConnectCommandPreview = "/connect <redacted>";
|
|
5
|
+
/**
|
|
6
|
+
* @description Is `rawText` a `/connect` command invocation (any argument
|
|
7
|
+
* shape, `@botmention` tolerated)? Shared by the command wrapper (a re-issued
|
|
8
|
+
* `/connect` keeps the pending state without a "cancelled" notice) and the
|
|
9
|
+
* recv-trace redaction below.
|
|
10
|
+
*/
|
|
11
|
+
export declare function checkIsConnectCommandText(rawText: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* @description Decide what the output-trace `recv` preview may show for an
|
|
14
|
+
* incoming text message. Security: a provider API key must never land in the
|
|
15
|
+
* on-disk trace log. Mirrors the text handler's own routing: while the thread
|
|
16
|
+
* is in the pending `/connect` state, the next non-command text IS the pasted
|
|
17
|
+
* key → the preview is fully redacted (a command text cancels the flow instead,
|
|
18
|
+
* so it is not a secret). Independently of the pending state, an inline
|
|
19
|
+
* `/connect <key>` carries the key in its arguments → only a fixed command
|
|
20
|
+
* marker is recorded. Everything else records unchanged.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getRecvTracePreview(messageText: string, isThreadPendingProviderConnect: boolean): string;
|
|
23
|
+
//# sourceMappingURL=recvPreviewRedaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recvPreviewRedaction.d.ts","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,8BAA8B,EAAE,OAAO,GACtC,MAAM,CAMR"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redactedConnectCommandPreview = exports.redactedConnectKeyPreview = void 0;
|
|
4
|
+
exports.checkIsConnectCommandText = checkIsConnectCommandText;
|
|
5
|
+
exports.getRecvTracePreview = getRecvTracePreview;
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
/** Recorded instead of a pasted provider API key while `/connect` is pending. */
|
|
8
|
+
exports.redactedConnectKeyPreview = '[redacted: provider API key]';
|
|
9
|
+
/** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
|
|
10
|
+
exports.redactedConnectCommandPreview = '/connect <redacted>';
|
|
11
|
+
/**
|
|
12
|
+
* @description Is `rawText` a `/connect` command invocation (any argument
|
|
13
|
+
* shape, `@botmention` tolerated)? Shared by the command wrapper (a re-issued
|
|
14
|
+
* `/connect` keeps the pending state without a "cancelled" notice) and the
|
|
15
|
+
* recv-trace redaction below.
|
|
16
|
+
*/
|
|
17
|
+
function checkIsConnectCommandText(rawText) {
|
|
18
|
+
const [commandName = ''] = (0, utils_1.stripCommandBotMention)(rawText.trim()).split(/\s+/, 1);
|
|
19
|
+
return commandName === '/connect';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @description Decide what the output-trace `recv` preview may show for an
|
|
23
|
+
* incoming text message. Security: a provider API key must never land in the
|
|
24
|
+
* on-disk trace log. Mirrors the text handler's own routing: while the thread
|
|
25
|
+
* is in the pending `/connect` state, the next non-command text IS the pasted
|
|
26
|
+
* key → the preview is fully redacted (a command text cancels the flow instead,
|
|
27
|
+
* so it is not a secret). Independently of the pending state, an inline
|
|
28
|
+
* `/connect <key>` carries the key in its arguments → only a fixed command
|
|
29
|
+
* marker is recorded. Everything else records unchanged.
|
|
30
|
+
*/
|
|
31
|
+
function getRecvTracePreview(messageText, isThreadPendingProviderConnect) {
|
|
32
|
+
if (checkIsConnectCommandText(messageText))
|
|
33
|
+
return exports.redactedConnectCommandPreview;
|
|
34
|
+
if (isThreadPendingProviderConnect && !messageText.trim().startsWith('/')) {
|
|
35
|
+
return exports.redactedConnectKeyPreview;
|
|
36
|
+
}
|
|
37
|
+
return messageText;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=recvPreviewRedaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recvPreviewRedaction.js","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":";;;AAcA,8DAGC;AAYD,kDASC;AAtCD,oCAAkD;AAElD,iFAAiF;AACpE,QAAA,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,8FAA8F;AACjF,QAAA,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,WAAW,KAAK,UAAU,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,8BAAuC;IAEvC,IAAI,yBAAyB,CAAC,WAAW,CAAC;QAAE,OAAO,qCAA6B,CAAC;IACjF,IAAI,8BAA8B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,iCAAyB,CAAC;IACnC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description The `/reminders` decisions that live OUTSIDE the pure wizard
|
|
3
|
+
* module because they depend on the bot's own surroundings rather than on the
|
|
4
|
+
* wizard's step machine: which hub screen to draw (a function of the scheduler's
|
|
5
|
+
* per-thread reminder cap), whether a step-4 text wait has expired or is already
|
|
6
|
+
* claimed by another inbound message, whether the captured text is short enough
|
|
7
|
+
* to keep, whether the wait survives a given wizard transition at all, and
|
|
8
|
+
* whether a tapped wizard button belongs to the wizard that is live right now.
|
|
9
|
+
*
|
|
10
|
+
* They are here rather than in `bot.ts` for the usual reason: `bot.ts` cannot be
|
|
11
|
+
* imported by a test (its module-scope `parseEnv()` exits the process), and each
|
|
12
|
+
* of these is a rule whose failure is silent — a hub that offers «add» at the cap
|
|
13
|
+
* is a dead end, an unexpired text wait swallows an ordinary message that should
|
|
14
|
+
* have reached the agent, an unclaimed one creates two reminders from one wizard,
|
|
15
|
+
* and a mis-routed stale tap feeds picks into the wrong wizard.
|
|
16
|
+
*/
|
|
17
|
+
import { type ReminderWizardTransition } from './reminderWizard';
|
|
18
|
+
/**
|
|
19
|
+
* How long step 4 keeps waiting for the reminder text. The wait INTERCEPTS every
|
|
20
|
+
* plain message in the topic, so it must expire: an abandoned wizard would
|
|
21
|
+
* otherwise swallow, hours later, a message the operator meant for the agent.
|
|
22
|
+
* 15 minutes is long enough to finish typing and short enough that nobody has
|
|
23
|
+
* forgotten what they were doing.
|
|
24
|
+
*/
|
|
25
|
+
export declare const reminderTextWaitMs: number;
|
|
26
|
+
/**
|
|
27
|
+
* @name ReminderHubBody
|
|
28
|
+
* @description Which line the hub prints under its title.
|
|
29
|
+
* - `empty` — nothing scheduled yet.
|
|
30
|
+
* - `active` — the count.
|
|
31
|
+
* - `atLimit` — the count PLUS "delete one to add another", because the «add»
|
|
32
|
+
* button is gone and the operator needs to know why.
|
|
33
|
+
*/
|
|
34
|
+
export type ReminderHubBody = 'empty' | 'active' | 'atLimit';
|
|
35
|
+
/** The hub screen's two decisions: what the body says, and whether «add» is drawn. */
|
|
36
|
+
export interface ReminderHubPlan {
|
|
37
|
+
body: ReminderHubBody;
|
|
38
|
+
isAddOffered: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @description Decide the hub screen. At (or past) the per-thread REMINDER cap
|
|
42
|
+
* the «add» button is NOT offered: the create would be rejected by the store, so
|
|
43
|
+
* a button that can only fail is worse than no button — provided the screen says
|
|
44
|
+
* why, which is what the `atLimit` body is for.
|
|
45
|
+
*
|
|
46
|
+
* The comparison must be the one `createScheduleForThread` makes, or the hub walks
|
|
47
|
+
* the operator through all four steps and only then hits a rejection. That store
|
|
48
|
+
* counts a reminder against the REMINDER cap alone, so the topic's agent-prompt
|
|
49
|
+
* jobs are irrelevant here — a topic full of `/schedule` jobs still has room for
|
|
50
|
+
* reminders.
|
|
51
|
+
*
|
|
52
|
+
* A non-positive cap is treated as "at the limit" rather than special-cased: it
|
|
53
|
+
* is the same user-visible truth (nothing more can be created).
|
|
54
|
+
*/
|
|
55
|
+
export declare function getReminderHubPlan(input: {
|
|
56
|
+
reminderCount: number;
|
|
57
|
+
maxReminders: number;
|
|
58
|
+
}): ReminderHubPlan;
|
|
59
|
+
/**
|
|
60
|
+
* @name ReminderTextCaptureRoute
|
|
61
|
+
* @description What an inbound message in the topic means for a reminder wizard.
|
|
62
|
+
* - `notArmed` — no wizard is waiting for text; handle the message normally.
|
|
63
|
+
* - `capture` — this message IS the reminder text.
|
|
64
|
+
* - `claimed` — a wizard is waiting, but another message got there first: handle
|
|
65
|
+
* this one normally, because the wait it would have filled is
|
|
66
|
+
* already being consumed.
|
|
67
|
+
* - `expired` — a wizard was waiting but the window closed: retire it AND let
|
|
68
|
+
* the message fall through to normal handling (swallowing it
|
|
69
|
+
* would lose a prompt the operator meant for the agent).
|
|
70
|
+
*/
|
|
71
|
+
export type ReminderTextCaptureRoute = 'notArmed' | 'capture' | 'claimed' | 'expired';
|
|
72
|
+
/**
|
|
73
|
+
* @description Route an inbound message against the step-4 wait. `armedAtMs` is
|
|
74
|
+
* `null` whenever no wizard is on the text step (never armed, already finished,
|
|
75
|
+
* cancelled). Takes the instant as an argument so the window is testable without
|
|
76
|
+
* a clock.
|
|
77
|
+
*
|
|
78
|
+
* `isClaimed` is what makes the wait single-use. Telegraf handles updates
|
|
79
|
+
* CONCURRENTLY and only the voice path is serialized per thread, so two messages
|
|
80
|
+
* arriving together would both route `capture` and create two reminders from one
|
|
81
|
+
* wizard; the caller claims the wait synchronously before its first `await`, and
|
|
82
|
+
* the loser lands here as `claimed`.
|
|
83
|
+
*
|
|
84
|
+
* `claimed` is checked BEFORE the window: a claim means the winner is already
|
|
85
|
+
* turning that wizard's message into the created card, so reporting `expired`
|
|
86
|
+
* underneath it would retire the wizard and relabel the very message being
|
|
87
|
+
* finished.
|
|
88
|
+
*/
|
|
89
|
+
export declare function getReminderTextCaptureRoute(input: {
|
|
90
|
+
armedAtMs: number | null;
|
|
91
|
+
isClaimed: boolean;
|
|
92
|
+
nowMs: number;
|
|
93
|
+
}): ReminderTextCaptureRoute;
|
|
94
|
+
/**
|
|
95
|
+
* @name ReminderTextAcceptance
|
|
96
|
+
* @description Whether a captured reminder text can be kept.
|
|
97
|
+
* - `accept` — within {@link reminderTextMaxLength}; create the reminder.
|
|
98
|
+
* - `tooLong` — over it: nothing is saved, step 4 re-renders with the reason and
|
|
99
|
+
* the wait stays armed for a shorter retry.
|
|
100
|
+
*/
|
|
101
|
+
export type ReminderTextAcceptance = 'accept' | 'tooLong';
|
|
102
|
+
/**
|
|
103
|
+
* @description Bound the captured reminder text — the ONE gate both text sources
|
|
104
|
+
* (a typed message and a transcribed voice note) pass, since a transcript carries
|
|
105
|
+
* no length bound of its own.
|
|
106
|
+
*
|
|
107
|
+
* An over-long text is REJECTED, never truncated. Truncating would silently ship a
|
|
108
|
+
* reminder whose words are not the operator's, while accepting it breaks three
|
|
109
|
+
* screens at once: the "created" edit fails, so they still see step 4 and believe
|
|
110
|
+
* nothing happened; the card cannot be opened, which is the only place a delete
|
|
111
|
+
* button lives; and at fire time the announcement send fails while the run is
|
|
112
|
+
* still recorded as delivered.
|
|
113
|
+
*/
|
|
114
|
+
export declare function getReminderTextAcceptance(text: string): ReminderTextAcceptance;
|
|
115
|
+
/**
|
|
116
|
+
* @description Whether a wizard transition leaves the step-4 text wait ARMED.
|
|
117
|
+
* Only the two outcomes that end ON the text step do; every other outcome moves
|
|
118
|
+
* the wizard off step 4 and must disarm it.
|
|
119
|
+
*
|
|
120
|
+
* Load-bearing for «‹ Back» out of the text step: the screen then asks for a TIME
|
|
121
|
+
* again, so a wait left armed would capture the operator's next ordinary message
|
|
122
|
+
* and create the reminder from the very picks they went back to change — and that
|
|
123
|
+
* message never reaches the agent it was meant for.
|
|
124
|
+
*/
|
|
125
|
+
export declare function checkIsReminderTextWaitKept(transitionKind: ReminderWizardTransition['kind']): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* @name ReminderWizardTapRoute
|
|
128
|
+
* @description Where a tapped wizard button is routed.
|
|
129
|
+
* - `foreign` — it belongs to no live wizard (a different wizard's id, or none
|
|
130
|
+
* is live at all): answer "out of date" and strip THAT message's
|
|
131
|
+
* keyboard, since the screen it came from is dead.
|
|
132
|
+
* - `apply` — it belongs to the live wizard: hand it to
|
|
133
|
+
* `applyReminderWizardCallback`, which owns the remaining guard
|
|
134
|
+
* (an action that does not belong to the step now on screen).
|
|
135
|
+
*/
|
|
136
|
+
export type ReminderWizardTapRoute = 'foreign' | 'apply';
|
|
137
|
+
/**
|
|
138
|
+
* @description Split "this tap is from a dead screen" from "this tap is for the
|
|
139
|
+
* live wizard". The distinction is load-bearing for the recovery action, not just
|
|
140
|
+
* the message: stripping the keyboard is right for a dead screen and WRONG for
|
|
141
|
+
* the live wizard (a tap on a stale VIEW of the live wizard would otherwise leave
|
|
142
|
+
* the operator staring at a keyboard-less, unfinishable wizard).
|
|
143
|
+
*/
|
|
144
|
+
export declare function getReminderWizardTapRoute(input: {
|
|
145
|
+
liveWizardId: string | null;
|
|
146
|
+
callbackData: string;
|
|
147
|
+
}): ReminderWizardTapRoute;
|
|
148
|
+
//# sourceMappingURL=reminderFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reminderFlow.d.ts","sourceRoot":"","sources":["../../src/utils/reminderFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,eAAe,CAIlB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,wBAAwB,CAI3B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,wBAAwB,CAAC,MAAM,CAAC,GAC/C,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,sBAAsB,CAKzB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description The `/reminders` decisions that live OUTSIDE the pure wizard
|
|
4
|
+
* module because they depend on the bot's own surroundings rather than on the
|
|
5
|
+
* wizard's step machine: which hub screen to draw (a function of the scheduler's
|
|
6
|
+
* per-thread reminder cap), whether a step-4 text wait has expired or is already
|
|
7
|
+
* claimed by another inbound message, whether the captured text is short enough
|
|
8
|
+
* to keep, whether the wait survives a given wizard transition at all, and
|
|
9
|
+
* whether a tapped wizard button belongs to the wizard that is live right now.
|
|
10
|
+
*
|
|
11
|
+
* They are here rather than in `bot.ts` for the usual reason: `bot.ts` cannot be
|
|
12
|
+
* imported by a test (its module-scope `parseEnv()` exits the process), and each
|
|
13
|
+
* of these is a rule whose failure is silent — a hub that offers «add» at the cap
|
|
14
|
+
* is a dead end, an unexpired text wait swallows an ordinary message that should
|
|
15
|
+
* have reached the agent, an unclaimed one creates two reminders from one wizard,
|
|
16
|
+
* and a mis-routed stale tap feeds picks into the wrong wizard.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.reminderTextWaitMs = void 0;
|
|
20
|
+
exports.getReminderHubPlan = getReminderHubPlan;
|
|
21
|
+
exports.getReminderTextCaptureRoute = getReminderTextCaptureRoute;
|
|
22
|
+
exports.getReminderTextAcceptance = getReminderTextAcceptance;
|
|
23
|
+
exports.checkIsReminderTextWaitKept = checkIsReminderTextWaitKept;
|
|
24
|
+
exports.getReminderWizardTapRoute = getReminderWizardTapRoute;
|
|
25
|
+
const reminderWizard_1 = require("./reminderWizard");
|
|
26
|
+
/**
|
|
27
|
+
* How long step 4 keeps waiting for the reminder text. The wait INTERCEPTS every
|
|
28
|
+
* plain message in the topic, so it must expire: an abandoned wizard would
|
|
29
|
+
* otherwise swallow, hours later, a message the operator meant for the agent.
|
|
30
|
+
* 15 minutes is long enough to finish typing and short enough that nobody has
|
|
31
|
+
* forgotten what they were doing.
|
|
32
|
+
*/
|
|
33
|
+
exports.reminderTextWaitMs = 15 * 60 * 1000;
|
|
34
|
+
/**
|
|
35
|
+
* @description Decide the hub screen. At (or past) the per-thread REMINDER cap
|
|
36
|
+
* the «add» button is NOT offered: the create would be rejected by the store, so
|
|
37
|
+
* a button that can only fail is worse than no button — provided the screen says
|
|
38
|
+
* why, which is what the `atLimit` body is for.
|
|
39
|
+
*
|
|
40
|
+
* The comparison must be the one `createScheduleForThread` makes, or the hub walks
|
|
41
|
+
* the operator through all four steps and only then hits a rejection. That store
|
|
42
|
+
* counts a reminder against the REMINDER cap alone, so the topic's agent-prompt
|
|
43
|
+
* jobs are irrelevant here — a topic full of `/schedule` jobs still has room for
|
|
44
|
+
* reminders.
|
|
45
|
+
*
|
|
46
|
+
* A non-positive cap is treated as "at the limit" rather than special-cased: it
|
|
47
|
+
* is the same user-visible truth (nothing more can be created).
|
|
48
|
+
*/
|
|
49
|
+
function getReminderHubPlan(input) {
|
|
50
|
+
const isAtLimit = input.reminderCount >= input.maxReminders;
|
|
51
|
+
if (isAtLimit)
|
|
52
|
+
return { body: 'atLimit', isAddOffered: false };
|
|
53
|
+
return { body: input.reminderCount === 0 ? 'empty' : 'active', isAddOffered: true };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @description Route an inbound message against the step-4 wait. `armedAtMs` is
|
|
57
|
+
* `null` whenever no wizard is on the text step (never armed, already finished,
|
|
58
|
+
* cancelled). Takes the instant as an argument so the window is testable without
|
|
59
|
+
* a clock.
|
|
60
|
+
*
|
|
61
|
+
* `isClaimed` is what makes the wait single-use. Telegraf handles updates
|
|
62
|
+
* CONCURRENTLY and only the voice path is serialized per thread, so two messages
|
|
63
|
+
* arriving together would both route `capture` and create two reminders from one
|
|
64
|
+
* wizard; the caller claims the wait synchronously before its first `await`, and
|
|
65
|
+
* the loser lands here as `claimed`.
|
|
66
|
+
*
|
|
67
|
+
* `claimed` is checked BEFORE the window: a claim means the winner is already
|
|
68
|
+
* turning that wizard's message into the created card, so reporting `expired`
|
|
69
|
+
* underneath it would retire the wizard and relabel the very message being
|
|
70
|
+
* finished.
|
|
71
|
+
*/
|
|
72
|
+
function getReminderTextCaptureRoute(input) {
|
|
73
|
+
if (input.armedAtMs === null)
|
|
74
|
+
return 'notArmed';
|
|
75
|
+
if (input.isClaimed)
|
|
76
|
+
return 'claimed';
|
|
77
|
+
return input.nowMs - input.armedAtMs >= exports.reminderTextWaitMs ? 'expired' : 'capture';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @description Bound the captured reminder text — the ONE gate both text sources
|
|
81
|
+
* (a typed message and a transcribed voice note) pass, since a transcript carries
|
|
82
|
+
* no length bound of its own.
|
|
83
|
+
*
|
|
84
|
+
* An over-long text is REJECTED, never truncated. Truncating would silently ship a
|
|
85
|
+
* reminder whose words are not the operator's, while accepting it breaks three
|
|
86
|
+
* screens at once: the "created" edit fails, so they still see step 4 and believe
|
|
87
|
+
* nothing happened; the card cannot be opened, which is the only place a delete
|
|
88
|
+
* button lives; and at fire time the announcement send fails while the run is
|
|
89
|
+
* still recorded as delivered.
|
|
90
|
+
*/
|
|
91
|
+
function getReminderTextAcceptance(text) {
|
|
92
|
+
return text.length > reminderWizard_1.reminderTextMaxLength ? 'tooLong' : 'accept';
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @description Whether a wizard transition leaves the step-4 text wait ARMED.
|
|
96
|
+
* Only the two outcomes that end ON the text step do; every other outcome moves
|
|
97
|
+
* the wizard off step 4 and must disarm it.
|
|
98
|
+
*
|
|
99
|
+
* Load-bearing for «‹ Back» out of the text step: the screen then asks for a TIME
|
|
100
|
+
* again, so a wait left armed would capture the operator's next ordinary message
|
|
101
|
+
* and create the reminder from the very picks they went back to change — and that
|
|
102
|
+
* message never reaches the agent it was meant for.
|
|
103
|
+
*/
|
|
104
|
+
function checkIsReminderTextWaitKept(transitionKind) {
|
|
105
|
+
return transitionKind === 'awaitText' || transitionKind === 'createNow';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @description Split "this tap is from a dead screen" from "this tap is for the
|
|
109
|
+
* live wizard". The distinction is load-bearing for the recovery action, not just
|
|
110
|
+
* the message: stripping the keyboard is right for a dead screen and WRONG for
|
|
111
|
+
* the live wizard (a tap on a stale VIEW of the live wizard would otherwise leave
|
|
112
|
+
* the operator staring at a keyboard-less, unfinishable wizard).
|
|
113
|
+
*/
|
|
114
|
+
function getReminderWizardTapRoute(input) {
|
|
115
|
+
if (input.liveWizardId === null)
|
|
116
|
+
return 'foreign';
|
|
117
|
+
const parsed = (0, reminderWizard_1.parseReminderWizardCallback)(input.callbackData);
|
|
118
|
+
if (parsed === null || parsed.wizardId !== input.liveWizardId)
|
|
119
|
+
return 'foreign';
|
|
120
|
+
return 'apply';
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=reminderFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reminderFlow.js","sourceRoot":"","sources":["../../src/utils/reminderFlow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAgDH,gDAOC;AAiCD,kEAQC;AAuBD,8DAEC;AAYD,kEAIC;AAqBD,8DAQC;AApKD,qDAI0B;AAE1B;;;;;;GAMG;AACU,QAAA,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAkBjD;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kBAAkB,CAAC,KAGlC;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC;IAC5D,IAAI,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtF,CAAC;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,2BAA2B,CAAC,KAI3C;IACC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAChD,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,0BAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC;AAWD;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,OAAO,IAAI,CAAC,MAAM,GAAG,sCAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,2BAA2B,CACzC,cAAgD;IAEhD,OAAO,cAAc,KAAK,WAAW,IAAI,cAAc,KAAK,WAAW,CAAC;AAC1E,CAAC;AAcD;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,KAGzC;IACC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,4CAA2B,EAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAChF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|