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.
Files changed (417) hide show
  1. package/.env.example +11 -13
  2. package/DEVELOPMENT.md +27 -6
  3. package/MIGRATION_1_TO_2.md +1 -1
  4. package/MIGRATION_RENAME_TO_CHARNESS.md +133 -0
  5. package/README.md +185 -618
  6. package/SETUP.md +644 -0
  7. package/dist/adapters/adapterEventRouting.d.ts +2 -1
  8. package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
  9. package/dist/adapters/adapterEventRouting.js +3 -0
  10. package/dist/adapters/adapterEventRouting.js.map +1 -1
  11. package/dist/adapters/adapterNames.d.ts +13 -0
  12. package/dist/adapters/adapterNames.d.ts.map +1 -1
  13. package/dist/adapters/adapterNames.js +16 -0
  14. package/dist/adapters/adapterNames.js.map +1 -1
  15. package/dist/adapters/backendUnavailableError.d.ts +11 -0
  16. package/dist/adapters/backendUnavailableError.d.ts.map +1 -0
  17. package/dist/adapters/backendUnavailableError.js +19 -0
  18. package/dist/adapters/backendUnavailableError.js.map +1 -0
  19. package/dist/adapters/claudeCliAdapter.d.ts +30 -7
  20. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
  21. package/dist/adapters/claudeCliAdapter.js +71 -17
  22. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  23. package/dist/adapters/claudeJsonStreamAdapter.d.ts +36 -3
  24. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  25. package/dist/adapters/claudeJsonStreamAdapter.js +95 -31
  26. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  27. package/dist/adapters/createAdapter.d.ts +3 -14
  28. package/dist/adapters/createAdapter.d.ts.map +1 -1
  29. package/dist/adapters/createAdapter.js +9 -19
  30. package/dist/adapters/createAdapter.js.map +1 -1
  31. package/dist/adapters/openCodeAdapter.d.ts +140 -12
  32. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  33. package/dist/adapters/openCodeAdapter.js +386 -120
  34. package/dist/adapters/openCodeAdapter.js.map +1 -1
  35. package/dist/apiErrorRetry.d.ts +70 -6
  36. package/dist/apiErrorRetry.d.ts.map +1 -1
  37. package/dist/apiErrorRetry.js +312 -34
  38. package/dist/apiErrorRetry.js.map +1 -1
  39. package/dist/apiRetryKick.d.ts +26 -1
  40. package/dist/apiRetryKick.d.ts.map +1 -1
  41. package/dist/apiRetryKick.js +41 -2
  42. package/dist/apiRetryKick.js.map +1 -1
  43. package/dist/bot.d.ts +2 -1
  44. package/dist/bot.d.ts.map +1 -1
  45. package/dist/bot.js +743 -190
  46. package/dist/bot.js.map +1 -1
  47. package/dist/cli/bot.d.ts +4 -2
  48. package/dist/cli/bot.d.ts.map +1 -1
  49. package/dist/cli/bot.js +11 -3
  50. package/dist/cli/bot.js.map +1 -1
  51. package/dist/cli/botEntry.js +3 -1
  52. package/dist/cli/botEntry.js.map +1 -1
  53. package/dist/cli/claudeProfiles.d.ts +4 -4
  54. package/dist/cli/claudeProfiles.js +5 -5
  55. package/dist/cli/claudeProfiles.js.map +1 -1
  56. package/dist/cli/envLoader.d.ts +6 -5
  57. package/dist/cli/envLoader.d.ts.map +1 -1
  58. package/dist/cli/envLoader.js +8 -27
  59. package/dist/cli/envLoader.js.map +1 -1
  60. package/dist/cli/hot.d.ts +9 -3
  61. package/dist/cli/hot.d.ts.map +1 -1
  62. package/dist/cli/hot.js +55 -19
  63. package/dist/cli/hot.js.map +1 -1
  64. package/dist/cli.js +12 -12
  65. package/dist/cli.js.map +1 -1
  66. package/dist/configDirFile.d.ts +73 -0
  67. package/dist/configDirFile.d.ts.map +1 -0
  68. package/dist/configDirFile.js +216 -0
  69. package/dist/configDirFile.js.map +1 -0
  70. package/dist/connectors/jira/adf.d.ts +21 -0
  71. package/dist/connectors/jira/adf.d.ts.map +1 -1
  72. package/dist/connectors/jira/adf.js +39 -0
  73. package/dist/connectors/jira/adf.js.map +1 -1
  74. package/dist/connectors/jira/answerSink.d.ts +20 -3
  75. package/dist/connectors/jira/answerSink.d.ts.map +1 -1
  76. package/dist/connectors/jira/answerSink.js +126 -13
  77. package/dist/connectors/jira/answerSink.js.map +1 -1
  78. package/dist/connectors/jira/client.d.ts +4 -0
  79. package/dist/connectors/jira/client.d.ts.map +1 -1
  80. package/dist/connectors/jira/client.js +3 -0
  81. package/dist/connectors/jira/client.js.map +1 -1
  82. package/dist/connectors/jira/config.d.ts +10 -1
  83. package/dist/connectors/jira/config.d.ts.map +1 -1
  84. package/dist/connectors/jira/config.js +11 -2
  85. package/dist/connectors/jira/config.js.map +1 -1
  86. package/dist/connectors/jira/connector.d.ts +7 -1
  87. package/dist/connectors/jira/connector.d.ts.map +1 -1
  88. package/dist/connectors/jira/connector.js +23 -4
  89. package/dist/connectors/jira/connector.js.map +1 -1
  90. package/dist/connectors/jira/contextLedger.d.ts +6 -0
  91. package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
  92. package/dist/connectors/jira/contextLedger.js +16 -0
  93. package/dist/connectors/jira/contextLedger.js.map +1 -1
  94. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -1
  95. package/dist/connectors/jira/contextPreamble.js +6 -3
  96. package/dist/connectors/jira/contextPreamble.js.map +1 -1
  97. package/dist/connectors/jira/inbound.d.ts +60 -7
  98. package/dist/connectors/jira/inbound.d.ts.map +1 -1
  99. package/dist/connectors/jira/inbound.js +169 -16
  100. package/dist/connectors/jira/inbound.js.map +1 -1
  101. package/dist/connectors/jira/issueBlocks.d.ts +6 -1
  102. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
  103. package/dist/connectors/jira/issueBlocks.js +5 -1
  104. package/dist/connectors/jira/issueBlocks.js.map +1 -1
  105. package/dist/connectors/jira/prompt.d.ts +2 -0
  106. package/dist/connectors/jira/prompt.d.ts.map +1 -1
  107. package/dist/connectors/jira/prompt.js +16 -0
  108. package/dist/connectors/jira/prompt.js.map +1 -1
  109. package/dist/connectors/jira/trigger.d.ts +12 -3
  110. package/dist/connectors/jira/trigger.d.ts.map +1 -1
  111. package/dist/connectors/jira/trigger.js +8 -1
  112. package/dist/connectors/jira/trigger.js.map +1 -1
  113. package/dist/connectors/jira/triggerLog.d.ts +10 -3
  114. package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
  115. package/dist/connectors/jira/triggerLog.js +18 -2
  116. package/dist/connectors/jira/triggerLog.js.map +1 -1
  117. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +2 -2
  118. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
  119. package/dist/connectors/telegram/commands/autoContinueLimits.js +4 -4
  120. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
  121. package/dist/connectors/telegram/commands/backendSwitch.d.ts +25 -0
  122. package/dist/connectors/telegram/commands/backendSwitch.d.ts.map +1 -0
  123. package/dist/connectors/telegram/commands/backendSwitch.js +104 -0
  124. package/dist/connectors/telegram/commands/backendSwitch.js.map +1 -0
  125. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  126. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
  127. package/dist/connectors/telegram/commands/callbackMessage.js +24 -0
  128. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
  129. package/dist/connectors/telegram/commands/callbackToast.d.ts +36 -0
  130. package/dist/connectors/telegram/commands/callbackToast.d.ts.map +1 -0
  131. package/dist/connectors/telegram/commands/callbackToast.js +83 -0
  132. package/dist/connectors/telegram/commands/callbackToast.js.map +1 -0
  133. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +18 -0
  134. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
  135. package/dist/connectors/telegram/commands/claudeAccounts.js +220 -66
  136. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
  137. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
  138. package/dist/connectors/telegram/commands/displayModes.js +4 -2
  139. package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
  140. package/dist/connectors/telegram/commands/fallbackChain.d.ts +5 -8
  141. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
  142. package/dist/connectors/telegram/commands/fallbackChain.js +183 -193
  143. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
  144. package/dist/connectors/telegram/commands/limitsBoard.d.ts +40 -0
  145. package/dist/connectors/telegram/commands/limitsBoard.d.ts.map +1 -0
  146. package/dist/connectors/telegram/commands/limitsBoard.js +281 -0
  147. package/dist/connectors/telegram/commands/limitsBoard.js.map +1 -0
  148. package/dist/connectors/telegram/commands/modelPage.d.ts +130 -0
  149. package/dist/connectors/telegram/commands/modelPage.d.ts.map +1 -0
  150. package/dist/connectors/telegram/commands/modelPage.js +120 -0
  151. package/dist/connectors/telegram/commands/modelPage.js.map +1 -0
  152. package/dist/connectors/telegram/commands/modelProviders.d.ts +9 -1
  153. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
  154. package/dist/connectors/telegram/commands/modelProviders.js +203 -111
  155. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
  156. package/dist/connectors/telegram/commands/stt.d.ts +32 -0
  157. package/dist/connectors/telegram/commands/stt.d.ts.map +1 -0
  158. package/dist/connectors/telegram/commands/stt.js +460 -0
  159. package/dist/connectors/telegram/commands/stt.js.map +1 -0
  160. package/dist/effortLevels.d.ts +57 -7
  161. package/dist/effortLevels.d.ts.map +1 -1
  162. package/dist/effortLevels.js +65 -9
  163. package/dist/effortLevels.js.map +1 -1
  164. package/dist/i18n/de.d.ts.map +1 -1
  165. package/dist/i18n/de.js +160 -17
  166. package/dist/i18n/de.js.map +1 -1
  167. package/dist/i18n/en.d.ts.map +1 -1
  168. package/dist/i18n/en.js +160 -17
  169. package/dist/i18n/en.js.map +1 -1
  170. package/dist/i18n/es.d.ts.map +1 -1
  171. package/dist/i18n/es.js +160 -17
  172. package/dist/i18n/es.js.map +1 -1
  173. package/dist/i18n/fr.d.ts.map +1 -1
  174. package/dist/i18n/fr.js +160 -17
  175. package/dist/i18n/fr.js.map +1 -1
  176. package/dist/i18n/hi.d.ts.map +1 -1
  177. package/dist/i18n/hi.js +160 -17
  178. package/dist/i18n/hi.js.map +1 -1
  179. package/dist/i18n/ja.d.ts.map +1 -1
  180. package/dist/i18n/ja.js +160 -17
  181. package/dist/i18n/ja.js.map +1 -1
  182. package/dist/i18n/ka.d.ts.map +1 -1
  183. package/dist/i18n/ka.js +160 -17
  184. package/dist/i18n/ka.js.map +1 -1
  185. package/dist/i18n/pt.d.ts.map +1 -1
  186. package/dist/i18n/pt.js +160 -17
  187. package/dist/i18n/pt.js.map +1 -1
  188. package/dist/i18n/ru.d.ts.map +1 -1
  189. package/dist/i18n/ru.js +160 -17
  190. package/dist/i18n/ru.js.map +1 -1
  191. package/dist/i18n/uk.d.ts.map +1 -1
  192. package/dist/i18n/uk.js +160 -17
  193. package/dist/i18n/uk.js.map +1 -1
  194. package/dist/i18n/uz.d.ts.map +1 -1
  195. package/dist/i18n/uz.js +160 -17
  196. package/dist/i18n/uz.js.map +1 -1
  197. package/dist/i18n/zh.d.ts.map +1 -1
  198. package/dist/i18n/zh.js +160 -17
  199. package/dist/i18n/zh.js.map +1 -1
  200. package/dist/index.js +1 -1
  201. package/dist/index.js.map +1 -1
  202. package/dist/installManager.d.ts +36 -6
  203. package/dist/installManager.d.ts.map +1 -1
  204. package/dist/installManager.js +124 -26
  205. package/dist/installManager.js.map +1 -1
  206. package/dist/instanceLock.d.ts.map +1 -1
  207. package/dist/instanceLock.js +10 -8
  208. package/dist/instanceLock.js.map +1 -1
  209. package/dist/instanceSettings.d.ts +52 -0
  210. package/dist/instanceSettings.d.ts.map +1 -0
  211. package/dist/instanceSettings.js +136 -0
  212. package/dist/instanceSettings.js.map +1 -0
  213. package/dist/legacyMigration.d.ts +69 -0
  214. package/dist/legacyMigration.d.ts.map +1 -0
  215. package/dist/legacyMigration.js +338 -0
  216. package/dist/legacyMigration.js.map +1 -0
  217. package/dist/legacyNames.d.ts +107 -0
  218. package/dist/legacyNames.d.ts.map +1 -0
  219. package/dist/legacyNames.js +230 -0
  220. package/dist/legacyNames.js.map +1 -0
  221. package/dist/pinnedStatus.d.ts +7 -1
  222. package/dist/pinnedStatus.d.ts.map +1 -1
  223. package/dist/pinnedStatus.js +1 -1
  224. package/dist/pinnedStatus.js.map +1 -1
  225. package/dist/platform/answerSink.d.ts +5 -0
  226. package/dist/platform/answerSink.d.ts.map +1 -1
  227. package/dist/platform/answerSink.js.map +1 -1
  228. package/dist/requests/answerRequest.d.ts +2 -0
  229. package/dist/requests/answerRequest.d.ts.map +1 -1
  230. package/dist/requests/answerRequest.js +3 -1
  231. package/dist/requests/answerRequest.js.map +1 -1
  232. package/dist/requests/answerStyle.d.ts +11 -0
  233. package/dist/requests/answerStyle.d.ts.map +1 -0
  234. package/dist/requests/answerStyle.js +14 -0
  235. package/dist/requests/answerStyle.js.map +1 -0
  236. package/dist/requests/answerTail.d.ts.map +1 -1
  237. package/dist/requests/answerTail.js +2 -0
  238. package/dist/requests/answerTail.js.map +1 -1
  239. package/dist/requests/requestHeader.d.ts.map +1 -1
  240. package/dist/requests/requestHeader.js +3 -0
  241. package/dist/requests/requestHeader.js.map +1 -1
  242. package/dist/requests/requestLedger.d.ts +8 -0
  243. package/dist/requests/requestLedger.d.ts.map +1 -1
  244. package/dist/requests/requestLedger.js +20 -2
  245. package/dist/requests/requestLedger.js.map +1 -1
  246. package/dist/requests/types.d.ts +3 -1
  247. package/dist/requests/types.d.ts.map +1 -1
  248. package/dist/scheduler/mcpSurface.d.ts +9 -1
  249. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  250. package/dist/scheduler/mcpSurface.js +49 -16
  251. package/dist/scheduler/mcpSurface.js.map +1 -1
  252. package/dist/shutdown.d.ts +14 -0
  253. package/dist/shutdown.d.ts.map +1 -1
  254. package/dist/shutdown.js +16 -0
  255. package/dist/shutdown.js.map +1 -1
  256. package/dist/state.d.ts +57 -3
  257. package/dist/state.d.ts.map +1 -1
  258. package/dist/state.js +67 -3
  259. package/dist/state.js.map +1 -1
  260. package/dist/stt/sttAutoInstall.d.ts +39 -0
  261. package/dist/stt/sttAutoInstall.d.ts.map +1 -0
  262. package/dist/stt/sttAutoInstall.js +158 -0
  263. package/dist/stt/sttAutoInstall.js.map +1 -0
  264. package/dist/stt/sttChildEnv.d.ts +11 -0
  265. package/dist/stt/sttChildEnv.d.ts.map +1 -0
  266. package/dist/stt/sttChildEnv.js +30 -0
  267. package/dist/stt/sttChildEnv.js.map +1 -0
  268. package/dist/stt/sttConfigEdit.d.ts +71 -0
  269. package/dist/stt/sttConfigEdit.d.ts.map +1 -0
  270. package/dist/stt/sttConfigEdit.js +144 -0
  271. package/dist/stt/sttConfigEdit.js.map +1 -0
  272. package/dist/stt/sttInstall.d.ts +147 -0
  273. package/dist/stt/sttInstall.d.ts.map +1 -0
  274. package/dist/stt/sttInstall.js +491 -0
  275. package/dist/stt/sttInstall.js.map +1 -0
  276. package/dist/stt/sttInstallEntry.d.ts +2 -0
  277. package/dist/stt/sttInstallEntry.d.ts.map +1 -0
  278. package/dist/stt/sttInstallEntry.js +31 -0
  279. package/dist/stt/sttInstallEntry.js.map +1 -0
  280. package/dist/stt/sttInstallReporter.d.ts +45 -0
  281. package/dist/stt/sttInstallReporter.d.ts.map +1 -0
  282. package/dist/stt/sttInstallReporter.js +57 -0
  283. package/dist/stt/sttInstallReporter.js.map +1 -0
  284. package/dist/stt/sttRuntime.d.ts +35 -0
  285. package/dist/stt/sttRuntime.d.ts.map +1 -0
  286. package/dist/stt/sttRuntime.js +73 -0
  287. package/dist/stt/sttRuntime.js.map +1 -0
  288. package/dist/stt/sttScreenPlan.d.ts +193 -0
  289. package/dist/stt/sttScreenPlan.d.ts.map +1 -0
  290. package/dist/stt/sttScreenPlan.js +541 -0
  291. package/dist/stt/sttScreenPlan.js.map +1 -0
  292. package/dist/stt/sttSettings.d.ts +201 -0
  293. package/dist/stt/sttSettings.d.ts.map +1 -0
  294. package/dist/stt/sttSettings.js +387 -0
  295. package/dist/stt/sttSettings.js.map +1 -0
  296. package/dist/stt/sttSidecarOwner.d.ts +115 -0
  297. package/dist/stt/sttSidecarOwner.d.ts.map +1 -0
  298. package/dist/stt/sttSidecarOwner.js +475 -0
  299. package/dist/stt/sttSidecarOwner.js.map +1 -0
  300. package/dist/stt/transcribeChain.d.ts +36 -0
  301. package/dist/stt/transcribeChain.d.ts.map +1 -0
  302. package/dist/stt/transcribeChain.js +42 -0
  303. package/dist/stt/transcribeChain.js.map +1 -0
  304. package/dist/types.d.ts +77 -4
  305. package/dist/types.d.ts.map +1 -1
  306. package/dist/utils/adapterSwitchSessionIds.d.ts +32 -0
  307. package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -0
  308. package/dist/utils/adapterSwitchSessionIds.js +44 -0
  309. package/dist/utils/adapterSwitchSessionIds.js.map +1 -0
  310. package/dist/utils/backendSwitchPlan.d.ts +63 -0
  311. package/dist/utils/backendSwitchPlan.d.ts.map +1 -0
  312. package/dist/utils/backendSwitchPlan.js +73 -0
  313. package/dist/utils/backendSwitchPlan.js.map +1 -0
  314. package/dist/utils/claudeAccountPickerPlan.d.ts +12 -1
  315. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
  316. package/dist/utils/claudeAccountPickerPlan.js +20 -1
  317. package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
  318. package/dist/utils/claudeProfiles.d.ts +7 -0
  319. package/dist/utils/claudeProfiles.d.ts.map +1 -1
  320. package/dist/utils/claudeProfiles.js +19 -0
  321. package/dist/utils/claudeProfiles.js.map +1 -1
  322. package/dist/utils/claudeTranscriptContent.d.ts +24 -0
  323. package/dist/utils/claudeTranscriptContent.d.ts.map +1 -0
  324. package/dist/utils/claudeTranscriptContent.js +107 -0
  325. package/dist/utils/claudeTranscriptContent.js.map +1 -0
  326. package/dist/utils/claudeUsage.d.ts +47 -8
  327. package/dist/utils/claudeUsage.d.ts.map +1 -1
  328. package/dist/utils/claudeUsage.js +76 -14
  329. package/dist/utils/claudeUsage.js.map +1 -1
  330. package/dist/utils/claudeUsageRefresher.d.ts +8 -1
  331. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
  332. package/dist/utils/claudeUsageRefresher.js +9 -4
  333. package/dist/utils/claudeUsageRefresher.js.map +1 -1
  334. package/dist/utils/effortPickerPlan.d.ts +54 -0
  335. package/dist/utils/effortPickerPlan.d.ts.map +1 -0
  336. package/dist/utils/effortPickerPlan.js +56 -0
  337. package/dist/utils/effortPickerPlan.js.map +1 -0
  338. package/dist/utils/ensureSessionPlan.d.ts +20 -4
  339. package/dist/utils/ensureSessionPlan.d.ts.map +1 -1
  340. package/dist/utils/ensureSessionPlan.js +17 -4
  341. package/dist/utils/ensureSessionPlan.js.map +1 -1
  342. package/dist/utils/fallbackBridge.d.ts +6 -2
  343. package/dist/utils/fallbackBridge.d.ts.map +1 -1
  344. package/dist/utils/fallbackBridge.js +10 -3
  345. package/dist/utils/fallbackBridge.js.map +1 -1
  346. package/dist/utils/fallbackChain.d.ts +36 -0
  347. package/dist/utils/fallbackChain.d.ts.map +1 -1
  348. package/dist/utils/fallbackChain.js +65 -1
  349. package/dist/utils/fallbackChain.js.map +1 -1
  350. package/dist/utils/fallbackSwitchNotice.d.ts +41 -0
  351. package/dist/utils/fallbackSwitchNotice.d.ts.map +1 -0
  352. package/dist/utils/fallbackSwitchNotice.js +75 -0
  353. package/dist/utils/fallbackSwitchNotice.js.map +1 -0
  354. package/dist/utils/fileSendService.d.ts +33 -10
  355. package/dist/utils/fileSendService.d.ts.map +1 -1
  356. package/dist/utils/fileSendService.js +78 -27
  357. package/dist/utils/fileSendService.js.map +1 -1
  358. package/dist/utils/jsonStreamHost.d.ts +39 -0
  359. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  360. package/dist/utils/jsonStreamHost.js +60 -1
  361. package/dist/utils/jsonStreamHost.js.map +1 -1
  362. package/dist/utils/limitEpisodeRecovery.d.ts +16 -2
  363. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -1
  364. package/dist/utils/limitEpisodeRecovery.js +44 -3
  365. package/dist/utils/limitEpisodeRecovery.js.map +1 -1
  366. package/dist/utils/limitSettings.d.ts +25 -0
  367. package/dist/utils/limitSettings.d.ts.map +1 -0
  368. package/dist/utils/limitSettings.js +31 -0
  369. package/dist/utils/limitSettings.js.map +1 -0
  370. package/dist/utils/limitsBoardPlan.d.ts +52 -0
  371. package/dist/utils/limitsBoardPlan.d.ts.map +1 -0
  372. package/dist/utils/limitsBoardPlan.js +93 -0
  373. package/dist/utils/limitsBoardPlan.js.map +1 -0
  374. package/dist/utils/openCodeCompactPlugin.d.ts +11 -3
  375. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
  376. package/dist/utils/openCodeCompactPlugin.js +37 -5
  377. package/dist/utils/openCodeCompactPlugin.js.map +1 -1
  378. package/dist/utils/openCodeUsage.d.ts +93 -0
  379. package/dist/utils/openCodeUsage.d.ts.map +1 -0
  380. package/dist/utils/openCodeUsage.js +248 -0
  381. package/dist/utils/openCodeUsage.js.map +1 -0
  382. package/dist/utils/operatorSwitchPlan.d.ts +61 -0
  383. package/dist/utils/operatorSwitchPlan.d.ts.map +1 -0
  384. package/dist/utils/operatorSwitchPlan.js +32 -0
  385. package/dist/utils/operatorSwitchPlan.js.map +1 -0
  386. package/dist/utils/promptDelivery.d.ts +40 -0
  387. package/dist/utils/promptDelivery.d.ts.map +1 -1
  388. package/dist/utils/promptDelivery.js +31 -0
  389. package/dist/utils/promptDelivery.js.map +1 -1
  390. package/dist/utils/recvPreviewRedaction.d.ts +14 -4
  391. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
  392. package/dist/utils/recvPreviewRedaction.js +19 -7
  393. package/dist/utils/recvPreviewRedaction.js.map +1 -1
  394. package/dist/utils/startupReadiness.d.ts +3 -3
  395. package/dist/utils/startupReadiness.d.ts.map +1 -1
  396. package/dist/utils/startupReadiness.js +2 -2
  397. package/dist/utils/startupReadiness.js.map +1 -1
  398. package/dist/utils/threadStatusReport.d.ts +3 -1
  399. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  400. package/dist/utils/threadStatusReport.js +4 -3
  401. package/dist/utils/threadStatusReport.js.map +1 -1
  402. package/dist/utils/timezone.d.ts +23 -0
  403. package/dist/utils/timezone.d.ts.map +1 -1
  404. package/dist/utils/timezone.js +38 -0
  405. package/dist/utils/timezone.js.map +1 -1
  406. package/dist/utils/transcribeAudio.d.ts +25 -12
  407. package/dist/utils/transcribeAudio.d.ts.map +1 -1
  408. package/dist/utils/transcribeAudio.js +39 -21
  409. package/dist/utils/transcribeAudio.js.map +1 -1
  410. package/dist/utils/usageRefreshBudget.d.ts +9 -0
  411. package/dist/utils/usageRefreshBudget.d.ts.map +1 -0
  412. package/dist/utils/usageRefreshBudget.js +27 -0
  413. package/dist/utils/usageRefreshBudget.js.map +1 -0
  414. package/examples/.env.example +13 -9
  415. package/examples/docker-compose.yml +20 -17
  416. package/package.json +4 -1
  417. package/stt/gigaam_sidecar.py +800 -0
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deliverPromptOrBuffer = deliverPromptOrBuffer;
4
+ exports.getLatePromptRoute = getLatePromptRoute;
5
+ exports.deliverLatePrompt = deliverLatePrompt;
4
6
  const sessionKey_1 = require("../sessionKey");
