charness 0.0.0-stage → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (988) hide show
  1. package/.env.example +88 -0
  2. package/DEVELOPMENT.md +110 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION_1_TO_2.md +24 -0
  5. package/README.md +1024 -2
  6. package/dist/accessControl.d.ts +71 -0
  7. package/dist/accessControl.d.ts.map +1 -0
  8. package/dist/accessControl.js +108 -0
  9. package/dist/accessControl.js.map +1 -0
  10. package/dist/adapters/adapterEventRouting.d.ts +51 -0
  11. package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
  12. package/dist/adapters/adapterEventRouting.js +74 -0
  13. package/dist/adapters/adapterEventRouting.js.map +1 -0
  14. package/dist/adapters/adapterNames.d.ts +19 -0
  15. package/dist/adapters/adapterNames.d.ts.map +1 -0
  16. package/dist/adapters/adapterNames.js +25 -0
  17. package/dist/adapters/adapterNames.js.map +1 -0
  18. package/dist/adapters/claudeCliAdapter.d.ts +1336 -0
  19. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
  20. package/dist/adapters/claudeCliAdapter.js +4204 -0
  21. package/dist/adapters/claudeCliAdapter.js.map +1 -0
  22. package/dist/adapters/claudeJsonStreamAdapter.d.ts +548 -0
  23. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
  24. package/dist/adapters/claudeJsonStreamAdapter.js +1810 -0
  25. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
  26. package/dist/adapters/claudePlatformFlags.d.ts +35 -0
  27. package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
  28. package/dist/adapters/claudePlatformFlags.js +46 -0
  29. package/dist/adapters/claudePlatformFlags.js.map +1 -0
  30. package/dist/adapters/createAdapter.d.ts +252 -0
  31. package/dist/adapters/createAdapter.d.ts.map +1 -0
  32. package/dist/adapters/createAdapter.js +475 -0
  33. package/dist/adapters/createAdapter.js.map +1 -0
  34. package/dist/adapters/openCodeAdapter.d.ts +1446 -0
  35. package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
  36. package/dist/adapters/openCodeAdapter.js +4540 -0
  37. package/dist/adapters/openCodeAdapter.js.map +1 -0
  38. package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
  39. package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
  40. package/dist/adapters/sessionLaunchDefaults.js +15 -0
  41. package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
  42. package/dist/adapters/terminalAdapter.d.ts +68 -0
  43. package/dist/adapters/terminalAdapter.d.ts.map +1 -0
  44. package/dist/adapters/terminalAdapter.js +371 -0
  45. package/dist/adapters/terminalAdapter.js.map +1 -0
  46. package/dist/agentLogin/agentLogin.d.ts +31 -0
  47. package/dist/agentLogin/agentLogin.d.ts.map +1 -0
  48. package/dist/agentLogin/agentLogin.js +493 -0
  49. package/dist/agentLogin/agentLogin.js.map +1 -0
  50. package/dist/agentTrigger.d.ts +28 -0
  51. package/dist/agentTrigger.d.ts.map +1 -0
  52. package/dist/agentTrigger.js +53 -0
  53. package/dist/agentTrigger.js.map +1 -0
  54. package/dist/apiErrorRetry.d.ts +209 -0
  55. package/dist/apiErrorRetry.d.ts.map +1 -0
  56. package/dist/apiErrorRetry.js +351 -0
  57. package/dist/apiErrorRetry.js.map +1 -0
  58. package/dist/apiRetryKick.d.ts +148 -0
  59. package/dist/apiRetryKick.d.ts.map +1 -0
  60. package/dist/apiRetryKick.js +158 -0
  61. package/dist/apiRetryKick.js.map +1 -0
  62. package/dist/bootClassifier.d.ts +46 -0
  63. package/dist/bootClassifier.d.ts.map +1 -0
  64. package/dist/bootClassifier.js +43 -0
  65. package/dist/bootClassifier.js.map +1 -0
  66. package/dist/bot.d.ts +207 -0
  67. package/dist/bot.d.ts.map +1 -0
  68. package/dist/bot.js +10611 -0
  69. package/dist/bot.js.map +1 -0
  70. package/dist/botFileStorage.d.ts +60 -0
  71. package/dist/botFileStorage.d.ts.map +1 -0
  72. package/dist/botFileStorage.js +205 -0
  73. package/dist/botFileStorage.js.map +1 -0
  74. package/dist/cli/applyDnsFix.d.ts +7 -0
  75. package/dist/cli/applyDnsFix.d.ts.map +1 -0
  76. package/dist/cli/applyDnsFix.js +46 -0
  77. package/dist/cli/applyDnsFix.js.map +1 -0
  78. package/dist/cli/bot.d.ts +27 -0
  79. package/dist/cli/bot.d.ts.map +1 -0
  80. package/dist/cli/bot.js +98 -0
  81. package/dist/cli/bot.js.map +1 -0
  82. package/dist/cli/botEntry.d.ts +3 -0
  83. package/dist/cli/botEntry.d.ts.map +1 -0
  84. package/dist/cli/botEntry.js +11 -0
  85. package/dist/cli/botEntry.js.map +1 -0
  86. package/dist/cli/connectorGuards.d.ts +31 -0
  87. package/dist/cli/connectorGuards.d.ts.map +1 -0
  88. package/dist/cli/connectorGuards.js +159 -0
  89. package/dist/cli/connectorGuards.js.map +1 -0
  90. package/dist/cli/envLoader.d.ts +34 -0
  91. package/dist/cli/envLoader.d.ts.map +1 -0
  92. package/dist/cli/envLoader.js +132 -0
  93. package/dist/cli/envLoader.js.map +1 -0
  94. package/dist/cli/hot.d.ts +82 -0
  95. package/dist/cli/hot.d.ts.map +1 -0
  96. package/dist/cli/hot.js +323 -0
  97. package/dist/cli/hot.js.map +1 -0
  98. package/dist/cli.d.ts +3 -0
  99. package/dist/cli.d.ts.map +1 -0
  100. package/dist/cli.js +130 -0
  101. package/dist/cli.js.map +1 -0
  102. package/dist/connectors/jira/adf.d.ts +72 -0
  103. package/dist/connectors/jira/adf.d.ts.map +1 -0
  104. package/dist/connectors/jira/adf.js +407 -0
  105. package/dist/connectors/jira/adf.js.map +1 -0
  106. package/dist/connectors/jira/agentBinaries.d.ts +14 -0
  107. package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
  108. package/dist/connectors/jira/agentBinaries.js +75 -0
  109. package/dist/connectors/jira/agentBinaries.js.map +1 -0
  110. package/dist/connectors/jira/answerSink.d.ts +52 -0
  111. package/dist/connectors/jira/answerSink.d.ts.map +1 -0
  112. package/dist/connectors/jira/answerSink.js +220 -0
  113. package/dist/connectors/jira/answerSink.js.map +1 -0
  114. package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
  115. package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
  116. package/dist/connectors/jira/attachmentDownload.js +92 -0
  117. package/dist/connectors/jira/attachmentDownload.js.map +1 -0
  118. package/dist/connectors/jira/attachmentTool.d.ts +43 -0
  119. package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
  120. package/dist/connectors/jira/attachmentTool.js +150 -0
  121. package/dist/connectors/jira/attachmentTool.js.map +1 -0
  122. package/dist/connectors/jira/client.d.ts +490 -0
  123. package/dist/connectors/jira/client.d.ts.map +1 -0
  124. package/dist/connectors/jira/client.js +453 -0
  125. package/dist/connectors/jira/client.js.map +1 -0
  126. package/dist/connectors/jira/config.d.ts +117 -0
  127. package/dist/connectors/jira/config.d.ts.map +1 -0
  128. package/dist/connectors/jira/config.js +350 -0
  129. package/dist/connectors/jira/config.js.map +1 -0
  130. package/dist/connectors/jira/configFile.d.ts +10 -0
  131. package/dist/connectors/jira/configFile.d.ts.map +1 -0
  132. package/dist/connectors/jira/configFile.js +50 -0
  133. package/dist/connectors/jira/configFile.js.map +1 -0
  134. package/dist/connectors/jira/connector.d.ts +68 -0
  135. package/dist/connectors/jira/connector.d.ts.map +1 -0
  136. package/dist/connectors/jira/connector.js +257 -0
  137. package/dist/connectors/jira/connector.js.map +1 -0
  138. package/dist/connectors/jira/contextLedger.d.ts +59 -0
  139. package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
  140. package/dist/connectors/jira/contextLedger.js +194 -0
  141. package/dist/connectors/jira/contextLedger.js.map +1 -0
  142. package/dist/connectors/jira/contextPreamble.d.ts +18 -0
  143. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
  144. package/dist/connectors/jira/contextPreamble.js +31 -0
  145. package/dist/connectors/jira/contextPreamble.js.map +1 -0
  146. package/dist/connectors/jira/inbound.d.ts +132 -0
  147. package/dist/connectors/jira/inbound.d.ts.map +1 -0
  148. package/dist/connectors/jira/inbound.js +316 -0
  149. package/dist/connectors/jira/inbound.js.map +1 -0
  150. package/dist/connectors/jira/issueBlocks.d.ts +51 -0
  151. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
  152. package/dist/connectors/jira/issueBlocks.js +182 -0
  153. package/dist/connectors/jira/issueBlocks.js.map +1 -0
  154. package/dist/connectors/jira/issueContext.d.ts +25 -0
  155. package/dist/connectors/jira/issueContext.d.ts.map +1 -0
  156. package/dist/connectors/jira/issueContext.js +53 -0
  157. package/dist/connectors/jira/issueContext.js.map +1 -0
  158. package/dist/connectors/jira/issueDelta.d.ts +35 -0
  159. package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
  160. package/dist/connectors/jira/issueDelta.js +50 -0
  161. package/dist/connectors/jira/issueDelta.js.map +1 -0
  162. package/dist/connectors/jira/mediaPlaceholders.d.ts +20 -0
  163. package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
  164. package/dist/connectors/jira/mediaPlaceholders.js +92 -0
  165. package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
  166. package/dist/connectors/jira/outbound.d.ts +6 -0
  167. package/dist/connectors/jira/outbound.d.ts.map +1 -0
  168. package/dist/connectors/jira/outbound.js +38 -0
  169. package/dist/connectors/jira/outbound.js.map +1 -0
  170. package/dist/connectors/jira/prompt.d.ts +37 -0
  171. package/dist/connectors/jira/prompt.d.ts.map +1 -0
  172. package/dist/connectors/jira/prompt.js +99 -0
  173. package/dist/connectors/jira/prompt.js.map +1 -0
  174. package/dist/connectors/jira/promptSpill.d.ts +50 -0
  175. package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
  176. package/dist/connectors/jira/promptSpill.js +157 -0
  177. package/dist/connectors/jira/promptSpill.js.map +1 -0
  178. package/dist/connectors/jira/promptText.d.ts +7 -0
  179. package/dist/connectors/jira/promptText.d.ts.map +1 -0
  180. package/dist/connectors/jira/promptText.js +26 -0
  181. package/dist/connectors/jira/promptText.js.map +1 -0
  182. package/dist/connectors/jira/sessionKeyCodec.d.ts +16 -0
  183. package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
  184. package/dist/connectors/jira/sessionKeyCodec.js +101 -0
  185. package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
  186. package/dist/connectors/jira/trigger.d.ts +50 -0
  187. package/dist/connectors/jira/trigger.d.ts.map +1 -0
  188. package/dist/connectors/jira/trigger.js +93 -0
  189. package/dist/connectors/jira/trigger.js.map +1 -0
  190. package/dist/connectors/jira/triggerLog.d.ts +51 -0
  191. package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
  192. package/dist/connectors/jira/triggerLog.js +78 -0
  193. package/dist/connectors/jira/triggerLog.js.map +1 -0
  194. package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
  195. package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
  196. package/dist/connectors/jira/unconfirmedPosts.js +105 -0
  197. package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
  198. package/dist/connectors/telegram/answerSink.d.ts +46 -0
  199. package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
  200. package/dist/connectors/telegram/answerSink.js +71 -0
  201. package/dist/connectors/telegram/answerSink.js.map +1 -0
  202. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +31 -0
  203. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
  204. package/dist/connectors/telegram/commands/autoContinueLimits.js +142 -0
  205. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
  206. package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
  207. package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
  208. package/dist/connectors/telegram/commands/botCore.js +3 -0
  209. package/dist/connectors/telegram/commands/botCore.js.map +1 -0
  210. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  211. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
  212. package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
  213. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
  214. package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
  215. package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
  216. package/dist/connectors/telegram/commands/compaction.js +868 -0
  217. package/dist/connectors/telegram/commands/compaction.js.map +1 -0
  218. package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
  219. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
  220. package/dist/connectors/telegram/commands/displayModes.js +335 -0
  221. package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
  222. package/dist/connectors/telegram/commands/modelProviders.d.ts +95 -0
  223. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
  224. package/dist/connectors/telegram/commands/modelProviders.js +841 -0
  225. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
  226. package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
  227. package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
  228. package/dist/connectors/telegram/commands/reminders.js +624 -0
  229. package/dist/connectors/telegram/commands/reminders.js.map +1 -0
  230. package/dist/connectors/telegram/fileIntake.d.ts +166 -0
  231. package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
  232. package/dist/connectors/telegram/fileIntake.js +304 -0
  233. package/dist/connectors/telegram/fileIntake.js.map +1 -0
  234. package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
  235. package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
  236. package/dist/connectors/telegram/fileSendGateway.js +221 -0
  237. package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
  238. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
  239. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
  240. package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
  241. package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
  242. package/dist/connectors/telegram/inbound.d.ts +131 -0
  243. package/dist/connectors/telegram/inbound.d.ts.map +1 -0
  244. package/dist/connectors/telegram/inbound.js +278 -0
  245. package/dist/connectors/telegram/inbound.js.map +1 -0
  246. package/dist/connectors/telegram/languagePicker.d.ts +32 -0
  247. package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
  248. package/dist/connectors/telegram/languagePicker.js +55 -0
  249. package/dist/connectors/telegram/languagePicker.js.map +1 -0
  250. package/dist/connectors/telegram/messageSplit.d.ts +62 -0
  251. package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
  252. package/dist/connectors/telegram/messageSplit.js +119 -0
  253. package/dist/connectors/telegram/messageSplit.js.map +1 -0
  254. package/dist/connectors/telegram/outbound.d.ts +62 -0
  255. package/dist/connectors/telegram/outbound.d.ts.map +1 -0
  256. package/dist/connectors/telegram/outbound.js +116 -0
  257. package/dist/connectors/telegram/outbound.js.map +1 -0
  258. package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
  259. package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
  260. package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
  261. package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
  262. package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
  263. package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
  264. package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
  265. package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
  266. package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
  267. package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
  268. package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
  269. package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
  270. package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
  271. package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
  272. package/dist/connectors/telegram/outputFlushPlan.js +120 -0
  273. package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
  274. package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
  275. package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
  276. package/dist/connectors/telegram/questionKeyboards.js +37 -0
  277. package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
  278. package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
  279. package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
  280. package/dist/connectors/telegram/renderAgentHtml.js +97 -0
  281. package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
  282. package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
  283. package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
  284. package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
  285. package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
  286. package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
  287. package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
  288. package/dist/connectors/telegram/telegramCallGuard.js +35 -0
  289. package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
  290. package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
  291. package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
  292. package/dist/connectors/telegram/timezonePicker.js +142 -0
  293. package/dist/connectors/telegram/timezonePicker.js.map +1 -0
  294. package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
  295. package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
  296. package/dist/connectors/telegram/updateDispatcher.js +159 -0
  297. package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
  298. package/dist/connectors/test/connector.d.ts +52 -0
  299. package/dist/connectors/test/connector.d.ts.map +1 -0
  300. package/dist/connectors/test/connector.js +143 -0
  301. package/dist/connectors/test/connector.js.map +1 -0
  302. package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
  303. package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
  304. package/dist/connectors/test/sessionKeyCodec.js +50 -0
  305. package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
  306. package/dist/diagLog.d.ts +6 -0
  307. package/dist/diagLog.d.ts.map +1 -0
  308. package/dist/diagLog.js +58 -0
  309. package/dist/diagLog.js.map +1 -0
  310. package/dist/effortLevels.d.ts +68 -0
  311. package/dist/effortLevels.d.ts.map +1 -0
  312. package/dist/effortLevels.js +114 -0
  313. package/dist/effortLevels.js.map +1 -0
  314. package/dist/folderName.d.ts +42 -0
  315. package/dist/folderName.d.ts.map +1 -0
  316. package/dist/folderName.js +51 -0
  317. package/dist/folderName.js.map +1 -0
  318. package/dist/i18n/de.d.ts +2 -0
  319. package/dist/i18n/de.d.ts.map +1 -0
  320. package/dist/i18n/de.js +537 -0
  321. package/dist/i18n/de.js.map +1 -0
  322. package/dist/i18n/en.d.ts +7 -0
  323. package/dist/i18n/en.d.ts.map +1 -0
  324. package/dist/i18n/en.js +566 -0
  325. package/dist/i18n/en.js.map +1 -0
  326. package/dist/i18n/es.d.ts +2 -0
  327. package/dist/i18n/es.d.ts.map +1 -0
  328. package/dist/i18n/es.js +537 -0
  329. package/dist/i18n/es.js.map +1 -0
  330. package/dist/i18n/fr.d.ts +2 -0
  331. package/dist/i18n/fr.d.ts.map +1 -0
  332. package/dist/i18n/fr.js +537 -0
  333. package/dist/i18n/fr.js.map +1 -0
  334. package/dist/i18n/hi.d.ts +2 -0
  335. package/dist/i18n/hi.d.ts.map +1 -0
  336. package/dist/i18n/hi.js +537 -0
  337. package/dist/i18n/hi.js.map +1 -0
  338. package/dist/i18n/ja.d.ts +2 -0
  339. package/dist/i18n/ja.d.ts.map +1 -0
  340. package/dist/i18n/ja.js +537 -0
  341. package/dist/i18n/ja.js.map +1 -0
  342. package/dist/i18n/ka.d.ts +2 -0
  343. package/dist/i18n/ka.d.ts.map +1 -0
  344. package/dist/i18n/ka.js +537 -0
  345. package/dist/i18n/ka.js.map +1 -0
  346. package/dist/i18n/pt.d.ts +2 -0
  347. package/dist/i18n/pt.d.ts.map +1 -0
  348. package/dist/i18n/pt.js +537 -0
  349. package/dist/i18n/pt.js.map +1 -0
  350. package/dist/i18n/ru.d.ts +6 -0
  351. package/dist/i18n/ru.d.ts.map +1 -0
  352. package/dist/i18n/ru.js +540 -0
  353. package/dist/i18n/ru.js.map +1 -0
  354. package/dist/i18n/uk.d.ts +8 -0
  355. package/dist/i18n/uk.d.ts.map +1 -0
  356. package/dist/i18n/uk.js +542 -0
  357. package/dist/i18n/uk.js.map +1 -0
  358. package/dist/i18n/uz.d.ts +2 -0
  359. package/dist/i18n/uz.d.ts.map +1 -0
  360. package/dist/i18n/uz.js +537 -0
  361. package/dist/i18n/uz.js.map +1 -0
  362. package/dist/i18n/zh.d.ts +2 -0
  363. package/dist/i18n/zh.d.ts.map +1 -0
  364. package/dist/i18n/zh.js +537 -0
  365. package/dist/i18n/zh.js.map +1 -0
  366. package/dist/i18n.d.ts +115 -0
  367. package/dist/i18n.d.ts.map +1 -0
  368. package/dist/i18n.js +233 -0
  369. package/dist/i18n.js.map +1 -0
  370. package/dist/index.d.ts +3 -0
  371. package/dist/index.d.ts.map +1 -0
  372. package/dist/index.js +10 -0
  373. package/dist/index.js.map +1 -0
  374. package/dist/installManager.d.ts +99 -0
  375. package/dist/installManager.d.ts.map +1 -0
  376. package/dist/installManager.js +943 -0
  377. package/dist/installManager.js.map +1 -0
  378. package/dist/instanceLock.d.ts +161 -0
  379. package/dist/instanceLock.d.ts.map +1 -0
  380. package/dist/instanceLock.js +388 -0
  381. package/dist/instanceLock.js.map +1 -0
  382. package/dist/mcpConfig.d.ts +76 -0
  383. package/dist/mcpConfig.d.ts.map +1 -0
  384. package/dist/mcpConfig.js +270 -0
  385. package/dist/mcpConfig.js.map +1 -0
  386. package/dist/openCodeOpenQuestion.d.ts +44 -0
  387. package/dist/openCodeOpenQuestion.d.ts.map +1 -0
  388. package/dist/openCodeOpenQuestion.js +64 -0
  389. package/dist/openCodeOpenQuestion.js.map +1 -0
  390. package/dist/openCodeQuestionFlow.d.ts +105 -0
  391. package/dist/openCodeQuestionFlow.d.ts.map +1 -0
  392. package/dist/openCodeQuestionFlow.js +143 -0
  393. package/dist/openCodeQuestionFlow.js.map +1 -0
  394. package/dist/openCodeSessionRouting.d.ts +133 -0
  395. package/dist/openCodeSessionRouting.d.ts.map +1 -0
  396. package/dist/openCodeSessionRouting.js +253 -0
  397. package/dist/openCodeSessionRouting.js.map +1 -0
  398. package/dist/openCodeSessionTitle.d.ts +50 -0
  399. package/dist/openCodeSessionTitle.d.ts.map +1 -0
  400. package/dist/openCodeSessionTitle.js +84 -0
  401. package/dist/openCodeSessionTitle.js.map +1 -0
  402. package/dist/outputTrace.d.ts +108 -0
  403. package/dist/outputTrace.d.ts.map +1 -0
  404. package/dist/outputTrace.js +430 -0
  405. package/dist/outputTrace.js.map +1 -0
  406. package/dist/pendingQuestionRepost.d.ts +47 -0
  407. package/dist/pendingQuestionRepost.d.ts.map +1 -0
  408. package/dist/pendingQuestionRepost.js +29 -0
  409. package/dist/pendingQuestionRepost.js.map +1 -0
  410. package/dist/pinnedStatus.d.ts +52 -0
  411. package/dist/pinnedStatus.d.ts.map +1 -0
  412. package/dist/pinnedStatus.js +36 -0
  413. package/dist/pinnedStatus.js.map +1 -0
  414. package/dist/platform/answerSink.d.ts +93 -0
  415. package/dist/platform/answerSink.d.ts.map +1 -0
  416. package/dist/platform/answerSink.js +31 -0
  417. package/dist/platform/answerSink.js.map +1 -0
  418. package/dist/platform/capabilityFallback.d.ts +39 -0
  419. package/dist/platform/capabilityFallback.d.ts.map +1 -0
  420. package/dist/platform/capabilityFallback.js +55 -0
  421. package/dist/platform/capabilityFallback.js.map +1 -0
  422. package/dist/platform/commandRouter.d.ts +51 -0
  423. package/dist/platform/commandRouter.d.ts.map +1 -0
  424. package/dist/platform/commandRouter.js +53 -0
  425. package/dist/platform/commandRouter.js.map +1 -0
  426. package/dist/platform/connectorSet.d.ts +39 -0
  427. package/dist/platform/connectorSet.d.ts.map +1 -0
  428. package/dist/platform/connectorSet.js +55 -0
  429. package/dist/platform/connectorSet.js.map +1 -0
  430. package/dist/platform/inbound.d.ts +147 -0
  431. package/dist/platform/inbound.d.ts.map +1 -0
  432. package/dist/platform/inbound.js +18 -0
  433. package/dist/platform/inbound.js.map +1 -0
  434. package/dist/platform/outbound.d.ts +225 -0
  435. package/dist/platform/outbound.d.ts.map +1 -0
  436. package/dist/platform/outbound.js +30 -0
  437. package/dist/platform/outbound.js.map +1 -0
  438. package/dist/platform/unservedStateGuard.d.ts +27 -0
  439. package/dist/platform/unservedStateGuard.d.ts.map +1 -0
  440. package/dist/platform/unservedStateGuard.js +42 -0
  441. package/dist/platform/unservedStateGuard.js.map +1 -0
  442. package/dist/postToSession.d.ts +94 -0
  443. package/dist/postToSession.d.ts.map +1 -0
  444. package/dist/postToSession.js +56 -0
  445. package/dist/postToSession.js.map +1 -0
  446. package/dist/progressLine.d.ts +180 -0
  447. package/dist/progressLine.d.ts.map +1 -0
  448. package/dist/progressLine.js +293 -0
  449. package/dist/progressLine.js.map +1 -0
  450. package/dist/rateLimiter.d.ts +246 -0
  451. package/dist/rateLimiter.d.ts.map +1 -0
  452. package/dist/rateLimiter.js +555 -0
  453. package/dist/rateLimiter.js.map +1 -0
  454. package/dist/requests/answerRequest.d.ts +57 -0
  455. package/dist/requests/answerRequest.d.ts.map +1 -0
  456. package/dist/requests/answerRequest.js +96 -0
  457. package/dist/requests/answerRequest.js.map +1 -0
  458. package/dist/requests/answerTail.d.ts +83 -0
  459. package/dist/requests/answerTail.d.ts.map +1 -0
  460. package/dist/requests/answerTail.js +102 -0
  461. package/dist/requests/answerTail.js.map +1 -0
  462. package/dist/requests/limitWaitAnswer.d.ts +87 -0
  463. package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
  464. package/dist/requests/limitWaitAnswer.js +83 -0
  465. package/dist/requests/limitWaitAnswer.js.map +1 -0
  466. package/dist/requests/requestGroup.d.ts +44 -0
  467. package/dist/requests/requestGroup.d.ts.map +1 -0
  468. package/dist/requests/requestGroup.js +63 -0
  469. package/dist/requests/requestGroup.js.map +1 -0
  470. package/dist/requests/requestHeader.d.ts +70 -0
  471. package/dist/requests/requestHeader.d.ts.map +1 -0
  472. package/dist/requests/requestHeader.js +83 -0
  473. package/dist/requests/requestHeader.js.map +1 -0
  474. package/dist/requests/requestLedger.d.ts +217 -0
  475. package/dist/requests/requestLedger.d.ts.map +1 -0
  476. package/dist/requests/requestLedger.js +468 -0
  477. package/dist/requests/requestLedger.js.map +1 -0
  478. package/dist/requests/sessionTurnProbe.d.ts +52 -0
  479. package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
  480. package/dist/requests/sessionTurnProbe.js +29 -0
  481. package/dist/requests/sessionTurnProbe.js.map +1 -0
  482. package/dist/requests/types.d.ts +181 -0
  483. package/dist/requests/types.d.ts.map +1 -0
  484. package/dist/requests/types.js +9 -0
  485. package/dist/requests/types.js.map +1 -0
  486. package/dist/requests/wakeUpEngine.d.ts +160 -0
  487. package/dist/requests/wakeUpEngine.d.ts.map +1 -0
  488. package/dist/requests/wakeUpEngine.js +399 -0
  489. package/dist/requests/wakeUpEngine.js.map +1 -0
  490. package/dist/requests/wakeUpRules.d.ts +151 -0
  491. package/dist/requests/wakeUpRules.d.ts.map +1 -0
  492. package/dist/requests/wakeUpRules.js +167 -0
  493. package/dist/requests/wakeUpRules.js.map +1 -0
  494. package/dist/resumeContext.d.ts +87 -0
  495. package/dist/resumeContext.d.ts.map +1 -0
  496. package/dist/resumeContext.js +114 -0
  497. package/dist/resumeContext.js.map +1 -0
  498. package/dist/scheduler/checkRun.d.ts +95 -0
  499. package/dist/scheduler/checkRun.d.ts.map +1 -0
  500. package/dist/scheduler/checkRun.js +172 -0
  501. package/dist/scheduler/checkRun.js.map +1 -0
  502. package/dist/scheduler/delivery.d.ts +99 -0
  503. package/dist/scheduler/delivery.d.ts.map +1 -0
  504. package/dist/scheduler/delivery.js +212 -0
  505. package/dist/scheduler/delivery.js.map +1 -0
  506. package/dist/scheduler/deliveryKind.d.ts +29 -0
  507. package/dist/scheduler/deliveryKind.d.ts.map +1 -0
  508. package/dist/scheduler/deliveryKind.js +39 -0
  509. package/dist/scheduler/deliveryKind.js.map +1 -0
  510. package/dist/scheduler/directoryThreads.d.ts +19 -0
  511. package/dist/scheduler/directoryThreads.d.ts.map +1 -0
  512. package/dist/scheduler/directoryThreads.js +28 -0
  513. package/dist/scheduler/directoryThreads.js.map +1 -0
  514. package/dist/scheduler/engine.d.ts +77 -0
  515. package/dist/scheduler/engine.d.ts.map +1 -0
  516. package/dist/scheduler/engine.js +337 -0
  517. package/dist/scheduler/engine.js.map +1 -0
  518. package/dist/scheduler/injection.d.ts +102 -0
  519. package/dist/scheduler/injection.d.ts.map +1 -0
  520. package/dist/scheduler/injection.js +122 -0
  521. package/dist/scheduler/injection.js.map +1 -0
  522. package/dist/scheduler/mcpBoot.d.ts +65 -0
  523. package/dist/scheduler/mcpBoot.d.ts.map +1 -0
  524. package/dist/scheduler/mcpBoot.js +60 -0
  525. package/dist/scheduler/mcpBoot.js.map +1 -0
  526. package/dist/scheduler/mcpSurface.d.ts +355 -0
  527. package/dist/scheduler/mcpSurface.d.ts.map +1 -0
  528. package/dist/scheduler/mcpSurface.js +1257 -0
  529. package/dist/scheduler/mcpSurface.js.map +1 -0
  530. package/dist/scheduler/rebindResume.d.ts +27 -0
  531. package/dist/scheduler/rebindResume.d.ts.map +1 -0
  532. package/dist/scheduler/rebindResume.js +17 -0
  533. package/dist/scheduler/rebindResume.js.map +1 -0
  534. package/dist/scheduler/recurrence.d.ts +58 -0
  535. package/dist/scheduler/recurrence.d.ts.map +1 -0
  536. package/dist/scheduler/recurrence.js +210 -0
  537. package/dist/scheduler/recurrence.js.map +1 -0
  538. package/dist/scheduler/runLedger.d.ts +59 -0
  539. package/dist/scheduler/runLedger.d.ts.map +1 -0
  540. package/dist/scheduler/runLedger.js +54 -0
  541. package/dist/scheduler/runLedger.js.map +1 -0
  542. package/dist/scheduler/store.d.ts +97 -0
  543. package/dist/scheduler/store.d.ts.map +1 -0
  544. package/dist/scheduler/store.js +124 -0
  545. package/dist/scheduler/store.js.map +1 -0
  546. package/dist/scheduler/timezoneRecompute.d.ts +61 -0
  547. package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
  548. package/dist/scheduler/timezoneRecompute.js +46 -0
  549. package/dist/scheduler/timezoneRecompute.js.map +1 -0
  550. package/dist/scheduler/types.d.ts +139 -0
  551. package/dist/scheduler/types.d.ts.map +1 -0
  552. package/dist/scheduler/types.js +8 -0
  553. package/dist/scheduler/types.js.map +1 -0
  554. package/dist/sendErrorClassifier.d.ts +45 -0
  555. package/dist/sendErrorClassifier.d.ts.map +1 -0
  556. package/dist/sendErrorClassifier.js +65 -0
  557. package/dist/sendErrorClassifier.js.map +1 -0
  558. package/dist/sessionKey.d.ts +136 -0
  559. package/dist/sessionKey.d.ts.map +1 -0
  560. package/dist/sessionKey.js +153 -0
  561. package/dist/sessionKey.js.map +1 -0
  562. package/dist/sessionPick.d.ts +42 -0
  563. package/dist/sessionPick.d.ts.map +1 -0
  564. package/dist/sessionPick.js +39 -0
  565. package/dist/sessionPick.js.map +1 -0
  566. package/dist/shutdown.d.ts +126 -0
  567. package/dist/shutdown.d.ts.map +1 -0
  568. package/dist/shutdown.js +164 -0
  569. package/dist/shutdown.js.map +1 -0
  570. package/dist/startupPromptBuffer.d.ts +85 -0
  571. package/dist/startupPromptBuffer.d.ts.map +1 -0
  572. package/dist/startupPromptBuffer.js +123 -0
  573. package/dist/startupPromptBuffer.js.map +1 -0
  574. package/dist/state.d.ts +1245 -0
  575. package/dist/state.d.ts.map +1 -0
  576. package/dist/state.js +1830 -0
  577. package/dist/state.js.map +1 -0
  578. package/dist/threadContextPreamble.d.ts +89 -0
  579. package/dist/threadContextPreamble.d.ts.map +1 -0
  580. package/dist/threadContextPreamble.js +102 -0
  581. package/dist/threadContextPreamble.js.map +1 -0
  582. package/dist/threadRouting.d.ts +164 -0
  583. package/dist/threadRouting.d.ts.map +1 -0
  584. package/dist/threadRouting.js +182 -0
  585. package/dist/threadRouting.js.map +1 -0
  586. package/dist/types.d.ts +1015 -0
  587. package/dist/types.d.ts.map +1 -0
  588. package/dist/types.js +3 -0
  589. package/dist/types.js.map +1 -0
  590. package/dist/utils/abortableFifo.d.ts +10 -0
  591. package/dist/utils/abortableFifo.d.ts.map +1 -0
  592. package/dist/utils/abortableFifo.js +55 -0
  593. package/dist/utils/abortableFifo.js.map +1 -0
  594. package/dist/utils/adoptedToolList.d.ts +27 -0
  595. package/dist/utils/adoptedToolList.d.ts.map +1 -0
  596. package/dist/utils/adoptedToolList.js +22 -0
  597. package/dist/utils/adoptedToolList.js.map +1 -0
  598. package/dist/utils/agentEnvironment.d.ts +42 -0
  599. package/dist/utils/agentEnvironment.d.ts.map +1 -0
  600. package/dist/utils/agentEnvironment.js +122 -0
  601. package/dist/utils/agentEnvironment.js.map +1 -0
  602. package/dist/utils/ansiClean.d.ts +11 -0
  603. package/dist/utils/ansiClean.d.ts.map +1 -0
  604. package/dist/utils/ansiClean.js +139 -0
  605. package/dist/utils/ansiClean.js.map +1 -0
  606. package/dist/utils/autoContinueOnLimit.d.ts +49 -0
  607. package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
  608. package/dist/utils/autoContinueOnLimit.js +69 -0
  609. package/dist/utils/autoContinueOnLimit.js.map +1 -0
  610. package/dist/utils/canonicalPathContainment.d.ts +7 -0
  611. package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
  612. package/dist/utils/canonicalPathContainment.js +48 -0
  613. package/dist/utils/canonicalPathContainment.js.map +1 -0
  614. package/dist/utils/claudeAuthLogin.d.ts +71 -0
  615. package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
  616. package/dist/utils/claudeAuthLogin.js +93 -0
  617. package/dist/utils/claudeAuthLogin.js.map +1 -0
  618. package/dist/utils/claudeChunkClassifier.d.ts +97 -0
  619. package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
  620. package/dist/utils/claudeChunkClassifier.js +254 -0
  621. package/dist/utils/claudeChunkClassifier.js.map +1 -0
  622. package/dist/utils/claudeCodeVersion.d.ts +31 -0
  623. package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
  624. package/dist/utils/claudeCodeVersion.js +62 -0
  625. package/dist/utils/claudeCodeVersion.js.map +1 -0
  626. package/dist/utils/claudeCompactHook.d.ts +64 -0
  627. package/dist/utils/claudeCompactHook.d.ts.map +1 -0
  628. package/dist/utils/claudeCompactHook.js +98 -0
  629. package/dist/utils/claudeCompactHook.js.map +1 -0
  630. package/dist/utils/claudeLivenessAction.d.ts +208 -0
  631. package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
  632. package/dist/utils/claudeLivenessAction.js +135 -0
  633. package/dist/utils/claudeLivenessAction.js.map +1 -0
  634. package/dist/utils/claudeMcpHeal.d.ts +92 -0
  635. package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
  636. package/dist/utils/claudeMcpHeal.js +91 -0
  637. package/dist/utils/claudeMcpHeal.js.map +1 -0
  638. package/dist/utils/claudeRelayRouting.d.ts +86 -0
  639. package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
  640. package/dist/utils/claudeRelayRouting.js +159 -0
  641. package/dist/utils/claudeRelayRouting.js.map +1 -0
  642. package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
  643. package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
  644. package/dist/utils/claudeRuntimeInfo.js +151 -0
  645. package/dist/utils/claudeRuntimeInfo.js.map +1 -0
  646. package/dist/utils/claudeScrapeShapes.d.ts +256 -0
  647. package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
  648. package/dist/utils/claudeScrapeShapes.js +290 -0
  649. package/dist/utils/claudeScrapeShapes.js.map +1 -0
  650. package/dist/utils/claudeSessionTitle.d.ts +27 -0
  651. package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
  652. package/dist/utils/claudeSessionTitle.js +90 -0
  653. package/dist/utils/claudeSessionTitle.js.map +1 -0
  654. package/dist/utils/claudeStreamJson.d.ts +202 -0
  655. package/dist/utils/claudeStreamJson.d.ts.map +1 -0
  656. package/dist/utils/claudeStreamJson.js +351 -0
  657. package/dist/utils/claudeStreamJson.js.map +1 -0
  658. package/dist/utils/claudeSubagentTail.d.ts +93 -0
  659. package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
  660. package/dist/utils/claudeSubagentTail.js +136 -0
  661. package/dist/utils/claudeSubagentTail.js.map +1 -0
  662. package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
  663. package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
  664. package/dist/utils/clearThreadOutputQueues.js +39 -0
  665. package/dist/utils/clearThreadOutputQueues.js.map +1 -0
  666. package/dist/utils/compactCommandRoute.d.ts +45 -0
  667. package/dist/utils/compactCommandRoute.d.ts.map +1 -0
  668. package/dist/utils/compactCommandRoute.js +36 -0
  669. package/dist/utils/compactCommandRoute.js.map +1 -0
  670. package/dist/utils/compactOnIdle.d.ts +329 -0
  671. package/dist/utils/compactOnIdle.d.ts.map +1 -0
  672. package/dist/utils/compactOnIdle.js +379 -0
  673. package/dist/utils/compactOnIdle.js.map +1 -0
  674. package/dist/utils/consoleFileTap.d.ts +51 -0
  675. package/dist/utils/consoleFileTap.d.ts.map +1 -0
  676. package/dist/utils/consoleFileTap.js +86 -0
  677. package/dist/utils/consoleFileTap.js.map +1 -0
  678. package/dist/utils/displayVerbosity.d.ts +44 -0
  679. package/dist/utils/displayVerbosity.d.ts.map +1 -0
  680. package/dist/utils/displayVerbosity.js +75 -0
  681. package/dist/utils/displayVerbosity.js.map +1 -0
  682. package/dist/utils/download.d.ts +72 -0
  683. package/dist/utils/download.d.ts.map +1 -0
  684. package/dist/utils/download.js +216 -0
  685. package/dist/utils/download.js.map +1 -0
  686. package/dist/utils/draftFinalize.d.ts +110 -0
  687. package/dist/utils/draftFinalize.d.ts.map +1 -0
  688. package/dist/utils/draftFinalize.js +100 -0
  689. package/dist/utils/draftFinalize.js.map +1 -0
  690. package/dist/utils/draftId.d.ts +36 -0
  691. package/dist/utils/draftId.d.ts.map +1 -0
  692. package/dist/utils/draftId.js +46 -0
  693. package/dist/utils/draftId.js.map +1 -0
  694. package/dist/utils/draftPacer.d.ts +72 -0
  695. package/dist/utils/draftPacer.d.ts.map +1 -0
  696. package/dist/utils/draftPacer.js +53 -0
  697. package/dist/utils/draftPacer.js.map +1 -0
  698. package/dist/utils/effortStartupKeystroke.d.ts +20 -0
  699. package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
  700. package/dist/utils/effortStartupKeystroke.js +28 -0
  701. package/dist/utils/effortStartupKeystroke.js.map +1 -0
  702. package/dist/utils/ensureSessionPlan.d.ts +70 -0
  703. package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
  704. package/dist/utils/ensureSessionPlan.js +54 -0
  705. package/dist/utils/ensureSessionPlan.js.map +1 -0
  706. package/dist/utils/fileSendPlan.d.ts +217 -0
  707. package/dist/utils/fileSendPlan.d.ts.map +1 -0
  708. package/dist/utils/fileSendPlan.js +291 -0
  709. package/dist/utils/fileSendPlan.js.map +1 -0
  710. package/dist/utils/fileSendService.d.ts +94 -0
  711. package/dist/utils/fileSendService.d.ts.map +1 -0
  712. package/dist/utils/fileSendService.js +387 -0
  713. package/dist/utils/fileSendService.js.map +1 -0
  714. package/dist/utils/groupFinalizePlan.d.ts +38 -0
  715. package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
  716. package/dist/utils/groupFinalizePlan.js +35 -0
  717. package/dist/utils/groupFinalizePlan.js.map +1 -0
  718. package/dist/utils/identicalOutputGuard.d.ts +83 -0
  719. package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
  720. package/dist/utils/identicalOutputGuard.js +99 -0
  721. package/dist/utils/identicalOutputGuard.js.map +1 -0
  722. package/dist/utils/isoTimestamp.d.ts +16 -0
  723. package/dist/utils/isoTimestamp.d.ts.map +1 -0
  724. package/dist/utils/isoTimestamp.js +34 -0
  725. package/dist/utils/isoTimestamp.js.map +1 -0
  726. package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
  727. package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
  728. package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
  729. package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
  730. package/dist/utils/jsonStreamHost.d.ts +227 -0
  731. package/dist/utils/jsonStreamHost.d.ts.map +1 -0
  732. package/dist/utils/jsonStreamHost.js +417 -0
  733. package/dist/utils/jsonStreamHost.js.map +1 -0
  734. package/dist/utils/keyedTransitionQueue.d.ts +18 -0
  735. package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
  736. package/dist/utils/keyedTransitionQueue.js +34 -0
  737. package/dist/utils/keyedTransitionQueue.js.map +1 -0
  738. package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
  739. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
  740. package/dist/utils/limitEpisodeRecovery.js +133 -0
  741. package/dist/utils/limitEpisodeRecovery.js.map +1 -0
  742. package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
  743. package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
  744. package/dist/utils/limitHeldPromptQueue.js +59 -0
  745. package/dist/utils/limitHeldPromptQueue.js.map +1 -0
  746. package/dist/utils/limitHeldPrompts.d.ts +58 -0
  747. package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
  748. package/dist/utils/limitHeldPrompts.js +65 -0
  749. package/dist/utils/limitHeldPrompts.js.map +1 -0
  750. package/dist/utils/linkPreviewSuppression.d.ts +18 -0
  751. package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
  752. package/dist/utils/linkPreviewSuppression.js +37 -0
  753. package/dist/utils/linkPreviewSuppression.js.map +1 -0
  754. package/dist/utils/localClock.d.ts +15 -0
  755. package/dist/utils/localClock.d.ts.map +1 -0
  756. package/dist/utils/localClock.js +29 -0
  757. package/dist/utils/localClock.js.map +1 -0
  758. package/dist/utils/markdownTableRender.d.ts +83 -0
  759. package/dist/utils/markdownTableRender.d.ts.map +1 -0
  760. package/dist/utils/markdownTableRender.js +298 -0
  761. package/dist/utils/markdownTableRender.js.map +1 -0
  762. package/dist/utils/mediaGroupCollector.d.ts +51 -0
  763. package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
  764. package/dist/utils/mediaGroupCollector.js +90 -0
  765. package/dist/utils/mediaGroupCollector.js.map +1 -0
  766. package/dist/utils/messageSendService.d.ts +136 -0
  767. package/dist/utils/messageSendService.d.ts.map +1 -0
  768. package/dist/utils/messageSendService.js +165 -0
  769. package/dist/utils/messageSendService.js.map +1 -0
  770. package/dist/utils/minutesOverride.d.ts +7 -0
  771. package/dist/utils/minutesOverride.d.ts.map +1 -0
  772. package/dist/utils/minutesOverride.js +16 -0
  773. package/dist/utils/minutesOverride.js.map +1 -0
  774. package/dist/utils/modelPickerPlan.d.ts +119 -0
  775. package/dist/utils/modelPickerPlan.d.ts.map +1 -0
  776. package/dist/utils/modelPickerPlan.js +171 -0
  777. package/dist/utils/modelPickerPlan.js.map +1 -0
  778. package/dist/utils/modelSetReplyDecision.d.ts +67 -0
  779. package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
  780. package/dist/utils/modelSetReplyDecision.js +27 -0
  781. package/dist/utils/modelSetReplyDecision.js.map +1 -0
  782. package/dist/utils/openCodeAuthLogin.d.ts +181 -0
  783. package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
  784. package/dist/utils/openCodeAuthLogin.js +393 -0
  785. package/dist/utils/openCodeAuthLogin.js.map +1 -0
  786. package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
  787. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
  788. package/dist/utils/openCodeCompactPlugin.js +146 -0
  789. package/dist/utils/openCodeCompactPlugin.js.map +1 -0
  790. package/dist/utils/openCodeTurnActivity.d.ts +67 -0
  791. package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
  792. package/dist/utils/openCodeTurnActivity.js +27 -0
  793. package/dist/utils/openCodeTurnActivity.js.map +1 -0
  794. package/dist/utils/outputDebounce.d.ts +24 -0
  795. package/dist/utils/outputDebounce.d.ts.map +1 -0
  796. package/dist/utils/outputDebounce.js +30 -0
  797. package/dist/utils/outputDebounce.js.map +1 -0
  798. package/dist/utils/outputFlushTiming.d.ts +54 -0
  799. package/dist/utils/outputFlushTiming.d.ts.map +1 -0
  800. package/dist/utils/outputFlushTiming.js +48 -0
  801. package/dist/utils/outputFlushTiming.js.map +1 -0
  802. package/dist/utils/paginateList.d.ts +25 -0
  803. package/dist/utils/paginateList.d.ts.map +1 -0
  804. package/dist/utils/paginateList.js +32 -0
  805. package/dist/utils/paginateList.js.map +1 -0
  806. package/dist/utils/paneDiff.d.ts +55 -0
  807. package/dist/utils/paneDiff.d.ts.map +1 -0
  808. package/dist/utils/paneDiff.js +88 -0
  809. package/dist/utils/paneDiff.js.map +1 -0
  810. package/dist/utils/paneResizeGuard.d.ts +69 -0
  811. package/dist/utils/paneResizeGuard.d.ts.map +1 -0
  812. package/dist/utils/paneResizeGuard.js +91 -0
  813. package/dist/utils/paneResizeGuard.js.map +1 -0
  814. package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
  815. package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
  816. package/dist/utils/persistAdapterSessionIds.js +28 -0
  817. package/dist/utils/persistAdapterSessionIds.js.map +1 -0
  818. package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
  819. package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
  820. package/dist/utils/pinnedBannerSkipDecision.js +20 -0
  821. package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
  822. package/dist/utils/pollBackoff.d.ts +45 -0
  823. package/dist/utils/pollBackoff.d.ts.map +1 -0
  824. package/dist/utils/pollBackoff.js +44 -0
  825. package/dist/utils/pollBackoff.js.map +1 -0
  826. package/dist/utils/promptDelivery.d.ts +46 -0
  827. package/dist/utils/promptDelivery.d.ts.map +1 -0
  828. package/dist/utils/promptDelivery.js +49 -0
  829. package/dist/utils/promptDelivery.js.map +1 -0
  830. package/dist/utils/providerDisconnectPlan.d.ts +82 -0
  831. package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
  832. package/dist/utils/providerDisconnectPlan.js +110 -0
  833. package/dist/utils/providerDisconnectPlan.js.map +1 -0
  834. package/dist/utils/rateLimitLog.d.ts +48 -0
  835. package/dist/utils/rateLimitLog.d.ts.map +1 -0
  836. package/dist/utils/rateLimitLog.js +43 -0
  837. package/dist/utils/rateLimitLog.js.map +1 -0
  838. package/dist/utils/recentRelayWindow.d.ts +165 -0
  839. package/dist/utils/recentRelayWindow.d.ts.map +1 -0
  840. package/dist/utils/recentRelayWindow.js +284 -0
  841. package/dist/utils/recentRelayWindow.js.map +1 -0
  842. package/dist/utils/recvPreviewRedaction.d.ts +23 -0
  843. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
  844. package/dist/utils/recvPreviewRedaction.js +39 -0
  845. package/dist/utils/recvPreviewRedaction.js.map +1 -0
  846. package/dist/utils/reminderFlow.d.ts +148 -0
  847. package/dist/utils/reminderFlow.d.ts.map +1 -0
  848. package/dist/utils/reminderFlow.js +122 -0
  849. package/dist/utils/reminderFlow.js.map +1 -0
  850. package/dist/utils/reminderScheduleText.d.ts +87 -0
  851. package/dist/utils/reminderScheduleText.d.ts.map +1 -0
  852. package/dist/utils/reminderScheduleText.js +135 -0
  853. package/dist/utils/reminderScheduleText.js.map +1 -0
  854. package/dist/utils/reminderWizard.d.ts +710 -0
  855. package/dist/utils/reminderWizard.d.ts.map +1 -0
  856. package/dist/utils/reminderWizard.js +1164 -0
  857. package/dist/utils/reminderWizard.js.map +1 -0
  858. package/dist/utils/replyQuote.d.ts +111 -0
  859. package/dist/utils/replyQuote.d.ts.map +1 -0
  860. package/dist/utils/replyQuote.js +122 -0
  861. package/dist/utils/replyQuote.js.map +1 -0
  862. package/dist/utils/resolveBinary.d.ts +25 -0
  863. package/dist/utils/resolveBinary.d.ts.map +1 -0
  864. package/dist/utils/resolveBinary.js +99 -0
  865. package/dist/utils/resolveBinary.js.map +1 -0
  866. package/dist/utils/retryAfterHeader.d.ts +7 -0
  867. package/dist/utils/retryAfterHeader.d.ts.map +1 -0
  868. package/dist/utils/retryAfterHeader.js +17 -0
  869. package/dist/utils/retryAfterHeader.js.map +1 -0
  870. package/dist/utils/rotatingJsonlFile.d.ts +40 -0
  871. package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
  872. package/dist/utils/rotatingJsonlFile.js +106 -0
  873. package/dist/utils/rotatingJsonlFile.js.map +1 -0
  874. package/dist/utils/rotatingLogFile.d.ts +25 -0
  875. package/dist/utils/rotatingLogFile.d.ts.map +1 -0
  876. package/dist/utils/rotatingLogFile.js +74 -0
  877. package/dist/utils/rotatingLogFile.js.map +1 -0
  878. package/dist/utils/sendRateTracker.d.ts +59 -0
  879. package/dist/utils/sendRateTracker.d.ts.map +1 -0
  880. package/dist/utils/sendRateTracker.js +144 -0
  881. package/dist/utils/sendRateTracker.js.map +1 -0
  882. package/dist/utils/serialQueue.d.ts +5 -0
  883. package/dist/utils/serialQueue.d.ts.map +1 -0
  884. package/dist/utils/serialQueue.js +14 -0
  885. package/dist/utils/serialQueue.js.map +1 -0
  886. package/dist/utils/sseStreamLifecycle.d.ts +32 -0
  887. package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
  888. package/dist/utils/sseStreamLifecycle.js +41 -0
  889. package/dist/utils/sseStreamLifecycle.js.map +1 -0
  890. package/dist/utils/startupReadiness.d.ts +119 -0
  891. package/dist/utils/startupReadiness.d.ts.map +1 -0
  892. package/dist/utils/startupReadiness.js +148 -0
  893. package/dist/utils/startupReadiness.js.map +1 -0
  894. package/dist/utils/statusFlushDecision.d.ts +18 -0
  895. package/dist/utils/statusFlushDecision.d.ts.map +1 -0
  896. package/dist/utils/statusFlushDecision.js +53 -0
  897. package/dist/utils/statusFlushDecision.js.map +1 -0
  898. package/dist/utils/subagentRender.d.ts +52 -0
  899. package/dist/utils/subagentRender.d.ts.map +1 -0
  900. package/dist/utils/subagentRender.js +66 -0
  901. package/dist/utils/subagentRender.js.map +1 -0
  902. package/dist/utils/subagentStatusRender.d.ts +90 -0
  903. package/dist/utils/subagentStatusRender.d.ts.map +1 -0
  904. package/dist/utils/subagentStatusRender.js +124 -0
  905. package/dist/utils/subagentStatusRender.js.map +1 -0
  906. package/dist/utils/telegramError.d.ts +2 -0
  907. package/dist/utils/telegramError.d.ts.map +1 -0
  908. package/dist/utils/telegramError.js +16 -0
  909. package/dist/utils/telegramError.js.map +1 -0
  910. package/dist/utils/terminalEmitPlan.d.ts +74 -0
  911. package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
  912. package/dist/utils/terminalEmitPlan.js +86 -0
  913. package/dist/utils/terminalEmitPlan.js.map +1 -0
  914. package/dist/utils/thinkingRender.d.ts +74 -0
  915. package/dist/utils/thinkingRender.d.ts.map +1 -0
  916. package/dist/utils/thinkingRender.js +85 -0
  917. package/dist/utils/thinkingRender.js.map +1 -0
  918. package/dist/utils/threadStatusReport.d.ts +55 -0
  919. package/dist/utils/threadStatusReport.d.ts.map +1 -0
  920. package/dist/utils/threadStatusReport.js +65 -0
  921. package/dist/utils/threadStatusReport.js.map +1 -0
  922. package/dist/utils/threadToggle.d.ts +29 -0
  923. package/dist/utils/threadToggle.d.ts.map +1 -0
  924. package/dist/utils/threadToggle.js +39 -0
  925. package/dist/utils/threadToggle.js.map +1 -0
  926. package/dist/utils/timezone.d.ts +125 -0
  927. package/dist/utils/timezone.d.ts.map +1 -0
  928. package/dist/utils/timezone.js +278 -0
  929. package/dist/utils/timezone.js.map +1 -0
  930. package/dist/utils/tmuxExec.d.ts +61 -0
  931. package/dist/utils/tmuxExec.d.ts.map +1 -0
  932. package/dist/utils/tmuxExec.js +109 -0
  933. package/dist/utils/tmuxExec.js.map +1 -0
  934. package/dist/utils/tmuxSessionName.d.ts +34 -0
  935. package/dist/utils/tmuxSessionName.d.ts.map +1 -0
  936. package/dist/utils/tmuxSessionName.js +51 -0
  937. package/dist/utils/tmuxSessionName.js.map +1 -0
  938. package/dist/utils/toolResultRender.d.ts +61 -0
  939. package/dist/utils/toolResultRender.d.ts.map +1 -0
  940. package/dist/utils/toolResultRender.js +62 -0
  941. package/dist/utils/toolResultRender.js.map +1 -0
  942. package/dist/utils/topicRequest.d.ts +61 -0
  943. package/dist/utils/topicRequest.d.ts.map +1 -0
  944. package/dist/utils/topicRequest.js +68 -0
  945. package/dist/utils/topicRequest.js.map +1 -0
  946. package/dist/utils/topicView.d.ts +55 -0
  947. package/dist/utils/topicView.d.ts.map +1 -0
  948. package/dist/utils/topicView.js +56 -0
  949. package/dist/utils/topicView.js.map +1 -0
  950. package/dist/utils/transcribeAudio.d.ts +89 -0
  951. package/dist/utils/transcribeAudio.d.ts.map +1 -0
  952. package/dist/utils/transcribeAudio.js +249 -0
  953. package/dist/utils/transcribeAudio.js.map +1 -0
  954. package/dist/utils/transientFrames.d.ts +52 -0
  955. package/dist/utils/transientFrames.d.ts.map +1 -0
  956. package/dist/utils/transientFrames.js +41 -0
  957. package/dist/utils/transientFrames.js.map +1 -0
  958. package/dist/utils/typingActive.d.ts +35 -0
  959. package/dist/utils/typingActive.d.ts.map +1 -0
  960. package/dist/utils/typingActive.js +22 -0
  961. package/dist/utils/typingActive.js.map +1 -0
  962. package/dist/utils/typingLoopBackstop.d.ts +64 -0
  963. package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
  964. package/dist/utils/typingLoopBackstop.js +68 -0
  965. package/dist/utils/typingLoopBackstop.js.map +1 -0
  966. package/dist/utils/verbosityRender.d.ts +18 -0
  967. package/dist/utils/verbosityRender.d.ts.map +1 -0
  968. package/dist/utils/verbosityRender.js +17 -0
  969. package/dist/utils/verbosityRender.js.map +1 -0
  970. package/dist/utils/wedgeRecovery.d.ts +57 -0
  971. package/dist/utils/wedgeRecovery.d.ts.map +1 -0
  972. package/dist/utils/wedgeRecovery.js +24 -0
  973. package/dist/utils/wedgeRecovery.js.map +1 -0
  974. package/dist/utils.d.ts +30 -0
  975. package/dist/utils.d.ts.map +1 -0
  976. package/dist/utils.js +61 -0
  977. package/dist/utils.js.map +1 -0
  978. package/dist/validation.d.ts +113 -0
  979. package/dist/validation.d.ts.map +1 -0
  980. package/dist/validation.js +226 -0
  981. package/dist/validation.js.map +1 -0
  982. package/dist/voiceQueue.d.ts +7 -0
  983. package/dist/voiceQueue.d.ts.map +1 -0
  984. package/dist/voiceQueue.js +33 -0
  985. package/dist/voiceQueue.js.map +1 -0
  986. package/examples/.env.example +17 -0
  987. package/examples/docker-compose.yml +36 -0
  988. package/package.json +83 -4
