charness 0.0.0-stage → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +88 -0
- package/DEVELOPMENT.md +110 -0
- package/LICENSE +21 -0
- package/MIGRATION_1_TO_2.md +24 -0
- package/README.md +1196 -2
- package/dist/accessControl.d.ts +71 -0
- package/dist/accessControl.d.ts.map +1 -0
- package/dist/accessControl.js +108 -0
- package/dist/accessControl.js.map +1 -0
- package/dist/adapters/adapterEventRouting.d.ts +51 -0
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
- package/dist/adapters/adapterEventRouting.js +74 -0
- package/dist/adapters/adapterEventRouting.js.map +1 -0
- package/dist/adapters/adapterNames.d.ts +19 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -0
- package/dist/adapters/adapterNames.js +25 -0
- package/dist/adapters/adapterNames.js.map +1 -0
- package/dist/adapters/claudeCliAdapter.d.ts +1351 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeCliAdapter.js +4239 -0
- package/dist/adapters/claudeCliAdapter.js.map +1 -0
- package/dist/adapters/claudeConfigDir.d.ts +40 -0
- package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
- package/dist/adapters/claudeConfigDir.js +3 -0
- package/dist/adapters/claudeConfigDir.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +580 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.js +1891 -0
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
- package/dist/adapters/claudePlatformFlags.d.ts +35 -0
- package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
- package/dist/adapters/claudePlatformFlags.js +46 -0
- package/dist/adapters/claudePlatformFlags.js.map +1 -0
- package/dist/adapters/createAdapter.d.ts +260 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -0
- package/dist/adapters/createAdapter.js +512 -0
- package/dist/adapters/createAdapter.js.map +1 -0
- package/dist/adapters/openCodeAdapter.d.ts +1469 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
- package/dist/adapters/openCodeAdapter.js +4623 -0
- package/dist/adapters/openCodeAdapter.js.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
- package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
- package/dist/adapters/sessionLaunchDefaults.js +15 -0
- package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
- package/dist/adapters/terminalAdapter.d.ts +68 -0
- package/dist/adapters/terminalAdapter.d.ts.map +1 -0
- package/dist/adapters/terminalAdapter.js +371 -0
- package/dist/adapters/terminalAdapter.js.map +1 -0
- package/dist/agentLogin/agentLogin.d.ts +44 -0
- package/dist/agentLogin/agentLogin.d.ts.map +1 -0
- package/dist/agentLogin/agentLogin.js +530 -0
- package/dist/agentLogin/agentLogin.js.map +1 -0
- package/dist/agentTrigger.d.ts +28 -0
- package/dist/agentTrigger.d.ts.map +1 -0
- package/dist/agentTrigger.js +53 -0
- package/dist/agentTrigger.js.map +1 -0
- package/dist/apiErrorRetry.d.ts +214 -0
- package/dist/apiErrorRetry.d.ts.map +1 -0
- package/dist/apiErrorRetry.js +382 -0
- package/dist/apiErrorRetry.js.map +1 -0
- package/dist/apiRetryKick.d.ts +157 -0
- package/dist/apiRetryKick.d.ts.map +1 -0
- package/dist/apiRetryKick.js +174 -0
- package/dist/apiRetryKick.js.map +1 -0
- package/dist/bootClassifier.d.ts +46 -0
- package/dist/bootClassifier.d.ts.map +1 -0
- package/dist/bootClassifier.js +43 -0
- package/dist/bootClassifier.js.map +1 -0
- package/dist/bot.d.ts +207 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +11226 -0
- package/dist/bot.js.map +1 -0
- package/dist/botFileStorage.d.ts +60 -0
- package/dist/botFileStorage.d.ts.map +1 -0
- package/dist/botFileStorage.js +205 -0
- package/dist/botFileStorage.js.map +1 -0
- package/dist/cli/applyDnsFix.d.ts +7 -0
- package/dist/cli/applyDnsFix.d.ts.map +1 -0
- package/dist/cli/applyDnsFix.js +46 -0
- package/dist/cli/applyDnsFix.js.map +1 -0
- package/dist/cli/bot.d.ts +27 -0
- package/dist/cli/bot.d.ts.map +1 -0
- package/dist/cli/bot.js +98 -0
- package/dist/cli/bot.js.map +1 -0
- package/dist/cli/botEntry.d.ts +3 -0
- package/dist/cli/botEntry.d.ts.map +1 -0
- package/dist/cli/botEntry.js +11 -0
- package/dist/cli/botEntry.js.map +1 -0
- package/dist/cli/claudeProfiles.d.ts +42 -0
- package/dist/cli/claudeProfiles.d.ts.map +1 -0
- package/dist/cli/claudeProfiles.js +106 -0
- package/dist/cli/claudeProfiles.js.map +1 -0
- package/dist/cli/connectorGuards.d.ts +31 -0
- package/dist/cli/connectorGuards.d.ts.map +1 -0
- package/dist/cli/connectorGuards.js +159 -0
- package/dist/cli/connectorGuards.js.map +1 -0
- package/dist/cli/envLoader.d.ts +34 -0
- package/dist/cli/envLoader.d.ts.map +1 -0
- package/dist/cli/envLoader.js +132 -0
- package/dist/cli/envLoader.js.map +1 -0
- package/dist/cli/hot.d.ts +82 -0
- package/dist/cli/hot.d.ts.map +1 -0
- package/dist/cli/hot.js +323 -0
- package/dist/cli/hot.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +140 -0
- package/dist/cli.js.map +1 -0
- package/dist/connectors/jira/adf.d.ts +74 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -0
- package/dist/connectors/jira/adf.js +412 -0
- package/dist/connectors/jira/adf.js.map +1 -0
- package/dist/connectors/jira/agentBinaries.d.ts +14 -0
- package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
- package/dist/connectors/jira/agentBinaries.js +75 -0
- package/dist/connectors/jira/agentBinaries.js.map +1 -0
- package/dist/connectors/jira/answerSink.d.ts +59 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -0
- package/dist/connectors/jira/answerSink.js +234 -0
- package/dist/connectors/jira/answerSink.js.map +1 -0
- package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
- package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentDownload.js +92 -0
- package/dist/connectors/jira/attachmentDownload.js.map +1 -0
- package/dist/connectors/jira/attachmentTool.d.ts +50 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
- package/dist/connectors/jira/attachmentTool.js +166 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -0
- package/dist/connectors/jira/client.d.ts +522 -0
- package/dist/connectors/jira/client.d.ts.map +1 -0
- package/dist/connectors/jira/client.js +491 -0
- package/dist/connectors/jira/client.js.map +1 -0
- package/dist/connectors/jira/config.d.ts +104 -0
- package/dist/connectors/jira/config.d.ts.map +1 -0
- package/dist/connectors/jira/config.js +323 -0
- package/dist/connectors/jira/config.js.map +1 -0
- package/dist/connectors/jira/configFile.d.ts +10 -0
- package/dist/connectors/jira/configFile.d.ts.map +1 -0
- package/dist/connectors/jira/configFile.js +50 -0
- package/dist/connectors/jira/configFile.js.map +1 -0
- package/dist/connectors/jira/connector.d.ts +71 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -0
- package/dist/connectors/jira/connector.js +312 -0
- package/dist/connectors/jira/connector.js.map +1 -0
- package/dist/connectors/jira/contextLedger.d.ts +60 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
- package/dist/connectors/jira/contextLedger.js +196 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -0
- package/dist/connectors/jira/contextPreamble.d.ts +18 -0
- package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
- package/dist/connectors/jira/contextPreamble.js +31 -0
- package/dist/connectors/jira/contextPreamble.js.map +1 -0
- package/dist/connectors/jira/inbound.d.ts +141 -0
- package/dist/connectors/jira/inbound.d.ts.map +1 -0
- package/dist/connectors/jira/inbound.js +331 -0
- package/dist/connectors/jira/inbound.js.map +1 -0
- package/dist/connectors/jira/issueBlocks.d.ts +74 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
- package/dist/connectors/jira/issueBlocks.js +257 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -0
- package/dist/connectors/jira/issueContext.d.ts +31 -0
- package/dist/connectors/jira/issueContext.d.ts.map +1 -0
- package/dist/connectors/jira/issueContext.js +70 -0
- package/dist/connectors/jira/issueContext.js.map +1 -0
- package/dist/connectors/jira/issueDelta.d.ts +38 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
- package/dist/connectors/jira/issueDelta.js +59 -0
- package/dist/connectors/jira/issueDelta.js.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts +22 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
- package/dist/connectors/jira/mediaPlaceholders.js +105 -0
- package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
- package/dist/connectors/jira/outbound.d.ts +6 -0
- package/dist/connectors/jira/outbound.d.ts.map +1 -0
- package/dist/connectors/jira/outbound.js +38 -0
- package/dist/connectors/jira/outbound.js.map +1 -0
- package/dist/connectors/jira/prompt.d.ts +39 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -0
- package/dist/connectors/jira/prompt.js +102 -0
- package/dist/connectors/jira/prompt.js.map +1 -0
- package/dist/connectors/jira/promptSpill.d.ts +50 -0
- package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
- package/dist/connectors/jira/promptSpill.js +157 -0
- package/dist/connectors/jira/promptSpill.js.map +1 -0
- package/dist/connectors/jira/promptText.d.ts +7 -0
- package/dist/connectors/jira/promptText.d.ts.map +1 -0
- package/dist/connectors/jira/promptText.js +26 -0
- package/dist/connectors/jira/promptText.js.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts +18 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/jira/sessionKeyCodec.js +106 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/jira/trigger.d.ts +54 -0
- package/dist/connectors/jira/trigger.d.ts.map +1 -0
- package/dist/connectors/jira/trigger.js +101 -0
- package/dist/connectors/jira/trigger.js.map +1 -0
- package/dist/connectors/jira/triggerLog.d.ts +53 -0
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
- package/dist/connectors/jira/triggerLog.js +78 -0
- package/dist/connectors/jira/triggerLog.js.map +1 -0
- package/dist/connectors/jira/trustedGroup.d.ts +54 -0
- package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
- package/dist/connectors/jira/trustedGroup.js +98 -0
- package/dist/connectors/jira/trustedGroup.js.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
- package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
- package/dist/connectors/jira/unconfirmedPosts.js +105 -0
- package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
- package/dist/connectors/telegram/answerSink.d.ts +46 -0
- package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
- package/dist/connectors/telegram/answerSink.js +71 -0
- package/dist/connectors/telegram/answerSink.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +34 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js +112 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
- package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/botCore.js +3 -0
- package/dist/connectors/telegram/commands/botCore.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +58 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -0
- package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/compaction.js +868 -0
- package/dist/connectors/telegram/commands/compaction.js.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/displayModes.js +335 -0
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts +49 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +117 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.js +966 -0
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
- package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
- package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/reminders.js +624 -0
- package/dist/connectors/telegram/commands/reminders.js.map +1 -0
- package/dist/connectors/telegram/fileIntake.d.ts +166 -0
- package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
- package/dist/connectors/telegram/fileIntake.js +304 -0
- package/dist/connectors/telegram/fileIntake.js.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
- package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
- package/dist/connectors/telegram/fileSendGateway.js +221 -0
- package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
- package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
- package/dist/connectors/telegram/inbound.d.ts +131 -0
- package/dist/connectors/telegram/inbound.d.ts.map +1 -0
- package/dist/connectors/telegram/inbound.js +278 -0
- package/dist/connectors/telegram/inbound.js.map +1 -0
- package/dist/connectors/telegram/languagePicker.d.ts +32 -0
- package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/languagePicker.js +55 -0
- package/dist/connectors/telegram/languagePicker.js.map +1 -0
- package/dist/connectors/telegram/messageSplit.d.ts +62 -0
- package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
- package/dist/connectors/telegram/messageSplit.js +119 -0
- package/dist/connectors/telegram/messageSplit.js.map +1 -0
- package/dist/connectors/telegram/outbound.d.ts +62 -0
- package/dist/connectors/telegram/outbound.d.ts.map +1 -0
- package/dist/connectors/telegram/outbound.js +116 -0
- package/dist/connectors/telegram/outbound.js.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
- package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
- package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
- package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
- package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
- package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
- package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
- package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.js +120 -0
- package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
- package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
- package/dist/connectors/telegram/questionKeyboards.js +37 -0
- package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
- package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
- package/dist/connectors/telegram/renderAgentHtml.js +97 -0
- package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
- package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
- package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
- package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
- package/dist/connectors/telegram/telegramCallGuard.js +35 -0
- package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
- package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
- package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
- package/dist/connectors/telegram/timezonePicker.js +142 -0
- package/dist/connectors/telegram/timezonePicker.js.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
- package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
- package/dist/connectors/telegram/updateDispatcher.js +159 -0
- package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
- package/dist/connectors/test/connector.d.ts +52 -0
- package/dist/connectors/test/connector.d.ts.map +1 -0
- package/dist/connectors/test/connector.js +143 -0
- package/dist/connectors/test/connector.js.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
- package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
- package/dist/connectors/test/sessionKeyCodec.js +50 -0
- package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
- package/dist/diagLog.d.ts +6 -0
- package/dist/diagLog.d.ts.map +1 -0
- package/dist/diagLog.js +58 -0
- package/dist/diagLog.js.map +1 -0
- package/dist/effortLevels.d.ts +68 -0
- package/dist/effortLevels.d.ts.map +1 -0
- package/dist/effortLevels.js +114 -0
- package/dist/effortLevels.js.map +1 -0
- package/dist/folderName.d.ts +42 -0
- package/dist/folderName.d.ts.map +1 -0
- package/dist/folderName.js +51 -0
- package/dist/folderName.js.map +1 -0
- package/dist/i18n/de.d.ts +2 -0
- package/dist/i18n/de.d.ts.map +1 -0
- package/dist/i18n/de.js +665 -0
- package/dist/i18n/de.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +694 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/es.d.ts +2 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +665 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/fr.d.ts +2 -0
- package/dist/i18n/fr.d.ts.map +1 -0
- package/dist/i18n/fr.js +665 -0
- package/dist/i18n/fr.js.map +1 -0
- package/dist/i18n/hi.d.ts +2 -0
- package/dist/i18n/hi.d.ts.map +1 -0
- package/dist/i18n/hi.js +665 -0
- package/dist/i18n/hi.js.map +1 -0
- package/dist/i18n/ja.d.ts +2 -0
- package/dist/i18n/ja.d.ts.map +1 -0
- package/dist/i18n/ja.js +665 -0
- package/dist/i18n/ja.js.map +1 -0
- package/dist/i18n/ka.d.ts +2 -0
- package/dist/i18n/ka.d.ts.map +1 -0
- package/dist/i18n/ka.js +665 -0
- package/dist/i18n/ka.js.map +1 -0
- package/dist/i18n/pt.d.ts +2 -0
- package/dist/i18n/pt.d.ts.map +1 -0
- package/dist/i18n/pt.js +665 -0
- package/dist/i18n/pt.js.map +1 -0
- package/dist/i18n/ru.d.ts +6 -0
- package/dist/i18n/ru.d.ts.map +1 -0
- package/dist/i18n/ru.js +668 -0
- package/dist/i18n/ru.js.map +1 -0
- package/dist/i18n/uk.d.ts +8 -0
- package/dist/i18n/uk.d.ts.map +1 -0
- package/dist/i18n/uk.js +670 -0
- package/dist/i18n/uk.js.map +1 -0
- package/dist/i18n/uz.d.ts +2 -0
- package/dist/i18n/uz.d.ts.map +1 -0
- package/dist/i18n/uz.js +665 -0
- package/dist/i18n/uz.js.map +1 -0
- package/dist/i18n/zh.d.ts +2 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +665 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/i18n.d.ts +115 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +233 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/installManager.d.ts +99 -0
- package/dist/installManager.d.ts.map +1 -0
- package/dist/installManager.js +943 -0
- package/dist/installManager.js.map +1 -0
- package/dist/instanceLock.d.ts +161 -0
- package/dist/instanceLock.d.ts.map +1 -0
- package/dist/instanceLock.js +388 -0
- package/dist/instanceLock.js.map +1 -0
- package/dist/mcpConfig.d.ts +76 -0
- package/dist/mcpConfig.d.ts.map +1 -0
- package/dist/mcpConfig.js +270 -0
- package/dist/mcpConfig.js.map +1 -0
- package/dist/openCodeOpenQuestion.d.ts +44 -0
- package/dist/openCodeOpenQuestion.d.ts.map +1 -0
- package/dist/openCodeOpenQuestion.js +64 -0
- package/dist/openCodeOpenQuestion.js.map +1 -0
- package/dist/openCodeQuestionFlow.d.ts +105 -0
- package/dist/openCodeQuestionFlow.d.ts.map +1 -0
- package/dist/openCodeQuestionFlow.js +143 -0
- package/dist/openCodeQuestionFlow.js.map +1 -0
- package/dist/openCodeSessionRouting.d.ts +133 -0
- package/dist/openCodeSessionRouting.d.ts.map +1 -0
- package/dist/openCodeSessionRouting.js +253 -0
- package/dist/openCodeSessionRouting.js.map +1 -0
- package/dist/openCodeSessionTitle.d.ts +50 -0
- package/dist/openCodeSessionTitle.d.ts.map +1 -0
- package/dist/openCodeSessionTitle.js +84 -0
- package/dist/openCodeSessionTitle.js.map +1 -0
- package/dist/outputTrace.d.ts +108 -0
- package/dist/outputTrace.d.ts.map +1 -0
- package/dist/outputTrace.js +430 -0
- package/dist/outputTrace.js.map +1 -0
- package/dist/pendingQuestionRepost.d.ts +47 -0
- package/dist/pendingQuestionRepost.d.ts.map +1 -0
- package/dist/pendingQuestionRepost.js +29 -0
- package/dist/pendingQuestionRepost.js.map +1 -0
- package/dist/pinnedStatus.d.ts +52 -0
- package/dist/pinnedStatus.d.ts.map +1 -0
- package/dist/pinnedStatus.js +36 -0
- package/dist/pinnedStatus.js.map +1 -0
- package/dist/platform/answerSink.d.ts +93 -0
- package/dist/platform/answerSink.d.ts.map +1 -0
- package/dist/platform/answerSink.js +31 -0
- package/dist/platform/answerSink.js.map +1 -0
- package/dist/platform/capabilityFallback.d.ts +39 -0
- package/dist/platform/capabilityFallback.d.ts.map +1 -0
- package/dist/platform/capabilityFallback.js +55 -0
- package/dist/platform/capabilityFallback.js.map +1 -0
- package/dist/platform/commandRouter.d.ts +51 -0
- package/dist/platform/commandRouter.d.ts.map +1 -0
- package/dist/platform/commandRouter.js +53 -0
- package/dist/platform/commandRouter.js.map +1 -0
- package/dist/platform/connectorSet.d.ts +39 -0
- package/dist/platform/connectorSet.d.ts.map +1 -0
- package/dist/platform/connectorSet.js +55 -0
- package/dist/platform/connectorSet.js.map +1 -0
- package/dist/platform/inbound.d.ts +147 -0
- package/dist/platform/inbound.d.ts.map +1 -0
- package/dist/platform/inbound.js +18 -0
- package/dist/platform/inbound.js.map +1 -0
- package/dist/platform/outbound.d.ts +225 -0
- package/dist/platform/outbound.d.ts.map +1 -0
- package/dist/platform/outbound.js +30 -0
- package/dist/platform/outbound.js.map +1 -0
- package/dist/platform/unservedStateGuard.d.ts +27 -0
- package/dist/platform/unservedStateGuard.d.ts.map +1 -0
- package/dist/platform/unservedStateGuard.js +42 -0
- package/dist/platform/unservedStateGuard.js.map +1 -0
- package/dist/postToSession.d.ts +94 -0
- package/dist/postToSession.d.ts.map +1 -0
- package/dist/postToSession.js +56 -0
- package/dist/postToSession.js.map +1 -0
- package/dist/progressLine.d.ts +180 -0
- package/dist/progressLine.d.ts.map +1 -0
- package/dist/progressLine.js +293 -0
- package/dist/progressLine.js.map +1 -0
- package/dist/rateLimiter.d.ts +246 -0
- package/dist/rateLimiter.d.ts.map +1 -0
- package/dist/rateLimiter.js +555 -0
- package/dist/rateLimiter.js.map +1 -0
- package/dist/requests/answerRequest.d.ts +57 -0
- package/dist/requests/answerRequest.d.ts.map +1 -0
- package/dist/requests/answerRequest.js +96 -0
- package/dist/requests/answerRequest.js.map +1 -0
- package/dist/requests/answerTail.d.ts +83 -0
- package/dist/requests/answerTail.d.ts.map +1 -0
- package/dist/requests/answerTail.js +102 -0
- package/dist/requests/answerTail.js.map +1 -0
- package/dist/requests/limitWaitAnswer.d.ts +87 -0
- package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
- package/dist/requests/limitWaitAnswer.js +83 -0
- package/dist/requests/limitWaitAnswer.js.map +1 -0
- package/dist/requests/requestGroup.d.ts +44 -0
- package/dist/requests/requestGroup.d.ts.map +1 -0
- package/dist/requests/requestGroup.js +63 -0
- package/dist/requests/requestGroup.js.map +1 -0
- package/dist/requests/requestHeader.d.ts +70 -0
- package/dist/requests/requestHeader.d.ts.map +1 -0
- package/dist/requests/requestHeader.js +83 -0
- package/dist/requests/requestHeader.js.map +1 -0
- package/dist/requests/requestLedger.d.ts +217 -0
- package/dist/requests/requestLedger.d.ts.map +1 -0
- package/dist/requests/requestLedger.js +468 -0
- package/dist/requests/requestLedger.js.map +1 -0
- package/dist/requests/sessionTurnProbe.d.ts +52 -0
- package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
- package/dist/requests/sessionTurnProbe.js +29 -0
- package/dist/requests/sessionTurnProbe.js.map +1 -0
- package/dist/requests/types.d.ts +181 -0
- package/dist/requests/types.d.ts.map +1 -0
- package/dist/requests/types.js +9 -0
- package/dist/requests/types.js.map +1 -0
- package/dist/requests/wakeUpEngine.d.ts +160 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -0
- package/dist/requests/wakeUpEngine.js +399 -0
- package/dist/requests/wakeUpEngine.js.map +1 -0
- package/dist/requests/wakeUpRules.d.ts +151 -0
- package/dist/requests/wakeUpRules.d.ts.map +1 -0
- package/dist/requests/wakeUpRules.js +167 -0
- package/dist/requests/wakeUpRules.js.map +1 -0
- package/dist/resumeContext.d.ts +87 -0
- package/dist/resumeContext.d.ts.map +1 -0
- package/dist/resumeContext.js +114 -0
- package/dist/resumeContext.js.map +1 -0
- package/dist/scheduler/checkRun.d.ts +95 -0
- package/dist/scheduler/checkRun.d.ts.map +1 -0
- package/dist/scheduler/checkRun.js +172 -0
- package/dist/scheduler/checkRun.js.map +1 -0
- package/dist/scheduler/delivery.d.ts +99 -0
- package/dist/scheduler/delivery.d.ts.map +1 -0
- package/dist/scheduler/delivery.js +212 -0
- package/dist/scheduler/delivery.js.map +1 -0
- package/dist/scheduler/deliveryKind.d.ts +29 -0
- package/dist/scheduler/deliveryKind.d.ts.map +1 -0
- package/dist/scheduler/deliveryKind.js +39 -0
- package/dist/scheduler/deliveryKind.js.map +1 -0
- package/dist/scheduler/directoryThreads.d.ts +19 -0
- package/dist/scheduler/directoryThreads.d.ts.map +1 -0
- package/dist/scheduler/directoryThreads.js +28 -0
- package/dist/scheduler/directoryThreads.js.map +1 -0
- package/dist/scheduler/engine.d.ts +77 -0
- package/dist/scheduler/engine.d.ts.map +1 -0
- package/dist/scheduler/engine.js +337 -0
- package/dist/scheduler/engine.js.map +1 -0
- package/dist/scheduler/injection.d.ts +102 -0
- package/dist/scheduler/injection.d.ts.map +1 -0
- package/dist/scheduler/injection.js +122 -0
- package/dist/scheduler/injection.js.map +1 -0
- package/dist/scheduler/mcpBoot.d.ts +65 -0
- package/dist/scheduler/mcpBoot.d.ts.map +1 -0
- package/dist/scheduler/mcpBoot.js +60 -0
- package/dist/scheduler/mcpBoot.js.map +1 -0
- package/dist/scheduler/mcpSurface.d.ts +363 -0
- package/dist/scheduler/mcpSurface.d.ts.map +1 -0
- package/dist/scheduler/mcpSurface.js +1297 -0
- package/dist/scheduler/mcpSurface.js.map +1 -0
- package/dist/scheduler/rebindResume.d.ts +27 -0
- package/dist/scheduler/rebindResume.d.ts.map +1 -0
- package/dist/scheduler/rebindResume.js +17 -0
- package/dist/scheduler/rebindResume.js.map +1 -0
- package/dist/scheduler/recurrence.d.ts +58 -0
- package/dist/scheduler/recurrence.d.ts.map +1 -0
- package/dist/scheduler/recurrence.js +210 -0
- package/dist/scheduler/recurrence.js.map +1 -0
- package/dist/scheduler/runLedger.d.ts +59 -0
- package/dist/scheduler/runLedger.d.ts.map +1 -0
- package/dist/scheduler/runLedger.js +54 -0
- package/dist/scheduler/runLedger.js.map +1 -0
- package/dist/scheduler/store.d.ts +97 -0
- package/dist/scheduler/store.d.ts.map +1 -0
- package/dist/scheduler/store.js +124 -0
- package/dist/scheduler/store.js.map +1 -0
- package/dist/scheduler/timezoneRecompute.d.ts +61 -0
- package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
- package/dist/scheduler/timezoneRecompute.js +46 -0
- package/dist/scheduler/timezoneRecompute.js.map +1 -0
- package/dist/scheduler/types.d.ts +139 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +8 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/sendErrorClassifier.d.ts +45 -0
- package/dist/sendErrorClassifier.d.ts.map +1 -0
- package/dist/sendErrorClassifier.js +65 -0
- package/dist/sendErrorClassifier.js.map +1 -0
- package/dist/sessionKey.d.ts +136 -0
- package/dist/sessionKey.d.ts.map +1 -0
- package/dist/sessionKey.js +153 -0
- package/dist/sessionKey.js.map +1 -0
- package/dist/sessionPick.d.ts +42 -0
- package/dist/sessionPick.d.ts.map +1 -0
- package/dist/sessionPick.js +39 -0
- package/dist/sessionPick.js.map +1 -0
- package/dist/shutdown.d.ts +126 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +164 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/startupPromptBuffer.d.ts +85 -0
- package/dist/startupPromptBuffer.d.ts.map +1 -0
- package/dist/startupPromptBuffer.js +123 -0
- package/dist/startupPromptBuffer.js.map +1 -0
- package/dist/state.d.ts +1416 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +2128 -0
- package/dist/state.js.map +1 -0
- package/dist/threadContextPreamble.d.ts +89 -0
- package/dist/threadContextPreamble.d.ts.map +1 -0
- package/dist/threadContextPreamble.js +102 -0
- package/dist/threadContextPreamble.js.map +1 -0
- package/dist/threadRouting.d.ts +164 -0
- package/dist/threadRouting.d.ts.map +1 -0
- package/dist/threadRouting.js +182 -0
- package/dist/threadRouting.js.map +1 -0
- package/dist/types.d.ts +1022 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abortableFifo.d.ts +10 -0
- package/dist/utils/abortableFifo.d.ts.map +1 -0
- package/dist/utils/abortableFifo.js +55 -0
- package/dist/utils/abortableFifo.js.map +1 -0
- package/dist/utils/adoptedToolList.d.ts +27 -0
- package/dist/utils/adoptedToolList.d.ts.map +1 -0
- package/dist/utils/adoptedToolList.js +22 -0
- package/dist/utils/adoptedToolList.js.map +1 -0
- package/dist/utils/agentEnvironment.d.ts +42 -0
- package/dist/utils/agentEnvironment.d.ts.map +1 -0
- package/dist/utils/agentEnvironment.js +122 -0
- package/dist/utils/agentEnvironment.js.map +1 -0
- package/dist/utils/ansiClean.d.ts +11 -0
- package/dist/utils/ansiClean.d.ts.map +1 -0
- package/dist/utils/ansiClean.js +139 -0
- package/dist/utils/ansiClean.js.map +1 -0
- package/dist/utils/autoContinueOnLimit.d.ts +56 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
- package/dist/utils/autoContinueOnLimit.js +79 -0
- package/dist/utils/autoContinueOnLimit.js.map +1 -0
- package/dist/utils/canonicalPathContainment.d.ts +7 -0
- package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
- package/dist/utils/canonicalPathContainment.js +48 -0
- package/dist/utils/canonicalPathContainment.js.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts +85 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.js +123 -0
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -0
- package/dist/utils/claudeAuthLogin.d.ts +71 -0
- package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
- package/dist/utils/claudeAuthLogin.js +93 -0
- package/dist/utils/claudeAuthLogin.js.map +1 -0
- package/dist/utils/claudeChunkClassifier.d.ts +97 -0
- package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
- package/dist/utils/claudeChunkClassifier.js +254 -0
- package/dist/utils/claudeChunkClassifier.js.map +1 -0
- package/dist/utils/claudeCodeVersion.d.ts +31 -0
- package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
- package/dist/utils/claudeCodeVersion.js +62 -0
- package/dist/utils/claudeCodeVersion.js.map +1 -0
- package/dist/utils/claudeCompactHook.d.ts +64 -0
- package/dist/utils/claudeCompactHook.d.ts.map +1 -0
- package/dist/utils/claudeCompactHook.js +98 -0
- package/dist/utils/claudeCompactHook.js.map +1 -0
- package/dist/utils/claudeLimitSwitch.d.ts +40 -0
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
- package/dist/utils/claudeLimitSwitch.js +54 -0
- package/dist/utils/claudeLimitSwitch.js.map +1 -0
- package/dist/utils/claudeLivenessAction.d.ts +208 -0
- package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
- package/dist/utils/claudeLivenessAction.js +135 -0
- package/dist/utils/claudeLivenessAction.js.map +1 -0
- package/dist/utils/claudeMcpHeal.d.ts +92 -0
- package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
- package/dist/utils/claudeMcpHeal.js +91 -0
- package/dist/utils/claudeMcpHeal.js.map +1 -0
- package/dist/utils/claudeProfileUsageLines.d.ts +15 -0
- package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
- package/dist/utils/claudeProfileUsageLines.js +42 -0
- package/dist/utils/claudeProfileUsageLines.js.map +1 -0
- package/dist/utils/claudeProfiles.d.ts +117 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -0
- package/dist/utils/claudeProfiles.js +285 -0
- package/dist/utils/claudeProfiles.js.map +1 -0
- package/dist/utils/claudeRelayRouting.d.ts +86 -0
- package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
- package/dist/utils/claudeRelayRouting.js +159 -0
- package/dist/utils/claudeRelayRouting.js.map +1 -0
- package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
- package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
- package/dist/utils/claudeRuntimeInfo.js +151 -0
- package/dist/utils/claudeRuntimeInfo.js.map +1 -0
- package/dist/utils/claudeScrapeShapes.d.ts +256 -0
- package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
- package/dist/utils/claudeScrapeShapes.js +290 -0
- package/dist/utils/claudeScrapeShapes.js.map +1 -0
- package/dist/utils/claudeSessionTitle.d.ts +27 -0
- package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
- package/dist/utils/claudeSessionTitle.js +90 -0
- package/dist/utils/claudeSessionTitle.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +214 -0
- package/dist/utils/claudeStreamJson.d.ts.map +1 -0
- package/dist/utils/claudeStreamJson.js +364 -0
- package/dist/utils/claudeStreamJson.js.map +1 -0
- package/dist/utils/claudeSubagentTail.d.ts +93 -0
- package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
- package/dist/utils/claudeSubagentTail.js +136 -0
- package/dist/utils/claudeSubagentTail.js.map +1 -0
- package/dist/utils/claudeUsage.d.ts +209 -0
- package/dist/utils/claudeUsage.d.ts.map +1 -0
- package/dist/utils/claudeUsage.js +413 -0
- package/dist/utils/claudeUsage.js.map +1 -0
- package/dist/utils/claudeUsageRefresher.d.ts +44 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
- package/dist/utils/claudeUsageRefresher.js +95 -0
- package/dist/utils/claudeUsageRefresher.js.map +1 -0
- package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
- package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
- package/dist/utils/clearThreadOutputQueues.js +39 -0
- package/dist/utils/clearThreadOutputQueues.js.map +1 -0
- package/dist/utils/compactCommandRoute.d.ts +45 -0
- package/dist/utils/compactCommandRoute.d.ts.map +1 -0
- package/dist/utils/compactCommandRoute.js +36 -0
- package/dist/utils/compactCommandRoute.js.map +1 -0
- package/dist/utils/compactOnIdle.d.ts +329 -0
- package/dist/utils/compactOnIdle.d.ts.map +1 -0
- package/dist/utils/compactOnIdle.js +379 -0
- package/dist/utils/compactOnIdle.js.map +1 -0
- package/dist/utils/consoleFileTap.d.ts +51 -0
- package/dist/utils/consoleFileTap.d.ts.map +1 -0
- package/dist/utils/consoleFileTap.js +86 -0
- package/dist/utils/consoleFileTap.js.map +1 -0
- package/dist/utils/displayVerbosity.d.ts +44 -0
- package/dist/utils/displayVerbosity.d.ts.map +1 -0
- package/dist/utils/displayVerbosity.js +75 -0
- package/dist/utils/displayVerbosity.js.map +1 -0
- package/dist/utils/download.d.ts +72 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +216 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/draftFinalize.d.ts +110 -0
- package/dist/utils/draftFinalize.d.ts.map +1 -0
- package/dist/utils/draftFinalize.js +100 -0
- package/dist/utils/draftFinalize.js.map +1 -0
- package/dist/utils/draftId.d.ts +36 -0
- package/dist/utils/draftId.d.ts.map +1 -0
- package/dist/utils/draftId.js +46 -0
- package/dist/utils/draftId.js.map +1 -0
- package/dist/utils/draftPacer.d.ts +72 -0
- package/dist/utils/draftPacer.d.ts.map +1 -0
- package/dist/utils/draftPacer.js +53 -0
- package/dist/utils/draftPacer.js.map +1 -0
- package/dist/utils/effortStartupKeystroke.d.ts +20 -0
- package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
- package/dist/utils/effortStartupKeystroke.js +28 -0
- package/dist/utils/effortStartupKeystroke.js.map +1 -0
- package/dist/utils/ensureSessionPlan.d.ts +70 -0
- package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
- package/dist/utils/ensureSessionPlan.js +54 -0
- package/dist/utils/ensureSessionPlan.js.map +1 -0
- package/dist/utils/fallbackBridge.d.ts +32 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -0
- package/dist/utils/fallbackBridge.js +62 -0
- package/dist/utils/fallbackBridge.js.map +1 -0
- package/dist/utils/fallbackChain.d.ts +299 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -0
- package/dist/utils/fallbackChain.js +542 -0
- package/dist/utils/fallbackChain.js.map +1 -0
- package/dist/utils/fileSendPlan.d.ts +217 -0
- package/dist/utils/fileSendPlan.d.ts.map +1 -0
- package/dist/utils/fileSendPlan.js +291 -0
- package/dist/utils/fileSendPlan.js.map +1 -0
- package/dist/utils/fileSendService.d.ts +94 -0
- package/dist/utils/fileSendService.d.ts.map +1 -0
- package/dist/utils/fileSendService.js +387 -0
- package/dist/utils/fileSendService.js.map +1 -0
- package/dist/utils/groupFinalizePlan.d.ts +38 -0
- package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
- package/dist/utils/groupFinalizePlan.js +35 -0
- package/dist/utils/groupFinalizePlan.js.map +1 -0
- package/dist/utils/identicalOutputGuard.d.ts +83 -0
- package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
- package/dist/utils/identicalOutputGuard.js +99 -0
- package/dist/utils/identicalOutputGuard.js.map +1 -0
- package/dist/utils/isoTimestamp.d.ts +16 -0
- package/dist/utils/isoTimestamp.d.ts.map +1 -0
- package/dist/utils/isoTimestamp.js +34 -0
- package/dist/utils/isoTimestamp.js.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
- package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
- package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
- package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
- package/dist/utils/jsonStreamHost.d.ts +238 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -0
- package/dist/utils/jsonStreamHost.js +438 -0
- package/dist/utils/jsonStreamHost.js.map +1 -0
- package/dist/utils/keyedTransitionQueue.d.ts +18 -0
- package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
- package/dist/utils/keyedTransitionQueue.js +34 -0
- package/dist/utils/keyedTransitionQueue.js.map +1 -0
- package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
- package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
- package/dist/utils/limitEpisodeRecovery.js +133 -0
- package/dist/utils/limitEpisodeRecovery.js.map +1 -0
- package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
- package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
- package/dist/utils/limitHeldPromptQueue.js +59 -0
- package/dist/utils/limitHeldPromptQueue.js.map +1 -0
- package/dist/utils/limitHeldPrompts.d.ts +58 -0
- package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
- package/dist/utils/limitHeldPrompts.js +65 -0
- package/dist/utils/limitHeldPrompts.js.map +1 -0
- package/dist/utils/linkPreviewSuppression.d.ts +18 -0
- package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
- package/dist/utils/linkPreviewSuppression.js +37 -0
- package/dist/utils/linkPreviewSuppression.js.map +1 -0
- package/dist/utils/localClock.d.ts +15 -0
- package/dist/utils/localClock.d.ts.map +1 -0
- package/dist/utils/localClock.js +29 -0
- package/dist/utils/localClock.js.map +1 -0
- package/dist/utils/markdownTableRender.d.ts +83 -0
- package/dist/utils/markdownTableRender.d.ts.map +1 -0
- package/dist/utils/markdownTableRender.js +298 -0
- package/dist/utils/markdownTableRender.js.map +1 -0
- package/dist/utils/mediaGroupCollector.d.ts +51 -0
- package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
- package/dist/utils/mediaGroupCollector.js +90 -0
- package/dist/utils/mediaGroupCollector.js.map +1 -0
- package/dist/utils/messageSendService.d.ts +136 -0
- package/dist/utils/messageSendService.d.ts.map +1 -0
- package/dist/utils/messageSendService.js +165 -0
- package/dist/utils/messageSendService.js.map +1 -0
- package/dist/utils/minutesOverride.d.ts +7 -0
- package/dist/utils/minutesOverride.d.ts.map +1 -0
- package/dist/utils/minutesOverride.js +16 -0
- package/dist/utils/minutesOverride.js.map +1 -0
- package/dist/utils/modelPickerPlan.d.ts +119 -0
- package/dist/utils/modelPickerPlan.d.ts.map +1 -0
- package/dist/utils/modelPickerPlan.js +171 -0
- package/dist/utils/modelPickerPlan.js.map +1 -0
- package/dist/utils/modelRecentPlan.d.ts +56 -0
- package/dist/utils/modelRecentPlan.d.ts.map +1 -0
- package/dist/utils/modelRecentPlan.js +107 -0
- package/dist/utils/modelRecentPlan.js.map +1 -0
- package/dist/utils/modelSetReplyDecision.d.ts +67 -0
- package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
- package/dist/utils/modelSetReplyDecision.js +27 -0
- package/dist/utils/modelSetReplyDecision.js.map +1 -0
- package/dist/utils/openCodeAuthLogin.d.ts +181 -0
- package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
- package/dist/utils/openCodeAuthLogin.js +393 -0
- package/dist/utils/openCodeAuthLogin.js.map +1 -0
- package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
- package/dist/utils/openCodeCompactPlugin.js +146 -0
- package/dist/utils/openCodeCompactPlugin.js.map +1 -0
- package/dist/utils/openCodeTurnActivity.d.ts +67 -0
- package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
- package/dist/utils/openCodeTurnActivity.js +27 -0
- package/dist/utils/openCodeTurnActivity.js.map +1 -0
- package/dist/utils/outputDebounce.d.ts +24 -0
- package/dist/utils/outputDebounce.d.ts.map +1 -0
- package/dist/utils/outputDebounce.js +30 -0
- package/dist/utils/outputDebounce.js.map +1 -0
- package/dist/utils/outputFlushTiming.d.ts +54 -0
- package/dist/utils/outputFlushTiming.d.ts.map +1 -0
- package/dist/utils/outputFlushTiming.js +48 -0
- package/dist/utils/outputFlushTiming.js.map +1 -0
- package/dist/utils/paginateList.d.ts +25 -0
- package/dist/utils/paginateList.d.ts.map +1 -0
- package/dist/utils/paginateList.js +32 -0
- package/dist/utils/paginateList.js.map +1 -0
- package/dist/utils/paneDiff.d.ts +55 -0
- package/dist/utils/paneDiff.d.ts.map +1 -0
- package/dist/utils/paneDiff.js +88 -0
- package/dist/utils/paneDiff.js.map +1 -0
- package/dist/utils/paneResizeGuard.d.ts +69 -0
- package/dist/utils/paneResizeGuard.d.ts.map +1 -0
- package/dist/utils/paneResizeGuard.js +91 -0
- package/dist/utils/paneResizeGuard.js.map +1 -0
- package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
- package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
- package/dist/utils/persistAdapterSessionIds.js +28 -0
- package/dist/utils/persistAdapterSessionIds.js.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
- package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
- package/dist/utils/pinnedBannerSkipDecision.js +20 -0
- package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
- package/dist/utils/pollBackoff.d.ts +45 -0
- package/dist/utils/pollBackoff.d.ts.map +1 -0
- package/dist/utils/pollBackoff.js +44 -0
- package/dist/utils/pollBackoff.js.map +1 -0
- package/dist/utils/promptDelivery.d.ts +46 -0
- package/dist/utils/promptDelivery.d.ts.map +1 -0
- package/dist/utils/promptDelivery.js +49 -0
- package/dist/utils/promptDelivery.js.map +1 -0
- package/dist/utils/providerDisconnectPlan.d.ts +82 -0
- package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
- package/dist/utils/providerDisconnectPlan.js +110 -0
- package/dist/utils/providerDisconnectPlan.js.map +1 -0
- package/dist/utils/rateLimitLog.d.ts +48 -0
- package/dist/utils/rateLimitLog.d.ts.map +1 -0
- package/dist/utils/rateLimitLog.js +43 -0
- package/dist/utils/rateLimitLog.js.map +1 -0
- package/dist/utils/recentRelayWindow.d.ts +165 -0
- package/dist/utils/recentRelayWindow.d.ts.map +1 -0
- package/dist/utils/recentRelayWindow.js +284 -0
- package/dist/utils/recentRelayWindow.js.map +1 -0
- package/dist/utils/recvPreviewRedaction.d.ts +23 -0
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
- package/dist/utils/recvPreviewRedaction.js +39 -0
- package/dist/utils/recvPreviewRedaction.js.map +1 -0
- package/dist/utils/reminderFlow.d.ts +148 -0
- package/dist/utils/reminderFlow.d.ts.map +1 -0
- package/dist/utils/reminderFlow.js +122 -0
- package/dist/utils/reminderFlow.js.map +1 -0
- package/dist/utils/reminderScheduleText.d.ts +87 -0
- package/dist/utils/reminderScheduleText.d.ts.map +1 -0
- package/dist/utils/reminderScheduleText.js +135 -0
- package/dist/utils/reminderScheduleText.js.map +1 -0
- package/dist/utils/reminderWizard.d.ts +710 -0
- package/dist/utils/reminderWizard.d.ts.map +1 -0
- package/dist/utils/reminderWizard.js +1164 -0
- package/dist/utils/reminderWizard.js.map +1 -0
- package/dist/utils/replyQuote.d.ts +111 -0
- package/dist/utils/replyQuote.d.ts.map +1 -0
- package/dist/utils/replyQuote.js +122 -0
- package/dist/utils/replyQuote.js.map +1 -0
- package/dist/utils/resolveBinary.d.ts +25 -0
- package/dist/utils/resolveBinary.d.ts.map +1 -0
- package/dist/utils/resolveBinary.js +99 -0
- package/dist/utils/resolveBinary.js.map +1 -0
- package/dist/utils/retryAfterHeader.d.ts +7 -0
- package/dist/utils/retryAfterHeader.d.ts.map +1 -0
- package/dist/utils/retryAfterHeader.js +17 -0
- package/dist/utils/retryAfterHeader.js.map +1 -0
- package/dist/utils/rotatingJsonlFile.d.ts +40 -0
- package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
- package/dist/utils/rotatingJsonlFile.js +106 -0
- package/dist/utils/rotatingJsonlFile.js.map +1 -0
- package/dist/utils/rotatingLogFile.d.ts +25 -0
- package/dist/utils/rotatingLogFile.d.ts.map +1 -0
- package/dist/utils/rotatingLogFile.js +74 -0
- package/dist/utils/rotatingLogFile.js.map +1 -0
- package/dist/utils/sendRateTracker.d.ts +59 -0
- package/dist/utils/sendRateTracker.d.ts.map +1 -0
- package/dist/utils/sendRateTracker.js +144 -0
- package/dist/utils/sendRateTracker.js.map +1 -0
- package/dist/utils/serialQueue.d.ts +5 -0
- package/dist/utils/serialQueue.d.ts.map +1 -0
- package/dist/utils/serialQueue.js +14 -0
- package/dist/utils/serialQueue.js.map +1 -0
- package/dist/utils/sseStreamLifecycle.d.ts +32 -0
- package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
- package/dist/utils/sseStreamLifecycle.js +41 -0
- package/dist/utils/sseStreamLifecycle.js.map +1 -0
- package/dist/utils/startupReadiness.d.ts +119 -0
- package/dist/utils/startupReadiness.d.ts.map +1 -0
- package/dist/utils/startupReadiness.js +148 -0
- package/dist/utils/startupReadiness.js.map +1 -0
- package/dist/utils/statusFlushDecision.d.ts +18 -0
- package/dist/utils/statusFlushDecision.d.ts.map +1 -0
- package/dist/utils/statusFlushDecision.js +53 -0
- package/dist/utils/statusFlushDecision.js.map +1 -0
- package/dist/utils/subagentRender.d.ts +52 -0
- package/dist/utils/subagentRender.d.ts.map +1 -0
- package/dist/utils/subagentRender.js +66 -0
- package/dist/utils/subagentRender.js.map +1 -0
- package/dist/utils/subagentStatusRender.d.ts +90 -0
- package/dist/utils/subagentStatusRender.d.ts.map +1 -0
- package/dist/utils/subagentStatusRender.js +124 -0
- package/dist/utils/subagentStatusRender.js.map +1 -0
- package/dist/utils/telegramError.d.ts +2 -0
- package/dist/utils/telegramError.d.ts.map +1 -0
- package/dist/utils/telegramError.js +16 -0
- package/dist/utils/telegramError.js.map +1 -0
- package/dist/utils/terminalEmitPlan.d.ts +74 -0
- package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
- package/dist/utils/terminalEmitPlan.js +86 -0
- package/dist/utils/terminalEmitPlan.js.map +1 -0
- package/dist/utils/thinkingRender.d.ts +74 -0
- package/dist/utils/thinkingRender.d.ts.map +1 -0
- package/dist/utils/thinkingRender.js +85 -0
- package/dist/utils/thinkingRender.js.map +1 -0
- package/dist/utils/threadStatusReport.d.ts +79 -0
- package/dist/utils/threadStatusReport.d.ts.map +1 -0
- package/dist/utils/threadStatusReport.js +88 -0
- package/dist/utils/threadStatusReport.js.map +1 -0
- package/dist/utils/threadToggle.d.ts +29 -0
- package/dist/utils/threadToggle.d.ts.map +1 -0
- package/dist/utils/threadToggle.js +39 -0
- package/dist/utils/threadToggle.js.map +1 -0
- package/dist/utils/timezone.d.ts +125 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +278 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/tmuxExec.d.ts +61 -0
- package/dist/utils/tmuxExec.d.ts.map +1 -0
- package/dist/utils/tmuxExec.js +109 -0
- package/dist/utils/tmuxExec.js.map +1 -0
- package/dist/utils/tmuxSessionName.d.ts +34 -0
- package/dist/utils/tmuxSessionName.d.ts.map +1 -0
- package/dist/utils/tmuxSessionName.js +51 -0
- package/dist/utils/tmuxSessionName.js.map +1 -0
- package/dist/utils/toolResultRender.d.ts +61 -0
- package/dist/utils/toolResultRender.d.ts.map +1 -0
- package/dist/utils/toolResultRender.js +62 -0
- package/dist/utils/toolResultRender.js.map +1 -0
- package/dist/utils/topicRequest.d.ts +61 -0
- package/dist/utils/topicRequest.d.ts.map +1 -0
- package/dist/utils/topicRequest.js +68 -0
- package/dist/utils/topicRequest.js.map +1 -0
- package/dist/utils/topicView.d.ts +55 -0
- package/dist/utils/topicView.d.ts.map +1 -0
- package/dist/utils/topicView.js +56 -0
- package/dist/utils/topicView.js.map +1 -0
- package/dist/utils/transcribeAudio.d.ts +89 -0
- package/dist/utils/transcribeAudio.d.ts.map +1 -0
- package/dist/utils/transcribeAudio.js +249 -0
- package/dist/utils/transcribeAudio.js.map +1 -0
- package/dist/utils/transientFrames.d.ts +52 -0
- package/dist/utils/transientFrames.d.ts.map +1 -0
- package/dist/utils/transientFrames.js +41 -0
- package/dist/utils/transientFrames.js.map +1 -0
- package/dist/utils/typingActive.d.ts +35 -0
- package/dist/utils/typingActive.d.ts.map +1 -0
- package/dist/utils/typingActive.js +22 -0
- package/dist/utils/typingActive.js.map +1 -0
- package/dist/utils/typingLoopBackstop.d.ts +64 -0
- package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
- package/dist/utils/typingLoopBackstop.js +68 -0
- package/dist/utils/typingLoopBackstop.js.map +1 -0
- package/dist/utils/verbosityRender.d.ts +18 -0
- package/dist/utils/verbosityRender.d.ts.map +1 -0
- package/dist/utils/verbosityRender.js +17 -0
- package/dist/utils/verbosityRender.js.map +1 -0
- package/dist/utils/wedgeRecovery.d.ts +57 -0
- package/dist/utils/wedgeRecovery.d.ts.map +1 -0
- package/dist/utils/wedgeRecovery.js +24 -0
- package/dist/utils/wedgeRecovery.js.map +1 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +61 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +113 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +226 -0
- package/dist/validation.js.map +1 -0
- package/dist/voiceQueue.d.ts +7 -0
- package/dist/voiceQueue.d.ts.map +1 -0
- package/dist/voiceQueue.js +33 -0
- package/dist/voiceQueue.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/docker-compose.yml +36 -0
- package/package.json +83 -4
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jiraSessionKeyCodec = void 0;
|
|
4
|
+
exports.getJiraIssueProjectKey = getJiraIssueProjectKey;
|
|
5
|
+
exports.checkIsJiraProjectKey = checkIsJiraProjectKey;
|
|
6
|
+
exports.makeJiraKey = makeJiraKey;
|
|
7
|
+
const sessionKey_1 = require("../../sessionKey");
|
|
8
|
+
/** The platform id this connector answers to. */
|
|
9
|
+
const jiraPlatform = 'jira';
|
|
10
|
+
/** What the serialized key joins its parts with; a slug swaps it for its own separator. */
|
|
11
|
+
const keySeparator = ':';
|
|
12
|
+
/**
|
|
13
|
+
* @description A Jira conversation is one issue: `space` is the project key,
|
|
14
|
+
* `thread` the issue key, spelled `jira:<PROJECT>:<ISSUE-KEY>` (`jira:PROJ:PROJ-12`).
|
|
15
|
+
* The `jira:` prefix keeps it apart from Telegram's all-numeric shape.
|
|
16
|
+
*
|
|
17
|
+
* A project key is an upper-case letter followed by upper-case letters, digits
|
|
18
|
+
* or `_`; the issue key must be that SAME project key, `-` and a number without
|
|
19
|
+
* leading zeros (the back-reference `\1`; Jira numbers issues from 1, so
|
|
20
|
+
* `PROJ-012` would be a second spelling of `PROJ-12`). The back-reference is
|
|
21
|
+
* also what makes the slug readable: with `_` as the separator
|
|
22
|
+
* `jira_MY_PROJ_MY_PROJ-12` has several candidate split points, and only the one
|
|
23
|
+
* where both halves name the same project matches.
|
|
24
|
+
*/
|
|
25
|
+
const projectKeyPattern = '[A-Z][A-Z0-9_]*';
|
|
26
|
+
const issueNumberPattern = '[1-9]\\d*';
|
|
27
|
+
const issueKeyRe = new RegExp(`^(${projectKeyPattern})-${issueNumberPattern}$`);
|
|
28
|
+
const projectKeyRe = new RegExp(`^${projectKeyPattern}$`);
|
|
29
|
+
/** @description The project key of an issue key (`PROJ-12` → `PROJ`), or `null` for a string that is not an issue key. */
|
|
30
|
+
function getJiraIssueProjectKey(issueKey) {
|
|
31
|
+
return issueKeyRe.exec(issueKey)?.[1] ?? null;
|
|
32
|
+
}
|
|
33
|
+
/** @description Whether `projectKey` is spelled like a Jira project key (`PROJ`, `MY_PROJ`). */
|
|
34
|
+
function checkIsJiraProjectKey(projectKey) {
|
|
35
|
+
return projectKeyRe.test(projectKey);
|
|
36
|
+
}
|
|
37
|
+
/** Escape a slug separator for use inside a regular expression. */
|
|
38
|
+
function escapeRegExp(text) {
|
|
39
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
40
|
+
}
|
|
41
|
+
/** The key's shape with `separator` between its parts — `:` for the key itself. */
|
|
42
|
+
function createJiraKeyRe(separator) {
|
|
43
|
+
const escaped = escapeRegExp(separator);
|
|
44
|
+
return new RegExp(`^${jiraPlatform}${escaped}(${projectKeyPattern})${escaped}(\\1-${issueNumberPattern})$`);
|
|
45
|
+
}
|
|
46
|
+
const jiraKeyRe = createJiraKeyRe(keySeparator);
|
|
47
|
+
/** Slug separators are a handful of fixed characters (tmux `-`, directory `_`). */
|
|
48
|
+
const slugKeyRes = new Map();
|
|
49
|
+
function getSlugKeyRe(separator) {
|
|
50
|
+
let keyRe = slugKeyRes.get(separator);
|
|
51
|
+
if (!keyRe) {
|
|
52
|
+
keyRe = createJiraKeyRe(separator);
|
|
53
|
+
slugKeyRes.set(separator, keyRe);
|
|
54
|
+
}
|
|
55
|
+
return keyRe;
|
|
56
|
+
}
|
|
57
|
+
function getJiraKeyFromMatch(match) {
|
|
58
|
+
return match ? { platform: jiraPlatform, space: match[1], thread: match[2] } : null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Jira's {@link SessionKeyCodec}, including the slug inverse: a
|
|
62
|
+
* key with two `:` cannot be read back from a tmux session or directory name by
|
|
63
|
+
* splitting on one position (D5 of the Jira connector plan).
|
|
64
|
+
*/
|
|
65
|
+
exports.jiraSessionKeyCodec = {
|
|
66
|
+
platform: jiraPlatform,
|
|
67
|
+
// Refuses a key it could not decode again: `state.json` would otherwise drop
|
|
68
|
+
// its fields silently at the next load, and its tmux session would be neither
|
|
69
|
+
// re-adopted nor reaped.
|
|
70
|
+
encode(key) {
|
|
71
|
+
const serialized = [jiraPlatform, key.space, key.thread].join(keySeparator);
|
|
72
|
+
if (!jiraKeyRe.test(serialized))
|
|
73
|
+
throw new Error(`Invalid Jira SessionKey: "${serialized}"`);
|
|
74
|
+
return serialized;
|
|
75
|
+
},
|
|
76
|
+
decode(serialized) {
|
|
77
|
+
const key = getJiraKeyFromMatch(jiraKeyRe.exec(serialized));
|
|
78
|
+
if (!key)
|
|
79
|
+
throw new Error(`Invalid Jira SessionKey string: "${serialized}"`);
|
|
80
|
+
return key;
|
|
81
|
+
},
|
|
82
|
+
matches(serialized) {
|
|
83
|
+
return jiraKeyRe.test(serialized);
|
|
84
|
+
},
|
|
85
|
+
decodeSlug(slug, separator) {
|
|
86
|
+
return getJiraKeyFromMatch(getSlugKeyRe(separator).exec(slug));
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Self-registering on import, like the Telegram codec; the composition roots
|
|
91
|
+
* (`bot.ts`, the test bootstrap) import it so a Jira key read back from
|
|
92
|
+
* `state.json` or a tmux name decodes even before any Jira module loads.
|
|
93
|
+
*/
|
|
94
|
+
(0, sessionKey_1.registerSessionKeyCodec)(exports.jiraSessionKeyCodec);
|
|
95
|
+
/**
|
|
96
|
+
* @description Build a Jira {@link SessionKey} for an issue. The project key is
|
|
97
|
+
* the issue key's own prefix, so it is derived rather than passed separately.
|
|
98
|
+
* Throws for a string that is not an issue key.
|
|
99
|
+
*/
|
|
100
|
+
function makeJiraKey(issueKey) {
|
|
101
|
+
const match = issueKeyRe.exec(issueKey);
|
|
102
|
+
if (!match)
|
|
103
|
+
throw new Error(`Invalid Jira issue key: "${issueKey}"`);
|
|
104
|
+
return { platform: jiraPlatform, space: match[1], thread: issueKey };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=sessionKeyCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionKeyCodec.js","sourceRoot":"","sources":["../../../src/connectors/jira/sessionKeyCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { JiraAccount, JiraChangelogHistory } from './client';
|
|
2
|
+
/**
|
|
3
|
+
* @description Which change made an issue a request (Jira connector plan J5,
|
|
4
|
+
* D11–D12): the newest changelog entry that set the assignee to the AI account
|
|
5
|
+
* or moved the status into the trigger set. An issue created already matching
|
|
6
|
+
* has no such entry; its trigger is the creation itself. And who asked (J5b,
|
|
7
|
+
* R24): the person behind that change, or — when an app or automation made it —
|
|
8
|
+
* the nearest person before it, else the reporter. Pure: the poller hands in the
|
|
9
|
+
* changelog entries it read, newest pages first.
|
|
10
|
+
*/
|
|
11
|
+
/** The trigger id of an issue that matched from its creation. */
|
|
12
|
+
export declare const createdTriggerId = "created";
|
|
13
|
+
export type JiraTriggerKind = 'assigned' | 'statusChanged' | 'created';
|
|
14
|
+
/** @name JiraIssueTrigger @description `author` is `null` when Jira names no one (an automation without an actor). */
|
|
15
|
+
export interface JiraIssueTrigger {
|
|
16
|
+
/** The changelog history id, or {@link createdTriggerId}. */
|
|
17
|
+
triggerId: string;
|
|
18
|
+
kind: JiraTriggerKind;
|
|
19
|
+
author: JiraAccount | null;
|
|
20
|
+
}
|
|
21
|
+
export interface JiraTriggerMatch {
|
|
22
|
+
aiAccountId: string;
|
|
23
|
+
triggerStatusIds: ReadonlySet<string>;
|
|
24
|
+
}
|
|
25
|
+
/** A changelog item names its field by `fieldId` (stable) or, on older entries, only by `field`. */
|
|
26
|
+
export declare function getItemField(item: JiraChangelogHistory['items'][number]): string;
|
|
27
|
+
/**
|
|
28
|
+
* @description The newest entry among `histories` that matches, or `null`. When
|
|
29
|
+
* `histories` are the NEWEST entries of the changelog (any number of its last
|
|
30
|
+
* pages), a match among them is the newest of the whole changelog — what lets
|
|
31
|
+
* the poller stop reading at the first page that holds one.
|
|
32
|
+
*/
|
|
33
|
+
export declare function findNewestTrigger(histories: readonly JiraChangelogHistory[], match: JiraTriggerMatch): JiraIssueTrigger | null;
|
|
34
|
+
/** The trigger over a WHOLE changelog: its newest matching entry, else the creation. */
|
|
35
|
+
export declare function getIssueTrigger(histories: readonly JiraChangelogHistory[], match: JiraTriggerMatch, creator: JiraAccount | null): JiraIssueTrigger;
|
|
36
|
+
/** A person, as opposed to an app or automation; a missing type is read as a person. */
|
|
37
|
+
export declare function checkIsPersonAccount(account: JiraAccount): boolean;
|
|
38
|
+
/** An app or automation (a Jira rule, an integration), as opposed to a person or a service-desk customer. */
|
|
39
|
+
export declare function checkIsAppAccount(account: JiraAccount): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @description R24: the nearest person BEFORE the trigger in `histories` — the
|
|
42
|
+
* author of the newest older entry who is a person other than the AI account —
|
|
43
|
+
* or `null` when none of these entries has one (the caller may read older pages).
|
|
44
|
+
* Nothing comes before a creation trigger.
|
|
45
|
+
*/
|
|
46
|
+
export declare function findEarlierPerson(histories: readonly JiraChangelogHistory[], trigger: JiraIssueTrigger, aiAccountId: string): JiraAccount | null;
|
|
47
|
+
/**
|
|
48
|
+
* @description The requester ("sender") an answer goes back to: the trigger's
|
|
49
|
+
* author when a person made the change; when an app or automation made it (or
|
|
50
|
+
* Jira names no one), the nearest earlier person in the changelog (R24), else the
|
|
51
|
+
* issue's reporter — an app cannot read a comment or take the issue back.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getRequester(trigger: JiraIssueTrigger, histories: readonly JiraChangelogHistory[], reporter: JiraAccount | null, aiAccountId: string): JiraAccount | null;
|
|
54
|
+
//# sourceMappingURL=trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../../src/connectors/jira/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAElE;;;;;;;;GAQG;AAEH,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAM1C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAEvE,sHAAsH;AACtH,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAEhF;AAiBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAM9H;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,WAAW,GAAG,IAAI,GAC1B,gBAAgB,CAElB;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAElE;AAED,6GAA6G;AAC7G,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE/D;AAOD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,MAAM,GAClB,WAAW,GAAG,IAAI,CAMpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,WAAW,EAAE,MAAM,GAClB,WAAW,GAAG,IAAI,CAGpB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createdTriggerId = void 0;
|
|
4
|
+
exports.getItemField = getItemField;
|
|
5
|
+
exports.findNewestTrigger = findNewestTrigger;
|
|
6
|
+
exports.getIssueTrigger = getIssueTrigger;
|
|
7
|
+
exports.checkIsPersonAccount = checkIsPersonAccount;
|
|
8
|
+
exports.checkIsAppAccount = checkIsAppAccount;
|
|
9
|
+
exports.findEarlierPerson = findEarlierPerson;
|
|
10
|
+
exports.getRequester = getRequester;
|
|
11
|
+
/**
|
|
12
|
+
* @description Which change made an issue a request (Jira connector plan J5,
|
|
13
|
+
* D11–D12): the newest changelog entry that set the assignee to the AI account
|
|
14
|
+
* or moved the status into the trigger set. An issue created already matching
|
|
15
|
+
* has no such entry; its trigger is the creation itself. And who asked (J5b,
|
|
16
|
+
* R24): the person behind that change, or — when an app or automation made it —
|
|
17
|
+
* the nearest person before it, else the reporter. Pure: the poller hands in the
|
|
18
|
+
* changelog entries it read, newest pages first.
|
|
19
|
+
*/
|
|
20
|
+
/** The trigger id of an issue that matched from its creation. */
|
|
21
|
+
exports.createdTriggerId = 'created';
|
|
22
|
+
/** Jira's `accountType` of a person. */
|
|
23
|
+
const personAccountType = 'atlassian';
|
|
24
|
+
/** Jira's `accountType` of an app or automation. */
|
|
25
|
+
const appAccountType = 'app';
|
|
26
|
+
/** A changelog item names its field by `fieldId` (stable) or, on older entries, only by `field`. */
|
|
27
|
+
function getItemField(item) {
|
|
28
|
+
return item.fieldId ?? item.field;
|
|
29
|
+
}
|
|
30
|
+
function getHistoryKind(history, match) {
|
|
31
|
+
for (const item of history.items) {
|
|
32
|
+
const field = getItemField(item);
|
|
33
|
+
if (field === 'assignee' && item.to === match.aiAccountId)
|
|
34
|
+
return 'assigned';
|
|
35
|
+
if (field === 'status' && item.to !== null && item.to !== undefined && match.triggerStatusIds.has(item.to))
|
|
36
|
+
return 'statusChanged';
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/** Newest first: by creation time, then by id (Jira's ids grow). */
|
|
41
|
+
function compareHistoriesNewestFirst(left, right) {
|
|
42
|
+
const byTime = Date.parse(right.created) - Date.parse(left.created);
|
|
43
|
+
return byTime !== 0 && Number.isFinite(byTime) ? byTime : Number(right.id) - Number(left.id);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description The newest entry among `histories` that matches, or `null`. When
|
|
47
|
+
* `histories` are the NEWEST entries of the changelog (any number of its last
|
|
48
|
+
* pages), a match among them is the newest of the whole changelog — what lets
|
|
49
|
+
* the poller stop reading at the first page that holds one.
|
|
50
|
+
*/
|
|
51
|
+
function findNewestTrigger(histories, match) {
|
|
52
|
+
for (const history of [...histories].sort(compareHistoriesNewestFirst)) {
|
|
53
|
+
const kind = getHistoryKind(history, match);
|
|
54
|
+
if (kind)
|
|
55
|
+
return { triggerId: history.id, kind, author: history.author ?? null };
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/** The trigger over a WHOLE changelog: its newest matching entry, else the creation. */
|
|
60
|
+
function getIssueTrigger(histories, match, creator) {
|
|
61
|
+
return findNewestTrigger(histories, match) ?? { triggerId: exports.createdTriggerId, kind: 'created', author: creator };
|
|
62
|
+
}
|
|
63
|
+
/** A person, as opposed to an app or automation; a missing type is read as a person. */
|
|
64
|
+
function checkIsPersonAccount(account) {
|
|
65
|
+
return account.accountType === undefined || account.accountType === personAccountType;
|
|
66
|
+
}
|
|
67
|
+
/** An app or automation (a Jira rule, an integration), as opposed to a person or a service-desk customer. */
|
|
68
|
+
function checkIsAppAccount(account) {
|
|
69
|
+
return account.accountType === appAccountType;
|
|
70
|
+
}
|
|
71
|
+
/** A person who may be handed an issue back: not an app, not the AI account itself. */
|
|
72
|
+
function checkIsRequesterCandidate(account, aiAccountId) {
|
|
73
|
+
return account !== null && account !== undefined && checkIsPersonAccount(account) && account.accountId !== aiAccountId;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @description R24: the nearest person BEFORE the trigger in `histories` — the
|
|
77
|
+
* author of the newest older entry who is a person other than the AI account —
|
|
78
|
+
* or `null` when none of these entries has one (the caller may read older pages).
|
|
79
|
+
* Nothing comes before a creation trigger.
|
|
80
|
+
*/
|
|
81
|
+
function findEarlierPerson(histories, trigger, aiAccountId) {
|
|
82
|
+
if (trigger.kind === 'created')
|
|
83
|
+
return null;
|
|
84
|
+
const newestFirst = [...histories].sort(compareHistoriesNewestFirst);
|
|
85
|
+
const triggerIndex = newestFirst.findIndex((history) => history.id === trigger.triggerId);
|
|
86
|
+
if (triggerIndex < 0)
|
|
87
|
+
return null;
|
|
88
|
+
return newestFirst.slice(triggerIndex + 1).find((history) => checkIsRequesterCandidate(history.author, aiAccountId))?.author ?? null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @description The requester ("sender") an answer goes back to: the trigger's
|
|
92
|
+
* author when a person made the change; when an app or automation made it (or
|
|
93
|
+
* Jira names no one), the nearest earlier person in the changelog (R24), else the
|
|
94
|
+
* issue's reporter — an app cannot read a comment or take the issue back.
|
|
95
|
+
*/
|
|
96
|
+
function getRequester(trigger, histories, reporter, aiAccountId) {
|
|
97
|
+
if (checkIsRequesterCandidate(trigger.author, aiAccountId))
|
|
98
|
+
return trigger.author;
|
|
99
|
+
return findEarlierPerson(histories, trigger, aiAccountId) ?? reporter;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../../src/connectors/jira/trigger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RotatingJsonlFile } from '../../utils/rotatingJsonlFile';
|
|
3
|
+
/**
|
|
4
|
+
* @description The Jira connector's trigger log (plan J5, D12):
|
|
5
|
+
* `DATA_DIR/jira-triggers.jsonl`, one line per trigger the poller decided on,
|
|
6
|
+
* indexed in memory at boot. It is what keeps a trigger from becoming a second
|
|
7
|
+
* request — after a restart too — and what the run budget counts. Connector-
|
|
8
|
+
* owned, so the core request ledger stays platform-agnostic.
|
|
9
|
+
*/
|
|
10
|
+
export declare const jiraTriggerLogFileName = "jira-triggers.jsonl";
|
|
11
|
+
/**
|
|
12
|
+
* @name JiraTriggerOutcome
|
|
13
|
+
* @description `request` — a request was opened; `selfAuthored` — the AI account
|
|
14
|
+
* made the change itself; `parked` — the issue was over its run budget;
|
|
15
|
+
* `untrusted` — the hand-over was made by someone the trusted group does not back.
|
|
16
|
+
*/
|
|
17
|
+
export type JiraTriggerOutcome = 'request' | 'selfAuthored' | 'parked' | 'untrusted';
|
|
18
|
+
declare const triggerRecordSchema: z.ZodObject<{
|
|
19
|
+
issueKey: z.ZodString;
|
|
20
|
+
triggerId: z.ZodString;
|
|
21
|
+
outcome: z.ZodEnum<{
|
|
22
|
+
request: "request";
|
|
23
|
+
untrusted: "untrusted";
|
|
24
|
+
selfAuthored: "selfAuthored";
|
|
25
|
+
parked: "parked";
|
|
26
|
+
}>;
|
|
27
|
+
at: z.ZodNumber;
|
|
28
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export type JiraTriggerRecord = z.infer<typeof triggerRecordSchema>;
|
|
31
|
+
export declare class JiraTriggerLog {
|
|
32
|
+
private readonly file;
|
|
33
|
+
private readonly seen;
|
|
34
|
+
private readonly requestTimesByIssue;
|
|
35
|
+
constructor(file: RotatingJsonlFile<JiraTriggerRecord>);
|
|
36
|
+
static createForDataDir(filePath: string): JiraTriggerLog;
|
|
37
|
+
/** @description Index the file. A line that does not parse is skipped with a warning (never fatal). */
|
|
38
|
+
load(): Promise<void>;
|
|
39
|
+
private index;
|
|
40
|
+
checkIsSeen(issueKey: string, triggerId: string): boolean;
|
|
41
|
+
/** @description Requests opened for the issue in the rolling 24 h before `nowMs`. */
|
|
42
|
+
getRequestCountLastDay(issueKey: string, nowMs: number): number;
|
|
43
|
+
/** @description Persist a decision; `false` when the line could not be written (then nothing is indexed). */
|
|
44
|
+
record(record: JiraTriggerRecord): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* @description Index a decision whose line could not be written, for this
|
|
47
|
+
* process only: a request already posted is never posted again before a
|
|
48
|
+
* restart (after one, its trigger reads as new).
|
|
49
|
+
*/
|
|
50
|
+
remember(record: JiraTriggerRecord): void;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=triggerLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggerLog.d.ts","sourceRoot":"","sources":["../../../src/connectors/jira/triggerLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;;;;GAMG;AAEH,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAK5D;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErF,QAAA,MAAM,mBAAmB;;;;;;;;;;;iBAOvB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMpE,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;gBAEtC,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;IAEvE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAIzD,uGAAuG;IACjG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,OAAO,CAAC,KAAK;IAQb,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzD,qFAAqF;IACrF,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/D,6GAA6G;IAC7G,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO;IAM1C;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAG1C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JiraTriggerLog = exports.jiraTriggerLogFileName = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const rotatingJsonlFile_1 = require("../../utils/rotatingJsonlFile");
|
|
6
|
+
/**
|
|
7
|
+
* @description The Jira connector's trigger log (plan J5, D12):
|
|
8
|
+
* `DATA_DIR/jira-triggers.jsonl`, one line per trigger the poller decided on,
|
|
9
|
+
* indexed in memory at boot. It is what keeps a trigger from becoming a second
|
|
10
|
+
* request — after a restart too — and what the run budget counts. Connector-
|
|
11
|
+
* owned, so the core request ledger stays platform-agnostic.
|
|
12
|
+
*/
|
|
13
|
+
exports.jiraTriggerLogFileName = 'jira-triggers.jsonl';
|
|
14
|
+
/** Ample for years of triggers; the one `.1` backup is read too. */
|
|
15
|
+
const jiraTriggerLogMaxBytes = 10 * 1024 * 1024;
|
|
16
|
+
const msPerDay = 24 * 60 * 60 * 1000;
|
|
17
|
+
const triggerRecordSchema = zod_1.z.object({
|
|
18
|
+
issueKey: zod_1.z.string().min(1),
|
|
19
|
+
triggerId: zod_1.z.string().min(1),
|
|
20
|
+
outcome: zod_1.z.enum(['request', 'selfAuthored', 'parked', 'untrusted']),
|
|
21
|
+
/** Epoch ms. */
|
|
22
|
+
at: zod_1.z.number(),
|
|
23
|
+
requestId: zod_1.z.string().optional(),
|
|
24
|
+
});
|
|
25
|
+
function getTriggerIdentity(issueKey, triggerId) {
|
|
26
|
+
return `${issueKey}\u0000${triggerId}`;
|
|
27
|
+
}
|
|
28
|
+
class JiraTriggerLog {
|
|
29
|
+
file;
|
|
30
|
+
seen = new Set();
|
|
31
|
+
requestTimesByIssue = new Map();
|
|
32
|
+
constructor(file) {
|
|
33
|
+
this.file = file;
|
|
34
|
+
}
|
|
35
|
+
static createForDataDir(filePath) {
|
|
36
|
+
return new JiraTriggerLog(new rotatingJsonlFile_1.RotatingJsonlFile(filePath, jiraTriggerLogMaxBytes));
|
|
37
|
+
}
|
|
38
|
+
/** @description Index the file. A line that does not parse is skipped with a warning (never fatal). */
|
|
39
|
+
async load() {
|
|
40
|
+
const { records, skippedCount } = await this.file.readRecords(triggerRecordSchema);
|
|
41
|
+
for (const record of records)
|
|
42
|
+
this.index(record);
|
|
43
|
+
if (skippedCount > 0)
|
|
44
|
+
console.warn(`[jira] trigger log: ${skippedCount} unreadable line(s) skipped`);
|
|
45
|
+
}
|
|
46
|
+
index(record) {
|
|
47
|
+
this.seen.add(getTriggerIdentity(record.issueKey, record.triggerId));
|
|
48
|
+
if (record.outcome !== 'request')
|
|
49
|
+
return;
|
|
50
|
+
const times = this.requestTimesByIssue.get(record.issueKey) ?? [];
|
|
51
|
+
times.push(record.at);
|
|
52
|
+
this.requestTimesByIssue.set(record.issueKey, times);
|
|
53
|
+
}
|
|
54
|
+
checkIsSeen(issueKey, triggerId) {
|
|
55
|
+
return this.seen.has(getTriggerIdentity(issueKey, triggerId));
|
|
56
|
+
}
|
|
57
|
+
/** @description Requests opened for the issue in the rolling 24 h before `nowMs`. */
|
|
58
|
+
getRequestCountLastDay(issueKey, nowMs) {
|
|
59
|
+
return (this.requestTimesByIssue.get(issueKey) ?? []).filter((at) => at > nowMs - msPerDay).length;
|
|
60
|
+
}
|
|
61
|
+
/** @description Persist a decision; `false` when the line could not be written (then nothing is indexed). */
|
|
62
|
+
record(record) {
|
|
63
|
+
if (!this.file.append(record))
|
|
64
|
+
return false;
|
|
65
|
+
this.index(record);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @description Index a decision whose line could not be written, for this
|
|
70
|
+
* process only: a request already posted is never posted again before a
|
|
71
|
+
* restart (after one, its trigger reads as new).
|
|
72
|
+
*/
|
|
73
|
+
remember(record) {
|
|
74
|
+
this.index(record);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.JiraTriggerLog = JiraTriggerLog;
|
|
78
|
+
//# sourceMappingURL=triggerLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggerLog.js","sourceRoot":"","sources":["../../../src/connectors/jira/triggerLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type JiraAccount, type JiraClient } from './client';
|
|
2
|
+
/**
|
|
3
|
+
* @description The trusted group of the Jira connector: whose text may steer an
|
|
4
|
+
* agent. With `jira.json` `trustedGroup` set, trusted are the active members of
|
|
5
|
+
* that ONE Jira group, the AI account itself, and every app or automation
|
|
6
|
+
* (`accountType` `app`) — what they write reaches the agent and what they hand
|
|
7
|
+
* over starts it; anyone else's text is withheld and anyone else's hand-over is
|
|
8
|
+
* not acted on.
|
|
9
|
+
*
|
|
10
|
+
* The config names the group, the site is asked once for its id (a rename keeps
|
|
11
|
+
* working), and its members are read at boot and again whenever the last read is
|
|
12
|
+
* older than {@link jiraTrustedGroupMaxAgeMs}. A read that fails leaves the old
|
|
13
|
+
* list in place but never serves it past its age: the caller's
|
|
14
|
+
* {@link JiraTrust.refreshIfStale} rejects, so nothing is decided on a stale
|
|
15
|
+
* list (fail closed).
|
|
16
|
+
*/
|
|
17
|
+
/** A member removed from the group loses trust within this plus one poll. */
|
|
18
|
+
export declare const jiraTrustedGroupMaxAgeMs: number;
|
|
19
|
+
/** The group is gone from the site: a setup fault that does not fix itself, so polling stops. */
|
|
20
|
+
export declare class JiraTrustedGroupGoneError extends Error {
|
|
21
|
+
readonly groupName: string;
|
|
22
|
+
constructor(groupName: string);
|
|
23
|
+
}
|
|
24
|
+
/** The group as one read of the site saw it. */
|
|
25
|
+
export interface JiraTrustedGroupSnapshot {
|
|
26
|
+
/** The name `jira.json` gives; what the notice to a requester says. */
|
|
27
|
+
groupName: string;
|
|
28
|
+
groupId: string;
|
|
29
|
+
memberAccountIds: ReadonlySet<string>;
|
|
30
|
+
/** Epoch ms the read started at. */
|
|
31
|
+
readAtMs: number;
|
|
32
|
+
}
|
|
33
|
+
export interface JiraTrust {
|
|
34
|
+
readonly groupName: string;
|
|
35
|
+
/** Reads the members again when the last read is older than {@link jiraTrustedGroupMaxAgeMs}; rejects when it cannot (the list stays stale). */
|
|
36
|
+
refreshIfStale(): Promise<void>;
|
|
37
|
+
/** Against the list as of the last read; call {@link refreshIfStale} first. A missing account is never trusted. */
|
|
38
|
+
checkIsTrusted(account: JiraAccount | null | undefined): boolean;
|
|
39
|
+
}
|
|
40
|
+
export type JiraTrustClient = Pick<JiraClient, 'getGroupByName' | 'getGroupMembers'>;
|
|
41
|
+
/**
|
|
42
|
+
* @description Resolve the group named `groupName` and read its members, for
|
|
43
|
+
* the setup check. `null` — the site has no such group. A failed call
|
|
44
|
+
* (unreachable, refused) rejects as the client raised it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function readJiraTrustedGroup(client: JiraTrustClient, groupName: string, now: () => number): Promise<JiraTrustedGroupSnapshot | null>;
|
|
47
|
+
/** @description The trust over `snapshot` (the setup check's own read), following the group by its id. */
|
|
48
|
+
export declare function createJiraTrust(options: {
|
|
49
|
+
client: JiraTrustClient;
|
|
50
|
+
snapshot: JiraTrustedGroupSnapshot;
|
|
51
|
+
aiAccountId: string;
|
|
52
|
+
now: () => number;
|
|
53
|
+
}): JiraTrust;
|
|
54
|
+
//# sourceMappingURL=trustedGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustedGroup.d.ts","sourceRoot":"","sources":["../../../src/connectors/jira/trustedGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAG5E;;;;;;;;;;;;;;GAcG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,QAAgB,CAAC;AAItD,iGAAiG;AACjG,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIvC;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gJAAgJ;IAChJ,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,mHAAmH;IACnH,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;CAClE;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,CAAC;AAYrF;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAWlJ;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB,GAAG,SAAS,CA4BZ"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JiraTrustedGroupGoneError = exports.jiraTrustedGroupMaxAgeMs = void 0;
|
|
4
|
+
exports.readJiraTrustedGroup = readJiraTrustedGroup;
|
|
5
|
+
exports.createJiraTrust = createJiraTrust;
|
|
6
|
+
const client_1 = require("./client");
|
|
7
|
+
const trigger_1 = require("./trigger");
|
|
8
|
+
/**
|
|
9
|
+
* @description The trusted group of the Jira connector: whose text may steer an
|
|
10
|
+
* agent. With `jira.json` `trustedGroup` set, trusted are the active members of
|
|
11
|
+
* that ONE Jira group, the AI account itself, and every app or automation
|
|
12
|
+
* (`accountType` `app`) — what they write reaches the agent and what they hand
|
|
13
|
+
* over starts it; anyone else's text is withheld and anyone else's hand-over is
|
|
14
|
+
* not acted on.
|
|
15
|
+
*
|
|
16
|
+
* The config names the group, the site is asked once for its id (a rename keeps
|
|
17
|
+
* working), and its members are read at boot and again whenever the last read is
|
|
18
|
+
* older than {@link jiraTrustedGroupMaxAgeMs}. A read that fails leaves the old
|
|
19
|
+
* list in place but never serves it past its age: the caller's
|
|
20
|
+
* {@link JiraTrust.refreshIfStale} rejects, so nothing is decided on a stale
|
|
21
|
+
* list (fail closed).
|
|
22
|
+
*/
|
|
23
|
+
/** A member removed from the group loses trust within this plus one poll. */
|
|
24
|
+
exports.jiraTrustedGroupMaxAgeMs = 5 * 60 * 1000;
|
|
25
|
+
/** What a `group/member` read answers for a group that no longer exists. */
|
|
26
|
+
const groupNotFoundStatus = 404;
|
|
27
|
+
/** The group is gone from the site: a setup fault that does not fix itself, so polling stops. */
|
|
28
|
+
class JiraTrustedGroupGoneError extends Error {
|
|
29
|
+
groupName;
|
|
30
|
+
constructor(groupName) {
|
|
31
|
+
super(`the trusted group "${groupName}" no longer exists on the site`);
|
|
32
|
+
this.groupName = groupName;
|
|
33
|
+
this.name = 'JiraTrustedGroupGoneError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.JiraTrustedGroupGoneError = JiraTrustedGroupGoneError;
|
|
37
|
+
/** The account ids of the group's members; a 404 is {@link JiraTrustedGroupGoneError}. */
|
|
38
|
+
async function readMemberAccountIds(client, groupId, groupName) {
|
|
39
|
+
try {
|
|
40
|
+
return new Set((await client.getGroupMembers(groupId)).map((member) => member.accountId));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error instanceof client_1.JiraHttpError && error.status === groupNotFoundStatus)
|
|
44
|
+
throw new JiraTrustedGroupGoneError(groupName);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @description Resolve the group named `groupName` and read its members, for
|
|
50
|
+
* the setup check. `null` — the site has no such group. A failed call
|
|
51
|
+
* (unreachable, refused) rejects as the client raised it.
|
|
52
|
+
*/
|
|
53
|
+
async function readJiraTrustedGroup(client, groupName, now) {
|
|
54
|
+
const readAtMs = now();
|
|
55
|
+
const group = await client.getGroupByName(groupName);
|
|
56
|
+
if (!group)
|
|
57
|
+
return null;
|
|
58
|
+
try {
|
|
59
|
+
return { groupName, groupId: group.groupId, memberAccountIds: await readMemberAccountIds(client, group.groupId, groupName), readAtMs };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
// Removed between the two calls.
|
|
63
|
+
if (error instanceof JiraTrustedGroupGoneError)
|
|
64
|
+
return null;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** @description The trust over `snapshot` (the setup check's own read), following the group by its id. */
|
|
69
|
+
function createJiraTrust(options) {
|
|
70
|
+
const { client, aiAccountId, now } = options;
|
|
71
|
+
const { groupName, groupId } = options.snapshot;
|
|
72
|
+
let memberAccountIds = options.snapshot.memberAccountIds;
|
|
73
|
+
let readAtMs = options.snapshot.readAtMs;
|
|
74
|
+
/** One read at a time: the poll and the attachment tool may both find the list stale. */
|
|
75
|
+
let refreshInFlight = null;
|
|
76
|
+
async function refresh() {
|
|
77
|
+
const startedAtMs = now();
|
|
78
|
+
memberAccountIds = await readMemberAccountIds(client, groupId, groupName);
|
|
79
|
+
readAtMs = startedAtMs;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
groupName,
|
|
83
|
+
refreshIfStale: async () => {
|
|
84
|
+
if (now() - readAtMs < exports.jiraTrustedGroupMaxAgeMs)
|
|
85
|
+
return;
|
|
86
|
+
refreshInFlight ??= refresh().finally(() => {
|
|
87
|
+
refreshInFlight = null;
|
|
88
|
+
});
|
|
89
|
+
await refreshInFlight;
|
|
90
|
+
},
|
|
91
|
+
checkIsTrusted: (account) => {
|
|
92
|
+
if (!account)
|
|
93
|
+
return false;
|
|
94
|
+
return account.accountId === aiAccountId || (0, trigger_1.checkIsAppAccount)(account) || memberAccountIds.has(account.accountId);
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=trustedGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustedGroup.js","sourceRoot":"","sources":["../../../src/connectors/jira/trustedGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RotatingJsonlFile } from '../../utils/rotatingJsonlFile';
|
|
3
|
+
/**
|
|
4
|
+
* @description The comments of a request the answer sink posted without Jira
|
|
5
|
+
* confirming them (plan R29): `DATA_DIR/jira-unconfirmed-posts.jsonl`, one line
|
|
6
|
+
* per post that ended unconfirmed and one per entry settled later. When the
|
|
7
|
+
* agent sends the same text again for the same request, the sink reads the
|
|
8
|
+
* issue first and skips a comment that did land — after a restart too — so an
|
|
9
|
+
* answer is posted at most once. An entry older than a day is forgotten: the
|
|
10
|
+
* agent resends within minutes, not days.
|
|
11
|
+
*/
|
|
12
|
+
export declare const jiraUnconfirmedPostsFileName = "jira-unconfirmed-posts.jsonl";
|
|
13
|
+
export declare const unconfirmedPostMaxAgeMs: number;
|
|
14
|
+
declare const unconfirmedPostLineSchema: z.ZodObject<{
|
|
15
|
+
requestId: z.ZodString;
|
|
16
|
+
bodyHash: z.ZodString;
|
|
17
|
+
state: z.ZodEnum<{
|
|
18
|
+
unconfirmed: "unconfirmed";
|
|
19
|
+
settled: "settled";
|
|
20
|
+
}>;
|
|
21
|
+
at: z.ZodNumber;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
type UnconfirmedPostLine = z.infer<typeof unconfirmedPostLineSchema>;
|
|
24
|
+
/** @description The hash a comment's comparable text is remembered by — the text itself stays out of the file. */
|
|
25
|
+
export declare function getCommentBodyHash(comparableText: string): string;
|
|
26
|
+
export declare class JiraUnconfirmedPosts {
|
|
27
|
+
private readonly file;
|
|
28
|
+
private readonly now;
|
|
29
|
+
/** Post start time of every open entry, by request and body hash. */
|
|
30
|
+
private readonly postedAtByIdentity;
|
|
31
|
+
constructor(file: RotatingJsonlFile<UnconfirmedPostLine>, now: () => number);
|
|
32
|
+
static createForDataDir(filePath: string, now: () => number): JiraUnconfirmedPosts;
|
|
33
|
+
/**
|
|
34
|
+
* @description Replay the file, keeping only the entries still young enough to
|
|
35
|
+
* matter. A line that does not parse is skipped with a warning (never fatal).
|
|
36
|
+
*/
|
|
37
|
+
load(): Promise<void>;
|
|
38
|
+
private apply;
|
|
39
|
+
/** @description When the unconfirmed post of this body started, or `null` when there is none (or it is too old to matter). */
|
|
40
|
+
getPostedAt(requestId: string, bodyHash: string): number | null;
|
|
41
|
+
/**
|
|
42
|
+
* An entry past {@link unconfirmedPostMaxAgeMs} is dropped: most are never
|
|
43
|
+
* resent (the request closed, the agent sent other text), and kept they would
|
|
44
|
+
* only grow the map for the life of the process.
|
|
45
|
+
*/
|
|
46
|
+
private forgetExpired;
|
|
47
|
+
/**
|
|
48
|
+
* @description Remember a post Jira did not confirm. A line that cannot be
|
|
49
|
+
* written is still remembered for this process (a warning): the resend right
|
|
50
|
+
* after it is the one that matters most.
|
|
51
|
+
*/
|
|
52
|
+
recordUnconfirmed(requestId: string, bodyHash: string, postedAt: number): void;
|
|
53
|
+
/** @description The post landed, or a check found it did not: nothing to check on a resend any more. */
|
|
54
|
+
settle(requestId: string, bodyHash: string): void;
|
|
55
|
+
private write;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=unconfirmedPosts.d.ts.map
|