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,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Reusable agent→Telegram file-send pipeline. The factory owns the
|
|
4
|
+
* impure path resolution/snapshot work and executes the pure plan/request through
|
|
5
|
+
* an injected typed gateway. Each canonical file is opened component-by-component
|
|
6
|
+
* beneath a pinned root descriptor, identity-checked, and owned through delivery bookkeeping.
|
|
7
|
+
* Bot-specific stream creation and routing stay in the gateway; pacing/retry is
|
|
8
|
+
* injected through `executeDelivery`. The service imports neither MCP nor Telegraf.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.fileSendSnapshotConcurrency = exports.FileSendDeliveryUnknownError = void 0;
|
|
45
|
+
exports.getFileDescriptorPathRoot = getFileDescriptorPathRoot;
|
|
46
|
+
exports.readTelegramFileSnapshot = readTelegramFileSnapshot;
|
|
47
|
+
exports.createSendFilesToThread = createSendFilesToThread;
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const utils_1 = require("../utils");
|
|
51
|
+
const abortableFifo_1 = require("./abortableFifo");
|
|
52
|
+
const fileSendPlan_1 = require("./fileSendPlan");
|
|
53
|
+
/** Telegram may have accepted the request, but the response never confirmed it. */
|
|
54
|
+
class FileSendDeliveryUnknownError extends Error {
|
|
55
|
+
constructor(cause) {
|
|
56
|
+
super(`Telegram delivery outcome is unknown: ${cause.message}`, { cause });
|
|
57
|
+
this.name = 'FileSendDeliveryUnknownError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.FileSendDeliveryUnknownError = FileSendDeliveryUnknownError;
|
|
61
|
+
/** Bound descriptor-owning operations while Telegram's own queues are occupied. */
|
|
62
|
+
exports.fileSendSnapshotConcurrency = 4;
|
|
63
|
+
/** Linux exposes descriptor-relative child lookup; other platforms fail closed. */
|
|
64
|
+
function getFileDescriptorPathRoot(platform) {
|
|
65
|
+
return platform === 'linux' ? '/proc/self/fd' : null;
|
|
66
|
+
}
|
|
67
|
+
const fileDescriptorPathRoot = getFileDescriptorPathRoot(process.platform);
|
|
68
|
+
const directoryOpenFlags = fs.constants.O_RDONLY |
|
|
69
|
+
fs.constants.O_DIRECTORY |
|
|
70
|
+
fs.constants.O_NOFOLLOW |
|
|
71
|
+
fs.constants.O_NONBLOCK;
|
|
72
|
+
const fileOpenFlags = fs.constants.O_RDONLY |
|
|
73
|
+
fs.constants.O_NOFOLLOW |
|
|
74
|
+
fs.constants.O_NONBLOCK;
|
|
75
|
+
/** Canonicalize and pin the operation root before resolving any send item. */
|
|
76
|
+
function openPinnedFileSendRoot(workDir) {
|
|
77
|
+
if (fileDescriptorPathRoot === null) {
|
|
78
|
+
throw new Error(`secure file sending is unsupported on ${process.platform}`);
|
|
79
|
+
}
|
|
80
|
+
const rootPath = fs.realpathSync(workDir);
|
|
81
|
+
return {
|
|
82
|
+
rootPath,
|
|
83
|
+
fd: fs.openSync(rootPath, directoryOpenFlags),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Close one descriptor and return a readable failure instead of throwing. */
|
|
87
|
+
function closeFileDescriptor(fileDescriptor) {
|
|
88
|
+
try {
|
|
89
|
+
fs.closeSync(fileDescriptor);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const errorMessage = error instanceof Error ? error.message : 'unknown error';
|
|
94
|
+
return `cannot close file descriptor: ${errorMessage}`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Address one child through its already-open parent directory descriptor. */
|
|
98
|
+
function getDescriptorChildPath(parentDescriptor, childName) {
|
|
99
|
+
if (fileDescriptorPathRoot === null) {
|
|
100
|
+
throw new Error(`secure file sending is unsupported on ${process.platform}`);
|
|
101
|
+
}
|
|
102
|
+
return path.posix.join(fileDescriptorPathRoot, parentDescriptor.toString(), childName);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Open a canonical file beneath its canonical root without resolving any
|
|
106
|
+
* caller-controlled parent component twice. Each directory descriptor pins the
|
|
107
|
+
* next lookup, and O_NOFOLLOW rejects a component swapped to a symlink.
|
|
108
|
+
*/
|
|
109
|
+
function openFileBeneathRoot(pinnedRoot, absPath) {
|
|
110
|
+
const relativePath = path.relative(pinnedRoot.rootPath, absPath);
|
|
111
|
+
if (relativePath.length === 0 ||
|
|
112
|
+
relativePath === '..' ||
|
|
113
|
+
relativePath.startsWith(`..${path.sep}`) ||
|
|
114
|
+
path.isAbsolute(relativePath)) {
|
|
115
|
+
throw new Error(`file is outside its validated root: ${absPath}`);
|
|
116
|
+
}
|
|
117
|
+
if (fileDescriptorPathRoot === null) {
|
|
118
|
+
throw new Error(`secure file sending is unsupported on ${process.platform}`);
|
|
119
|
+
}
|
|
120
|
+
const pathComponents = relativePath.split(path.sep);
|
|
121
|
+
const fileName = pathComponents[pathComponents.length - 1];
|
|
122
|
+
const directoryComponents = pathComponents.slice(0, -1);
|
|
123
|
+
const directoryDescriptors = [];
|
|
124
|
+
let fileDescriptor = null;
|
|
125
|
+
let openError = null;
|
|
126
|
+
try {
|
|
127
|
+
let parentDescriptor = pinnedRoot.fd;
|
|
128
|
+
for (const directoryName of directoryComponents) {
|
|
129
|
+
parentDescriptor = fs.openSync(getDescriptorChildPath(parentDescriptor, directoryName), directoryOpenFlags);
|
|
130
|
+
directoryDescriptors.push(parentDescriptor);
|
|
131
|
+
}
|
|
132
|
+
fileDescriptor = fs.openSync(getDescriptorChildPath(parentDescriptor, fileName), fileOpenFlags);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
openError = error instanceof Error ? error.message : 'unknown error';
|
|
136
|
+
}
|
|
137
|
+
let closeError = null;
|
|
138
|
+
for (const directoryDescriptor of directoryDescriptors.reverse()) {
|
|
139
|
+
const descriptorCloseError = closeFileDescriptor(directoryDescriptor);
|
|
140
|
+
if (closeError === null && descriptorCloseError !== null) {
|
|
141
|
+
closeError = descriptorCloseError;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (openError !== null || closeError !== null || fileDescriptor === null) {
|
|
145
|
+
if (fileDescriptor !== null) {
|
|
146
|
+
const descriptorCloseError = closeFileDescriptor(fileDescriptor);
|
|
147
|
+
if (closeError === null && descriptorCloseError !== null) {
|
|
148
|
+
closeError = descriptorCloseError;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
throw new Error([openError, closeError, fileDescriptor === null && openError === null ? 'file open failed' : null]
|
|
152
|
+
.filter((errorMessage) => errorMessage !== null)
|
|
153
|
+
.join('; '));
|
|
154
|
+
}
|
|
155
|
+
return fileDescriptor;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* @description Open one already-canonical path beneath its pinned canonical root
|
|
159
|
+
* without following swapped parent/final symlinks, validate the opened object's
|
|
160
|
+
* bigint device/inode identity and size, then transfer ownership of the still-open
|
|
161
|
+
* descriptor to the caller. Every failure closes the descriptor before returning.
|
|
162
|
+
*/
|
|
163
|
+
function readTelegramFileSnapshot(absPath, expectedIdentity, pinnedRoot) {
|
|
164
|
+
let fileDescriptor = null;
|
|
165
|
+
let result;
|
|
166
|
+
try {
|
|
167
|
+
fileDescriptor = openFileBeneathRoot(pinnedRoot, absPath);
|
|
168
|
+
const fileStat = fs.fstatSync(fileDescriptor, { bigint: true });
|
|
169
|
+
if (!fileStat.isFile()) {
|
|
170
|
+
result = { ok: false, kind: 'read', error: `not a regular file: ${absPath}` };
|
|
171
|
+
}
|
|
172
|
+
else if (fileStat.dev !== expectedIdentity.dev || fileStat.ino !== expectedIdentity.ino) {
|
|
173
|
+
result = { ok: false, kind: 'read', error: `file changed after validation: ${absPath}` };
|
|
174
|
+
}
|
|
175
|
+
else if (fileStat.size > BigInt(fileSendPlan_1.telegramSendMaxBytes)) {
|
|
176
|
+
result = {
|
|
177
|
+
ok: false,
|
|
178
|
+
kind: 'oversize',
|
|
179
|
+
error: (0, fileSendPlan_1.getTelegramFileOversizeError)(absPath),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
result = {
|
|
184
|
+
ok: true,
|
|
185
|
+
source: {
|
|
186
|
+
fd: fileDescriptor,
|
|
187
|
+
filename: (0, fileSendPlan_1.getTelegramUploadFilename)(absPath),
|
|
188
|
+
sizeBytes: Number(fileStat.size),
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const errorMessage = error instanceof Error ? error.message : 'unknown error';
|
|
195
|
+
result = { ok: false, kind: 'read', error: errorMessage };
|
|
196
|
+
}
|
|
197
|
+
if (!result.ok && fileDescriptor !== null) {
|
|
198
|
+
const descriptorCloseError = closeFileDescriptor(fileDescriptor);
|
|
199
|
+
if (descriptorCloseError !== null) {
|
|
200
|
+
return {
|
|
201
|
+
ok: false,
|
|
202
|
+
kind: 'read',
|
|
203
|
+
error: `${result.error}; ${descriptorCloseError}`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
const messageIdRecordingWarning = 'Telegram delivery succeeded, but message IDs could not be recorded';
|
|
210
|
+
const descriptorCleanupWarning = 'Telegram delivery succeeded, but local descriptor cleanup failed';
|
|
211
|
+
/** Preserve the normal success summary while surfacing a post-delivery local failure. */
|
|
212
|
+
function appendFileSendWarning(summary, warning) {
|
|
213
|
+
return `${summary} Warning: ${warning}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* @description Compose the complete file-send operation around a target/workdir
|
|
217
|
+
* resolver and Telegram gateway. A gateway return confirms delivery; subsequent
|
|
218
|
+
* message-id persistence or descriptor cleanup failures are success warnings so
|
|
219
|
+
* callers do not retry and duplicate an already-delivered message or album.
|
|
220
|
+
*/
|
|
221
|
+
function createSendFilesToThread(deps) {
|
|
222
|
+
let activeSnapshotOperations = 0;
|
|
223
|
+
const snapshotOperationWaiters = new abortableFifo_1.AbortableFifo();
|
|
224
|
+
async function executeWithSnapshotSlot(operation, signal) {
|
|
225
|
+
if (signal?.aborted)
|
|
226
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
227
|
+
if (activeSnapshotOperations < exports.fileSendSnapshotConcurrency) {
|
|
228
|
+
activeSnapshotOperations += 1;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
await snapshotOperationWaiters.wait(signal);
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
if (signal?.aborted)
|
|
235
|
+
throw (0, utils_1.getAbortError)(signal);
|
|
236
|
+
return await operation();
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
if (!snapshotOperationWaiters.resolveNext()) {
|
|
240
|
+
activeSnapshotOperations -= 1;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return async (threadKey, options) => executeWithSnapshotSlot(async () => {
|
|
245
|
+
const ownedFileDescriptors = [];
|
|
246
|
+
const ownedRoot = { pinnedRoot: null };
|
|
247
|
+
let operationResult;
|
|
248
|
+
let closeError = null;
|
|
249
|
+
try {
|
|
250
|
+
operationResult = await (async () => {
|
|
251
|
+
const targetResolution = deps.resolveTargetAndWorkDir(threadKey);
|
|
252
|
+
if (!targetResolution.ok)
|
|
253
|
+
return { ok: false, error: targetResolution.error };
|
|
254
|
+
const { target, workDir } = targetResolution;
|
|
255
|
+
if (options.authorizedWorkDir !== undefined &&
|
|
256
|
+
workDir !== options.authorizedWorkDir) {
|
|
257
|
+
return {
|
|
258
|
+
ok: false,
|
|
259
|
+
error: 'thread is no longer bound to the authorized directory',
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
const countError = (0, fileSendPlan_1.getFileSendCountError)(options.paths.length);
|
|
263
|
+
if (countError !== null)
|
|
264
|
+
return { ok: false, error: countError };
|
|
265
|
+
const pinnedRoot = openPinnedFileSendRoot(workDir);
|
|
266
|
+
ownedRoot.pinnedRoot = pinnedRoot;
|
|
267
|
+
const items = [];
|
|
268
|
+
const readFileSnapshot = deps.readFileSnapshot ?? readTelegramFileSnapshot;
|
|
269
|
+
for (const rawPath of options.paths) {
|
|
270
|
+
const resolved = (0, fileSendPlan_1.resolveSendFileWithinDir)(workDir, rawPath, pinnedRoot.rootPath);
|
|
271
|
+
if (!resolved.ok)
|
|
272
|
+
return { ok: false, error: resolved.error };
|
|
273
|
+
const snapshot = readFileSnapshot(resolved.absPath, resolved.identity, pinnedRoot);
|
|
274
|
+
if (!snapshot.ok) {
|
|
275
|
+
return {
|
|
276
|
+
ok: false,
|
|
277
|
+
error: snapshot.kind === 'oversize'
|
|
278
|
+
? snapshot.error
|
|
279
|
+
: `cannot read ${rawPath}: ${snapshot.error}`,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
ownedFileDescriptors.push(snapshot.source.fd);
|
|
283
|
+
items.push({
|
|
284
|
+
absPath: resolved.absPath,
|
|
285
|
+
source: snapshot.source,
|
|
286
|
+
kind: (0, fileSendPlan_1.classifyFileSendKind)(resolved.absPath),
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
const plan = (0, fileSendPlan_1.planFileSend)(items, options.asFile ?? false);
|
|
290
|
+
if (plan.kind === 'error')
|
|
291
|
+
return { ok: false, error: plan.error };
|
|
292
|
+
const request = (0, fileSendPlan_1.buildTelegramFileSendRequest)(plan, options.caption);
|
|
293
|
+
const executeDelivery = deps.executeDelivery ?? ((_target, delivery) => delivery());
|
|
294
|
+
return executeDelivery(target, async () => {
|
|
295
|
+
let deliveryTarget = target;
|
|
296
|
+
if (options.authorizedWorkDir !== undefined) {
|
|
297
|
+
const currentTargetResolution = deps.resolveTargetAndWorkDir(threadKey);
|
|
298
|
+
if (!currentTargetResolution.ok) {
|
|
299
|
+
return { ok: false, error: currentTargetResolution.error };
|
|
300
|
+
}
|
|
301
|
+
if (currentTargetResolution.workDir !== options.authorizedWorkDir) {
|
|
302
|
+
return {
|
|
303
|
+
ok: false,
|
|
304
|
+
error: 'thread is no longer bound to the authorized directory',
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
deliveryTarget = currentTargetResolution.target;
|
|
308
|
+
}
|
|
309
|
+
const requestMethod = request.method;
|
|
310
|
+
let gatewayResult;
|
|
311
|
+
switch (requestMethod) {
|
|
312
|
+
case 'sendPhoto':
|
|
313
|
+
gatewayResult = await deps.gateway.sendPhoto(deliveryTarget, request.source, request.caption, options.signal);
|
|
314
|
+
break;
|
|
315
|
+
case 'sendAnimation':
|
|
316
|
+
gatewayResult = await deps.gateway.sendAnimation(deliveryTarget, request.source, request.caption, options.signal);
|
|
317
|
+
break;
|
|
318
|
+
case 'sendVideo':
|
|
319
|
+
gatewayResult = await deps.gateway.sendVideo(deliveryTarget, request.source, request.caption, options.signal);
|
|
320
|
+
break;
|
|
321
|
+
case 'sendDocument':
|
|
322
|
+
gatewayResult = await deps.gateway.sendDocument(deliveryTarget, request.source, request.caption, options.signal);
|
|
323
|
+
break;
|
|
324
|
+
case 'sendMediaGroup':
|
|
325
|
+
gatewayResult = await deps.gateway.sendMediaGroup(deliveryTarget, request.mediaGroup, options.signal);
|
|
326
|
+
break;
|
|
327
|
+
default: {
|
|
328
|
+
const unsupportedMethod = requestMethod;
|
|
329
|
+
throw new Error(`Unsupported file send method: ${unsupportedMethod}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
const summary = `Sent ${items.length} file(s) to the topic.`;
|
|
333
|
+
try {
|
|
334
|
+
await deps.recordMessageIds(deliveryTarget, gatewayResult.messageIds);
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
const errorMessage = error instanceof Error ? error.message : 'unknown error';
|
|
338
|
+
return {
|
|
339
|
+
ok: true,
|
|
340
|
+
summary: appendFileSendWarning(summary, `${messageIdRecordingWarning}: ${errorMessage}`),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
return { ok: true, summary };
|
|
344
|
+
}, options.signal);
|
|
345
|
+
})();
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
if (error instanceof FileSendDeliveryUnknownError) {
|
|
349
|
+
operationResult = {
|
|
350
|
+
ok: false,
|
|
351
|
+
kind: 'deliveryUnknown',
|
|
352
|
+
error: `${error.message}. Telegram may already have accepted this delivery; MUST NOT retry automatically.`,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
if (options.signal?.aborted)
|
|
357
|
+
throw (0, utils_1.getAbortError)(options.signal);
|
|
358
|
+
const errorMessage = error instanceof Error ? error.message : 'unknown error';
|
|
359
|
+
operationResult = { ok: false, error: errorMessage };
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
finally {
|
|
363
|
+
for (const fileDescriptor of ownedFileDescriptors) {
|
|
364
|
+
const descriptorCloseError = closeFileDescriptor(fileDescriptor);
|
|
365
|
+
if (closeError === null && descriptorCloseError !== null) {
|
|
366
|
+
closeError = descriptorCloseError;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
if (ownedRoot.pinnedRoot !== null) {
|
|
370
|
+
const descriptorCloseError = closeFileDescriptor(ownedRoot.pinnedRoot.fd);
|
|
371
|
+
if (closeError === null && descriptorCloseError !== null) {
|
|
372
|
+
closeError = descriptorCloseError;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
if (closeError !== null) {
|
|
377
|
+
return operationResult.ok
|
|
378
|
+
? {
|
|
379
|
+
ok: true,
|
|
380
|
+
summary: appendFileSendWarning(operationResult.summary, `${descriptorCleanupWarning}: ${closeError}`),
|
|
381
|
+
}
|
|
382
|
+
: { ...operationResult, error: `${operationResult.error}; ${closeError}` };
|
|
383
|
+
}
|
|
384
|
+
return operationResult;
|
|
385
|
+
}, options.signal);
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=fileSendService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSendService.js","sourceRoot":"","sources":["../../src/utils/fileSendService.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHH,8DAEC;AAuHD,4DA8CC;AAkBD,0DA4MC;AAtfD,uCAAyB;AACzB,2CAA6B;AAC7B,oCAAyC;AACzC,mDAAgD;AAChD,iDAawB;AAgBxB,mFAAmF;AACnF,MAAa,4BAA6B,SAAQ,KAAK;IACrD,YAAY,KAAY;QACtB,KAAK,CAAC,yCAAyC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AALD,oEAKC;AAiED,mFAAmF;AACtE,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAO7C,mFAAmF;AACnF,SAAgB,yBAAyB,CAAC,QAAyB;IACjE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE3E,MAAM,kBAAkB,GACtB,EAAE,CAAC,SAAS,CAAC,QAAQ;IACrB,EAAE,CAAC,SAAS,CAAC,WAAW;IACxB,EAAE,CAAC,SAAS,CAAC,UAAU;IACvB,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;AAE1B,MAAM,aAAa,GACjB,EAAE,CAAC,SAAS,CAAC,QAAQ;IACrB,EAAE,CAAC,SAAS,CAAC,UAAU;IACvB,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;AAE1B,8EAA8E;AAC9E,SAAS,sBAAsB,CAAC,OAAe;IAC7C,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ;QACR,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,mBAAmB,CAAC,cAAsB;IACjD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,OAAO,iCAAiC,YAAY,EAAE,CAAC;IACzD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB,CAAC,gBAAwB,EAAE,SAAiB;IACzE,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,UAA8B,EAAE,OAAe;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,IACE,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,KAAK,IAAI;QACrB,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAa,EAAE,CAAC;IAC1C,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,IAAI,gBAAgB,GAAG,UAAU,CAAC,EAAE,CAAC;QACrC,KAAK,MAAM,aAAa,IAAI,mBAAmB,EAAE,CAAC;YAChD,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAC5B,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,EACvD,kBAAkB,CACnB,CAAC;YACF,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,CAAC;QACD,cAAc,GAAG,EAAE,CAAC,QAAQ,CAC1B,sBAAsB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAClD,aAAa,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IACvE,CAAC;IAED,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,KAAK,MAAM,mBAAmB,IAAI,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACtE,IAAI,UAAU,KAAK,IAAI,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACzD,UAAU,GAAG,oBAAoB,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QACzE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,UAAU,KAAK,IAAI,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;gBACzD,UAAU,GAAG,oBAAoB,CAAC;YACpC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CACb,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;aAC/F,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CACtC,OAAe,EACf,gBAA8B,EAC9B,UAA8B;IAE9B,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,MAAkC,CAAC;IACvC,IAAI,CAAC;QACH,cAAc,GAAG,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvB,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,OAAO,EAAE,EAAE,CAAC;QAChF,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,KAAK,gBAAgB,CAAC,GAAG,EAAE,CAAC;YAC1F,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kCAAkC,OAAO,EAAE,EAAE,CAAC;QAC3F,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,mCAAoB,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG;gBACP,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,IAAA,2CAA4B,EAAC,OAAO,CAAC;aAC7C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG;gBACP,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,cAAc;oBAClB,QAAQ,EAAE,IAAA,wCAAyB,EAAC,OAAO,CAAC;oBAC5C,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;iBACjC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,oBAAoB,EAAE;aAClD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,yBAAyB,GAC7B,oEAAoE,CAAC;AACvE,MAAM,wBAAwB,GAC5B,kEAAkE,CAAC;AAErE,yFAAyF;AACzF,SAAS,qBAAqB,CAAC,OAAe,EAAE,OAAe;IAC7D,OAAO,GAAG,OAAO,aAAa,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,IAAoC;IAEpC,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,MAAM,wBAAwB,GAAG,IAAI,6BAAa,EAAE,CAAC;IAErD,KAAK,UAAU,uBAAuB,CACpC,SAAiC,EACjC,MAAoB;QAEpB,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC;QACjD,IAAI,wBAAwB,GAAG,mCAA2B,EAAE,CAAC;YAC3D,wBAAwB,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC;YACH,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC;YACjD,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC5C,wBAAwB,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,IAAI,EAAE;QACtE,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAC1C,MAAM,SAAS,GAA8C,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAClF,IAAI,eAAwC,CAAC;QAC7C,IAAI,UAAU,GAAkB,IAAI,CAAC;QAErC,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,CAAC,KAAK,IAAsC,EAAE;gBACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;gBACjE,IAAI,CAAC,gBAAgB,CAAC,EAAE;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC9E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC;gBAC7C,IACE,OAAO,CAAC,iBAAiB,KAAK,SAAS;oBACvC,OAAO,KAAK,OAAO,CAAC,iBAAiB,EACrC,CAAC;oBACD,OAAO;wBACL,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,uDAAuD;qBAC/D,CAAC;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,IAAA,oCAAqB,EAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,UAAU,KAAK,IAAI;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;gBAEjE,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACnD,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;gBAClC,MAAM,KAAK,GAAmB,EAAE,CAAC;gBACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,wBAAwB,CAAC;gBAC3E,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,IAAA,uCAAwB,EACvC,OAAO,EACP,OAAO,EACP,UAAU,CAAC,QAAQ,CACpB,CAAC;oBACF,IAAI,CAAC,QAAQ,CAAC,EAAE;wBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAE9D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBACnF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,OAAO;4BACL,EAAE,EAAE,KAAK;4BACT,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,UAAU;gCACjC,CAAC,CAAC,QAAQ,CAAC,KAAK;gCAChB,CAAC,CAAC,eAAe,OAAO,KAAK,QAAQ,CAAC,KAAK,EAAE;yBAChD,CAAC;oBACJ,CAAC;oBACD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC9C,KAAK,CAAC,IAAI,CAAC;wBACT,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,IAAI,EAAE,IAAA,mCAAoB,EAAC,QAAQ,CAAC,OAAO,CAAC;qBAC7C,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,IAAA,2BAAY,EAAC,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEnE,MAAM,OAAO,GAAG,IAAA,2CAA4B,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpF,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;oBACxC,IAAI,cAAc,GAAG,MAAM,CAAC;oBAC5B,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBAC5C,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;wBACxE,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,CAAC;4BAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,CAAC,KAAK,EAAE,CAAC;wBAC7D,CAAC;wBACD,IAAI,uBAAuB,CAAC,OAAO,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC;4BAClE,OAAO;gCACL,EAAE,EAAE,KAAK;gCACT,KAAK,EAAE,uDAAuD;6BAC/D,CAAC;wBACJ,CAAC;wBACD,cAAc,GAAG,uBAAuB,CAAC,MAAM,CAAC;oBAClD,CAAC;oBAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;oBACrC,IAAI,aAAoC,CAAC;oBACzC,QAAQ,aAAa,EAAE,CAAC;wBACtB,KAAK,WAAW;4BACd,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAC1C,cAAc,EACd,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;4BACF,MAAM;wBACR,KAAK,eAAe;4BAClB,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAC9C,cAAc,EACd,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;4BACF,MAAM;wBACR,KAAK,WAAW;4BACd,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAC1C,cAAc,EACd,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;4BACF,MAAM;wBACR,KAAK,cAAc;4BACjB,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAC7C,cAAc,EACd,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,CACf,CAAC;4BACF,MAAM;wBACR,KAAK,gBAAgB;4BACnB,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC/C,cAAc,EACd,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,CACf,CAAC;4BACF,MAAM;wBACR,OAAO,CAAC,CAAC,CAAC;4BACR,MAAM,iBAAiB,GAAU,aAAa,CAAC;4BAC/C,MAAM,IAAI,KAAK,CAAC,iCAAiC,iBAAiB,EAAE,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC;oBACD,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,MAAM,wBAAwB,CAAC;oBAC7D,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;oBACxE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;wBAC9E,OAAO;4BACL,EAAE,EAAE,IAAI;4BACR,OAAO,EAAE,qBAAqB,CAC5B,OAAO,EACP,GAAG,yBAAyB,KAAK,YAAY,EAAE,CAChD;yBACF,CAAC;oBACJ,CAAC;oBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC/B,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,4BAA4B,EAAE,CAAC;gBAClD,eAAe,GAAG;oBAChB,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,iBAAiB;oBACvB,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,mFAAmF;iBAC3G,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;oBAAE,MAAM,IAAA,qBAAa,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC9E,eAAe,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,KAAK,MAAM,cAAc,IAAI,oBAAoB,EAAE,CAAC;gBAClD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBACjE,IAAI,UAAU,KAAK,IAAI,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;oBACzD,UAAU,GAAG,oBAAoB,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAClC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC1E,IAAI,UAAU,KAAK,IAAI,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;oBACzD,UAAU,GAAG,oBAAoB,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO,eAAe,CAAC,EAAE;gBACvB,CAAC,CAAC;oBACA,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,qBAAqB,CAC5B,eAAe,CAAC,OAAO,EACvB,GAAG,wBAAwB,KAAK,UAAU,EAAE,CAC7C;iBACF;gBACD,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,KAAK,KAAK,UAAU,EAAE,EAAE,CAAC;QAC/E,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision for the GROUP output transport's `finalizeInFlight`
|
|
3
|
+
* (S2): given the thread's coalesced output-queue state at a settle/teardown
|
|
4
|
+
* boundary, decide whether there is an unsent remainder to force-deliver (so the
|
|
5
|
+
* agent's final answer is never discarded) or the turn is already fully
|
|
6
|
+
* delivered (a no-op — no duplicate post).
|
|
7
|
+
*
|
|
8
|
+
* Extracted from `bot.ts`'s `finalizeGroupOutput` so the "remainder vs no-op"
|
|
9
|
+
* + importance decision is unit-testable without the Telegraf / queue
|
|
10
|
+
* machinery. The bot-side function owns the imperative drain (snapshot + null
|
|
11
|
+
* the buffer, then `sendOutputImmediate`); this owns only the decision.
|
|
12
|
+
*
|
|
13
|
+
* The group queue already SEPARATES what landed from what is pending:
|
|
14
|
+
* `lastMessageText` holds the last landed message and `pendingOutput` holds the
|
|
15
|
+
* coalesced-but-unsent remainder. So the "reconcile final accumulated vs last
|
|
16
|
+
* landed" reduces to: send `pendingOutput` if it is non-empty. No text diff is
|
|
17
|
+
* needed — the queue is the single source of the remainder.
|
|
18
|
+
*/
|
|
19
|
+
/** The load-bearing fields of `bot.ts`'s `OutputQueueState` the decision needs. */
|
|
20
|
+
export interface GroupFinalizeInput {
|
|
21
|
+
/** Coalesced, not-yet-sent agent output. `null` = nothing pending. */
|
|
22
|
+
pendingOutput: string | null;
|
|
23
|
+
/** Whether the FIRST batch in `pendingOutput` continues the last sent message. */
|
|
24
|
+
pendingIsContinuation: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @description The finalize plan: either nothing to do (fully delivered), or the
|
|
28
|
+
* exact remainder to send and how.
|
|
29
|
+
*/
|
|
30
|
+
export type GroupFinalizePlan = {
|
|
31
|
+
action: 'noop';
|
|
32
|
+
} | {
|
|
33
|
+
action: 'send';
|
|
34
|
+
text: string;
|
|
35
|
+
isContinuation: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare function getGroupFinalizePlan(input: GroupFinalizeInput): GroupFinalizePlan;
|
|
38
|
+
//# sourceMappingURL=groupFinalizePlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupFinalizePlan.d.ts","sourceRoot":"","sources":["../../src/utils/groupFinalizePlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kFAAkF;IAClF,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAYjF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decision for the GROUP output transport's `finalizeInFlight`
|
|
4
|
+
* (S2): given the thread's coalesced output-queue state at a settle/teardown
|
|
5
|
+
* boundary, decide whether there is an unsent remainder to force-deliver (so the
|
|
6
|
+
* agent's final answer is never discarded) or the turn is already fully
|
|
7
|
+
* delivered (a no-op — no duplicate post).
|
|
8
|
+
*
|
|
9
|
+
* Extracted from `bot.ts`'s `finalizeGroupOutput` so the "remainder vs no-op"
|
|
10
|
+
* + importance decision is unit-testable without the Telegraf / queue
|
|
11
|
+
* machinery. The bot-side function owns the imperative drain (snapshot + null
|
|
12
|
+
* the buffer, then `sendOutputImmediate`); this owns only the decision.
|
|
13
|
+
*
|
|
14
|
+
* The group queue already SEPARATES what landed from what is pending:
|
|
15
|
+
* `lastMessageText` holds the last landed message and `pendingOutput` holds the
|
|
16
|
+
* coalesced-but-unsent remainder. So the "reconcile final accumulated vs last
|
|
17
|
+
* landed" reduces to: send `pendingOutput` if it is non-empty. No text diff is
|
|
18
|
+
* needed — the queue is the single source of the remainder.
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.getGroupFinalizePlan = getGroupFinalizePlan;
|
|
22
|
+
function getGroupFinalizePlan(input) {
|
|
23
|
+
// A fully-delivered turn (no pending remainder) — and a buffer holding only
|
|
24
|
+
// whitespace, which would earn a Telegram error and is not a real answer — is
|
|
25
|
+
// a no-op, so a settle/teardown never double-posts.
|
|
26
|
+
if (input.pendingOutput === null || input.pendingOutput.trim() === '') {
|
|
27
|
+
return { action: 'noop' };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
action: 'send',
|
|
31
|
+
text: input.pendingOutput,
|
|
32
|
+
isContinuation: input.pendingIsContinuation,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=groupFinalizePlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupFinalizePlan.js","sourceRoot":"","sources":["../../src/utils/groupFinalizePlan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAkBH,oDAYC;AAZD,SAAgB,oBAAoB,CAAC,KAAyB;IAC5D,4EAA4E;IAC5E,8EAA8E;IAC9E,oDAAoD;IACpD,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,cAAc,EAAE,KAAK,CAAC,qBAAqB;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Per-thread defense-in-depth backstop against a runaway flood of
|
|
3
|
+
* byte-identical PERMANENT output.
|
|
4
|
+
*
|
|
5
|
+
* WHY it exists (flood 2026-06-16): a Claude tmux-scrape topic emitted a
|
|
6
|
+
* box-drawing table ~500 times, one byte-identical copy every ~12s for >2h.
|
|
7
|
+
* The root cause was fixed at the table emit path (S1, `recentRelayWindow`'s
|
|
8
|
+
* block-level dedup), but ANY emit path that re-sends the same large block —
|
|
9
|
+
* present or future, either backend — should not be able to flood a topic.
|
|
10
|
+
* This guard caps that regardless of which path produced the output: if a fresh
|
|
11
|
+
* permanent output is byte-identical to one recently sent to the SAME thread, it
|
|
12
|
+
* is suppressed.
|
|
13
|
+
*
|
|
14
|
+
* Deliberately NARROW to avoid false positives:
|
|
15
|
+
* - only LARGE blocks ({@link identicalOutputMinChars}) are guarded — short
|
|
16
|
+
* answers ("done", "yes", a one-line confirmation) legitimately repeat and
|
|
17
|
+
* always pass;
|
|
18
|
+
* - only within a short TIME window ({@link identicalOutputWindowMs}) and the
|
|
19
|
+
* last few outputs ({@link identicalOutputWindowSize}) — a deliberate
|
|
20
|
+
* re-print minutes apart is not a flood and passes;
|
|
21
|
+
* - it is the BACKSTOP, not the primary fix: byte-identical only, never a
|
|
22
|
+
* fuzzy match, so a genuinely-changed block (a cell flipped, a row added) is
|
|
23
|
+
* different text and always passes.
|
|
24
|
+
*
|
|
25
|
+
* The continuation / status / transient / question exclusions are the caller's
|
|
26
|
+
* (`bot.ts` handleAgentOutput) — this guard only ever sees fresh permanent
|
|
27
|
+
* output text + the current time. State is reset at the same per-thread
|
|
28
|
+
* teardown points as the other relay state (session stop / closed / unbind).
|
|
29
|
+
*/
|
|
30
|
+
/** Last N permanent outputs per thread kept for the identical-repeat check. */
|
|
31
|
+
export declare const identicalOutputWindowSize = 5;
|
|
32
|
+
/** Only an identical output within this time window is treated as a flood. */
|
|
33
|
+
export declare const identicalOutputWindowMs = 60000;
|
|
34
|
+
/**
|
|
35
|
+
* Minimum candidate length (chars) to be guarded at all. Short answers repeat
|
|
36
|
+
* legitimately far too often to ever suppress — only LARGE blocks (a re-printed
|
|
37
|
+
* table, a re-rendered file dump) can flood meaningfully.
|
|
38
|
+
*/
|
|
39
|
+
export declare const identicalOutputMinChars = 200;
|
|
40
|
+
/** One recorded permanent output: its text + when it was sent. */
|
|
41
|
+
export interface RecentOutputRecord {
|
|
42
|
+
text: string;
|
|
43
|
+
sentAtMs: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Pure decision: is `candidate` a byte-identical repeat of a recent
|
|
47
|
+
* permanent output still inside the window? Short candidates (< {@link
|
|
48
|
+
* identicalOutputMinChars}) always return false. Only records within {@link
|
|
49
|
+
* identicalOutputWindowMs} of `nowMs` count — an older identical output has
|
|
50
|
+
* already aged out and is not a flood.
|
|
51
|
+
*/
|
|
52
|
+
export declare function checkIsIdenticalOutputRepeat(candidate: string, recentOutputs: readonly RecentOutputRecord[], nowMs: number): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* @description Append a permanent output to a thread's bounded recent-output
|
|
55
|
+
* history (newest last), evicting the oldest beyond {@link
|
|
56
|
+
* identicalOutputWindowSize}. Returns a NEW array (pure) so callers store the
|
|
57
|
+
* result. Outputs below {@link identicalOutputMinChars} are not recorded — they
|
|
58
|
+
* are never guarded, so they would only waste a slot.
|
|
59
|
+
*/
|
|
60
|
+
export declare function recordRecentOutput(recentOutputs: readonly RecentOutputRecord[], text: string, sentAtMs: number): RecentOutputRecord[];
|
|
61
|
+
/**
|
|
62
|
+
* @description Stateful per-thread wrapper around the two pure helpers above.
|
|
63
|
+
* `bot.ts` keeps ONE instance for all threads; the per-thread history lives in
|
|
64
|
+
* an internal Map keyed by the serialised thread key.
|
|
65
|
+
*/
|
|
66
|
+
export interface IdenticalOutputGuard {
|
|
67
|
+
/**
|
|
68
|
+
* Decide whether `text` (a fresh permanent output) is a byte-identical flood
|
|
69
|
+
* repeat for `threadKey`. When it is NOT, the output is RECORDED (so the next
|
|
70
|
+
* identical one is caught) and `false` is returned. When it IS a repeat,
|
|
71
|
+
* nothing is recorded and `true` is returned — the caller suppresses the send.
|
|
72
|
+
*/
|
|
73
|
+
checkAndRecord(threadKey: string, text: string, nowMs: number): boolean;
|
|
74
|
+
/** Forget a thread's history (session stop / closed / unbind). */
|
|
75
|
+
reset(threadKey: string): void;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description Create an empty identical-output guard. `nowMs` is supplied per
|
|
79
|
+
* call (not read from `Date.now()` here) so tests can drive the time window
|
|
80
|
+
* deterministically.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createIdenticalOutputGuard(): IdenticalOutputGuard;
|
|
83
|
+
//# sourceMappingURL=identicalOutputGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identicalOutputGuard.d.ts","sourceRoot":"","sources":["../../src/utils/identicalOutputGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,SAAS,kBAAkB,EAAE,EAC5C,KAAK,EAAE,MAAM,GACZ,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,SAAS,kBAAkB,EAAE,EAC5C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,kBAAkB,EAAE,CAKtB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxE,kEAAkE;IAClE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAcjE"}
|