hammoc 1.8.4 → 1.9.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 (304) hide show
  1. package/README.md +9 -6
  2. package/package.json +1 -1
  3. package/packages/client/dist/assets/MermaidViewer-B-LwclIl.js +7 -0
  4. package/packages/client/dist/assets/PdfViewer-C3Nymwn3.js +12 -0
  5. package/packages/client/dist/assets/PdfViewer-QCQEGvBO.css +1 -0
  6. package/packages/client/dist/assets/abnfDiagram-VRR7QNED-GfhY_hnV.js +1 -0
  7. package/packages/client/dist/assets/{agentExampleHighlight-Dws80em9.js → agentExampleHighlight-CyhVLy0_.js} +1 -1
  8. package/packages/client/dist/assets/arc-8nyjXGC3.js +1 -0
  9. package/packages/client/dist/assets/architectureDiagram-ZJ3FMSHR-B4onXLm4.js +36 -0
  10. package/packages/client/dist/assets/blockDiagram-677ZJIJ3-D0D6ncaN.js +132 -0
  11. package/packages/client/dist/assets/c4Diagram-LMCZKHZV-CE7Tip-_.js +10 -0
  12. package/packages/client/dist/assets/channel-CPjlbdOo.js +1 -0
  13. package/packages/client/dist/assets/chunk-2Q5K7J3B-4rW1da1Z.js +1 -0
  14. package/packages/client/dist/assets/chunk-32BRIVSS-JuzxS4QA.js +1 -0
  15. package/packages/client/dist/assets/chunk-5VM5RSS4-WRNf-xsi.js +15 -0
  16. package/packages/client/dist/assets/chunk-EX3LRPZG-BDWPlBKO.js +231 -0
  17. package/packages/client/dist/assets/chunk-JWPE2WC7-B8nCyQAc.js +1 -0
  18. package/packages/client/dist/assets/chunk-MOJQB5TN-7c-yriHe.js +88 -0
  19. package/packages/client/dist/assets/chunk-RYQCIY6F-LTDywRs7.js +1 -0
  20. package/packages/client/dist/assets/chunk-V7JOEXUC-DjVgQpjl.js +206 -0
  21. package/packages/client/dist/assets/chunk-VR4S4FIN-7jDdkUpx.js +1 -0
  22. package/packages/client/dist/assets/chunk-XXDRQBXY-ENKV2O8a.js +1 -0
  23. package/packages/client/dist/assets/classDiagram-OUVF2IWQ-C0PbC7Pi.js +1 -0
  24. package/packages/client/dist/assets/classDiagram-v2-EOCWNBFH-C0PbC7Pi.js +1 -0
  25. package/packages/client/dist/assets/{commandTokenHighlight-aR071CNy.js → commandTokenHighlight-DGP0RKx0.js} +1 -1
  26. package/packages/client/dist/assets/cose-bilkent-JH36ORCC-CQTNdQ-g.js +1 -0
  27. package/packages/client/dist/assets/cynefin-VYW2F7L2-BYlAJRcO.js +178 -0
  28. package/packages/client/dist/assets/cynefinDiagram-TSTJHNR4-7zyUTflT.js +62 -0
  29. package/packages/client/dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
  30. package/packages/client/dist/assets/dagre-VKFMJZFB-DyZir42W.js +4 -0
  31. package/packages/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  32. package/packages/client/dist/assets/diagram-FQU43EPY-CmNAU8Nw.js +3 -0
  33. package/packages/client/dist/assets/diagram-G47NLZAW-B0EIk03o.js +24 -0
  34. package/packages/client/dist/assets/diagram-NH7WQ7WH-Dulv0f1N.js +24 -0
  35. package/packages/client/dist/assets/diagram-OA4YK3LP-DEEcMLgi.js +30 -0
  36. package/packages/client/dist/assets/diagram-WEI45ONY-ZYebAZ93.js +41 -0
  37. package/packages/client/dist/assets/ebnfDiagram-CCIWWBDH-DCHpt3qn.js +1 -0
  38. package/packages/client/dist/assets/erDiagram-Q63AITRT-B6T87-48.js +85 -0
  39. package/packages/client/dist/assets/flowDiagram-23GEKE2U-DAcW6mKJ.js +156 -0
  40. package/packages/client/dist/assets/ganttDiagram-NO4QXBWP-Ct_eFFcM.js +292 -0
  41. package/packages/client/dist/assets/gitGraphDiagram-IHSO6WYX-BGi8Fdm2.js +106 -0
  42. package/packages/client/dist/assets/graph-C9eacEi8.js +1 -0
  43. package/packages/client/dist/assets/index-CtMiUbMJ.js +1671 -0
  44. package/packages/client/dist/assets/index-hTu6ZG2N.js +2 -0
  45. package/packages/client/dist/assets/index-oBa2uNlv.css +32 -0
  46. package/packages/client/dist/assets/infoDiagram-FWYZ7A6U-CqvwbXJn.js +2 -0
  47. package/packages/client/dist/assets/init-Gi6I4Gst.js +1 -0
  48. package/packages/client/dist/assets/ishikawaDiagram-FXEZZL3T-CHhr5ioQ.js +70 -0
  49. package/packages/client/dist/assets/journeyDiagram-5HDEW3XC-d20NzZAd.js +139 -0
  50. package/packages/client/dist/assets/kanban-definition-HUTT4EX6-CHx3wOer.js +89 -0
  51. package/packages/client/dist/assets/katex-C5jXJg4s.js +257 -0
  52. package/packages/client/dist/assets/layout-DEXfKzaS.js +1 -0
  53. package/packages/client/dist/assets/linear-Cnp1E9M4.js +1 -0
  54. package/packages/client/dist/assets/map-Czzmt4hB.js +1 -0
  55. package/packages/client/dist/assets/mermaid.core-jAhLhPYr.js +314 -0
  56. package/packages/client/dist/assets/mindmap-definition-LN4V7U3C-zi30RPoJ.js +96 -0
  57. package/packages/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  58. package/packages/client/dist/assets/pdf.worker.min-qwK7q_zL.mjs +28 -0
  59. package/packages/client/dist/assets/pegDiagram-2B236MQR-4gKLzTqu.js +1 -0
  60. package/packages/client/dist/assets/pieDiagram-ENE6RG2P-DRDhpjxP.js +39 -0
  61. package/packages/client/dist/assets/quadrantDiagram-ABIIQ3AL-FmTxRIlW.js +7 -0
  62. package/packages/client/dist/assets/railroadDiagram-RFXS5EU6-Bc-Q7iPs.js +1 -0
  63. package/packages/client/dist/assets/requirementDiagram-TGXJPOKE-D209tlqv.js +84 -0
  64. package/packages/client/dist/assets/sankeyDiagram-HTMAVEWB--I_lSbCV.js +40 -0
  65. package/packages/client/dist/assets/sequenceDiagram-DBY2YBRQ-Da5YJcDJ.js +162 -0
  66. package/packages/client/dist/assets/sizeCapture-X5ZJPWSS-DYuc-rzB.js +1 -0
  67. package/packages/client/dist/assets/{snippetTokenHighlight-ot6u3hW4.js → snippetTokenHighlight-qXHxvlCE.js} +1 -1
  68. package/packages/client/dist/assets/stateDiagram-2N3HPSRC-DoOeZoRP.js +1 -0
  69. package/packages/client/dist/assets/stateDiagram-v2-6OUMAXLB-DLkUyWs6.js +1 -0
  70. package/packages/client/dist/assets/swimlanes-5IMT3BWC-BcR7uCTf.js +2 -0
  71. package/packages/client/dist/assets/swimlanesDiagram-G3AALYLV-C0FDo-hf.js +8 -0
  72. package/packages/client/dist/assets/timeline-definition-FHXFAJF6-CLzKR6_i.js +120 -0
  73. package/packages/client/dist/assets/vennDiagram-L72KCM5P-TajEacPR.js +34 -0
  74. package/packages/client/dist/assets/wardleyDiagram-EHGQE667-DKvVEb3V.js +78 -0
  75. package/packages/client/dist/assets/xychartDiagram-FW5EYKEG-CaJG8r0j.js +7 -0
  76. package/packages/client/dist/index.html +2 -2
  77. package/packages/client/dist/sw.js +2 -2
  78. package/packages/server/dist/controllers/accountController.d.ts.map +1 -1
  79. package/packages/server/dist/controllers/accountController.js +31 -11
  80. package/packages/server/dist/controllers/accountController.js.map +1 -1
  81. package/packages/server/dist/controllers/fileSystemController.d.ts +6 -0
  82. package/packages/server/dist/controllers/fileSystemController.d.ts.map +1 -1
  83. package/packages/server/dist/controllers/fileSystemController.js +34 -0
  84. package/packages/server/dist/controllers/fileSystemController.js.map +1 -1
  85. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  86. package/packages/server/dist/controllers/projectController.js +4 -2
  87. package/packages/server/dist/controllers/projectController.js.map +1 -1
  88. package/packages/server/dist/controllers/sessionController.d.ts +5 -0
  89. package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
  90. package/packages/server/dist/controllers/sessionController.js +95 -3
  91. package/packages/server/dist/controllers/sessionController.js.map +1 -1
  92. package/packages/server/dist/handlers/hookBridge.d.ts +131 -0
  93. package/packages/server/dist/handlers/hookBridge.d.ts.map +1 -0
  94. package/packages/server/dist/handlers/hookBridge.js +178 -0
  95. package/packages/server/dist/handlers/hookBridge.js.map +1 -0
  96. package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
  97. package/packages/server/dist/handlers/streamCallbacks.js +30 -4
  98. package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
  99. package/packages/server/dist/handlers/websocket.d.ts +44 -2
  100. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  101. package/packages/server/dist/handlers/websocket.js +666 -64
  102. package/packages/server/dist/handlers/websocket.js.map +1 -1
  103. package/packages/server/dist/index.js +4 -1
  104. package/packages/server/dist/index.js.map +1 -1
  105. package/packages/server/dist/locales/en/server.json +9 -3
  106. package/packages/server/dist/locales/es/server.json +9 -3
  107. package/packages/server/dist/locales/ja/server.json +9 -3
  108. package/packages/server/dist/locales/ko/server.json +9 -3
  109. package/packages/server/dist/locales/pt/server.json +9 -3
  110. package/packages/server/dist/locales/zh-CN/server.json +9 -3
  111. package/packages/server/dist/routes/account.d.ts.map +1 -1
  112. package/packages/server/dist/routes/account.js +4 -2
  113. package/packages/server/dist/routes/account.js.map +1 -1
  114. package/packages/server/dist/routes/fileSystem.d.ts.map +1 -1
  115. package/packages/server/dist/routes/fileSystem.js +2 -0
  116. package/packages/server/dist/routes/fileSystem.js.map +1 -1
  117. package/packages/server/dist/routes/sessions.d.ts.map +1 -1
  118. package/packages/server/dist/routes/sessions.js +2 -0
  119. package/packages/server/dist/routes/sessions.js.map +1 -1
  120. package/packages/server/dist/services/accountInfoService.d.ts +36 -1
  121. package/packages/server/dist/services/accountInfoService.d.ts.map +1 -1
  122. package/packages/server/dist/services/accountInfoService.js +90 -4
  123. package/packages/server/dist/services/accountInfoService.js.map +1 -1
  124. package/packages/server/dist/services/accountStorageService.d.ts +55 -9
  125. package/packages/server/dist/services/accountStorageService.d.ts.map +1 -1
  126. package/packages/server/dist/services/accountStorageService.js +244 -12
  127. package/packages/server/dist/services/accountStorageService.js.map +1 -1
  128. package/packages/server/dist/services/chatEngine.d.ts +59 -3
  129. package/packages/server/dist/services/chatEngine.d.ts.map +1 -1
  130. package/packages/server/dist/services/chatService.d.ts +112 -3
  131. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  132. package/packages/server/dist/services/chatService.js +353 -98
  133. package/packages/server/dist/services/chatService.js.map +1 -1
  134. package/packages/server/dist/services/claudeLoginService.d.ts +14 -3
  135. package/packages/server/dist/services/claudeLoginService.d.ts.map +1 -1
  136. package/packages/server/dist/services/claudeLoginService.js +18 -4
  137. package/packages/server/dist/services/claudeLoginService.js.map +1 -1
  138. package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -1
  139. package/packages/server/dist/services/cliChatEngine.js +124 -22
  140. package/packages/server/dist/services/cliChatEngine.js.map +1 -1
  141. package/packages/server/dist/services/cliModalDetect.d.ts +14 -0
  142. package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -1
  143. package/packages/server/dist/services/cliModalDetect.js +12 -3
  144. package/packages/server/dist/services/cliModalDetect.js.map +1 -1
  145. package/packages/server/dist/services/cliSessionPool.js +1 -1
  146. package/packages/server/dist/services/cliSessionPool.js.map +1 -1
  147. package/packages/server/dist/services/commandService.d.ts.map +1 -1
  148. package/packages/server/dist/services/commandService.js +19 -9
  149. package/packages/server/dist/services/commandService.js.map +1 -1
  150. package/packages/server/dist/services/engineResidencyRegistry.d.ts +112 -0
  151. package/packages/server/dist/services/engineResidencyRegistry.d.ts.map +1 -0
  152. package/packages/server/dist/services/engineResidencyRegistry.js +195 -0
  153. package/packages/server/dist/services/engineResidencyRegistry.js.map +1 -0
  154. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -1
  155. package/packages/server/dist/services/harnessAgentService.js +12 -2
  156. package/packages/server/dist/services/harnessAgentService.js.map +1 -1
  157. package/packages/server/dist/services/harnessLintService.d.ts.map +1 -1
  158. package/packages/server/dist/services/harnessLintService.js +25 -114
  159. package/packages/server/dist/services/harnessLintService.js.map +1 -1
  160. package/packages/server/dist/services/historyParser.d.ts.map +1 -1
  161. package/packages/server/dist/services/historyParser.js +23 -6
  162. package/packages/server/dist/services/historyParser.js.map +1 -1
  163. package/packages/server/dist/services/imageStorageService.d.ts.map +1 -1
  164. package/packages/server/dist/services/imageStorageService.js +7 -0
  165. package/packages/server/dist/services/imageStorageService.js.map +1 -1
  166. package/packages/server/dist/services/projectService.d.ts +4 -1
  167. package/packages/server/dist/services/projectService.d.ts.map +1 -1
  168. package/packages/server/dist/services/projectService.js +14 -1
  169. package/packages/server/dist/services/projectService.js.map +1 -1
  170. package/packages/server/dist/services/promptQueue.d.ts +34 -0
  171. package/packages/server/dist/services/promptQueue.d.ts.map +1 -0
  172. package/packages/server/dist/services/promptQueue.js +80 -0
  173. package/packages/server/dist/services/promptQueue.js.map +1 -0
  174. package/packages/server/dist/services/ptyService.d.ts.map +1 -1
  175. package/packages/server/dist/services/ptyService.js +4 -1
  176. package/packages/server/dist/services/ptyService.js.map +1 -1
  177. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  178. package/packages/server/dist/services/queueService.js +62 -4
  179. package/packages/server/dist/services/queueService.js.map +1 -1
  180. package/packages/server/dist/services/rateLimitProbeService.d.ts +73 -3
  181. package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
  182. package/packages/server/dist/services/rateLimitProbeService.js +397 -30
  183. package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
  184. package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -1
  185. package/packages/server/dist/services/sessionBufferManager.js +22 -4
  186. package/packages/server/dist/services/sessionBufferManager.js.map +1 -1
  187. package/packages/server/dist/services/sessionExportService.d.ts +34 -0
  188. package/packages/server/dist/services/sessionExportService.d.ts.map +1 -0
  189. package/packages/server/dist/services/sessionExportService.js +269 -0
  190. package/packages/server/dist/services/sessionExportService.js.map +1 -0
  191. package/packages/server/dist/services/sessionService.d.ts +6 -0
  192. package/packages/server/dist/services/sessionService.d.ts.map +1 -1
  193. package/packages/server/dist/services/sessionService.js +30 -9
  194. package/packages/server/dist/services/sessionService.js.map +1 -1
  195. package/packages/server/dist/services/streamHandler.d.ts +177 -1
  196. package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
  197. package/packages/server/dist/services/streamHandler.js +425 -39
  198. package/packages/server/dist/services/streamHandler.js.map +1 -1
  199. package/packages/server/dist/services/workspaceContext.d.ts.map +1 -1
  200. package/packages/server/dist/services/workspaceContext.js +6 -0
  201. package/packages/server/dist/services/workspaceContext.js.map +1 -1
  202. package/packages/server/dist/snippets/fix-lint-command-not-on-path +13 -0
  203. package/packages/server/dist/snippets/fix-lint-duplicate-name +12 -0
  204. package/packages/server/dist/snippets/fix-lint-env-var-undefined +13 -0
  205. package/packages/server/dist/snippets/fix-lint-regex-invalid +14 -0
  206. package/packages/server/dist/snippets/fix-lint-tools-non-standard +14 -0
  207. package/packages/server/dist/snippets/fix-lint-url-invalid +13 -0
  208. package/packages/server/dist/snippets/fix-lint-yaml-parse-error +14 -0
  209. package/packages/server/dist/snippets/fix-malformed-skill +17 -0
  210. package/packages/server/dist/utils/backgroundHookSettings.d.ts +31 -0
  211. package/packages/server/dist/utils/backgroundHookSettings.d.ts.map +1 -0
  212. package/packages/server/dist/utils/backgroundHookSettings.js +41 -0
  213. package/packages/server/dist/utils/backgroundHookSettings.js.map +1 -0
  214. package/packages/server/dist/utils/backgroundTaskPoller.d.ts +69 -0
  215. package/packages/server/dist/utils/backgroundTaskPoller.d.ts.map +1 -0
  216. package/packages/server/dist/utils/backgroundTaskPoller.js +356 -0
  217. package/packages/server/dist/utils/backgroundTaskPoller.js.map +1 -0
  218. package/packages/server/dist/utils/backgroundTaskTracker.d.ts +51 -3
  219. package/packages/server/dist/utils/backgroundTaskTracker.d.ts.map +1 -1
  220. package/packages/server/dist/utils/backgroundTaskTracker.js +117 -9
  221. package/packages/server/dist/utils/backgroundTaskTracker.js.map +1 -1
  222. package/packages/server/dist/utils/backgroundToolGuard.d.ts +26 -0
  223. package/packages/server/dist/utils/backgroundToolGuard.d.ts.map +1 -0
  224. package/packages/server/dist/utils/backgroundToolGuard.js +40 -0
  225. package/packages/server/dist/utils/backgroundToolGuard.js.map +1 -0
  226. package/packages/server/dist/utils/boundedRing.d.ts +44 -0
  227. package/packages/server/dist/utils/boundedRing.d.ts.map +1 -0
  228. package/packages/server/dist/utils/boundedRing.js +77 -0
  229. package/packages/server/dist/utils/boundedRing.js.map +1 -0
  230. package/packages/server/dist/utils/effortUtils.d.ts +7 -6
  231. package/packages/server/dist/utils/effortUtils.d.ts.map +1 -1
  232. package/packages/server/dist/utils/effortUtils.js +10 -9
  233. package/packages/server/dist/utils/effortUtils.js.map +1 -1
  234. package/packages/server/dist/utils/messageTree.d.ts +25 -0
  235. package/packages/server/dist/utils/messageTree.d.ts.map +1 -1
  236. package/packages/server/dist/utils/messageTree.js +167 -3
  237. package/packages/server/dist/utils/messageTree.js.map +1 -1
  238. package/packages/server/dist/utils/pathUtils.d.ts.map +1 -1
  239. package/packages/server/dist/utils/pathUtils.js +1 -0
  240. package/packages/server/dist/utils/pathUtils.js.map +1 -1
  241. package/packages/server/dist/utils/residencyActivation.d.ts +61 -0
  242. package/packages/server/dist/utils/residencyActivation.d.ts.map +1 -0
  243. package/packages/server/dist/utils/residencyActivation.js +60 -0
  244. package/packages/server/dist/utils/residencyActivation.js.map +1 -0
  245. package/packages/server/dist/utils/residencyPolicy.d.ts +62 -0
  246. package/packages/server/dist/utils/residencyPolicy.d.ts.map +1 -0
  247. package/packages/server/dist/utils/residencyPolicy.js +82 -0
  248. package/packages/server/dist/utils/residencyPolicy.js.map +1 -0
  249. package/packages/server/dist/utils/runtimeParamStrategy.d.ts +51 -0
  250. package/packages/server/dist/utils/runtimeParamStrategy.d.ts.map +1 -0
  251. package/packages/server/dist/utils/runtimeParamStrategy.js +60 -0
  252. package/packages/server/dist/utils/runtimeParamStrategy.js.map +1 -0
  253. package/packages/server/dist/utils/stopStrategy.d.ts +62 -0
  254. package/packages/server/dist/utils/stopStrategy.d.ts.map +1 -0
  255. package/packages/server/dist/utils/stopStrategy.js +65 -0
  256. package/packages/server/dist/utils/stopStrategy.js.map +1 -0
  257. package/packages/server/resources/internals/INDEX.md +1 -1
  258. package/packages/server/resources/internals/image-storage.md +14 -2
  259. package/packages/server/resources/manual/02-chat.md +30 -13
  260. package/packages/server/resources/manual/03-sessions.md +22 -1
  261. package/packages/server/resources/manual/04-slash-commands-favorites.md +2 -1
  262. package/packages/server/resources/manual/05-projects.md +1 -0
  263. package/packages/server/resources/manual/06-file-explorer-editor.md +21 -2
  264. package/packages/server/resources/manual/07-git.md +1 -1
  265. package/packages/server/resources/manual/08-terminal.md +1 -1
  266. package/packages/server/resources/manual/12-harness-workbench.md +21 -16
  267. package/packages/server/resources/manual/13-settings.md +22 -6
  268. package/packages/server/resources/manual/14-keyboard-shortcuts.md +8 -1
  269. package/packages/shared/dist/constants/messageTree.d.ts +2 -0
  270. package/packages/shared/dist/constants/messageTree.d.ts.map +1 -1
  271. package/packages/shared/dist/constants/messageTree.js +6 -0
  272. package/packages/shared/dist/constants/messageTree.js.map +1 -1
  273. package/packages/shared/dist/index.d.ts +1 -1
  274. package/packages/shared/dist/index.d.ts.map +1 -1
  275. package/packages/shared/dist/index.js.map +1 -1
  276. package/packages/shared/dist/types/accounts.d.ts +13 -0
  277. package/packages/shared/dist/types/accounts.d.ts.map +1 -1
  278. package/packages/shared/dist/types/history.d.ts +14 -1
  279. package/packages/shared/dist/types/history.d.ts.map +1 -1
  280. package/packages/shared/dist/types/message.d.ts +26 -3
  281. package/packages/shared/dist/types/message.d.ts.map +1 -1
  282. package/packages/shared/dist/types/message.js +21 -1
  283. package/packages/shared/dist/types/message.js.map +1 -1
  284. package/packages/shared/dist/types/preferences.d.ts +5 -1
  285. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  286. package/packages/shared/dist/types/preferences.js +3 -0
  287. package/packages/shared/dist/types/preferences.js.map +1 -1
  288. package/packages/shared/dist/types/sdk.d.ts +68 -10
  289. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  290. package/packages/shared/dist/types/sdk.js +56 -16
  291. package/packages/shared/dist/types/sdk.js.map +1 -1
  292. package/packages/shared/dist/types/session.d.ts +6 -0
  293. package/packages/shared/dist/types/session.d.ts.map +1 -1
  294. package/packages/shared/dist/types/session.js +6 -0
  295. package/packages/shared/dist/types/session.js.map +1 -1
  296. package/packages/shared/dist/types/streaming.d.ts +32 -2
  297. package/packages/shared/dist/types/streaming.d.ts.map +1 -1
  298. package/packages/shared/dist/types/streaming.js.map +1 -1
  299. package/packages/shared/dist/types/websocket.d.ts +4 -0
  300. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  301. package/scripts/probe-persistent-hooks.mjs +795 -0
  302. package/packages/client/dist/assets/index-BHbx57gc.js +0 -2
  303. package/packages/client/dist/assets/index-BX7y_Qt3.css +0 -32
  304. package/packages/client/dist/assets/index-DWIOf7rA.js +0 -1657
