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,8 @@ import { StreamHandler } from './streamHandler.js';
|
|
|
7
7
|
import { SessionService } from './sessionService.js';
|
|
8
8
|
import { rewindSessionFiles } from './fileRewind.js';
|
|
9
9
|
import { buildSystemPrompt, resolveTemplateVariables } from './workspaceContext.js';
|
|
10
|
+
import { PromptQueue } from './promptQueue.js';
|
|
11
|
+
import { HookEventBridge } from '../handlers/hookBridge.js';
|
|
10
12
|
import { createLogger } from '../utils/logger.js';
|
|
11
13
|
const log = createLogger('chatService');
|
|
12
14
|
// Intentionally duplicated in streamHandler.ts for file independence
|
|
@@ -27,9 +29,43 @@ export class ChatService {
|
|
|
27
29
|
disallowedTools;
|
|
28
30
|
/** Auto-compaction master switch (both engines). Mirrors the autoCompactEnabled preference; default true. */
|
|
29
31
|
autoCompactEnabled;
|
|
32
|
+
/**
|
|
33
|
+
* The persistent SDK query. Epic 38: created ONCE (lazily on the first send)
|
|
34
|
+
* and kept alive for the session — NOT recreated per turn — so the control
|
|
35
|
+
* channel stays open for post-result hooks. `null` before the first send and
|
|
36
|
+
* after `close()`; `interrupt()`/`setPermissionMode()` reach it between turns.
|
|
37
|
+
*/
|
|
30
38
|
currentQuery = null;
|
|
39
|
+
/** Single iterator over the persistent query — each turn consumes one slice of it. */
|
|
40
|
+
sessionIterator = null;
|
|
41
|
+
/** Manually-driven prompt input; each turn pushes its user message here. */
|
|
42
|
+
promptQueue = null;
|
|
43
|
+
/** SDK hook → internal-event bridge (observe-only in 38.1; 38.2 consumes the ledger). */
|
|
44
|
+
hookBridge = null;
|
|
45
|
+
/**
|
|
46
|
+
* Story 38.5 (Task 2) — process-residency flag. When `true`, the callback path
|
|
47
|
+
* does NOT close the persistent stream at turn end: the engine is retained across
|
|
48
|
+
* turns and its lifecycle (idle timeout / LRU eviction / crash cleanup) is owned
|
|
49
|
+
* by the higher-level residency registry, not by the turn. Default `false` keeps
|
|
50
|
+
* the Story 38.1 behavior (one turn per instance, close at turn end) for any
|
|
51
|
+
* caller that has not opted into residency. SDK-engine-only concept.
|
|
52
|
+
*/
|
|
53
|
+
resident = false;
|
|
54
|
+
/**
|
|
55
|
+
* The CURRENT turn's permission callback. The SDK's `canUseTool` is a query-
|
|
56
|
+
* CREATION option (fixed for the persistent query's lifetime), but each turn's
|
|
57
|
+
* handler is bound to that turn's live stream (its event buffer, pending-
|
|
58
|
+
* permission map, sockets). A resident engine is reused across turns, so the
|
|
59
|
+
* query registers a stable delegator that reads this field — refreshed on every
|
|
60
|
+
* send — instead of capturing the first turn's handler. Without this, an
|
|
61
|
+
* AskUserQuestion/permission prompt on a reuse turn lands on the dead
|
|
62
|
+
* creation-turn stream: invisible after refresh and unanswerable.
|
|
63
|
+
*/
|
|
64
|
+
activeCanUseTool;
|
|
31
65
|
/** Warning message from rewindFiles failure (non-fatal, streaming continues) */
|
|
32
66
|
rewindWarning = null;
|
|
67
|
+
/** Last turn ended via tracker-hold grace expiry → residency must evict (see ChatEngine docs). */
|
|
68
|
+
lastTurnTrackerHoldExpired = false;
|
|
33
69
|
constructor(config = {}) {
|
|
34
70
|
this.workingDirectory = config.workingDirectory;
|
|
35
71
|
this.permissionMode = config.permissionMode ?? 'default';
|
|
@@ -79,9 +115,85 @@ export class ChatService {
|
|
|
79
115
|
return this.workingDirectory;
|
|
80
116
|
}
|
|
81
117
|
/**
|
|
82
|
-
* Send a message and receive responses through an async generator
|
|
118
|
+
* Send a message and receive responses through an async generator.
|
|
119
|
+
*
|
|
120
|
+
* Epic 38 (Story 38.1): the underlying `query()` is a PERSISTENT stream —
|
|
121
|
+
* created lazily on the first send and reused for every subsequent turn (no
|
|
122
|
+
* per-turn process re-spawn, control channel stays open for post-result hooks).
|
|
123
|
+
* Each call pushes its user message onto the shared prompt queue and consumes
|
|
124
|
+
* the stream up to THIS turn's `result`, WITHOUT draining the generator: the
|
|
125
|
+
* stream never ends on its own (the prompt queue keeps it open), so the turn
|
|
126
|
+
* boundary is the `result` message and the consumer (processStream) decides
|
|
127
|
+
* when to stop. Teardown is `close()`, not turn end.
|
|
128
|
+
*
|
|
129
|
+
* In production the callback path (`sendMessageWithCallbacks`) still closes the
|
|
130
|
+
* stream at turn end (one turn per engine instance today — websocket recreates
|
|
131
|
+
* the engine per send), so behavior is unchanged. The multi-turn capability is
|
|
132
|
+
* exercised by calling this generator repeatedly on one instance; cross-turn
|
|
133
|
+
* process residency wiring is Story 38.5.
|
|
83
134
|
*/
|
|
84
135
|
async *sendMessage(content, options = {}, canUseTool) {
|
|
136
|
+
// Re-point the persistent query's permission delegator at THIS turn's handler
|
|
137
|
+
// (see activeCanUseTool — a resident engine reuses one query across turns).
|
|
138
|
+
this.activeCanUseTool = canUseTool;
|
|
139
|
+
// Whether this request runs at 1M — drives the contextWindow meter correction
|
|
140
|
+
// at the result. (Query options are fixed at stream creation; per-turn model
|
|
141
|
+
// changes are Story 38.5.)
|
|
142
|
+
const is1M = effectiveModelIs1M(options.model);
|
|
143
|
+
// Lazily create the persistent query on the first send of the session.
|
|
144
|
+
if (!this.currentQuery) {
|
|
145
|
+
await this.createPersistentQuery(options, canUseTool);
|
|
146
|
+
// Story 25.7: rewind files to the checkpoint before streaming. Only
|
|
147
|
+
// meaningful at stream creation (it configures the resumed session).
|
|
148
|
+
this.rewindWarning = null;
|
|
149
|
+
if (options.rewindToMessageUuid) {
|
|
150
|
+
await this.applyInlineRewind(options.rewindToMessageUuid);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Align the Stop-hook completion cursor before this turn generates anything:
|
|
154
|
+
// an unconsumed main Stop left by a previous turn's ERROR result (which ends
|
|
155
|
+
// its turn without consuming) must not be readable as THIS turn's snapshot.
|
|
156
|
+
this.hookBridge?.discardStaleMainStops();
|
|
157
|
+
// Push this turn's user message onto the persistent input queue — plain text,
|
|
158
|
+
// or text + inline base64 image blocks (Story 5.5), same SDKUserMessage shape.
|
|
159
|
+
this.promptQueue.push(buildUserMessage(content, options.images));
|
|
160
|
+
let finalResponse = {
|
|
161
|
+
id: '',
|
|
162
|
+
sessionId: '',
|
|
163
|
+
content: '',
|
|
164
|
+
done: false,
|
|
165
|
+
isError: false,
|
|
166
|
+
};
|
|
167
|
+
try {
|
|
168
|
+
// Consume the shared session iterator. It does NOT end at a `result` (the
|
|
169
|
+
// prompt queue holds the stream open), so we must not drain it — the
|
|
170
|
+
// consumer stops pumping at the turn-ending result. A `done` step only
|
|
171
|
+
// happens when close() ends the session.
|
|
172
|
+
for (;;) {
|
|
173
|
+
const step = await this.sessionIterator.next();
|
|
174
|
+
if (step.done)
|
|
175
|
+
break;
|
|
176
|
+
const message = step.value;
|
|
177
|
+
yield message;
|
|
178
|
+
// Process result message
|
|
179
|
+
if (message.type === 'result') {
|
|
180
|
+
finalResponse = buildFinalResponse(message, is1M);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
throw parseSDKError(error);
|
|
186
|
+
}
|
|
187
|
+
// NOTE: no `finally { this.currentQuery = null }` here — the query is
|
|
188
|
+
// persistent (Epic 38). It is torn down in close(); the callback path closes
|
|
189
|
+
// it at turn end, and Story 38.5 owns cross-turn residency.
|
|
190
|
+
return finalResponse;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Build the queryOptions and create the persistent `query()` with the manually
|
|
194
|
+
* driven prompt queue + SDK hooks. Called once per session (first send).
|
|
195
|
+
*/
|
|
196
|
+
async createPersistentQuery(options, canUseTool) {
|
|
85
197
|
const resolvedAllowed = options.allowedTools ?? this.allowedTools;
|
|
86
198
|
const resolvedDisallowed = options.disallowedTools ?? this.disallowedTools;
|
|
87
199
|
const systemPrompt = (() => {
|
|
@@ -95,9 +207,17 @@ export class ChatService {
|
|
|
95
207
|
append,
|
|
96
208
|
};
|
|
97
209
|
})();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
210
|
+
this.promptQueue = new PromptQueue();
|
|
211
|
+
this.hookBridge = new HookEventBridge();
|
|
212
|
+
// Permission prompts must reach the CURRENT turn's handler, not the one
|
|
213
|
+
// captured at query creation: a resident engine reuses this query across
|
|
214
|
+
// turns while each turn's handler is bound to its own live stream.
|
|
215
|
+
// sendMessage refreshes activeCanUseTool every turn; this stable delegator
|
|
216
|
+
// routes through it. Registered only when the creation turn provided a
|
|
217
|
+
// handler (no handler → key removed below → SDK default behavior, unchanged).
|
|
218
|
+
const delegatingCanUseTool = canUseTool
|
|
219
|
+
? (toolName, input, opts) => (this.activeCanUseTool ?? canUseTool)(toolName, input, opts)
|
|
220
|
+
: undefined;
|
|
101
221
|
const queryOptions = {
|
|
102
222
|
cwd: this.workingDirectory,
|
|
103
223
|
permissionMode: this.permissionMode,
|
|
@@ -130,7 +250,11 @@ export class ChatService {
|
|
|
130
250
|
resumeSessionAt: options.resumeSessionAt,
|
|
131
251
|
forkSession: options.forkSession,
|
|
132
252
|
enableFileCheckpointing: options.enableFileCheckpointing,
|
|
133
|
-
|
|
253
|
+
// Epic 38: register first-class SDK hooks over the persistent control
|
|
254
|
+
// channel. Observe-only in 38.1 — the bridge records to an in-memory ledger
|
|
255
|
+
// + logs; the completion verdict (Stop background_tasks[]) is Story 38.2.
|
|
256
|
+
hooks: this.hookBridge.buildHooks(),
|
|
257
|
+
canUseTool: delegatingCanUseTool,
|
|
134
258
|
// Capture CLI stderr for debugging process exit errors
|
|
135
259
|
stderr: (data) => {
|
|
136
260
|
log.error(`CLI stderr: ${data.trimEnd()}`);
|
|
@@ -163,93 +287,102 @@ export class ChatService {
|
|
|
163
287
|
log.warn(`cleanRewindDirty failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
164
288
|
}
|
|
165
289
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
this.currentQuery = query({
|
|
176
|
-
prompt: content,
|
|
177
|
-
options: queryOptions,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
// Story 25.7: rewind files to the specified user message checkpoint before streaming
|
|
181
|
-
this.rewindWarning = null;
|
|
182
|
-
if (options.rewindToMessageUuid && !this.currentQuery) {
|
|
290
|
+
this.currentQuery = query({
|
|
291
|
+
prompt: this.promptQueue,
|
|
292
|
+
options: queryOptions,
|
|
293
|
+
});
|
|
294
|
+
this.sessionIterator = this.currentQuery[Symbol.asyncIterator]();
|
|
295
|
+
}
|
|
296
|
+
/** Inline rewind-before-send (Story 25.7): rewind project files to `messageUuid`. */
|
|
297
|
+
async applyInlineRewind(messageUuid) {
|
|
298
|
+
if (!this.currentQuery) {
|
|
183
299
|
log.error('rewindFiles requested but currentQuery is null');
|
|
184
300
|
this.rewindWarning = 'File rewind failed: query not initialized';
|
|
301
|
+
return;
|
|
185
302
|
}
|
|
186
|
-
else if (options.rewindToMessageUuid && this.currentQuery) {
|
|
187
|
-
try {
|
|
188
|
-
const rewindResult = await this.currentQuery.rewindFiles(options.rewindToMessageUuid);
|
|
189
|
-
log.info(`rewindFiles result: canRewind=${rewindResult.canRewind}, filesChanged=${rewindResult.filesChanged?.length ?? 0}, insertions=${rewindResult.insertions ?? 0}, deletions=${rewindResult.deletions ?? 0}`);
|
|
190
|
-
if (!rewindResult.canRewind) {
|
|
191
|
-
const reason = rewindResult.error ?? 'unknown reason';
|
|
192
|
-
log.warn(`rewindFiles failed: ${reason}`);
|
|
193
|
-
this.rewindWarning = `File rewind failed: ${reason}`;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch (err) {
|
|
197
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
198
|
-
log.error(`rewindFiles threw: ${msg}`);
|
|
199
|
-
this.rewindWarning = `File rewind error: ${msg}`;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
let finalResponse = {
|
|
203
|
-
id: '',
|
|
204
|
-
sessionId: '',
|
|
205
|
-
content: '',
|
|
206
|
-
done: false,
|
|
207
|
-
isError: false,
|
|
208
|
-
};
|
|
209
303
|
try {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
id: msg.uuid,
|
|
217
|
-
sessionId: msg.session_id,
|
|
218
|
-
content: msg.subtype === 'success' ? msg.result : '',
|
|
219
|
-
done: true,
|
|
220
|
-
isError: msg.is_error,
|
|
221
|
-
usage: {
|
|
222
|
-
inputTokens: msg.usage.input_tokens,
|
|
223
|
-
outputTokens: msg.usage.output_tokens,
|
|
224
|
-
cacheReadInputTokens: msg.usage.cache_read_input_tokens ?? 0,
|
|
225
|
-
cacheCreationInputTokens: msg.usage.cache_creation_input_tokens ?? 0,
|
|
226
|
-
totalCostUSD: msg.total_cost_usd,
|
|
227
|
-
contextWindow: correctContextWindow(extractContextWindow(msg.modelUsage), is1M),
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
}
|
|
304
|
+
const rewindResult = await this.currentQuery.rewindFiles(messageUuid);
|
|
305
|
+
log.info(`rewindFiles result: canRewind=${rewindResult.canRewind}, filesChanged=${rewindResult.filesChanged?.length ?? 0}, insertions=${rewindResult.insertions ?? 0}, deletions=${rewindResult.deletions ?? 0}`);
|
|
306
|
+
if (!rewindResult.canRewind) {
|
|
307
|
+
const reason = rewindResult.error ?? 'unknown reason';
|
|
308
|
+
log.warn(`rewindFiles failed: ${reason}`);
|
|
309
|
+
this.rewindWarning = `File rewind failed: ${reason}`;
|
|
231
310
|
}
|
|
232
311
|
}
|
|
233
|
-
catch (
|
|
234
|
-
|
|
312
|
+
catch (err) {
|
|
313
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
314
|
+
log.error(`rewindFiles threw: ${msg}`);
|
|
315
|
+
this.rewindWarning = `File rewind error: ${msg}`;
|
|
235
316
|
}
|
|
236
|
-
|
|
237
|
-
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Tear down the persistent stream (session end / abort). Ends the prompt queue
|
|
320
|
+
* so a parked `next()` unblocks, closes the query, and clears references.
|
|
321
|
+
* Idempotent. Story 38.3/38.5 own the higher-level abort/lifecycle wiring.
|
|
322
|
+
*/
|
|
323
|
+
async close() {
|
|
324
|
+
const q = this.currentQuery;
|
|
325
|
+
this.promptQueue?.close();
|
|
326
|
+
this.currentQuery = null;
|
|
327
|
+
this.sessionIterator = null;
|
|
328
|
+
this.promptQueue = null;
|
|
329
|
+
this.hookBridge = null;
|
|
330
|
+
if (q && typeof q.close === 'function') {
|
|
331
|
+
try {
|
|
332
|
+
q.close();
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
log.warn(`query close failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
336
|
+
}
|
|
238
337
|
}
|
|
239
|
-
|
|
338
|
+
}
|
|
339
|
+
/** The hook→event bridge for the active persistent query (Story 38.2 consumes its ledger). */
|
|
340
|
+
getHookBridge() {
|
|
341
|
+
return this.hookBridge;
|
|
240
342
|
}
|
|
241
343
|
/**
|
|
242
|
-
*
|
|
344
|
+
* Story 38.5 (Task 2) — opt this engine into cross-turn residency. Set by the
|
|
345
|
+
* residency registry when it takes ownership of the engine's lifecycle: while
|
|
346
|
+
* resident, the callback path skips the turn-end `close()` so the persistent
|
|
347
|
+
* query survives into the next turn (no ~3s re-spawn — probe-confirmed). The
|
|
348
|
+
* registry then closes it on idle timeout / LRU eviction / crash. Idempotent.
|
|
349
|
+
*/
|
|
350
|
+
setResident(resident) {
|
|
351
|
+
this.resident = resident;
|
|
352
|
+
}
|
|
353
|
+
/** Whether a persistent query is currently live (used by the registry to detect a torn-down engine). */
|
|
354
|
+
isLive() {
|
|
355
|
+
return this.currentQuery !== null;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Send a message and collect the final response (non-streaming).
|
|
359
|
+
*
|
|
360
|
+
* Story 38.5 (Task 6d) — latent-hang guard. The persistent `sendMessage`
|
|
361
|
+
* generator does NOT return after a turn's `result`: it loops back to a parked
|
|
362
|
+
* `sessionIterator.next()` awaiting the NEXT prompt (or `close()`), so a naive
|
|
363
|
+
* "pull until done" would block forever the moment the first result is yielded —
|
|
364
|
+
* a latent infinite wait that only the streaming/callback path (which stops
|
|
365
|
+
* pulling at the result) avoided. This helper therefore STOPS consuming at this
|
|
366
|
+
* turn's result and builds the response from it. It handles one turn (the first
|
|
367
|
+
* result); background-task follow-ups are the streaming path's concern, not this
|
|
368
|
+
* sync helper's. Not on the production path — kept for tests/manual verification.
|
|
243
369
|
*/
|
|
244
370
|
async sendMessageSync(content, options = {}) {
|
|
245
|
-
const
|
|
371
|
+
const is1M = effectiveModelIs1M(options.model);
|
|
246
372
|
const generator = this.sendMessage(content, options);
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
373
|
+
for (;;) {
|
|
374
|
+
const step = await generator.next();
|
|
375
|
+
// A `done` step means the generator was drained (e.g. close() ended the
|
|
376
|
+
// session) — its return value is the authoritative final response.
|
|
377
|
+
if (step.done)
|
|
378
|
+
return step.value;
|
|
379
|
+
const message = step.value;
|
|
380
|
+
if (message.type === 'result') {
|
|
381
|
+
// Turn boundary: build from this result and stop pulling so the parked
|
|
382
|
+
// iterator can't block us (the generator won't return on its own).
|
|
383
|
+
return buildFinalResponse(message, is1M);
|
|
384
|
+
}
|
|
251
385
|
}
|
|
252
|
-
return result.value;
|
|
253
386
|
}
|
|
254
387
|
/**
|
|
255
388
|
* Interrupt the current query
|
|
@@ -274,6 +407,22 @@ export class ChatService {
|
|
|
274
407
|
await this.currentQuery.setPermissionMode(mode);
|
|
275
408
|
}
|
|
276
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Story 38.4 — runtime model switch. Change the model used for subsequent
|
|
412
|
+
* responses on the LIVE persistent query, without recreating it (no ~3s
|
|
413
|
+
* restart). `resolveEffectiveModel` resolves the `[1m]` suffix identically to
|
|
414
|
+
* the creation path (`createPersistentQuery` model option), so a runtime
|
|
415
|
+
* switch and a fresh-query model land on the exact same effective id. No-op
|
|
416
|
+
* when no query exists yet — the next `createPersistentQuery` reads the model
|
|
417
|
+
* from the send options instead. Probe-confirmed GO (setModel reflects on the
|
|
418
|
+
* next turn's response model meta); SDK-mode only (CLI omits this, callers
|
|
419
|
+
* feature-detect).
|
|
420
|
+
*/
|
|
421
|
+
async setModel(model) {
|
|
422
|
+
if (this.currentQuery) {
|
|
423
|
+
await this.currentQuery.setModel(resolveEffectiveModel(model) || undefined);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
277
426
|
/**
|
|
278
427
|
* Send a message with callback-based event handling
|
|
279
428
|
* Uses StreamHandler internally to process the async generator
|
|
@@ -289,9 +438,28 @@ export class ChatService {
|
|
|
289
438
|
*/
|
|
290
439
|
_onGenerationProgress,
|
|
291
440
|
/** Story 36.2: CLI phase callback — accepted for the ChatEngine interface, UNUSED in SDK mode. */
|
|
292
|
-
_onPhase, _onScreenFrame, _screenFrameThrottleMs,
|
|
441
|
+
_onPhase, _onScreenFrame, _screenFrameThrottleMs,
|
|
442
|
+
/**
|
|
443
|
+
* Turn-boundary gate 2 (2026-07-12 fix). Story 38.2 made the engine's Stop
|
|
444
|
+
* hook (via {@link StopSnapshotSource} below) the boundary source and retired
|
|
445
|
+
* this tracker from the judgment — but the Stop ledger has a deterministic
|
|
446
|
+
* blind spot: a task that COMPLETES while a generation is still running has
|
|
447
|
+
* already left `background_tasks[]` at that generation's Stop, while its
|
|
448
|
+
* queued `<task-notification>` guarantees an auto-resume follow-up. The
|
|
449
|
+
* tracker (task_started/acks minus notifications) still holds such a task,
|
|
450
|
+
* so streamHandler now gates the turn on BOTH sources. Also remains the
|
|
451
|
+
* crash-safety-net poller's pending set (websocket owns `stream.backgroundTracker`).
|
|
452
|
+
*/
|
|
453
|
+
backgroundTracker, _onPermissionModeSync) {
|
|
293
454
|
const streamHandler = new StreamHandler(effectiveModelIs1M(options.model));
|
|
294
455
|
const generator = this.sendMessage(content, options, canUseTool);
|
|
456
|
+
// Turn-completion source (Story 38.2): resolve the active persistent query's
|
|
457
|
+
// hook bridge lazily at each result. The bridge is created when the stream
|
|
458
|
+
// first starts (createPersistentQuery), so it is present by the time
|
|
459
|
+
// processStream consumes a result and asks for this turn's Stop snapshot.
|
|
460
|
+
const stopSource = {
|
|
461
|
+
consumeMainStopSnapshot: () => this.getHookBridge()?.consumeMainStopSnapshot(),
|
|
462
|
+
};
|
|
295
463
|
// Wrapper generator: calls onRawMessage for every SDK message,
|
|
296
464
|
// and emits heartbeat while waiting for generator.next() to confirm SDK is alive.
|
|
297
465
|
async function* wrapGenerator() {
|
|
@@ -299,20 +467,50 @@ export class ChatService {
|
|
|
299
467
|
while (!result.done) {
|
|
300
468
|
onRawMessage?.(result.value.type ?? 'unknown');
|
|
301
469
|
yield result.value;
|
|
302
|
-
// Wait for next message with 30s heartbeat to confirm SDK is alive
|
|
470
|
+
// Wait for next message with 30s heartbeat to confirm SDK is alive.
|
|
471
|
+
// The clear must run even when next() REJECTS (hard abort, SDK crash,
|
|
472
|
+
// resume failure) — an active interval is a GC root, so skipping it
|
|
473
|
+
// leaked one permanent 30s timer + this turn's closure graph per error.
|
|
303
474
|
const nextPromise = generator.next();
|
|
304
|
-
|
|
475
|
+
const heartbeatId = setInterval(() => {
|
|
305
476
|
log.verbose('heartbeat: generator.next() still pending — SDK is alive');
|
|
306
477
|
onRawMessage?.('heartbeat');
|
|
307
478
|
}, 30000);
|
|
308
|
-
|
|
309
|
-
|
|
479
|
+
try {
|
|
480
|
+
result = await nextPromise;
|
|
481
|
+
}
|
|
482
|
+
finally {
|
|
310
483
|
clearInterval(heartbeatId);
|
|
311
|
-
heartbeatId = null;
|
|
312
484
|
}
|
|
313
485
|
}
|
|
314
486
|
}
|
|
315
|
-
|
|
487
|
+
this.lastTurnTrackerHoldExpired = false;
|
|
488
|
+
try {
|
|
489
|
+
const response = await streamHandler.processStream(wrapGenerator(), callbacks, {
|
|
490
|
+
stopSource,
|
|
491
|
+
// Gate 2: tracked background tasks not yet resolved by a notification —
|
|
492
|
+
// covers the queued-notification window the Stop ledger cannot see.
|
|
493
|
+
pendingSource: backgroundTracker,
|
|
494
|
+
});
|
|
495
|
+
// Grace-expiry turns abandon a parked read on the shared session iterator —
|
|
496
|
+
// surface it so the residency reconciliation evicts this engine (see
|
|
497
|
+
// ChatEngine.lastTurnTrackerHoldExpired). Error/throw paths stay false:
|
|
498
|
+
// they already evict via the !turnSucceeded branch.
|
|
499
|
+
this.lastTurnTrackerHoldExpired = streamHandler.trackerHoldExpired;
|
|
500
|
+
return response;
|
|
501
|
+
}
|
|
502
|
+
finally {
|
|
503
|
+
// Epic 38: the persistent stream stays open past the result. In the
|
|
504
|
+
// non-resident (Story 38.1) mode the callback path closes it at turn end to
|
|
505
|
+
// avoid leaking an idle engine process (one turn per instance — websocket
|
|
506
|
+
// recreated the engine per send). Story 38.5 (Task 2): when this engine is
|
|
507
|
+
// resident, the turn-end close is SKIPPED — the residency registry owns the
|
|
508
|
+
// engine's lifecycle (idle timeout / LRU eviction / crash cleanup) so the
|
|
509
|
+
// query survives into the next turn without a ~3s re-spawn.
|
|
510
|
+
if (!this.resident) {
|
|
511
|
+
await this.close();
|
|
512
|
+
}
|
|
513
|
+
}
|
|
316
514
|
}
|
|
317
515
|
/**
|
|
318
516
|
* Standalone file rewind (no message send) — backs the `session:rewind-files`
|
|
@@ -325,30 +523,87 @@ export class ChatService {
|
|
|
325
523
|
* `rewindWarning`) — do not conflate the two.
|
|
326
524
|
*/
|
|
327
525
|
async rewindFiles(params) {
|
|
526
|
+
// Story 38.7: when this engine is RESIDENT with a live persistent query for the
|
|
527
|
+
// session, rewind INLINE on that query (`currentQuery.rewindFiles`) — the same
|
|
528
|
+
// control-channel operation the inline rewind-before-send uses. This avoids
|
|
529
|
+
// spinning up a SECOND live `query({ resume })` on the same session's JSONL, and
|
|
530
|
+
// needs no `markRewindDirty` (the inline path leaves no empty user message, unlike
|
|
531
|
+
// the throwaway `query({ prompt: '' })`). A non-resident / fresh engine
|
|
532
|
+
// (currentQuery === null — e.g. the standalone handler's throwaway) falls through to
|
|
533
|
+
// the shared standalone path. If the inline call throws, fall back too (never worse
|
|
534
|
+
// than the standalone behavior).
|
|
535
|
+
if (this.currentQuery) {
|
|
536
|
+
try {
|
|
537
|
+
return await this.currentQuery.rewindFiles(params.messageUuid, { dryRun: !!params.dryRun });
|
|
538
|
+
}
|
|
539
|
+
catch (err) {
|
|
540
|
+
log.warn(`inline rewindFiles failed, falling back to standalone: ${err instanceof Error ? err.message : String(err)}`);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
328
543
|
return rewindSessionFiles(params, this.workingDirectory);
|
|
329
544
|
}
|
|
330
545
|
}
|
|
331
546
|
/**
|
|
332
|
-
*
|
|
333
|
-
*
|
|
547
|
+
* Map an SDK `result` message to the engine-facing {@link ChatResponse}. Shared by
|
|
548
|
+
* the streaming (`sendMessage`) and non-streaming (`sendMessageSync`) paths so both
|
|
549
|
+
* derive an identical response from the same result (Story 38.5 Task 6d — the sync
|
|
550
|
+
* path breaks at the result to avoid the parked-iterator hang, so it needs this too).
|
|
334
551
|
*/
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
552
|
+
function buildFinalResponse(message, is1M) {
|
|
553
|
+
const msg = message;
|
|
554
|
+
return {
|
|
555
|
+
id: msg.uuid,
|
|
556
|
+
sessionId: msg.session_id,
|
|
557
|
+
content: msg.subtype === 'success' ? msg.result : '',
|
|
558
|
+
done: true,
|
|
559
|
+
isError: msg.is_error,
|
|
560
|
+
usage: {
|
|
561
|
+
inputTokens: msg.usage.input_tokens,
|
|
562
|
+
outputTokens: msg.usage.output_tokens,
|
|
563
|
+
cacheReadInputTokens: msg.usage.cache_read_input_tokens ?? 0,
|
|
564
|
+
cacheCreationInputTokens: msg.usage.cache_creation_input_tokens ?? 0,
|
|
565
|
+
totalCostUSD: msg.total_cost_usd,
|
|
566
|
+
contextWindow: correctContextWindow(extractContextWindow(msg.modelUsage), is1M),
|
|
567
|
+
},
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Build one SDKUserMessage for the persistent prompt queue (Epic 38). Plain text,
|
|
572
|
+
* or text + inline base64 image/document blocks when attachments are present
|
|
573
|
+
* (Story 5.5, PDF documents: Story BS-11 — `images` param name kept for Stage 1
|
|
574
|
+
* compatibility; PDFs ride the same array distinguished by mimeType).
|
|
575
|
+
*/
|
|
576
|
+
function buildUserMessage(text, images) {
|
|
577
|
+
const content = images && images.length > 0
|
|
578
|
+
? [
|
|
579
|
+
{ type: 'text', text },
|
|
580
|
+
...images.map((img) => img.mimeType === 'application/pdf'
|
|
581
|
+
? {
|
|
582
|
+
type: 'document',
|
|
583
|
+
source: {
|
|
584
|
+
type: 'base64',
|
|
585
|
+
media_type: 'application/pdf',
|
|
586
|
+
data: img.data,
|
|
587
|
+
},
|
|
588
|
+
// Original filename lets Claude tell multiple documents apart
|
|
589
|
+
title: img.name,
|
|
590
|
+
}
|
|
591
|
+
: {
|
|
344
592
|
type: 'image',
|
|
345
593
|
source: {
|
|
346
594
|
type: 'base64',
|
|
347
595
|
media_type: img.mimeType,
|
|
348
596
|
data: img.data,
|
|
349
597
|
},
|
|
350
|
-
})
|
|
351
|
-
|
|
598
|
+
}),
|
|
599
|
+
]
|
|
600
|
+
: text;
|
|
601
|
+
return {
|
|
602
|
+
type: 'user',
|
|
603
|
+
session_id: '',
|
|
604
|
+
message: {
|
|
605
|
+
role: 'user',
|
|
606
|
+
content,
|
|
352
607
|
},
|
|
353
608
|
parent_tool_use_id: null,
|
|
354
609
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,6 +99,14 @@ export declare class ClaudeLoginSession {
|
|
|
99
99
|
private credPollTimer;
|
|
100
100
|
private credWatcher;
|
|
101
101
|
private readonly timeoutMs;
|
|
102
|
+
/**
|
|
103
|
+
* The credential token already on disk when this login session started (null when logged out).
|
|
104
|
+
* Completion is detected by the token CHANGING away from this snapshot — NOT by a token merely
|
|
105
|
+
* existing. Adding a second account leaves the previous account's credential on disk, so an
|
|
106
|
+
* existence check would complete instantly on the stale token and tear the session down before
|
|
107
|
+
* the new account's credential is ever written (Story BS-8 multi-account regression).
|
|
108
|
+
*/
|
|
109
|
+
private priorToken;
|
|
102
110
|
constructor(cb: ClaudeLoginCallbacks, timeoutMs?: number);
|
|
103
111
|
/** Spawn the disposable login PTY and begin the boot → /login sequence. */
|
|
104
112
|
start(binaryPathOverride?: string): void;
|
|
@@ -112,9 +120,12 @@ export declare class ClaudeLoginSession {
|
|
|
112
120
|
private afterBootSettle;
|
|
113
121
|
private consumeGrid;
|
|
114
122
|
/**
|
|
115
|
-
* Watch the credentials file for a token (fs.watch as the low-latency trigger + a poll loop
|
|
116
|
-
* the deterministic fallback — the file may not exist yet, and fs.watch reliability varies by
|
|
117
|
-
* platform).
|
|
123
|
+
* Watch the credentials file for a NEW token (fs.watch as the low-latency trigger + a poll loop
|
|
124
|
+
* as the deterministic fallback — the file may not exist yet, and fs.watch reliability varies by
|
|
125
|
+
* platform). Completion fires only when the token differs from the pre-login snapshot
|
|
126
|
+
* ({@link priorToken}), so a credential already on disk (the "add account" case) doesn't
|
|
127
|
+
* complete the session before the new account's credential is written. On a fresh token, refresh
|
|
128
|
+
* account info and complete.
|
|
118
129
|
*/
|
|
119
130
|
private watchCredentials;
|
|
120
131
|
private complete;
|