charness 0.0.0-stage → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (988) hide show
  1. package/.env.example +88 -0
  2. package/DEVELOPMENT.md +110 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION_1_TO_2.md +24 -0
  5. package/README.md +1024 -2
  6. package/dist/accessControl.d.ts +71 -0
  7. package/dist/accessControl.d.ts.map +1 -0
  8. package/dist/accessControl.js +108 -0
  9. package/dist/accessControl.js.map +1 -0
  10. package/dist/adapters/adapterEventRouting.d.ts +51 -0
  11. package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
  12. package/dist/adapters/adapterEventRouting.js +74 -0
  13. package/dist/adapters/adapterEventRouting.js.map +1 -0
  14. package/dist/adapters/adapterNames.d.ts +19 -0
  15. package/dist/adapters/adapterNames.d.ts.map +1 -0
  16. package/dist/adapters/adapterNames.js +25 -0
  17. package/dist/adapters/adapterNames.js.map +1 -0
  18. package/dist/adapters/claudeCliAdapter.d.ts +1336 -0
  19. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
  20. package/dist/adapters/claudeCliAdapter.js +4204 -0
  21. package/dist/adapters/claudeCliAdapter.js.map +1 -0
  22. package/dist/adapters/claudeJsonStreamAdapter.d.ts +548 -0
  23. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
  24. package/dist/adapters/claudeJsonStreamAdapter.js +1810 -0
  25. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
  26. package/dist/adapters/claudePlatformFlags.d.ts +35 -0
  27. package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
  28. package/dist/adapters/claudePlatformFlags.js +46 -0
  29. package/dist/adapters/claudePlatformFlags.js.map +1 -0
  30. package/dist/adapters/createAdapter.d.ts +252 -0
  31. package/dist/adapters/createAdapter.d.ts.map +1 -0
  32. package/dist/adapters/createAdapter.js +475 -0
  33. package/dist/adapters/createAdapter.js.map +1 -0
  34. package/dist/adapters/openCodeAdapter.d.ts +1446 -0
  35. package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
  36. package/dist/adapters/openCodeAdapter.js +4540 -0
  37. package/dist/adapters/openCodeAdapter.js.map +1 -0
  38. package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
  39. package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
  40. package/dist/adapters/sessionLaunchDefaults.js +15 -0
  41. package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
  42. package/dist/adapters/terminalAdapter.d.ts +68 -0
  43. package/dist/adapters/terminalAdapter.d.ts.map +1 -0
  44. package/dist/adapters/terminalAdapter.js +371 -0
  45. package/dist/adapters/terminalAdapter.js.map +1 -0
  46. package/dist/agentLogin/agentLogin.d.ts +31 -0
  47. package/dist/agentLogin/agentLogin.d.ts.map +1 -0
  48. package/dist/agentLogin/agentLogin.js +493 -0
  49. package/dist/agentLogin/agentLogin.js.map +1 -0
  50. package/dist/agentTrigger.d.ts +28 -0
  51. package/dist/agentTrigger.d.ts.map +1 -0
  52. package/dist/agentTrigger.js +53 -0
  53. package/dist/agentTrigger.js.map +1 -0
  54. package/dist/apiErrorRetry.d.ts +209 -0
  55. package/dist/apiErrorRetry.d.ts.map +1 -0
  56. package/dist/apiErrorRetry.js +351 -0
  57. package/dist/apiErrorRetry.js.map +1 -0
  58. package/dist/apiRetryKick.d.ts +148 -0
  59. package/dist/apiRetryKick.d.ts.map +1 -0
  60. package/dist/apiRetryKick.js +158 -0
  61. package/dist/apiRetryKick.js.map +1 -0
  62. package/dist/bootClassifier.d.ts +46 -0
  63. package/dist/bootClassifier.d.ts.map +1 -0
  64. package/dist/bootClassifier.js +43 -0
  65. package/dist/bootClassifier.js.map +1 -0
  66. package/dist/bot.d.ts +207 -0
  67. package/dist/bot.d.ts.map +1 -0
  68. package/dist/bot.js +10611 -0
  69. package/dist/bot.js.map +1 -0
  70. package/dist/botFileStorage.d.ts +60 -0
  71. package/dist/botFileStorage.d.ts.map +1 -0
  72. package/dist/botFileStorage.js +205 -0
  73. package/dist/botFileStorage.js.map +1 -0
  74. package/dist/cli/applyDnsFix.d.ts +7 -0
  75. package/dist/cli/applyDnsFix.d.ts.map +1 -0
  76. package/dist/cli/applyDnsFix.js +46 -0
  77. package/dist/cli/applyDnsFix.js.map +1 -0
  78. package/dist/cli/bot.d.ts +27 -0
  79. package/dist/cli/bot.d.ts.map +1 -0
  80. package/dist/cli/bot.js +98 -0
  81. package/dist/cli/bot.js.map +1 -0
  82. package/dist/cli/botEntry.d.ts +3 -0
  83. package/dist/cli/botEntry.d.ts.map +1 -0
  84. package/dist/cli/botEntry.js +11 -0
  85. package/dist/cli/botEntry.js.map +1 -0
  86. package/dist/cli/connectorGuards.d.ts +31 -0
  87. package/dist/cli/connectorGuards.d.ts.map +1 -0
  88. package/dist/cli/connectorGuards.js +159 -0
  89. package/dist/cli/connectorGuards.js.map +1 -0
  90. package/dist/cli/envLoader.d.ts +34 -0
  91. package/dist/cli/envLoader.d.ts.map +1 -0
  92. package/dist/cli/envLoader.js +132 -0
  93. package/dist/cli/envLoader.js.map +1 -0
  94. package/dist/cli/hot.d.ts +82 -0
  95. package/dist/cli/hot.d.ts.map +1 -0
  96. package/dist/cli/hot.js +323 -0
  97. package/dist/cli/hot.js.map +1 -0
  98. package/dist/cli.d.ts +3 -0
  99. package/dist/cli.d.ts.map +1 -0
  100. package/dist/cli.js +130 -0
  101. package/dist/cli.js.map +1 -0
  102. package/dist/connectors/jira/adf.d.ts +72 -0
  103. package/dist/connectors/jira/adf.d.ts.map +1 -0
  104. package/dist/connectors/jira/adf.js +407 -0
  105. package/dist/connectors/jira/adf.js.map +1 -0
  106. package/dist/connectors/jira/agentBinaries.d.ts +14 -0
  107. package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
  108. package/dist/connectors/jira/agentBinaries.js +75 -0
  109. package/dist/connectors/jira/agentBinaries.js.map +1 -0
  110. package/dist/connectors/jira/answerSink.d.ts +52 -0
  111. package/dist/connectors/jira/answerSink.d.ts.map +1 -0
  112. package/dist/connectors/jira/answerSink.js +220 -0
  113. package/dist/connectors/jira/answerSink.js.map +1 -0
  114. package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
  115. package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
  116. package/dist/connectors/jira/attachmentDownload.js +92 -0
  117. package/dist/connectors/jira/attachmentDownload.js.map +1 -0
  118. package/dist/connectors/jira/attachmentTool.d.ts +43 -0
  119. package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
  120. package/dist/connectors/jira/attachmentTool.js +150 -0
  121. package/dist/connectors/jira/attachmentTool.js.map +1 -0
  122. package/dist/connectors/jira/client.d.ts +490 -0
  123. package/dist/connectors/jira/client.d.ts.map +1 -0
  124. package/dist/connectors/jira/client.js +453 -0
  125. package/dist/connectors/jira/client.js.map +1 -0
  126. package/dist/connectors/jira/config.d.ts +117 -0
  127. package/dist/connectors/jira/config.d.ts.map +1 -0
  128. package/dist/connectors/jira/config.js +350 -0
  129. package/dist/connectors/jira/config.js.map +1 -0
  130. package/dist/connectors/jira/configFile.d.ts +10 -0
  131. package/dist/connectors/jira/configFile.d.ts.map +1 -0
  132. package/dist/connectors/jira/configFile.js +50 -0
  133. package/dist/connectors/jira/configFile.js.map +1 -0
  134. package/dist/connectors/jira/connector.d.ts +68 -0
  135. package/dist/connectors/jira/connector.d.ts.map +1 -0
  136. package/dist/connectors/jira/connector.js +257 -0
  137. package/dist/connectors/jira/connector.js.map +1 -0
  138. package/dist/connectors/jira/contextLedger.d.ts +59 -0
  139. package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
  140. package/dist/connectors/jira/contextLedger.js +194 -0
  141. package/dist/connectors/jira/contextLedger.js.map +1 -0
  142. package/dist/connectors/jira/contextPreamble.d.ts +18 -0
  143. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
  144. package/dist/connectors/jira/contextPreamble.js +31 -0
  145. package/dist/connectors/jira/contextPreamble.js.map +1 -0
  146. package/dist/connectors/jira/inbound.d.ts +132 -0
  147. package/dist/connectors/jira/inbound.d.ts.map +1 -0
  148. package/dist/connectors/jira/inbound.js +316 -0
  149. package/dist/connectors/jira/inbound.js.map +1 -0
  150. package/dist/connectors/jira/issueBlocks.d.ts +51 -0
  151. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
  152. package/dist/connectors/jira/issueBlocks.js +182 -0
  153. package/dist/connectors/jira/issueBlocks.js.map +1 -0
  154. package/dist/connectors/jira/issueContext.d.ts +25 -0
  155. package/dist/connectors/jira/issueContext.d.ts.map +1 -0
  156. package/dist/connectors/jira/issueContext.js +53 -0
  157. package/dist/connectors/jira/issueContext.js.map +1 -0
  158. package/dist/connectors/jira/issueDelta.d.ts +35 -0
  159. package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
  160. package/dist/connectors/jira/issueDelta.js +50 -0
  161. package/dist/connectors/jira/issueDelta.js.map +1 -0
  162. package/dist/connectors/jira/mediaPlaceholders.d.ts +20 -0
  163. package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
  164. package/dist/connectors/jira/mediaPlaceholders.js +92 -0
  165. package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
  166. package/dist/connectors/jira/outbound.d.ts +6 -0
  167. package/dist/connectors/jira/outbound.d.ts.map +1 -0
  168. package/dist/connectors/jira/outbound.js +38 -0
  169. package/dist/connectors/jira/outbound.js.map +1 -0
  170. package/dist/connectors/jira/prompt.d.ts +37 -0
  171. package/dist/connectors/jira/prompt.d.ts.map +1 -0
  172. package/dist/connectors/jira/prompt.js +99 -0
  173. package/dist/connectors/jira/prompt.js.map +1 -0
  174. package/dist/connectors/jira/promptSpill.d.ts +50 -0
  175. package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
  176. package/dist/connectors/jira/promptSpill.js +157 -0
  177. package/dist/connectors/jira/promptSpill.js.map +1 -0
  178. package/dist/connectors/jira/promptText.d.ts +7 -0
  179. package/dist/connectors/jira/promptText.d.ts.map +1 -0
  180. package/dist/connectors/jira/promptText.js +26 -0
  181. package/dist/connectors/jira/promptText.js.map +1 -0
  182. package/dist/connectors/jira/sessionKeyCodec.d.ts +16 -0
  183. package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
  184. package/dist/connectors/jira/sessionKeyCodec.js +101 -0
  185. package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
  186. package/dist/connectors/jira/trigger.d.ts +50 -0
  187. package/dist/connectors/jira/trigger.d.ts.map +1 -0
  188. package/dist/connectors/jira/trigger.js +93 -0
  189. package/dist/connectors/jira/trigger.js.map +1 -0
  190. package/dist/connectors/jira/triggerLog.d.ts +51 -0
  191. package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
  192. package/dist/connectors/jira/triggerLog.js +78 -0
  193. package/dist/connectors/jira/triggerLog.js.map +1 -0
  194. package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
  195. package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
  196. package/dist/connectors/jira/unconfirmedPosts.js +105 -0
  197. package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
  198. package/dist/connectors/telegram/answerSink.d.ts +46 -0
  199. package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
  200. package/dist/connectors/telegram/answerSink.js +71 -0
  201. package/dist/connectors/telegram/answerSink.js.map +1 -0
  202. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +31 -0
  203. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
  204. package/dist/connectors/telegram/commands/autoContinueLimits.js +142 -0
  205. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
  206. package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
  207. package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
  208. package/dist/connectors/telegram/commands/botCore.js +3 -0
  209. package/dist/connectors/telegram/commands/botCore.js.map +1 -0
  210. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  211. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
  212. package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
  213. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
  214. package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
  215. package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
  216. package/dist/connectors/telegram/commands/compaction.js +868 -0
  217. package/dist/connectors/telegram/commands/compaction.js.map +1 -0
  218. package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
  219. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
  220. package/dist/connectors/telegram/commands/displayModes.js +335 -0
  221. package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
  222. package/dist/connectors/telegram/commands/modelProviders.d.ts +95 -0
  223. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
  224. package/dist/connectors/telegram/commands/modelProviders.js +841 -0
  225. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
  226. package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
  227. package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
  228. package/dist/connectors/telegram/commands/reminders.js +624 -0
  229. package/dist/connectors/telegram/commands/reminders.js.map +1 -0
  230. package/dist/connectors/telegram/fileIntake.d.ts +166 -0
  231. package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
  232. package/dist/connectors/telegram/fileIntake.js +304 -0
  233. package/dist/connectors/telegram/fileIntake.js.map +1 -0
  234. package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
  235. package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
  236. package/dist/connectors/telegram/fileSendGateway.js +221 -0
  237. package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
  238. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
  239. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
  240. package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
  241. package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
  242. package/dist/connectors/telegram/inbound.d.ts +131 -0
  243. package/dist/connectors/telegram/inbound.d.ts.map +1 -0
  244. package/dist/connectors/telegram/inbound.js +278 -0
  245. package/dist/connectors/telegram/inbound.js.map +1 -0
  246. package/dist/connectors/telegram/languagePicker.d.ts +32 -0
  247. package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
  248. package/dist/connectors/telegram/languagePicker.js +55 -0
  249. package/dist/connectors/telegram/languagePicker.js.map +1 -0
  250. package/dist/connectors/telegram/messageSplit.d.ts +62 -0
  251. package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
  252. package/dist/connectors/telegram/messageSplit.js +119 -0
  253. package/dist/connectors/telegram/messageSplit.js.map +1 -0
  254. package/dist/connectors/telegram/outbound.d.ts +62 -0
  255. package/dist/connectors/telegram/outbound.d.ts.map +1 -0
  256. package/dist/connectors/telegram/outbound.js +116 -0
  257. package/dist/connectors/telegram/outbound.js.map +1 -0
  258. package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
  259. package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
  260. package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
  261. package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
  262. package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
  263. package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
  264. package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
  265. package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
  266. package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
  267. package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
  268. package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
  269. package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
  270. package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
  271. package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
  272. package/dist/connectors/telegram/outputFlushPlan.js +120 -0
  273. package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
  274. package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
  275. package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
  276. package/dist/connectors/telegram/questionKeyboards.js +37 -0
  277. package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
  278. package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
  279. package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
  280. package/dist/connectors/telegram/renderAgentHtml.js +97 -0
  281. package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
  282. package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
  283. package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
  284. package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
  285. package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
  286. package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
  287. package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
  288. package/dist/connectors/telegram/telegramCallGuard.js +35 -0
  289. package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
  290. package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
  291. package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
  292. package/dist/connectors/telegram/timezonePicker.js +142 -0
  293. package/dist/connectors/telegram/timezonePicker.js.map +1 -0
  294. package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
  295. package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
  296. package/dist/connectors/telegram/updateDispatcher.js +159 -0
  297. package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
  298. package/dist/connectors/test/connector.d.ts +52 -0
  299. package/dist/connectors/test/connector.d.ts.map +1 -0
  300. package/dist/connectors/test/connector.js +143 -0
  301. package/dist/connectors/test/connector.js.map +1 -0
  302. package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
  303. package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
  304. package/dist/connectors/test/sessionKeyCodec.js +50 -0
  305. package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
  306. package/dist/diagLog.d.ts +6 -0
  307. package/dist/diagLog.d.ts.map +1 -0
  308. package/dist/diagLog.js +58 -0
  309. package/dist/diagLog.js.map +1 -0
  310. package/dist/effortLevels.d.ts +68 -0
  311. package/dist/effortLevels.d.ts.map +1 -0
  312. package/dist/effortLevels.js +114 -0
  313. package/dist/effortLevels.js.map +1 -0
  314. package/dist/folderName.d.ts +42 -0
  315. package/dist/folderName.d.ts.map +1 -0
  316. package/dist/folderName.js +51 -0
  317. package/dist/folderName.js.map +1 -0
  318. package/dist/i18n/de.d.ts +2 -0
  319. package/dist/i18n/de.d.ts.map +1 -0
  320. package/dist/i18n/de.js +537 -0
  321. package/dist/i18n/de.js.map +1 -0
  322. package/dist/i18n/en.d.ts +7 -0
  323. package/dist/i18n/en.d.ts.map +1 -0
  324. package/dist/i18n/en.js +566 -0
  325. package/dist/i18n/en.js.map +1 -0
  326. package/dist/i18n/es.d.ts +2 -0
  327. package/dist/i18n/es.d.ts.map +1 -0
  328. package/dist/i18n/es.js +537 -0
  329. package/dist/i18n/es.js.map +1 -0
  330. package/dist/i18n/fr.d.ts +2 -0
  331. package/dist/i18n/fr.d.ts.map +1 -0
  332. package/dist/i18n/fr.js +537 -0
  333. package/dist/i18n/fr.js.map +1 -0
  334. package/dist/i18n/hi.d.ts +2 -0
  335. package/dist/i18n/hi.d.ts.map +1 -0
  336. package/dist/i18n/hi.js +537 -0
  337. package/dist/i18n/hi.js.map +1 -0
  338. package/dist/i18n/ja.d.ts +2 -0
  339. package/dist/i18n/ja.d.ts.map +1 -0
  340. package/dist/i18n/ja.js +537 -0
  341. package/dist/i18n/ja.js.map +1 -0
  342. package/dist/i18n/ka.d.ts +2 -0
  343. package/dist/i18n/ka.d.ts.map +1 -0
  344. package/dist/i18n/ka.js +537 -0
  345. package/dist/i18n/ka.js.map +1 -0
  346. package/dist/i18n/pt.d.ts +2 -0
  347. package/dist/i18n/pt.d.ts.map +1 -0
  348. package/dist/i18n/pt.js +537 -0
  349. package/dist/i18n/pt.js.map +1 -0
  350. package/dist/i18n/ru.d.ts +6 -0
  351. package/dist/i18n/ru.d.ts.map +1 -0
  352. package/dist/i18n/ru.js +540 -0
  353. package/dist/i18n/ru.js.map +1 -0
  354. package/dist/i18n/uk.d.ts +8 -0
  355. package/dist/i18n/uk.d.ts.map +1 -0
  356. package/dist/i18n/uk.js +542 -0
  357. package/dist/i18n/uk.js.map +1 -0
  358. package/dist/i18n/uz.d.ts +2 -0
  359. package/dist/i18n/uz.d.ts.map +1 -0
  360. package/dist/i18n/uz.js +537 -0
  361. package/dist/i18n/uz.js.map +1 -0
  362. package/dist/i18n/zh.d.ts +2 -0
  363. package/dist/i18n/zh.d.ts.map +1 -0
  364. package/dist/i18n/zh.js +537 -0
  365. package/dist/i18n/zh.js.map +1 -0
  366. package/dist/i18n.d.ts +115 -0
  367. package/dist/i18n.d.ts.map +1 -0
  368. package/dist/i18n.js +233 -0
  369. package/dist/i18n.js.map +1 -0
  370. package/dist/index.d.ts +3 -0
  371. package/dist/index.d.ts.map +1 -0
  372. package/dist/index.js +10 -0
  373. package/dist/index.js.map +1 -0
  374. package/dist/installManager.d.ts +99 -0
  375. package/dist/installManager.d.ts.map +1 -0
  376. package/dist/installManager.js +943 -0
  377. package/dist/installManager.js.map +1 -0
  378. package/dist/instanceLock.d.ts +161 -0
  379. package/dist/instanceLock.d.ts.map +1 -0
  380. package/dist/instanceLock.js +388 -0
  381. package/dist/instanceLock.js.map +1 -0
  382. package/dist/mcpConfig.d.ts +76 -0
  383. package/dist/mcpConfig.d.ts.map +1 -0
  384. package/dist/mcpConfig.js +270 -0
  385. package/dist/mcpConfig.js.map +1 -0
  386. package/dist/openCodeOpenQuestion.d.ts +44 -0
  387. package/dist/openCodeOpenQuestion.d.ts.map +1 -0
  388. package/dist/openCodeOpenQuestion.js +64 -0
  389. package/dist/openCodeOpenQuestion.js.map +1 -0
  390. package/dist/openCodeQuestionFlow.d.ts +105 -0
  391. package/dist/openCodeQuestionFlow.d.ts.map +1 -0
  392. package/dist/openCodeQuestionFlow.js +143 -0
  393. package/dist/openCodeQuestionFlow.js.map +1 -0
  394. package/dist/openCodeSessionRouting.d.ts +133 -0
  395. package/dist/openCodeSessionRouting.d.ts.map +1 -0
  396. package/dist/openCodeSessionRouting.js +253 -0
  397. package/dist/openCodeSessionRouting.js.map +1 -0
  398. package/dist/openCodeSessionTitle.d.ts +50 -0
  399. package/dist/openCodeSessionTitle.d.ts.map +1 -0
  400. package/dist/openCodeSessionTitle.js +84 -0
  401. package/dist/openCodeSessionTitle.js.map +1 -0
  402. package/dist/outputTrace.d.ts +108 -0
  403. package/dist/outputTrace.d.ts.map +1 -0
  404. package/dist/outputTrace.js +430 -0
  405. package/dist/outputTrace.js.map +1 -0
  406. package/dist/pendingQuestionRepost.d.ts +47 -0
  407. package/dist/pendingQuestionRepost.d.ts.map +1 -0
  408. package/dist/pendingQuestionRepost.js +29 -0
  409. package/dist/pendingQuestionRepost.js.map +1 -0
  410. package/dist/pinnedStatus.d.ts +52 -0
  411. package/dist/pinnedStatus.d.ts.map +1 -0
  412. package/dist/pinnedStatus.js +36 -0
  413. package/dist/pinnedStatus.js.map +1 -0
  414. package/dist/platform/answerSink.d.ts +93 -0
  415. package/dist/platform/answerSink.d.ts.map +1 -0
  416. package/dist/platform/answerSink.js +31 -0
  417. package/dist/platform/answerSink.js.map +1 -0
  418. package/dist/platform/capabilityFallback.d.ts +39 -0
  419. package/dist/platform/capabilityFallback.d.ts.map +1 -0
  420. package/dist/platform/capabilityFallback.js +55 -0
  421. package/dist/platform/capabilityFallback.js.map +1 -0
  422. package/dist/platform/commandRouter.d.ts +51 -0
  423. package/dist/platform/commandRouter.d.ts.map +1 -0
  424. package/dist/platform/commandRouter.js +53 -0
  425. package/dist/platform/commandRouter.js.map +1 -0
  426. package/dist/platform/connectorSet.d.ts +39 -0
  427. package/dist/platform/connectorSet.d.ts.map +1 -0
  428. package/dist/platform/connectorSet.js +55 -0
  429. package/dist/platform/connectorSet.js.map +1 -0
  430. package/dist/platform/inbound.d.ts +147 -0
  431. package/dist/platform/inbound.d.ts.map +1 -0
  432. package/dist/platform/inbound.js +18 -0
  433. package/dist/platform/inbound.js.map +1 -0
  434. package/dist/platform/outbound.d.ts +225 -0
  435. package/dist/platform/outbound.d.ts.map +1 -0
  436. package/dist/platform/outbound.js +30 -0
  437. package/dist/platform/outbound.js.map +1 -0
  438. package/dist/platform/unservedStateGuard.d.ts +27 -0
  439. package/dist/platform/unservedStateGuard.d.ts.map +1 -0
  440. package/dist/platform/unservedStateGuard.js +42 -0
  441. package/dist/platform/unservedStateGuard.js.map +1 -0
  442. package/dist/postToSession.d.ts +94 -0
  443. package/dist/postToSession.d.ts.map +1 -0
  444. package/dist/postToSession.js +56 -0
  445. package/dist/postToSession.js.map +1 -0
  446. package/dist/progressLine.d.ts +180 -0
  447. package/dist/progressLine.d.ts.map +1 -0
  448. package/dist/progressLine.js +293 -0
  449. package/dist/progressLine.js.map +1 -0
  450. package/dist/rateLimiter.d.ts +246 -0
  451. package/dist/rateLimiter.d.ts.map +1 -0
  452. package/dist/rateLimiter.js +555 -0
  453. package/dist/rateLimiter.js.map +1 -0
  454. package/dist/requests/answerRequest.d.ts +57 -0
  455. package/dist/requests/answerRequest.d.ts.map +1 -0
  456. package/dist/requests/answerRequest.js +96 -0
  457. package/dist/requests/answerRequest.js.map +1 -0
  458. package/dist/requests/answerTail.d.ts +83 -0
  459. package/dist/requests/answerTail.d.ts.map +1 -0
  460. package/dist/requests/answerTail.js +102 -0
  461. package/dist/requests/answerTail.js.map +1 -0
  462. package/dist/requests/limitWaitAnswer.d.ts +87 -0
  463. package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
  464. package/dist/requests/limitWaitAnswer.js +83 -0
  465. package/dist/requests/limitWaitAnswer.js.map +1 -0
  466. package/dist/requests/requestGroup.d.ts +44 -0
  467. package/dist/requests/requestGroup.d.ts.map +1 -0
  468. package/dist/requests/requestGroup.js +63 -0
  469. package/dist/requests/requestGroup.js.map +1 -0
  470. package/dist/requests/requestHeader.d.ts +70 -0
  471. package/dist/requests/requestHeader.d.ts.map +1 -0
  472. package/dist/requests/requestHeader.js +83 -0
  473. package/dist/requests/requestHeader.js.map +1 -0
  474. package/dist/requests/requestLedger.d.ts +217 -0
  475. package/dist/requests/requestLedger.d.ts.map +1 -0
  476. package/dist/requests/requestLedger.js +468 -0
  477. package/dist/requests/requestLedger.js.map +1 -0
  478. package/dist/requests/sessionTurnProbe.d.ts +52 -0
  479. package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
  480. package/dist/requests/sessionTurnProbe.js +29 -0
  481. package/dist/requests/sessionTurnProbe.js.map +1 -0
  482. package/dist/requests/types.d.ts +181 -0
  483. package/dist/requests/types.d.ts.map +1 -0
  484. package/dist/requests/types.js +9 -0
  485. package/dist/requests/types.js.map +1 -0
  486. package/dist/requests/wakeUpEngine.d.ts +160 -0
  487. package/dist/requests/wakeUpEngine.d.ts.map +1 -0
  488. package/dist/requests/wakeUpEngine.js +399 -0
  489. package/dist/requests/wakeUpEngine.js.map +1 -0
  490. package/dist/requests/wakeUpRules.d.ts +151 -0
  491. package/dist/requests/wakeUpRules.d.ts.map +1 -0
  492. package/dist/requests/wakeUpRules.js +167 -0
  493. package/dist/requests/wakeUpRules.js.map +1 -0
  494. package/dist/resumeContext.d.ts +87 -0
  495. package/dist/resumeContext.d.ts.map +1 -0
  496. package/dist/resumeContext.js +114 -0
  497. package/dist/resumeContext.js.map +1 -0
  498. package/dist/scheduler/checkRun.d.ts +95 -0
  499. package/dist/scheduler/checkRun.d.ts.map +1 -0
  500. package/dist/scheduler/checkRun.js +172 -0
  501. package/dist/scheduler/checkRun.js.map +1 -0
  502. package/dist/scheduler/delivery.d.ts +99 -0
  503. package/dist/scheduler/delivery.d.ts.map +1 -0
  504. package/dist/scheduler/delivery.js +212 -0
  505. package/dist/scheduler/delivery.js.map +1 -0
  506. package/dist/scheduler/deliveryKind.d.ts +29 -0
  507. package/dist/scheduler/deliveryKind.d.ts.map +1 -0
  508. package/dist/scheduler/deliveryKind.js +39 -0
  509. package/dist/scheduler/deliveryKind.js.map +1 -0
  510. package/dist/scheduler/directoryThreads.d.ts +19 -0
  511. package/dist/scheduler/directoryThreads.d.ts.map +1 -0
  512. package/dist/scheduler/directoryThreads.js +28 -0
  513. package/dist/scheduler/directoryThreads.js.map +1 -0
  514. package/dist/scheduler/engine.d.ts +77 -0
  515. package/dist/scheduler/engine.d.ts.map +1 -0
  516. package/dist/scheduler/engine.js +337 -0
  517. package/dist/scheduler/engine.js.map +1 -0
  518. package/dist/scheduler/injection.d.ts +102 -0
  519. package/dist/scheduler/injection.d.ts.map +1 -0
  520. package/dist/scheduler/injection.js +122 -0
  521. package/dist/scheduler/injection.js.map +1 -0
  522. package/dist/scheduler/mcpBoot.d.ts +65 -0
  523. package/dist/scheduler/mcpBoot.d.ts.map +1 -0
  524. package/dist/scheduler/mcpBoot.js +60 -0
  525. package/dist/scheduler/mcpBoot.js.map +1 -0
  526. package/dist/scheduler/mcpSurface.d.ts +355 -0
  527. package/dist/scheduler/mcpSurface.d.ts.map +1 -0
  528. package/dist/scheduler/mcpSurface.js +1257 -0
  529. package/dist/scheduler/mcpSurface.js.map +1 -0
  530. package/dist/scheduler/rebindResume.d.ts +27 -0
  531. package/dist/scheduler/rebindResume.d.ts.map +1 -0
  532. package/dist/scheduler/rebindResume.js +17 -0
  533. package/dist/scheduler/rebindResume.js.map +1 -0
  534. package/dist/scheduler/recurrence.d.ts +58 -0
  535. package/dist/scheduler/recurrence.d.ts.map +1 -0
  536. package/dist/scheduler/recurrence.js +210 -0
  537. package/dist/scheduler/recurrence.js.map +1 -0
  538. package/dist/scheduler/runLedger.d.ts +59 -0
  539. package/dist/scheduler/runLedger.d.ts.map +1 -0
  540. package/dist/scheduler/runLedger.js +54 -0
  541. package/dist/scheduler/runLedger.js.map +1 -0
  542. package/dist/scheduler/store.d.ts +97 -0
  543. package/dist/scheduler/store.d.ts.map +1 -0
  544. package/dist/scheduler/store.js +124 -0
  545. package/dist/scheduler/store.js.map +1 -0
  546. package/dist/scheduler/timezoneRecompute.d.ts +61 -0
  547. package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
  548. package/dist/scheduler/timezoneRecompute.js +46 -0
  549. package/dist/scheduler/timezoneRecompute.js.map +1 -0
  550. package/dist/scheduler/types.d.ts +139 -0
  551. package/dist/scheduler/types.d.ts.map +1 -0
  552. package/dist/scheduler/types.js +8 -0
  553. package/dist/scheduler/types.js.map +1 -0
  554. package/dist/sendErrorClassifier.d.ts +45 -0
  555. package/dist/sendErrorClassifier.d.ts.map +1 -0
  556. package/dist/sendErrorClassifier.js +65 -0
  557. package/dist/sendErrorClassifier.js.map +1 -0
  558. package/dist/sessionKey.d.ts +136 -0
  559. package/dist/sessionKey.d.ts.map +1 -0
  560. package/dist/sessionKey.js +153 -0
  561. package/dist/sessionKey.js.map +1 -0
  562. package/dist/sessionPick.d.ts +42 -0
  563. package/dist/sessionPick.d.ts.map +1 -0
  564. package/dist/sessionPick.js +39 -0
  565. package/dist/sessionPick.js.map +1 -0
  566. package/dist/shutdown.d.ts +126 -0
  567. package/dist/shutdown.d.ts.map +1 -0
  568. package/dist/shutdown.js +164 -0
  569. package/dist/shutdown.js.map +1 -0
  570. package/dist/startupPromptBuffer.d.ts +85 -0
  571. package/dist/startupPromptBuffer.d.ts.map +1 -0
  572. package/dist/startupPromptBuffer.js +123 -0
  573. package/dist/startupPromptBuffer.js.map +1 -0
  574. package/dist/state.d.ts +1245 -0
  575. package/dist/state.d.ts.map +1 -0
  576. package/dist/state.js +1830 -0
  577. package/dist/state.js.map +1 -0
  578. package/dist/threadContextPreamble.d.ts +89 -0
  579. package/dist/threadContextPreamble.d.ts.map +1 -0
  580. package/dist/threadContextPreamble.js +102 -0
  581. package/dist/threadContextPreamble.js.map +1 -0
  582. package/dist/threadRouting.d.ts +164 -0
  583. package/dist/threadRouting.d.ts.map +1 -0
  584. package/dist/threadRouting.js +182 -0
  585. package/dist/threadRouting.js.map +1 -0
  586. package/dist/types.d.ts +1015 -0
  587. package/dist/types.d.ts.map +1 -0
  588. package/dist/types.js +3 -0
  589. package/dist/types.js.map +1 -0
  590. package/dist/utils/abortableFifo.d.ts +10 -0
  591. package/dist/utils/abortableFifo.d.ts.map +1 -0
  592. package/dist/utils/abortableFifo.js +55 -0
  593. package/dist/utils/abortableFifo.js.map +1 -0
  594. package/dist/utils/adoptedToolList.d.ts +27 -0
  595. package/dist/utils/adoptedToolList.d.ts.map +1 -0
  596. package/dist/utils/adoptedToolList.js +22 -0
  597. package/dist/utils/adoptedToolList.js.map +1 -0
  598. package/dist/utils/agentEnvironment.d.ts +42 -0
  599. package/dist/utils/agentEnvironment.d.ts.map +1 -0
  600. package/dist/utils/agentEnvironment.js +122 -0
  601. package/dist/utils/agentEnvironment.js.map +1 -0
  602. package/dist/utils/ansiClean.d.ts +11 -0
  603. package/dist/utils/ansiClean.d.ts.map +1 -0
  604. package/dist/utils/ansiClean.js +139 -0
  605. package/dist/utils/ansiClean.js.map +1 -0
  606. package/dist/utils/autoContinueOnLimit.d.ts +49 -0
  607. package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
  608. package/dist/utils/autoContinueOnLimit.js +69 -0
  609. package/dist/utils/autoContinueOnLimit.js.map +1 -0
  610. package/dist/utils/canonicalPathContainment.d.ts +7 -0
  611. package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
  612. package/dist/utils/canonicalPathContainment.js +48 -0
  613. package/dist/utils/canonicalPathContainment.js.map +1 -0
  614. package/dist/utils/claudeAuthLogin.d.ts +71 -0
  615. package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
  616. package/dist/utils/claudeAuthLogin.js +93 -0
  617. package/dist/utils/claudeAuthLogin.js.map +1 -0
  618. package/dist/utils/claudeChunkClassifier.d.ts +97 -0
  619. package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
  620. package/dist/utils/claudeChunkClassifier.js +254 -0
  621. package/dist/utils/claudeChunkClassifier.js.map +1 -0
  622. package/dist/utils/claudeCodeVersion.d.ts +31 -0
  623. package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
  624. package/dist/utils/claudeCodeVersion.js +62 -0
  625. package/dist/utils/claudeCodeVersion.js.map +1 -0
  626. package/dist/utils/claudeCompactHook.d.ts +64 -0
  627. package/dist/utils/claudeCompactHook.d.ts.map +1 -0
  628. package/dist/utils/claudeCompactHook.js +98 -0
  629. package/dist/utils/claudeCompactHook.js.map +1 -0
  630. package/dist/utils/claudeLivenessAction.d.ts +208 -0
  631. package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
  632. package/dist/utils/claudeLivenessAction.js +135 -0
  633. package/dist/utils/claudeLivenessAction.js.map +1 -0
  634. package/dist/utils/claudeMcpHeal.d.ts +92 -0
  635. package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
  636. package/dist/utils/claudeMcpHeal.js +91 -0
  637. package/dist/utils/claudeMcpHeal.js.map +1 -0
  638. package/dist/utils/claudeRelayRouting.d.ts +86 -0
  639. package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
  640. package/dist/utils/claudeRelayRouting.js +159 -0
  641. package/dist/utils/claudeRelayRouting.js.map +1 -0
  642. package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
  643. package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
  644. package/dist/utils/claudeRuntimeInfo.js +151 -0
  645. package/dist/utils/claudeRuntimeInfo.js.map +1 -0
  646. package/dist/utils/claudeScrapeShapes.d.ts +256 -0
  647. package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
  648. package/dist/utils/claudeScrapeShapes.js +290 -0
  649. package/dist/utils/claudeScrapeShapes.js.map +1 -0
  650. package/dist/utils/claudeSessionTitle.d.ts +27 -0
  651. package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
  652. package/dist/utils/claudeSessionTitle.js +90 -0
  653. package/dist/utils/claudeSessionTitle.js.map +1 -0
  654. package/dist/utils/claudeStreamJson.d.ts +202 -0
  655. package/dist/utils/claudeStreamJson.d.ts.map +1 -0
  656. package/dist/utils/claudeStreamJson.js +351 -0
  657. package/dist/utils/claudeStreamJson.js.map +1 -0
  658. package/dist/utils/claudeSubagentTail.d.ts +93 -0
  659. package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
  660. package/dist/utils/claudeSubagentTail.js +136 -0
  661. package/dist/utils/claudeSubagentTail.js.map +1 -0
  662. package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
  663. package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
  664. package/dist/utils/clearThreadOutputQueues.js +39 -0
  665. package/dist/utils/clearThreadOutputQueues.js.map +1 -0
  666. package/dist/utils/compactCommandRoute.d.ts +45 -0
  667. package/dist/utils/compactCommandRoute.d.ts.map +1 -0
  668. package/dist/utils/compactCommandRoute.js +36 -0
  669. package/dist/utils/compactCommandRoute.js.map +1 -0
  670. package/dist/utils/compactOnIdle.d.ts +329 -0
  671. package/dist/utils/compactOnIdle.d.ts.map +1 -0
  672. package/dist/utils/compactOnIdle.js +379 -0
  673. package/dist/utils/compactOnIdle.js.map +1 -0
  674. package/dist/utils/consoleFileTap.d.ts +51 -0
  675. package/dist/utils/consoleFileTap.d.ts.map +1 -0
  676. package/dist/utils/consoleFileTap.js +86 -0
  677. package/dist/utils/consoleFileTap.js.map +1 -0
  678. package/dist/utils/displayVerbosity.d.ts +44 -0
  679. package/dist/utils/displayVerbosity.d.ts.map +1 -0
  680. package/dist/utils/displayVerbosity.js +75 -0
  681. package/dist/utils/displayVerbosity.js.map +1 -0
  682. package/dist/utils/download.d.ts +72 -0
  683. package/dist/utils/download.d.ts.map +1 -0
  684. package/dist/utils/download.js +216 -0
  685. package/dist/utils/download.js.map +1 -0
  686. package/dist/utils/draftFinalize.d.ts +110 -0
  687. package/dist/utils/draftFinalize.d.ts.map +1 -0
  688. package/dist/utils/draftFinalize.js +100 -0
  689. package/dist/utils/draftFinalize.js.map +1 -0
  690. package/dist/utils/draftId.d.ts +36 -0
  691. package/dist/utils/draftId.d.ts.map +1 -0
  692. package/dist/utils/draftId.js +46 -0
  693. package/dist/utils/draftId.js.map +1 -0
  694. package/dist/utils/draftPacer.d.ts +72 -0
  695. package/dist/utils/draftPacer.d.ts.map +1 -0
  696. package/dist/utils/draftPacer.js +53 -0
  697. package/dist/utils/draftPacer.js.map +1 -0
  698. package/dist/utils/effortStartupKeystroke.d.ts +20 -0
  699. package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
  700. package/dist/utils/effortStartupKeystroke.js +28 -0
  701. package/dist/utils/effortStartupKeystroke.js.map +1 -0
  702. package/dist/utils/ensureSessionPlan.d.ts +70 -0
  703. package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
  704. package/dist/utils/ensureSessionPlan.js +54 -0
  705. package/dist/utils/ensureSessionPlan.js.map +1 -0
  706. package/dist/utils/fileSendPlan.d.ts +217 -0
  707. package/dist/utils/fileSendPlan.d.ts.map +1 -0
  708. package/dist/utils/fileSendPlan.js +291 -0
  709. package/dist/utils/fileSendPlan.js.map +1 -0
  710. package/dist/utils/fileSendService.d.ts +94 -0
  711. package/dist/utils/fileSendService.d.ts.map +1 -0
  712. package/dist/utils/fileSendService.js +387 -0
  713. package/dist/utils/fileSendService.js.map +1 -0
  714. package/dist/utils/groupFinalizePlan.d.ts +38 -0
  715. package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
  716. package/dist/utils/groupFinalizePlan.js +35 -0
  717. package/dist/utils/groupFinalizePlan.js.map +1 -0
  718. package/dist/utils/identicalOutputGuard.d.ts +83 -0
  719. package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
  720. package/dist/utils/identicalOutputGuard.js +99 -0
  721. package/dist/utils/identicalOutputGuard.js.map +1 -0
  722. package/dist/utils/isoTimestamp.d.ts +16 -0
  723. package/dist/utils/isoTimestamp.d.ts.map +1 -0
  724. package/dist/utils/isoTimestamp.js +34 -0
  725. package/dist/utils/isoTimestamp.js.map +1 -0
  726. package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
  727. package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
  728. package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
  729. package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
  730. package/dist/utils/jsonStreamHost.d.ts +227 -0
  731. package/dist/utils/jsonStreamHost.d.ts.map +1 -0
  732. package/dist/utils/jsonStreamHost.js +417 -0
  733. package/dist/utils/jsonStreamHost.js.map +1 -0
  734. package/dist/utils/keyedTransitionQueue.d.ts +18 -0
  735. package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
  736. package/dist/utils/keyedTransitionQueue.js +34 -0
  737. package/dist/utils/keyedTransitionQueue.js.map +1 -0
  738. package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
  739. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
  740. package/dist/utils/limitEpisodeRecovery.js +133 -0
  741. package/dist/utils/limitEpisodeRecovery.js.map +1 -0
  742. package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
  743. package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
  744. package/dist/utils/limitHeldPromptQueue.js +59 -0
  745. package/dist/utils/limitHeldPromptQueue.js.map +1 -0
  746. package/dist/utils/limitHeldPrompts.d.ts +58 -0
  747. package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
  748. package/dist/utils/limitHeldPrompts.js +65 -0
  749. package/dist/utils/limitHeldPrompts.js.map +1 -0
  750. package/dist/utils/linkPreviewSuppression.d.ts +18 -0
  751. package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
  752. package/dist/utils/linkPreviewSuppression.js +37 -0
  753. package/dist/utils/linkPreviewSuppression.js.map +1 -0
  754. package/dist/utils/localClock.d.ts +15 -0
  755. package/dist/utils/localClock.d.ts.map +1 -0
  756. package/dist/utils/localClock.js +29 -0
  757. package/dist/utils/localClock.js.map +1 -0
  758. package/dist/utils/markdownTableRender.d.ts +83 -0
  759. package/dist/utils/markdownTableRender.d.ts.map +1 -0
  760. package/dist/utils/markdownTableRender.js +298 -0
  761. package/dist/utils/markdownTableRender.js.map +1 -0
  762. package/dist/utils/mediaGroupCollector.d.ts +51 -0
  763. package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
  764. package/dist/utils/mediaGroupCollector.js +90 -0
  765. package/dist/utils/mediaGroupCollector.js.map +1 -0
  766. package/dist/utils/messageSendService.d.ts +136 -0
  767. package/dist/utils/messageSendService.d.ts.map +1 -0
  768. package/dist/utils/messageSendService.js +165 -0
  769. package/dist/utils/messageSendService.js.map +1 -0
  770. package/dist/utils/minutesOverride.d.ts +7 -0
  771. package/dist/utils/minutesOverride.d.ts.map +1 -0
  772. package/dist/utils/minutesOverride.js +16 -0
  773. package/dist/utils/minutesOverride.js.map +1 -0
  774. package/dist/utils/modelPickerPlan.d.ts +119 -0
  775. package/dist/utils/modelPickerPlan.d.ts.map +1 -0
  776. package/dist/utils/modelPickerPlan.js +171 -0
  777. package/dist/utils/modelPickerPlan.js.map +1 -0
  778. package/dist/utils/modelSetReplyDecision.d.ts +67 -0
  779. package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
  780. package/dist/utils/modelSetReplyDecision.js +27 -0
  781. package/dist/utils/modelSetReplyDecision.js.map +1 -0
  782. package/dist/utils/openCodeAuthLogin.d.ts +181 -0
  783. package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
  784. package/dist/utils/openCodeAuthLogin.js +393 -0
  785. package/dist/utils/openCodeAuthLogin.js.map +1 -0
  786. package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
  787. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
  788. package/dist/utils/openCodeCompactPlugin.js +146 -0
  789. package/dist/utils/openCodeCompactPlugin.js.map +1 -0
  790. package/dist/utils/openCodeTurnActivity.d.ts +67 -0
  791. package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
  792. package/dist/utils/openCodeTurnActivity.js +27 -0
  793. package/dist/utils/openCodeTurnActivity.js.map +1 -0
  794. package/dist/utils/outputDebounce.d.ts +24 -0
  795. package/dist/utils/outputDebounce.d.ts.map +1 -0
  796. package/dist/utils/outputDebounce.js +30 -0
  797. package/dist/utils/outputDebounce.js.map +1 -0
  798. package/dist/utils/outputFlushTiming.d.ts +54 -0
  799. package/dist/utils/outputFlushTiming.d.ts.map +1 -0
  800. package/dist/utils/outputFlushTiming.js +48 -0
  801. package/dist/utils/outputFlushTiming.js.map +1 -0
  802. package/dist/utils/paginateList.d.ts +25 -0
  803. package/dist/utils/paginateList.d.ts.map +1 -0
  804. package/dist/utils/paginateList.js +32 -0
  805. package/dist/utils/paginateList.js.map +1 -0
  806. package/dist/utils/paneDiff.d.ts +55 -0
  807. package/dist/utils/paneDiff.d.ts.map +1 -0
  808. package/dist/utils/paneDiff.js +88 -0
  809. package/dist/utils/paneDiff.js.map +1 -0
  810. package/dist/utils/paneResizeGuard.d.ts +69 -0
  811. package/dist/utils/paneResizeGuard.d.ts.map +1 -0
  812. package/dist/utils/paneResizeGuard.js +91 -0
  813. package/dist/utils/paneResizeGuard.js.map +1 -0
  814. package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
  815. package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
  816. package/dist/utils/persistAdapterSessionIds.js +28 -0
  817. package/dist/utils/persistAdapterSessionIds.js.map +1 -0
  818. package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
  819. package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
  820. package/dist/utils/pinnedBannerSkipDecision.js +20 -0
  821. package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
  822. package/dist/utils/pollBackoff.d.ts +45 -0
  823. package/dist/utils/pollBackoff.d.ts.map +1 -0
  824. package/dist/utils/pollBackoff.js +44 -0
  825. package/dist/utils/pollBackoff.js.map +1 -0
  826. package/dist/utils/promptDelivery.d.ts +46 -0
  827. package/dist/utils/promptDelivery.d.ts.map +1 -0
  828. package/dist/utils/promptDelivery.js +49 -0
  829. package/dist/utils/promptDelivery.js.map +1 -0
  830. package/dist/utils/providerDisconnectPlan.d.ts +82 -0
  831. package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
  832. package/dist/utils/providerDisconnectPlan.js +110 -0
  833. package/dist/utils/providerDisconnectPlan.js.map +1 -0
  834. package/dist/utils/rateLimitLog.d.ts +48 -0
  835. package/dist/utils/rateLimitLog.d.ts.map +1 -0
  836. package/dist/utils/rateLimitLog.js +43 -0
  837. package/dist/utils/rateLimitLog.js.map +1 -0
  838. package/dist/utils/recentRelayWindow.d.ts +165 -0
  839. package/dist/utils/recentRelayWindow.d.ts.map +1 -0
  840. package/dist/utils/recentRelayWindow.js +284 -0
  841. package/dist/utils/recentRelayWindow.js.map +1 -0
  842. package/dist/utils/recvPreviewRedaction.d.ts +23 -0
  843. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
  844. package/dist/utils/recvPreviewRedaction.js +39 -0
  845. package/dist/utils/recvPreviewRedaction.js.map +1 -0
  846. package/dist/utils/reminderFlow.d.ts +148 -0
  847. package/dist/utils/reminderFlow.d.ts.map +1 -0
  848. package/dist/utils/reminderFlow.js +122 -0
  849. package/dist/utils/reminderFlow.js.map +1 -0
  850. package/dist/utils/reminderScheduleText.d.ts +87 -0
  851. package/dist/utils/reminderScheduleText.d.ts.map +1 -0
  852. package/dist/utils/reminderScheduleText.js +135 -0
  853. package/dist/utils/reminderScheduleText.js.map +1 -0
  854. package/dist/utils/reminderWizard.d.ts +710 -0
  855. package/dist/utils/reminderWizard.d.ts.map +1 -0
  856. package/dist/utils/reminderWizard.js +1164 -0
  857. package/dist/utils/reminderWizard.js.map +1 -0
  858. package/dist/utils/replyQuote.d.ts +111 -0
  859. package/dist/utils/replyQuote.d.ts.map +1 -0
  860. package/dist/utils/replyQuote.js +122 -0
  861. package/dist/utils/replyQuote.js.map +1 -0
  862. package/dist/utils/resolveBinary.d.ts +25 -0
  863. package/dist/utils/resolveBinary.d.ts.map +1 -0
  864. package/dist/utils/resolveBinary.js +99 -0
  865. package/dist/utils/resolveBinary.js.map +1 -0
  866. package/dist/utils/retryAfterHeader.d.ts +7 -0
  867. package/dist/utils/retryAfterHeader.d.ts.map +1 -0
  868. package/dist/utils/retryAfterHeader.js +17 -0
  869. package/dist/utils/retryAfterHeader.js.map +1 -0
  870. package/dist/utils/rotatingJsonlFile.d.ts +40 -0
  871. package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
  872. package/dist/utils/rotatingJsonlFile.js +106 -0
  873. package/dist/utils/rotatingJsonlFile.js.map +1 -0
  874. package/dist/utils/rotatingLogFile.d.ts +25 -0
  875. package/dist/utils/rotatingLogFile.d.ts.map +1 -0
  876. package/dist/utils/rotatingLogFile.js +74 -0
  877. package/dist/utils/rotatingLogFile.js.map +1 -0
  878. package/dist/utils/sendRateTracker.d.ts +59 -0
  879. package/dist/utils/sendRateTracker.d.ts.map +1 -0
  880. package/dist/utils/sendRateTracker.js +144 -0
  881. package/dist/utils/sendRateTracker.js.map +1 -0
  882. package/dist/utils/serialQueue.d.ts +5 -0
  883. package/dist/utils/serialQueue.d.ts.map +1 -0
  884. package/dist/utils/serialQueue.js +14 -0
  885. package/dist/utils/serialQueue.js.map +1 -0
  886. package/dist/utils/sseStreamLifecycle.d.ts +32 -0
  887. package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
  888. package/dist/utils/sseStreamLifecycle.js +41 -0
  889. package/dist/utils/sseStreamLifecycle.js.map +1 -0
  890. package/dist/utils/startupReadiness.d.ts +119 -0
  891. package/dist/utils/startupReadiness.d.ts.map +1 -0
  892. package/dist/utils/startupReadiness.js +148 -0
  893. package/dist/utils/startupReadiness.js.map +1 -0
  894. package/dist/utils/statusFlushDecision.d.ts +18 -0
  895. package/dist/utils/statusFlushDecision.d.ts.map +1 -0
  896. package/dist/utils/statusFlushDecision.js +53 -0
  897. package/dist/utils/statusFlushDecision.js.map +1 -0
  898. package/dist/utils/subagentRender.d.ts +52 -0
  899. package/dist/utils/subagentRender.d.ts.map +1 -0
  900. package/dist/utils/subagentRender.js +66 -0
  901. package/dist/utils/subagentRender.js.map +1 -0
  902. package/dist/utils/subagentStatusRender.d.ts +90 -0
  903. package/dist/utils/subagentStatusRender.d.ts.map +1 -0
  904. package/dist/utils/subagentStatusRender.js +124 -0
  905. package/dist/utils/subagentStatusRender.js.map +1 -0
  906. package/dist/utils/telegramError.d.ts +2 -0
  907. package/dist/utils/telegramError.d.ts.map +1 -0
  908. package/dist/utils/telegramError.js +16 -0
  909. package/dist/utils/telegramError.js.map +1 -0
  910. package/dist/utils/terminalEmitPlan.d.ts +74 -0
  911. package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
  912. package/dist/utils/terminalEmitPlan.js +86 -0
  913. package/dist/utils/terminalEmitPlan.js.map +1 -0
  914. package/dist/utils/thinkingRender.d.ts +74 -0
  915. package/dist/utils/thinkingRender.d.ts.map +1 -0
  916. package/dist/utils/thinkingRender.js +85 -0
  917. package/dist/utils/thinkingRender.js.map +1 -0
  918. package/dist/utils/threadStatusReport.d.ts +55 -0
  919. package/dist/utils/threadStatusReport.d.ts.map +1 -0
  920. package/dist/utils/threadStatusReport.js +65 -0
  921. package/dist/utils/threadStatusReport.js.map +1 -0
  922. package/dist/utils/threadToggle.d.ts +29 -0
  923. package/dist/utils/threadToggle.d.ts.map +1 -0
  924. package/dist/utils/threadToggle.js +39 -0
  925. package/dist/utils/threadToggle.js.map +1 -0
  926. package/dist/utils/timezone.d.ts +125 -0
  927. package/dist/utils/timezone.d.ts.map +1 -0
  928. package/dist/utils/timezone.js +278 -0
  929. package/dist/utils/timezone.js.map +1 -0
  930. package/dist/utils/tmuxExec.d.ts +61 -0
  931. package/dist/utils/tmuxExec.d.ts.map +1 -0
  932. package/dist/utils/tmuxExec.js +109 -0
  933. package/dist/utils/tmuxExec.js.map +1 -0
  934. package/dist/utils/tmuxSessionName.d.ts +34 -0
  935. package/dist/utils/tmuxSessionName.d.ts.map +1 -0
  936. package/dist/utils/tmuxSessionName.js +51 -0
  937. package/dist/utils/tmuxSessionName.js.map +1 -0
  938. package/dist/utils/toolResultRender.d.ts +61 -0
  939. package/dist/utils/toolResultRender.d.ts.map +1 -0
  940. package/dist/utils/toolResultRender.js +62 -0
  941. package/dist/utils/toolResultRender.js.map +1 -0
  942. package/dist/utils/topicRequest.d.ts +61 -0
  943. package/dist/utils/topicRequest.d.ts.map +1 -0
  944. package/dist/utils/topicRequest.js +68 -0
  945. package/dist/utils/topicRequest.js.map +1 -0
  946. package/dist/utils/topicView.d.ts +55 -0
  947. package/dist/utils/topicView.d.ts.map +1 -0
  948. package/dist/utils/topicView.js +56 -0
  949. package/dist/utils/topicView.js.map +1 -0
  950. package/dist/utils/transcribeAudio.d.ts +89 -0
  951. package/dist/utils/transcribeAudio.d.ts.map +1 -0
  952. package/dist/utils/transcribeAudio.js +249 -0
  953. package/dist/utils/transcribeAudio.js.map +1 -0
  954. package/dist/utils/transientFrames.d.ts +52 -0
  955. package/dist/utils/transientFrames.d.ts.map +1 -0
  956. package/dist/utils/transientFrames.js +41 -0
  957. package/dist/utils/transientFrames.js.map +1 -0
  958. package/dist/utils/typingActive.d.ts +35 -0
  959. package/dist/utils/typingActive.d.ts.map +1 -0
  960. package/dist/utils/typingActive.js +22 -0
  961. package/dist/utils/typingActive.js.map +1 -0
  962. package/dist/utils/typingLoopBackstop.d.ts +64 -0
  963. package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
  964. package/dist/utils/typingLoopBackstop.js +68 -0
  965. package/dist/utils/typingLoopBackstop.js.map +1 -0
  966. package/dist/utils/verbosityRender.d.ts +18 -0
  967. package/dist/utils/verbosityRender.d.ts.map +1 -0
  968. package/dist/utils/verbosityRender.js +17 -0
  969. package/dist/utils/verbosityRender.js.map +1 -0
  970. package/dist/utils/wedgeRecovery.d.ts +57 -0
  971. package/dist/utils/wedgeRecovery.d.ts.map +1 -0
  972. package/dist/utils/wedgeRecovery.js +24 -0
  973. package/dist/utils/wedgeRecovery.js.map +1 -0
  974. package/dist/utils.d.ts +30 -0
  975. package/dist/utils.d.ts.map +1 -0
  976. package/dist/utils.js +61 -0
  977. package/dist/utils.js.map +1 -0
  978. package/dist/validation.d.ts +113 -0
  979. package/dist/validation.d.ts.map +1 -0
  980. package/dist/validation.js +226 -0
  981. package/dist/validation.js.map +1 -0
  982. package/dist/voiceQueue.d.ts +7 -0
  983. package/dist/voiceQueue.d.ts.map +1 -0
  984. package/dist/voiceQueue.js +33 -0
  985. package/dist/voiceQueue.js.map +1 -0
  986. package/examples/.env.example +17 -0
  987. package/examples/docker-compose.yml +36 -0
  988. package/package.json +83 -4
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @description Pure decision layer for the auto-retry-after-API-error feature
3
+ * (plan `agent/tasks/actual/2026-06-09-api-error-auto-retry.md`, S1). No I/O and
4
+ * no `Date.now()` inside: every caller passes `now` so the module is fully
5
+ * deterministic and unit-testable on a fixed clock.
6
+ *
7
+ * Two responsibilities:
8
+ * - {@link classifyAgentApiError} — read a terminal error string and decide
9
+ * whether (and how) it should be auto-retried. ORDER MATTERS (see the fn doc).
10
+ * - {@link getRetryPlan} — given a class + the current attempt, decide the next
11
+ * backoff delay or that we should give up.
12
+ *
13
+ * The same classifier serves BOTH backends: Claude surfaces the provider's
14
+ * "API Error" line in its TUI pane; OpenCode surfaces the same provider text
15
+ * through `session.error`.
16
+ */
17
+ import type { AgentApiErrorClass } from './types';
18
+ /**
19
+ * Transient backoff schedule (one entry per attempt): attempt 1 → 5m,
20
+ * 2 → 10m, 3 → 20m. After the last entry the retry gives up.
21
+ */
22
+ export declare const transientBackoffMinutes: readonly [5, 10, 20];
23
+ /** Max transient attempts before giving up (= `transientBackoffMinutes.length`). */
24
+ export declare const transientMaxAttempts: 3;
25
+ /**
26
+ * Fixed delay for a usage-limit error whose text exposed no reset time (the
27
+ * common case for Claude's "blocked" message): 60 minutes, re-armed on each
28
+ * repeat until {@link usageLimitMaxAttempts}.
29
+ */
30
+ export declare const usageLimitDefaultMs: number;
31
+ /** Max usage-limit attempts before giving up (~6h with the default delay). */
32
+ export declare const usageLimitMaxAttempts = 6;
33
+ /**
34
+ * Grace window after a retry fires: another API error within this window counts
35
+ * as the SAME error episode (escalate to attempt+1, longer backoff); an error
36
+ * later than this is a FRESH episode (reset to attempt 1). Decouples the
37
+ * decision from session-end events — a recovered turn just leaves a stale record
38
+ * that the next, much-later error resets to attempt 1.
39
+ */
40
+ export declare const retryRecurrenceGraceMs: number;
41
+ /**
42
+ * Padding added to a parsed reset time so the retry fires just AFTER the window
43
+ * actually rolls over, never a hair before it (which would re-error instantly).
44
+ */
45
+ export declare const resetBufferMs = 60000;
46
+ /**
47
+ * @description The auth / logged-out phrases (`please run /login`, `not logged
48
+ * in`, `invalid authentication credentials`). Shared with the Claude scrape
49
+ * detector (`getClaudeAgentErrorLine`) so the two never drift. NOT global — used
50
+ * with `.test()`, so lastIndex never carries between calls.
51
+ */
52
+ export declare const authErrorPhrasesRe: RegExp;
53
+ /**
54
+ * @description Alternation SOURCE (no anchors, no flags) of the explicit
55
+ * usage/session-limit wordings — {@link usageWindowPhrases} plus a bare
56
+ * `limit reached`. Exported as a source string — not just a compiled
57
+ * regex — because the Claude scrape detector (`getClaudeAgentErrorLine`) has to
58
+ * ANCHOR the same phrases at the start of a pane row, and a single source keeps
59
+ * the two from drifting (the `authErrorPhrasesRe` precedent).
60
+ */
61
+ export declare const usageLimitPhraseSource: string;
62
+ /** {@link usageLimitPhraseSource} compiled for a whole-text `.test()`. */
63
+ export declare const usageLimitPhrasesRe: RegExp;
64
+ /**
65
+ * @description Whether an error text is a usage / session / window limit.
66
+ *
67
+ * Two tiers, and the second one is the point: the explicit
68
+ * {@link usageLimitPhraseSource} list catches every wording we have actually
69
+ * seen, and the GENERIC fallback (a limit mention PLUS a reset/retry hint) still
70
+ * catches a wording the provider invents later — a rephrased limit message must
71
+ * not silently fall back to "relay the raw text and look hung", which is exactly
72
+ * what happened to `You've hit your session limit · resets 10:50pm (UTC)`.
73
+ *
74
+ * Ahead of both tiers sits {@link nonUsageLimitRe}: a context/token overflow is a
75
+ * limit no wait can clear, so it must never arm one.
76
+ */
77
+ export declare function checkIsUsageLimitText(text: string): boolean;
78
+ /**
79
+ * @description Classify a backend error string into an error class, or `null`
80
+ * when it is not a recognised provider error.
81
+ *
82
+ * ORDER IS LOAD-BEARING — branches are evaluated top to bottom and return on
83
+ * first match:
84
+ * 1. auth / logged out (login, bad credentials) → `{ kind: 'auth' }`. Must win:
85
+ * a wait never fixes these (they need a re-login or server restart), so they
86
+ * are SURFACED (a pinned notice), never auto-retried. Used to return `null`.
87
+ * 2. transient (rate-limited, overloaded, 429/503/529) → `{ kind: 'transient' }`.
88
+ * Tested BEFORE usage on purpose: the live transient string literally reads
89
+ * "...(not your usage limit)...", so a naive usage check would false-match it.
90
+ * Because transient returns here, the usage branch never sees that substring.
91
+ * 3. usage / session / window limit → `{ kind: 'usageLimit', resetAt? }`, decided
92
+ * by {@link checkIsUsageLimitText} (explicit wordings + a generic fallback).
93
+ * Anything else (normal prose, unrelated text) → `null`.
94
+ *
95
+ * @param now Current epoch ms — only consulted to resolve a relative/absolute
96
+ * reset time for the usage class; the transient/auth branches ignore it.
97
+ */
98
+ export declare function classifyAgentApiError(text: string, now: number): AgentApiErrorClass | null;
99
+ /**
100
+ * @description Best-effort parse of a "reset time" out of a usage-limit message.
101
+ * Never throws: any unparseable / absent time yields `undefined`, which the
102
+ * caller treats as "use the fixed delay". Handles three shapes, in order:
103
+ * - relative: "resets in 2h" / "in 45m" → `now + duration`.
104
+ * - absolute clock: "resets at 3pm" / "at 15:00" / "resets 10:50pm (UTC)" → the
105
+ * NEXT occurrence of that clock time at or after `now`. An EXPLICIT zone
106
+ * suffix is load-bearing: the clock is then resolved IN THAT ZONE, not in the
107
+ * instance/host zone. Without it a `10:50pm (UTC)` reset on a `+04:00` box
108
+ * resolved four hours EARLY — the retry fires while the limit still holds,
109
+ * re-errors, and burns one of the six attempts for nothing.
110
+ * - ISO timestamp anywhere in the text → `Date.parse`.
111
+ *
112
+ * A clock shape that fails to resolve (out-of-range hour) falls THROUGH to the
113
+ * ISO branch rather than giving up, so a message carrying both still parses.
114
+ *
115
+ * @param now Current epoch ms, used to resolve relative durations and to pick
116
+ * the next occurrence of an absolute clock time.
117
+ */
118
+ export declare function parseResetAt(text: string, now: number): number | undefined;
119
+ export interface RetryPlanArgs {
120
+ kind: AgentApiErrorClass['kind'];
121
+ /** 1-based attempt number for the delay we are about to schedule. */
122
+ attempt: number;
123
+ /** Parsed reset time (usage class only); absent → the fixed default delay. */
124
+ resetAt?: number;
125
+ /** Current epoch ms (to size a reset-time-relative delay). */
126
+ now: number;
127
+ }
128
+ export type RetryPlan = {
129
+ delayMs: number;
130
+ } | {
131
+ giveUp: true;
132
+ };
133
+ /**
134
+ * @description Decide the next backoff for an attempt, or that the retry loop
135
+ * should give up. Every returned `delayMs` is clamped to `[0, maxTimeoutMs]`
136
+ * (the same `setTimeout` cap the scheduler engine uses) so a far-future reset
137
+ * time never overflows the timer.
138
+ * - transient: {@link transientBackoffMinutes}[attempt-1]; giveUp once attempt
139
+ * exceeds {@link transientMaxAttempts}.
140
+ * - usageLimit: `resetAt` present → `resetAt - now + resetBufferMs`; else
141
+ * {@link usageLimitDefaultMs}; giveUp once attempt exceeds
142
+ * {@link usageLimitMaxAttempts}.
143
+ */
144
+ export declare function getRetryPlan(args: RetryPlanArgs): RetryPlan;
145
+ /**
146
+ * @description A read-only view of the bot's per-thread armed-retry record, fed
147
+ * into {@link decideRetryAction}. The bot owns the live `Map`; this snapshot is
148
+ * the only state the pure decision needs.
149
+ */
150
+ export interface RetryEntrySnapshot {
151
+ /** 1-based attempt of the currently / last armed retry. */
152
+ attempt: number;
153
+ /** Epoch ms when the last armed retry actually fired, or `null` if still pending. */
154
+ firedAt: number | null;
155
+ /** True while a retry timer is armed and has not fired yet. */
156
+ pending: boolean;
157
+ }
158
+ /**
159
+ * @description The action the bot must take in response to one `apiError`:
160
+ * - `surface` — an auth / logged-out error: post a pinned notice, arm NO timer
161
+ * (a wait never fixes it). The bot dedups repeats via its own per-thread
162
+ * auth-notice flag, so no attempt bookkeeping is needed here.
163
+ * - `ignore` — a retry is already armed and waiting; dedup this duplicate
164
+ * error frame (Claude re-scrapes the same line; OpenCode can repeat
165
+ * `session.error`).
166
+ * - `arm` — arm a timer for `attempt` after `delayMs` (firing at `fireAt`).
167
+ * - `giveUp` — the retry cap was reached; `attempts` is how many were already
168
+ * made before giving up.
169
+ */
170
+ export type RetryAction = {
171
+ action: 'surface';
172
+ } | {
173
+ action: 'ignore';
174
+ } | {
175
+ action: 'arm';
176
+ attempt: number;
177
+ delayMs: number;
178
+ fireAt: number;
179
+ } | {
180
+ action: 'giveUp';
181
+ attempts: number;
182
+ };
183
+ export interface DecideRetryActionArgs {
184
+ kind: AgentApiErrorClass['kind'];
185
+ /** Parsed reset time (usage class only); absent → the fixed default delay. */
186
+ resetAt?: number;
187
+ /** Current epoch ms. */
188
+ now: number;
189
+ /** The thread's existing armed-retry snapshot, or `null` if none. */
190
+ prev: RetryEntrySnapshot | null;
191
+ }
192
+ /**
193
+ * @description Decide the bot's reaction to an incoming API error, combining the
194
+ * episode/attempt bookkeeping with {@link getRetryPlan}. Pure — the caller
195
+ * passes `now` and the `prev` snapshot, so the decision is deterministic.
196
+ *
197
+ * Rules (evaluated in order):
198
+ * 0. `auth` → `surface` (never a timer, no attempt bookkeeping — the bot posts
199
+ * a deduped pinned notice; a wait can't recover a logged-out session).
200
+ * 1. `prev.pending` → `ignore` (a retry is already armed — dedup the episode;
201
+ * this is what stops Claude's repeated scrape frames AND any duplicate
202
+ * `session.error` from re-arming).
203
+ * 2. same episode (a `prev` that fired within {@link retryRecurrenceGraceMs}) →
204
+ * escalate to `prev.attempt + 1`; otherwise a fresh episode → attempt 1.
205
+ * 3. ask {@link getRetryPlan}: `giveUp` → `giveUp` with `attempts` already made
206
+ * (= attempt − 1); else `arm` at `now + delayMs`.
207
+ */
208
+ export declare function decideRetryAction(args: DecideRetryActionArgs): RetryAction;
209
+ //# sourceMappingURL=apiErrorRetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiErrorRetry.d.ts","sourceRoot":"","sources":["../src/apiErrorRetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAQlD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,sBAAuB,CAAC;AAC5D,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAiC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AACtD;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,CAAC;AA2BpC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAyE,CAAC;AAmBzG;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAGxB,CAAC;AAEZ,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAwB3E;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAW1F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB1E;AA8DD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAe3D;AAOD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CAW1E"}
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ /**
3
+ * @description Pure decision layer for the auto-retry-after-API-error feature
4
+ * (plan `agent/tasks/actual/2026-06-09-api-error-auto-retry.md`, S1). No I/O and
5
+ * no `Date.now()` inside: every caller passes `now` so the module is fully
6
+ * deterministic and unit-testable on a fixed clock.
7
+ *
8
+ * Two responsibilities:
9
+ * - {@link classifyAgentApiError} — read a terminal error string and decide
10
+ * whether (and how) it should be auto-retried. ORDER MATTERS (see the fn doc).
11
+ * - {@link getRetryPlan} — given a class + the current attempt, decide the next
12
+ * backoff delay or that we should give up.
13
+ *
14
+ * The same classifier serves BOTH backends: Claude surfaces the provider's
15
+ * "API Error" line in its TUI pane; OpenCode surfaces the same provider text
16
+ * through `session.error`.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.usageLimitPhrasesRe = exports.usageLimitPhraseSource = exports.authErrorPhrasesRe = exports.resetBufferMs = exports.retryRecurrenceGraceMs = exports.usageLimitMaxAttempts = exports.usageLimitDefaultMs = exports.transientMaxAttempts = exports.transientBackoffMinutes = void 0;
20
+ exports.checkIsUsageLimitText = checkIsUsageLimitText;
21
+ exports.classifyAgentApiError = classifyAgentApiError;
22
+ exports.parseResetAt = parseResetAt;
23
+ exports.getRetryPlan = getRetryPlan;
24
+ exports.decideRetryAction = decideRetryAction;
25
+ const engine_1 = require("./scheduler/engine");
26
+ /** One minute in milliseconds — the unit the backoff schedules are expressed in. */
27
+ const msPerMinute = 60_000;
28
+ /** One hour in milliseconds. */
29
+ const msPerHour = 60 * msPerMinute;
30
+ /**
31
+ * Transient backoff schedule (one entry per attempt): attempt 1 → 5m,
32
+ * 2 → 10m, 3 → 20m. After the last entry the retry gives up.
33
+ */
34
+ exports.transientBackoffMinutes = [5, 10, 20];
35
+ /** Max transient attempts before giving up (= `transientBackoffMinutes.length`). */
36
+ exports.transientMaxAttempts = exports.transientBackoffMinutes.length;
37
+ /**
38
+ * Fixed delay for a usage-limit error whose text exposed no reset time (the
39
+ * common case for Claude's "blocked" message): 60 minutes, re-armed on each
40
+ * repeat until {@link usageLimitMaxAttempts}.
41
+ */
42
+ exports.usageLimitDefaultMs = 60 * msPerMinute;
43
+ /** Max usage-limit attempts before giving up (~6h with the default delay). */
44
+ exports.usageLimitMaxAttempts = 6;
45
+ /**
46
+ * Grace window after a retry fires: another API error within this window counts
47
+ * as the SAME error episode (escalate to attempt+1, longer backoff); an error
48
+ * later than this is a FRESH episode (reset to attempt 1). Decouples the
49
+ * decision from session-end events — a recovered turn just leaves a stale record
50
+ * that the next, much-later error resets to attempt 1.
51
+ */
52
+ exports.retryRecurrenceGraceMs = 2 * msPerMinute;
53
+ /**
54
+ * Padding added to a parsed reset time so the retry fires just AFTER the window
55
+ * actually rolls over, never a hair before it (which would re-error instantly).
56
+ */
57
+ exports.resetBufferMs = 60_000;
58
+ /** Matches reset phrasings like "resets in 2h", "in 45m", "in 90 min". */
59
+ const relativeResetRegex = /\bin\s+(\d+)\s*(h|hours?|m|min|minutes?)\b/i;
60
+ /**
61
+ * Matches absolute clock phrasings after a reset trigger word. The trigger is
62
+ * either `at` (`resets at 3pm`, `at 15:00`) OR a BARE `reset`/`resets` — Claude's
63
+ * session-limit render drops the "at" entirely (`resets 10:50pm (UTC)`), which
64
+ * the old `at`-only pattern missed, leaving the retry on its blind 60-min delay.
65
+ * The hour's `(?!\d)` guard stops a leading ISO date (`2026-09-24`) from being
66
+ * read as an hour before the ISO branch gets its turn.
67
+ */
68
+ const clockResetRegex = /\b(?:reset(?:s|ting)?|at)\s+(\d{1,2})(?!\d)(?::(\d{2}))?\s*(am|pm)?/i;
69
+ /**
70
+ * An EXPLICIT timezone immediately after the clock — `(UTC)`, ` UTC`, `Z`,
71
+ * `+05:00`, `-0700`. Anchored at the remainder's start so only a suffix of THAT
72
+ * clock counts, and `\b`-terminated so a word merely starting with `Z` (`Zulu`,
73
+ * `Zoom`) is not read as the Zulu zone.
74
+ */
75
+ const trailingZoneRegex = /^\s*\(?\s*(UTC|GMT|Z|[+-]\d{2}:?\d{2})\b\s*\)?/i;
76
+ /** Matches an ISO-8601 timestamp anywhere in the text. */
77
+ const isoTimestampRegex = /\b\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?\b/;
78
+ const hoursPerDay = 24;
79
+ const minutesPerHour = 60;
80
+ const msPerDay = hoursPerDay * msPerHour;
81
+ /**
82
+ * @description The auth / logged-out phrases (`please run /login`, `not logged
83
+ * in`, `invalid authentication credentials`). Shared with the Claude scrape
84
+ * detector (`getClaudeAgentErrorLine`) so the two never drift. NOT global — used
85
+ * with `.test()`, so lastIndex never carries between calls.
86
+ */
87
+ exports.authErrorPhrasesRe = /please run \/login|not logged in|invalid authentication credentials/i;
88
+ /**
89
+ * The wordings that name a usage WINDOW or an exhausted balance EXPLICITLY: the
90
+ * qualified window limits (`session limit`, `weekly limit`, `5-hour limit`), the
91
+ * `hit your … limit` phrasings Claude now uses, and the balance/quota exhaustion
92
+ * wordings that are not spelled as a "limit" at all. Kept apart from the bare
93
+ * `limit reached` below because this subset is what exempts a text from
94
+ * {@link nonUsageLimitRe} — "hit your weekly token limit" IS a usage window, a bare
95
+ * "context limit exceeded" is not.
96
+ */
97
+ const usageWindowPhrases = [
98
+ String.raw `(?:session|usage|weekly|daily|monthly|hourly|\d+-hours?)\s+limit`,
99
+ String.raw `(?:hit|reached|exceeded)\s+your\s+(?:[\w-]+\s+){0,3}limit`,
100
+ String.raw `credit balance (?:is )?too low`,
101
+ String.raw `out of (?:credits|usage)`,
102
+ String.raw `quota`,
103
+ ];
104
+ /**
105
+ * @description Alternation SOURCE (no anchors, no flags) of the explicit
106
+ * usage/session-limit wordings — {@link usageWindowPhrases} plus a bare
107
+ * `limit reached`. Exported as a source string — not just a compiled
108
+ * regex — because the Claude scrape detector (`getClaudeAgentErrorLine`) has to
109
+ * ANCHOR the same phrases at the start of a pane row, and a single source keeps
110
+ * the two from drifting (the `authErrorPhrasesRe` precedent).
111
+ */
112
+ exports.usageLimitPhraseSource = [
113
+ ...usageWindowPhrases,
114
+ String.raw `limit\s+(?:reached|exceeded)`,
115
+ ].join('|');
116
+ /** {@link usageLimitPhraseSource} compiled for a whole-text `.test()`. */
117
+ exports.usageLimitPhrasesRe = new RegExp(exports.usageLimitPhraseSource, 'i');
118
+ /** {@link usageWindowPhrases} compiled — the {@link nonUsageLimitRe} exemption. */
119
+ const usageWindowPhrasesRe = new RegExp(usageWindowPhrases.join('|'), 'i');
120
+ /**
121
+ * A limit that WAITING can never clear: a context / token / prompt-length overflow
122
+ * is fixed by sending less, not by sitting out a window. The real provider wording
123
+ * ("input length and `max_tokens` exceed context limit: … decrease input length …
124
+ * and try again") carries both a limit mention and a retry hint, so without this
125
+ * guard the generic fallback below classified it as `usageLimit` and armed a 6-hour
126
+ * futile wait instead of surfacing an error the operator has to act on.
127
+ */
128
+ const nonUsageLimitRe = /\b(?:context|token|input|output|prompt|character)\s+(?:length\s+)?limits?\b/i;
129
+ /**
130
+ * The GENERIC fallback's two required signals: the text mentions a limit AND
131
+ * carries a reset/retry hint. BOTH are required on purpose — "limit" alone
132
+ * matches ordinary prose ("the API limit is 5 requests per minute"), while the
133
+ * pairing is what every real limit message has (it always tells you when you get
134
+ * back in).
135
+ */
136
+ const limitMentionRe = /\blimits?\b/i;
137
+ const limitResetHintRe = /\breset(?:s|ting)?\b|\btry again\b|\bresumes?\b/i;
138
+ /**
139
+ * @description Whether an error text is a usage / session / window limit.
140
+ *
141
+ * Two tiers, and the second one is the point: the explicit
142
+ * {@link usageLimitPhraseSource} list catches every wording we have actually
143
+ * seen, and the GENERIC fallback (a limit mention PLUS a reset/retry hint) still
144
+ * catches a wording the provider invents later — a rephrased limit message must
145
+ * not silently fall back to "relay the raw text and look hung", which is exactly
146
+ * what happened to `You've hit your session limit · resets 10:50pm (UTC)`.
147
+ *
148
+ * Ahead of both tiers sits {@link nonUsageLimitRe}: a context/token overflow is a
149
+ * limit no wait can clear, so it must never arm one.
150
+ */
151
+ function checkIsUsageLimitText(text) {
152
+ if (nonUsageLimitRe.test(text) && !usageWindowPhrasesRe.test(text))
153
+ return false;
154
+ if (exports.usageLimitPhrasesRe.test(text))
155
+ return true;
156
+ return limitMentionRe.test(text) && limitResetHintRe.test(text);
157
+ }
158
+ /**
159
+ * @description Classify a backend error string into an error class, or `null`
160
+ * when it is not a recognised provider error.
161
+ *
162
+ * ORDER IS LOAD-BEARING — branches are evaluated top to bottom and return on
163
+ * first match:
164
+ * 1. auth / logged out (login, bad credentials) → `{ kind: 'auth' }`. Must win:
165
+ * a wait never fixes these (they need a re-login or server restart), so they
166
+ * are SURFACED (a pinned notice), never auto-retried. Used to return `null`.
167
+ * 2. transient (rate-limited, overloaded, 429/503/529) → `{ kind: 'transient' }`.
168
+ * Tested BEFORE usage on purpose: the live transient string literally reads
169
+ * "...(not your usage limit)...", so a naive usage check would false-match it.
170
+ * Because transient returns here, the usage branch never sees that substring.
171
+ * 3. usage / session / window limit → `{ kind: 'usageLimit', resetAt? }`, decided
172
+ * by {@link checkIsUsageLimitText} (explicit wordings + a generic fallback).
173
+ * Anything else (normal prose, unrelated text) → `null`.
174
+ *
175
+ * @param now Current epoch ms — only consulted to resolve a relative/absolute
176
+ * reset time for the usage class; the transient/auth branches ignore it.
177
+ */
178
+ function classifyAgentApiError(text, now) {
179
+ if (exports.authErrorPhrasesRe.test(text)) {
180
+ return { kind: 'auth' };
181
+ }
182
+ if (/rate.?limited?|temporarily limiting requests|too many requests|overloaded|\b(429|503|529)\b/i.test(text)) {
183
+ return { kind: 'transient' };
184
+ }
185
+ if (checkIsUsageLimitText(text)) {
186
+ return { kind: 'usageLimit', resetAt: parseResetAt(text, now) };
187
+ }
188
+ return null;
189
+ }
190
+ /**
191
+ * @description Best-effort parse of a "reset time" out of a usage-limit message.
192
+ * Never throws: any unparseable / absent time yields `undefined`, which the
193
+ * caller treats as "use the fixed delay". Handles three shapes, in order:
194
+ * - relative: "resets in 2h" / "in 45m" → `now + duration`.
195
+ * - absolute clock: "resets at 3pm" / "at 15:00" / "resets 10:50pm (UTC)" → the
196
+ * NEXT occurrence of that clock time at or after `now`. An EXPLICIT zone
197
+ * suffix is load-bearing: the clock is then resolved IN THAT ZONE, not in the
198
+ * instance/host zone. Without it a `10:50pm (UTC)` reset on a `+04:00` box
199
+ * resolved four hours EARLY — the retry fires while the limit still holds,
200
+ * re-errors, and burns one of the six attempts for nothing.
201
+ * - ISO timestamp anywhere in the text → `Date.parse`.
202
+ *
203
+ * A clock shape that fails to resolve (out-of-range hour) falls THROUGH to the
204
+ * ISO branch rather than giving up, so a message carrying both still parses.
205
+ *
206
+ * @param now Current epoch ms, used to resolve relative durations and to pick
207
+ * the next occurrence of an absolute clock time.
208
+ */
209
+ function parseResetAt(text, now) {
210
+ const relativeMatch = relativeResetRegex.exec(text);
211
+ if (relativeMatch) {
212
+ const amount = Number.parseInt(relativeMatch[1], 10);
213
+ const unit = relativeMatch[2].toLowerCase();
214
+ const isHours = unit.startsWith('h');
215
+ return now + amount * (isHours ? msPerHour : msPerMinute);
216
+ }
217
+ const clockMatch = clockResetRegex.exec(text);
218
+ if (clockMatch) {
219
+ const resolved = resolveNextClockTime(clockMatch, text, now);
220
+ if (resolved !== undefined)
221
+ return resolved;
222
+ }
223
+ const isoMatch = isoTimestampRegex.exec(text);
224
+ if (isoMatch) {
225
+ const parsed = Date.parse(isoMatch[0]);
226
+ if (!Number.isNaN(parsed))
227
+ return parsed;
228
+ }
229
+ return undefined;
230
+ }
231
+ /**
232
+ * Read an explicit zone token to an offset from UTC in ms, or `undefined` when it
233
+ * is not a zone we can resolve arithmetically. `Z`/`UTC`/`GMT` are zero;
234
+ * `±HH:MM` / `±HHMM` are taken literally (a fixed offset needs no DST rules).
235
+ */
236
+ function getZoneOffsetMs(zone) {
237
+ const upper = zone.toUpperCase();
238
+ if (upper === 'UTC' || upper === 'GMT' || upper === 'Z')
239
+ return 0;
240
+ const match = /^([+-])(\d{2}):?(\d{2})$/.exec(zone);
241
+ if (!match)
242
+ return undefined;
243
+ const hours = Number.parseInt(match[2], 10);
244
+ const minutes = Number.parseInt(match[3], 10);
245
+ if (hours >= hoursPerDay || minutes >= minutesPerHour)
246
+ return undefined;
247
+ const sign = match[1] === '-' ? -1 : 1;
248
+ return sign * (hours * msPerHour + minutes * msPerMinute);
249
+ }
250
+ /**
251
+ * Resolve a clock match to the next epoch ms at or after `now` that lands on that
252
+ * wall-clock time. When the text carries an explicit zone right after the clock
253
+ * the arithmetic is done in THAT zone (pure offset math, no `Intl`); otherwise it
254
+ * falls back to the process-local zone (which `/timezone` already re-bases).
255
+ * Returns `undefined` for an out-of-range hour/minute rather than guessing.
256
+ */
257
+ function resolveNextClockTime(match, text, now) {
258
+ const rawHour = Number.parseInt(match[1], 10);
259
+ const minute = match[2] ? Number.parseInt(match[2], 10) : 0;
260
+ const meridiem = match[3]?.toLowerCase();
261
+ let hour = rawHour;
262
+ if (meridiem === 'pm' && rawHour < 12)
263
+ hour = rawHour + 12;
264
+ else if (meridiem === 'am' && rawHour === 12)
265
+ hour = 0;
266
+ if (hour < 0 || hour >= hoursPerDay || minute < 0 || minute >= minutesPerHour) {
267
+ return undefined;
268
+ }
269
+ const zoneMatch = trailingZoneRegex.exec(text.slice(match.index + match[0].length));
270
+ const offsetMs = zoneMatch ? getZoneOffsetMs(zoneMatch[1]) : undefined;
271
+ if (offsetMs !== undefined) {
272
+ // Shift onto the zone's timeline, snap to that zone's midnight, then shift
273
+ // back — `Date`'s local-zone getters are unusable for a foreign zone.
274
+ const shiftedNow = now + offsetMs;
275
+ const zoneDayStart = Math.floor(shiftedNow / msPerDay) * msPerDay;
276
+ let candidateShifted = zoneDayStart + hour * msPerHour + minute * msPerMinute;
277
+ if (candidateShifted < shiftedNow)
278
+ candidateShifted += msPerDay;
279
+ return candidateShifted - offsetMs;
280
+ }
281
+ const candidate = new Date(now);
282
+ candidate.setHours(hour, minute, 0, 0);
283
+ let candidateMs = candidate.getTime();
284
+ if (candidateMs < now) {
285
+ // Already past today — roll to the same clock time tomorrow.
286
+ candidate.setDate(candidate.getDate() + 1);
287
+ candidateMs = candidate.getTime();
288
+ }
289
+ return candidateMs;
290
+ }
291
+ /**
292
+ * @description Decide the next backoff for an attempt, or that the retry loop
293
+ * should give up. Every returned `delayMs` is clamped to `[0, maxTimeoutMs]`
294
+ * (the same `setTimeout` cap the scheduler engine uses) so a far-future reset
295
+ * time never overflows the timer.
296
+ * - transient: {@link transientBackoffMinutes}[attempt-1]; giveUp once attempt
297
+ * exceeds {@link transientMaxAttempts}.
298
+ * - usageLimit: `resetAt` present → `resetAt - now + resetBufferMs`; else
299
+ * {@link usageLimitDefaultMs}; giveUp once attempt exceeds
300
+ * {@link usageLimitMaxAttempts}.
301
+ */
302
+ function getRetryPlan(args) {
303
+ // auth is never retried (it is surfaced by `decideRetryAction` before this is
304
+ // reached); guard so it can never fall through into the usageLimit branch.
305
+ if (args.kind === 'auth')
306
+ return { giveUp: true };
307
+ if (args.kind === 'transient') {
308
+ if (args.attempt > exports.transientMaxAttempts)
309
+ return { giveUp: true };
310
+ const minutes = exports.transientBackoffMinutes[args.attempt - 1];
311
+ return { delayMs: clampDelay(minutes * msPerMinute) };
312
+ }
313
+ if (args.attempt > exports.usageLimitMaxAttempts)
314
+ return { giveUp: true };
315
+ const rawDelayMs = typeof args.resetAt === 'number' ? args.resetAt - args.now + exports.resetBufferMs : exports.usageLimitDefaultMs;
316
+ return { delayMs: clampDelay(rawDelayMs) };
317
+ }
318
+ /** Clamp a delay into `[0, maxTimeoutMs]` (the Node `setTimeout` safe range). */
319
+ function clampDelay(delayMs) {
320
+ return Math.min(Math.max(0, delayMs), engine_1.maxTimeoutMs);
321
+ }
322
+ /**
323
+ * @description Decide the bot's reaction to an incoming API error, combining the
324
+ * episode/attempt bookkeeping with {@link getRetryPlan}. Pure — the caller
325
+ * passes `now` and the `prev` snapshot, so the decision is deterministic.
326
+ *
327
+ * Rules (evaluated in order):
328
+ * 0. `auth` → `surface` (never a timer, no attempt bookkeeping — the bot posts
329
+ * a deduped pinned notice; a wait can't recover a logged-out session).
330
+ * 1. `prev.pending` → `ignore` (a retry is already armed — dedup the episode;
331
+ * this is what stops Claude's repeated scrape frames AND any duplicate
332
+ * `session.error` from re-arming).
333
+ * 2. same episode (a `prev` that fired within {@link retryRecurrenceGraceMs}) →
334
+ * escalate to `prev.attempt + 1`; otherwise a fresh episode → attempt 1.
335
+ * 3. ask {@link getRetryPlan}: `giveUp` → `giveUp` with `attempts` already made
336
+ * (= attempt − 1); else `arm` at `now + delayMs`.
337
+ */
338
+ function decideRetryAction(args) {
339
+ const { kind, resetAt, now, prev } = args;
340
+ if (kind === 'auth')
341
+ return { action: 'surface' };
342
+ if (prev?.pending)
343
+ return { action: 'ignore' };
344
+ const sameEpisode = !!prev && prev.firedAt != null && now - prev.firedAt <= exports.retryRecurrenceGraceMs;
345
+ const attempt = sameEpisode ? prev.attempt + 1 : 1;
346
+ const plan = getRetryPlan({ kind, attempt, resetAt, now });
347
+ if ('giveUp' in plan)
348
+ return { action: 'giveUp', attempts: attempt - 1 };
349
+ return { action: 'arm', attempt, delayMs: plan.delayMs, fireAt: now + plan.delayMs };
350
+ }
351
+ //# sourceMappingURL=apiErrorRetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiErrorRetry.js","sourceRoot":"","sources":["../src/apiErrorRetry.ts"],"names":[],"mappings":"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"}