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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decision for recovering a WEDGED OpenCode session (one that
|
|
3
|
+
* accepted a prompt but ran no turn — see `openCodeTurnActivity.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Three escalating tiers, one attempt each per prompt episode, so the last
|
|
6
|
+
* dialog is preserved when at all possible and a persistently-wedging session
|
|
7
|
+
* still cannot loop forever:
|
|
8
|
+
*
|
|
9
|
+
* tier 0 → `resend` — re-send the prompt to the SAME session (a transient
|
|
10
|
+
* stall recovers here; dialog fully intact, zero cost).
|
|
11
|
+
* tier 1 → `fork` — FORK the session into a fresh one that carries the full
|
|
12
|
+
* conversation, then replay (recovers an instance-level
|
|
13
|
+
* wedge while keeping the dialog). Falls back to `restart`
|
|
14
|
+
* when the adapter can't fork.
|
|
15
|
+
* tier 2 → `restart` — blank fresh session + replay (the conversation itself is
|
|
16
|
+
* the poison, e.g. a bloated session — dialog is dropped,
|
|
17
|
+
* but the trigger still runs; verified live on the my-news
|
|
18
|
+
* digest, which is stateless so this is safe).
|
|
19
|
+
* else → `giveUp` — surface the actionable notice instead of looping.
|
|
20
|
+
*
|
|
21
|
+
* `tier` = how many recovery attempts were ALREADY made this episode; it resets
|
|
22
|
+
* to 0 when a genuine new prompt is forwarded. With no cached prompt to replay
|
|
23
|
+
* there is nothing to recover → give up.
|
|
24
|
+
*/
|
|
25
|
+
export type WedgeRecoveryAction = 'resend' | 'fork' | 'restart' | 'giveUp';
|
|
26
|
+
export interface WedgeRecoveryState {
|
|
27
|
+
/** Recovery attempts already made this prompt episode (0, 1, 2, …). */
|
|
28
|
+
tier: number;
|
|
29
|
+
/** A raw prompt is cached and can be replayed. */
|
|
30
|
+
hasReplayPrompt: boolean;
|
|
31
|
+
/** The adapter can fork its session (carries the dialog); else tier 1 restarts. */
|
|
32
|
+
canFork: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function decideWedgeRecovery(state: WedgeRecoveryState): WedgeRecoveryAction;
|
|
35
|
+
/**
|
|
36
|
+
* @name ForwardedPromptKind
|
|
37
|
+
* @description What a forward into the agent is, as far as wedge recovery cares.
|
|
38
|
+
*/
|
|
39
|
+
export interface ForwardedPromptKind {
|
|
40
|
+
/** A slash command forwarded to the agent — a control token, not worth replaying. */
|
|
41
|
+
isSlashCommand: boolean;
|
|
42
|
+
/** The recovery's own replay of the cached prompt. */
|
|
43
|
+
isRecoveryReplay: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* A request wake-up reminder: the open request's original prompt (it carries
|
|
46
|
+
* the request header) stays the one to replay, and a recovery already under
|
|
47
|
+
* way for it keeps its tier — else a wedged reminder restarts the escalation.
|
|
48
|
+
*/
|
|
49
|
+
isRequestReminder: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @description Whether a forward becomes the prompt a wedged session replays —
|
|
53
|
+
* caching it and opening a fresh recovery episode (tier reset). Only a genuine
|
|
54
|
+
* new prompt does.
|
|
55
|
+
*/
|
|
56
|
+
export declare function checkIsReplayablePrompt(kind: ForwardedPromptKind): boolean;
|
|
57
|
+
//# sourceMappingURL=wedgeRecovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wedgeRecovery.d.ts","sourceRoot":"","sources":["../../src/utils/wedgeRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAMlF;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE1E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decideWedgeRecovery = decideWedgeRecovery;
|
|
4
|
+
exports.checkIsReplayablePrompt = checkIsReplayablePrompt;
|
|
5
|
+
function decideWedgeRecovery(state) {
|
|
6
|
+
if (!state.hasReplayPrompt)
|
|
7
|
+
return 'giveUp';
|
|
8
|
+
if (state.tier === 0)
|
|
9
|
+
return 'resend';
|
|
10
|
+
if (state.tier === 1)
|
|
11
|
+
return state.canFork ? 'fork' : 'restart';
|
|
12
|
+
if (state.tier === 2)
|
|
13
|
+
return 'restart';
|
|
14
|
+
return 'giveUp';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @description Whether a forward becomes the prompt a wedged session replays —
|
|
18
|
+
* caching it and opening a fresh recovery episode (tier reset). Only a genuine
|
|
19
|
+
* new prompt does.
|
|
20
|
+
*/
|
|
21
|
+
function checkIsReplayablePrompt(kind) {
|
|
22
|
+
return !kind.isSlashCommand && !kind.isRecoveryReplay && !kind.isRequestReminder;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=wedgeRecovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wedgeRecovery.js","sourceRoot":"","sources":["../../src/utils/wedgeRecovery.ts"],"names":[],"mappings":";;AAmCA,kDAMC;AAwBD,0DAEC;AAhCD,SAAgB,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAmBD;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,IAAyB;IAC/D,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACnF,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Return the signal's Error reason, including a stable fallback for non-Error reasons. */
|
|
2
|
+
export declare function getAbortError(signal: AbortSignal): Error;
|
|
3
|
+
/**
|
|
4
|
+
* @description Whether a caught error is the abort raised for a cancelled
|
|
5
|
+
* operation. Matches on the error IDENTITY (`name`), never on its message text.
|
|
6
|
+
*
|
|
7
|
+
* Covers every abort this codebase can raise: a bare `controller.abort()` puts a
|
|
8
|
+
* DOMException named `AbortError` on `signal.reason`, and an abort carrying a
|
|
9
|
+
* custom reason (the MCP cancellation notification passes a string) is surfaced
|
|
10
|
+
* by {@link getAbortError} as a fresh `Error` with the same name.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkIsAbortError(error: unknown): boolean;
|
|
13
|
+
/** Sleep for the requested duration, rejecting promptly when the caller aborts. */
|
|
14
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* @description Strip the `@botusername` Telegram appends to a slash command in
|
|
17
|
+
* a group/supergroup.
|
|
18
|
+
*
|
|
19
|
+
* In groups, the Telegram client turns `/context` into
|
|
20
|
+
* `/context@my_bot` (always, when the command is in the bot's command menu;
|
|
21
|
+
* also whenever multiple bots are present). We forward un-owned slash commands
|
|
22
|
+
* verbatim to the agent's CLI, which does NOT recognise the `@my_bot` suffix —
|
|
23
|
+
* so `/context` silently no-ops. Strip the mention from the FIRST token only,
|
|
24
|
+
* preserving any arguments: `/context@my_bot keep notes` → `/context keep notes`.
|
|
25
|
+
*
|
|
26
|
+
* Only touches a leading `/command@mention`; ordinary text and mid-text `@`s
|
|
27
|
+
* (e.g. `email me @ foo`) are left untouched. Pure + exported for unit tests.
|
|
28
|
+
*/
|
|
29
|
+
export declare function stripCommandBotMention(text: string): string;
|
|
30
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAKxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,mFAAmF;AACnF,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAbortError = getAbortError;
|
|
4
|
+
exports.checkIsAbortError = checkIsAbortError;
|
|
5
|
+
exports.sleep = sleep;
|
|
6
|
+
exports.stripCommandBotMention = stripCommandBotMention;
|
|
7
|
+
/** Return the signal's Error reason, including a stable fallback for non-Error reasons. */
|
|
8
|
+
function getAbortError(signal) {
|
|
9
|
+
if (signal.reason instanceof Error)
|
|
10
|
+
return signal.reason;
|
|
11
|
+
const error = new Error('The operation was aborted');
|
|
12
|
+
error.name = 'AbortError';
|
|
13
|
+
return error;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @description Whether a caught error is the abort raised for a cancelled
|
|
17
|
+
* operation. Matches on the error IDENTITY (`name`), never on its message text.
|
|
18
|
+
*
|
|
19
|
+
* Covers every abort this codebase can raise: a bare `controller.abort()` puts a
|
|
20
|
+
* DOMException named `AbortError` on `signal.reason`, and an abort carrying a
|
|
21
|
+
* custom reason (the MCP cancellation notification passes a string) is surfaced
|
|
22
|
+
* by {@link getAbortError} as a fresh `Error` with the same name.
|
|
23
|
+
*/
|
|
24
|
+
function checkIsAbortError(error) {
|
|
25
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
26
|
+
}
|
|
27
|
+
/** Sleep for the requested duration, rejecting promptly when the caller aborts. */
|
|
28
|
+
function sleep(ms, signal) {
|
|
29
|
+
if (signal?.aborted)
|
|
30
|
+
return Promise.reject(getAbortError(signal));
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
const timer = setTimeout(() => {
|
|
33
|
+
signal?.removeEventListener('abort', handleAbort);
|
|
34
|
+
resolve();
|
|
35
|
+
}, ms);
|
|
36
|
+
const handleAbort = () => {
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
if (signal)
|
|
39
|
+
reject(getAbortError(signal));
|
|
40
|
+
};
|
|
41
|
+
signal?.addEventListener('abort', handleAbort, { once: true });
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description Strip the `@botusername` Telegram appends to a slash command in
|
|
46
|
+
* a group/supergroup.
|
|
47
|
+
*
|
|
48
|
+
* In groups, the Telegram client turns `/context` into
|
|
49
|
+
* `/context@my_bot` (always, when the command is in the bot's command menu;
|
|
50
|
+
* also whenever multiple bots are present). We forward un-owned slash commands
|
|
51
|
+
* verbatim to the agent's CLI, which does NOT recognise the `@my_bot` suffix —
|
|
52
|
+
* so `/context` silently no-ops. Strip the mention from the FIRST token only,
|
|
53
|
+
* preserving any arguments: `/context@my_bot keep notes` → `/context keep notes`.
|
|
54
|
+
*
|
|
55
|
+
* Only touches a leading `/command@mention`; ordinary text and mid-text `@`s
|
|
56
|
+
* (e.g. `email me @ foo`) are left untouched. Pure + exported for unit tests.
|
|
57
|
+
*/
|
|
58
|
+
function stripCommandBotMention(text) {
|
|
59
|
+
return text.replace(/^(\/[A-Za-z0-9_]+)@[A-Za-z0-9_]+/, '$1');
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AACA,sCAKC;AAWD,8CAEC;AAGD,sBAaC;AAgBD,wDAEC;AArDD,2FAA2F;AAC3F,SAAgB,aAAa,CAAC,MAAmB;IAC/C,IAAI,MAAM,CAAC,MAAM,YAAY,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAC/D,CAAC;AAED,mFAAmF;AACnF,SAAgB,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,MAAM;gBAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Path-traversal-safe validation of user-supplied `subdir`
|
|
3
|
+
* arguments to `/bind` and friends. Extracted from `src/bot.ts` so that
|
|
4
|
+
* the security-critical logic can be unit-tested without spinning up the
|
|
5
|
+
* whole Telegraf surface (plan §11 Этап 7, R3).
|
|
6
|
+
*
|
|
7
|
+
* The exported `validateSubdir(workRoot, rawSubdir)` returns the *relative*
|
|
8
|
+
* form of the resolved path (so on-disk records survive a `WORK_ROOT`
|
|
9
|
+
* rename) and throws a `BindError` whose `.code` lets callers map to a
|
|
10
|
+
* localised reply string.
|
|
11
|
+
*
|
|
12
|
+
* Defence-in-depth covers four classes of attack:
|
|
13
|
+
* - **Path traversal** — strict equality OR prefix-with-separator check
|
|
14
|
+
* after `realpathSync`. Without the trailing `path.sep`, an attacker
|
|
15
|
+
* pointing `WORK_ROOT=/work_root` could bind `../work_root_evil` and
|
|
16
|
+
* `startsWith` would happily accept it.
|
|
17
|
+
* - **Symlink-out** — `realpathSync` on both the root and the candidate
|
|
18
|
+
* resolves every symlink before the prefix check, so a symlink inside
|
|
19
|
+
* `WORK_ROOT` pointing at `/etc` is rejected.
|
|
20
|
+
* - **Control chars / NUL** — many filesystems happily store these; tmux
|
|
21
|
+
* and shell-quoting downstream do not. Reject up front.
|
|
22
|
+
* - **Unicode NFC drift** — macOS Terminal sends NFD by default while
|
|
23
|
+
* the on-disk entry is usually NFC. Normalise the input to NFC before
|
|
24
|
+
* `path.resolve` so the realpath lookup actually finds it.
|
|
25
|
+
*
|
|
26
|
+
* Plan §13.7 / D35 / R3.
|
|
27
|
+
*/
|
|
28
|
+
import { type PaginatedSlice } from './utils/paginateList';
|
|
29
|
+
/**
|
|
30
|
+
* @description Error class with a stable `code` field so the bot can map
|
|
31
|
+
* each failure mode to a localised reply (`i18n.ts → bind.*`) without
|
|
32
|
+
* pattern-matching error messages.
|
|
33
|
+
*/
|
|
34
|
+
export declare class BindError extends Error {
|
|
35
|
+
readonly code: BindErrorCode;
|
|
36
|
+
constructor(code: BindErrorCode, message: string);
|
|
37
|
+
}
|
|
38
|
+
export type BindErrorCode = 'BIND_INVALID_CHARS' | 'BIND_NOT_FOUND' | 'BIND_OUTSIDE_ROOT' | 'BIND_NOT_DIRECTORY';
|
|
39
|
+
/**
|
|
40
|
+
* @description Resolve `rawSubdir` against `workRoot` and confirm it
|
|
41
|
+
* actually lives inside it. Returns the *relative* form (e.g. `"overview"`)
|
|
42
|
+
* so persisted bindings survive a `WORK_ROOT` path change such as a host
|
|
43
|
+
* mount rename. Throws `BindError` on every failure mode the caller needs
|
|
44
|
+
* to distinguish.
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateSubdir(workRoot: string, rawSubdir: string): string;
|
|
47
|
+
export type BoundWorkDirDecision = {
|
|
48
|
+
kind: 'proceed';
|
|
49
|
+
subdir: string;
|
|
50
|
+
workDir: string;
|
|
51
|
+
} | {
|
|
52
|
+
kind: 'refuse';
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'invalid';
|
|
55
|
+
error: BindError;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* @description Resolve a persisted binding back to a real working directory.
|
|
59
|
+
* A binding row in state.json is not enough: the folder may have been deleted
|
|
60
|
+
* or replaced after `/bind`. Agent startup/list/resume must fail before any
|
|
61
|
+
* adapter side effects in that case.
|
|
62
|
+
*/
|
|
63
|
+
export declare function resolveBoundWorkDir(workRoot: string, binding: {
|
|
64
|
+
subdir: string;
|
|
65
|
+
} | null): BoundWorkDirDecision;
|
|
66
|
+
/**
|
|
67
|
+
* @description Normalise a name (topic title or subdir) for fuzzy auto-bind
|
|
68
|
+
* matching.
|
|
69
|
+
*
|
|
70
|
+
* Folds three predictable drifts between Telegram topic titles and on-disk
|
|
71
|
+
* folder names:
|
|
72
|
+
* - case: `Overview` ↔ `overview`
|
|
73
|
+
* - separator: `my-api` ↔ `my_api` ↔ `my api` ↔ `my.api`
|
|
74
|
+
* - edge whitespace: ` overview ` ↔ `overview`
|
|
75
|
+
*
|
|
76
|
+
* NFC normalisation runs first so macOS-flavoured NFD doesn't slip past
|
|
77
|
+
* the separator collapse.
|
|
78
|
+
*
|
|
79
|
+
* Anything more aggressive (typo tolerance, partial matches) is
|
|
80
|
+
* intentionally out of scope — auto-bind has to stay predictable; if it
|
|
81
|
+
* starts guessing the user loses trust in the rule.
|
|
82
|
+
*
|
|
83
|
+
* Plan §11 Этап 7 polish (smart auto-bind fuzzy, §20.10).
|
|
84
|
+
*/
|
|
85
|
+
export declare function normaliseTopicName(s: string): string;
|
|
86
|
+
/**
|
|
87
|
+
* @description Find the on-disk subdir whose normalised name matches the
|
|
88
|
+
* normalised topic title. Returns `null` if no match (auto-bind falls
|
|
89
|
+
* through to the picker UX).
|
|
90
|
+
*
|
|
91
|
+
* Caller is expected to have already filtered `subdirs` to the entries
|
|
92
|
+
* surfaced in the UI — `listAvailableSubdirs` does that.
|
|
93
|
+
*/
|
|
94
|
+
export declare function findAutobindSubdir(topicName: string, subdirs: readonly string[]): string | null;
|
|
95
|
+
export type BindPage = PaginatedSlice<string>;
|
|
96
|
+
/**
|
|
97
|
+
* @description Pure pagination math for the `/bind` keyboard. Extracted
|
|
98
|
+
* here so the slice / clamp logic can be unit-tested without booting
|
|
99
|
+
* Telegraf (which is what `buildBindKeyboard` in `bot.ts` wraps it with).
|
|
100
|
+
*
|
|
101
|
+
* Plan §11 Этап 7 polish — pagination kicks in once `listAvailableSubdirs`
|
|
102
|
+
* surfaces more than `pageSize` folders.
|
|
103
|
+
*
|
|
104
|
+
* `pageSize` must be positive; the bot uses `BIND_PAGE_SIZE = 20`. Out-of-
|
|
105
|
+
* range `page` values are clamped silently — a stale callback after the
|
|
106
|
+
* disk state shrank just lands on the last available page.
|
|
107
|
+
*
|
|
108
|
+
* Thin wrapper over the shared {@link paginateList}: the `/model` picker needs
|
|
109
|
+
* the same math, so the rules live there and this keeps the `/bind`-flavoured
|
|
110
|
+
* name its call sites already use.
|
|
111
|
+
*/
|
|
112
|
+
export declare function paginateBindList(subdirs: readonly string[], page: number, pageSize: number): BindPage;
|
|
113
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;aACN,IAAI,EAAE,aAAa;gBAAnB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAIjE;AAED,MAAM,MAAM,aAAa,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,CAAC;AAEzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA0D1E;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACjC,oBAAoB,CAStB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,IAAI,CAOf;AAED,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,QAAQ,CAEV"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Path-traversal-safe validation of user-supplied `subdir`
|
|
4
|
+
* arguments to `/bind` and friends. Extracted from `src/bot.ts` so that
|
|
5
|
+
* the security-critical logic can be unit-tested without spinning up the
|
|
6
|
+
* whole Telegraf surface (plan §11 Этап 7, R3).
|
|
7
|
+
*
|
|
8
|
+
* The exported `validateSubdir(workRoot, rawSubdir)` returns the *relative*
|
|
9
|
+
* form of the resolved path (so on-disk records survive a `WORK_ROOT`
|
|
10
|
+
* rename) and throws a `BindError` whose `.code` lets callers map to a
|
|
11
|
+
* localised reply string.
|
|
12
|
+
*
|
|
13
|
+
* Defence-in-depth covers four classes of attack:
|
|
14
|
+
* - **Path traversal** — strict equality OR prefix-with-separator check
|
|
15
|
+
* after `realpathSync`. Without the trailing `path.sep`, an attacker
|
|
16
|
+
* pointing `WORK_ROOT=/work_root` could bind `../work_root_evil` and
|
|
17
|
+
* `startsWith` would happily accept it.
|
|
18
|
+
* - **Symlink-out** — `realpathSync` on both the root and the candidate
|
|
19
|
+
* resolves every symlink before the prefix check, so a symlink inside
|
|
20
|
+
* `WORK_ROOT` pointing at `/etc` is rejected.
|
|
21
|
+
* - **Control chars / NUL** — many filesystems happily store these; tmux
|
|
22
|
+
* and shell-quoting downstream do not. Reject up front.
|
|
23
|
+
* - **Unicode NFC drift** — macOS Terminal sends NFD by default while
|
|
24
|
+
* the on-disk entry is usually NFC. Normalise the input to NFC before
|
|
25
|
+
* `path.resolve` so the realpath lookup actually finds it.
|
|
26
|
+
*
|
|
27
|
+
* Plan §13.7 / D35 / R3.
|
|
28
|
+
*/
|
|
29
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
32
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
33
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(o, k2, desc);
|
|
36
|
+
}) : (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
o[k2] = m[k];
|
|
39
|
+
}));
|
|
40
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
41
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
42
|
+
}) : function(o, v) {
|
|
43
|
+
o["default"] = v;
|
|
44
|
+
});
|
|
45
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
46
|
+
var ownKeys = function(o) {
|
|
47
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
48
|
+
var ar = [];
|
|
49
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
50
|
+
return ar;
|
|
51
|
+
};
|
|
52
|
+
return ownKeys(o);
|
|
53
|
+
};
|
|
54
|
+
return function (mod) {
|
|
55
|
+
if (mod && mod.__esModule) return mod;
|
|
56
|
+
var result = {};
|
|
57
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
58
|
+
__setModuleDefault(result, mod);
|
|
59
|
+
return result;
|
|
60
|
+
};
|
|
61
|
+
})();
|
|
62
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
63
|
+
exports.BindError = void 0;
|
|
64
|
+
exports.validateSubdir = validateSubdir;
|
|
65
|
+
exports.resolveBoundWorkDir = resolveBoundWorkDir;
|
|
66
|
+
exports.normaliseTopicName = normaliseTopicName;
|
|
67
|
+
exports.findAutobindSubdir = findAutobindSubdir;
|
|
68
|
+
exports.paginateBindList = paginateBindList;
|
|
69
|
+
const fs = __importStar(require("fs"));
|
|
70
|
+
const path = __importStar(require("path"));
|
|
71
|
+
const canonicalPathContainment_1 = require("./utils/canonicalPathContainment");
|
|
72
|
+
const paginateList_1 = require("./utils/paginateList");
|
|
73
|
+
/**
|
|
74
|
+
* @description Error class with a stable `code` field so the bot can map
|
|
75
|
+
* each failure mode to a localised reply (`i18n.ts → bind.*`) without
|
|
76
|
+
* pattern-matching error messages.
|
|
77
|
+
*/
|
|
78
|
+
class BindError extends Error {
|
|
79
|
+
code;
|
|
80
|
+
constructor(code, message) {
|
|
81
|
+
super(message);
|
|
82
|
+
this.code = code;
|
|
83
|
+
this.name = 'BindError';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.BindError = BindError;
|
|
87
|
+
/**
|
|
88
|
+
* @description Resolve `rawSubdir` against `workRoot` and confirm it
|
|
89
|
+
* actually lives inside it. Returns the *relative* form (e.g. `"overview"`)
|
|
90
|
+
* so persisted bindings survive a `WORK_ROOT` path change such as a host
|
|
91
|
+
* mount rename. Throws `BindError` on every failure mode the caller needs
|
|
92
|
+
* to distinguish.
|
|
93
|
+
*/
|
|
94
|
+
function validateSubdir(workRoot, rawSubdir) {
|
|
95
|
+
// Control chars and NUL bytes can be stored on disk but explode in
|
|
96
|
+
// shell-quoted paths downstream (tmux send-keys, opencode HTTP URLs).
|
|
97
|
+
// Reject up front so the failure mode is a localised reply, not a
|
|
98
|
+
// confusing tmux error.
|
|
99
|
+
if (/[\x00-\x1f]/.test(rawSubdir)) {
|
|
100
|
+
throw new BindError('BIND_INVALID_CHARS', 'subdir contains control characters');
|
|
101
|
+
}
|
|
102
|
+
// Normalise to NFC — input from macOS Terminal often arrives NFD, but
|
|
103
|
+
// the on-disk entry was created NFC, so naive string compare misses it
|
|
104
|
+
// and realpathSync would throw ENOENT.
|
|
105
|
+
const normalised = rawSubdir.normalize('NFC').trim();
|
|
106
|
+
if (!normalised) {
|
|
107
|
+
throw new BindError('BIND_INVALID_CHARS', 'subdir is empty');
|
|
108
|
+
}
|
|
109
|
+
let realRoot;
|
|
110
|
+
try {
|
|
111
|
+
realRoot = fs.realpathSync(workRoot);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
// The boot-time check already verified workRoot exists; treat this
|
|
115
|
+
// as a transient (e.g. user removed it after start) and translate
|
|
116
|
+
// to a not-found error so the caller reports a localised message
|
|
117
|
+
// rather than a stack trace.
|
|
118
|
+
const errorMessage = error instanceof Error ? error.message : 'unknown error';
|
|
119
|
+
throw new BindError('BIND_NOT_FOUND', `WORK_ROOT vanished: ${errorMessage}`);
|
|
120
|
+
}
|
|
121
|
+
let canonicalCandidate;
|
|
122
|
+
let isWithinRoot;
|
|
123
|
+
try {
|
|
124
|
+
({ canonicalPath: canonicalCandidate, isWithinRoot } =
|
|
125
|
+
(0, canonicalPathContainment_1.resolveCanonicalPathContainment)(realRoot, normalised));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
throw new BindError('BIND_NOT_FOUND', `subdir not found: ${normalised}`);
|
|
129
|
+
}
|
|
130
|
+
if (!isWithinRoot) {
|
|
131
|
+
throw new BindError('BIND_OUTSIDE_ROOT', `subdir resolves outside WORK_ROOT: ${canonicalCandidate}`);
|
|
132
|
+
}
|
|
133
|
+
// Reject /bind . — binding to WORK_ROOT itself is exactly the unbound
|
|
134
|
+
// state we just spent the whole stage stopping users from sliding into.
|
|
135
|
+
// It also has no meaningful project context (no CLAUDE.md / .git scope).
|
|
136
|
+
if (canonicalCandidate === realRoot) {
|
|
137
|
+
throw new BindError('BIND_OUTSIDE_ROOT', 'cannot bind to WORK_ROOT itself; pick a subfolder');
|
|
138
|
+
}
|
|
139
|
+
const stat = fs.statSync(canonicalCandidate);
|
|
140
|
+
if (!stat.isDirectory()) {
|
|
141
|
+
throw new BindError('BIND_NOT_DIRECTORY', `${normalised} is not a directory`);
|
|
142
|
+
}
|
|
143
|
+
// Store the *relative* form so the on-disk record survives `WORK_ROOT`
|
|
144
|
+
// path changes (e.g. mount point rename). `getWorkDir` re-joins this
|
|
145
|
+
// with the current `ENV.workRoot` at runtime.
|
|
146
|
+
return path.relative(realRoot, canonicalCandidate);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @description Resolve a persisted binding back to a real working directory.
|
|
150
|
+
* A binding row in state.json is not enough: the folder may have been deleted
|
|
151
|
+
* or replaced after `/bind`. Agent startup/list/resume must fail before any
|
|
152
|
+
* adapter side effects in that case.
|
|
153
|
+
*/
|
|
154
|
+
function resolveBoundWorkDir(workRoot, binding) {
|
|
155
|
+
if (!binding)
|
|
156
|
+
return { kind: 'refuse' };
|
|
157
|
+
try {
|
|
158
|
+
const subdir = validateSubdir(workRoot, binding.subdir);
|
|
159
|
+
return { kind: 'proceed', subdir, workDir: fs.realpathSync(path.resolve(workRoot, subdir)) };
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
if (e instanceof BindError)
|
|
163
|
+
return { kind: 'invalid', error: e };
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @description Normalise a name (topic title or subdir) for fuzzy auto-bind
|
|
169
|
+
* matching.
|
|
170
|
+
*
|
|
171
|
+
* Folds three predictable drifts between Telegram topic titles and on-disk
|
|
172
|
+
* folder names:
|
|
173
|
+
* - case: `Overview` ↔ `overview`
|
|
174
|
+
* - separator: `my-api` ↔ `my_api` ↔ `my api` ↔ `my.api`
|
|
175
|
+
* - edge whitespace: ` overview ` ↔ `overview`
|
|
176
|
+
*
|
|
177
|
+
* NFC normalisation runs first so macOS-flavoured NFD doesn't slip past
|
|
178
|
+
* the separator collapse.
|
|
179
|
+
*
|
|
180
|
+
* Anything more aggressive (typo tolerance, partial matches) is
|
|
181
|
+
* intentionally out of scope — auto-bind has to stay predictable; if it
|
|
182
|
+
* starts guessing the user loses trust in the rule.
|
|
183
|
+
*
|
|
184
|
+
* Plan §11 Этап 7 polish (smart auto-bind fuzzy, §20.10).
|
|
185
|
+
*/
|
|
186
|
+
function normaliseTopicName(s) {
|
|
187
|
+
return s.normalize('NFC').toLowerCase().trim().replace(/[\s._-]+/g, '-');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* @description Find the on-disk subdir whose normalised name matches the
|
|
191
|
+
* normalised topic title. Returns `null` if no match (auto-bind falls
|
|
192
|
+
* through to the picker UX).
|
|
193
|
+
*
|
|
194
|
+
* Caller is expected to have already filtered `subdirs` to the entries
|
|
195
|
+
* surfaced in the UI — `listAvailableSubdirs` does that.
|
|
196
|
+
*/
|
|
197
|
+
function findAutobindSubdir(topicName, subdirs) {
|
|
198
|
+
const normalisedName = normaliseTopicName(topicName);
|
|
199
|
+
if (!normalisedName)
|
|
200
|
+
return null;
|
|
201
|
+
for (const subdir of subdirs) {
|
|
202
|
+
if (normaliseTopicName(subdir) === normalisedName)
|
|
203
|
+
return subdir;
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* @description Pure pagination math for the `/bind` keyboard. Extracted
|
|
209
|
+
* here so the slice / clamp logic can be unit-tested without booting
|
|
210
|
+
* Telegraf (which is what `buildBindKeyboard` in `bot.ts` wraps it with).
|
|
211
|
+
*
|
|
212
|
+
* Plan §11 Этап 7 polish — pagination kicks in once `listAvailableSubdirs`
|
|
213
|
+
* surfaces more than `pageSize` folders.
|
|
214
|
+
*
|
|
215
|
+
* `pageSize` must be positive; the bot uses `BIND_PAGE_SIZE = 20`. Out-of-
|
|
216
|
+
* range `page` values are clamped silently — a stale callback after the
|
|
217
|
+
* disk state shrank just lands on the last available page.
|
|
218
|
+
*
|
|
219
|
+
* Thin wrapper over the shared {@link paginateList}: the `/model` picker needs
|
|
220
|
+
* the same math, so the rules live there and this keeps the `/bind`-flavoured
|
|
221
|
+
* name its call sites already use.
|
|
222
|
+
*/
|
|
223
|
+
function paginateBindList(subdirs, page, pageSize) {
|
|
224
|
+
return (0, paginateList_1.paginateList)(subdirs, page, pageSize);
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCH,wCA0DC;AAaD,kDAYC;AAqBD,gDAEC;AAUD,gDAUC;AAoBD,4CAMC;AAtLD,uCAAyB;AACzB,2CAA6B;AAC7B,+EAAmF;AACnF,uDAAyE;AAEzE;;;;GAIG;AACH,MAAa,SAAU,SAAQ,KAAK;IACN;IAA5B,YAA4B,IAAmB,EAAE,OAAe;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QADW,SAAI,GAAJ,IAAI,CAAe;QAE7C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AALD,8BAKC;AAQD;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,SAAiB;IAChE,mEAAmE;IACnE,sEAAsE;IACtE,kEAAkE;IAClE,wBAAwB;IACxB,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,oCAAoC,CAAC,CAAC;IAClF,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,uCAAuC;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,kEAAkE;QAClE,iEAAiE;QACjE,6BAA6B;QAC7B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,uBAAuB,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,kBAA0B,CAAC;IAC/B,IAAI,YAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE;YAClD,IAAA,0DAA+B,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,qBAAqB,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,sCAAsC,kBAAkB,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mDAAmD,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,GAAG,UAAU,qBAAqB,CAAC,CAAC;IAChF,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,8CAA8C;IAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAOD;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,QAAgB,EAChB,OAAkC;IAElC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,kBAAkB,CAAC,CAAS;IAC1C,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,SAAiB,EACjB,OAA0B;IAE1B,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,cAAc;YAAE,OAAO,MAAM,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,gBAAgB,CAC9B,OAA0B,EAC1B,IAAY,EACZ,QAAgB;IAEhB,OAAO,IAAA,2BAAY,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SessionKey } from './sessionKey';
|
|
2
|
+
import { type SerialQueue } from './utils/serialQueue';
|
|
3
|
+
/**
|
|
4
|
+
* @description Get (create-on-miss) the voice transcription queue for a thread.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getVoiceTranscriptionQueue(key: SessionKey): SerialQueue;
|
|
7
|
+
//# sourceMappingURL=voiceQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceQueue.d.ts","sourceRoot":"","sources":["../src/voiceQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAkB1E;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,CAQvE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVoiceTranscriptionQueue = getVoiceTranscriptionQueue;
|
|
4
|
+
const sessionKey_1 = require("./sessionKey");
|
|
5
|
+
const serialQueue_1 = require("./utils/serialQueue");
|
|
6
|
+
/**
|
|
7
|
+
* @description Per-thread FIFO queues for voice transcription jobs. Telegraf's
|
|
8
|
+
* polling loop awaits `Promise.all(updates.map(handleUpdate))` before issuing
|
|
9
|
+
* the next `getUpdates`, so a slow Groq transcription awaited inside the voice
|
|
10
|
+
* handler stalls intake of EVERY update (the whole bot freezes). The handler
|
|
11
|
+
* therefore does only cheap gating, then ENQUEUES the download+transcribe+
|
|
12
|
+
* forward job here and returns — the job runs off the update loop.
|
|
13
|
+
*
|
|
14
|
+
* One queue per thread key preserves per-topic ORDER (two voices in one topic
|
|
15
|
+
* transcribe+forward in arrival order) while letting different topics run in
|
|
16
|
+
* parallel; a stuck job blocks only its own thread's queue, never the bot.
|
|
17
|
+
*
|
|
18
|
+
* The map is bounded by the number of topics, so entries are never evicted.
|
|
19
|
+
*/
|
|
20
|
+
const voiceTranscriptionQueues = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* @description Get (create-on-miss) the voice transcription queue for a thread.
|
|
23
|
+
*/
|
|
24
|
+
function getVoiceTranscriptionQueue(key) {
|
|
25
|
+
const kStr = (0, sessionKey_1.keyToString)(key);
|
|
26
|
+
let queue = voiceTranscriptionQueues.get(kStr);
|
|
27
|
+
if (!queue) {
|
|
28
|
+
queue = (0, serialQueue_1.createSerialQueue)();
|
|
29
|
+
voiceTranscriptionQueues.set(kStr, queue);
|
|
30
|
+
}
|
|
31
|
+
return queue;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=voiceQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceQueue.js","sourceRoot":"","sources":["../src/voiceQueue.ts"],"names":[],"mappings":";;AAuBA,gEAQC;AA9BD,6CAA2C;AAC3C,qDAA0E;AAE1E;;;;;;;;;;;;;GAaG;AACH,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEhE;;GAEG;AACH,SAAgB,0BAA0B,CAAC,GAAe;IACxD,MAAM,IAAI,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAA,+BAAiB,GAAE,CAAC;QAC5B,wBAAwB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Paths for docker-compose.yml (README "Run with Docker"). The bot's settings and tokens are not here: they are in
|
|
2
|
+
# the instance env file below, which stays on the host and is mounted read-only.
|
|
3
|
+
|
|
4
|
+
# A full clone of the repository for the container (not a worktree, not the checkout a host instance runs from).
|
|
5
|
+
CHECKOUT=/srv/telegramcode/checkout
|
|
6
|
+
# The agents' home: their Claude / OpenCode login, sessions and CLI installs. Log them in once:
|
|
7
|
+
# docker exec -it telegramcode-main claude → /login
|
|
8
|
+
AGENTS_HOME=/srv/telegramcode/home
|
|
9
|
+
# The instance env file: TELEGRAM_BOT_TOKEN, ALLOWED_GROUP_ID, DATA_DIR, WORK_ROOT, … as for a host install.
|
|
10
|
+
INSTANCE_ENV_FILE=/srv/telegramcode/instance.env
|
|
11
|
+
# The DATA_DIR and WORK_ROOT the instance env file sets: mounted at the same paths inside.
|
|
12
|
+
TELEGRAMCODE_DATA_DIR=/srv/telegramcode/data
|
|
13
|
+
TELEGRAMCODE_WORK_ROOT=/srv/projects
|
|
14
|
+
|
|
15
|
+
# Rootful Docker only (see the `user:` line in docker-compose.yml).
|
|
16
|
+
# UID=1000
|
|
17
|
+
# GID=1000
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# The whole bot in one container (README "Run with Docker"): the bot, tmux, every agent it starts, OpenCode and
|
|
2
|
+
# the bot's MCP server. Build the image once from the checkout this file mounts:
|
|
3
|
+
#
|
|
4
|
+
# cd <checkout> && docker build -t telegramcode -f docker/Dockerfile .
|
|
5
|
+
#
|
|
6
|
+
# Copy .env.example to .env next to this file and fill in the paths. The bot's own settings and tokens are NOT
|
|
7
|
+
# here: they live in your instance env file (INSTANCE_ENV_FILE), which the container reads read-only. Every host
|
|
8
|
+
# path that file names (DATA_DIR, WORK_ROOT, TMUX_TMPDIR, …) is mounted at the SAME path: TELEGRAMCODE_DATA_DIR
|
|
9
|
+
# and TELEGRAMCODE_WORK_ROOT are its DATA_DIR and WORK_ROOT (prefixed, because compose prefers a variable your
|
|
10
|
+
# shell exports over .env).
|
|
11
|
+
#
|
|
12
|
+
# A second instance: copy the service with its own name, hostname, checkout, home, data dir and env file
|
|
13
|
+
# (another bot token and group). Ports and tmux servers are private to each container.
|
|
14
|
+
#
|
|
15
|
+
# Never `docker compose restart` — it ignores depends_on; use `docker compose down && docker compose up -d`.
|
|
16
|
+
# To restart only the bot (agents keep running): docker exec telegramcode-main telegramcode-restart-bot
|
|
17
|
+
|
|
18
|
+
services:
|
|
19
|
+
telegramcode:
|
|
20
|
+
image: telegramcode
|
|
21
|
+
container_name: telegramcode-main
|
|
22
|
+
# Fixed: the instance lock tells this container's own restarts from another machine by it.
|
|
23
|
+
hostname: telegramcode-main
|
|
24
|
+
restart: unless-stopped
|
|
25
|
+
# The bot flushes its state and releases its lock before it exits.
|
|
26
|
+
stop_grace_period: 60s
|
|
27
|
+
# Rootful Docker only: run as your own user (rootless Docker maps the container's root to you already).
|
|
28
|
+
# user: "${UID}:${GID}"
|
|
29
|
+
volumes:
|
|
30
|
+
- ${CHECKOUT}:/opt/telegramcode
|
|
31
|
+
- ${AGENTS_HOME}:/home/telegramcode
|
|
32
|
+
- ${TELEGRAMCODE_DATA_DIR}:${TELEGRAMCODE_DATA_DIR}
|
|
33
|
+
- ${TELEGRAMCODE_WORK_ROOT}:${TELEGRAMCODE_WORK_ROOT}
|
|
34
|
+
- ${INSTANCE_ENV_FILE}:${INSTANCE_ENV_FILE}:ro
|
|
35
|
+
environment:
|
|
36
|
+
- ENV_FILE=${INSTANCE_ENV_FILE}
|