5
7
  const sessionKeyCodec_1 = require("../connectors/telegram/sessionKeyCodec");
6
8
  /**
@@ -46,4 +48,33 @@ async function deliverPromptOrBuffer(deps, key, text, isStarting, onBufferedSett
46
48
  }
47
49
  return 'buffered';
48
50
  }
51
+ /**
52
+ * @description The {@link LatePromptRoute} of a prompt, read at the moment it is forwarded. The idle stop posts a
53
+ * re-asked question just before it stops the process, and a handler awaits between reading the session's state and the
54
+ * forward (the tap's toast, the request it opens): written into a process being stopped the prompt was lost, and
55
+ * into one already gone it was dropped.
56
+ */
57
+ function getLatePromptRoute(input) {
58
+ if (input.isWindowOpen)
59
+ return 'buffer';
60
+ return input.isSessionActive ? 'forward' : 'wake';
61
+ }
62
+ /**
63
+ * @description Deliver a prompt whose handler decided, when it arrived, that the session is live — routed again by
64
+ * {@link getLatePromptRoute} now, after the handler's awaits. A wake that finds nothing never forwards: the forward
65
+ * would show the topic as working while the adapter drops the text.
66
+ */
67
+ async function deliverLatePrompt(ports) {
68
+ const route = getLatePromptRoute({ isWindowOpen: ports.checkIsWindowOpen(), isSessionActive: ports.checkIsSessionActive() });
69
+ if (route === 'buffer') {
70
+ await ports.buffer();
71
+ return 'buffered';
72
+ }
73
+ if (route === 'wake' && !(await ports.wake())) {
74
+ await ports.reportNoSession();
75
+ return 'noSession';
76
+ }
77
+ await ports.forward();
78
+ return 'forwarded';
79
+ }
49
80
  //# sourceMappingURL=promptDelivery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promptDelivery.js","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":";;AAgDA,sDAuBC;AAvED,8CAA6D;AAC7D,4EAA4E;AAuB5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,qBAAqB,CACzC,IAAwB,EACxB,GAAe,EACf,IAAY,EACZ,UAAmB,EACnB,iBAAyC;IAEzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAChG,IAAI,eAAe,IAAI,IAAA,oCAAkB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,sGAAsG;QACtG,sGAAsG;QACtG,gDAAgD;QAChD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAA,wBAAW,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"promptDelivery.js","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":";;AAgDA,sDAuBC;AAgBD,gDAGC;AA0BD,8CAYC;AAhID,8CAA6D;AAC7D,4EAA4E;AAuB5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,qBAAqB,CACzC,IAAwB,EACxB,GAAe,EACf,IAAY,EACZ,UAAmB,EACnB,iBAAyC;IAEzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAChG,IAAI,eAAe,IAAI,IAAA,oCAAkB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,sGAAsG;QACtG,sGAAsG;QACtG,gDAAgD;QAChD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAA,wBAAW,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAUD;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAA0D;IAC3F,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,QAAQ,CAAC;IACxC,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAqBD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,iBAAiB,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC7H,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACtB,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,5 +1,14 @@
