charness 3.2.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.
Files changed (313) hide show
  1. package/.env.example +3 -6
  2. package/DEVELOPMENT.md +15 -0
  3. package/README.md +111 -38
  4. package/SETUP.md +121 -16
  5. package/dist/adapters/adapterEventRouting.d.ts +2 -1
  6. package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
  7. package/dist/adapters/adapterEventRouting.js +3 -0
  8. package/dist/adapters/adapterEventRouting.js.map +1 -1
  9. package/dist/adapters/adapterNames.d.ts +13 -0
  10. package/dist/adapters/adapterNames.d.ts.map +1 -1
  11. package/dist/adapters/adapterNames.js +16 -0
  12. package/dist/adapters/adapterNames.js.map +1 -1
  13. package/dist/adapters/backendUnavailableError.d.ts +11 -0
  14. package/dist/adapters/backendUnavailableError.d.ts.map +1 -0
  15. package/dist/adapters/backendUnavailableError.js +19 -0
  16. package/dist/adapters/backendUnavailableError.js.map +1 -0
  17. package/dist/adapters/claudeCliAdapter.d.ts +29 -6
  18. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
  19. package/dist/adapters/claudeCliAdapter.js +70 -16
  20. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  21. package/dist/adapters/claudeJsonStreamAdapter.d.ts +36 -3
  22. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  23. package/dist/adapters/claudeJsonStreamAdapter.js +93 -30
  24. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  25. package/dist/adapters/createAdapter.d.ts +3 -14
  26. package/dist/adapters/createAdapter.d.ts.map +1 -1
  27. package/dist/adapters/createAdapter.js +9 -19
  28. package/dist/adapters/createAdapter.js.map +1 -1
  29. package/dist/adapters/openCodeAdapter.d.ts +140 -12
  30. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  31. package/dist/adapters/openCodeAdapter.js +385 -119
  32. package/dist/adapters/openCodeAdapter.js.map +1 -1
  33. package/dist/apiErrorRetry.d.ts +70 -6
  34. package/dist/apiErrorRetry.d.ts.map +1 -1
  35. package/dist/apiErrorRetry.js +312 -34
  36. package/dist/apiErrorRetry.js.map +1 -1
  37. package/dist/apiRetryKick.d.ts +26 -1
  38. package/dist/apiRetryKick.d.ts.map +1 -1
  39. package/dist/apiRetryKick.js +41 -2
  40. package/dist/apiRetryKick.js.map +1 -1
  41. package/dist/bot.d.ts +2 -1
  42. package/dist/bot.d.ts.map +1 -1
  43. package/dist/bot.js +736 -184
  44. package/dist/bot.js.map +1 -1
  45. package/dist/cli/claudeProfiles.d.ts +1 -1
  46. package/dist/cli/claudeProfiles.js +1 -1
  47. package/dist/cli/hot.d.ts +7 -1
  48. package/dist/cli/hot.d.ts.map +1 -1
  49. package/dist/cli/hot.js +29 -3
  50. package/dist/cli/hot.js.map +1 -1
  51. package/dist/configDirFile.d.ts +73 -0
  52. package/dist/configDirFile.d.ts.map +1 -0
  53. package/dist/configDirFile.js +216 -0
  54. package/dist/configDirFile.js.map +1 -0
  55. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +2 -2
  56. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
  57. package/dist/connectors/telegram/commands/autoContinueLimits.js +4 -4
  58. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
  59. package/dist/connectors/telegram/commands/backendSwitch.d.ts +25 -0
  60. package/dist/connectors/telegram/commands/backendSwitch.d.ts.map +1 -0
  61. package/dist/connectors/telegram/commands/backendSwitch.js +104 -0
  62. package/dist/connectors/telegram/commands/backendSwitch.js.map +1 -0
  63. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  64. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
  65. package/dist/connectors/telegram/commands/callbackMessage.js +24 -0
  66. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
  67. package/dist/connectors/telegram/commands/callbackToast.d.ts +36 -0
  68. package/dist/connectors/telegram/commands/callbackToast.d.ts.map +1 -0
  69. package/dist/connectors/telegram/commands/callbackToast.js +83 -0
  70. package/dist/connectors/telegram/commands/callbackToast.js.map +1 -0
  71. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +18 -0
  72. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
  73. package/dist/connectors/telegram/commands/claudeAccounts.js +220 -66
  74. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
  75. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
  76. package/dist/connectors/telegram/commands/displayModes.js +4 -2
  77. package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
  78. package/dist/connectors/telegram/commands/fallbackChain.d.ts +5 -8
  79. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
  80. package/dist/connectors/telegram/commands/fallbackChain.js +183 -193
  81. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
  82. package/dist/connectors/telegram/commands/limitsBoard.d.ts +40 -0
  83. package/dist/connectors/telegram/commands/limitsBoard.d.ts.map +1 -0
  84. package/dist/connectors/telegram/commands/limitsBoard.js +281 -0
  85. package/dist/connectors/telegram/commands/limitsBoard.js.map +1 -0
  86. package/dist/connectors/telegram/commands/modelPage.d.ts +130 -0
  87. package/dist/connectors/telegram/commands/modelPage.d.ts.map +1 -0
  88. package/dist/connectors/telegram/commands/modelPage.js +120 -0
  89. package/dist/connectors/telegram/commands/modelPage.js.map +1 -0
  90. package/dist/connectors/telegram/commands/modelProviders.d.ts +9 -1
  91. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
  92. package/dist/connectors/telegram/commands/modelProviders.js +203 -111
  93. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
  94. package/dist/connectors/telegram/commands/stt.d.ts +32 -0
  95. package/dist/connectors/telegram/commands/stt.d.ts.map +1 -0
  96. package/dist/connectors/telegram/commands/stt.js +460 -0
  97. package/dist/connectors/telegram/commands/stt.js.map +1 -0
  98. package/dist/effortLevels.d.ts +57 -7
  99. package/dist/effortLevels.d.ts.map +1 -1
  100. package/dist/effortLevels.js +65 -9
  101. package/dist/effortLevels.js.map +1 -1
  102. package/dist/i18n/de.d.ts.map +1 -1
  103. package/dist/i18n/de.js +160 -17
  104. package/dist/i18n/de.js.map +1 -1
  105. package/dist/i18n/en.d.ts.map +1 -1
  106. package/dist/i18n/en.js +160 -17
  107. package/dist/i18n/en.js.map +1 -1
  108. package/dist/i18n/es.d.ts.map +1 -1
  109. package/dist/i18n/es.js +160 -17
  110. package/dist/i18n/es.js.map +1 -1
  111. package/dist/i18n/fr.d.ts.map +1 -1
  112. package/dist/i18n/fr.js +160 -17
  113. package/dist/i18n/fr.js.map +1 -1
  114. package/dist/i18n/hi.d.ts.map +1 -1
  115. package/dist/i18n/hi.js +160 -17
  116. package/dist/i18n/hi.js.map +1 -1
  117. package/dist/i18n/ja.d.ts.map +1 -1
  118. package/dist/i18n/ja.js +160 -17
  119. package/dist/i18n/ja.js.map +1 -1
  120. package/dist/i18n/ka.d.ts.map +1 -1
  121. package/dist/i18n/ka.js +160 -17
  122. package/dist/i18n/ka.js.map +1 -1
  123. package/dist/i18n/pt.d.ts.map +1 -1
  124. package/dist/i18n/pt.js +160 -17
  125. package/dist/i18n/pt.js.map +1 -1
  126. package/dist/i18n/ru.d.ts.map +1 -1
  127. package/dist/i18n/ru.js +160 -17
  128. package/dist/i18n/ru.js.map +1 -1
  129. package/dist/i18n/uk.d.ts.map +1 -1
  130. package/dist/i18n/uk.js +160 -17
  131. package/dist/i18n/uk.js.map +1 -1
  132. package/dist/i18n/uz.d.ts.map +1 -1
  133. package/dist/i18n/uz.js +160 -17
  134. package/dist/i18n/uz.js.map +1 -1
  135. package/dist/i18n/zh.d.ts.map +1 -1
  136. package/dist/i18n/zh.js +160 -17
  137. package/dist/i18n/zh.js.map +1 -1
  138. package/dist/installManager.d.ts +20 -4
  139. package/dist/installManager.d.ts.map +1 -1
  140. package/dist/installManager.js +82 -14
  141. package/dist/installManager.js.map +1 -1
  142. package/dist/instanceSettings.d.ts +52 -0
  143. package/dist/instanceSettings.d.ts.map +1 -0
  144. package/dist/instanceSettings.js +136 -0
  145. package/dist/instanceSettings.js.map +1 -0
  146. package/dist/pinnedStatus.d.ts +7 -1
  147. package/dist/pinnedStatus.d.ts.map +1 -1
  148. package/dist/pinnedStatus.js +1 -1
  149. package/dist/pinnedStatus.js.map +1 -1
  150. package/dist/requests/requestLedger.d.ts +8 -0
  151. package/dist/requests/requestLedger.d.ts.map +1 -1
  152. package/dist/requests/requestLedger.js +19 -1
  153. package/dist/requests/requestLedger.js.map +1 -1
  154. package/dist/scheduler/mcpSurface.js +4 -4
  155. package/dist/scheduler/mcpSurface.js.map +1 -1
  156. package/dist/shutdown.d.ts +14 -0
  157. package/dist/shutdown.d.ts.map +1 -1
  158. package/dist/shutdown.js +16 -0
  159. package/dist/shutdown.js.map +1 -1
  160. package/dist/state.d.ts +54 -2
  161. package/dist/state.d.ts.map +1 -1
  162. package/dist/state.js +62 -1
  163. package/dist/state.js.map +1 -1
  164. package/dist/stt/sttAutoInstall.d.ts +39 -0
  165. package/dist/stt/sttAutoInstall.d.ts.map +1 -0
  166. package/dist/stt/sttAutoInstall.js +158 -0
  167. package/dist/stt/sttAutoInstall.js.map +1 -0
  168. package/dist/stt/sttChildEnv.d.ts +11 -0
  169. package/dist/stt/sttChildEnv.d.ts.map +1 -0
  170. package/dist/stt/sttChildEnv.js +30 -0
  171. package/dist/stt/sttChildEnv.js.map +1 -0
  172. package/dist/stt/sttConfigEdit.d.ts +71 -0
  173. package/dist/stt/sttConfigEdit.d.ts.map +1 -0
  174. package/dist/stt/sttConfigEdit.js +144 -0
  175. package/dist/stt/sttConfigEdit.js.map +1 -0
  176. package/dist/stt/sttInstall.d.ts +147 -0
  177. package/dist/stt/sttInstall.d.ts.map +1 -0
  178. package/dist/stt/sttInstall.js +491 -0
  179. package/dist/stt/sttInstall.js.map +1 -0
  180. package/dist/stt/sttInstallEntry.d.ts +2 -0
  181. package/dist/stt/sttInstallEntry.d.ts.map +1 -0
  182. package/dist/stt/sttInstallEntry.js +31 -0
  183. package/dist/stt/sttInstallEntry.js.map +1 -0
  184. package/dist/stt/sttInstallReporter.d.ts +45 -0
  185. package/dist/stt/sttInstallReporter.d.ts.map +1 -0
  186. package/dist/stt/sttInstallReporter.js +57 -0
  187. package/dist/stt/sttInstallReporter.js.map +1 -0
  188. package/dist/stt/sttRuntime.d.ts +35 -0
  189. package/dist/stt/sttRuntime.d.ts.map +1 -0
  190. package/dist/stt/sttRuntime.js +73 -0
  191. package/dist/stt/sttRuntime.js.map +1 -0
  192. package/dist/stt/sttScreenPlan.d.ts +193 -0
  193. package/dist/stt/sttScreenPlan.d.ts.map +1 -0
  194. package/dist/stt/sttScreenPlan.js +541 -0
  195. package/dist/stt/sttScreenPlan.js.map +1 -0
  196. package/dist/stt/sttSettings.d.ts +201 -0
  197. package/dist/stt/sttSettings.d.ts.map +1 -0
  198. package/dist/stt/sttSettings.js +387 -0
  199. package/dist/stt/sttSettings.js.map +1 -0
  200. package/dist/stt/sttSidecarOwner.d.ts +115 -0
  201. package/dist/stt/sttSidecarOwner.d.ts.map +1 -0
  202. package/dist/stt/sttSidecarOwner.js +475 -0
  203. package/dist/stt/sttSidecarOwner.js.map +1 -0
  204. package/dist/stt/transcribeChain.d.ts +36 -0
  205. package/dist/stt/transcribeChain.d.ts.map +1 -0
  206. package/dist/stt/transcribeChain.js +42 -0
  207. package/dist/stt/transcribeChain.js.map +1 -0
  208. package/dist/types.d.ts +77 -4
  209. package/dist/types.d.ts.map +1 -1
  210. package/dist/utils/adapterSwitchSessionIds.d.ts +32 -0
  211. package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -0
  212. package/dist/utils/adapterSwitchSessionIds.js +44 -0
  213. package/dist/utils/adapterSwitchSessionIds.js.map +1 -0
  214. package/dist/utils/backendSwitchPlan.d.ts +63 -0
  215. package/dist/utils/backendSwitchPlan.d.ts.map +1 -0
  216. package/dist/utils/backendSwitchPlan.js +73 -0
  217. package/dist/utils/backendSwitchPlan.js.map +1 -0
  218. package/dist/utils/claudeAccountPickerPlan.d.ts +12 -1
  219. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
  220. package/dist/utils/claudeAccountPickerPlan.js +20 -1
  221. package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
  222. package/dist/utils/claudeTranscriptContent.d.ts +24 -0
  223. package/dist/utils/claudeTranscriptContent.d.ts.map +1 -0
  224. package/dist/utils/claudeTranscriptContent.js +107 -0
  225. package/dist/utils/claudeTranscriptContent.js.map +1 -0
  226. package/dist/utils/claudeUsage.d.ts +47 -8
  227. package/dist/utils/claudeUsage.d.ts.map +1 -1
  228. package/dist/utils/claudeUsage.js +76 -14
  229. package/dist/utils/claudeUsage.js.map +1 -1
  230. package/dist/utils/claudeUsageRefresher.d.ts +8 -1
  231. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
  232. package/dist/utils/claudeUsageRefresher.js +9 -4
  233. package/dist/utils/claudeUsageRefresher.js.map +1 -1
  234. package/dist/utils/effortPickerPlan.d.ts +54 -0
  235. package/dist/utils/effortPickerPlan.d.ts.map +1 -0
  236. package/dist/utils/effortPickerPlan.js +56 -0
  237. package/dist/utils/effortPickerPlan.js.map +1 -0
  238. package/dist/utils/ensureSessionPlan.d.ts +20 -4
  239. package/dist/utils/ensureSessionPlan.d.ts.map +1 -1
  240. package/dist/utils/ensureSessionPlan.js +17 -4
  241. package/dist/utils/ensureSessionPlan.js.map +1 -1
  242. package/dist/utils/fallbackBridge.d.ts +6 -2
  243. package/dist/utils/fallbackBridge.d.ts.map +1 -1
  244. package/dist/utils/fallbackBridge.js +10 -3
  245. package/dist/utils/fallbackBridge.js.map +1 -1
  246. package/dist/utils/fallbackChain.d.ts +36 -0
  247. package/dist/utils/fallbackChain.d.ts.map +1 -1
  248. package/dist/utils/fallbackChain.js +65 -1
  249. package/dist/utils/fallbackChain.js.map +1 -1
  250. package/dist/utils/fallbackSwitchNotice.d.ts +41 -0
  251. package/dist/utils/fallbackSwitchNotice.d.ts.map +1 -0
  252. package/dist/utils/fallbackSwitchNotice.js +75 -0
  253. package/dist/utils/fallbackSwitchNotice.js.map +1 -0
  254. package/dist/utils/fileSendService.d.ts +33 -10
  255. package/dist/utils/fileSendService.d.ts.map +1 -1
  256. package/dist/utils/fileSendService.js +78 -27
  257. package/dist/utils/fileSendService.js.map +1 -1
  258. package/dist/utils/jsonStreamHost.d.ts +39 -0
  259. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  260. package/dist/utils/jsonStreamHost.js +60 -1
  261. package/dist/utils/jsonStreamHost.js.map +1 -1
  262. package/dist/utils/limitEpisodeRecovery.d.ts +16 -2
  263. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -1
  264. package/dist/utils/limitEpisodeRecovery.js +44 -3
  265. package/dist/utils/limitEpisodeRecovery.js.map +1 -1
  266. package/dist/utils/limitSettings.d.ts +25 -0
  267. package/dist/utils/limitSettings.d.ts.map +1 -0
  268. package/dist/utils/limitSettings.js +31 -0
  269. package/dist/utils/limitSettings.js.map +1 -0
  270. package/dist/utils/limitsBoardPlan.d.ts +52 -0
  271. package/dist/utils/limitsBoardPlan.d.ts.map +1 -0
  272. package/dist/utils/limitsBoardPlan.js +93 -0
  273. package/dist/utils/limitsBoardPlan.js.map +1 -0
  274. package/dist/utils/openCodeUsage.d.ts +93 -0
  275. package/dist/utils/openCodeUsage.d.ts.map +1 -0
  276. package/dist/utils/openCodeUsage.js +248 -0
  277. package/dist/utils/openCodeUsage.js.map +1 -0
  278. package/dist/utils/operatorSwitchPlan.d.ts +61 -0
  279. package/dist/utils/operatorSwitchPlan.d.ts.map +1 -0
  280. package/dist/utils/operatorSwitchPlan.js +32 -0
  281. package/dist/utils/operatorSwitchPlan.js.map +1 -0
  282. package/dist/utils/promptDelivery.d.ts +40 -0
  283. package/dist/utils/promptDelivery.d.ts.map +1 -1
  284. package/dist/utils/promptDelivery.js +31 -0
  285. package/dist/utils/promptDelivery.js.map +1 -1
  286. package/dist/utils/recvPreviewRedaction.d.ts +14 -4
  287. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
  288. package/dist/utils/recvPreviewRedaction.js +19 -7
  289. package/dist/utils/recvPreviewRedaction.js.map +1 -1
  290. package/dist/utils/startupReadiness.d.ts +3 -3
  291. package/dist/utils/startupReadiness.d.ts.map +1 -1
  292. package/dist/utils/startupReadiness.js +2 -2
  293. package/dist/utils/startupReadiness.js.map +1 -1
  294. package/dist/utils/threadStatusReport.d.ts +3 -1
  295. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  296. package/dist/utils/threadStatusReport.js +4 -3
  297. package/dist/utils/threadStatusReport.js.map +1 -1
  298. package/dist/utils/timezone.d.ts +23 -0
  299. package/dist/utils/timezone.d.ts.map +1 -1
  300. package/dist/utils/timezone.js +38 -0
  301. package/dist/utils/timezone.js.map +1 -1
  302. package/dist/utils/transcribeAudio.d.ts +25 -12
  303. package/dist/utils/transcribeAudio.d.ts.map +1 -1
  304. package/dist/utils/transcribeAudio.js +39 -21
  305. package/dist/utils/transcribeAudio.js.map +1 -1
  306. package/dist/utils/usageRefreshBudget.d.ts +9 -0
  307. package/dist/utils/usageRefreshBudget.d.ts.map +1 -0
  308. package/dist/utils/usageRefreshBudget.js +27 -0
  309. package/dist/utils/usageRefreshBudget.js.map +1 -0
  310. package/examples/.env.example +7 -3
  311. package/examples/docker-compose.yml +9 -7
  312. package/package.json +2 -1
  313. package/stt/gigaam_sidecar.py +800 -0