@@ -0,0 +1,841 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProviderAuthAdapter = getProviderAuthAdapter;
4
+ exports.buildModelProviderRender = buildModelProviderRender;
5
+ exports.buildModelPageRender = buildModelPageRender;
6
+ exports.createModelProviders = createModelProviders;
7
+ /**
8
+ * `/model`, `/effort`, `/connect` and `/disconnect` — the provider → models picker, the effort picker and the
9
+ * provider credential flows — with their buttons. See README.md in this folder.
10
+ */
11
+ const telegraf_1 = require("telegraf");
12
+ const createAdapter_1 = require("../../../adapters/createAdapter");
13
+ const sessionKey_1 = require("../../../sessionKey");
14
+ const sessionKeyCodec_1 = require("../sessionKeyCodec");
15
+ const openCodeAdapter_1 = require("../../../adapters/openCodeAdapter");
16
+ const rateLimiter_1 = require("../../../rateLimiter");
17
+ const i18n_1 = require("../../../i18n");
18
+ const paginateList_1 = require("../../../utils/paginateList");
19
+ const modelPickerPlan_1 = require("../../../utils/modelPickerPlan");
20
+ const providerDisconnectPlan_1 = require("../../../utils/providerDisconnectPlan");
21
+ const sendErrorClassifier_1 = require("../../../sendErrorClassifier");
22
+ const modelSetReplyDecision_1 = require("../../../utils/modelSetReplyDecision");
23
+ const effortLevels_1 = require("../../../effortLevels");
24
+ const openCodeAuthLogin_1 = require("../../../utils/openCodeAuthLogin");
25
+ const callbackMessage_1 = require("./callbackMessage");
26
+ const defaultConnectProviderId = 'openai';
27
+ function checkLooksLikeProviderApiKey(value) {
28
+ return value.startsWith('sk-');
29
+ }
30
+ function getConnectCommandArgs(parsed) {
31
+ const args = parsed.args;
32
+ if (args.length === 0)
33
+ return { providerId: defaultConnectProviderId, apiKey: null };
34
+ if (args.length === 1) {
35
+ const onlyArg = args[0].trim();
36
+ if (checkLooksLikeProviderApiKey(onlyArg)) {
37
+ return { providerId: defaultConnectProviderId, apiKey: onlyArg };
38
+ }
39
+ return { providerId: onlyArg.toLowerCase(), apiKey: null };
40
+ }
41
+ return {
42
+ providerId: args[0].trim().toLowerCase(),
43
+ apiKey: args.slice(1).join(' ').trim(),
44
+ };
45
+ }
46
+ /**
47
+ * @description The adapter that owns provider credentials.
48
+ *
49
+ * Provider auth is an OpenCode concept, so `/connect` and `/disconnect` BOTH
50
+ * target the OpenCode adapter directly instead of the thread's current
51
+ * backend — otherwise a topic that never started OpenCode could connect a
52
+ * provider (which `/connect` has always allowed) but not disconnect it, and
53
+ * the two are advertised side by side in the bound-thread help.
54
+ */
55
+ function getProviderAuthAdapter() {
56
+ return (0, createAdapter_1.getAdapter)('opencode');
57
+ }
58
+ // ═══════════════════════════════════════════════════════════════════════════════
59
+ // /model — two-level provider → models picker
60
+ // ═══════════════════════════════════════════════════════════════════════════════
61
+ /**
62
+ * @description Models per page in the `/model` model level. Model names are
63
+ * long, so each gets a full-width row; 10 rows keep the keyboard scroll-free
64
+ * and the numbered text list ~10 short lines — far from Telegram's 4096-char
65
+ * message cap, which the old render-everything list blew past (12 990 chars on
66
+ * a 367-model `openrouter` catalog → every `/model` died with "message is too
67
+ * long" and the topic went silent).
68
+ */
69
+ const MODEL_PAGE_SIZE = 10;
70
+ /** Model label the thread currently runs, or the localized "default" stand-in. */
71
+ function getCurrentModelLabel(adapter, key) {
72
+ return adapter.getCurrentModel?.(key) || (0, i18n_1.t)('model.current_default');
73
+ }
74
+ /**
75
+ * @description Provider level: one row per provider, each with a 🙈 button that
76
+ * hides it from the picker. Hidden providers follow in their own section with a
77
+ * 👁 button to bring them back — the only way back, so they must always render.
78
+ */
79
+ function buildModelProviderKeyboard(catalog) {
80
+ const hiddenProviderSet = new Set(catalog.hiddenProviders);
81
+ const visibleRows = [];
82
+ const hiddenRows = [];
83
+ catalog.providers.forEach((provider, providerIndex) => {
84
+ const count = catalog.byProvider.get(provider)?.length ?? 0;
85
+ if (hiddenProviderSet.has(provider)) {
86
+ hiddenRows.push([
87
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('model.hidden_provider_button', { provider, count }), modelPickerPlan_1.modelPickerNoopCallback),
88
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('model.show_button'), (0, modelPickerPlan_1.buildProviderShowCallback)(providerIndex)),
89
+ ]);
90
+ return;
91
+ }
92
+ visibleRows.push([
93
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('model.provider_button', { provider, count }), (0, modelPickerPlan_1.buildProviderPageCallback)(providerIndex, 0)),
94
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('model.hide_button'), (0, modelPickerPlan_1.buildProviderHideCallback)(providerIndex)),
95
+ ]);
96
+ });
97
+ return telegraf_1.Markup.inlineKeyboard([...visibleRows, ...hiddenRows]);
98
+ }
99
+ function buildModelProviderText(catalog, current) {
100
+ // An EMPTY catalog is not "everything is hidden": there is no 👁 row to tap,
101
+ // so that copy would be a dead end. Reachable on the in-place re-render path
102
+ // (hide/show/«back») when the backend's model lookup comes back empty — e.g.
103
+ // a `/disconnect` dropped the last provider, or the CLI lookup failed right
104
+ // after `resetOpenCodeProviderCaches()` wiped the cache.
105
+ if (catalog.providers.length === 0)
106
+ return (0, i18n_1.t)('model.none_available', { current });
107
+ if (catalog.visibleProviders.length === 0)
108
+ return (0, i18n_1.t)('model.all_hidden', { current });
109
+ const header = (0, i18n_1.t)('model.pick_provider', { current });
110
+ return catalog.hiddenProviders.length > 0 ? `${header}\n\n${(0, i18n_1.t)('model.hidden_header')}` : header;
111
+ }
112
+ /**
113
+ * @description Provider level (level 1) as a ready-to-send render. Exported so
114
+ * the "no render path can outgrow Telegram's message cap" guarantee — the whole
115
+ * point of the two-level picker — is assertable on THIS level too, not just on
116
+ * the paginated model level.
117
+ */
118
+ function buildModelProviderRender(catalog, current) {
119
+ return {
120
+ text: buildModelProviderText(catalog, current),
121
+ keyboard: buildModelProviderKeyboard(catalog),
122
+ pageModels: [],
123
+ isNumberedPickArmed: false,
124
+ };
125
+ }
126
+ /**
127
+ * @description Model level: one page of a single provider's models.
128
+ *
129
+ * Returns `null` when the provider index no longer resolves (a stale keyboard
130
+ * after the catalog changed) or points at a HIDDEN provider — hiding must make
131
+ * a provider unreachable here, not just invisible one level up.
132
+ */
133
+ function buildModelPageRender(catalog, providerIndex, page, current, options) {
134
+ const provider = catalog.providers[providerIndex];
135
+ if (provider === undefined || catalog.hiddenProviders.includes(provider))
136
+ return null;
137
+ const providerModels = catalog.byProvider.get(provider) ?? [];
138
+ const { slice, currentPage, totalPages } = (0, paginateList_1.paginateList)(providerModels, page, MODEL_PAGE_SIZE);
139
+ const firstIndexOnPage = currentPage * MODEL_PAGE_SIZE;
140
+ const rows = slice.map((modelId, offset) => {
141
+ const shortLabel = (0, modelPickerPlan_1.getModelShortLabel)(modelId, provider);
142
+ return [
143
+ telegraf_1.Markup.button.callback(modelId === current ? `${shortLabel} ✓` : shortLabel, (0, modelPickerPlan_1.buildModelPickCallback)(providerIndex, firstIndexOnPage + offset)),
144
+ ];
145
+ });
146
+ if (totalPages > 1) {
147
+ const nav = [];
148
+ if (currentPage > 0) {
149
+ nav.push(telegraf_1.Markup.button.callback((0, i18n_1.t)('model.prev_button'), (0, modelPickerPlan_1.buildProviderPageCallback)(providerIndex, currentPage - 1)));
150
+ }
151
+ nav.push(telegraf_1.Markup.button.callback((0, i18n_1.t)('model.page_button', { page: currentPage + 1, totalPages }), modelPickerPlan_1.modelPickerNoopCallback));
152
+ if (currentPage < totalPages - 1) {
153
+ nav.push(telegraf_1.Markup.button.callback((0, i18n_1.t)('model.next_button'), (0, modelPickerPlan_1.buildProviderPageCallback)(providerIndex, currentPage + 1)));
154
+ }
155
+ rows.push(nav);
156
+ }
157
+ // No back row when the provider level was skipped — it would lead nowhere.
158
+ if ((0, modelPickerPlan_1.checkHasProviderLevel)(catalog.visibleProviders.length, catalog.hiddenProviders.length)) {
159
+ rows.push([telegraf_1.Markup.button.callback((0, i18n_1.t)('model.back_button'), modelPickerPlan_1.modelPickerBackCallback)]);
160
+ }
161
+ const header = (0, i18n_1.t)('model.page_header', {
162
+ provider,
163
+ count: providerModels.length,
164
+ page: currentPage + 1,
165
+ totalPages,
166
+ current,
167
+ });
168
+ const numberedList = options.isWithNumberedList
169
+ ? slice.map((modelId, offset) => `${offset + 1}. ${(0, modelPickerPlan_1.getModelShortLabel)(modelId, provider)}`).join('\n')
170
+ : '';
171
+ const hint = options.isWithNumberedList ? (0, i18n_1.t)('model.page_hint') : (0, i18n_1.t)('model.page_hint_buttons_only');
172
+ const text = [header, numberedList, hint].filter((part) => part.length > 0).join('\n\n');
173
+ return {
174
+ text,
175
+ keyboard: telegraf_1.Markup.inlineKeyboard(rows),
176
+ pageModels: slice,
177
+ isNumberedPickArmed: options.isWithNumberedList,
178
+ };
179
+ }
180
+ /**
181
+ * @description Swap a picker message to another level/page in place, keeping
182
+ * the thread clean. A no-op edit (same button tapped twice) comes back as
183
+ * Telegram's "message is not modified" 400, which is swallowed.
184
+ */
185
+ async function editModelPickerMessage(ctx, render) {
186
+ try {
187
+ await ctx.editMessageText(render.text, render.keyboard);
188
+ }
189
+ catch (e) {
190
+ const desc = (0, sendErrorClassifier_1.checkIsApiError)(e) ? (0, sendErrorClassifier_1.getErrorDescription)(e) : '';
191
+ if (!/message is not modified/i.test(desc)) {
192
+ console.warn('[model picker] edit failed:', desc || e);
193
+ }
194
+ }
195
+ }
196
+ /**
197
+ * @description Build the `/effort` level picker keyboard.
198
+ *
199
+ * One callback button per available reasoning-effort level (3 per row);
200
+ * the level matching `current` carries a `✓` marker. Shared by the
201
+ * `/effort` command (initial render) and the `effort_<level>` callback
202
+ * (re-render after a press) so the marker can never drift between the two.
203
+ */
204
+ function buildEffortKeyboard(levels, current) {
205
+ const buttons = levels.map((l) => telegraf_1.Markup.button.callback(l === current ? `${l} ✓` : l, `effort_${l}`));
206
+ return telegraf_1.Markup.inlineKeyboard(buttons, { columns: 3 });
207
+ }
208
+ /**
209
+ * @description Build the model, effort and provider-credential flows over their ports. It returns what the bot's
210
+ * text handler reaches into (a pasted provider key, a numbered model pick) and the `register…()` calls, which the
211
+ * bot makes at the positions its neighbouring commands and buttons are registered.
212
+ */
213
+ function createModelProviders(ports) {
214
+ const { awaitingModelSelection, awaitingSessionSelection, awaitingFolderName, threadModelLists, pendingProviderConnects, connectMethodLists, disconnectProviderLists, startOpenCodeOAuthLogin, bot, command, getState, replyToThread, deleteThreadMessage, authoriseContext, updatePinnedStatus, wakeSleepingSession } = ports;
215
+ /**
216
+ * @description Single choke point for the four `/model`-set paths (the
217
+ * `/model <num>` and `/model <name>` commands, the text-handler numeric pick,
218
+ * and the `model_<id>` button callback). Drives the thread's adapter and turns
219
+ * the outcome into a ready reply via the pure {@link getModelSetReplyDecision}.
220
+ *
221
+ * No session gate here: each adapter decides what "no session" means
222
+ * (OpenCode persists the pick for the next start and succeeds; Claude refuses
223
+ * with a notice). On success the pinned banner is refreshed best-effort.
224
+ */
225
+ async function applyModelSelection(adapter, key, modelId) {
226
+ // A sleeping conversation is woken first (L-D4), so the pick applies to its live session
227
+ // instead of the "start the agent first" refusal of an idle backend.
228
+ const wakeNotice = await wakeSleepingSession(key);
229
+ if (wakeNotice)
230
+ await replyToThread(key, wakeNotice);
231
+ const setModelError = adapter.setModel ? await adapter.setModel(key, modelId) : null;
232
+ const displayLabel = adapter.getCurrentModel?.(key) || modelId;
233
+ // Read AFTER the switch: a model that does not offer the level in force
234
+ // clears it (`effort.cleared_on_model_switch`), so a pre-switch read would
235
+ // report a level the new model no longer runs. Same resolution rule as
236
+ // `/status` — no `getEffort` means the backend has no effort concept at all.
237
+ const effort = adapter.getEffort ? (adapter.getEffort(key) ?? effortLevels_1.defaultEffortLevel) : null;
238
+ const decision = (0, modelSetReplyDecision_1.getModelSetReplyDecision)({
239
+ hasSetModel: Boolean(adapter.setModel),
240
+ setModelError,
241
+ isActive: adapter.checkIsActive(key),
242
+ adapterLabel: adapter.label,
243
+ displayLabel,
244
+ effort,
245
+ }, i18n_1.t);
246
+ if (decision.isOk)
247
+ await updatePinnedStatus(key).catch(() => { });
248
+ return { ...decision, setModelError, displayLabel };
249
+ }
250
+ function armProviderConnect(key, providerId) {
251
+ const keyString = (0, sessionKey_1.keyToString)(key);
252
+ awaitingModelSelection.delete(keyString);
253
+ awaitingSessionSelection.delete(keyString);
254
+ awaitingFolderName.delete(keyString);
255
+ pendingProviderConnects.set(keyString, { providerId });
256
+ }
257
+ async function handleProviderConnectKey(key, providerId, apiKey, secretMessageId) {
258
+ const trimmedApiKey = apiKey.trim();
259
+ if (!trimmedApiKey) {
260
+ armProviderConnect(key, providerId);
261
+ await replyToThread(key, (0, i18n_1.t)('connect.empty_key'));
262
+ return;
263
+ }
264
+ // Reject a value that can't be a real key (spaces / non-Latin-1 / controls)
265
+ // BEFORE storing it — otherwise a stray chat message captured by a stale
266
+ // `/connect` state becomes a broken `Authorization` header that only fails
267
+ // (cryptically) on the next request. An implausible value is NOT a secret, so
268
+ // keep it visible, re-arm, and hint. (live 2026-07-20)
269
+ if (!(0, openCodeAuthLogin_1.checkIsPlausibleProviderApiKey)(trimmedApiKey)) {
270
+ armProviderConnect(key, providerId);
271
+ await replyToThread(key, (0, i18n_1.t)('connect.invalid_key'));
272
+ return;
273
+ }
274
+ // A plausible key IS a single-use secret → delete it from history now.
275
+ if (secretMessageId !== null) {
276
+ await deleteThreadMessage(key, secretMessageId);
277
+ }
278
+ const adapter = (0, createAdapter_1.getAdapter)('opencode');
279
+ if (!adapter.connectProvider) {
280
+ await replyToThread(key, (0, i18n_1.t)('connect.unsupported_backend'));
281
+ return;
282
+ }
283
+ const connectError = await adapter.connectProvider(key, providerId, trimmedApiKey);
284
+ if (connectError) {
285
+ await replyToThread(key, connectError);
286
+ return;
287
+ }
288
+ await replyToThread(key, (0, i18n_1.t)('connect.success', { provider: providerId }));
289
+ }
290
+ /**
291
+ * @description Show the `/connect <provider>` method picker: one inline button
292
+ * per auth method from the live catalog — OAuth (subscription/account, driven
293
+ * out-of-band via `opencode auth login` in a pty) and the API-key method (the
294
+ * existing key-paste flow). Tapping a button fires the `connm_<idx>` callback.
295
+ */
296
+ async function showConnectMethodPicker(key, providerId) {
297
+ const adapter = (0, createAdapter_1.getAdapter)('opencode');
298
+ if (!adapter.fetchProviderAuthMethods) {
299
+ await replyToThread(key, (0, i18n_1.t)('connect.unsupported_backend'));
300
+ return;
301
+ }
302
+ let methods;
303
+ try {
304
+ methods = await adapter.fetchProviderAuthMethods(providerId);
305
+ }
306
+ catch (e) {
307
+ const reason = e instanceof Error ? e.message : String(e);
308
+ await replyToThread(key, (0, i18n_1.t)('connect.failed', { provider: providerId, reason }));
309
+ return;
310
+ }
311
+ if (methods.length === 0) {
312
+ await replyToThread(key, (0, i18n_1.t)('connect.no_methods', { provider: providerId }));
313
+ return;
314
+ }
315
+ connectMethodLists.set((0, sessionKey_1.keyToString)(key), { providerId, methods });
316
+ const buttons = methods.map((m, i) => telegraf_1.Markup.button.callback((0, openCodeAuthLogin_1.buildConnectMethodButtonLabel)(m), `connm_${i}`));
317
+ await replyToThread(key, (0, i18n_1.t)('connect.pick_method', { provider: providerId }), telegraf_1.Markup.inlineKeyboard(buttons, { columns: 1 }));
318
+ }
319
+ /**
320
+ * @description Apply a `/disconnect` for one provider and report the outcome.
321
+ *
322
+ * The adapter's `null` means a clean disconnect; a non-null string is the
323
+ * notice to show verbatim — a failure, OR the honest caveat that the provider
324
+ * is still active because the backend enables it from an environment variable
325
+ * (the `openrouter` / `OPENROUTER_API_KEY` case that `DELETE /auth/:id` cannot
326
+ * touch, and the reason `/model` also has a bot-side hide toggle).
327
+ */
328
+ async function applyProviderDisconnect(key, providerId) {
329
+ const adapter = getProviderAuthAdapter();
330
+ if (!adapter.disconnectProvider) {
331
+ await replyToThread(key, (0, i18n_1.t)('disconnect.unsupported_backend'));
332
+ return;
333
+ }
334
+ const notice = await adapter.disconnectProvider(key, providerId);
335
+ await replyToThread(key, notice ?? (0, i18n_1.t)('disconnect.success', { provider: providerId }));
336
+ }
337
+ /**
338
+ * @description Bare `/disconnect` → one button per currently active provider.
339
+ * The provider list comes from OpenCode's live model catalog (a provider
340
+ * serving no models is not connected in any useful sense) and INCLUDES hidden
341
+ * ones — hiding is a picker preference, orthogonal to dropping credentials.
342
+ *
343
+ * The snapshot is stored under the SENT MESSAGE's id, so this keyboard can only
344
+ * ever resolve against the list it actually shows.
345
+ */
346
+ async function showDisconnectProviderPicker(key) {
347
+ const adapter = getProviderAuthAdapter();
348
+ if (!adapter.disconnectProvider) {
349
+ await replyToThread(key, (0, i18n_1.t)('disconnect.unsupported_backend'));
350
+ return;
351
+ }
352
+ const catalog = await getModelCatalog(adapter);
353
+ if (catalog.providers.length === 0) {
354
+ await replyToThread(key, (0, i18n_1.t)('disconnect.no_providers'));
355
+ return;
356
+ }
357
+ const buttons = catalog.providers.map((provider, index) => telegraf_1.Markup.button.callback((0, i18n_1.t)('disconnect.provider_button', { provider }), (0, providerDisconnectPlan_1.buildDisconnectProviderCallback)(index)));
358
+ const messageId = await replyToThread(key, (0, i18n_1.t)('disconnect.pick_provider'), telegraf_1.Markup.inlineKeyboard(buttons, { columns: 1 }));
359
+ // A failed send has no keyboard to resolve against — recording the snapshot
360
+ // would only leak an entry.
361
+ if (messageId === null)
362
+ return;
363
+ disconnectProviderLists.set((0, providerDisconnectPlan_1.buildDisconnectPickerKey)((0, sessionKey_1.keyToString)(key), messageId), catalog.providers);
364
+ for (const evictedKey of (0, providerDisconnectPlan_1.getEvictedDisconnectPickerKeys)(disconnectProviderLists.keys())) {
365
+ disconnectProviderLists.delete(evictedKey);
366
+ }
367
+ }
368
+ /**
369
+ * @description Read the thread backend's model list and split it for the
370
+ * picker. Re-derived on every render (command AND callback) rather than
371
+ * snapshotted per thread — the same self-healing approach `bind_page` takes,
372
+ * and both adapters cache the underlying lookup.
373
+ *
374
+ * A backend without `getAvailableModels` (or a failing one) yields an empty
375
+ * catalog, which the caller turns into the "set it manually" notice.
376
+ */
377
+ async function getModelCatalog(adapter) {
378
+ let models = [];
379
+ if (adapter.getAvailableModels) {
380
+ try {
381
+ models = await adapter.getAvailableModels();
382
+ }
383
+ catch (e) {
384
+ console.error('[Bot] getAvailableModels:', e);
385
+ }
386
+ }
387
+ // Claude reports slash-less aliases (`sonnet`, `opus`, …) — they group under
388
+ // the adapter label, otherwise the picker would render an empty list.
389
+ return (0, modelPickerPlan_1.buildModelCatalog)(models, adapter.label, getState().getHiddenModelProviders());
390
+ }
391
+ /**
392
+ * @description Arm the numbered-reply affordance for the page just rendered.
393
+ * Scoped to the CURRENT PAGE: `threadModelLists` holds that page's ids in
394
+ * button order, so a bare digit picks what the user is looking at.
395
+ */
396
+ function armModelPagePick(key, pageModels) {
397
+ const kStr = (0, sessionKey_1.keyToString)(key);
398
+ threadModelLists.set(kStr, pageModels);
399
+ awaitingModelSelection.add(kStr);
400
+ }
401
+ /**
402
+ * @description Whether a bare digit in this thread is currently read as a
403
+ * `/model` page pick. Read-only probe, exported so the "a BUTTON pick must
404
+ * disarm the numbered affordance" rule is directly assertable in tests — an
405
+ * armed thread silently swallows a later ordinary "3" prompt.
406
+ */
407
+ function checkIsNumberedModelPickArmed(key) {
408
+ return awaitingModelSelection.has((0, sessionKey_1.keyToString)(key));
409
+ }
410
+ /** Disarm the numbered-reply affordance — the provider level shows no numbers. */
411
+ function clearModelPagePick(key) {
412
+ const kStr = (0, sessionKey_1.keyToString)(key);
413
+ threadModelLists.delete(kStr);
414
+ awaitingModelSelection.delete(kStr);
415
+ }
416
+ /**
417
+ * @description Resolve a numbered pick against the page the thread is currently
418
+ * looking at, and CONSUME the bare-digit affordance. `null` when the number
419
+ * addresses nothing on that page.
420
+ *
421
+ * The single resolver behind BOTH numbered entry points — `/model <n>` and the
422
+ * plain "3" reply — so the range check and the disarm cannot drift apart. The
423
+ * disarm is unconditional because an armed thread silently swallows a later
424
+ * ordinary "3" prompt as a model pick instead of forwarding it to the agent;
425
+ * `/model <n>` used to skip it entirely. The page list itself survives, so a
426
+ * follow-up `/model 4` still resolves against the list still on screen.
427
+ *
428
+ * Exported so that rule is directly assertable without a Telegram surface.
429
+ */
430
+ function getNumberedModelPick(key, num) {
431
+ const kStr = (0, sessionKey_1.keyToString)(key);
432
+ const pageModels = threadModelLists.get(kStr);
433
+ awaitingModelSelection.delete(kStr);
434
+ if (!pageModels || num < 1 || num > pageModels.length)
435
+ return null;
436
+ return pageModels[num - 1];
437
+ }
438
+ /**
439
+ * @description Apply a numbered pick and reply — the shared tail of `/model <n>`
440
+ * and the plain "3" reply. Always replies (even for an adapter that cannot set a
441
+ * model), so both call sites can return unconditionally afterwards.
442
+ */
443
+ async function applyNumberedModelPick(adapter, key, num) {
444
+ const selected = getNumberedModelPick(key, num);
445
+ if (selected === null) {
446
+ await replyToThread(key, (0, i18n_1.t)('model.invalid_number'));
447
+ return;
448
+ }
449
+ const { message } = await applyModelSelection(adapter, key, selected);
450
+ await replyToThread(key, message);
451
+ }
452
+ /**
453
+ * @description Arm (or disarm) the bare-digit pick to match what the render
454
+ * actually shows. THE single choke point: a button pick re-renders its page
455
+ * WITHOUT numbers, and leaving `awaitingModelSelection` armed there made a
456
+ * later ordinary "3" prompt get swallowed as a model pick instead of reaching
457
+ * the agent.
458
+ */
459
+ function applyModelPagePickArming(key, render) {
460
+ if (render.isNumberedPickArmed && render.pageModels.length > 0) {
461
+ armModelPagePick(key, render.pageModels);
462
+ return;
463
+ }
464
+ clearModelPagePick(key);
465
+ }
466
+ /**
467
+ * @description Open the `/model` picker as a NEW message. Starts at the model
468
+ * level when the catalog has a single offered provider (the Claude aliases),
469
+ * otherwise at the provider level.
470
+ */
471
+ async function showModelPicker(key, adapter) {
472
+ const current = getCurrentModelLabel(adapter, key);
473
+ const catalog = await getModelCatalog(adapter);
474
+ if (catalog.providers.length === 0) {
475
+ clearModelPagePick(key);
476
+ await replyToThread(key, (0, i18n_1.t)('model.none_available', { current }));
477
+ return;
478
+ }
479
+ const render = (0, modelPickerPlan_1.checkHasProviderLevel)(catalog.visibleProviders.length, catalog.hiddenProviders.length)
480
+ ? buildModelProviderRender(catalog, current)
481
+ // Single offered provider → the provider level is a one-button detour;
482
+ // `providers` then holds exactly that one entry, hence index 0.
483
+ : buildModelPageRender(catalog, 0, 0, current, { isWithNumberedList: true });
484
+ if (!render) {
485
+ clearModelPagePick(key);
486
+ await replyToThread(key, (0, i18n_1.t)('model.none_available', { current }));
487
+ return;
488
+ }
489
+ applyModelPagePickArming(key, render);
490
+ await replyToThread(key, render.text, render.keyboard);
491
+ }
492
+ /** Re-render the provider level in place (after a hide/show toggle or «back»). */
493
+ async function refreshModelProviderLevel(ctx, key) {
494
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
495
+ const catalog = await getModelCatalog(adapter);
496
+ const render = buildModelProviderRender(catalog, getCurrentModelLabel(adapter, key));
497
+ applyModelPagePickArming(key, render);
498
+ await editModelPickerMessage(ctx, render);
499
+ }
500
+ function registerProviderCommands() {
501
+ command('connect', async (ctx, key, parsed) => {
502
+ const { providerId, apiKey } = getConnectCommandArgs(parsed);
503
+ if (!(0, openCodeAdapter_1.checkIsValidProviderId)(providerId)) {
504
+ if (apiKey !== null)
505
+ await deleteThreadMessage(key, ctx.message.message_id);
506
+ await replyToThread(key, (0, i18n_1.t)('connect.invalid_provider', { provider: providerId }));
507
+ return;
508
+ }
509
+ // Inline API-key fast path: `/connect <provider> sk-…` connects with the key
510
+ // directly (and deletes the secret message). No key → show the method picker
511
+ // so the user can choose OAuth (subscription) vs API key.
512
+ if (apiKey !== null) {
513
+ await handleProviderConnectKey(key, providerId, apiKey, ctx.message.message_id);
514
+ return;
515
+ }
516
+ await showConnectMethodPicker(key, providerId);
517
+ });
518
+ command('disconnect', async (_ctx, key, parsed) => {
519
+ // No thread-adapter gate — `/connect` has none either; the unsupported-build
520
+ // guard lives where the provider-auth adapter is resolved.
521
+ const providerId = parsed.argsText;
522
+ if (!providerId) {
523
+ await showDisconnectProviderPicker(key);
524
+ return;
525
+ }
526
+ await applyProviderDisconnect(key, providerId);
527
+ });
528
+ }
529
+ function registerModelCommands() {
530
+ command('model', async (_ctx, key, parsed) => {
531
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
532
+ const args = parsed.argsText;
533
+ // numeric selection from the last rendered page
534
+ if (/^\d+$/.test(args)) {
535
+ await applyNumberedModelPick(adapter, key, parseInt(args, 10));
536
+ return;
537
+ }
538
+ // direct «/model provider/name» — resolves a HIDDEN provider too: hiding
539
+ // filters the picker only and must never break an explicit pick or a saved
540
+ // model pref.
541
+ if (args) {
542
+ const { message } = await applyModelSelection(adapter, key, args);
543
+ await replyToThread(key, message);
544
+ return;
545
+ }
546
+ await showModelPicker(key, adapter);
547
+ });
548
+ command('effort', async (_ctx, key, parsed) => {
549
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
550
+ const args = parsed.argsText;
551
+ // Backend must support the effort contract (both methods are optional).
552
+ if (!adapter.setEffort || !adapter.getAvailableEffortLevels) {
553
+ await replyToThread(key, (0, i18n_1.t)('effort.unsupported_backend', { label: adapter.label }));
554
+ return;
555
+ }
556
+ // No `checkIsActive` gate — like `/model`, effort works pre-session: the
557
+ // adapter persists the pick (OpenCode/Claude) and a later session replays it.
558
+ // The picker lists the PROSPECTIVE model's levels; the direct-set path
559
+ // surfaces the adapter's own notice (e.g. Claude's `effort.start_agent_first`).
560
+ // Direct set: `/effort <level>`. The adapter validates (Claude against its
561
+ // canonical set, OpenCode against the model's variants) and returns a
562
+ // user-facing notice string on any non-success.
563
+ if (args) {
564
+ const wakeNotice = await wakeSleepingSession(key); // L-D4: apply to the woken session
565
+ if (wakeNotice)
566
+ await replyToThread(key, wakeNotice);
567
+ const err = await adapter.setEffort(key, args);
568
+ if (err) {
569
+ await replyToThread(key, err);
570
+ }
571
+ else {
572
+ await replyToThread(key, (0, i18n_1.t)('effort.set_success', { level: args }));
573
+ await updatePinnedStatus(key).catch(() => { });
574
+ }
575
+ return;
576
+ }
577
+ // No arg: show current effort + a button per available level.
578
+ let levels = [];
579
+ try {
580
+ levels = await adapter.getAvailableEffortLevels(key);
581
+ }
582
+ catch (e) {
583
+ console.error('[Bot] getAvailableEffortLevels:', e);
584
+ }
585
+ if (levels.length === 0) {
586
+ // Empty means the current model declares no variants (OpenCode) or the
587
+ // backend reports no levels — not an error, just nothing to pick.
588
+ await replyToThread(key, (0, i18n_1.t)('effort.not_available'));
589
+ return;
590
+ }
591
+ const cur = adapter.getEffort?.(key) ?? null;
592
+ await replyToThread(key, (0, i18n_1.t)('effort.choose', { current: cur ?? (0, i18n_1.t)('effort.current_none') }), buildEffortKeyboard(levels, cur));
593
+ });
594
+ }
595
+ function registerModelCallbacks() {
596
+ /**
597
+ * @description `/model` picker callbacks — the two-level provider → models
598
+ * keyboard. All of them are registered BEFORE the generic `model_(.+)$`
599
+ * handler below (which is the legacy "pick this model id" button kept for
600
+ * back-compat) so no prefix can be mis-matched; Telegraf dispatches action
601
+ * regexes first-match-wins, the same ordering rule `bind_page_(\d+)$` relies on.
602
+ */
603
+ // Provider tapped (or a page arrow) → render that provider's model page.
604
+ bot.action(modelPickerPlan_1.providerPageCallbackRe, async (ctx) => {
605
+ const key = await authoriseContext(ctx);
606
+ if (!key) {
607
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
608
+ return;
609
+ }
610
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
611
+ const catalog = await getModelCatalog(adapter);
612
+ const render = buildModelPageRender(catalog, Number(ctx.match[1]), Number(ctx.match[2]), getCurrentModelLabel(adapter, key), { isWithNumberedList: true });
613
+ if (!render) {
614
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_provider_gone'));
615
+ return;
616
+ }
617
+ applyModelPagePickArming(key, render);
618
+ await editModelPickerMessage(ctx, render);
619
+ await ctx.answerCbQuery();
620
+ });
621
+ // Model tapped → same apply path as `/model <name>` and the numeric reply.
622
+ bot.action(modelPickerPlan_1.modelPickCallbackRe, async (ctx) => {
623
+ const key = await authoriseContext(ctx);
624
+ if (!key) {
625
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
626
+ return;
627
+ }
628
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
629
+ if (!adapter.setModel) {
630
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.not_supported', { label: adapter.label }));
631
+ return;
632
+ }
633
+ const catalog = await getModelCatalog(adapter);
634
+ const providerIndex = Number(ctx.match[1]);
635
+ const modelIndex = Number(ctx.match[2]);
636
+ const provider = catalog.providers[providerIndex];
637
+ const modelId = provider === undefined
638
+ ? undefined
639
+ : catalog.byProvider.get(provider)?.[modelIndex];
640
+ if (modelId === undefined) {
641
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_provider_gone'));
642
+ return;
643
+ }
644
+ const { isOk, message, setModelError, displayLabel } = await applyModelSelection(adapter, key, modelId);
645
+ if (!isOk) {
646
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_error', { error: (setModelError ?? message).slice(0, 50) }));
647
+ return;
648
+ }
649
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_set', { model: displayLabel.split('/').pop() || displayLabel }));
650
+ // The pick is made, so the page's bare-digit affordance must go (an armed
651
+ // thread swallows a later ordinary "3" prompt) — and with it the numbers in
652
+ // the text. Re-render the SAME page so the ✓ moves to the model just picked.
653
+ const refreshed = buildModelPageRender(catalog, providerIndex, Math.floor(modelIndex / MODEL_PAGE_SIZE), getCurrentModelLabel(adapter, key), { isWithNumberedList: false });
654
+ if (refreshed) {
655
+ applyModelPagePickArming(key, refreshed);
656
+ await editModelPickerMessage(ctx, refreshed);
657
+ }
658
+ else {
659
+ clearModelPagePick(key);
660
+ }
661
+ await replyToThread(key, message);
662
+ });
663
+ // 🙈 / 👁 — the bot-side provider filter. GLOBAL for the instance and the only
664
+ // lever that works for a provider OpenCode enables from an environment
665
+ // variable, which `/disconnect` cannot remove.
666
+ bot.action(modelPickerPlan_1.providerHideCallbackRe, async (ctx) => {
667
+ const key = await authoriseContext(ctx);
668
+ if (!key) {
669
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
670
+ return;
671
+ }
672
+ const catalog = await getModelCatalog((0, createAdapter_1.getThreadAdapter)(key));
673
+ const provider = catalog.providers[Number(ctx.match[1])];
674
+ if (provider === undefined) {
675
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_provider_gone'));
676
+ return;
677
+ }
678
+ await getState().setModelProviderHidden(provider, true);
679
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_hidden', { provider }));
680
+ await refreshModelProviderLevel(ctx, key);
681
+ });
682
+ bot.action(modelPickerPlan_1.providerShowCallbackRe, async (ctx) => {
683
+ const key = await authoriseContext(ctx);
684
+ if (!key) {
685
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
686
+ return;
687
+ }
688
+ const catalog = await getModelCatalog((0, createAdapter_1.getThreadAdapter)(key));
689
+ const provider = catalog.providers[Number(ctx.match[1])];
690
+ if (provider === undefined) {
691
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_provider_gone'));
692
+ return;
693
+ }
694
+ await getState().setModelProviderHidden(provider, false);
695
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_shown', { provider }));
696
+ await refreshModelProviderLevel(ctx, key);
697
+ });
698
+ // «⬅️ providers» — back to the provider level.
699
+ bot.action(modelPickerPlan_1.modelPickerBackCallback, async (ctx) => {
700
+ const key = await authoriseContext(ctx);
701
+ if (!key) {
702
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
703
+ return;
704
+ }
705
+ await ctx.answerCbQuery();
706
+ await refreshModelProviderLevel(ctx, key);
707
+ });
708
+ // Inert label buttons (the "2/5" page pill, a hidden provider's name).
709
+ bot.action(modelPickerPlan_1.modelPickerNoopCallback, async (ctx) => {
710
+ await ctx.answerCbQuery();
711
+ });
712
+ // Bare-`/disconnect` picker row → drop that provider's stored credentials.
713
+ // Resolved against the snapshot of the message the button sits on, so an older
714
+ // picker left in the history can never map its index onto a newer list and
715
+ // delete the wrong provider's credentials.
716
+ bot.action(providerDisconnectPlan_1.disconnectProviderCallbackRe, async (ctx) => {
717
+ const key = await authoriseContext(ctx);
718
+ if (!key) {
719
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
720
+ return;
721
+ }
722
+ const provider = (0, providerDisconnectPlan_1.getDisconnectPickerProviderAt)(disconnectProviderLists, (0, sessionKey_1.keyToString)(key), (0, callbackMessage_1.getCallbackMessageId)(ctx), Number(ctx.match[1]));
723
+ if (provider === null) {
724
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.disconnect_expired'));
725
+ return;
726
+ }
727
+ await ctx.answerCbQuery();
728
+ await applyProviderDisconnect(key, provider);
729
+ });
730
+ bot.action(/^model_(.+)$/, async (ctx) => {
731
+ const key = await authoriseContext(ctx);
732
+ if (!key) {
733
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
734
+ return;
735
+ }
736
+ const modelId = ctx.match[1];
737
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
738
+ // No bot-side session gate: the adapter owns the no-session decision
739
+ // (OpenCode persists the pick for next start and succeeds; Claude refuses
740
+ // with a notice surfaced as the error toast below).
741
+ if (!adapter.setModel) {
742
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.not_supported', { label: adapter.label }));
743
+ return;
744
+ }
745
+ const { isOk, message, setModelError, displayLabel } = await applyModelSelection(adapter, key, modelId);
746
+ if (!isOk) {
747
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_error', { error: (setModelError ?? message).slice(0, 50) }));
748
+ return;
749
+ }
750
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.model_set', { model: displayLabel.split('/').pop() || displayLabel }));
751
+ await replyToThread(key, message);
752
+ });
753
+ bot.action(/^connm_(\d+)$/, async (ctx) => {
754
+ const key = await authoriseContext(ctx);
755
+ if (!key) {
756
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
757
+ return;
758
+ }
759
+ const entry = connectMethodLists.get((0, sessionKey_1.keyToString)(key));
760
+ const idx = Number(ctx.match[1]);
761
+ const method = entry?.methods[idx];
762
+ if (!entry || !method) {
763
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.connect_method_expired'));
764
+ return;
765
+ }
766
+ await ctx.answerCbQuery();
767
+ if ((0, openCodeAuthLogin_1.checkIsOAuthMethod)(method)) {
768
+ // OAuth (subscription/account): drive `opencode auth login` out-of-band.
769
+ await startOpenCodeOAuthLogin(key, entry.providerId, method.label);
770
+ return;
771
+ }
772
+ // API-key method: arm the existing key-paste flow (next message is the key).
773
+ armProviderConnect(key, entry.providerId);
774
+ await replyToThread(key, (0, i18n_1.t)('connect.prompt_key', { provider: entry.providerId }));
775
+ });
776
+ bot.action(/^effort_(.+)$/, async (ctx) => {
777
+ const key = await authoriseContext(ctx);
778
+ if (!key) {
779
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
780
+ return;
781
+ }
782
+ const level = ctx.match[1];
783
+ const adapter = (0, createAdapter_1.getThreadAdapter)(key);
784
+ // No `checkIsActive` gate — effort is persisted pre-session (mirrors the
785
+ // `/effort` command and `/model`). The adapter returns its own notice if the
786
+ // pick can't apply live; we surface it via `cb.effort_error` below.
787
+ if (!adapter.setEffort) {
788
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.not_supported', { label: adapter.label }));
789
+ return;
790
+ }
791
+ const wakeNotice = await wakeSleepingSession(key); // L-D4: apply to the woken session
792
+ if (wakeNotice)
793
+ await replyToThread(key, wakeNotice);
794
+ const err = await adapter.setEffort(key, level);
795
+ if (err) {
796
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.effort_error', { error: err.slice(0, 50) }));
797
+ return;
798
+ }
799
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.effort_set', { level }));
800
+ await replyToThread(key, (0, i18n_1.t)('effort.set_success', { level }));
801
+ await updatePinnedStatus(key).catch(() => { });
802
+ // Re-render the picker so the `✓` marker follows the new level instead of
803
+ // staying stuck on the previously-selected one (B12). The current level is
804
+ // the freshly-set one; fall back to `level` if the adapter can't report it.
805
+ const cbMsg = ctx.callbackQuery?.message;
806
+ if (cbMsg && adapter.getAvailableEffortLevels) {
807
+ let levels = [];
808
+ try {
809
+ levels = await adapter.getAvailableEffortLevels(key);
810
+ }
811
+ catch (e) {
812
+ console.error('[effort_cb] getAvailableEffortLevels:', e);
813
+ }
814
+ if (levels.length > 0) {
815
+ const cur = adapter.getEffort?.(key) ?? level;
816
+ const keyboard = buildEffortKeyboard(levels, cur);
817
+ try {
818
+ await (0, rateLimiter_1.enqueueSend)(key, () => bot.telegram.editMessageReplyMarkup((0, sessionKeyCodec_1.getTelegramChatId)(key), cbMsg.message_id, undefined, keyboard.reply_markup));
819
+ }
820
+ catch (e) {
821
+ const desc = (0, sendErrorClassifier_1.checkIsApiError)(e) ? (0, sendErrorClassifier_1.getErrorDescription)(e) : '';
822
+ if (!/message is not modified/i.test(desc)) {
823
+ console.warn('[effort_cb] keyboard re-render failed:', desc || e);
824
+ }
825
+ }
826
+ }
827
+ }
828
+ });
829
+ }
830
+ return {
831
+ handleProviderConnectKey,
832
+ applyNumberedModelPick,
833
+ applyModelPagePickArming,
834
+ checkIsNumberedModelPickArmed,
835
+ getNumberedModelPick,
836
+ registerProviderCommands,
837
+ registerModelCommands,
838
+ registerModelCallbacks,
839
+ };
840
+ }
841
+ //# sourceMappingURL=modelProviders.js.map