1
1
  /** Recorded instead of a pasted provider API key while `/connect` is pending. */
2
2
  export declare const redactedConnectKeyPreview = "[redacted: provider API key]";
3
+ /** Recorded instead of a pasted speech-engine key while `/stt` waits for one. */
4
+ export declare const redactedSttKeyPreview = "[redacted: speech engine key]";
5
+ /**
6
+ * Recorded instead of a custom speech-engine address while `/stt` waits for one: an address may carry a login
7
+ * (`http://user:pass@host`), and the message is deleted from the topic for that reason.
8
+ */
9
+ export declare const redactedSttAddressPreview = "[redacted: speech engine address]";
10
+ /** What `/stt` waits for as plain text: the next non-command message of the topic IS that secret-bearing input. */
11
+ export type SttAwaitedInputStep = 'url' | 'key';
3
12
  /** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
4
13
  export declare const redactedConnectCommandPreview = "/connect <redacted>";
5
14
  /**
@@ -15,9 +24,10 @@ export declare function checkIsConnectCommandText(rawText: string): boolean;
15
24
  * on-disk trace log. Mirrors the text handler's own routing: while the thread
16
25
  * is in the pending `/connect` state, the next non-command text IS the pasted
17
26
  * key → the preview is fully redacted (a command text cancels the flow instead,
18
- * so it is not a secret). Independently of the pending state, an inline
19
- * `/connect <key>` carries the key in its arguments → only a fixed command
20
- * marker is recorded. Everything else records unchanged.
27
+ * so it is not a secret). The same holds while `/stt` waits for a speech-engine
28
+ * key or for a custom server's address (it may carry a login). Independently of the pending state, an inline `/connect <key>` carries
29
+ * the key in its arguments → only a fixed command marker is recorded.
30
+ * Everything else records unchanged.
21
31
  */
