charness 3.1.0 → 3.3.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 +11 -13
- package/DEVELOPMENT.md +27 -6
- package/MIGRATION_1_TO_2.md +1 -1
- package/MIGRATION_RENAME_TO_CHARNESS.md +133 -0
- package/README.md +185 -618
- package/SETUP.md +644 -0
- package/dist/adapters/adapterEventRouting.d.ts +2 -1
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
- package/dist/adapters/adapterEventRouting.js +3 -0
- package/dist/adapters/adapterEventRouting.js.map +1 -1
- package/dist/adapters/adapterNames.d.ts +13 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -1
- package/dist/adapters/adapterNames.js +16 -0
- package/dist/adapters/adapterNames.js.map +1 -1
- package/dist/adapters/backendUnavailableError.d.ts +11 -0
- package/dist/adapters/backendUnavailableError.d.ts.map +1 -0
- package/dist/adapters/backendUnavailableError.js +19 -0
- package/dist/adapters/backendUnavailableError.js.map +1 -0
- package/dist/adapters/claudeCliAdapter.d.ts +30 -7
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +71 -17
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +36 -3
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +95 -31
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/createAdapter.d.ts +3 -14
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +9 -19
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +140 -12
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +386 -120
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/apiErrorRetry.d.ts +70 -6
- package/dist/apiErrorRetry.d.ts.map +1 -1
- package/dist/apiErrorRetry.js +312 -34
- package/dist/apiErrorRetry.js.map +1 -1
- package/dist/apiRetryKick.d.ts +26 -1
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +41 -2
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts +2 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +743 -190
- package/dist/bot.js.map +1 -1
- package/dist/cli/bot.d.ts +4 -2
- package/dist/cli/bot.d.ts.map +1 -1
- package/dist/cli/bot.js +11 -3
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/botEntry.js +3 -1
- package/dist/cli/botEntry.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +4 -4
- package/dist/cli/claudeProfiles.js +5 -5
- package/dist/cli/claudeProfiles.js.map +1 -1
- package/dist/cli/envLoader.d.ts +6 -5
- package/dist/cli/envLoader.d.ts.map +1 -1
- package/dist/cli/envLoader.js +8 -27
- package/dist/cli/envLoader.js.map +1 -1
- package/dist/cli/hot.d.ts +9 -3
- package/dist/cli/hot.d.ts.map +1 -1
- package/dist/cli/hot.js +55 -19
- package/dist/cli/hot.js.map +1 -1
- package/dist/cli.js +12 -12
- package/dist/cli.js.map +1 -1
- package/dist/configDirFile.d.ts +73 -0
- package/dist/configDirFile.d.ts.map +1 -0
- package/dist/configDirFile.js +216 -0
- package/dist/configDirFile.js.map +1 -0
- package/dist/connectors/jira/adf.d.ts +21 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -1
- package/dist/connectors/jira/adf.js +39 -0
- package/dist/connectors/jira/adf.js.map +1 -1
- package/dist/connectors/jira/answerSink.d.ts +20 -3
- package/dist/connectors/jira/answerSink.d.ts.map +1 -1
- package/dist/connectors/jira/answerSink.js +126 -13
- package/dist/connectors/jira/answerSink.js.map +1 -1
- package/dist/connectors/jira/client.d.ts +4 -0
- package/dist/connectors/jira/client.d.ts.map +1 -1
- package/dist/connectors/jira/client.js +3 -0
- package/dist/connectors/jira/client.js.map +1 -1
- package/dist/connectors/jira/config.d.ts +10 -1
- package/dist/connectors/jira/config.d.ts.map +1 -1
- package/dist/connectors/jira/config.js +11 -2
- package/dist/connectors/jira/config.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +7 -1
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +23 -4
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/jira/contextLedger.d.ts +6 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
- package/dist/connectors/jira/contextLedger.js +16 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -1
- package/dist/connectors/jira/contextPreamble.d.ts.map +1 -1
- package/dist/connectors/jira/contextPreamble.js +6 -3
- package/dist/connectors/jira/contextPreamble.js.map +1 -1
- package/dist/connectors/jira/inbound.d.ts +60 -7
- package/dist/connectors/jira/inbound.d.ts.map +1 -1
- package/dist/connectors/jira/inbound.js +169 -16
- package/dist/connectors/jira/inbound.js.map +1 -1
- package/dist/connectors/jira/issueBlocks.d.ts +6 -1
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
- package/dist/connectors/jira/issueBlocks.js +5 -1
- package/dist/connectors/jira/issueBlocks.js.map +1 -1
- package/dist/connectors/jira/prompt.d.ts +2 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -1
- package/dist/connectors/jira/prompt.js +16 -0
- package/dist/connectors/jira/prompt.js.map +1 -1
- package/dist/connectors/jira/trigger.d.ts +12 -3
- package/dist/connectors/jira/trigger.d.ts.map +1 -1
- package/dist/connectors/jira/trigger.js +8 -1
- package/dist/connectors/jira/trigger.js.map +1 -1
- package/dist/connectors/jira/triggerLog.d.ts +10 -3
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
- package/dist/connectors/jira/triggerLog.js +18 -2
- package/dist/connectors/jira/triggerLog.js.map +1 -1
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +2 -2
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/autoContinueLimits.js +4 -4
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
- package/dist/connectors/telegram/commands/backendSwitch.d.ts +25 -0
- package/dist/connectors/telegram/commands/backendSwitch.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/backendSwitch.js +104 -0
- package/dist/connectors/telegram/commands/backendSwitch.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/callbackMessage.js +24 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
- package/dist/connectors/telegram/commands/callbackToast.d.ts +36 -0
- package/dist/connectors/telegram/commands/callbackToast.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/callbackToast.js +83 -0
- package/dist/connectors/telegram/commands/callbackToast.js.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +18 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.js +220 -66
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.js +4 -2
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.d.ts +5 -8
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.js +183 -193
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
- package/dist/connectors/telegram/commands/limitsBoard.d.ts +40 -0
- package/dist/connectors/telegram/commands/limitsBoard.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/limitsBoard.js +281 -0
- package/dist/connectors/telegram/commands/limitsBoard.js.map +1 -0
- package/dist/connectors/telegram/commands/modelPage.d.ts +130 -0
- package/dist/connectors/telegram/commands/modelPage.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelPage.js +120 -0
- package/dist/connectors/telegram/commands/modelPage.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +9 -1
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/modelProviders.js +203 -111
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
- package/dist/connectors/telegram/commands/stt.d.ts +32 -0
- package/dist/connectors/telegram/commands/stt.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/stt.js +460 -0
- package/dist/connectors/telegram/commands/stt.js.map +1 -0
- package/dist/effortLevels.d.ts +57 -7
- package/dist/effortLevels.d.ts.map +1 -1
- package/dist/effortLevels.js +65 -9
- package/dist/effortLevels.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +160 -17
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +160 -17
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +160 -17
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +160 -17
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +160 -17
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +160 -17
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +160 -17
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +160 -17
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +160 -17
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +160 -17
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +160 -17
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +160 -17
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installManager.d.ts +36 -6
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +124 -26
- package/dist/installManager.js.map +1 -1
- package/dist/instanceLock.d.ts.map +1 -1
- package/dist/instanceLock.js +10 -8
- package/dist/instanceLock.js.map +1 -1
- package/dist/instanceSettings.d.ts +52 -0
- package/dist/instanceSettings.d.ts.map +1 -0
- package/dist/instanceSettings.js +136 -0
- package/dist/instanceSettings.js.map +1 -0
- package/dist/legacyMigration.d.ts +69 -0
- package/dist/legacyMigration.d.ts.map +1 -0
- package/dist/legacyMigration.js +338 -0
- package/dist/legacyMigration.js.map +1 -0
- package/dist/legacyNames.d.ts +107 -0
- package/dist/legacyNames.d.ts.map +1 -0
- package/dist/legacyNames.js +230 -0
- package/dist/legacyNames.js.map +1 -0
- package/dist/pinnedStatus.d.ts +7 -1
- package/dist/pinnedStatus.d.ts.map +1 -1
- package/dist/pinnedStatus.js +1 -1
- package/dist/pinnedStatus.js.map +1 -1
- package/dist/platform/answerSink.d.ts +5 -0
- package/dist/platform/answerSink.d.ts.map +1 -1
- package/dist/platform/answerSink.js.map +1 -1
- package/dist/requests/answerRequest.d.ts +2 -0
- package/dist/requests/answerRequest.d.ts.map +1 -1
- package/dist/requests/answerRequest.js +3 -1
- package/dist/requests/answerRequest.js.map +1 -1
- package/dist/requests/answerStyle.d.ts +11 -0
- package/dist/requests/answerStyle.d.ts.map +1 -0
- package/dist/requests/answerStyle.js +14 -0
- package/dist/requests/answerStyle.js.map +1 -0
- package/dist/requests/answerTail.d.ts.map +1 -1
- package/dist/requests/answerTail.js +2 -0
- package/dist/requests/answerTail.js.map +1 -1
- package/dist/requests/requestHeader.d.ts.map +1 -1
- package/dist/requests/requestHeader.js +3 -0
- package/dist/requests/requestHeader.js.map +1 -1
- package/dist/requests/requestLedger.d.ts +8 -0
- package/dist/requests/requestLedger.d.ts.map +1 -1
- package/dist/requests/requestLedger.js +20 -2
- package/dist/requests/requestLedger.js.map +1 -1
- package/dist/requests/types.d.ts +3 -1
- package/dist/requests/types.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts +9 -1
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +49 -16
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/shutdown.d.ts +14 -0
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +16 -0
- package/dist/shutdown.js.map +1 -1
- package/dist/state.d.ts +57 -3
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +67 -3
- package/dist/state.js.map +1 -1
- package/dist/stt/sttAutoInstall.d.ts +39 -0
- package/dist/stt/sttAutoInstall.d.ts.map +1 -0
- package/dist/stt/sttAutoInstall.js +158 -0
- package/dist/stt/sttAutoInstall.js.map +1 -0
- package/dist/stt/sttChildEnv.d.ts +11 -0
- package/dist/stt/sttChildEnv.d.ts.map +1 -0
- package/dist/stt/sttChildEnv.js +30 -0
- package/dist/stt/sttChildEnv.js.map +1 -0
- package/dist/stt/sttConfigEdit.d.ts +71 -0
- package/dist/stt/sttConfigEdit.d.ts.map +1 -0
- package/dist/stt/sttConfigEdit.js +144 -0
- package/dist/stt/sttConfigEdit.js.map +1 -0
- package/dist/stt/sttInstall.d.ts +147 -0
- package/dist/stt/sttInstall.d.ts.map +1 -0
- package/dist/stt/sttInstall.js +491 -0
- package/dist/stt/sttInstall.js.map +1 -0
- package/dist/stt/sttInstallEntry.d.ts +2 -0
- package/dist/stt/sttInstallEntry.d.ts.map +1 -0
- package/dist/stt/sttInstallEntry.js +31 -0
- package/dist/stt/sttInstallEntry.js.map +1 -0
- package/dist/stt/sttInstallReporter.d.ts +45 -0
- package/dist/stt/sttInstallReporter.d.ts.map +1 -0
- package/dist/stt/sttInstallReporter.js +57 -0
- package/dist/stt/sttInstallReporter.js.map +1 -0
- package/dist/stt/sttRuntime.d.ts +35 -0
- package/dist/stt/sttRuntime.d.ts.map +1 -0
- package/dist/stt/sttRuntime.js +73 -0
- package/dist/stt/sttRuntime.js.map +1 -0
- package/dist/stt/sttScreenPlan.d.ts +193 -0
- package/dist/stt/sttScreenPlan.d.ts.map +1 -0
- package/dist/stt/sttScreenPlan.js +541 -0
- package/dist/stt/sttScreenPlan.js.map +1 -0
- package/dist/stt/sttSettings.d.ts +201 -0
- package/dist/stt/sttSettings.d.ts.map +1 -0
- package/dist/stt/sttSettings.js +387 -0
- package/dist/stt/sttSettings.js.map +1 -0
- package/dist/stt/sttSidecarOwner.d.ts +115 -0
- package/dist/stt/sttSidecarOwner.d.ts.map +1 -0
- package/dist/stt/sttSidecarOwner.js +475 -0
- package/dist/stt/sttSidecarOwner.js.map +1 -0
- package/dist/stt/transcribeChain.d.ts +36 -0
- package/dist/stt/transcribeChain.d.ts.map +1 -0
- package/dist/stt/transcribeChain.js +42 -0
- package/dist/stt/transcribeChain.js.map +1 -0
- package/dist/types.d.ts +77 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/adapterSwitchSessionIds.d.ts +32 -0
- package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -0
- package/dist/utils/adapterSwitchSessionIds.js +44 -0
- package/dist/utils/adapterSwitchSessionIds.js.map +1 -0
- package/dist/utils/backendSwitchPlan.d.ts +63 -0
- package/dist/utils/backendSwitchPlan.d.ts.map +1 -0
- package/dist/utils/backendSwitchPlan.js +73 -0
- package/dist/utils/backendSwitchPlan.js.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts +12 -1
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
- package/dist/utils/claudeAccountPickerPlan.js +20 -1
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
- package/dist/utils/claudeProfiles.d.ts +7 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -1
- package/dist/utils/claudeProfiles.js +19 -0
- package/dist/utils/claudeProfiles.js.map +1 -1
- package/dist/utils/claudeTranscriptContent.d.ts +24 -0
- package/dist/utils/claudeTranscriptContent.d.ts.map +1 -0
- package/dist/utils/claudeTranscriptContent.js +107 -0
- package/dist/utils/claudeTranscriptContent.js.map +1 -0
- package/dist/utils/claudeUsage.d.ts +47 -8
- package/dist/utils/claudeUsage.d.ts.map +1 -1
- package/dist/utils/claudeUsage.js +76 -14
- package/dist/utils/claudeUsage.js.map +1 -1
- package/dist/utils/claudeUsageRefresher.d.ts +8 -1
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
- package/dist/utils/claudeUsageRefresher.js +9 -4
- package/dist/utils/claudeUsageRefresher.js.map +1 -1
- package/dist/utils/effortPickerPlan.d.ts +54 -0
- package/dist/utils/effortPickerPlan.d.ts.map +1 -0
- package/dist/utils/effortPickerPlan.js +56 -0
- package/dist/utils/effortPickerPlan.js.map +1 -0
- package/dist/utils/ensureSessionPlan.d.ts +20 -4
- package/dist/utils/ensureSessionPlan.d.ts.map +1 -1
- package/dist/utils/ensureSessionPlan.js +17 -4
- package/dist/utils/ensureSessionPlan.js.map +1 -1
- package/dist/utils/fallbackBridge.d.ts +6 -2
- package/dist/utils/fallbackBridge.d.ts.map +1 -1
- package/dist/utils/fallbackBridge.js +10 -3
- package/dist/utils/fallbackBridge.js.map +1 -1
- package/dist/utils/fallbackChain.d.ts +36 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -1
- package/dist/utils/fallbackChain.js +65 -1
- package/dist/utils/fallbackChain.js.map +1 -1
- package/dist/utils/fallbackSwitchNotice.d.ts +41 -0
- package/dist/utils/fallbackSwitchNotice.d.ts.map +1 -0
- package/dist/utils/fallbackSwitchNotice.js +75 -0
- package/dist/utils/fallbackSwitchNotice.js.map +1 -0
- package/dist/utils/fileSendService.d.ts +33 -10
- package/dist/utils/fileSendService.d.ts.map +1 -1
- package/dist/utils/fileSendService.js +78 -27
- package/dist/utils/fileSendService.js.map +1 -1
- package/dist/utils/jsonStreamHost.d.ts +39 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +60 -1
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/limitEpisodeRecovery.d.ts +16 -2
- package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -1
- package/dist/utils/limitEpisodeRecovery.js +44 -3
- package/dist/utils/limitEpisodeRecovery.js.map +1 -1
- package/dist/utils/limitSettings.d.ts +25 -0
- package/dist/utils/limitSettings.d.ts.map +1 -0
- package/dist/utils/limitSettings.js +31 -0
- package/dist/utils/limitSettings.js.map +1 -0
- package/dist/utils/limitsBoardPlan.d.ts +52 -0
- package/dist/utils/limitsBoardPlan.d.ts.map +1 -0
- package/dist/utils/limitsBoardPlan.js +93 -0
- package/dist/utils/limitsBoardPlan.js.map +1 -0
- package/dist/utils/openCodeCompactPlugin.d.ts +11 -3
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
- package/dist/utils/openCodeCompactPlugin.js +37 -5
- package/dist/utils/openCodeCompactPlugin.js.map +1 -1
- package/dist/utils/openCodeUsage.d.ts +93 -0
- package/dist/utils/openCodeUsage.d.ts.map +1 -0
- package/dist/utils/openCodeUsage.js +248 -0
- package/dist/utils/openCodeUsage.js.map +1 -0
- package/dist/utils/operatorSwitchPlan.d.ts +61 -0
- package/dist/utils/operatorSwitchPlan.d.ts.map +1 -0
- package/dist/utils/operatorSwitchPlan.js +32 -0
- package/dist/utils/operatorSwitchPlan.js.map +1 -0
- package/dist/utils/promptDelivery.d.ts +40 -0
- package/dist/utils/promptDelivery.d.ts.map +1 -1
- package/dist/utils/promptDelivery.js +31 -0
- package/dist/utils/promptDelivery.js.map +1 -1
- package/dist/utils/recvPreviewRedaction.d.ts +14 -4
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
- package/dist/utils/recvPreviewRedaction.js +19 -7
- package/dist/utils/recvPreviewRedaction.js.map +1 -1
- package/dist/utils/startupReadiness.d.ts +3 -3
- package/dist/utils/startupReadiness.d.ts.map +1 -1
- package/dist/utils/startupReadiness.js +2 -2
- package/dist/utils/startupReadiness.js.map +1 -1
- package/dist/utils/threadStatusReport.d.ts +3 -1
- package/dist/utils/threadStatusReport.d.ts.map +1 -1
- package/dist/utils/threadStatusReport.js +4 -3
- package/dist/utils/threadStatusReport.js.map +1 -1
- package/dist/utils/timezone.d.ts +23 -0
- package/dist/utils/timezone.d.ts.map +1 -1
- package/dist/utils/timezone.js +38 -0
- package/dist/utils/timezone.js.map +1 -1
- package/dist/utils/transcribeAudio.d.ts +25 -12
- package/dist/utils/transcribeAudio.d.ts.map +1 -1
- package/dist/utils/transcribeAudio.js +39 -21
- package/dist/utils/transcribeAudio.js.map +1 -1
- package/dist/utils/usageRefreshBudget.d.ts +9 -0
- package/dist/utils/usageRefreshBudget.d.ts.map +1 -0
- package/dist/utils/usageRefreshBudget.js +27 -0
- package/dist/utils/usageRefreshBudget.js.map +1 -0
- package/examples/.env.example +13 -9
- package/examples/docker-compose.yml +20 -17
- package/package.json +4 -1
- package/stt/gigaam_sidecar.py +800 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSttInstallMessageReporter = createSttInstallMessageReporter;
|
|
4
|
+
exports.createSttInstallLogReporter = createSttInstallLogReporter;
|
|
5
|
+
exports.createSttInstallMessagePorts = createSttInstallMessagePorts;
|
|
6
|
+
const sessionKey_1 = require("../sessionKey");
|
|
7
|
+
const sttScreenPlan_1 = require("./sttScreenPlan");
|
|
8
|
+
/**
|
|
9
|
+
* @description Keep ONE message up to date with a running install. It edits `existing` (a message the caller
|
|
10
|
+
* already posted — the `/stt` confirm screen), else the one `state.json` remembers for THIS topic, else posts one
|
|
11
|
+
* on the first report, and remembers its id together with the "enable on done" flag. The END of the job is not
|
|
12
|
+
* reported here: the finisher turns the message into the outcome (with its buttons) and forgets it, so a job that
|
|
13
|
+
* outlives the bot is finished the same way by whoever re-attaches.
|
|
14
|
+
*/
|
|
15
|
+
function createSttInstallMessageReporter(ports, key, existing) {
|
|
16
|
+
const threadKey = (0, sessionKey_1.keyToString)(key);
|
|
17
|
+
const startedAtMs = ports.nowMs();
|
|
18
|
+
const remembered = ports.getState().getSttInstallProgressMessage();
|
|
19
|
+
const rememberedHere = remembered?.threadKey === threadKey ? remembered : null;
|
|
20
|
+
const shouldEnableOnDone = (existing ?? rememberedHere)?.shouldEnableOnDone === true;
|
|
21
|
+
let messageId = existing?.messageId ?? rememberedHere?.messageId ?? null;
|
|
22
|
+
let persistedId = rememberedHere?.messageId ?? null;
|
|
23
|
+
const report = async (progress) => {
|
|
24
|
+
if (progress.phase === 'done' || progress.phase === 'failed')
|
|
25
|
+
return;
|
|
26
|
+
const text = (0, sttScreenPlan_1.buildSttInstallProgressText)(progress, (ports.nowMs() - startedAtMs) / 1000, ports.translateFor(key));
|
|
27
|
+
const isEdited = messageId !== null && (await ports.editThreadMessage(key, messageId, text));
|
|
28
|
+
if (!isEdited)
|
|
29
|
+
messageId = await ports.replyToThread(key, text);
|
|
30
|
+
if (messageId !== null && messageId !== persistedId) {
|
|
31
|
+
await ports.getState().setSttInstallProgressMessage({ threadKey, messageId, ...(shouldEnableOnDone ? { shouldEnableOnDone } : {}) });
|
|
32
|
+
persistedId = messageId;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return { report, getMessageId: () => messageId };
|
|
36
|
+
}
|
|
37
|
+
/** @description The reporter for an install nobody is watching in a chat: one `[STT] install: …` line per phase change. */
|
|
38
|
+
function createSttInstallLogReporter(log) {
|
|
39
|
+
let lastPhase = '';
|
|
40
|
+
return (progress) => {
|
|
41
|
+
if (progress.phase === lastPhase)
|
|
42
|
+
return;
|
|
43
|
+
lastPhase = progress.phase;
|
|
44
|
+
log((0, sttScreenPlan_1.formatSttInstallLogLine)(progress));
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** @description The ports of {@link createSttInstallMessageReporter} over the bot's topic helpers; `translate` is `t(…)`. */
|
|
48
|
+
function createSttInstallMessagePorts(core, translate) {
|
|
49
|
+
return {
|
|
50
|
+
getState: core.getState,
|
|
51
|
+
replyToThread: (key, text) => core.replyToThread(key, text),
|
|
52
|
+
editThreadMessage: (key, messageId, text) => core.editThreadMessage(key, messageId, text),
|
|
53
|
+
translateFor: (key) => (code, vars) => core.withThreadLocale(key, () => translate(code, vars)),
|
|
54
|
+
nowMs: () => Date.now(),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=sttInstallReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sttInstallReporter.js","sourceRoot":"","sources":["../../src/stt/sttInstallReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ResolvedSttSettings } from './sttSettings';
|
|
2
|
+
import { type SttOwnerContext, type SttSidecarOwner } from './sttSidecarOwner';
|
|
3
|
+
/**
|
|
4
|
+
* @description The voice settings as the running bot sees them: `stt.json` re-read when it changes, resolved
|
|
5
|
+
* against what the local engine's lifecycle says RIGHT NOW (installed? installing? marked unhealthy? has an
|
|
6
|
+
* owner?), with a change in what is wrong logged once as `[STT] …`. Built over injected dependencies so `bot.ts`
|
|
7
|
+
* (which a test cannot import) only wires it.
|
|
8
|
+
*/
|
|
9
|
+
export interface SttRuntimeDeps {
|
|
10
|
+
getDataDir: () => string;
|
|
11
|
+
getConfigPath: () => string;
|
|
12
|
+
owner: Pick<SttSidecarOwner, 'ensure' | 'checkIsUnhealthy'>;
|
|
13
|
+
getOwnerContext: () => SttOwnerContext | null;
|
|
14
|
+
/** The sinks for the `[STT]` lines: info (the migration) and problems (what is wrong with the settings). */
|
|
15
|
+
logInfo: (line: string) => void;
|
|
16
|
+
logProblem: (line: string) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Called when `stt.json` CHANGED (a hand edit or a `/stt` save) and now names an enabled local engine that is
|
|
19
|
+
* not installed — the bot installs it by itself. Not called at boot (the boot step starts that install, with
|
|
20
|
+
* its progress message) and never per voice note, so a failed install is not retried by every voice.
|
|
21
|
+
*/
|
|
22
|
+
onNeedsAutoInstall?: () => void;
|
|
23
|
+
/** Seams for tests; default to the real install checks. */
|
|
24
|
+
checkIsConfigOnContainerDisk?: (configPath: string) => boolean;
|
|
25
|
+
checkIsInstalled?: (dataDir: string) => boolean;
|
|
26
|
+
checkIsInstalling?: (dataDir: string) => boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface SttRuntime {
|
|
29
|
+
/** The chain in effect now (re-reads the file when its stamp changed). */
|
|
30
|
+
getResolved: () => ResolvedSttSettings;
|
|
31
|
+
/** Boot: move the old env keys into `stt.json` once, then report the first state. */
|
|
32
|
+
init: () => void;
|
|
33
|
+
}
|
|
34
|
+
export declare function createSttRuntime(deps: SttRuntimeDeps): SttRuntime;
|
|
35
|
+
//# sourceMappingURL=sttRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sttRuntime.d.ts","sourceRoot":"","sources":["../../src/stt/sttRuntime.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,mBAAmB,EAGzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,kBAAkB,CAAC,CAAC;IAC5D,eAAe,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IAC9C,4GAA4G;IAC5G,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,2DAA2D;IAC3D,4BAA4B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/D,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,mBAAmB,CAAC;IACvC,qFAAqF;IACrF,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CA8DjE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSttRuntime = createSttRuntime;
|
|
4
|
+
const configDirFile_1 = require("../configDirFile");
|
|
5
|
+
const sttSettings_1 = require("./sttSettings");
|
|
6
|
+
const sttInstall_1 = require("./sttInstall");
|
|
7
|
+
const sttSidecarOwner_1 = require("./sttSidecarOwner");
|
|
8
|
+
function createSttRuntime(deps) {
|
|
9
|
+
const checkIsInstalled = deps.checkIsInstalled ?? sttInstall_1.isGigaamInstalled;
|
|
10
|
+
const checkIsInstalling = deps.checkIsInstalling ?? sttInstall_1.isGigaamInstalling;
|
|
11
|
+
const checkIsConfigOnContainerDisk = deps.checkIsConfigOnContainerDisk ?? configDirFile_1.checkIsConfigFileOnContainerDisk;
|
|
12
|
+
/** The `[STT]` lines last logged, so an unchanged state is reported once, not per voice note. */
|
|
13
|
+
let lastReport = '';
|
|
14
|
+
/** The load the last resolve saw: the cache hands back the SAME object until the file changes. */
|
|
15
|
+
let lastLoad = null;
|
|
16
|
+
function resolveNow(isInit) {
|
|
17
|
+
const load = (0, sttSettings_1.loadSttConfig)(deps.getConfigPath());
|
|
18
|
+
const dataDir = deps.getDataDir();
|
|
19
|
+
const facts = {
|
|
20
|
+
isGigaamInstalled: checkIsInstalled(dataDir),
|
|
21
|
+
isGigaamInstalling: checkIsInstalling(dataDir),
|
|
22
|
+
isGigaamUnhealthy: deps.owner.checkIsUnhealthy(),
|
|
23
|
+
hasOwnerContext: deps.getOwnerContext() !== null,
|
|
24
|
+
};
|
|
25
|
+
// The process settings of THIS resolve: a start (or an adoption) is judged against them.
|
|
26
|
+
const localEngineSettings = (load.config ?? (0, sttSettings_1.createEmptySttConfig)()).gigaam;
|
|
27
|
+
const resolved = (0, sttSettings_1.resolveSttSettings)(load, facts, {
|
|
28
|
+
getGigaamEndpoint: async () => (0, sttSidecarOwner_1.getSttSidecarTranscriptionEndpoint)(await deps.owner.ensure(localEngineSettings)),
|
|
29
|
+
});
|
|
30
|
+
const report = (0, sttSettings_1.getSttReportLines)(resolved).join('\n');
|
|
31
|
+
if (report !== lastReport) {
|
|
32
|
+
lastReport = report;
|
|
33
|
+
if (report)
|
|
34
|
+
deps.logProblem(report);
|
|
35
|
+
}
|
|
36
|
+
const isChanged = load !== lastLoad;
|
|
37
|
+
lastLoad = load;
|
|
38
|
+
if (isChanged && !isInit && resolved.needsAutoInstall)
|
|
39
|
+
deps.onNeedsAutoInstall?.();
|
|
40
|
+
return resolved;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Said once, at boot: a settings file that cannot be kept loses every /stt edit — a read-only or missing mount
|
|
44
|
+
* (the write check), or a container's own disk (writable, so the write check is quiet, but a new container starts
|
|
45
|
+
* empty and would migrate the old env keys again).
|
|
46
|
+
*/
|
|
47
|
+
function reportStorageProblem(configPath) {
|
|
48
|
+
const writeBlock = (0, configDirFile_1.getConfigFileWriteBlock)(configPath);
|
|
49
|
+
if (writeBlock !== null) {
|
|
50
|
+
deps.logProblem(`[STT] ${configPath} cannot be written (${writeBlock}): changes made in /stt will not be kept — make its directory writable`);
|
|
51
|
+
}
|
|
52
|
+
else if (checkIsConfigOnContainerDisk(configPath)) {
|
|
53
|
+
deps.logProblem(`[STT] ${configPath} is on this container's own disk, not on a mount: changes made in /stt are lost when the container is re-created — mount its directory (SETUP.md, Run with Docker)`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
getResolved: () => resolveNow(false),
|
|
58
|
+
init() {
|
|
59
|
+
const configPath = deps.getConfigPath();
|
|
60
|
+
const migration = (0, sttSettings_1.migrateLegacySttKeys)(configPath);
|
|
61
|
+
if (migration.status === 'migrated') {
|
|
62
|
+
deps.logInfo(`[STT] moved ${migration.engineNames.join(' + ')} from the environment into ${configPath}`);
|
|
63
|
+
}
|
|
64
|
+
else if (migration.status === 'writeFailed') {
|
|
65
|
+
deps.logProblem(`[STT] could not write ${configPath} (${migration.error}): voice input stays off until it can be written`);
|
|
66
|
+
}
|
|
67
|
+
if (migration.status !== 'writeFailed')
|
|
68
|
+
reportStorageProblem(configPath);
|
|
69
|
+
resolveNow(true);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=sttRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sttRuntime.js","sourceRoot":"","sources":["../../src/stt/sttRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { SttInstallProgress } from './sttInstall';
|
|
2
|
+
import { type ResolvedSttSettings, type SttConfigFile, type SttEngineSetting } from './sttSettings';
|
|
3
|
+
import type { SttSidecarStatus } from './sttSidecarOwner';
|
|
4
|
+
/**
|
|
5
|
+
* @description What the voice-settings messages say, as pure functions over data — the Telegram side
|
|
6
|
+
* (`connectors/telegram/commands/stt.ts`) only renders and sends them. `translate` is the topic's `t(...)`, so
|
|
7
|
+
* tests pass a stand-in that echoes the key and variables.
|
|
8
|
+
*/
|
|
9
|
+
export type SttTranslate = (code: string, vars?: Record<string, string | number>) => string;
|
|
10
|
+
/** @description `1:05` — minutes and zero-padded seconds. */
|
|
11
|
+
export declare function formatSttElapsed(elapsedSeconds: number): string;
|
|
12
|
+
/** @description The phase line of a RUNNING install (`downloading the model 120/216 MB…`). */
|
|
13
|
+
export declare function getSttInstallPhaseLine(progress: SttInstallProgress, translate: SttTranslate): string;
|
|
14
|
+
/**
|
|
15
|
+
* @description The text of the install message for one progress report: while it runs, a header with the elapsed
|
|
16
|
+
* time over the phase line (`downloading the model 120/216 MB…`); at the end only the outcome — ready, or the
|
|
17
|
+
* error with the last log lines.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildSttInstallProgressText(progress: SttInstallProgress, elapsedSeconds: number, translate: SttTranslate): string;
|
|
20
|
+
/** @description One log line per phase change of an install nobody watches in a chat (`[STT] install: …`). */
|
|
21
|
+
export declare function formatSttInstallLogLine(progress: SttInstallProgress): string;
|
|
22
|
+
/** @name SttScreenInput @description Everything a `/stt` screen shows, gathered by the command module. */
|
|
23
|
+
export interface SttScreenInput {
|
|
24
|
+
resolved: ResolvedSttSettings;
|
|
25
|
+
configPath: string;
|
|
26
|
+
isLocalInstalled: boolean;
|
|
27
|
+
/** The install job's last report while one runs (or null when not installing). */
|
|
28
|
+
installing: SttInstallProgress | null;
|
|
29
|
+
sidecar: SttSidecarStatus;
|
|
30
|
+
hasOwnerContext: boolean;
|
|
31
|
+
}
|
|
32
|
+
export type SttLocalStatus = {
|
|
33
|
+
state: 'notInstalled';
|
|
34
|
+
} | {
|
|
35
|
+
state: 'installing';
|
|
36
|
+
progress: SttInstallProgress;
|
|
37
|
+
} | {
|
|
38
|
+
state: 'noOwner';
|
|
39
|
+
} | {
|
|
40
|
+
state: 'unhealthy';
|
|
41
|
+
until: number;
|
|
42
|
+
}
|
|
43
|
+
/** `busyRequests` unknown: the process is alive but was too busy to answer /health. */
|
|
44
|
+
| {
|
|
45
|
+
state: 'running';
|
|
46
|
+
busyRequests?: number;
|
|
47
|
+
} | {
|
|
48
|
+
state: 'ready';
|
|
49
|
+
};
|
|
50
|
+
/** @description The one line the local engine's state boils down to; installing and not installed outrank the process state. */
|
|
51
|
+
export declare function getSttLocalStatus(input: SttScreenInput): SttLocalStatus;
|
|
52
|
+
/** @description The content hash `/stt` bakes into every callback: a hand edit of the file makes old keyboards stale. */
|
|
53
|
+
export declare function computeSttRevision(config: SttConfigFile): string;
|
|
54
|
+
export declare const sttCallbackMaxBytes = 64;
|
|
55
|
+
/** Every `/stt` button; registered once with `bot.action`. */
|
|
56
|
+
export declare const sttCallbackRe: RegExp;
|
|
57
|
+
export type SttAction = 'oe' | 'up' | 'dn' | 'us' | 'tm' | 'tb' | 'tp' | 'ky' | 'ra' | 'rd' | 'ad' | 'an' | 'lg' | 'ls' | 'im' | 'is' | 'wm' | 'ws' | 'rt' | 'ec' | 'ei' | 'er' | 'ip' | 'fa' | 'fd' | 'ku' | 'bk' | 'cl' | 'cn';
|
|
58
|
+
export interface ParsedSttCallback {
|
|
59
|
+
action: SttAction;
|
|
60
|
+
args: string[];
|
|
61
|
+
revision: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function buildSttCallback(action: SttAction, args: ReadonlyArray<string | number>, revision: string): string;
|
|
64
|
+
/** @description The parts of a `/stt` callback, or `null` for anything that is not one. */
|
|
65
|
+
export declare function parseSttCallback(data: string): ParsedSttCallback | null;
|
|
66
|
+
export interface SttButton {
|
|
67
|
+
text: string;
|
|
68
|
+
data: string;
|
|
69
|
+
}
|
|
70
|
+
export interface SttScreen {
|
|
71
|
+
text: string;
|
|
72
|
+
rows: SttButton[][];
|
|
73
|
+
}
|
|
74
|
+
export type SttScreenId = {
|
|
75
|
+
id: 'main';
|
|
76
|
+
} | {
|
|
77
|
+
id: 'card';
|
|
78
|
+
engineId: string;
|
|
79
|
+
} | {
|
|
80
|
+
id: 'timeout';
|
|
81
|
+
engineId: string;
|
|
82
|
+
} | {
|
|
83
|
+
id: 'add';
|
|
84
|
+
} | {
|
|
85
|
+
id: 'language';
|
|
86
|
+
} | {
|
|
87
|
+
id: 'idle';
|
|
88
|
+
engineId: string;
|
|
89
|
+
} | {
|
|
90
|
+
id: 'workers';
|
|
91
|
+
engineId: string;
|
|
92
|
+
}
|
|
93
|
+
/** `engineId`: the local engine's card the confirmation was reached from (Cancel returns there); absent: from the add menu. */
|
|
94
|
+
| {
|
|
95
|
+
id: 'enableConfirm';
|
|
96
|
+
engineId?: string;
|
|
97
|
+
} | {
|
|
98
|
+
id: 'removeEngineConfirm';
|
|
99
|
+
engineId: string;
|
|
100
|
+
} | {
|
|
101
|
+
id: 'removeFilesConfirm';
|
|
102
|
+
engineId: string;
|
|
103
|
+
} | {
|
|
104
|
+
id: 'keyChoice';
|
|
105
|
+
};
|
|
106
|
+
/** @description An engine's name as the screens say it: translated for the local one, the host for a custom server. */
|
|
107
|
+
export declare function getSttEngineName(engine: SttEngineSetting, translate: SttTranslate): string;
|
|
108
|
+
/**
|
|
109
|
+
* @description The screen for `screen`, or `null` when it names something that is gone (an engine removed by a
|
|
110
|
+
* hand edit): the caller falls back to the main screen. `notice` is a one-line result of the tap that led here.
|
|
111
|
+
*/
|
|
112
|
+
export declare function buildSttScreen(screen: SttScreenId, input: SttScreenInput, translate: SttTranslate, notice?: string): SttScreen | null;
|
|
113
|
+
/** @description The one-button keyboard under a pasted-input prompt. */
|
|
114
|
+
export declare function buildSttCancelRow(translate: SttTranslate, revision: string): SttButton[][];
|
|
115
|
+
export type SttInputStep = 'url' | 'key';
|
|
116
|
+
export type SttInputDecision = {
|
|
117
|
+
outcome: 'accept';
|
|
118
|
+
value: string;
|
|
119
|
+
} | {
|
|
120
|
+
outcome: 'retry';
|
|
121
|
+
hint: 'invalidUrl' | 'invalidKey';
|
|
122
|
+
}
|
|
123
|
+
/** The message may carry a secret (a login inside the address): it is deleted, then the step re-arms. */
|
|
124
|
+
| {
|
|
125
|
+
outcome: 'retryAndDelete';
|
|
126
|
+
hint: 'urlHasCredentials';
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* @description What to do with the text typed at an armed `/stt` step. A key that cannot be one (spaces,
|
|
130
|
+
* non-Latin-1, too short or long) stays VISIBLE — it is not a secret — and the step re-arms; a plausible key is
|
|
131
|
+
* accepted and the caller deletes the message at once.
|
|
132
|
+
*/
|
|
133
|
+
export declare function decideSttInput(step: SttInputStep, text: string): SttInputDecision;
|
|
134
|
+
/** A one-line result shown on the screen the tap leads to (or as the callback toast). */
|
|
135
|
+
export interface SttNotice {
|
|
136
|
+
code: string;
|
|
137
|
+
vars?: Record<string, string | number>;
|
|
138
|
+
}
|
|
139
|
+
/** Which kind of key paste a tap arms. */
|
|
140
|
+
export type SttKeyTarget = {
|
|
141
|
+
kind: 'engine';
|
|
142
|
+
engineId: string;
|
|
143
|
+
} | {
|
|
144
|
+
kind: 'newKeyed';
|
|
145
|
+
engineKind: 'groq' | 'openai';
|
|
146
|
+
} | {
|
|
147
|
+
kind: 'newUrl';
|
|
148
|
+
url: string;
|
|
149
|
+
};
|
|
150
|
+
export type SttEffect = 'install' | 'attachInstall' | 'removeFiles' | 'resetGuard' | 'close';
|
|
151
|
+
export type SttActionOutcome =
|
|
152
|
+
/** The keyboard is out of date (the file changed, or the engine is gone): say so and re-render the main screen. */
|
|
153
|
+
{
|
|
154
|
+
kind: 'stale';
|
|
155
|
+
} | {
|
|
156
|
+
kind: 'show';
|
|
157
|
+
screen: SttScreenId;
|
|
158
|
+
} | {
|
|
159
|
+
kind: 'save';
|
|
160
|
+
config: SttConfigFile;
|
|
161
|
+
screen: SttScreenId;
|
|
162
|
+
notice?: SttNotice;
|
|
163
|
+
} | {
|
|
164
|
+
kind: 'armKey';
|
|
165
|
+
target: SttKeyTarget;
|
|
166
|
+
} | {
|
|
167
|
+
kind: 'armUrl';
|
|
168
|
+
} | {
|
|
169
|
+
kind: 'cancelInput';
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* `screen`: where the tap leaves the user when the effect does not take them elsewhere — the card a «try again» stays
|
|
173
|
+
* on, the card a refused file removal shows again (default: the main screen).
|
|
174
|
+
*/
|
|
175
|
+
| {
|
|
176
|
+
kind: 'effect';
|
|
177
|
+
effect: SttEffect;
|
|
178
|
+
screen?: SttScreenId;
|
|
179
|
+
};
|
|
180
|
+
export interface SttReducerContext {
|
|
181
|
+
config: SttConfigFile;
|
|
182
|
+
isLocalInstalled: boolean;
|
|
183
|
+
isLocalInstalling: boolean;
|
|
184
|
+
/** The address typed at the custom-URL step, waiting for "does it need a key?". */
|
|
185
|
+
pendingUrl: string | null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* @description What a `/stt` tap does, decided from the callback and the current settings alone — no Telegram, no
|
|
189
|
+
* disk: a screen to show, a config to save, an input to arm, or an effect to run. A revision that is not the
|
|
190
|
+
* file's current one is `stale` for every tap that could change something.
|
|
191
|
+
*/
|
|
192
|
+
export declare function reduceSttAction(parsed: ParsedSttCallback, context: SttReducerContext): SttActionOutcome;
|
|
193
|
+
//# sourceMappingURL=sttScreenPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sttScreenPlan.d.ts","sourceRoot":"","sources":["../../src/stt/sttScreenPlan.ts"],"names":[],"mappings":"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"}
|