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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description The operator's timezone — validation, the zone catalog behind the
|
|
3
|
+
* `/timezone` picker, wall-clock formatting, and the one impure apply path that
|
|
4
|
+
* makes the setting take effect process-wide.
|
|
5
|
+
*
|
|
6
|
+
* Why a process-global mechanism: the bot runs on a host whose clock may be
|
|
7
|
+
* anything (this deploy is `Etc/UTC`). Every clock the bot touches — cron fire
|
|
8
|
+
* times, "missed at HH:MM" renders, the `/timestamps` injection, schedule
|
|
9
|
+
* descriptions — reads HOST-LOCAL time. Assigning `process.env.TZ` re-bases
|
|
10
|
+
* `Date` and `Intl` immediately on Node (verified on Node 22, no restart
|
|
11
|
+
* needed), so setting it once at startup fixes all of those call sites at their
|
|
12
|
+
* existing code with no per-site timezone threading.
|
|
13
|
+
*
|
|
14
|
+
* That is also why the setting is ONE zone per bot instance rather than
|
|
15
|
+
* per-chat: `process.env.TZ` is global by nature, and two chat-scoped zones
|
|
16
|
+
* could not both be true in a single process.
|
|
17
|
+
*
|
|
18
|
+
* Everything except {@link applyProcessTimezone} is pure, so the catalog, the
|
|
19
|
+
* validation rule and the formatting are unit-testable without booting the bot.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @description Canonicalize a zone the operator typed, or `null` when `Intl`
|
|
23
|
+
* does not know it.
|
|
24
|
+
*
|
|
25
|
+
* `new Intl.DateTimeFormat(undefined, { timeZone })` throws `RangeError` for an
|
|
26
|
+
* unknown zone and accepts both IANA names and `±HH:MM` offsets — which is
|
|
27
|
+
* exactly the acceptance set the setting wants, so the probe IS the validation
|
|
28
|
+
* rule rather than a hand-maintained list that would rot against the ICU data.
|
|
29
|
+
* `resolvedOptions()` then hands back the canonical spelling (`europe/moscow` →
|
|
30
|
+
* `Europe/Moscow`, `+0400` → `+04:00`), so what gets persisted and echoed is one
|
|
31
|
+
* stable form rather than whatever casing was typed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCanonicalTimezone(timezone: string): string | null;
|
|
34
|
+
/** Whether `Intl` recognises `timezone` — the validation gate for `/timezone`. */
|
|
35
|
+
export declare function checkIsValidTimezone(timezone: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* @description The zone the process resolved at startup — the default whenever
|
|
38
|
+
* nothing is stored, and the target `/timezone auto` resets to.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getHostTimezone(): string;
|
|
41
|
+
/**
|
|
42
|
+
* @description Whether the zone is a fixed UTC offset rather than a real region.
|
|
43
|
+
* Drives the daylight-saving warning line on the confirmation: a fixed offset
|
|
44
|
+
* silently goes an hour wrong when the operator's region changes to summer time.
|
|
45
|
+
*/
|
|
46
|
+
export declare function checkIsFixedOffsetZone(timezone: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* @description The value to assign to `process.env.TZ` for `timezone`, or `null`
|
|
49
|
+
* when the zone cannot be applied process-wide.
|
|
50
|
+
*
|
|
51
|
+
* An IANA name passes through unchanged. A fixed `±HH:MM` offset must NOT:
|
|
52
|
+
* `Intl.DateTimeFormat({ timeZone })` supports offset zones, but the `TZ`
|
|
53
|
+
* environment variable goes through ICU's own parser, which silently resolves
|
|
54
|
+
* `TZ="+04:00"` to **UTC** instead of rejecting it (measured on Node 22).
|
|
55
|
+
* Assigning it verbatim would therefore leave every clock on UTC while the
|
|
56
|
+
* confirmation — formatted through `Intl` — cheerfully printed `+04:00`: the
|
|
57
|
+
* exact plausible-but-wrong outcome the confirmation exists to prevent.
|
|
58
|
+
*
|
|
59
|
+
* A whole-hour offset has an exact IANA equivalent in `Etc/GMT±H`, which ICU
|
|
60
|
+
* does understand (POSIX sign inversion: UTC+4 is `Etc/GMT-4`). An offset
|
|
61
|
+
* carrying MINUTES has no such equivalent — no `TZ` spelling of it takes effect
|
|
62
|
+
* — so `null` is the honest answer and the caller rejects the input.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getProcessTimezoneValue(timezone: string): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* @description Whether the zone can actually take effect process-wide — the
|
|
67
|
+
* gate `/timezone` applies before storing, so a setting is never accepted that
|
|
68
|
+
* would leave the process running on a different clock than it reports.
|
|
69
|
+
*/
|
|
70
|
+
export declare function checkIsApplicableTimezone(timezone: string): boolean;
|
|
71
|
+
/** The region a zone belongs to (`Europe/Moscow` → `Europe`), or `null`. */
|
|
72
|
+
export declare function getTimezoneRegion(timezone: string): string | null;
|
|
73
|
+
/**
|
|
74
|
+
* @description The 10 IANA regions, sorted — level 1 of the `/timezone` picker.
|
|
75
|
+
*/
|
|
76
|
+
export declare function listTimezoneRegions(): string[];
|
|
77
|
+
/**
|
|
78
|
+
* @description Every zone in `region`, sorted — level 2 of the picker. An
|
|
79
|
+
* unknown region yields an empty list rather than throwing, so a stale callback
|
|
80
|
+
* carrying a region index that no longer resolves renders an empty page instead
|
|
81
|
+
* of killing the handler.
|
|
82
|
+
*/
|
|
83
|
+
export declare function getTimezonesForRegion(region: string): string[];
|
|
84
|
+
/**
|
|
85
|
+
* @description The zone's current wall clock as `18:42 (+03:00)` — the tail of
|
|
86
|
+
* every `/timezone` confirmation and of the `/status` zone row, so a wrong pick
|
|
87
|
+
* is obvious the moment it is made.
|
|
88
|
+
*/
|
|
89
|
+
export declare function formatZoneNow(timezone: string, nowMs: number): string;
|
|
90
|
+
/**
|
|
91
|
+
* @description The zone's current instant WITH the calendar date —
|
|
92
|
+
* `2026-09-14 18:42 (+03:00)`. Used in the picker header, where the date
|
|
93
|
+
* matters: a zone far enough east or west can sit on a different day than the
|
|
94
|
+
* operator expects, and that is the mistake the header is there to catch.
|
|
95
|
+
*/
|
|
96
|
+
export declare function formatZoneNowWithDate(timezone: string, nowMs: number): string;
|
|
97
|
+
/**
|
|
98
|
+
* @description Apply the stored zone to the process — the ONE impure function
|
|
99
|
+
* here, shared by bot startup and the runtime `/timezone` change so both take
|
|
100
|
+
* effect through identical code.
|
|
101
|
+
*
|
|
102
|
+
* `null` means "nothing stored": the `TZ` environment is restored to exactly
|
|
103
|
+
* what the process was launched with (absent stays absent), which is what makes
|
|
104
|
+
* `/timezone auto` return to the host zone and what keeps a default install
|
|
105
|
+
* behaving precisely as it did before this setting existed.
|
|
106
|
+
*
|
|
107
|
+
* Assigning `process.env.TZ` re-bases `Date` and `Intl` for subsequent calls, so
|
|
108
|
+
* no restart is needed — that behaviour is asserted by a unit test rather than
|
|
109
|
+
* trusted. The assigned value comes from {@link getProcessTimezoneValue}, which
|
|
110
|
+
* rewrites a fixed offset into the `Etc/GMT±H` spelling ICU honours.
|
|
111
|
+
*
|
|
112
|
+
* A zone with no applicable `TZ` value (an offset carrying minutes) is treated
|
|
113
|
+
* as "nothing stored" rather than applied: `/timezone` rejects those at the
|
|
114
|
+
* boundary, so this is only reachable from a hand-edited `state.json`, and
|
|
115
|
+
* falling back to the launch environment beats silently running on UTC.
|
|
116
|
+
*/
|
|
117
|
+
export declare function applyProcessTimezone(timezone: string | null): void;
|
|
118
|
+
/**
|
|
119
|
+
* @description The zone in effect right now: the stored setting when present,
|
|
120
|
+
* otherwise the host zone. The single resolution rule every render (`/status`,
|
|
121
|
+
* the picker header, the thread-context preamble, the schedule templates) reads,
|
|
122
|
+
* so no call site re-derives the "unset means host" default.
|
|
123
|
+
*/
|
|
124
|
+
export declare function getEffectiveTimezone(storedTimezone: string | null): string;
|
|
125
|
+
//# sourceMappingURL=timezone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA+CH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAO9C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAmDD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE1E"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description The operator's timezone — validation, the zone catalog behind the
|
|
4
|
+
* `/timezone` picker, wall-clock formatting, and the one impure apply path that
|
|
5
|
+
* makes the setting take effect process-wide.
|
|
6
|
+
*
|
|
7
|
+
* Why a process-global mechanism: the bot runs on a host whose clock may be
|
|
8
|
+
* anything (this deploy is `Etc/UTC`). Every clock the bot touches — cron fire
|
|
9
|
+
* times, "missed at HH:MM" renders, the `/timestamps` injection, schedule
|
|
10
|
+
* descriptions — reads HOST-LOCAL time. Assigning `process.env.TZ` re-bases
|
|
11
|
+
* `Date` and `Intl` immediately on Node (verified on Node 22, no restart
|
|
12
|
+
* needed), so setting it once at startup fixes all of those call sites at their
|
|
13
|
+
* existing code with no per-site timezone threading.
|
|
14
|
+
*
|
|
15
|
+
* That is also why the setting is ONE zone per bot instance rather than
|
|
16
|
+
* per-chat: `process.env.TZ` is global by nature, and two chat-scoped zones
|
|
17
|
+
* could not both be true in a single process.
|
|
18
|
+
*
|
|
19
|
+
* Everything except {@link applyProcessTimezone} is pure, so the catalog, the
|
|
20
|
+
* validation rule and the formatting are unit-testable without booting the bot.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.getCanonicalTimezone = getCanonicalTimezone;
|
|
24
|
+
exports.checkIsValidTimezone = checkIsValidTimezone;
|
|
25
|
+
exports.getHostTimezone = getHostTimezone;
|
|
26
|
+
exports.checkIsFixedOffsetZone = checkIsFixedOffsetZone;
|
|
27
|
+
exports.getProcessTimezoneValue = getProcessTimezoneValue;
|
|
28
|
+
exports.checkIsApplicableTimezone = checkIsApplicableTimezone;
|
|
29
|
+
exports.getTimezoneRegion = getTimezoneRegion;
|
|
30
|
+
exports.listTimezoneRegions = listTimezoneRegions;
|
|
31
|
+
exports.getTimezonesForRegion = getTimezonesForRegion;
|
|
32
|
+
exports.formatZoneNow = formatZoneNow;
|
|
33
|
+
exports.formatZoneNowWithDate = formatZoneNowWithDate;
|
|
34
|
+
exports.applyProcessTimezone = applyProcessTimezone;
|
|
35
|
+
exports.getEffectiveTimezone = getEffectiveTimezone;
|
|
36
|
+
/** Separator between the region and the rest of an IANA zone name. */
|
|
37
|
+
const zoneRegionSeparator = '/';
|
|
38
|
+
/**
|
|
39
|
+
* @description A fixed UTC offset written as a zone (`+04:00`, `-0330`, `+05`).
|
|
40
|
+
* `Intl` accepts these as real zones, so they are allowed — but they do NOT
|
|
41
|
+
* follow daylight saving, which is why picking one earns a warning line.
|
|
42
|
+
*/
|
|
43
|
+
const fixedOffsetZoneRe = /^([+-])(\d{2})(?::?(\d{2}))?$/;
|
|
44
|
+
const minutesPerHour = 60;
|
|
45
|
+
/**
|
|
46
|
+
* The widest `Etc/GMT±H` zones tzdata defines (UTC+14 .. UTC−12). An offset
|
|
47
|
+
* outside that has no IANA equivalent to apply.
|
|
48
|
+
*/
|
|
49
|
+
const maxEtcGmtOffsetHours = 14;
|
|
50
|
+
const minEtcGmtOffsetHours = -12;
|
|
51
|
+
/**
|
|
52
|
+
* The zone the process would use if the bot stored nothing — captured at module
|
|
53
|
+
* load, BEFORE {@link applyProcessTimezone} can overwrite `process.env.TZ`.
|
|
54
|
+
* Without this snapshot `/timezone auto` could not find its way back: once a
|
|
55
|
+
* stored zone is applied, `resolvedOptions()` reports the STORED zone and the
|
|
56
|
+
* original is gone.
|
|
57
|
+
*/
|
|
58
|
+
const hostTimezone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
59
|
+
/**
|
|
60
|
+
* The `TZ` environment value as the process was launched with it (possibly
|
|
61
|
+
* absent). Restored verbatim on a reset so an operator who deliberately exports
|
|
62
|
+
* `TZ` keeps that behaviour when no bot setting is stored.
|
|
63
|
+
*/
|
|
64
|
+
const initialTimezoneEnv = process.env.TZ;
|
|
65
|
+
/** The full IANA zone list, computed once (418 entries on Node 22). */
|
|
66
|
+
let cachedTimezones = null;
|
|
67
|
+
function getAllTimezones() {
|
|
68
|
+
if (cachedTimezones === null) {
|
|
69
|
+
cachedTimezones = [...Intl.supportedValuesOf('timeZone')].sort();
|
|
70
|
+
}
|
|
71
|
+
return cachedTimezones;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description Canonicalize a zone the operator typed, or `null` when `Intl`
|
|
75
|
+
* does not know it.
|
|
76
|
+
*
|
|
77
|
+
* `new Intl.DateTimeFormat(undefined, { timeZone })` throws `RangeError` for an
|
|
78
|
+
* unknown zone and accepts both IANA names and `±HH:MM` offsets — which is
|
|
79
|
+
* exactly the acceptance set the setting wants, so the probe IS the validation
|
|
80
|
+
* rule rather than a hand-maintained list that would rot against the ICU data.
|
|
81
|
+
* `resolvedOptions()` then hands back the canonical spelling (`europe/moscow` →
|
|
82
|
+
* `Europe/Moscow`, `+0400` → `+04:00`), so what gets persisted and echoed is one
|
|
83
|
+
* stable form rather than whatever casing was typed.
|
|
84
|
+
*/
|
|
85
|
+
function getCanonicalTimezone(timezone) {
|
|
86
|
+
if (typeof timezone !== 'string' || timezone.trim() === '')
|
|
87
|
+
return null;
|
|
88
|
+
try {
|
|
89
|
+
return new Intl.DateTimeFormat(undefined, { timeZone: timezone }).resolvedOptions().timeZone;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Whether `Intl` recognises `timezone` — the validation gate for `/timezone`. */
|
|
96
|
+
function checkIsValidTimezone(timezone) {
|
|
97
|
+
return getCanonicalTimezone(timezone) !== null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @description The zone the process resolved at startup — the default whenever
|
|
101
|
+
* nothing is stored, and the target `/timezone auto` resets to.
|
|
102
|
+
*/
|
|
103
|
+
function getHostTimezone() {
|
|
104
|
+
return hostTimezone;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @description Whether the zone is a fixed UTC offset rather than a real region.
|
|
108
|
+
* Drives the daylight-saving warning line on the confirmation: a fixed offset
|
|
109
|
+
* silently goes an hour wrong when the operator's region changes to summer time.
|
|
110
|
+
*/
|
|
111
|
+
function checkIsFixedOffsetZone(timezone) {
|
|
112
|
+
return fixedOffsetZoneRe.test(timezone);
|
|
113
|
+
}
|
|
114
|
+
/** Signed minutes of a `±HH:MM` zone, or `null` when it is not an offset. */
|
|
115
|
+
function getFixedOffsetMinutes(timezone) {
|
|
116
|
+
const match = fixedOffsetZoneRe.exec(timezone);
|
|
117
|
+
if (match === null)
|
|
118
|
+
return null;
|
|
119
|
+
const sign = match[1] === '-' ? -1 : 1;
|
|
120
|
+
return sign * (Number(match[2]) * minutesPerHour + Number(match[3] ?? 0));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* @description The value to assign to `process.env.TZ` for `timezone`, or `null`
|
|
124
|
+
* when the zone cannot be applied process-wide.
|
|
125
|
+
*
|
|
126
|
+
* An IANA name passes through unchanged. A fixed `±HH:MM` offset must NOT:
|
|
127
|
+
* `Intl.DateTimeFormat({ timeZone })` supports offset zones, but the `TZ`
|
|
128
|
+
* environment variable goes through ICU's own parser, which silently resolves
|
|
129
|
+
* `TZ="+04:00"` to **UTC** instead of rejecting it (measured on Node 22).
|
|
130
|
+
* Assigning it verbatim would therefore leave every clock on UTC while the
|
|
131
|
+
* confirmation — formatted through `Intl` — cheerfully printed `+04:00`: the
|
|
132
|
+
* exact plausible-but-wrong outcome the confirmation exists to prevent.
|
|
133
|
+
*
|
|
134
|
+
* A whole-hour offset has an exact IANA equivalent in `Etc/GMT±H`, which ICU
|
|
135
|
+
* does understand (POSIX sign inversion: UTC+4 is `Etc/GMT-4`). An offset
|
|
136
|
+
* carrying MINUTES has no such equivalent — no `TZ` spelling of it takes effect
|
|
137
|
+
* — so `null` is the honest answer and the caller rejects the input.
|
|
138
|
+
*/
|
|
139
|
+
function getProcessTimezoneValue(timezone) {
|
|
140
|
+
const offsetMinutes = getFixedOffsetMinutes(timezone);
|
|
141
|
+
if (offsetMinutes === null)
|
|
142
|
+
return timezone;
|
|
143
|
+
if (offsetMinutes % minutesPerHour !== 0)
|
|
144
|
+
return null;
|
|
145
|
+
const offsetHours = offsetMinutes / minutesPerHour;
|
|
146
|
+
if (offsetHours > maxEtcGmtOffsetHours || offsetHours < minEtcGmtOffsetHours)
|
|
147
|
+
return null;
|
|
148
|
+
return `Etc/GMT${offsetHours <= 0 ? '+' : '-'}${Math.abs(offsetHours)}`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* @description Whether the zone can actually take effect process-wide — the
|
|
152
|
+
* gate `/timezone` applies before storing, so a setting is never accepted that
|
|
153
|
+
* would leave the process running on a different clock than it reports.
|
|
154
|
+
*/
|
|
155
|
+
function checkIsApplicableTimezone(timezone) {
|
|
156
|
+
return getProcessTimezoneValue(timezone) !== null;
|
|
157
|
+
}
|
|
158
|
+
/** The region a zone belongs to (`Europe/Moscow` → `Europe`), or `null`. */
|
|
159
|
+
function getTimezoneRegion(timezone) {
|
|
160
|
+
const separatorIndex = timezone.indexOf(zoneRegionSeparator);
|
|
161
|
+
return separatorIndex > 0 ? timezone.slice(0, separatorIndex) : null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* @description The 10 IANA regions, sorted — level 1 of the `/timezone` picker.
|
|
165
|
+
*/
|
|
166
|
+
function listTimezoneRegions() {
|
|
167
|
+
const regions = new Set();
|
|
168
|
+
for (const timezone of getAllTimezones()) {
|
|
169
|
+
const region = getTimezoneRegion(timezone);
|
|
170
|
+
if (region !== null)
|
|
171
|
+
regions.add(region);
|
|
172
|
+
}
|
|
173
|
+
return [...regions].sort();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @description Every zone in `region`, sorted — level 2 of the picker. An
|
|
177
|
+
* unknown region yields an empty list rather than throwing, so a stale callback
|
|
178
|
+
* carrying a region index that no longer resolves renders an empty page instead
|
|
179
|
+
* of killing the handler.
|
|
180
|
+
*/
|
|
181
|
+
function getTimezonesForRegion(region) {
|
|
182
|
+
const prefix = `${region}${zoneRegionSeparator}`;
|
|
183
|
+
return getAllTimezones().filter((timezone) => timezone.startsWith(prefix));
|
|
184
|
+
}
|
|
185
|
+
/** Prefix `Intl`'s `longOffset` renders before the numeric offset. */
|
|
186
|
+
const longOffsetPrefix = 'GMT';
|
|
187
|
+
/** What a `longOffset` of exactly `GMT` means numerically. */
|
|
188
|
+
const zeroOffset = '+00:00';
|
|
189
|
+
/**
|
|
190
|
+
* Read the zone's wall clock at `nowMs` via `formatToParts`, so the date, the
|
|
191
|
+
* time and the offset come from ONE formatter pass (and therefore one instant)
|
|
192
|
+
* instead of three separately-parsed strings.
|
|
193
|
+
*
|
|
194
|
+
* Throws `RangeError` for an invalid zone — callers validate with
|
|
195
|
+
* {@link checkIsValidTimezone} first.
|
|
196
|
+
*/
|
|
197
|
+
function getZoneClockParts(timezone, nowMs) {
|
|
198
|
+
const parts = new Intl.DateTimeFormat('en-CA', {
|
|
199
|
+
timeZone: timezone,
|
|
200
|
+
year: 'numeric',
|
|
201
|
+
month: '2-digit',
|
|
202
|
+
day: '2-digit',
|
|
203
|
+
hour: '2-digit',
|
|
204
|
+
minute: '2-digit',
|
|
205
|
+
hourCycle: 'h23',
|
|
206
|
+
timeZoneName: 'longOffset',
|
|
207
|
+
}).formatToParts(new Date(nowMs));
|
|
208
|
+
const read = (type) => parts.find((part) => part.type === type)?.value ?? '';
|
|
209
|
+
const rawOffset = read('timeZoneName');
|
|
210
|
+
const numericOffset = rawOffset.startsWith(longOffsetPrefix)
|
|
211
|
+
? rawOffset.slice(longOffsetPrefix.length)
|
|
212
|
+
: rawOffset;
|
|
213
|
+
return {
|
|
214
|
+
date: `${read('year')}-${read('month')}-${read('day')}`,
|
|
215
|
+
time: `${read('hour')}:${read('minute')}`,
|
|
216
|
+
offset: numericOffset === '' ? zeroOffset : numericOffset,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* @description The zone's current wall clock as `18:42 (+03:00)` — the tail of
|
|
221
|
+
* every `/timezone` confirmation and of the `/status` zone row, so a wrong pick
|
|
222
|
+
* is obvious the moment it is made.
|
|
223
|
+
*/
|
|
224
|
+
function formatZoneNow(timezone, nowMs) {
|
|
225
|
+
const { time, offset } = getZoneClockParts(timezone, nowMs);
|
|
226
|
+
return `${time} (${offset})`;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* @description The zone's current instant WITH the calendar date —
|
|
230
|
+
* `2026-09-14 18:42 (+03:00)`. Used in the picker header, where the date
|
|
231
|
+
* matters: a zone far enough east or west can sit on a different day than the
|
|
232
|
+
* operator expects, and that is the mistake the header is there to catch.
|
|
233
|
+
*/
|
|
234
|
+
function formatZoneNowWithDate(timezone, nowMs) {
|
|
235
|
+
const { date, time, offset } = getZoneClockParts(timezone, nowMs);
|
|
236
|
+
return `${date} ${time} (${offset})`;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @description Apply the stored zone to the process — the ONE impure function
|
|
240
|
+
* here, shared by bot startup and the runtime `/timezone` change so both take
|
|
241
|
+
* effect through identical code.
|
|
242
|
+
*
|
|
243
|
+
* `null` means "nothing stored": the `TZ` environment is restored to exactly
|
|
244
|
+
* what the process was launched with (absent stays absent), which is what makes
|
|
245
|
+
* `/timezone auto` return to the host zone and what keeps a default install
|
|
246
|
+
* behaving precisely as it did before this setting existed.
|
|
247
|
+
*
|
|
248
|
+
* Assigning `process.env.TZ` re-bases `Date` and `Intl` for subsequent calls, so
|
|
249
|
+
* no restart is needed — that behaviour is asserted by a unit test rather than
|
|
250
|
+
* trusted. The assigned value comes from {@link getProcessTimezoneValue}, which
|
|
251
|
+
* rewrites a fixed offset into the `Etc/GMT±H` spelling ICU honours.
|
|
252
|
+
*
|
|
253
|
+
* A zone with no applicable `TZ` value (an offset carrying minutes) is treated
|
|
254
|
+
* as "nothing stored" rather than applied: `/timezone` rejects those at the
|
|
255
|
+
* boundary, so this is only reachable from a hand-edited `state.json`, and
|
|
256
|
+
* falling back to the launch environment beats silently running on UTC.
|
|
257
|
+
*/
|
|
258
|
+
function applyProcessTimezone(timezone) {
|
|
259
|
+
const envValue = timezone === null ? null : getProcessTimezoneValue(timezone);
|
|
260
|
+
if (envValue === null) {
|
|
261
|
+
if (initialTimezoneEnv === undefined)
|
|
262
|
+
delete process.env.TZ;
|
|
263
|
+
else
|
|
264
|
+
process.env.TZ = initialTimezoneEnv;
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
process.env.TZ = envValue;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* @description The zone in effect right now: the stored setting when present,
|
|
271
|
+
* otherwise the host zone. The single resolution rule every render (`/status`,
|
|
272
|
+
* the picker header, the thread-context preamble, the schedule templates) reads,
|
|
273
|
+
* so no call site re-derives the "unset means host" default.
|
|
274
|
+
*/
|
|
275
|
+
function getEffectiveTimezone(storedTimezone) {
|
|
276
|
+
return storedTimezone ?? hostTimezone;
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=timezone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.js","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { execFile } from 'child_process';
|
|
2
|
+
export declare const execFilePromise: typeof execFile.__promisify__;
|
|
3
|
+
/**
|
|
4
|
+
* @description `-t` target naming a tmux SESSION exactly (`kill-session`). A
|
|
5
|
+
* bare name falls back to a PREFIX match when no session has exactly that name
|
|
6
|
+
* — on tmux 3.4, with topic 2's session gone, `kill-session -t claude-<chat>-2`
|
|
7
|
+
* kills topic 20's. The leading `=` makes the match exact.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTmuxSessionTarget(sessionName: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* @description `-t` target naming a session's current pane exactly — for every
|
|
12
|
+
* pane or window command (`send-keys`, `capture-pane`, `display-message`,
|
|
13
|
+
* `list-panes`). Exact for the same reason as {@link getTmuxSessionTarget}; the
|
|
14
|
+
* trailing `:` is required, since `send-keys -t =name` fails "can't find pane".
|
|
15
|
+
*/
|
|
16
|
+
export declare function getTmuxPaneTarget(sessionName: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* @description The arguments every tmux call starts with (Jira connector plan J3,
|
|
19
|
+
* D8): `TMUX_SOCKET_NAME` puts the instance on its OWN tmux server (`-L`), away
|
|
20
|
+
* from the default one — a boot kills every agent session it does not own, which
|
|
21
|
+
* on a shared server would be another bot's. The CLI preflight validates the
|
|
22
|
+
* name. This file is the only place that runs tmux; keep it so.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getTmuxBaseArgs(): string[];
|
|
25
|
+
/**
|
|
26
|
+
* @description The environment a tmux call runs with. On a PRIVATE server
|
|
27
|
+
* (`TMUX_SOCKET_NAME`) only the agent allowlist plus where its socket lives
|
|
28
|
+
* (R32): the call that starts the server hands it its global environment, which
|
|
29
|
+
* every session inherits and any process on the server can read back — a
|
|
30
|
+
* tracker instance's secrets must not be in it. The default server (a Telegram
|
|
31
|
+
* instance) keeps the bot's own environment, as before.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getTmuxExecEnv(): NodeJS.ProcessEnv | undefined;
|
|
34
|
+
/** Best-effort tmux call: returns stdout on success, empty string on any error. */
|
|
35
|
+
export declare function tmuxAsync(...args: string[]): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* @description Strict tmux call: throws if tmux exits non-zero (or times out).
|
|
38
|
+
* Used on critical paths (`new-session`, `send-keys` of the agent command
|
|
39
|
+
* line) where silent failure would leave the bot thinking a session
|
|
40
|
+
* started when it didn't. Callers should wrap and translate to a friendly
|
|
41
|
+
* error for the user.
|
|
42
|
+
*/
|
|
43
|
+
export declare function tmuxOrThrowAsync(...args: string[]): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* @description Reject `args` with NUL or other control characters before
|
|
46
|
+
* passing to a backend. These are unsafe in shell-quoted contexts (the
|
|
47
|
+
* `'\\''` escape doesn't protect against `\x00`), and tmux/terminals
|
|
48
|
+
* treat them as control sequences. Mirrors `validateSubdir`'s reasoning.
|
|
49
|
+
*/
|
|
50
|
+
export declare function checkArgsAreSafe(args: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* @description Shell-quote a path for safe inclusion in a tmux `send-keys "..."` command.
|
|
53
|
+
*
|
|
54
|
+
* The tmux command line concatenates: `tmux send-keys -t <name> "cd <dir> && claude ..."`.
|
|
55
|
+
* The dir is interpreted by the user's shell after tmux delivers the keystrokes, so we
|
|
56
|
+
* single-quote it. Embedded single quotes are escaped via the standard
|
|
57
|
+
* `'\''` close-reopen idiom. This is the path a backend will `cd` into, so paths with
|
|
58
|
+
* spaces or special chars (e.g. `~/my projects/foo`) must survive untouched.
|
|
59
|
+
*/
|
|
60
|
+
export declare function shellSingleQuote(s: string): string;
|
|
61
|
+
//# sourceMappingURL=tmuxExec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmuxExec.d.ts","sourceRoot":"","sources":["../../src/utils/tmuxExec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,eAAO,MAAM,eAAe,+BAAsB,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAG1C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,UAAU,GAAG,SAAS,CAI9D;AAED,mFAAmF;AACnF,wBAAsB,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlE;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.execFilePromise = void 0;
|
|
4
|
+
exports.getTmuxSessionTarget = getTmuxSessionTarget;
|
|
5
|
+
exports.getTmuxPaneTarget = getTmuxPaneTarget;
|
|
6
|
+
exports.getTmuxBaseArgs = getTmuxBaseArgs;
|
|
7
|
+
exports.getTmuxExecEnv = getTmuxExecEnv;
|
|
8
|
+
exports.tmuxAsync = tmuxAsync;
|
|
9
|
+
exports.tmuxOrThrowAsync = tmuxOrThrowAsync;
|
|
10
|
+
exports.checkArgsAreSafe = checkArgsAreSafe;
|
|
11
|
+
exports.shellSingleQuote = shellSingleQuote;
|
|
12
|
+
const child_process_1 = require("child_process");
|
|
13
|
+
const util_1 = require("util");
|
|
14
|
+
const agentEnvironment_1 = require("./agentEnvironment");
|
|
15
|
+
exports.execFilePromise = (0, util_1.promisify)(child_process_1.execFile);
|
|
16
|
+
/**
|
|
17
|
+
* @description `-t` target naming a tmux SESSION exactly (`kill-session`). A
|
|
18
|
+
* bare name falls back to a PREFIX match when no session has exactly that name
|
|
19
|
+
* — on tmux 3.4, with topic 2's session gone, `kill-session -t claude-<chat>-2`
|
|
20
|
+
* kills topic 20's. The leading `=` makes the match exact.
|
|
21
|
+
*/
|
|
22
|
+
function getTmuxSessionTarget(sessionName) {
|
|
23
|
+
return `=${sessionName}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @description `-t` target naming a session's current pane exactly — for every
|
|
27
|
+
* pane or window command (`send-keys`, `capture-pane`, `display-message`,
|
|
28
|
+
* `list-panes`). Exact for the same reason as {@link getTmuxSessionTarget}; the
|
|
29
|
+
* trailing `:` is required, since `send-keys -t =name` fails "can't find pane".
|
|
30
|
+
*/
|
|
31
|
+
function getTmuxPaneTarget(sessionName) {
|
|
32
|
+
return `=${sessionName}:`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @description The arguments every tmux call starts with (Jira connector plan J3,
|
|
36
|
+
* D8): `TMUX_SOCKET_NAME` puts the instance on its OWN tmux server (`-L`), away
|
|
37
|
+
* from the default one — a boot kills every agent session it does not own, which
|
|
38
|
+
* on a shared server would be another bot's. The CLI preflight validates the
|
|
39
|
+
* name. This file is the only place that runs tmux; keep it so.
|
|
40
|
+
*/
|
|
41
|
+
function getTmuxBaseArgs() {
|
|
42
|
+
const socketName = process.env.TMUX_SOCKET_NAME;
|
|
43
|
+
return socketName ? ['-L', socketName] : [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description The environment a tmux call runs with. On a PRIVATE server
|
|
47
|
+
* (`TMUX_SOCKET_NAME`) only the agent allowlist plus where its socket lives
|
|
48
|
+
* (R32): the call that starts the server hands it its global environment, which
|
|
49
|
+
* every session inherits and any process on the server can read back — a
|
|
50
|
+
* tracker instance's secrets must not be in it. The default server (a Telegram
|
|
51
|
+
* instance) keeps the bot's own environment, as before.
|
|
52
|
+
*/
|
|
53
|
+
function getTmuxExecEnv() {
|
|
54
|
+
if (!process.env.TMUX_SOCKET_NAME)
|
|
55
|
+
return undefined;
|
|
56
|
+
const socketDir = process.env.TMUX_TMPDIR;
|
|
57
|
+
return { ...(0, agentEnvironment_1.getAgentEnvironment)(), ...(socketDir ? { TMUX_TMPDIR: socketDir } : {}) };
|
|
58
|
+
}
|
|
59
|
+
/** Best-effort tmux call: returns stdout on success, empty string on any error. */
|
|
60
|
+
async function tmuxAsync(...args) {
|
|
61
|
+
try {
|
|
62
|
+
const { stdout } = await (0, exports.execFilePromise)('tmux', [...getTmuxBaseArgs(), ...args], {
|
|
63
|
+
encoding: 'utf-8',
|
|
64
|
+
timeout: 5000,
|
|
65
|
+
env: getTmuxExecEnv(),
|
|
66
|
+
});
|
|
67
|
+
return stdout.toString().trim();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description Strict tmux call: throws if tmux exits non-zero (or times out).
|
|
75
|
+
* Used on critical paths (`new-session`, `send-keys` of the agent command
|
|
76
|
+
* line) where silent failure would leave the bot thinking a session
|
|
77
|
+
* started when it didn't. Callers should wrap and translate to a friendly
|
|
78
|
+
* error for the user.
|
|
79
|
+
*/
|
|
80
|
+
async function tmuxOrThrowAsync(...args) {
|
|
81
|
+
const { stdout } = await (0, exports.execFilePromise)('tmux', [...getTmuxBaseArgs(), ...args], {
|
|
82
|
+
encoding: 'utf-8',
|
|
83
|
+
timeout: 5000,
|
|
84
|
+
env: getTmuxExecEnv(),
|
|
85
|
+
});
|
|
86
|
+
return stdout.toString().trim();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @description Reject `args` with NUL or other control characters before
|
|
90
|
+
* passing to a backend. These are unsafe in shell-quoted contexts (the
|
|
91
|
+
* `'\\''` escape doesn't protect against `\x00`), and tmux/terminals
|
|
92
|
+
* treat them as control sequences. Mirrors `validateSubdir`'s reasoning.
|
|
93
|
+
*/
|
|
94
|
+
function checkArgsAreSafe(args) {
|
|
95
|
+
return !/[\x00-\x08\x0b\x0c\x0e-\x1f]/.test(args);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* @description Shell-quote a path for safe inclusion in a tmux `send-keys "..."` command.
|
|
99
|
+
*
|
|
100
|
+
* The tmux command line concatenates: `tmux send-keys -t <name> "cd <dir> && claude ..."`.
|
|
101
|
+
* The dir is interpreted by the user's shell after tmux delivers the keystrokes, so we
|
|
102
|
+
* single-quote it. Embedded single quotes are escaped via the standard
|
|
103
|
+
* `'\''` close-reopen idiom. This is the path a backend will `cd` into, so paths with
|
|
104
|
+
* spaces or special chars (e.g. `~/my projects/foo`) must survive untouched.
|
|
105
|
+
*/
|
|
106
|
+
function shellSingleQuote(s) {
|
|
107
|
+
return `'${s.replace(/'/g, `'\\''`)}'`;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=tmuxExec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmuxExec.js","sourceRoot":"","sources":["../../src/utils/tmuxExec.ts"],"names":[],"mappings":";;;AAYA,oDAEC;AAQD,8CAEC;AASD,0CAGC;AAUD,wCAIC;AAGD,8BAWC;AASD,4CAOC;AAQD,4CAEC;AAWD,4CAEC;AAvGD,iDAAyC;AACzC,+BAAiC;AACjC,yDAAyD;AAE5C,QAAA,eAAe,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,WAAmB;IACtD,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,OAAO,IAAI,WAAW,GAAG,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAChD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC1C,OAAO,EAAE,GAAG,IAAA,sCAAmB,GAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,mFAAmF;AAC5E,KAAK,UAAU,SAAS,CAAC,GAAG,IAAc;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAe,EAAC,MAAM,EAAE,CAAC,GAAG,eAAe,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE;YAChF,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,cAAc,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB,CAAC,GAAG,IAAc;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAe,EAAC,MAAM,EAAE,CAAC,GAAG,eAAe,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE;QAChF,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,cAAc,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,CAAS;IACxC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type SessionKey } from '../sessionKey';
|
|
2
|
+
/**
|
|
3
|
+
* @description Tmux session name for a `SessionKey`, namespaced by a backend
|
|
4
|
+
* `prefix` so different adapters (Claude `claude-…`, terminal `term-…`) never
|
|
5
|
+
* collide on one tmux server.
|
|
6
|
+
*
|
|
7
|
+
* Format: `<prefix>-<serializedKey with ':' → '-'>`, which for Telegram is the
|
|
8
|
+
* historical `<prefix>-<chatId>-<threadId>`. Negative chat ids (forum
|
|
9
|
+
* supergroups are negative) keep their minus sign — tmux session names accept
|
|
10
|
+
* it. The format is `parse`-able back to `SessionKey` via
|
|
11
|
+
* {@link parseTmuxSessionName} with the SAME prefix.
|
|
12
|
+
*
|
|
13
|
+
* The connector's codec owns the serialized halves, so this helper never looks
|
|
14
|
+
* at platform-specific fields and the on-disk names stay byte-identical.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildTmuxSessionName(prefix: string, key: SessionKey): string;
|
|
17
|
+
/**
|
|
18
|
+
* @description Inverse of {@link buildTmuxSessionName} for a given `prefix`.
|
|
19
|
+
* Returns `null` for names that don't parse back to a key (e.g. an unrelated
|
|
20
|
+
* tmux session a user started by hand, or one owned by a different backend's
|
|
21
|
+
* prefix).
|
|
22
|
+
*
|
|
23
|
+
* The slug after the prefix is read back by the codec that owns it
|
|
24
|
+
* ({@link tryKeyFromSlug}): Telegram's `claude--1001234-42` parses to
|
|
25
|
+
* `-1001234:42` (split on the last `-`, whatever the chat id's sign), Jira's
|
|
26
|
+
* `claude-jira-PROJ-PROJ-12` to `jira:PROJ:PROJ-12`.
|
|
27
|
+
*
|
|
28
|
+
* Strictness lives in the codec (audit S1 / #22): plain `Number(...)` accepts
|
|
29
|
+
* `1e5`, `0x10`, `1.5`, `" 42 "`. Such values come from a foreign tmux session
|
|
30
|
+
* whose name happens to share our prefix; treating them as ours would cause an
|
|
31
|
+
* adopt path to attach to an unrelated session.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseTmuxSessionName(prefix: string, name: string): SessionKey | null;
|
|
34
|
+
//# sourceMappingURL=tmuxSessionName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmuxSessionName.d.ts","sourceRoot":"","sources":["../../src/utils/tmuxSessionName.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAS3E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAE5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIpF"}
|