charness 0.0.0-stage → 3.1.0

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