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
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* accumulates its `claudeAiOauth` credential block here keyed by account email (or an
|
|
6
6
|
* `account:<hash>` fallback when the email is unavailable — AC1a). Switching writes the
|
|
7
7
|
* chosen account's credential back to the single-account `~/.claude/.credentials.json`
|
|
8
|
-
* the CLI binary reads (it has no `--profile` flag — see Dev Notes › CLI Credential Path)
|
|
8
|
+
* the CLI binary reads (it has no `--profile` flag — see Dev Notes › CLI Credential Path),
|
|
9
|
+
* AND swaps the CLI's on-disk identity cache (`oauthAccount` in `~/.claude.json`) — the CLI
|
|
10
|
+
* reports the logged-in identity from that cache, not from the credential file, so a
|
|
11
|
+
* credential-only swap leaves every identity readout on the previous login.
|
|
9
12
|
*
|
|
10
13
|
* Follows the `preferencesService` JSON-file pattern (`~/.hammoc/*.json`) and the
|
|
11
14
|
* `rateLimitProbeService` credential-read path. Token material never leaves this layer:
|
|
@@ -27,6 +30,7 @@ declare class AccountStorageService {
|
|
|
27
30
|
private getDataDir;
|
|
28
31
|
private getStorePath;
|
|
29
32
|
private getCredentialsPath;
|
|
33
|
+
private getClaudeConfigPath;
|
|
30
34
|
/** Read the store, returning an empty store when the file is absent/unreadable. */
|
|
31
35
|
private readStore;
|
|
32
36
|
/** Write the store as pretty JSON, then harden file permissions (AC13). */
|
|
@@ -80,14 +84,10 @@ declare class AccountStorageService {
|
|
|
80
84
|
account: StoredAccount;
|
|
81
85
|
} | null>;
|
|
82
86
|
/**
|
|
83
|
-
* Switch the active account (AC9, AC10, AC11, AC12).
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* Expiry (AC12) is detected by `expiresAt < Date.now()` — NO custom OAuth refresh call in
|
|
89
|
-
* Phase 1 (Dev Notes › Token Refresh). When expired, the switch still completes and
|
|
90
|
-
* `reauthRequired` is true so the client can offer the BS-7 re-login flow.
|
|
87
|
+
* Switch the active account (AC9, AC10, AC11, AC12). If the stored access token is expired
|
|
88
|
+
* but a refresh token is available, automatically obtains a fresh access token via the OAuth
|
|
89
|
+
* token endpoint before writing the credential file. Falls back to reauthRequired when the
|
|
90
|
+
* refresh itself fails (e.g., refresh token revoked).
|
|
91
91
|
*/
|
|
92
92
|
switchAccount(key: string): Promise<{
|
|
93
93
|
switched: true;
|
|
@@ -105,6 +105,52 @@ declare class AccountStorageService {
|
|
|
105
105
|
* email or no active account exists. Returns the (possibly new) active key.
|
|
106
106
|
*/
|
|
107
107
|
backfillActiveEmail(email: string): Promise<string | null>;
|
|
108
|
+
/**
|
|
109
|
+
* Re-read the credential file and update the CURRENT active account's stored entry.
|
|
110
|
+
* The CLI binary refreshes the active token continuously (accessToken + possibly rotated
|
|
111
|
+
* refreshToken), but accounts.json still holds the snapshot from original login. This
|
|
112
|
+
* method syncs the store with the live file so the stored copy is always up-to-date
|
|
113
|
+
* before the credential file is overwritten by a switch or a new login.
|
|
114
|
+
*/
|
|
115
|
+
private resnapshotActiveCredentialInStore;
|
|
116
|
+
/**
|
|
117
|
+
* Public convenience: re-snapshot the active credential AND persist immediately.
|
|
118
|
+
* Called before a login PTY overwrites the credential file with a new account.
|
|
119
|
+
*/
|
|
120
|
+
resnapshotAndSave(): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Exchange a refresh token for a fresh access token via the Claude OAuth endpoint.
|
|
123
|
+
* Returns the updated credential on success, or null on failure (caller falls back to
|
|
124
|
+
* reauthRequired). The returned credential preserves all original fields and only updates
|
|
125
|
+
* accessToken, expiresAt, and (if rotated) refreshToken — matching the CLI's own refresh logic.
|
|
126
|
+
*/
|
|
127
|
+
private refreshCredential;
|
|
128
|
+
/**
|
|
129
|
+
* Read the CLI's cached identity block, or null when absent/unreadable. This is the value the
|
|
130
|
+
* CLI reports as the logged-in account (email/organization) on every launch — it is written at
|
|
131
|
+
* login (and on profile re-fetch), NOT derived from the credential file per launch.
|
|
132
|
+
*/
|
|
133
|
+
readCliIdentity(): Promise<Record<string, unknown> | null>;
|
|
134
|
+
/**
|
|
135
|
+
* Patch ONLY the `oauthAccount` field of `~/.claude.json` (set when `identity` is given,
|
|
136
|
+
* delete when null), preserving every other field byte-for-value. Atomic write (temp +
|
|
137
|
+
* rename) so a concurrently launching CLI never reads a partial config. Best-effort:
|
|
138
|
+
* failures are logged and never block the credential switch itself. The config file is
|
|
139
|
+
* never CREATED here — a missing/corrupt file carries per-project state (trust prompts
|
|
140
|
+
* etc.) we must not fabricate, and the CLI regenerates identity on its own anyway.
|
|
141
|
+
*/
|
|
142
|
+
writeCliIdentity(identity: Record<string, unknown> | null): Promise<boolean>;
|
|
143
|
+
/** Drop the CLI identity cache (logout: no login should be reported afterwards). */
|
|
144
|
+
clearCliIdentity(): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Re-assert the ACTIVE account's identity into the CLI cache. Used as self-healing when a
|
|
147
|
+
* stale identity readout is detected (e.g. a CLI child that outlived a switch flushed its
|
|
148
|
+
* in-memory config back over our patch). Falls back to dropping the cache when the active
|
|
149
|
+
* account has no captured identity, so the CLI regenerates it from the live token.
|
|
150
|
+
*/
|
|
151
|
+
reassertActiveCliIdentity(): Promise<void>;
|
|
152
|
+
/** Whether an active credential file with a usable token exists on disk. */
|
|
153
|
+
hasActiveCredential(): Promise<boolean>;
|
|
108
154
|
/** Read & parse `~/.claude/.credentials.json` into a credential block, or null. */
|
|
109
155
|
private readActiveCredential;
|
|
110
156
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountStorageService.d.ts","sourceRoot":"","sources":["../../src/services/accountStorageService.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"accountStorageService.d.ts","sourceRoot":"","sources":["../../src/services/accountStorageService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EACd,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAUxB,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAID,cAAM,qBAAqB;IACzB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;IAI3B,mFAAmF;YACrE,SAAS;IAcvB,2EAA2E;YAC7D,UAAU;IAQxB;;;;;OAKG;YACW,qBAAqB;IAYnC,mFAAmF;IACnF,OAAO,CAAC,gBAAgB;IA+BxB,iFAAiF;IACjF,OAAO,CAAC,WAAW;IAMnB,2EAA2E;IAC3E,OAAO,CAAC,SAAS;IAajB,2EAA2E;IACrE,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAO/C,2FAA2F;IACrF,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI5C,uFAAuF;IACjF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;;;;OAKG;IACG,aAAa,CACjB,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,CAAC;IAmBnD;;;OAGG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;KAAE,CAAC;IAShG;;;;;;OAMG;IACG,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,IAAI,CAAC;IA+B5G;;;;;OAKG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CACrC;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GACnE;QAAE,QAAQ,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAC3C;IAgDD;;;;;;OAMG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBhE;;;;;;OAMG;YACW,iCAAiC;IAwB/C;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC;;;;;OAKG;YACW,iBAAiB;IA2D/B;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAchE;;;;;;;OAOG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BlF,oFAAoF;IAC9E,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;OAKG;IACG,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhD,4EAA4E;IACtE,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7C,mFAAmF;YACrE,oBAAoB;IAYlC;;;;OAIG;YACW,yBAAyB;CAgBxC;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* accumulates its `claudeAiOauth` credential block here keyed by account email (or an
|
|
6
6
|
* `account:<hash>` fallback when the email is unavailable — AC1a). Switching writes the
|
|
7
7
|
* chosen account's credential back to the single-account `~/.claude/.credentials.json`
|
|
8
|
-
* the CLI binary reads (it has no `--profile` flag — see Dev Notes › CLI Credential Path)
|
|
8
|
+
* the CLI binary reads (it has no `--profile` flag — see Dev Notes › CLI Credential Path),
|
|
9
|
+
* AND swaps the CLI's on-disk identity cache (`oauthAccount` in `~/.claude.json`) — the CLI
|
|
10
|
+
* reports the logged-in identity from that cache, not from the credential file, so a
|
|
11
|
+
* credential-only swap leaves every identity readout on the previous login.
|
|
9
12
|
*
|
|
10
13
|
* Follows the `preferencesService` JSON-file pattern (`~/.hammoc/*.json`) and the
|
|
11
14
|
* `rateLimitProbeService` credential-read path. Token material never leaves this layer:
|
|
@@ -22,6 +25,10 @@ import { createHash } from 'node:crypto';
|
|
|
22
25
|
import { spawn } from 'node:child_process';
|
|
23
26
|
import { createLogger } from '../utils/logger.js';
|
|
24
27
|
const log = createLogger('accountStorageService');
|
|
28
|
+
// Claude Code OAuth constants (extracted from the bundled SDK binary).
|
|
29
|
+
const OAUTH_TOKEN_URL = 'https://platform.claude.com/v1/oauth/token';
|
|
30
|
+
const OAUTH_CLIENT_ID = '9d1c250a-e61b-44d9-88ed-5944d1962f5e';
|
|
31
|
+
const OAUTH_REFRESH_TIMEOUT_MS = 10_000;
|
|
25
32
|
const EMPTY_STORE = { activeKey: null, accounts: {} };
|
|
26
33
|
class AccountStorageService {
|
|
27
34
|
getDataDir() {
|
|
@@ -33,6 +40,9 @@ class AccountStorageService {
|
|
|
33
40
|
getCredentialsPath() {
|
|
34
41
|
return path.join(os.homedir(), '.claude', '.credentials.json');
|
|
35
42
|
}
|
|
43
|
+
getClaudeConfigPath() {
|
|
44
|
+
return path.join(os.homedir(), '.claude.json');
|
|
45
|
+
}
|
|
36
46
|
/** Read the store, returning an empty store when the file is absent/unreadable. */
|
|
37
47
|
async readStore() {
|
|
38
48
|
try {
|
|
@@ -84,7 +94,11 @@ class AccountStorageService {
|
|
|
84
94
|
return;
|
|
85
95
|
}
|
|
86
96
|
try {
|
|
87
|
-
|
|
97
|
+
// Use the absolute path: the server's PATH may not include System32, so a bare `icacls`
|
|
98
|
+
// spawn fails with ENOENT and silently skips the hardening (observed on this host).
|
|
99
|
+
const systemRoot = process.env.SystemRoot || process.env.windir || 'C:\\Windows';
|
|
100
|
+
const icaclsPath = path.join(systemRoot, 'System32', 'icacls.exe');
|
|
101
|
+
const child = spawn(icaclsPath, [filePath, '/inheritance:r', '/grant:r', `${user}:F`], {
|
|
88
102
|
windowsHide: true,
|
|
89
103
|
});
|
|
90
104
|
child.on('error', (err) => {
|
|
@@ -189,30 +203,74 @@ class AccountStorageService {
|
|
|
189
203
|
const tier = credential.claudeAiOauth?.subscriptionType ?? null;
|
|
190
204
|
const result = await this.upsertAccount(credential, { email, tier });
|
|
191
205
|
await this.setActiveKey(result.key);
|
|
206
|
+
// The login PTY also rewrote the CLI's identity cache (`oauthAccount` in `~/.claude.json`).
|
|
207
|
+
// Capture it alongside the credential — a later switch back to this account must restore it,
|
|
208
|
+
// or the CLI keeps reporting the identity of whoever logged in last. Only attach when the
|
|
209
|
+
// cached identity provably belongs to this login (emailAddress match): the config write and
|
|
210
|
+
// the credential write are separate steps in the CLI, so an unmatched value could still be
|
|
211
|
+
// the previous account's.
|
|
212
|
+
if (email) {
|
|
213
|
+
const identity = await this.readCliIdentity();
|
|
214
|
+
if (identity && identity.emailAddress === email) {
|
|
215
|
+
const store = await this.readStore();
|
|
216
|
+
const entry = store.accounts[result.key];
|
|
217
|
+
if (entry) {
|
|
218
|
+
entry.identity = identity;
|
|
219
|
+
await this.writeStore(store);
|
|
220
|
+
result.account.identity = identity;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
192
224
|
log.info(`captured credential for account key=${result.key} (tier=${tier ?? 'unknown'})`);
|
|
193
225
|
return result;
|
|
194
226
|
}
|
|
195
227
|
/**
|
|
196
|
-
* Switch the active account (AC9, AC10, AC11, AC12).
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
* Expiry (AC12) is detected by `expiresAt < Date.now()` — NO custom OAuth refresh call in
|
|
202
|
-
* Phase 1 (Dev Notes › Token Refresh). When expired, the switch still completes and
|
|
203
|
-
* `reauthRequired` is true so the client can offer the BS-7 re-login flow.
|
|
228
|
+
* Switch the active account (AC9, AC10, AC11, AC12). If the stored access token is expired
|
|
229
|
+
* but a refresh token is available, automatically obtains a fresh access token via the OAuth
|
|
230
|
+
* token endpoint before writing the credential file. Falls back to reauthRequired when the
|
|
231
|
+
* refresh itself fails (e.g., refresh token revoked).
|
|
204
232
|
*/
|
|
205
233
|
async switchAccount(key) {
|
|
206
234
|
const store = await this.readStore();
|
|
207
235
|
const account = store.accounts[key];
|
|
208
236
|
if (!account)
|
|
209
237
|
return { switched: false, reason: 'not-found' };
|
|
238
|
+
// Before overwriting the credential file, snapshot the CURRENT active credential back into
|
|
239
|
+
// the store. The CLI binary continuously refreshes the active token (new accessToken +
|
|
240
|
+
// potentially rotated refreshToken), but accounts.json still holds the copy from the
|
|
241
|
+
// original login. Without this, switching away from A and then back writes the stale original
|
|
242
|
+
// token — whose refreshToken may have been rotated and revoked.
|
|
243
|
+
await this.resnapshotActiveCredentialInStore(store);
|
|
244
|
+
const expiresAt = account.credential.claudeAiOauth?.expiresAt;
|
|
245
|
+
const expired = typeof expiresAt === 'number' && expiresAt < Date.now();
|
|
246
|
+
let reauthRequired = false;
|
|
247
|
+
if (expired) {
|
|
248
|
+
const refreshed = await this.refreshCredential(account.credential);
|
|
249
|
+
if (refreshed) {
|
|
250
|
+
account.credential = refreshed;
|
|
251
|
+
account.tier = refreshed.claudeAiOauth?.subscriptionType ?? account.tier;
|
|
252
|
+
log.info(`refreshed expired token for account key=${key}`);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
reauthRequired = true;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
210
258
|
await this.writeCredentialFileAtomic(account.credential);
|
|
259
|
+
// Swap the CLI's identity cache together with the credential. The CLI reports "who is
|
|
260
|
+
// logged in" from `oauthAccount` in `~/.claude.json` (verified: a fresh bootstrap after a
|
|
261
|
+
// credential-only swap still returns the previous login), so leaving it behind makes every
|
|
262
|
+
// subsequent identity readout — settings card refresh, session-context email — show the old
|
|
263
|
+
// account. With no captured identity, drop the field: the CLI re-fetches the profile from
|
|
264
|
+
// the API on its next launch and rewrites the cache for the live token (verified).
|
|
265
|
+
if (account.identity) {
|
|
266
|
+
await this.writeCliIdentity(account.identity);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
await this.writeCliIdentity(null);
|
|
270
|
+
}
|
|
211
271
|
account.lastUsedAt = Date.now();
|
|
212
272
|
store.activeKey = key;
|
|
213
273
|
await this.writeStore(store);
|
|
214
|
-
const expiresAt = account.credential.claudeAiOauth?.expiresAt;
|
|
215
|
-
const reauthRequired = typeof expiresAt === 'number' && expiresAt < Date.now();
|
|
216
274
|
return { switched: true, reauthRequired, account };
|
|
217
275
|
}
|
|
218
276
|
/**
|
|
@@ -243,6 +301,180 @@ class AccountStorageService {
|
|
|
243
301
|
log.info(`back-filled email for account: ${oldKey} → ${email}`);
|
|
244
302
|
return store.activeKey;
|
|
245
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Re-read the credential file and update the CURRENT active account's stored entry.
|
|
306
|
+
* The CLI binary refreshes the active token continuously (accessToken + possibly rotated
|
|
307
|
+
* refreshToken), but accounts.json still holds the snapshot from original login. This
|
|
308
|
+
* method syncs the store with the live file so the stored copy is always up-to-date
|
|
309
|
+
* before the credential file is overwritten by a switch or a new login.
|
|
310
|
+
*/
|
|
311
|
+
async resnapshotActiveCredentialInStore(store) {
|
|
312
|
+
const currentKey = store.activeKey;
|
|
313
|
+
if (!currentKey)
|
|
314
|
+
return;
|
|
315
|
+
const currentAccount = store.accounts[currentKey];
|
|
316
|
+
if (!currentAccount)
|
|
317
|
+
return;
|
|
318
|
+
const live = await this.readActiveCredential();
|
|
319
|
+
if (!live)
|
|
320
|
+
return;
|
|
321
|
+
currentAccount.credential = live;
|
|
322
|
+
const tier = live.claudeAiOauth?.subscriptionType;
|
|
323
|
+
if (tier)
|
|
324
|
+
currentAccount.tier = tier;
|
|
325
|
+
// Also re-snapshot the CLI identity cache when it belongs to this account. This is how
|
|
326
|
+
// legacy entries (captured before the identity field existed) converge: once the CLI has
|
|
327
|
+
// regenerated `oauthAccount` for this account, switching away stores it, and every later
|
|
328
|
+
// switch back can restore it directly instead of relying on regeneration.
|
|
329
|
+
const identity = await this.readCliIdentity();
|
|
330
|
+
if (identity && currentAccount.email && identity.emailAddress === currentAccount.email) {
|
|
331
|
+
currentAccount.identity = identity;
|
|
332
|
+
}
|
|
333
|
+
// No writeStore here — the caller (switchAccount) writes after updating the target too.
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Public convenience: re-snapshot the active credential AND persist immediately.
|
|
337
|
+
* Called before a login PTY overwrites the credential file with a new account.
|
|
338
|
+
*/
|
|
339
|
+
async resnapshotAndSave() {
|
|
340
|
+
const store = await this.readStore();
|
|
341
|
+
await this.resnapshotActiveCredentialInStore(store);
|
|
342
|
+
await this.writeStore(store);
|
|
343
|
+
}
|
|
344
|
+
// ── OAuth token refresh ──
|
|
345
|
+
/**
|
|
346
|
+
* Exchange a refresh token for a fresh access token via the Claude OAuth endpoint.
|
|
347
|
+
* Returns the updated credential on success, or null on failure (caller falls back to
|
|
348
|
+
* reauthRequired). The returned credential preserves all original fields and only updates
|
|
349
|
+
* accessToken, expiresAt, and (if rotated) refreshToken — matching the CLI's own refresh logic.
|
|
350
|
+
*/
|
|
351
|
+
async refreshCredential(credential) {
|
|
352
|
+
const oauth = credential.claudeAiOauth;
|
|
353
|
+
const refreshToken = oauth?.refreshToken;
|
|
354
|
+
if (!refreshToken) {
|
|
355
|
+
log.warn('refreshCredential: no refresh_token available');
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
try {
|
|
359
|
+
const res = await fetch(OAUTH_TOKEN_URL, {
|
|
360
|
+
method: 'POST',
|
|
361
|
+
headers: {
|
|
362
|
+
'Content-Type': 'application/json',
|
|
363
|
+
'anthropic-beta': 'oauth-2025-04-20',
|
|
364
|
+
},
|
|
365
|
+
body: JSON.stringify({
|
|
366
|
+
grant_type: 'refresh_token',
|
|
367
|
+
refresh_token: refreshToken,
|
|
368
|
+
client_id: OAUTH_CLIENT_ID,
|
|
369
|
+
}),
|
|
370
|
+
signal: AbortSignal.timeout(OAUTH_REFRESH_TIMEOUT_MS),
|
|
371
|
+
});
|
|
372
|
+
if (!res.ok) {
|
|
373
|
+
const body = await res.text().catch(() => '');
|
|
374
|
+
log.warn(`refreshCredential: token endpoint returned ${res.status}: ${body.slice(0, 200)}`);
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
const data = await res.json();
|
|
378
|
+
if (!data.access_token) {
|
|
379
|
+
log.warn('refreshCredential: response missing access_token');
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
const expiresAt = typeof data.expires_in === 'number'
|
|
383
|
+
? Date.now() + data.expires_in * 1000
|
|
384
|
+
: undefined;
|
|
385
|
+
return {
|
|
386
|
+
claudeAiOauth: {
|
|
387
|
+
...oauth,
|
|
388
|
+
accessToken: data.access_token,
|
|
389
|
+
refreshToken: data.refresh_token || refreshToken,
|
|
390
|
+
...(expiresAt !== undefined ? { expiresAt } : {}),
|
|
391
|
+
},
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
catch (err) {
|
|
395
|
+
log.warn(`refreshCredential: ${err instanceof Error ? err.message : String(err)}`);
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// ── CLI identity cache I/O (`oauthAccount` in `~/.claude.json`) ──
|
|
400
|
+
/**
|
|
401
|
+
* Read the CLI's cached identity block, or null when absent/unreadable. This is the value the
|
|
402
|
+
* CLI reports as the logged-in account (email/organization) on every launch — it is written at
|
|
403
|
+
* login (and on profile re-fetch), NOT derived from the credential file per launch.
|
|
404
|
+
*/
|
|
405
|
+
async readCliIdentity() {
|
|
406
|
+
try {
|
|
407
|
+
const raw = await fs.readFile(this.getClaudeConfigPath(), 'utf-8');
|
|
408
|
+
const config = JSON.parse(raw);
|
|
409
|
+
const identity = config.oauthAccount;
|
|
410
|
+
if (identity && typeof identity === 'object' && !Array.isArray(identity)) {
|
|
411
|
+
return identity;
|
|
412
|
+
}
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Patch ONLY the `oauthAccount` field of `~/.claude.json` (set when `identity` is given,
|
|
421
|
+
* delete when null), preserving every other field byte-for-value. Atomic write (temp +
|
|
422
|
+
* rename) so a concurrently launching CLI never reads a partial config. Best-effort:
|
|
423
|
+
* failures are logged and never block the credential switch itself. The config file is
|
|
424
|
+
* never CREATED here — a missing/corrupt file carries per-project state (trust prompts
|
|
425
|
+
* etc.) we must not fabricate, and the CLI regenerates identity on its own anyway.
|
|
426
|
+
*/
|
|
427
|
+
async writeCliIdentity(identity) {
|
|
428
|
+
const configPath = this.getClaudeConfigPath();
|
|
429
|
+
try {
|
|
430
|
+
const raw = await fs.readFile(configPath, 'utf-8');
|
|
431
|
+
const config = JSON.parse(raw);
|
|
432
|
+
if (identity) {
|
|
433
|
+
config.oauthAccount = identity;
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
delete config.oauthAccount;
|
|
437
|
+
}
|
|
438
|
+
const tmp = `${configPath}.tmp-${process.pid}`;
|
|
439
|
+
await fs.writeFile(tmp, JSON.stringify(config, null, 2), 'utf-8');
|
|
440
|
+
try {
|
|
441
|
+
await fs.rename(tmp, configPath);
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
await fs.rm(tmp, { force: true }).catch(() => { });
|
|
445
|
+
throw err;
|
|
446
|
+
}
|
|
447
|
+
log.info(identity
|
|
448
|
+
? `CLI identity cache set to ${String(identity.emailAddress ?? '(no email)')}`
|
|
449
|
+
: 'CLI identity cache dropped (CLI will re-derive from the live token)');
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
log.warn(`writeCliIdentity failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
/** Drop the CLI identity cache (logout: no login should be reported afterwards). */
|
|
458
|
+
async clearCliIdentity() {
|
|
459
|
+
await this.writeCliIdentity(null);
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Re-assert the ACTIVE account's identity into the CLI cache. Used as self-healing when a
|
|
463
|
+
* stale identity readout is detected (e.g. a CLI child that outlived a switch flushed its
|
|
464
|
+
* in-memory config back over our patch). Falls back to dropping the cache when the active
|
|
465
|
+
* account has no captured identity, so the CLI regenerates it from the live token.
|
|
466
|
+
*/
|
|
467
|
+
async reassertActiveCliIdentity() {
|
|
468
|
+
const store = await this.readStore();
|
|
469
|
+
const active = store.activeKey ? store.accounts[store.activeKey] : null;
|
|
470
|
+
if (!active)
|
|
471
|
+
return;
|
|
472
|
+
await this.writeCliIdentity(active.identity ?? null);
|
|
473
|
+
}
|
|
474
|
+
/** Whether an active credential file with a usable token exists on disk. */
|
|
475
|
+
async hasActiveCredential() {
|
|
476
|
+
return (await this.readActiveCredential()) !== null;
|
|
477
|
+
}
|
|
246
478
|
// ── Credential file I/O ──
|
|
247
479
|
/** Read & parse `~/.claude/.credentials.json` into a credential block, or null. */
|
|
248
480
|
async readActiveCredential() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountStorageService.js","sourceRoot":"","sources":["../../src/services/accountStorageService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accountStorageService.js","sourceRoot":"","sources":["../../src/services/accountStorageService.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,14 @@ import type { BackgroundTaskTracker } from '../utils/backgroundTaskTracker.js';
|
|
|
12
12
|
*
|
|
13
13
|
* This interface intentionally contains only the members the two call sites actually
|
|
14
14
|
* invoke on the engine instance (verified by grep, see Story 32.2 "외부 표면
|
|
15
|
-
* enumeration").
|
|
16
|
-
* `ChatOptions.abortController` (an engine-independent signal)
|
|
17
|
-
*
|
|
15
|
+
* enumeration"). A hard *abort* (kill the whole turn/process) flows through
|
|
16
|
+
* `ChatOptions.abortController` (an engine-independent signal) — the CLI engine wires
|
|
17
|
+
* it to a PTY Ctrl+C. Story 38.3 adds an OPTIONAL, engine-specific `interrupt()`
|
|
18
|
+
* (stop only the current turn's generation, keep the persistent session alive) and
|
|
19
|
+
* `close()` (explicit session teardown). These are OPTIONAL: only the SDK engine — whose
|
|
20
|
+
* persistent stream (Epic 38) keeps a control channel open across the result — exposes
|
|
21
|
+
* them; the CLI engine cancels via the abortController signal instead, so it does not
|
|
22
|
+
* implement them and callers must feature-detect (`engine.interrupt?.()`).
|
|
18
23
|
*
|
|
19
24
|
* It lives server-side (not in `@hammoc/shared`) because `canUseTool` is typed with
|
|
20
25
|
* the SDK's `CanUseTool`; shared must stay SDK-independent. The server already
|
|
@@ -26,6 +31,16 @@ import type { BackgroundTaskTracker } from '../utils/backgroundTaskTracker.js';
|
|
|
26
31
|
export interface ChatEngine {
|
|
27
32
|
/** Warning message from a non-fatal rewind failure; read by the caller after a send. */
|
|
28
33
|
rewindWarning: string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Whether the LAST turn ended via tracker-hold grace EXPIRY (SDK engine's
|
|
36
|
+
* dual-gate turn boundary, 2026-07-12). The expiry path abandons a parked read
|
|
37
|
+
* on the engine's shared session iterator — a resident engine kept alive past
|
|
38
|
+
* that would deliver the NEXT turn's first message to the dead read (message
|
|
39
|
+
* theft) and could run a late follow-up invisibly. The residency
|
|
40
|
+
* reconciliation reads this after a send and evicts the engine when set.
|
|
41
|
+
* Optional: the CLI engine never sets it (no shared-iterator turns).
|
|
42
|
+
*/
|
|
43
|
+
lastTurnTrackerHoldExpired?: boolean;
|
|
29
44
|
/**
|
|
30
45
|
* Send a message and stream events back through the provided callbacks.
|
|
31
46
|
* Cancellation is delivered via `options.abortController`.
|
|
@@ -61,10 +76,51 @@ export interface ChatEngine {
|
|
|
61
76
|
backgroundTracker?: BackgroundTaskTracker,
|
|
62
77
|
/** Notification when CLI engine syncs permission mode (EnterPlanMode in sync mode). */
|
|
63
78
|
onPermissionModeSync?: (mode: PermissionMode) => void): Promise<ChatResponse>;
|
|
79
|
+
/**
|
|
80
|
+
* Story 38.3 — turn-only interrupt: stop the CURRENT turn's generation but keep
|
|
81
|
+
* the persistent session/generator alive (a subsequent send resumes on the same
|
|
82
|
+
* stream). SDK engine only; the CLI engine omits this and cancels via the
|
|
83
|
+
* abortController signal, so callers MUST feature-detect (`engine.interrupt?.()`).
|
|
84
|
+
* The interrupted turn ends with an error result rather than a thrown abort.
|
|
85
|
+
*/
|
|
86
|
+
interrupt?(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Story 38.3 — explicit session teardown (the "abort" verb): end the prompt queue
|
|
89
|
+
* and close the persistent query. SDK engine only; idempotent. The CLI engine omits
|
|
90
|
+
* this (its teardown runs off the abortController signal). Higher-level session
|
|
91
|
+
* lifecycle (idle residency, resume/fork) is Story 38.5.
|
|
92
|
+
*/
|
|
93
|
+
close?(): Promise<void>;
|
|
64
94
|
/** Update the permission mode mid-conversation (propagates to the live query). */
|
|
65
95
|
setPermissionMode(mode: PermissionMode): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Story 38.4 — runtime model switch: change the model used for subsequent
|
|
98
|
+
* responses on the LIVE persistent query, without recreating it (no ~3s
|
|
99
|
+
* process restart). OPTIONAL, same pattern as `interrupt?()`/`close?()`: only
|
|
100
|
+
* the SDK engine — whose persistent stream keeps the control channel open —
|
|
101
|
+
* implements it (probe-confirmed GO: the next turn answers with the new
|
|
102
|
+
* model). The CLI engine omits it (model changes ride the next spawn payload),
|
|
103
|
+
* so callers MUST feature-detect (`engine.setModel?.()`). No-op before the
|
|
104
|
+
* first send (the model is then picked up from the creation options instead).
|
|
105
|
+
*/
|
|
106
|
+
setModel?(model: string | undefined): Promise<void>;
|
|
66
107
|
/** Read the current permission mode (used by permission-gating call-site logic). */
|
|
67
108
|
getPermissionMode(): PermissionMode;
|
|
109
|
+
/**
|
|
110
|
+
* Story 38.5 (Task 2) — opt this engine into cross-turn process residency. When
|
|
111
|
+
* set, the engine does NOT tear its persistent stream down at turn end; the
|
|
112
|
+
* residency registry owns its lifecycle (idle timeout / LRU eviction / crash
|
|
113
|
+
* cleanup). OPTIONAL, SDK-engine-only (same feature-detect pattern as
|
|
114
|
+
* `interrupt?()`/`close?()`/`setModel?()`); the CLI engine omits it.
|
|
115
|
+
*/
|
|
116
|
+
setResident?(resident: boolean): void;
|
|
117
|
+
/**
|
|
118
|
+
* Story 38.5 (Task 2) — whether a persistent query is currently live. The
|
|
119
|
+
* residency registry reads this to detect an engine that was torn down out of
|
|
120
|
+
* band (crash / external close) so it can evict the dead entry and let the next
|
|
121
|
+
* send resume from JSONL. OPTIONAL, SDK-engine-only.
|
|
122
|
+
*/
|
|
123
|
+
isLive?(): boolean;
|
|
68
124
|
/**
|
|
69
125
|
* Standalone file rewind (no message send): rewind project files to the
|
|
70
126
|
* checkpoint at `messageUuid` for `sessionId`. `dryRun` previews without writing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatEngine.d.ts","sourceRoot":"","sources":["../../src/services/chatEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E
|
|
1
|
+
{"version":3,"file":"chatEngine.d.ts","sourceRoot":"","sources":["../../src/services/chatEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,UAAU;IACzB,wFAAwF;IACxF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;;;;;OAQG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;OASG;IACH,wBAAwB,CACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,UAAU,EACvB,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EAC5C,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;IACzG;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI;IACxE;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IACvC,qGAAqG;IACrG,qBAAqB,CAAC,EAAE,MAAM;IAC9B,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,qBAAqB;IACzC,uFAAuF;IACvF,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACpD,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,kFAAkF;IAClF,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;;;;OASG;IACH,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,oFAAoF;IACpF,iBAAiB,IAAI,cAAc,CAAC;IAEpC;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/G"}
|