22
- export declare function getRecvTracePreview(messageText: string, isThreadPendingProviderConnect: boolean): string;
32
+ export declare function getRecvTracePreview(messageText: string, isThreadPendingProviderConnect: boolean, awaitedSttStep?: SttAwaitedInputStep | null): string;
23
33
  //# sourceMappingURL=recvPreviewRedaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recvPreviewRedaction.d.ts","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,8BAA8B,EAAE,OAAO,GACtC,MAAM,CAMR"}
1
+ {"version":3,"file":"recvPreviewRedaction.d.ts","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,yBAAyB,sCAAsC,CAAC;AAE7E,mHAAmH;AACnH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,8BAA8B,EAAE,OAAO,EACvC,cAAc,GAAE,mBAAmB,GAAG,IAAW,GAChD,MAAM,CAOR"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.redactedConnectCommandPreview = exports.redactedConnectKeyPreview = void 0;
3
+ exports.redactedConnectCommandPreview = exports.redactedSttAddressPreview = exports.redactedSttKeyPreview = exports.redactedConnectKeyPreview = void 0;
4
4
  exports.checkIsConnectCommandText = checkIsConnectCommandText;
5
5
  exports.getRecvTracePreview = getRecvTracePreview;
6
6
  const utils_1 = require("../utils");
7
7
  /** Recorded instead of a pasted provider API key while `/connect` is pending. */
8
8
  exports.redactedConnectKeyPreview = '[redacted: provider API key]';
9
+ /** Recorded instead of a pasted speech-engine key while `/stt` waits for one. */
10
+ exports.redactedSttKeyPreview = '[redacted: speech engine key]';
11
+ /**
12
+ * Recorded instead of a custom speech-engine address while `/stt` waits for one: an address may carry a login
13
+ * (`http://user:pass@host`), and the message is deleted from the topic for that reason.
14
+ */
15
+ exports.redactedSttAddressPreview = '[redacted: speech engine address]';
9
16
  /** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
10
17
  exports.redactedConnectCommandPreview = '/connect <redacted>';
11
18
  /**
@@ -24,16 +31,21 @@ function checkIsConnectCommandText(rawText) {
24
31
  * on-disk trace log. Mirrors the text handler's own routing: while the thread
25
32
  * is in the pending `/connect` state, the next non-command text IS the pasted
26
33
  * key → the preview is fully redacted (a command text cancels the flow instead,
27
- * so it is not a secret). Independently of the pending state, an inline
28
- * `/connect <key>` carries the key in its arguments → only a fixed command
29
- * marker is recorded. Everything else records unchanged.
34
+ * so it is not a secret). The same holds while `/stt` waits for a speech-engine
35
+ * key or for a custom server's address (it may carry a login). Independently of the pending state, an inline `/connect <key>` carries
36
+ * the key in its arguments → only a fixed command marker is recorded.
37
+ * Everything else records unchanged.
30
38
  */
31
- function getRecvTracePreview(messageText, isThreadPendingProviderConnect) {
39
+ function getRecvTracePreview(messageText, isThreadPendingProviderConnect, awaitedSttStep = null) {
32
40
  if (checkIsConnectCommandText(messageText))
33
41
  return exports.redactedConnectCommandPreview;
34
- if (isThreadPendingProviderConnect && !messageText.trim().startsWith('/')) {
42
+ const isPlainText = !messageText.trim().startsWith('/');
43
+ if (isThreadPendingProviderConnect && isPlainText)
35
44
  return exports.redactedConnectKeyPreview;
36
- }
45
+ if (awaitedSttStep === 'key' && isPlainText)
46
+ return exports.redactedSttKeyPreview;
47
+ if (awaitedSttStep === 'url' && isPlainText)
48
+ return exports.redactedSttAddressPreview;
37
49
  return messageText;
38
50
  }
39
51
  //# sourceMappingURL=recvPreviewRedaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recvPreviewRedaction.js","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":";;;AAcA,8DAGC;AAYD,kDASC;AAtCD,oCAAkD;AAElD,iFAAiF;AACpE,QAAA,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,8FAA8F;AACjF,QAAA,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,WAAW,KAAK,UAAU,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,8BAAuC;IAEvC,IAAI,yBAAyB,CAAC,WAAW,CAAC;QAAE,OAAO,qCAA6B,CAAC;IACjF,IAAI,8BAA8B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,iCAAyB,CAAC;IACnC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"recvPreviewRedaction.js","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":";;;AA0BA,8DAGC;AAaD,kDAWC;AArDD,oCAAkD;AAElD,iFAAiF;AACpE,QAAA,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,iFAAiF;AACpE,QAAA,qBAAqB,GAAG,+BAA+B,CAAC;AAErE;;;GAGG;AACU,QAAA,yBAAyB,GAAG,mCAAmC,CAAC;AAK7E,8FAA8F;AACjF,QAAA,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,WAAW,KAAK,UAAU,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,8BAAuC,EACvC,iBAA6C,IAAI;IAEjD,IAAI,yBAAyB,CAAC,WAAW,CAAC;QAAE,OAAO,qCAA6B,CAAC;IACjF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,8BAA8B,IAAI,WAAW;QAAE,OAAO,iCAAyB,CAAC;IACpF,IAAI,cAAc,KAAK,KAAK,IAAI,WAAW;QAAE,OAAO,6BAAqB,CAAC;IAC1E,IAAI,cAAc,KAAK,KAAK,IAAI,WAAW;QAAE,OAAO,iCAAyB,CAAC;IAC9E,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -36,8 +36,8 @@ export interface ReadinessFacts {
36
36
  hasBinding: boolean;
37
37
  /** Installed agent CLIs among `claude` / `opencode` (empty ⇒ none installed). */
38
38
  availableAgents: string[];
39
- /** `GROQ_API_KEY` is present (optional — enables voice input). */
40
- hasGroq: boolean;
39
+ /** At least one speech engine is available (optional — enables voice input). */
40
+ hasSpeechEngine: boolean;
41
41
  /** `OWNER_USER_ID` is set. */
42
42
  ownerSet: boolean;
43
43
  /**
@@ -75,7 +75,7 @@ export declare function formatMissingRights(keys: BotRightKey[]): string;
75
75
  *
76
76
  * `isReady` is true iff NONE of the required items are unmet:
77
77
  * groupPaired && all admin rights held && a binding exists && an agent CLI installed.
78
- * The optional groq / owner items are informational — they populate `unmetKeys`
78
+ * The optional speech-engine / owner items are informational — they populate `unmetKeys`
79
79
  * (so they render inside a not-ready checklist) but never flip `isReady`.
80
80
  *
81
81
  * `grant_admin` is only unmet while a group IS paired (you cannot grant admin
@@ -1 +1 @@
1
- {"version":3,"file":"startupReadiness.d.ts","sourceRoot":"","sources":["../../src/utils/startupReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,eAAe,GACf,eAAe,GACf,gBAAgB,CAAC;AAErB,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,WAAW,EAAE,CAOhF;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAe3E;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAEV;AAED,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,EACvB,gBAAgB,EAAE,OAAO,GACxB,aAAa,EAAE,CAQjB;AAED,0GAA0G;AAC1G,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,sBAAsB,GAChC,MAAM,CAaR"}
1
+ {"version":3,"file":"startupReadiness.d.ts","sourceRoot":"","sources":["../../src/utils/startupReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5D,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,eAAe,GACf,eAAe,GACf,gBAAgB,CAAC;AAErB,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gFAAgF;IAChF,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,WAAW,EAAE,CAOhF;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAe3E;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAEV;AAED,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,EACvB,gBAAgB,EAAE,OAAO,GACxB,aAAa,EAAE,CAQjB;AAED,0GAA0G;AAC1G,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,sBAAsB,GAChC,MAAM,CAaR"}
@@ -69,7 +69,7 @@ function formatMissingRights(keys) {
69
69
  *
70
70
  * `isReady` is true iff NONE of the required items are unmet:
71
71
  * groupPaired && all admin rights held && a binding exists && an agent CLI installed.
72
- * The optional groq / owner items are informational — they populate `unmetKeys`
72
+ * The optional speech-engine / owner items are informational — they populate `unmetKeys`
73
73
  * (so they render inside a not-ready checklist) but never flip `isReady`.
74
74
  *
75
75
  * `grant_admin` is only unmet while a group IS paired (you cannot grant admin
@@ -86,7 +86,7 @@ function buildReadinessReport(facts) {
86
86
  unmet.add('bind_topic');
87
87
  if (facts.availableAgents.length === 0)
88
88
  unmet.add('install_agent');
89
- if (!facts.hasGroq)
89
+ if (!facts.hasSpeechEngine)
90
90
  unmet.add('optional_groq');
91
91
  if (!facts.ownerSet && facts.usedGeneralFallback)
92
92
  unmet.add('optional_owner');
@@ -1 +1 @@
1
- {"version":3,"file":"startupReadiness.js","sourceRoot":"","sources":["../../src/utils/startupReadiness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startupReadiness.js","sourceRoot":"","sources":["../../src/utils/startupReadiness.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export interface ThreadStatusReportInput {
25
25
  workDir: string | null;
26
26
  model: string | null;
27
27
  effort: string | null;
28
+ /** The level the next start will use when it differs from `effort` (the default changed under the running session). */
29
+ effortNextStart?: string | null;
28
30
  startedAt: string | null;
29
31
  runtime: AgentRuntimeInfo | null;
30
32
  /**
@@ -49,7 +51,7 @@ export interface ThreadStatusReportInput {
49
51
  * meaningless once the session stopped, so a stopped thread renders only the
50
52
  * header, the bound working directory, the topic's view and the timezone.
51
53
  */
52
- export declare function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDir, model, effort, startedAt, runtime, account, view, timezone, timezoneNow, }: ThreadStatusReportInput): string;
54
+ export declare function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDir, model, effort, effortNextStart, startedAt, runtime, account, view, timezone, timezoneNow, }: ThreadStatusReportInput): string;
53
55
  /** @description The `Account:` row (plus a pending-switch row) of the `/status` report. */