@@ -7,6 +7,7 @@
7
7
  import * as fs from 'fs';
8
8
  import * as path from 'path';
9
9
  import * as os from 'os';
10
+ import { accountStorageService } from './accountStorageService.js';
10
11
  import { createLogger } from '../utils/logger.js';
11
12
  const log = createLogger('rateLimitProbe');
12
13
  const USAGE_API_URL = 'https://api.anthropic.com/api/oauth/usage';
@@ -20,15 +21,36 @@ const LIMIT_CORROBORATION_THRESHOLD = 0.9; // a genuine "hit" sits at ~100%; 0.9
20
21
  class RateLimitProbeService {
21
22
  cachedToken = null;
22
23
  tokenCachedAt = 0;
24
+ // Org UUID for the prepaid-credits endpoint — cached like the token (see readOrganizationUuid).
25
+ cachedOrgUuid = null;
26
+ orgUuidCachedAt = 0;
23
27
  lastProbeResult = null;
24
28
  lastProbeAt = 0; // ms timestamp of the last successful probe (for limit corroboration freshness)
25
29
  pollTimer = null;
26
30
  broadcastFn = null;
27
31
  healthBroadcastFn = null;
32
+ throttleBroadcastFn = null;
28
33
  apiHealthy = true;
29
34
  healthLastCheckedAt = 0;
30
35
  healthLastError = null;
31
36
  consecutiveThrottles = 0;
37
+ // Bumped by invalidateTokenCache() (account switch / logout). A probe stamps this value at
38
+ // start and its response is DISCARDED when the generation has moved on: usage data carries no
39
+ // account identity, so this stamp is the only way to tell "this belongs to the previous
40
+ // credential" apart. Without it, a slow old-credential response landing after a switch
41
+ // overwrites the new account's usage and gets broadcast to every tab (last-to-finish-wins
42
+ // race — observed in the wild during rapid A→B→A switching).
43
+ generation = 0;
44
+ // Single in-flight probe shared by concurrent callers of the same generation. The usage
45
+ // endpoint throttles small bursts (measured 2026-07-03: ~5 rapid calls → 429 with
46
+ // retry-after=300s), and one switch alone triggers two callers at once (controller broadcast
47
+ // probe + the client's usage fetch) — deduping keeps a switch at ONE API call.
48
+ inflightProbe = null;
49
+ // Server-declared throttle window (epoch ms) parsed from a 429 Retry-After header. Probing
50
+ // inside the window predictably 429s (and may extend it), so probes short-circuit to null
51
+ // until it passes; a one-shot recovery poll fires right at expiry to refill + broadcast.
52
+ throttledUntil = 0;
53
+ throttleRecoveryTimer = null;
32
54
  /**
33
55
  * Check if the user has OAuth credentials (Claude.ai subscriber).
34
56
  * Used to guard features unavailable for subscribers (e.g. max effort).
@@ -43,8 +65,22 @@ class RateLimitProbeService {
43
65
  * instead of a stale (or just-deleted) token for up to the cache TTL.
44
66
  */
45
67
  invalidateTokenCache() {
68
+ // Invalidate every in-flight probe first: their responses were requested with the previous
69
+ // credential and must not repopulate the cache (or broadcast) after this point.
70
+ this.generation++;
46
71
  this.cachedToken = null;
47
72
  this.tokenCachedAt = 0;
73
+ // The org UUID belongs to the same credential set — a switch swaps ~/.claude.json too.
74
+ this.cachedOrgUuid = null;
75
+ this.orgUuidCachedAt = 0;
76
+ // The cached usage result was obtained with the old token — drop it too so a logout or account
77
+ // switch doesn't briefly surface the previous credential's usage via getCachedResult().
78
+ this.lastProbeResult = null;
79
+ this.lastProbeAt = 0;
80
+ // Throttle bookkeeping (429 backoff) belonged to the previous credential; reset so the poller
81
+ // resumes its normal cadence for the new one. Worst case (IP-scoped throttle) is one extra 429
82
+ // that immediately re-enters backoff.
83
+ this.consecutiveThrottles = 0;
48
84
  }
49
85
  /**
50
86
  * Read OAuth access token from ~/.claude/.credentials.json
@@ -76,36 +112,128 @@ class RateLimitProbeService {
76
112
  return null;
77
113
  }
78
114
  }
115
+ /** Shared request options for the OAuth surface (usage + prepaid-credits endpoints). */
116
+ oauthRequestInit(token) {
117
+ return {
118
+ method: 'GET',
119
+ headers: {
120
+ 'Authorization': `Bearer ${token}`,
121
+ 'anthropic-beta': 'oauth-2025-04-20',
122
+ 'User-Agent': 'hammoc/1.0',
123
+ },
124
+ signal: AbortSignal.timeout(5000),
125
+ };
126
+ }
127
+ /**
128
+ * Org UUID for the prepaid-credits endpoint path, read via accountStorageService — the
129
+ * single owner of the CLI identity cache (~/.claude.json `oauthAccount`), which it swaps
130
+ * atomically on account switch. Cached like the token (TTL + cleared by
131
+ * invalidateTokenCache) so the growing config file is not re-parsed on every poll.
132
+ */
133
+ async readOrganizationUuid(gen) {
134
+ const now = Date.now();
135
+ // The timestamp gates the cache, not the value — a MISS is cached too (null identity is a
136
+ // stable state until the next login/switch, both of which clear this via
137
+ // invalidateTokenCache), so the growing config file is not re-parsed on every poll.
138
+ if (this.orgUuidCachedAt !== 0 && (now - this.orgUuidCachedAt) < TOKEN_CACHE_TTL_MS) {
139
+ return this.cachedOrgUuid;
140
+ }
141
+ const identity = await accountStorageService.readCliIdentity();
142
+ // Same rule as every other shared-state mutation in the probe path: an identity read that
143
+ // straddled an account switch must not repopulate the just-cleared cache with the OLD
144
+ // credential's org — the next probe would query (or display) the previous account's balance.
145
+ if (gen !== this.generation)
146
+ return null;
147
+ const uuid = identity?.organizationUuid;
148
+ this.cachedOrgUuid = typeof uuid === 'string' && uuid.length > 0 ? uuid : null;
149
+ this.orgUuidCachedAt = now;
150
+ return this.cachedOrgUuid;
151
+ }
152
+ /**
153
+ * Remaining prepaid credit balance in minor units (negative = overdraft), or null when
154
+ * unavailable (no org UUID, endpoint error/unsupported shape). Mirrors the CLI's own
155
+ * balance fetch: GET .../prepaid/credits → numeric `amount`. Never throws.
156
+ */
157
+ async fetchPrepaidBalance(token, gen) {
158
+ const orgUuid = await this.readOrganizationUuid(gen);
159
+ if (!orgUuid)
160
+ return null;
161
+ try {
162
+ const response = await fetch(`https://api.anthropic.com/api/oauth/organizations/${orgUuid}/prepaid/credits`, this.oauthRequestInit(token));
163
+ if (!response.ok) {
164
+ log.debug('Prepaid balance fetch failed (status: %d)', response.status);
165
+ return null;
166
+ }
167
+ const body = (await response.json());
168
+ if (!Number.isFinite(body?.amount))
169
+ return null;
170
+ return {
171
+ amountMinor: body.amount,
172
+ currency: typeof body?.currency === 'string' ? body.currency : null,
173
+ };
174
+ }
175
+ catch (err) {
176
+ log.debug('Prepaid balance fetch failed: %s', err instanceof Error ? err.message : String(err));
177
+ return null;
178
+ }
179
+ }
79
180
  /**
80
181
  * Call Anthropic OAuth Usage API and return rate limit data.
81
182
  * Returns null on failure (graceful degradation).
82
183
  */
83
184
  async probe() {
185
+ // Join an in-flight probe of the same credential generation instead of firing a second API
186
+ // call (see {@link inflightProbe} — the endpoint throttles small bursts hard).
187
+ if (this.inflightProbe && this.inflightProbe.gen === this.generation) {
188
+ return this.inflightProbe.promise;
189
+ }
190
+ const gen = this.generation;
191
+ const promise = this.probeOnce(gen).finally(() => {
192
+ if (this.inflightProbe && this.inflightProbe.promise === promise)
193
+ this.inflightProbe = null;
194
+ });
195
+ this.inflightProbe = { gen, promise };
196
+ return promise;
197
+ }
198
+ async probeOnce(gen) {
199
+ // Inside a server-declared throttle window every call predictably 429s — don't burn it.
200
+ // Callers get null (UI shows the "checking" state); the scheduled recovery poll refills.
201
+ if (Date.now() < this.throttledUntil)
202
+ return null;
203
+ // Every shared-state mutation below is guarded on the generation stamp still being
204
+ // current — a probe that straddles an invalidation resolves to null and touches nothing.
84
205
  const token = this.readAccessToken();
85
206
  if (!token)
86
207
  return null;
87
208
  try {
88
- const response = await fetch(USAGE_API_URL, {
89
- method: 'GET',
90
- headers: {
91
- 'Authorization': `Bearer ${token}`,
92
- 'anthropic-beta': 'oauth-2025-04-20',
93
- 'User-Agent': 'hammoc/1.0',
94
- },
95
- signal: AbortSignal.timeout(5000),
96
- });
209
+ const response = await fetch(USAGE_API_URL, this.oauthRequestInit(token));
210
+ // A declared Retry-After window is endpoint/IP-scoped, not credential-scoped (the same
211
+ // reason invalidateTokenCache preserves throttledUntil) — record it BEFORE the staleness
212
+ // check. During rapid account switching every probe but the last straddles a switch;
213
+ // discarding their 429s unread left the server ignorant of the very window that burst
214
+ // opened, so clients showed an indefinite "checking…" instead of the honest notice.
215
+ const throttleRecorded = response.status === 429 && this.recordThrottleWindow(response);
216
+ if (gen !== this.generation)
217
+ return null; // credential switched while in flight — stale
97
218
  if (!response.ok) {
98
219
  if (response.status === 401 || response.status === 403) {
99
220
  this.cachedToken = null;
100
221
  this.tokenCachedAt = 0;
101
222
  this.consecutiveThrottles = 0;
223
+ // The token is invalid (e.g. expired/rotated) → the last usage result is no longer
224
+ // trustworthy. Drop it so getCachedResult() doesn't surface a stale figure.
225
+ this.lastProbeResult = null;
226
+ this.lastProbeAt = 0;
102
227
  log.debug('Usage API auth failed (status: %d), token cache invalidated', response.status);
103
228
  // Auth errors mean the API is reachable, just credentials are invalid
104
229
  this.updateApiHealth(true);
105
230
  }
106
231
  else if (response.status === 429) {
107
- this.consecutiveThrottles++;
108
- log.debug('Usage API rate limited (429), consecutive: %d', this.consecutiveThrottles);
232
+ if (!throttleRecorded) {
233
+ // No usable Retry-After header fall back to exponential-backoff guessing.
234
+ this.consecutiveThrottles++;
235
+ log.debug('Usage API rate limited (429), consecutive: %d', this.consecutiveThrottles);
236
+ }
109
237
  // 429 means the API is reachable, just throttled
110
238
  this.updateApiHealth(true);
111
239
  }
@@ -117,7 +245,25 @@ class RateLimitProbeService {
117
245
  return null;
118
246
  }
119
247
  const body = await response.json();
248
+ if (gen !== this.generation)
249
+ return null; // credential switched while reading the body
120
250
  const result = this.parseUsageResponse(body);
251
+ // The usage response only carries monthly spend; the actual remaining balance lives on
252
+ // the org-scoped prepaid-credits endpoint. Fetched only for accounts with a credit
253
+ // signal (zero extra calls otherwise) and strictly best-effort — a miss leaves
254
+ // balanceMinor absent and the UI falls back to the monthly view.
255
+ if (result?.credit) {
256
+ const balance = await this.fetchPrepaidBalance(token, gen);
257
+ if (gen !== this.generation)
258
+ return null; // switched while fetching the balance
259
+ // The two endpoints must agree on the money's denomination: the balance is formatted
260
+ // client-side with the SPEND block's currency/exponent, so a prepaid pool reported in a
261
+ // different currency must be dropped rather than rendered 100x off or under the wrong
262
+ // symbol — the balance is the LEADING figure of the whole feature.
263
+ if (balance !== null && (balance.currency === null || balance.currency === result.credit.currency)) {
264
+ result.credit.balanceMinor = balance.amountMinor;
265
+ }
266
+ }
121
267
  this.lastProbeResult = result;
122
268
  this.lastProbeAt = Date.now();
123
269
  this.consecutiveThrottles = 0;
@@ -126,6 +272,8 @@ class RateLimitProbeService {
126
272
  return result;
127
273
  }
128
274
  catch (err) {
275
+ if (gen !== this.generation)
276
+ return null; // stale failure — bookkeeping belongs to the old credential
129
277
  const errMsg = err instanceof Error ? err.message : String(err);
130
278
  this.consecutiveThrottles = 0;
131
279
  log.debug('Usage API fetch failed: %s', errMsg);
@@ -133,14 +281,33 @@ class RateLimitProbeService {
133
281
  return null;
134
282
  }
135
283
  }
284
+ /**
285
+ * Probe immediately and push a successful result to every connected client via the
286
+ * registered broadcast callback (registered by {@link startPolling}; no-op when polling
287
+ * has not started or the probe fails/turns stale). Called right after an account switch so
288
+ * ALL tabs converge on the new account's usage within one round trip instead of waiting up
289
+ * to a full poll interval — bypasses the 429 backoff on purpose (fresh credential).
290
+ */
291
+ async probeAndBroadcast() {
292
+ try {
293
+ const result = await this.probe();
294
+ if (result && this.broadcastFn)
295
+ this.broadcastFn(result);
296
+ }
297
+ catch {
298
+ /* silent — the periodic poller remains the fallback */
299
+ }
300
+ }
136
301
  /**
137
302
  * Start periodic polling. Calls broadcast function on each successful probe.
138
303
  * Safe to call multiple times — only one timer runs at a time.
139
304
  */
140
- startPolling(broadcast, healthBroadcast) {
305
+ startPolling(broadcast, healthBroadcast, throttleBroadcast) {
141
306
  this.broadcastFn = broadcast;
142
307
  if (healthBroadcast)
143
308
  this.healthBroadcastFn = healthBroadcast;
309
+ if (throttleBroadcast)
310
+ this.throttleBroadcastFn = throttleBroadcast;
144
311
  if (this.pollTimer)
145
312
  return; // already polling
146
313
  log.debug('Starting rate limit polling (interval: %dms)', POLL_INTERVAL_MS);
@@ -157,15 +324,70 @@ class RateLimitProbeService {
157
324
  this.pollTimer = null;
158
325
  log.debug('Rate limit polling stopped');
159
326
  }
327
+ if (this.throttleRecoveryTimer) {
328
+ clearTimeout(this.throttleRecoveryTimer);
329
+ this.throttleRecoveryTimer = null;
330
+ }
160
331
  this.broadcastFn = null;
161
332
  this.healthBroadcastFn = null;
333
+ this.throttleBroadcastFn = null;
334
+ }
335
+ /**
336
+ * Parse a 429's Retry-After into the stand-down window: block probing until it passes,
337
+ * schedule the recovery one-shot, and push the window to every connected client — the
338
+ * regular broadcast channel only carries successes, so a tab parked on the settings page
339
+ * would otherwise never learn WHY the bars are empty. Definite server-declared window
340
+ * (measured: burst → 300s) — no exponential guessing: stand down exactly that long.
341
+ * Returns false when the header is absent/invalid (that 429 takes the backoff path).
342
+ */
343
+ recordThrottleWindow(response) {
344
+ const retryAfterSec = Number(response.headers.get('retry-after'));
345
+ if (!Number.isFinite(retryAfterSec) || retryAfterSec <= 0)
346
+ return false;
347
+ this.throttledUntil = Date.now() + retryAfterSec * 1000;
348
+ this.scheduleThrottleRecovery(retryAfterSec * 1000);
349
+ this.throttleBroadcastFn?.(this.throttledUntil);
350
+ log.debug('Usage API rate limited (429), retry-after: %ds', retryAfterSec);
351
+ return true;
352
+ }
353
+ /**
354
+ * One-shot poll right after a Retry-After window expires (small buffer added), so usage
355
+ * refills and broadcasts at the earliest allowed moment instead of the next 2-min tick.
356
+ * Safe to fire anytime: pollOnce re-checks the window and generation-guarded probe rules.
357
+ */
358
+ scheduleThrottleRecovery(waitMs) {
359
+ if (this.throttleRecoveryTimer)
360
+ clearTimeout(this.throttleRecoveryTimer);
361
+ this.throttleRecoveryTimer = setTimeout(() => {
362
+ this.throttleRecoveryTimer = null;
363
+ this.pollOnce();
364
+ }, waitMs + 1_000);
365
+ // A pending recovery must never keep the process (or a test worker) alive on its own.
366
+ this.throttleRecoveryTimer.unref?.();
162
367
  }
163
368
  /**
164
- * Return last cached probe result (no API call).
369
+ * Return last cached probe result (no API call). Deliberately NO stale fallback: usage can
370
+ * change from other devices at any moment, so anything but a live-generation probe result
371
+ * must not be presented as current. When this is null because of a throttle window, callers
372
+ * surface {@link getThrottledUntil} to the user instead.
165
373
  */
166
- getCachedResult() {
374
+ getCachedResult(maxAgeMs = POLL_INTERVAL_MS * 2) {
375
+ // Freshness-bounded: polling stops when the last client disconnects, so an unbounded cache
376
+ // would serve an hours-old snapshot as current on the next visit (usage changes from other
377
+ // devices). Older than two poll intervals → treated as absent: REST callers fall through to
378
+ // a live probe and the connect-time emit is skipped (the poll restart refills in seconds).
379
+ if (this.lastProbeAt === 0 || Date.now() - this.lastProbeAt > maxAgeMs)
380
+ return null;
167
381
  return this.lastProbeResult;
168
382
  }
383
+ /**
384
+ * Epoch ms until which the usage API refuses queries (server-declared Retry-After window),
385
+ * or null when probing is currently allowed. Lets the UI say "temporarily rate-limited,
386
+ * resumes in ~N min" honestly instead of an indefinite "checking…".
387
+ */
388
+ getThrottledUntil() {
389
+ return Date.now() < this.throttledUntil ? this.throttledUntil : null;
390
+ }
169
391
  /**
170
392
  * Cross-check a screen-scraped "usage limit" notice against the authoritative usage numbers.
171
393
  * The CLI engine reads the limit notice off the PTY *screen*, which cannot tell the genuine
@@ -184,8 +406,15 @@ class RateLimitProbeService {
184
406
  const fresh = r !== null && Date.now() - this.lastProbeAt < LIMIT_CORROBORATION_TTL_MS;
185
407
  if (!fresh || !r)
186
408
  return true; // no/stale data → cannot refute → trust the scrape (no regression)
187
- const maxUtil = Math.max(r.fiveHour?.utilization ?? 0, r.sevenDay?.utilization ?? 0, r.sevenDayOpus?.utilization ?? 0, r.sevenDaySonnet?.utilization ?? 0);
188
- return maxUtil >= LIMIT_CORROBORATION_THRESHOLD;
409
+ // All window families, including model-scoped weekly caps a genuine "limit reached" can
410
+ // come from a scoped cap while every general window still shows headroom.
411
+ const utilizations = this.windowUtilizations(r);
412
+ // A result can be non-null with ZERO windows (credit-only response). Headroom can only
413
+ // refute when at least one window was actually observed — otherwise trust the scrape, same
414
+ // as the no-data case (a vacuous max of 0 must not dismiss a genuine limit notice).
415
+ if (utilizations.length === 0)
416
+ return true;
417
+ return Math.max(...utilizations) >= LIMIT_CORROBORATION_THRESHOLD;
189
418
  }
190
419
  /**
191
420
  * Return cached API health status (no API call).
@@ -213,6 +442,12 @@ class RateLimitProbeService {
213
442
  }
214
443
  }
215
444
  pollOnce() {
445
+ // Inside a server-declared Retry-After window, polling is pointless (and may extend the
446
+ // window) — the recovery one-shot fires at expiry.
447
+ if (Date.now() < this.throttledUntil) {
448
+ log.debug('Skipping probe (retry-after window: %ds remaining)', Math.round((this.throttledUntil - Date.now()) / 1000));
449
+ return;
450
+ }
216
451
  // Exponential backoff on consecutive 429s: skip polls until backoff expires.
217
452
  // Backoff doubles each time: 4min, 8min, 16min, capped at 30min.
218
453
  if (this.consecutiveThrottles > 0) {
@@ -235,32 +470,164 @@ class RateLimitProbeService {
235
470
  parseUsageResponse(body) {
236
471
  const data = body;
237
472
  // API returns utilization as a 0-100 percentage; normalize to 0-1. null/absent windows
238
- // (e.g. seven_day_opus on a plan with no separate Opus cap) are simply omitted.
473
+ // (e.g. seven_day_opus on a plan with no separate Opus cap) are simply omitted — as is a
474
+ // window whose utilization is missing/non-finite: a fabricated NaN/0% window would both
475
+ // suppress the limits[] fallback below AND blind the safety aggregates (NaN >= 0.9 is
476
+ // false, so a genuine limit notice would be "refuted" by garbage).
239
477
  const toWindow = (w) => {
240
- if (!w)
478
+ if (!w || typeof w.utilization !== 'number' || !Number.isFinite(w.utilization))
241
479
  return undefined;
242
480
  const util = w.utilization / 100;
243
- return { utilization: util, reset: w.resets_at, status: this.getStatus(util) };
481
+ // reset is string|null on the wire type — normalize a missing/empty timestamp to null
482
+ // instead of leaking '' as a third sentinel.
483
+ return { utilization: util, reset: w.resets_at || null, status: this.getStatus(util) };
484
+ };
485
+ // The API is mid-migration from fixed keys (five_hour, seven_day, seven_day_opus, ...) to the
486
+ // generic limits[] array (kind: session / weekly_all / weekly_scoped). Legacy keys stay the
487
+ // preferred source while they're served; limits[] fills the gaps so the parser survives the
488
+ // day a legacy key stops being populated (the scoped keys already have — observed null with
489
+ // the scoped windows living only in limits[]).
490
+ const limitByKind = (kind) => {
491
+ // Same binding-cap rule as pushScoped: among duplicate entries of one kind, the
492
+ // highest-percent one is THE window (position-based .find could hide a saturated one).
493
+ let best;
494
+ for (const l of data.limits ?? []) {
495
+ if (l?.kind !== kind || !Number.isFinite(l.percent))
496
+ continue;
497
+ if (!best || l.percent > best.utilization)
498
+ best = { utilization: l.percent, resets_at: l.resets_at };
499
+ }
500
+ return best;
244
501
  };
245
- const fiveHour = toWindow(data.five_hour);
246
- const sevenDay = toWindow(data.seven_day);
247
- const sevenDayOpus = toWindow(data.seven_day_opus);
248
- const sevenDaySonnet = toWindow(data.seven_day_sonnet);
249
- if (!fiveHour && !sevenDay && !sevenDayOpus && !sevenDaySonnet)
502
+ const fiveHour = toWindow(data.five_hour) ?? toWindow(limitByKind('session'));
503
+ const sevenDay = toWindow(data.seven_day) ?? toWindow(limitByKind('weekly_all'));
504
+ // Per-model weekly caps have ONE representation: scopedWeekly. Source preference, not
505
+ // per-item merging — when limits[] carries any weekly_scoped entries it is the complete
506
+ // new-shape list and wins wholesale; only a response WITHOUT them falls back to the legacy
507
+ // seven_day_opus/seven_day_sonnet keys (folded into the same shape). Name-matching two
508
+ // shapes per item would be fragile: nothing guarantees the API labels the same cap "Opus".
509
+ const scopedWeekly = [];
510
+ const pushScoped = (modelName, utilization, reset) => {
511
+ // Same-named caps collapse to the BINDING (highest-utilization) one — first-wins could
512
+ // hide a saturated cap behind a low duplicate and blind the safety aggregates.
513
+ const existing = scopedWeekly.find((w) => w.modelName === modelName);
514
+ if (existing) {
515
+ if (utilization > existing.utilization) {
516
+ existing.utilization = utilization;
517
+ existing.reset = reset;
518
+ }
519
+ return;
520
+ }
521
+ scopedWeekly.push({ modelName, utilization, reset });
522
+ };
523
+ for (const entry of data.limits ?? []) {
524
+ // display_name preferred, model id as fallback — a binding cap must not vanish from the
525
+ // safety aggregates (overallStatus, limit corroboration) just because its label is null
526
+ // or EMPTY (|| lets '' fall through to the id, where ?? would not).
527
+ const modelName = entry?.scope?.model?.display_name || entry?.scope?.model?.id;
528
+ if (entry?.kind !== 'weekly_scoped' || !modelName || !Number.isFinite(entry.percent))
529
+ continue;
530
+ pushScoped(modelName, entry.percent / 100, entry.resets_at || null);
531
+ }
532
+ if (scopedWeekly.length === 0) {
533
+ const legacyOpus = toWindow(data.seven_day_opus);
534
+ const legacySonnet = toWindow(data.seven_day_sonnet);
535
+ if (legacyOpus)
536
+ pushScoped('Opus', legacyOpus.utilization, legacyOpus.reset);
537
+ if (legacySonnet)
538
+ pushScoped('Sonnet', legacySonnet.utilization, legacySonnet.reset);
539
+ }
540
+ const credit = this.parseCredit(data.spend, data.extra_usage);
541
+ if (!fiveHour && !sevenDay && scopedWeekly.length === 0 && !credit) {
250
542
  return null;
543
+ }
251
544
  const result = {};
252
545
  if (fiveHour)
253
546
  result.fiveHour = fiveHour;
254
547
  if (sevenDay)
255
548
  result.sevenDay = sevenDay;
256
- if (sevenDayOpus)
257
- result.sevenDayOpus = sevenDayOpus;
258
- if (sevenDaySonnet)
259
- result.sevenDaySonnet = sevenDaySonnet;
260
- const maxUtil = Math.max(fiveHour?.utilization ?? 0, sevenDay?.utilization ?? 0, sevenDayOpus?.utilization ?? 0, sevenDaySonnet?.utilization ?? 0);
261
- result.overallStatus = this.getStatus(maxUtil);
549
+ if (scopedWeekly.length > 0)
550
+ result.scopedWeekly = scopedWeekly;
551
+ if (credit)
552
+ result.credit = credit;
553
+ const utilizations = this.windowUtilizations(result);
554
+ result.overallStatus = this.getStatus(utilizations.length > 0 ? Math.max(...utilizations) : 0);
262
555
  return result;
263
556
  }
557
+ /**
558
+ * Every observed window's utilization, all families — the single enumeration shared by
559
+ * overallStatus and limit corroboration, so a new window family can never reach one
560
+ * aggregate and silently miss the other.
561
+ */
562
+ windowUtilizations(r) {
563
+ return [
564
+ r.fiveHour?.utilization,
565
+ r.sevenDay?.utilization,
566
+ ...(r.scopedWeekly?.map((w) => w.utilization) ?? []),
567
+ // isFinite, not typeof: a NaN slipping into an aggregate would make Math.max NaN and
568
+ // NaN >= threshold false — silently refuting genuine limit notices with garbage.
569
+ ].filter((u) => Number.isFinite(u));
570
+ }
571
+ /**
572
+ * Extra-usage credit standing. The two raw blocks carry the same standing under different
573
+ * field names — each is normalized to one intermediate and the FIRST one with an actual
574
+ * credit signal wins (a present-but-empty `spend` falls through to a populated `extra_usage`;
575
+ * transitional responses may carry both). Returns undefined when neither block carries any
576
+ * signal (never enabled, nothing spent, no cap, no disabled reason) so the UI omits the
577
+ * section entirely.
578
+ */
579
+ parseCredit(spend, extraUsage) {
580
+ const fromSpend = () => spend ? {
581
+ usedMinor: spend.used?.amount_minor ?? 0,
582
+ limitMinor: spend.limit?.amount_minor ?? null,
583
+ enabled: spend.enabled,
584
+ disabledReason: spend.disabled_reason ?? null,
585
+ currency: spend.used?.currency ?? spend.limit?.currency ?? 'USD',
586
+ exponent: spend.used?.exponent ?? spend.limit?.exponent ?? 2,
587
+ percent: typeof spend.percent === 'number' ? spend.percent : null,
588
+ } : null;
589
+ const fromExtraUsage = () => extraUsage ? {
590
+ usedMinor: extraUsage.used_credits ?? 0,
591
+ limitMinor: extraUsage.monthly_limit ?? null,
592
+ enabled: extraUsage.is_enabled,
593
+ disabledReason: extraUsage.disabled_reason ?? null,
594
+ currency: extraUsage.currency ?? 'USD',
595
+ exponent: extraUsage.decimal_places ?? 2,
596
+ percent: typeof extraUsage.utilization === 'number' ? extraUsage.utilization : null,
597
+ } : null;
598
+ const hasSignal = (n) => n !== null && (n.enabled === true || n.usedMinor > 0 || n.limitMinor !== null || n.disabledReason !== null);
599
+ const candidates = [fromSpend(), fromExtraUsage()];
600
+ const n = candidates.find(hasSignal);
601
+ if (!n)
602
+ return undefined;
603
+ // Money fields must stay coherent within one block, but scalar flags can be split across
604
+ // blocks in partial/transitional shapes — a winner that OMITS the flag falls back to the
605
+ // sibling. Without this, a spend block carrying only money would report an actively
606
+ // covering account as disabled and silence the credit alternation.
607
+ const sibling = candidates.find((c) => c !== null && c !== n) ?? null;
608
+ // Tri-state on purpose: true / false / undefined(=neither block carried the flag).
609
+ const enabled = n.enabled ?? sibling?.enabled;
610
+ const percent = n.percent ?? sibling?.percent ?? null;
611
+ // The reason travels WITH the flag semantically — a borrowed enabled:false must bring its
612
+ // sibling's reason along, or the UI degrades "out of credits" to a generic "turned off".
613
+ const disabledReason = n.disabledReason ?? sibling?.disabledReason ?? null;
614
+ const credit = {
615
+ usedMinor: n.usedMinor,
616
+ limitMinor: n.limitMinor,
617
+ currency: n.currency,
618
+ exponent: n.exponent,
619
+ enabled,
620
+ disabledReason,
621
+ };
622
+ if (percent !== null) {
623
+ credit.utilization = percent / 100;
624
+ }
625
+ else if (n.limitMinor !== null) {
626
+ // A zero cap with any spend is saturated, not 0% — only the 0/0 case reads as empty.
627
+ credit.utilization = n.limitMinor > 0 ? n.usedMinor / n.limitMinor : (n.usedMinor > 0 ? 1 : 0);
628
+ }
629
+ return credit;
630
+ }
264
631
  getStatus(utilization) {
265
632
  if (utilization >= 0.8)
266
633
  return 'critical';
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimitProbeService.js","sourceRoot":"","sources":["../../src/services/rateLimitProbeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rateLimitProbeService.js","sourceRoot":"","sources":["../../src/services/rateLimitProbeService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sessionBufferManager.d.ts","sourceRoot":"","sources":["../../src/services/sessionBufferManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgCrD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAoC;IAEnD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,aAAa;IAY3D,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAShE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAS5D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IASnD,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,cAAc,EAAE,CAAC;IA4C5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYzC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOhC,0BAA0B;IAC1B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
1
+ {"version":3,"file":"sessionBufferManager.d.ts","sourceRoot":"","sources":["../../src/services/sessionBufferManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAiCrD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAqBD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAoC;IAEnD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,aAAa;IAY3D,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAShE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAS5D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IASnD,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,cAAc,EAAE,CAAC;IA8C5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYzC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOhC,0BAA0B;IAC1B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}