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.
- package/README.md +9 -6
- package/package.json +1 -1
- package/packages/client/dist/assets/MermaidViewer-B-LwclIl.js +7 -0
- package/packages/client/dist/assets/PdfViewer-C3Nymwn3.js +12 -0
- package/packages/client/dist/assets/PdfViewer-QCQEGvBO.css +1 -0
- package/packages/client/dist/assets/abnfDiagram-VRR7QNED-GfhY_hnV.js +1 -0
- package/packages/client/dist/assets/{agentExampleHighlight-Dws80em9.js → agentExampleHighlight-CyhVLy0_.js} +1 -1
- package/packages/client/dist/assets/arc-8nyjXGC3.js +1 -0
- package/packages/client/dist/assets/architectureDiagram-ZJ3FMSHR-B4onXLm4.js +36 -0
- package/packages/client/dist/assets/blockDiagram-677ZJIJ3-D0D6ncaN.js +132 -0
- package/packages/client/dist/assets/c4Diagram-LMCZKHZV-CE7Tip-_.js +10 -0
- package/packages/client/dist/assets/channel-CPjlbdOo.js +1 -0
- package/packages/client/dist/assets/chunk-2Q5K7J3B-4rW1da1Z.js +1 -0
- package/packages/client/dist/assets/chunk-32BRIVSS-JuzxS4QA.js +1 -0
- package/packages/client/dist/assets/chunk-5VM5RSS4-WRNf-xsi.js +15 -0
- package/packages/client/dist/assets/chunk-EX3LRPZG-BDWPlBKO.js +231 -0
- package/packages/client/dist/assets/chunk-JWPE2WC7-B8nCyQAc.js +1 -0
- package/packages/client/dist/assets/chunk-MOJQB5TN-7c-yriHe.js +88 -0
- package/packages/client/dist/assets/chunk-RYQCIY6F-LTDywRs7.js +1 -0
- package/packages/client/dist/assets/chunk-V7JOEXUC-DjVgQpjl.js +206 -0
- package/packages/client/dist/assets/chunk-VR4S4FIN-7jDdkUpx.js +1 -0
- package/packages/client/dist/assets/chunk-XXDRQBXY-ENKV2O8a.js +1 -0
- package/packages/client/dist/assets/classDiagram-OUVF2IWQ-C0PbC7Pi.js +1 -0
- package/packages/client/dist/assets/classDiagram-v2-EOCWNBFH-C0PbC7Pi.js +1 -0
- package/packages/client/dist/assets/{commandTokenHighlight-aR071CNy.js → commandTokenHighlight-DGP0RKx0.js} +1 -1
- package/packages/client/dist/assets/cose-bilkent-JH36ORCC-CQTNdQ-g.js +1 -0
- package/packages/client/dist/assets/cynefin-VYW2F7L2-BYlAJRcO.js +178 -0
- package/packages/client/dist/assets/cynefinDiagram-TSTJHNR4-7zyUTflT.js +62 -0
- package/packages/client/dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
- package/packages/client/dist/assets/dagre-VKFMJZFB-DyZir42W.js +4 -0
- package/packages/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/packages/client/dist/assets/diagram-FQU43EPY-CmNAU8Nw.js +3 -0
- package/packages/client/dist/assets/diagram-G47NLZAW-B0EIk03o.js +24 -0
- package/packages/client/dist/assets/diagram-NH7WQ7WH-Dulv0f1N.js +24 -0
- package/packages/client/dist/assets/diagram-OA4YK3LP-DEEcMLgi.js +30 -0
- package/packages/client/dist/assets/diagram-WEI45ONY-ZYebAZ93.js +41 -0
- package/packages/client/dist/assets/ebnfDiagram-CCIWWBDH-DCHpt3qn.js +1 -0
- package/packages/client/dist/assets/erDiagram-Q63AITRT-B6T87-48.js +85 -0
- package/packages/client/dist/assets/flowDiagram-23GEKE2U-DAcW6mKJ.js +156 -0
- package/packages/client/dist/assets/ganttDiagram-NO4QXBWP-Ct_eFFcM.js +292 -0
- package/packages/client/dist/assets/gitGraphDiagram-IHSO6WYX-BGi8Fdm2.js +106 -0
- package/packages/client/dist/assets/graph-C9eacEi8.js +1 -0
- package/packages/client/dist/assets/index-CtMiUbMJ.js +1671 -0
- package/packages/client/dist/assets/index-hTu6ZG2N.js +2 -0
- package/packages/client/dist/assets/index-oBa2uNlv.css +32 -0
- package/packages/client/dist/assets/infoDiagram-FWYZ7A6U-CqvwbXJn.js +2 -0
- package/packages/client/dist/assets/init-Gi6I4Gst.js +1 -0
- package/packages/client/dist/assets/ishikawaDiagram-FXEZZL3T-CHhr5ioQ.js +70 -0
- package/packages/client/dist/assets/journeyDiagram-5HDEW3XC-d20NzZAd.js +139 -0
- package/packages/client/dist/assets/kanban-definition-HUTT4EX6-CHx3wOer.js +89 -0
- package/packages/client/dist/assets/katex-C5jXJg4s.js +257 -0
- package/packages/client/dist/assets/layout-DEXfKzaS.js +1 -0
- package/packages/client/dist/assets/linear-Cnp1E9M4.js +1 -0
- package/packages/client/dist/assets/map-Czzmt4hB.js +1 -0
- package/packages/client/dist/assets/mermaid.core-jAhLhPYr.js +314 -0
- package/packages/client/dist/assets/mindmap-definition-LN4V7U3C-zi30RPoJ.js +96 -0
- package/packages/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/packages/client/dist/assets/pdf.worker.min-qwK7q_zL.mjs +28 -0
- package/packages/client/dist/assets/pegDiagram-2B236MQR-4gKLzTqu.js +1 -0
- package/packages/client/dist/assets/pieDiagram-ENE6RG2P-DRDhpjxP.js +39 -0
- package/packages/client/dist/assets/quadrantDiagram-ABIIQ3AL-FmTxRIlW.js +7 -0
- package/packages/client/dist/assets/railroadDiagram-RFXS5EU6-Bc-Q7iPs.js +1 -0
- package/packages/client/dist/assets/requirementDiagram-TGXJPOKE-D209tlqv.js +84 -0
- package/packages/client/dist/assets/sankeyDiagram-HTMAVEWB--I_lSbCV.js +40 -0
- package/packages/client/dist/assets/sequenceDiagram-DBY2YBRQ-Da5YJcDJ.js +162 -0
- package/packages/client/dist/assets/sizeCapture-X5ZJPWSS-DYuc-rzB.js +1 -0
- package/packages/client/dist/assets/{snippetTokenHighlight-ot6u3hW4.js → snippetTokenHighlight-qXHxvlCE.js} +1 -1
- package/packages/client/dist/assets/stateDiagram-2N3HPSRC-DoOeZoRP.js +1 -0
- package/packages/client/dist/assets/stateDiagram-v2-6OUMAXLB-DLkUyWs6.js +1 -0
- package/packages/client/dist/assets/swimlanes-5IMT3BWC-BcR7uCTf.js +2 -0
- package/packages/client/dist/assets/swimlanesDiagram-G3AALYLV-C0FDo-hf.js +8 -0
- package/packages/client/dist/assets/timeline-definition-FHXFAJF6-CLzKR6_i.js +120 -0
- package/packages/client/dist/assets/vennDiagram-L72KCM5P-TajEacPR.js +34 -0
- package/packages/client/dist/assets/wardleyDiagram-EHGQE667-DKvVEb3V.js +78 -0
- package/packages/client/dist/assets/xychartDiagram-FW5EYKEG-CaJG8r0j.js +7 -0
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +2 -2
- package/packages/server/dist/controllers/accountController.d.ts.map +1 -1
- package/packages/server/dist/controllers/accountController.js +31 -11
- package/packages/server/dist/controllers/accountController.js.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.d.ts +6 -0
- package/packages/server/dist/controllers/fileSystemController.d.ts.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.js +34 -0
- package/packages/server/dist/controllers/fileSystemController.js.map +1 -1
- package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
- package/packages/server/dist/controllers/projectController.js +4 -2
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts +5 -0
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +95 -3
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/handlers/hookBridge.d.ts +131 -0
- package/packages/server/dist/handlers/hookBridge.d.ts.map +1 -0
- package/packages/server/dist/handlers/hookBridge.js +178 -0
- package/packages/server/dist/handlers/hookBridge.js.map +1 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +30 -4
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +44 -2
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +666 -64
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +4 -1
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +9 -3
- package/packages/server/dist/locales/es/server.json +9 -3
- package/packages/server/dist/locales/ja/server.json +9 -3
- package/packages/server/dist/locales/ko/server.json +9 -3
- package/packages/server/dist/locales/pt/server.json +9 -3
- package/packages/server/dist/locales/zh-CN/server.json +9 -3
- package/packages/server/dist/routes/account.d.ts.map +1 -1
- package/packages/server/dist/routes/account.js +4 -2
- package/packages/server/dist/routes/account.js.map +1 -1
- package/packages/server/dist/routes/fileSystem.d.ts.map +1 -1
- package/packages/server/dist/routes/fileSystem.js +2 -0
- package/packages/server/dist/routes/fileSystem.js.map +1 -1
- package/packages/server/dist/routes/sessions.d.ts.map +1 -1
- package/packages/server/dist/routes/sessions.js +2 -0
- package/packages/server/dist/routes/sessions.js.map +1 -1
- package/packages/server/dist/services/accountInfoService.d.ts +36 -1
- package/packages/server/dist/services/accountInfoService.d.ts.map +1 -1
- package/packages/server/dist/services/accountInfoService.js +90 -4
- package/packages/server/dist/services/accountInfoService.js.map +1 -1
- package/packages/server/dist/services/accountStorageService.d.ts +55 -9
- package/packages/server/dist/services/accountStorageService.d.ts.map +1 -1
- package/packages/server/dist/services/accountStorageService.js +244 -12
- package/packages/server/dist/services/accountStorageService.js.map +1 -1
- package/packages/server/dist/services/chatEngine.d.ts +59 -3
- package/packages/server/dist/services/chatEngine.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +112 -3
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +353 -98
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/claudeLoginService.d.ts +14 -3
- package/packages/server/dist/services/claudeLoginService.d.ts.map +1 -1
- package/packages/server/dist/services/claudeLoginService.js +18 -4
- package/packages/server/dist/services/claudeLoginService.js.map +1 -1
- package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -1
- package/packages/server/dist/services/cliChatEngine.js +124 -22
- package/packages/server/dist/services/cliChatEngine.js.map +1 -1
- package/packages/server/dist/services/cliModalDetect.d.ts +14 -0
- package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -1
- package/packages/server/dist/services/cliModalDetect.js +12 -3
- package/packages/server/dist/services/cliModalDetect.js.map +1 -1
- package/packages/server/dist/services/cliSessionPool.js +1 -1
- package/packages/server/dist/services/cliSessionPool.js.map +1 -1
- package/packages/server/dist/services/commandService.d.ts.map +1 -1
- package/packages/server/dist/services/commandService.js +19 -9
- package/packages/server/dist/services/commandService.js.map +1 -1
- package/packages/server/dist/services/engineResidencyRegistry.d.ts +112 -0
- package/packages/server/dist/services/engineResidencyRegistry.d.ts.map +1 -0
- package/packages/server/dist/services/engineResidencyRegistry.js +195 -0
- package/packages/server/dist/services/engineResidencyRegistry.js.map +1 -0
- package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessAgentService.js +12 -2
- package/packages/server/dist/services/harnessAgentService.js.map +1 -1
- package/packages/server/dist/services/harnessLintService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessLintService.js +25 -114
- package/packages/server/dist/services/harnessLintService.js.map +1 -1
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +23 -6
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/imageStorageService.d.ts.map +1 -1
- package/packages/server/dist/services/imageStorageService.js +7 -0
- package/packages/server/dist/services/imageStorageService.js.map +1 -1
- package/packages/server/dist/services/projectService.d.ts +4 -1
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +14 -1
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/promptQueue.d.ts +34 -0
- package/packages/server/dist/services/promptQueue.d.ts.map +1 -0
- package/packages/server/dist/services/promptQueue.js +80 -0
- package/packages/server/dist/services/promptQueue.js.map +1 -0
- package/packages/server/dist/services/ptyService.d.ts.map +1 -1
- package/packages/server/dist/services/ptyService.js +4 -1
- package/packages/server/dist/services/ptyService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +62 -4
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.d.ts +73 -3
- package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.js +397 -30
- package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.js +22 -4
- package/packages/server/dist/services/sessionBufferManager.js.map +1 -1
- package/packages/server/dist/services/sessionExportService.d.ts +34 -0
- package/packages/server/dist/services/sessionExportService.d.ts.map +1 -0
- package/packages/server/dist/services/sessionExportService.js +269 -0
- package/packages/server/dist/services/sessionExportService.js.map +1 -0
- package/packages/server/dist/services/sessionService.d.ts +6 -0
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +30 -9
- package/packages/server/dist/services/sessionService.js.map +1 -1
- package/packages/server/dist/services/streamHandler.d.ts +177 -1
- package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
- package/packages/server/dist/services/streamHandler.js +425 -39
- package/packages/server/dist/services/streamHandler.js.map +1 -1
- package/packages/server/dist/services/workspaceContext.d.ts.map +1 -1
- package/packages/server/dist/services/workspaceContext.js +6 -0
- package/packages/server/dist/services/workspaceContext.js.map +1 -1
- package/packages/server/dist/snippets/fix-lint-command-not-on-path +13 -0
- package/packages/server/dist/snippets/fix-lint-duplicate-name +12 -0
- package/packages/server/dist/snippets/fix-lint-env-var-undefined +13 -0
- package/packages/server/dist/snippets/fix-lint-regex-invalid +14 -0
- package/packages/server/dist/snippets/fix-lint-tools-non-standard +14 -0
- package/packages/server/dist/snippets/fix-lint-url-invalid +13 -0
- package/packages/server/dist/snippets/fix-lint-yaml-parse-error +14 -0
- package/packages/server/dist/snippets/fix-malformed-skill +17 -0
- package/packages/server/dist/utils/backgroundHookSettings.d.ts +31 -0
- package/packages/server/dist/utils/backgroundHookSettings.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundHookSettings.js +41 -0
- package/packages/server/dist/utils/backgroundHookSettings.js.map +1 -0
- package/packages/server/dist/utils/backgroundTaskPoller.d.ts +69 -0
- package/packages/server/dist/utils/backgroundTaskPoller.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundTaskPoller.js +356 -0
- package/packages/server/dist/utils/backgroundTaskPoller.js.map +1 -0
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts +51 -3
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts.map +1 -1
- package/packages/server/dist/utils/backgroundTaskTracker.js +117 -9
- package/packages/server/dist/utils/backgroundTaskTracker.js.map +1 -1
- package/packages/server/dist/utils/backgroundToolGuard.d.ts +26 -0
- package/packages/server/dist/utils/backgroundToolGuard.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundToolGuard.js +40 -0
- package/packages/server/dist/utils/backgroundToolGuard.js.map +1 -0
- package/packages/server/dist/utils/boundedRing.d.ts +44 -0
- package/packages/server/dist/utils/boundedRing.d.ts.map +1 -0
- package/packages/server/dist/utils/boundedRing.js +77 -0
- package/packages/server/dist/utils/boundedRing.js.map +1 -0
- package/packages/server/dist/utils/effortUtils.d.ts +7 -6
- package/packages/server/dist/utils/effortUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/effortUtils.js +10 -9
- package/packages/server/dist/utils/effortUtils.js.map +1 -1
- package/packages/server/dist/utils/messageTree.d.ts +25 -0
- package/packages/server/dist/utils/messageTree.d.ts.map +1 -1
- package/packages/server/dist/utils/messageTree.js +167 -3
- package/packages/server/dist/utils/messageTree.js.map +1 -1
- package/packages/server/dist/utils/pathUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/pathUtils.js +1 -0
- package/packages/server/dist/utils/pathUtils.js.map +1 -1
- package/packages/server/dist/utils/residencyActivation.d.ts +61 -0
- package/packages/server/dist/utils/residencyActivation.d.ts.map +1 -0
- package/packages/server/dist/utils/residencyActivation.js +60 -0
- package/packages/server/dist/utils/residencyActivation.js.map +1 -0
- package/packages/server/dist/utils/residencyPolicy.d.ts +62 -0
- package/packages/server/dist/utils/residencyPolicy.d.ts.map +1 -0
- package/packages/server/dist/utils/residencyPolicy.js +82 -0
- package/packages/server/dist/utils/residencyPolicy.js.map +1 -0
- package/packages/server/dist/utils/runtimeParamStrategy.d.ts +51 -0
- package/packages/server/dist/utils/runtimeParamStrategy.d.ts.map +1 -0
- package/packages/server/dist/utils/runtimeParamStrategy.js +60 -0
- package/packages/server/dist/utils/runtimeParamStrategy.js.map +1 -0
- package/packages/server/dist/utils/stopStrategy.d.ts +62 -0
- package/packages/server/dist/utils/stopStrategy.d.ts.map +1 -0
- package/packages/server/dist/utils/stopStrategy.js +65 -0
- package/packages/server/dist/utils/stopStrategy.js.map +1 -0
- package/packages/server/resources/internals/INDEX.md +1 -1
- package/packages/server/resources/internals/image-storage.md +14 -2
- package/packages/server/resources/manual/02-chat.md +30 -13
- package/packages/server/resources/manual/03-sessions.md +22 -1
- package/packages/server/resources/manual/04-slash-commands-favorites.md +2 -1
- package/packages/server/resources/manual/05-projects.md +1 -0
- package/packages/server/resources/manual/06-file-explorer-editor.md +21 -2
- package/packages/server/resources/manual/07-git.md +1 -1
- package/packages/server/resources/manual/08-terminal.md +1 -1
- package/packages/server/resources/manual/12-harness-workbench.md +21 -16
- package/packages/server/resources/manual/13-settings.md +22 -6
- package/packages/server/resources/manual/14-keyboard-shortcuts.md +8 -1
- package/packages/shared/dist/constants/messageTree.d.ts +2 -0
- package/packages/shared/dist/constants/messageTree.d.ts.map +1 -1
- package/packages/shared/dist/constants/messageTree.js +6 -0
- package/packages/shared/dist/constants/messageTree.js.map +1 -1
- package/packages/shared/dist/index.d.ts +1 -1
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/accounts.d.ts +13 -0
- package/packages/shared/dist/types/accounts.d.ts.map +1 -1
- package/packages/shared/dist/types/history.d.ts +14 -1
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/message.d.ts +26 -3
- package/packages/shared/dist/types/message.d.ts.map +1 -1
- package/packages/shared/dist/types/message.js +21 -1
- package/packages/shared/dist/types/message.js.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +5 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js +3 -0
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +68 -10
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +56 -16
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/session.d.ts +6 -0
- package/packages/shared/dist/types/session.d.ts.map +1 -1
- package/packages/shared/dist/types/session.js +6 -0
- package/packages/shared/dist/types/session.js.map +1 -1
- package/packages/shared/dist/types/streaming.d.ts +32 -2
- package/packages/shared/dist/types/streaming.d.ts.map +1 -1
- package/packages/shared/dist/types/streaming.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +4 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/scripts/probe-persistent-hooks.mjs +795 -0
- package/packages/client/dist/assets/index-BHbx57gc.js +0 -2
- package/packages/client/dist/assets/index-BX7y_Qt3.css +0 -32
- 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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
-
|
|
188
|
-
|
|
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
|
-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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 (
|
|
257
|
-
result.
|
|
258
|
-
if (
|
|
259
|
-
result.
|
|
260
|
-
const
|
|
261
|
-
result.overallStatus = this.getStatus(
|
|
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;
|
|
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"}
|