54
56
  export declare function formatThreadStatusAccountLines({ current, pending, nowMs }: ThreadStatusAccount, timezone: string): string[];
55
57
  export interface ThreadStatusModelSources {
@@ -1 +1 @@
1
- {"version":3,"file":"threadStatusReport.d.ts","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,wDAAwD;AACxD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,oGAAoG;IACpG,OAAO,EAAE,yBAAyB,CAAC;IACnC,4GAA4G;IAC5G,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,uBAAuB,GAAG,MAAM,CA6BlC;AAcD,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3H;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uFAAuF;IACvF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1C"}
1
+ {"version":3,"file":"threadStatusReport.d.ts","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,wDAAwD;AACxD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,oGAAoG;IACpG,OAAO,EAAE,yBAAyB,CAAC;IACnC,4GAA4G;IAC5G,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uHAAuH;IACvH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,uBAAuB,GAAG,MAAM,CA+BlC;AAcD,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3H;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uFAAuF;IACvF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1C"}
@@ -15,7 +15,7 @@ const claudeUsage_1 = require("./claudeUsage");
15
15
  * meaningless once the session stopped, so a stopped thread renders only the
16
16
  * header, the bound working directory, the topic's view and the timezone.
17
17
  */
18
- function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDir, model, effort, startedAt, runtime, account, view, timezone, timezoneNow, }) {
18
+ function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDir, model, effort, effortNextStart, startedAt, runtime, account, view, timezone, timezoneNow, }) {
19
19
  const lines = [
20
20
  (0, i18n_1.t)('status.thread_report', {
21
21
  agent: agentLine,
@@ -37,8 +37,9 @@ function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDi
37
37
  return lines.join('\n');
38
38
  if (model)
39
39
  lines.push((0, i18n_1.t)('status.thread_model', { model }));
40
- if (effort)
41
- lines.push((0, i18n_1.t)('status.thread_effort', { effort }));
40
+ if (effort) {
41
+ lines.push(effortNextStart ? (0, i18n_1.t)('status.thread_effort_next_start', { effort, next: effortNextStart }) : (0, i18n_1.t)('status.thread_effort', { effort }));
42
+ }
42
43
  if (startedAt)
43
44
  lines.push((0, i18n_1.t)('status.thread_started', { started: startedAt }));
44
45
  const unavailable = (0, i18n_1.t)('version.unknown');
@@ -1 +1 @@
1
- {"version":3,"file":"threadStatusReport.js","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threadStatusReport.js","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":";;AA2DA,sDA8CC;AAeD,wEAIC;AA0BD,oDAMC;AA5JD,kCAA4B;AAE5B,+CAAyD;AA+CzD;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,WAAW,GACa;IACxB,MAAM,KAAK,GAAG;QACZ,IAAA,QAAC,EAAC,sBAAsB,EAAE;YACxB,KAAK,EAAE,SAAS;YAChB,MAAM;YACN,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC;SACvH,CAAC;KACH,CAAC;IACF,wGAAwG;IACxG,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1E,gFAAgF;IAChF,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,8EAA8E;IAC9E,yEAAyE;IACzE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAChJ,CAAC;IACD,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,IAAA,QAAC,EAAC,iBAAiB,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7F,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE;QACpC,IAAI,EAAE,OAAO,EAAE,iBAAiB,IAAI,WAAW;QAC/C,KAAK,EAAE,OAAO,EAAE,mBAAmB,IAAI,WAAW;KACnD,CAAC,CAAC,CAAC;IAEJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAA6B,EAAE,QAAgB,EAAE,KAAa;IACxH,MAAM,MAAM,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvE,MAAM,OAAO,GAAG,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK;QACvE,CAAC,CAAC,IAAA,QAAC,EAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,IAAA,sCAAwB,EAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QACxG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED,2FAA2F;AAC3F,SAAgB,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAuB,EAAE,QAAgB;IAC/G,MAAM,KAAK,GAAG,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,IAAI,OAAO,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3H,OAAO,KAAK,CAAC;AACf,CAAC;AAWD;;;;;;;;;;;;;;GAcG;AACH,SAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,cAAc,GACW;IACzB,OAAO,YAAY,IAAI,YAAY,IAAI,cAAc,IAAI,IAAI,CAAC;AAChE,CAAC"}
@@ -81,6 +81,29 @@ export declare function listTimezoneRegions(): string[];
81
81
  * of killing the handler.
82
82
  */
83
83
  export declare function getTimezonesForRegion(region: string): string[];
84
+ /** @description A calendar date and wall-clock time, as some zone reads them (`month` 1–12). */
85
+ export interface ZonedWallClock {
86
+ year: number;
87
+ month: number;
88
+ day: number;
89
+ hour: number;
90
+ minute: number;
91
+ }
92
+ /**
93
+ * @description The zone's calendar date and wall clock at `atMs`. Throws `RangeError` for an unknown zone — callers
94
+ * validate with {@link getCanonicalTimezone} first.
95
+ */
96
+ export declare function getZonedWallClock(timezone: string, atMs: number): ZonedWallClock & {
97
+ second: number;
98
+ };
99
+ /** @description The zone's offset from UTC at `atMs`, in ms (positive east of Greenwich), daylight saving included. */
100
+ export declare function getZoneOffsetMsAt(timezone: string, atMs: number): number;
101
+ /**
102
+ * @description The instant at which `timezone` reads the wall clock `clock`. Two passes, because the offset at a first
103
+ * guess can differ from the offset at the answer across a daylight-saving change; a date past the month's end rolls
104
+ * over (`day: 32` is the next month's first), which is how a caller asks for "the next day".
105
+ */
106
+ export declare function getEpochMsOfZonedWallClock(timezone: string, clock: ZonedWallClock): number;
84
107
  /**
85
108
  * @description The zone's current wall clock as `18:42 (+03:00)` — the tail of
86
109
  * every `/timezone` confirmation and of the `/status` zone row, so a wrong pick
@@ -1 +1 @@
1
- {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA+CH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAO9C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAmDD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE1E"}
1
+ {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA+CH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAO9C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAmDD,gGAAgG;AAChG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAarG;AAED,uHAAuH;AACvH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAI1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE1E"}
@@ -29,6 +29,9 @@ exports.checkIsApplicableTimezone = checkIsApplicableTimezone;
29
29
  exports.getTimezoneRegion = getTimezoneRegion;
30
30
  exports.listTimezoneRegions = listTimezoneRegions;
31
31
  exports.getTimezonesForRegion = getTimezonesForRegion;
32
+ exports.getZonedWallClock = getZonedWallClock;
33
+ exports.getZoneOffsetMsAt = getZoneOffsetMsAt;
34
+ exports.getEpochMsOfZonedWallClock = getEpochMsOfZonedWallClock;
32
35
  exports.formatZoneNow = formatZoneNow;
33
36
  exports.formatZoneNowWithDate = formatZoneNowWithDate;
34
37
  exports.applyProcessTimezone = applyProcessTimezone;
@@ -216,6 +219,41 @@ function getZoneClockParts(timezone, nowMs) {
216
219
  offset: numericOffset === '' ? zeroOffset : numericOffset,
217
220
  };
218
221
  }
222
+ const msPerSecond = 1000;
223
+ /**
224
+ * @description The zone's calendar date and wall clock at `atMs`. Throws `RangeError` for an unknown zone — callers
225
+ * validate with {@link getCanonicalTimezone} first.
226
+ */
227
+ function getZonedWallClock(timezone, atMs) {
228
+ const parts = new Intl.DateTimeFormat('en-US', {
229
+ timeZone: timezone,
230
+ year: 'numeric',
231
+ month: '2-digit',
232
+ day: '2-digit',
233
+ hour: '2-digit',
234
+ minute: '2-digit',
235
+ second: '2-digit',
236
+ hourCycle: 'h23',
237
+ }).formatToParts(new Date(atMs));
238
+ const read = (type) => Number(parts.find((part) => part.type === type)?.value);
239
+ return { year: read('year'), month: read('month'), day: read('day'), hour: read('hour'), minute: read('minute'), second: read('second') };
240
+ }
241
+ /** @description The zone's offset from UTC at `atMs`, in ms (positive east of Greenwich), daylight saving included. */
242
+ function getZoneOffsetMsAt(timezone, atMs) {
243
+ const wholeSecondMs = Math.floor(atMs / msPerSecond) * msPerSecond;
244
+ const clock = getZonedWallClock(timezone, wholeSecondMs);
245
+ return Date.UTC(clock.year, clock.month - 1, clock.day, clock.hour, clock.minute, clock.second) - wholeSecondMs;
246
+ }
247
+ /**
248
+ * @description The instant at which `timezone` reads the wall clock `clock`. Two passes, because the offset at a first
249
+ * guess can differ from the offset at the answer across a daylight-saving change; a date past the month's end rolls
250
+ * over (`day: 32` is the next month's first), which is how a caller asks for "the next day".
251
+ */
252
+ function getEpochMsOfZonedWallClock(timezone, clock) {
253
+ const wallAsUtcMs = Date.UTC(clock.year, clock.month - 1, clock.day, clock.hour, clock.minute);
254
+ const firstGuessMs = wallAsUtcMs - getZoneOffsetMsAt(timezone, wallAsUtcMs);
255
+ return wallAsUtcMs - getZoneOffsetMsAt(timezone, firstGuessMs);
256
+ }
219
257
  /**
220
258
  * @description The zone's current wall clock as `18:42 (+03:00)` — the tail of
221
259
  * every `/timezone` confirmation and of the `/status` zone row, so a wrong pick
@@ -1 +1 @@
1
- {"version":3,"file":"timezone.js","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timezone.js","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  /**
2
- * @description Voice-note transcription against a Whisper-compatible HTTP API
3
- * (Groq when its key is set, else OpenAI), with automatic retries on transient
4
- * failures.
2
+ * @description Voice-note transcription against an OpenAI-compatible
3
+ * `/audio/transcriptions` HTTP API (Groq, OpenAI, a custom server or the local
4
+ * GigaAM sidecar), with automatic retries on transient failures. Which engine
5
+ * answers, and in which order, is decided by `../stt/transcribeChain`.
5
6
  *
6
7
  * Extracted from `bot.ts` so it is side-effect-free and testable against a
7
8
  * local HTTP server (importing `bot.ts` would construct a Telegraf instance and
@@ -21,8 +22,11 @@ export declare const transcribeRetryDelaysMs: readonly number[];
21
22
  */
22
23
  export interface TranscriptionEndpoint {
23
24
  url: string;
24
- apiKey: string;
25
+ /** Sent as a bearer token; a keyless custom server has none. */
26
+ apiKey?: string;
25
27
  model: string;
28
+ /** ISO-639-1 hint (`ru`); absent → the engine detects the language itself, and no field is sent. */
29
+ language?: string;
26
30
  }
27
31
  /**
28
32
  * @description Whether a failed attempt is worth repeating: `transient`
@@ -37,6 +41,7 @@ export type TranscribeResult = {
37
41
  } | {
38
42
  ok: false;
39
43
  error: string;
44
+ isDefinitive?: true;
40
45
  };
41
46
  /**
42
47
  * @description Details of a failed attempt that is about to be retried.
@@ -55,15 +60,23 @@ export interface TranscribeAudioOptions {
55
60
  retryDelaysMs?: readonly number[];
56
61
  /** Fired before each retry, e.g. to tell the user a retry is coming. */
57
62
  onRetry?: (info: TranscribeRetryInfo) => void;
63
+ /**
64
+ * The endpoint to use for the next attempt, asked for before every RETRY. An engine backed by a process may have
65
+ * restarted on another port since the first attempt: a retry on the old endpoint would hit a refused port. A
66
+ * rejection ends the attempts with its message.
67
+ */
68
+ refreshEndpoint?: () => Promise<TranscriptionEndpoint>;
58
69
  }
59
- /**
60
- * @description Pick the transcription provider from the configured API keys:
61
- * Groq wins when both are set; `null` when neither is.
62
- */
63
- export declare function getTranscriptionEndpoint(apiKeys: {
64
- groqApiKey?: string;
65
- openaiApiKey?: string;
66
- }): TranscriptionEndpoint | null;
70
+ /** @description The Groq Whisper endpoint for `apiKey`. */
71
+ export declare function createGroqEndpoint(apiKey: string): TranscriptionEndpoint;
72
+ /** @description The OpenAI Whisper endpoint for `apiKey`. */
73
+ export declare function createOpenAiEndpoint(apiKey: string): TranscriptionEndpoint;
74
+ /** @description A custom OpenAI-compatible server; `model` defaults to `whisper-1`. */
75
+ export declare function createCustomEndpoint(input: {
76
+ url: string;
77
+ apiKey?: string;
78
+ model?: string;
79
+ }): TranscriptionEndpoint;
67
80
  /**
68
81
  * @description Classify a non-2xx HTTP status of the transcription API.
69
82
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transcribeAudio.d.ts","sourceRoot":"","sources":["../../src/utils/transcribeAudio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAoB,CAAC;AAe1E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMjC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,qBAAqB,GAAG,IAAI,CAQ/B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,qBAAqB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,MAAM,GAAG,IAAI,CAQhB;AA6GD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAqB3B"}
1
+ {"version":3,"file":"transcribeAudio.d.ts","sourceRoot":"","sources":["../../src/utils/transcribeAudio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAoB,CAAC;AAe1E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAMtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACxD;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAExE;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAE1E;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,CAEnH;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,qBAAqB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,MAAM,GAAG,IAAI,CAQhB;AAkHD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  /**
3
- * @description Voice-note transcription against a Whisper-compatible HTTP API
4
- * (Groq when its key is set, else OpenAI), with automatic retries on transient
5
- * failures.
3
+ * @description Voice-note transcription against an OpenAI-compatible
4
+ * `/audio/transcriptions` HTTP API (Groq, OpenAI, a custom server or the local
5
+ * GigaAM sidecar), with automatic retries on transient failures. Which engine
6
+ * answers, and in which order, is decided by `../stt/transcribeChain`.
6
7
  *
7
8
  * Extracted from `bot.ts` so it is side-effect-free and testable against a
8
9
  * local HTTP server (importing `bot.ts` would construct a Telegraf instance and
@@ -53,7 +54,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
53
54
  };
54
55
  Object.defineProperty(exports, "__esModule", { value: true });
55
56
  exports.transcribeRetryDelaysMs = void 0;
56
- exports.getTranscriptionEndpoint = getTranscriptionEndpoint;
57
+ exports.createGroqEndpoint = createGroqEndpoint;
58
+ exports.createOpenAiEndpoint = createOpenAiEndpoint;
59
+ exports.createCustomEndpoint = createCustomEndpoint;
57
60
  exports.getTranscribeFailureKind = getTranscribeFailureKind;
58
61
  exports.getTranscribeRetryDelayMs = getTranscribeRetryDelayMs;
59
62
  exports.transcribeAudio = transcribeAudio;
@@ -78,18 +81,17 @@ const firstServerErrorStatus = 500;
78
81
  */
79
82
  const retryableClientErrorStatuses = new Set([408, 409]);
80
83
  const errorBodyPreviewLength = 500;
81
- /**
82
- * @description Pick the transcription provider from the configured API keys:
83
- * Groq wins when both are set; `null` when neither is.
84
- */
85
- function getTranscriptionEndpoint(apiKeys) {
86
- if (apiKeys.groqApiKey) {
87
- return { url: groqTranscriptionUrl, apiKey: apiKeys.groqApiKey, model: groqTranscriptionModel };
88
- }
89
- if (apiKeys.openaiApiKey) {
90
- return { url: openAiTranscriptionUrl, apiKey: apiKeys.openaiApiKey, model: openAiTranscriptionModel };
91
- }
92
- return null;
84
+ /** @description The Groq Whisper endpoint for `apiKey`. */
85
+ function createGroqEndpoint(apiKey) {
86
+ return { url: groqTranscriptionUrl, apiKey, model: groqTranscriptionModel };
87
+ }
88
+ /** @description The OpenAI Whisper endpoint for `apiKey`. */
89
+ function createOpenAiEndpoint(apiKey) {
90
+ return { url: openAiTranscriptionUrl, apiKey, model: openAiTranscriptionModel };
91
+ }
92
+ /** @description A custom OpenAI-compatible server; `model` defaults to `whisper-1`. */
93
+ function createCustomEndpoint(input) {
94
+ return { url: input.url, apiKey: input.apiKey, model: input.model ?? openAiTranscriptionModel };
93
95
  }
94
96
  /**
95
97
  * @description Classify a non-2xx HTTP status of the transcription API.
@@ -147,10 +149,10 @@ async function transcribeAudioOnce(filePath, endpoint, timeoutMs) {
147
149
  fileSize = (await fs_1.promises.stat(filePath)).size;
148
150
  }
149
151
  catch (e) {
150
- return { ok: false, error: `stat failed: ${e instanceof Error ? e.message : e}`, failureKind: 'permanent' };
152
+ return { ok: false, error: `stat failed: ${e instanceof Error ? e.message : e}`, failureKind: 'permanent', isDefinitive: true };
151
153
  }
152
154
  if (fileSize === 0)
153
- return { ok: false, error: 'downloaded audio is empty', failureKind: 'permanent' };
155
+ return { ok: false, error: 'downloaded audio is empty', failureKind: 'permanent', isDefinitive: true };
154
156
  const form = new form_data_1.default();
155
157
  // Explicit filename + content-type: form-data's auto-detection from the
156
158
  // ReadStream's path usually works, but some intermediaries strip
@@ -160,6 +162,8 @@ async function transcribeAudioOnce(filePath, endpoint, timeoutMs) {
160
162
  contentType: 'audio/ogg',
161
163
  });
162
164
  form.append('model', endpoint.model);
165
+ if (endpoint.language)
166
+ form.append('language', endpoint.language);
163
167
  const url = new URL(endpoint.url);
164
168
  const client = url.protocol === 'https:' ? https : http;
165
169
  return new Promise((resolve) => {
@@ -169,7 +173,10 @@ async function transcribeAudioOnce(filePath, endpoint, timeoutMs) {
169
173
  // voice-message path indefinitely.
170
174
  const req = client.request(url, {
171
175
  method: 'POST',
172
- headers: { ...form.getHeaders(), Authorization: `Bearer ${endpoint.apiKey}` },
176
+ headers: {
177
+ ...form.getHeaders(),
178
+ ...(endpoint.apiKey ? { Authorization: `Bearer ${endpoint.apiKey}` } : {}),
179
+ },
173
180
  }, (res) => {
174
181
  // Decode across chunk boundaries: per-chunk `toString()` garbled a
175
182
  // multi-byte character (e.g. Cyrillic) split between two chunks.
@@ -199,7 +206,8 @@ async function transcribeAudioOnce(filePath, endpoint, timeoutMs) {
199
206
  resolve({ ok: true, text: json.text });
200
207
  return;
201
208
  }
202
- resolve({ ok: false, error: 'transcription returned empty text', failureKind: 'permanent' });
209
+ // Definitive: Groq hallucinates on silence, so another engine's text would not be more true.
210
+ resolve({ ok: false, error: 'transcription returned empty text', failureKind: 'permanent', isDefinitive: true });
203
211
  }
204
212
  catch {
205
213
  resolve({
@@ -225,8 +233,9 @@ async function transcribeAudioOnce(filePath, endpoint, timeoutMs) {
225
233
  * the LAST error (annotated with the attempt count once a retry happened).
226
234
  */
227
235
  async function transcribeAudio(filePath, endpoint, options) {
236
+ let currentEndpoint = endpoint;
228
237
  for (let retryIndex = 0;; retryIndex++) {
229
- const attempt = await transcribeAudioOnce(filePath, endpoint, options.timeoutMs);
238
+ const attempt = await transcribeAudioOnce(filePath, currentEndpoint, options.timeoutMs);
230
239
  if (attempt.ok)
231
240
  return attempt;
232
241
  const delayMs = getTranscribeRetryDelayMs({
@@ -240,10 +249,19 @@ async function transcribeAudio(filePath, endpoint, options) {
240
249
  return {
241
250
  ok: false,
242
251
  error: attemptCount > 1 ? `${attempt.error} (after ${attemptCount} attempts)` : attempt.error,
252
+ ...(attempt.isDefinitive ? { isDefinitive: true } : {}),
243
253
  };
244
254
  }
245
255
  options.onRetry?.({ attemptNumber: attemptCount, error: attempt.error, delayMs });
246
256
  await new Promise((resolve) => setTimeout(resolve, delayMs));
257
+ if (options.refreshEndpoint) {
258
+ try {
259
+ currentEndpoint = await options.refreshEndpoint();
260
+ }
261
+ catch (e) {
262
+ return { ok: false, error: e instanceof Error ? e.message : 'the endpoint could not be refreshed' };
263
+ }
264
+ }
247
265
  }
248
266
  }
249
267
  //# sourceMappingURL=transcribeAudio.js.map