@@ -0,0 +1,541 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sttCallbackRe = exports.sttCallbackMaxBytes = void 0;
37
+ exports.formatSttElapsed = formatSttElapsed;
38
+ exports.getSttInstallPhaseLine = getSttInstallPhaseLine;
39
+ exports.buildSttInstallProgressText = buildSttInstallProgressText;
40
+ exports.formatSttInstallLogLine = formatSttInstallLogLine;
41
+ exports.getSttLocalStatus = getSttLocalStatus;
42
+ exports.computeSttRevision = computeSttRevision;
43
+ exports.buildSttCallback = buildSttCallback;
44
+ exports.parseSttCallback = parseSttCallback;
45
+ exports.getSttEngineName = getSttEngineName;
46
+ exports.buildSttScreen = buildSttScreen;
47
+ exports.buildSttCancelRow = buildSttCancelRow;
48
+ exports.decideSttInput = decideSttInput;
49
+ exports.reduceSttAction = reduceSttAction;
50
+ const crypto = __importStar(require("crypto"));
51
+ const localClock_1 = require("../utils/localClock");
52
+ const openCodeAuthLogin_1 = require("../utils/openCodeAuthLogin");
53
+ const sttConfigEdit_1 = require("./sttConfigEdit");
54
+ const sttSettings_1 = require("./sttSettings");
55
+ const secondsPerMinute = 60;
56
+ /** The install log's last lines shown under a failure; the rest is in `install.log`. */
57
+ const failureTailLineCount = 5;
58
+ const failureTailLineMaxLength = 160;
59
+ /** @description `1:05` — minutes and zero-padded seconds. */
60
+ function formatSttElapsed(elapsedSeconds) {
61
+ const wholeSeconds = Math.max(0, Math.floor(elapsedSeconds));
62
+ const minutes = Math.floor(wholeSeconds / secondsPerMinute);
63
+ return `${minutes}:${(wholeSeconds % secondsPerMinute).toString().padStart(2, '0')}`;
64
+ }
65
+ /** @description The phase line of a RUNNING install (`downloading the model 120/216 MB…`). */
66
+ function getSttInstallPhaseLine(progress, translate) {
67
+ switch (progress.phase) {
68
+ case 'downloadingModel': return translate('stt.install.downloadingModel', { progress: progress.detail });
69
+ case 'creatingEnvironment': return translate('stt.install.creatingEnvironment');
70
+ case 'installingPackages': return translate('stt.install.installingPackages');
71
+ default: return translate('stt.install.checking');
72
+ }
73
+ }
74
+ /**
75
+ * @description The text of the install message for one progress report: while it runs, a header with the elapsed
76
+ * time over the phase line (`downloading the model 120/216 MB…`); at the end only the outcome — ready, or the
77
+ * error with the last log lines.
78
+ */
79
+ function buildSttInstallProgressText(progress, elapsedSeconds, translate) {
80
+ switch (progress.phase) {
81
+ case 'done':
82
+ return translate('stt.install.done');
83
+ case 'failed': {
84
+ const tail = (progress.logTail ?? []).slice(-failureTailLineCount).map((line) => ` ${line.slice(0, failureTailLineMaxLength)}`);
85
+ return [translate('stt.install.failed', { error: progress.error ?? '' }), ...tail].join('\n');
86
+ }
87
+ default:
88
+ return `${translate('stt.install.header', { elapsed: formatSttElapsed(elapsedSeconds) })}\n${getSttInstallPhaseLine(progress, translate)}`;
89
+ }
90
+ }
91
+ /** @description One log line per phase change of an install nobody watches in a chat (`[STT] install: …`). */
92
+ function formatSttInstallLogLine(progress) {
93
+ const base = `[STT] install: ${progress.phase}`;
94
+ if (progress.phase === 'failed')
95
+ return `${base} — ${progress.error ?? 'unknown error'}`;
96
+ return progress.detail ? `${base} ${progress.detail}` : base;
97
+ }
98
+ /** @description The one line the local engine's state boils down to; installing and not installed outrank the process state. */
99
+ function getSttLocalStatus(input) {
100
+ if (input.installing)
101
+ return { state: 'installing', progress: input.installing };
102
+ if (!input.isLocalInstalled)
103
+ return { state: 'notInstalled' };
104
+ if (!input.hasOwnerContext)
105
+ return { state: 'noOwner' };
106
+ if (input.sidecar.state === 'unhealthy')
107
+ return { state: 'unhealthy', until: input.sidecar.unhealthyUntil };
108
+ if (input.sidecar.state === 'running')
109
+ return { state: 'running', busyRequests: input.sidecar.busyRequests };
110
+ return { state: 'ready' };
111
+ }
112
+ /** @description The content hash `/stt` bakes into every callback: a hand edit of the file makes old keyboards stale. */
113
+ function computeSttRevision(config) {
114
+ return crypto.createHash('sha256').update(JSON.stringify(config)).digest('hex').slice(0, revisionLength);
115
+ }
116
+ // ── callback data: stt_<action>[_<arg>…]_<revision>, at most 64 bytes ──
117
+ const callbackPrefix = 'stt';
118
+ const callbackSeparator = '_';
119
+ const revisionLength = 6;
120
+ exports.sttCallbackMaxBytes = 64;
121
+ /** Every `/stt` button; registered once with `bot.action`. */
122
+ exports.sttCallbackRe = /^stt_[a-z]{2}(?:_[A-Za-z0-9]+)*_[0-9a-f]{6}$/;
123
+ function buildSttCallback(action, args, revision) {
124
+ return [callbackPrefix, action, ...args.map((arg) => arg.toString()), revision].join(callbackSeparator);
125
+ }
126
+ /** @description The parts of a `/stt` callback, or `null` for anything that is not one. */
127
+ function parseSttCallback(data) {
128
+ if (!exports.sttCallbackRe.test(data))
129
+ return null;
130
+ const parts = data.split(callbackSeparator);
131
+ return { action: parts[1], args: parts.slice(2, -1), revision: parts[parts.length - 1] };
132
+ }
133
+ /** Navigation and cancel taps never change anything, so an old keyboard may still use them. */
134
+ const revisionFreeActions = new Set(['bk', 'cl', 'cn']);
135
+ const percentSign = '%';
136
+ /** @description An engine's name as the screens say it: translated for the local one, the host for a custom server. */
137
+ function getSttEngineName(engine, translate) {
138
+ switch (engine.kind) {
139
+ case 'gigaam': return translate('stt.engine.gigaam');
140
+ case 'groq': return 'Groq';
141
+ case 'openai': return 'OpenAI';
142
+ case 'url':
143
+ try {
144
+ return new URL(engine.url ?? '').host;
145
+ }
146
+ catch {
147
+ return translate('stt.engine.url');
148
+ }
149
+ }
150
+ }
151
+ /** The address as a screen shows it: without a query string or fragment, which may carry a token. */
152
+ function formatUrlForDisplay(url) {
153
+ try {
154
+ const parsed = new URL(url);
155
+ return `${parsed.origin}${parsed.pathname}`;
156
+ }
157
+ catch {
158
+ return '';
159
+ }
160
+ }
161
+ function formatTimeoutSummary(timeout) {
162
+ return `${timeout.baseSeconds}s+${timeout.percentOfDuration}${percentSign}`;
163
+ }
164
+ function getEngineProblem(input, engine) {
165
+ if (engine.isDisabled)
166
+ return 'disabled';
167
+ return input.resolved.unavailable.find((skipped) => skipped.id === engine.id)?.reason ?? null;
168
+ }
169
+ function withNotice(notice, text) {
170
+ return notice ? `${notice}\n\n${text}` : text;
171
+ }
172
+ function formatIdleMinutes(minutes, translate) {
173
+ return minutes === 0 ? translate('stt.idle.never') : translate('stt.idle.minutes', { count: minutes });
174
+ }
175
+ /** The short word the local engine's state boils down to, as it rides on its row label (`stt.engineState.<word>`). */
176
+ function getLocalStateWord(local) {
177
+ switch (local.state) {
178
+ case 'running': return 'running';
179
+ case 'ready': return 'stopped';
180
+ case 'installing': return 'installing';
181
+ case 'unhealthy': return 'paused';
182
+ case 'noOwner': return 'noOwner';
183
+ case 'notInstalled': return 'notInstalled';
184
+ }
185
+ }
186
+ /** The full status line of the local engine's card (`Status: ready · running`). */
187
+ function formatLocalStatusLine(local, translate) {
188
+ switch (local.state) {
189
+ case 'notInstalled': return translate('stt.card.local.status.notInstalled');
190
+ case 'installing': return translate('stt.card.local.status.installing', { phase: getSttInstallPhaseLine(local.progress, translate) });
191
+ case 'noOwner': return translate('stt.card.local.status.noOwner');
192
+ case 'unhealthy': return translate('stt.card.local.status.paused', { until: (0, localClock_1.formatLocalClock)(local.until) });
193
+ case 'running':
194
+ if (local.busyRequests === undefined)
195
+ return translate('stt.card.local.status.runningSlow');
196
+ return local.busyRequests > 0 ? translate('stt.card.local.status.runningBusy', { count: local.busyRequests }) : translate('stt.card.local.status.running');
197
+ case 'ready': return translate('stt.card.local.status.stopped');
198
+ }
199
+ }
200
+ /**
201
+ * The main screen holds only what applies to recognition as a whole: the engine list, Add engine, Language, Close.
202
+ * What belongs to one engine — the local one's status, idle exit, workers, files — is on that engine's card; the
203
+ * local engine's short state only rides on its row label.
204
+ */
205
+ function buildMainScreen(input, translate, notice) {
206
+ const { resolved } = input;
207
+ const { settings } = resolved;
208
+ const revision = computeSttRevision(settings);
209
+ const lines = [translate('stt.screen.title')];
210
+ if (resolved.source === 'missing')
211
+ lines.push(translate('stt.screen.sourceMissing', { path: input.configPath }));
212
+ else if (resolved.source === 'ok')
213
+ lines.push(translate('stt.screen.sourceFile', { path: input.configPath }));
214
+ else {
215
+ const firstError = resolved.errors[0] ?? '';
216
+ lines.push(translate(resolved.source === 'lastGood' ? 'stt.screen.sourceLastGood' : 'stt.screen.sourceInvalid', { path: input.configPath, error: firstError }));
217
+ }
218
+ lines.push(translate('stt.screen.language', { language: settings.language ?? translate('stt.language.autoName') }));
219
+ lines.push(settings.engines.length === 0 ? translate('stt.screen.chainEmpty') : translate('stt.screen.chainHeading'));
220
+ const localStateWord = getLocalStateWord(getSttLocalStatus(input));
221
+ const rows = settings.engines.map((engine, index) => {
222
+ const mark = getEngineProblem(input, engine) === null ? '✓' : '✗';
223
+ const name = getSttEngineName(engine, translate);
224
+ const parts = [`${index + 1}. ${name}`];
225
+ if (engine.kind === 'gigaam')
226
+ parts.push(translate(`stt.engineState.${localStateWord}`));
227
+ parts.push(formatTimeoutSummary(engine.timeout ?? sttSettings_1.defaultSttTimeout), mark);
228
+ return [{ text: parts.join(' · '), data: buildSttCallback('oe', [engine.id], revision) }];
229
+ });
230
+ rows.push([{ text: translate('stt.btn.addEngine'), data: buildSttCallback('ad', [], revision) }]);
231
+ rows.push([{ text: translate('stt.btn.language', { language: settings.language ?? translate('stt.language.autoShort') }), data: buildSttCallback('lg', [], revision) }]);
232
+ rows.push([{ text: translate('stt.btn.close'), data: buildSttCallback('cl', [], revision) }]);
233
+ return { text: withNotice(notice, lines.join('\n')), rows };
234
+ }
235
+ /** The rows only the local engine's card has: idle exit, workers, and whichever of try again / install / progress its state asks for. */
236
+ function buildLocalCardRows(input, engine, translate, revision) {
237
+ const { gigaam } = input.resolved.settings;
238
+ const local = getSttLocalStatus(input);
239
+ const rows = [
240
+ [{ text: translate('stt.btn.idle', { value: formatIdleMinutes(gigaam.idleMinutes, translate) }), data: buildSttCallback('im', [engine.id], revision) }],
241
+ [{ text: translate('stt.btn.workers', { count: gigaam.workers }), data: buildSttCallback('wm', [engine.id], revision) }],
242
+ ];
243
+ if (local.state === 'unhealthy')
244
+ rows.push([{ text: translate('stt.btn.tryAgain'), data: buildSttCallback('rt', [engine.id], revision) }]);
245
+ if (local.state === 'installing')
246
+ rows.push([{ text: translate('stt.btn.showProgress'), data: buildSttCallback('ip', [engine.id], revision) }]);
247
+ else if (!input.isLocalInstalled)
248
+ rows.push([{ text: translate('stt.btn.install'), data: buildSttCallback('ec', [engine.id], revision) }]);
249
+ return rows;
250
+ }
251
+ /**
252
+ * One card for every engine: the common controls (order, use / don't use, timeout, remove) plus what the kind adds —
253
+ * a key (Groq, OpenAI, a custom server), or the local engine's status, memory, idle exit, workers and files.
254
+ */
255
+ function buildEngineCard(input, engineId, translate, notice) {
256
+ const { settings } = input.resolved;
257
+ const index = settings.engines.findIndex((engine) => engine.id === engineId);
258
+ const engine = settings.engines[index];
259
+ if (!engine)
260
+ return null;
261
+ const revision = computeSttRevision(settings);
262
+ const timeout = engine.timeout ?? sttSettings_1.defaultSttTimeout;
263
+ const problem = getEngineProblem(input, engine);
264
+ const isLocal = engine.kind === 'gigaam';
265
+ const lines = [];
266
+ if (isLocal) {
267
+ lines.push(translate('stt.card.local.title'), formatLocalStatusLine(getSttLocalStatus(input), translate));
268
+ // The other reasons are the status line's; these two are about the settings.
269
+ if (problem === 'disabled' || problem === 'languageNotSupported')
270
+ lines.push(translate(`stt.card.problem.${problem}`));
271
+ lines.push(translate('stt.card.local.ram'));
272
+ }
273
+ else {
274
+ lines.push(translate('stt.card.title', { n: index + 1, total: settings.engines.length, name: getSttEngineName(engine, translate) }));
275
+ lines.push(problem === null ? translate('stt.card.ready') : translate(`stt.card.problem.${problem}`));
276
+ }
277
+ lines.push(translate('stt.card.timeout', { base: timeout.baseSeconds, percent: timeout.percentOfDuration }));
278
+ if (engine.kind === 'url')
279
+ lines.push(translate('stt.card.url', { url: formatUrlForDisplay(engine.url ?? '') }));
280
+ if (!isLocal)
281
+ lines.push(translate(engine.apiKey ? 'stt.card.keySet' : 'stt.card.keyMissing'));
282
+ const commonRow = [];
283
+ if (index > 0)
284
+ commonRow.push({ text: translate('limits.btnUp'), data: buildSttCallback('up', [engine.id], revision) });
285
+ if (index < settings.engines.length - 1)
286
+ commonRow.push({ text: translate('limits.btnDown'), data: buildSttCallback('dn', [engine.id], revision) });
287
+ commonRow.push({ text: translate(engine.isDisabled ? 'limits.btnUse' : 'limits.btnDontUse'), data: buildSttCallback('us', [engine.id], revision) });
288
+ const rows = [
289
+ commonRow,
290
+ [{ text: translate('stt.btn.timeoutValue', { value: formatTimeoutSummary(timeout) }), data: buildSttCallback('tm', [engine.id], revision) }],
291
+ ];
292
+ if (isLocal) {
293
+ rows.push(...buildLocalCardRows(input, engine, translate, revision));
294
+ const removal = [{ text: translate('stt.btn.removeFromList'), data: buildSttCallback('ra', [engine.id], revision) }];
295
+ if (input.isLocalInstalled && !input.installing)
296
+ removal.push({ text: translate('stt.btn.removeLocal'), data: buildSttCallback('fa', [engine.id], revision) });
297
+ rows.push(removal);
298
+ }
299
+ else {
300
+ rows.push([{ text: translate(engine.apiKey ? 'stt.btn.changeKey' : 'stt.btn.addKey'), data: buildSttCallback('ky', [engine.id], revision) }]);
301
+ rows.push([{ text: translate('account.removeButton'), data: buildSttCallback('ra', [engine.id], revision) }]);
302
+ }
303
+ rows.push([{ text: translate('fallback.backButton'), data: buildSttCallback('bk', [], revision) }]);
304
+ return { text: withNotice(notice, lines.join('\n')), rows };
305
+ }
306
+ function buildPresetRow(values, current, action, engineId, revision, format) {
307
+ return values.map((value) => ({
308
+ text: `${format(value)}${value === current ? ' ✓' : ''}`,
309
+ data: buildSttCallback(action, engineId === null ? [value] : [engineId, value], revision),
310
+ }));
311
+ }
312
+ function buildBackRow(translate, revision, engineId) {
313
+ return [{ text: translate('fallback.backButton'), data: engineId ? buildSttCallback('oe', [engineId], revision) : buildSttCallback('bk', [], revision) }];
314
+ }
315
+ /**
316
+ * @description The screen for `screen`, or `null` when it names something that is gone (an engine removed by a
317
+ * hand edit): the caller falls back to the main screen. `notice` is a one-line result of the tap that led here.
318
+ */
319
+ function buildSttScreen(screen, input, translate, notice) {
320
+ const { settings } = input.resolved;
321
+ const revision = computeSttRevision(settings);
322
+ switch (screen.id) {
323
+ case 'main':
324
+ return buildMainScreen(input, translate, notice);
325
+ case 'card':
326
+ return buildEngineCard(input, screen.engineId, translate, notice);
327
+ case 'timeout': {
328
+ const engine = settings.engines.find((candidate) => candidate.id === screen.engineId);
329
+ if (!engine)
330
+ return null;
331
+ const timeout = engine.timeout ?? sttSettings_1.defaultSttTimeout;
332
+ return {
333
+ text: withNotice(notice, translate('stt.timeout.title', { name: getSttEngineName(engine, translate) })),
334
+ rows: [
335
+ buildPresetRow(sttConfigEdit_1.sttTimeoutBasePresets, timeout.baseSeconds, 'tb', engine.id, revision, (value) => translate('stt.timeout.seconds', { count: value })),
336
+ buildPresetRow(sttConfigEdit_1.sttTimeoutPercentPresets, timeout.percentOfDuration, 'tp', engine.id, revision, (value) => `${value} ${percentSign}`),
337
+ buildBackRow(translate, revision, engine.id),
338
+ ],
339
+ };
340
+ }
341
+ case 'add': {
342
+ const rows = [
343
+ [{ text: 'Groq', data: buildSttCallback('an', ['gq'], revision) }, { text: 'OpenAI', data: buildSttCallback('an', ['oa'], revision) }],
344
+ [{ text: translate('stt.btn.customUrl'), data: buildSttCallback('an', ['ur'], revision) }],
345
+ ];
346
+ // Always offered while it is not in the list: installed it joins at once, else the install is offered first.
347
+ if (!settings.engines.some((engine) => engine.kind === 'gigaam')) {
348
+ rows.push([{ text: translate('stt.engine.gigaam'), data: buildSttCallback('an', ['gg'], revision) }]);
349
+ }
350
+ rows.push(buildBackRow(translate, revision));
351
+ return { text: withNotice(notice, translate('stt.add.title')), rows };
352
+ }
353
+ case 'language': {
354
+ const current = settings.language;
355
+ const rows = [
356
+ [{ text: `${translate('stt.language.auto')}${current === null ? ' ✓' : ''}`, data: buildSttCallback('ls', ['auto'], revision) }],
357
+ sttConfigEdit_1.sttLanguagePresets.map((code) => ({ text: `${code}${code === current ? ' ✓' : ''}`, data: buildSttCallback('ls', [code], revision) })),
358
+ buildBackRow(translate, revision),
359
+ ];
360
+ return { text: withNotice(notice, translate('stt.language.title')), rows };
361
+ }
362
+ case 'idle':
363
+ return {
364
+ text: withNotice(notice, translate('stt.idle.title')),
365
+ rows: [
366
+ buildPresetRow(sttConfigEdit_1.sttIdleMinutesPresets, settings.gigaam.idleMinutes, 'is', screen.engineId, revision, (value) => formatIdleMinutes(value, translate)),
367
+ buildBackRow(translate, revision, screen.engineId),
368
+ ],
369
+ };
370
+ case 'workers':
371
+ return {
372
+ text: withNotice(notice, translate('stt.workers.title')),
373
+ rows: [
374
+ buildPresetRow(sttSettings_1.sttGigaamWorkerChoices, settings.gigaam.workers, 'ws', screen.engineId, revision, (value) => value.toString()),
375
+ buildBackRow(translate, revision, screen.engineId),
376
+ ],
377
+ };
378
+ case 'enableConfirm':
379
+ return {
380
+ text: withNotice(notice, translate('stt.enable.confirm', { idle: formatIdleMinutes(settings.gigaam.idleMinutes, translate) })),
381
+ rows: [[
382
+ { text: translate('stt.btn.install'), data: buildSttCallback('ei', [], revision) },
383
+ { text: translate('stt.btn.cancel'), data: screen.engineId ? buildSttCallback('oe', [screen.engineId], revision) : buildSttCallback('bk', [], revision) },
384
+ ]],
385
+ };
386
+ case 'removeEngineConfirm': {
387
+ const engine = settings.engines.find((candidate) => candidate.id === screen.engineId);
388
+ if (!engine)
389
+ return null;
390
+ return {
391
+ text: withNotice(notice, engine.kind === 'gigaam' ? translate('stt.removeEngine.confirmLocal') : translate('stt.removeEngine.confirm', { name: getSttEngineName(engine, translate) })),
392
+ rows: [[
393
+ { text: translate('stt.btn.removeConfirm'), data: buildSttCallback('rd', [engine.id], revision) },
394
+ { text: translate('stt.btn.cancel'), data: buildSttCallback('oe', [engine.id], revision) },
395
+ ]],
396
+ };
397
+ }
398
+ case 'removeFilesConfirm':
399
+ return {
400
+ text: withNotice(notice, translate('stt.removeFiles.confirm')),
401
+ rows: [[
402
+ { text: translate('stt.btn.removeConfirm'), data: buildSttCallback('fd', [screen.engineId], revision) },
403
+ { text: translate('stt.btn.cancel'), data: buildSttCallback('oe', [screen.engineId], revision) },
404
+ ]],
405
+ };
406
+ case 'keyChoice':
407
+ return {
408
+ text: withNotice(notice, translate('stt.prompt.needsKey')),
409
+ rows: [[
410
+ { text: translate('stt.btn.keyYes'), data: buildSttCallback('ku', ['y'], revision) },
411
+ { text: translate('stt.btn.keyNo'), data: buildSttCallback('ku', ['n'], revision) },
412
+ ], [{ text: translate('stt.btn.cancel'), data: buildSttCallback('cn', [], revision) }]],
413
+ };
414
+ }
415
+ }
416
+ /** @description The one-button keyboard under a pasted-input prompt. */
417
+ function buildSttCancelRow(translate, revision) {
418
+ return [[{ text: translate('stt.btn.cancel'), data: buildSttCallback('cn', [], revision) }]];
419
+ }
420
+ /**
421
+ * @description What to do with the text typed at an armed `/stt` step. A key that cannot be one (spaces,
422
+ * non-Latin-1, too short or long) stays VISIBLE — it is not a secret — and the step re-arms; a plausible key is
423
+ * accepted and the caller deletes the message at once.
424
+ */
425
+ function decideSttInput(step, text) {
426
+ if (step === 'key') {
427
+ const key = text.trim();
428
+ return (0, openCodeAuthLogin_1.checkIsPlausibleProviderApiKey)(key) ? { outcome: 'accept', value: key } : { outcome: 'retry', hint: 'invalidKey' };
429
+ }
430
+ const normalised = (0, sttConfigEdit_1.normaliseSttUrl)(text);
431
+ if (normalised.ok)
432
+ return { outcome: 'accept', value: normalised.url };
433
+ return normalised.reason === 'credentials' ? { outcome: 'retryAndDelete', hint: 'urlHasCredentials' } : { outcome: 'retry', hint: 'invalidUrl' };
434
+ }
435
+ function fromEdit(result, screen, notice) {
436
+ return result.ok ? { kind: 'save', config: result.config, screen, notice } : { kind: 'stale' };
437
+ }
438
+ function parseNumberArg(value) {
439
+ const parsed = Number(value);
440
+ return value !== undefined && Number.isFinite(parsed) ? parsed : null;
441
+ }
442
+ /**
443
+ * @description «GigaAM (local)» in the add menu: already installed → it joins the list first and its card opens;
444
+ * an install running → attach to its progress; not installed → the install confirmation (the engine joins the list,
445
+ * and its card opens, when the install ends).
446
+ */
447
+ function addLocalEngine(config, context) {
448
+ if (config.engines.some((engine) => engine.kind === 'gigaam'))
449
+ return { kind: 'stale' };
450
+ if (context.isLocalInstalling)
451
+ return { kind: 'effect', effect: 'attachInstall' };
452
+ if (!context.isLocalInstalled)
453
+ return { kind: 'show', screen: { id: 'enableConfirm' } };
454
+ const added = (0, sttConfigEdit_1.addSttEngine)(config, { kind: 'gigaam' });
455
+ if (!added.ok || added.engineId === undefined)
456
+ return { kind: 'stale' };
457
+ return { kind: 'save', config: added.config, screen: { id: 'card', engineId: added.engineId }, notice: { code: 'stt.notice.localAdded' } };
458
+ }
459
+ /**
460
+ * @description What a `/stt` tap does, decided from the callback and the current settings alone — no Telegram, no
461
+ * disk: a screen to show, a config to save, an input to arm, or an effect to run. A revision that is not the
462
+ * file's current one is `stale` for every tap that could change something.
463
+ */
464
+ function reduceSttAction(parsed, context) {
465
+ const { config } = context;
466
+ if (!revisionFreeActions.has(parsed.action) && parsed.revision !== computeSttRevision(config))
467
+ return { kind: 'stale' };
468
+ const [first, second] = parsed.args;
469
+ const engine = config.engines.find((candidate) => candidate.id === first);
470
+ const needsEngine = (run) => (engine ? run(engine) : { kind: 'stale' });
471
+ const needsLocalEngine = (run) => (engine?.kind === 'gigaam' ? run(engine) : { kind: 'stale' });
472
+ const canTouchFiles = context.isLocalInstalled && !context.isLocalInstalling;
473
+ switch (parsed.action) {
474
+ case 'bk': return { kind: 'show', screen: { id: 'main' } };
475
+ case 'cl': return { kind: 'effect', effect: 'close' };
476
+ case 'cn': return { kind: 'cancelInput' };
477
+ case 'oe': return needsEngine((known) => ({ kind: 'show', screen: { id: 'card', engineId: known.id } }));
478
+ case 'up': return needsEngine((known) => fromEdit((0, sttConfigEdit_1.moveSttEngine)(config, known.id, -1), { id: 'card', engineId: known.id }));
479
+ case 'dn': return needsEngine((known) => fromEdit((0, sttConfigEdit_1.moveSttEngine)(config, known.id, 1), { id: 'card', engineId: known.id }));
480
+ case 'us': return needsEngine((known) => fromEdit((0, sttConfigEdit_1.toggleSttEngineDisabled)(config, known.id), { id: 'card', engineId: known.id }));
481
+ case 'tm': return needsEngine((known) => ({ kind: 'show', screen: { id: 'timeout', engineId: known.id } }));
482
+ case 'tb':
483
+ case 'tp': {
484
+ const value = parseNumberArg(second);
485
+ if (!engine || value === null)
486
+ return { kind: 'stale' };
487
+ const change = parsed.action === 'tb' ? { baseSeconds: value } : { percentOfDuration: value };
488
+ return fromEdit((0, sttConfigEdit_1.setSttEngineTimeout)(config, engine.id, change, sttSettings_1.defaultSttTimeout), { id: 'timeout', engineId: engine.id });
489
+ }
490
+ case 'ky': return needsEngine((known) => (known.kind === 'gigaam' ? { kind: 'stale' } : { kind: 'armKey', target: { kind: 'engine', engineId: known.id } }));
491
+ case 'ra': return needsEngine((known) => ({ kind: 'show', screen: { id: 'removeEngineConfirm', engineId: known.id } }));
492
+ case 'rd': return needsEngine((known) => fromEdit((0, sttConfigEdit_1.removeSttEngine)(config, known.id), { id: 'main' }, { code: 'stt.notice.removed' }));
493
+ case 'ad': return { kind: 'show', screen: { id: 'add' } };
494
+ case 'an':
495
+ if (first === 'gq' || first === 'oa')
496
+ return { kind: 'armKey', target: { kind: 'newKeyed', engineKind: first === 'gq' ? 'groq' : 'openai' } };
497
+ if (first === 'ur')
498
+ return { kind: 'armUrl' };
499
+ if (first === 'gg')
500
+ return addLocalEngine(config, context);
501
+ return { kind: 'stale' };
502
+ case 'ku':
503
+ if (context.pendingUrl === null)
504
+ return { kind: 'stale' };
505
+ if (first === 'y')
506
+ return { kind: 'armKey', target: { kind: 'newUrl', url: context.pendingUrl } };
507
+ if (first === 'n')
508
+ return fromEdit((0, sttConfigEdit_1.addSttEngine)(config, { kind: 'url', url: context.pendingUrl }), { id: 'main' }, { code: 'stt.notice.urlAdded' });
509
+ return { kind: 'stale' };
510
+ case 'lg': return { kind: 'show', screen: { id: 'language' } };
511
+ case 'ls': {
512
+ if (first === 'auto')
513
+ return fromEdit((0, sttConfigEdit_1.setSttLanguage)(config, null), { id: 'main' });
514
+ if (first !== undefined && sttConfigEdit_1.sttLanguagePresets.includes(first))
515
+ return fromEdit((0, sttConfigEdit_1.setSttLanguage)(config, first), { id: 'main' });
516
+ return { kind: 'stale' };
517
+ }
518
+ case 'im': return needsLocalEngine((known) => ({ kind: 'show', screen: { id: 'idle', engineId: known.id } }));
519
+ case 'is': {
520
+ const minutes = parseNumberArg(second);
521
+ return engine?.kind === 'gigaam' && minutes !== null && sttConfigEdit_1.sttIdleMinutesPresets.includes(minutes)
522
+ ? fromEdit((0, sttConfigEdit_1.setSttIdleMinutes)(config, minutes), { id: 'card', engineId: engine.id })
523
+ : { kind: 'stale' };
524
+ }
525
+ case 'wm': return needsLocalEngine((known) => ({ kind: 'show', screen: { id: 'workers', engineId: known.id } }));
526
+ case 'ws': {
527
+ const workers = parseNumberArg(second);
528
+ return engine?.kind === 'gigaam' && workers !== null && sttSettings_1.sttGigaamWorkerChoices.includes(workers)
529
+ ? fromEdit((0, sttConfigEdit_1.setSttWorkers)(config, workers), { id: 'card', engineId: engine.id })
530
+ : { kind: 'stale' };
531
+ }
532
+ case 'rt': return needsLocalEngine((known) => ({ kind: 'effect', effect: 'resetGuard', screen: { id: 'card', engineId: known.id } }));
533
+ case 'ec': return context.isLocalInstalled || context.isLocalInstalling ? { kind: 'stale' } : { kind: 'show', screen: engine?.kind === 'gigaam' ? { id: 'enableConfirm', engineId: engine.id } : { id: 'enableConfirm' } };
534
+ case 'ei':
535
+ case 'er': return context.isLocalInstalled || context.isLocalInstalling ? { kind: 'stale' } : { kind: 'effect', effect: 'install' };
536
+ case 'ip': return context.isLocalInstalling ? { kind: 'effect', effect: 'attachInstall' } : { kind: 'stale' };
537
+ case 'fa': return needsLocalEngine((known) => (canTouchFiles ? { kind: 'show', screen: { id: 'removeFilesConfirm', engineId: known.id } } : { kind: 'stale' }));
538
+ case 'fd': return needsLocalEngine((known) => (canTouchFiles ? { kind: 'effect', effect: 'removeFiles', screen: { id: 'card', engineId: known.id } } : { kind: 'stale' }));
539
+ }
540
+ }
541
+ //# sourceMappingURL=sttScreenPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sttScreenPlan.js","sourceRoot":"","sources":["../../src/stt/sttScreenPlan.ts"],"names":[],"mappings":"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"}