agor-live 0.16.2 → 0.16.4
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/bin/agor-daemon.js +1 -1
- package/dist/cli/base-command.d.ts +1 -1
- package/dist/cli/base-command.js +8 -7
- package/dist/cli/commands/auth/login.js +2 -2
- package/dist/cli/commands/board/add-session.d.ts +1 -1
- package/dist/cli/commands/board/add-session.js +15 -17
- package/dist/cli/commands/board/clone.d.ts +1 -1
- package/dist/cli/commands/board/clone.js +8 -7
- package/dist/cli/commands/board/export.d.ts +1 -1
- package/dist/cli/commands/board/export.js +8 -7
- package/dist/cli/commands/board/import.d.ts +1 -1
- package/dist/cli/commands/board/import.js +8 -7
- package/dist/cli/commands/board/list.d.ts +1 -1
- package/dist/cli/commands/board/list.js +15 -13
- package/dist/cli/commands/daemon/logs.js +71 -6
- package/dist/cli/commands/daemon/restart.js +43 -6
- package/dist/cli/commands/daemon/start.d.ts +6 -0
- package/dist/cli/commands/daemon/start.js +208 -133
- package/dist/cli/commands/daemon/status.js +5 -2
- package/dist/cli/commands/daemon/stop.js +3 -0
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/login.js +2 -2
- package/dist/cli/commands/mcp/add.d.ts +1 -1
- package/dist/cli/commands/mcp/add.js +8 -7
- package/dist/cli/commands/mcp/list.d.ts +1 -1
- package/dist/cli/commands/mcp/list.js +9 -9
- package/dist/cli/commands/mcp/remove.d.ts +1 -1
- package/dist/cli/commands/mcp/remove.js +9 -9
- package/dist/cli/commands/mcp/show.d.ts +1 -1
- package/dist/cli/commands/mcp/show.js +9 -9
- package/dist/cli/commands/open.js +2 -2
- package/dist/cli/commands/repo/add-local.d.ts +1 -1
- package/dist/cli/commands/repo/add-local.js +8 -7
- package/dist/cli/commands/repo/add.d.ts +1 -1
- package/dist/cli/commands/repo/add.js +9 -8
- package/dist/cli/commands/repo/list.d.ts +1 -1
- package/dist/cli/commands/repo/list.js +9 -9
- package/dist/cli/commands/repo/rm.d.ts +1 -1
- package/dist/cli/commands/repo/rm.js +9 -9
- package/dist/cli/commands/session/list.d.ts +1 -1
- package/dist/cli/commands/session/list.js +9 -10
- package/dist/cli/commands/session/load-claude.d.ts +1 -1
- package/dist/cli/commands/session/load-claude.js +10 -10
- package/dist/cli/commands/user/create.d.ts +1 -1
- package/dist/cli/commands/user/create.js +8 -7
- package/dist/cli/commands/user/delete.d.ts +1 -1
- package/dist/cli/commands/user/delete.js +9 -9
- package/dist/cli/commands/user/update.d.ts +1 -1
- package/dist/cli/commands/user/update.js +9 -9
- package/dist/cli/commands/worktree/add.d.ts +1 -1
- package/dist/cli/commands/worktree/add.js +9 -9
- package/dist/cli/commands/worktree/archive.d.ts +1 -1
- package/dist/cli/commands/worktree/archive.js +10 -10
- package/dist/cli/commands/worktree/cd.d.ts +1 -1
- package/dist/cli/commands/worktree/cd.js +8 -7
- package/dist/cli/commands/worktree/env/restart.d.ts +1 -1
- package/dist/cli/commands/worktree/env/restart.js +9 -8
- package/dist/cli/commands/worktree/env/start.d.ts +1 -1
- package/dist/cli/commands/worktree/env/start.js +9 -8
- package/dist/cli/commands/worktree/env/status.d.ts +1 -1
- package/dist/cli/commands/worktree/env/status.js +9 -8
- package/dist/cli/commands/worktree/env/stop.d.ts +1 -1
- package/dist/cli/commands/worktree/env/stop.js +9 -8
- package/dist/cli/commands/worktree/list.d.ts +1 -1
- package/dist/cli/commands/worktree/list.js +12 -15
- package/dist/cli/commands/worktree/rm.d.ts +1 -1
- package/dist/cli/commands/worktree/rm.js +10 -10
- package/dist/cli/commands/worktree/show.d.ts +1 -1
- package/dist/cli/commands/worktree/show.js +10 -10
- package/dist/cli/commands/worktree/unarchive.d.ts +1 -1
- package/dist/cli/commands/worktree/unarchive.js +10 -10
- package/dist/cli/commands/worktree/update.d.ts +1 -1
- package/dist/cli/commands/worktree/update.js +9 -8
- package/dist/cli/lib/context.d.ts +7 -1
- package/dist/cli/lib/context.js +13 -0
- package/dist/cli/lib/daemon-manager.d.ts +15 -2
- package/dist/cli/lib/daemon-manager.js +106 -7
- package/dist/cli/lib/daemon-manager.test.d.ts +2 -0
- package/dist/cli/lib/daemon-manager.test.js +17355 -0
- package/dist/cli/lib/help.js +2 -2
- package/dist/core/{agentic-tool-1L19ixPC.d.ts → agentic-tool-B6RT-ZX5.d.ts} +1 -1
- package/dist/core/{agentic-tool-3oiAj9Lg.d.cts → agentic-tool-Cs4nK-CC.d.cts} +1 -1
- package/dist/core/api/index.cjs +90 -4
- package/dist/core/api/index.d.cts +61 -18
- package/dist/core/api/index.d.ts +61 -18
- package/dist/core/api/index.js +88 -3
- package/dist/core/{artifact-B5MFR79G.d.ts → artifact-CIQzxjNP.d.ts} +2 -2
- package/dist/core/{artifact-Bi-1jifF.d.cts → artifact-DaHQPZVX.d.cts} +2 -2
- package/dist/core/{board-B9Xnux_i.d.ts → board-DG--dAS_.d.ts} +2 -2
- package/dist/core/{board-CPZGf5wF.d.cts → board-DogjFoWy.d.cts} +2 -2
- package/dist/core/{board-comment-BoDqwrnL.d.ts → board-comment-9ORrSlA1.d.ts} +1 -1
- package/dist/core/{board-comment-BQKnob6r.d.cts → board-comment-WzJC3SuF.d.cts} +1 -1
- package/dist/core/claude/index.cjs +9 -8
- package/dist/core/claude/index.d.cts +3 -3
- package/dist/core/claude/index.d.ts +3 -3
- package/dist/core/claude/index.js +9 -8
- package/dist/core/{client-HEOUNaCs.d.ts → client-NFCS0H8T.d.ts} +5 -5
- package/dist/core/{client-BC_18M7T.d.cts → client-XpghdMQL.d.cts} +5 -5
- package/dist/core/config/browser.d.cts +7 -7
- package/dist/core/config/browser.d.ts +7 -7
- package/dist/core/config/index.cjs +1 -0
- package/dist/core/config/index.d.cts +13 -13
- package/dist/core/config/index.d.ts +13 -13
- package/dist/core/config/index.js +1 -0
- package/dist/core/{config-manager-DK1LMXEc.d.cts → config-manager-BbMvB3Lz.d.cts} +1 -1
- package/dist/core/{config-manager-YrO9mG5j.d.ts → config-manager-etFWO6Wo.d.ts} +1 -1
- package/dist/core/{config-services-DrHSgUEm.d.ts → config-services-C848cfbD.d.ts} +4 -4
- package/dist/core/{config-services-CuhBWSs_.d.cts → config-services-CDhfaNpd.d.cts} +4 -4
- package/dist/core/db/index.cjs +13 -10
- package/dist/core/db/index.d.cts +16 -16
- package/dist/core/db/index.d.ts +16 -16
- package/dist/core/db/index.js +13 -10
- package/dist/core/db/session-guard.d.cts +8 -8
- package/dist/core/db/session-guard.d.ts +8 -8
- package/dist/core/environment/variable-resolver.d.cts +2 -2
- package/dist/core/environment/variable-resolver.d.ts +2 -2
- package/dist/core/{feathers-CzuSOZgY.d.ts → feathers--R3ml98e.d.cts} +12 -4
- package/dist/core/{feathers-CYAHFZ05.d.cts → feathers-C8PkF35p.d.ts} +12 -4
- package/dist/core/gateway/index.d.cts +5 -5
- package/dist/core/gateway/index.d.ts +5 -5
- package/dist/core/{gateway-Ci8LcUxK.d.ts → gateway-BYCTTJVJ.d.ts} +4 -4
- package/dist/core/{gateway-gHbaS6qt.d.cts → gateway-D5me_jjo.d.cts} +4 -4
- package/dist/core/git/index.d.cts +8 -8
- package/dist/core/git/index.d.ts +8 -8
- package/dist/core/{id-Cv3ntaTJ.d.cts → id-2oR2NdLp.d.cts} +17 -1
- package/dist/core/{id-Cv3ntaTJ.d.ts → id-2oR2NdLp.d.ts} +17 -1
- package/dist/core/index.cjs +95 -4
- package/dist/core/index.d.cts +19 -19
- package/dist/core/index.d.ts +19 -19
- package/dist/core/index.js +93 -4
- package/dist/core/mcp/index.d.cts +2 -2
- package/dist/core/mcp/index.d.ts +2 -2
- package/dist/core/{mcp-VhU-PMHo.d.ts → mcp-D7eTnVUO.d.ts} +1 -1
- package/dist/core/{mcp-CtC1DFEm.d.cts → mcp-DUrvGUDS.d.cts} +1 -1
- package/dist/core/{message-CbD99EwO.d.cts → message-BbDSJvyl.d.cts} +1 -1
- package/dist/core/{message-Cwhx2ItQ.d.ts → message-C4Bb-L6c.d.ts} +1 -1
- package/dist/core/permissions/index.d.cts +2 -2
- package/dist/core/permissions/index.d.ts +2 -2
- package/dist/core/{repo-j12tCmyK.d.ts → repo-DaP4omZL.d.ts} +1 -1
- package/dist/core/{repo-CcvhnJDf.d.cts → repo-zg1xnWQQ.d.cts} +1 -1
- package/dist/core/seed/index.cjs +13 -10
- package/dist/core/seed/index.d.cts +1 -1
- package/dist/core/seed/index.d.ts +1 -1
- package/dist/core/seed/index.js +13 -10
- package/dist/core/{session-DEU5FS0N.d.cts → session-C7mvs-rD.d.cts} +2 -2
- package/dist/core/{session-Bw8_FN2l.d.ts → session-elEYFVev.d.ts} +2 -2
- package/dist/core/{session-guard-CJ7sfOF1.d.ts → session-guard-D7hUa4D2.d.ts} +3 -3
- package/dist/core/{session-guard-BjHxMpvV.d.cts → session-guard-DOQgVFL6.d.cts} +3 -3
- package/dist/core/{task-CKHC1gPj.d.ts → task-C8SPRSHg.d.ts} +8 -1
- package/dist/core/{task-DCPYEXlG.d.cts → task-DJMxZTv4.d.cts} +8 -1
- package/dist/core/templates/session-context.d.cts +5 -5
- package/dist/core/templates/session-context.d.ts +5 -5
- package/dist/core/tools/mcp/jwt-auth.d.cts +2 -2
- package/dist/core/tools/mcp/jwt-auth.d.ts +2 -2
- package/dist/core/types/index.cjs +7 -0
- package/dist/core/types/index.d.cts +16 -16
- package/dist/core/types/index.d.ts +16 -16
- package/dist/core/types/index.js +6 -0
- package/dist/core/{types-BE6DTpRe.d.cts → types-BQRGoDkg.d.cts} +1 -1
- package/dist/core/{types-BvYoeNhO.d.ts → types-CvXKxTNP.d.ts} +1 -1
- package/dist/core/unix/index.cjs +5 -2
- package/dist/core/unix/index.d.cts +8 -8
- package/dist/core/unix/index.d.ts +8 -8
- package/dist/core/unix/index.js +5 -2
- package/dist/core/{user-pO3lB_da.d.ts → user-C9UDwwtA.d.ts} +3 -3
- package/dist/core/{user-BpKIlt04.d.cts → user-wScngdUE.d.cts} +3 -3
- package/dist/core/utils/board-placement.d.cts +3 -3
- package/dist/core/utils/board-placement.d.ts +3 -3
- package/dist/core/utils/permission-mode-mapper.d.cts +3 -3
- package/dist/core/utils/permission-mode-mapper.d.ts +3 -3
- package/dist/core/utils/url.cjs +8 -2
- package/dist/core/utils/url.d.cts +1 -1
- package/dist/core/utils/url.d.ts +1 -1
- package/dist/core/utils/url.js +8 -2
- package/dist/daemon/index.d.ts +34 -1
- package/dist/daemon/index.js +36 -13
- package/dist/daemon/main.d.ts +2 -0
- package/dist/daemon/main.js +32581 -0
- package/dist/daemon/register-routes.js +15 -0
- package/dist/daemon/register-services.js +4 -1
- package/dist/daemon/startup.d.ts +2 -0
- package/dist/daemon/startup.js +8 -4
- package/dist/executor/db/feathers-repositories.d.ts +1 -0
- package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
- package/dist/executor/db/feathers-repositories.js +1 -0
- package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/base-executor.js +33 -21
- package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/claude.js +1 -1
- package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/codex.js +1 -1
- package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts +20 -1
- package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/base/diff-enrichment.js +264 -26
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +9 -1
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/claude-tool.js +17 -7
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +19 -7
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.js +166 -38
- package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts +12 -0
- package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts.map +1 -0
- package/dist/executor/sdk-handlers/codex/context-window-fallback.js +72 -0
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +12 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +124 -18
- package/dist/executor/sdk-handlers/codex/usage.d.ts +35 -0
- package/dist/executor/sdk-handlers/codex/usage.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/usage.js +90 -0
- package/dist/ui/assets/{_basePickBy-By_woBZB.js → _basePickBy-CQZh_v13.js} +1 -1
- package/dist/ui/assets/_basePickBy-CQZh_v13.js.gz +0 -0
- package/dist/ui/assets/{_baseUniq-C2jLj-Al.js → _baseUniq-Cgf5LtCM.js} +1 -1
- package/dist/ui/assets/_baseUniq-Cgf5LtCM.js.gz +0 -0
- package/dist/ui/assets/{arc-DADMFVbt.js → arc-DnTl2a4f.js} +1 -1
- package/dist/ui/assets/arc-DnTl2a4f.js.gz +0 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js → architectureDiagram-VXUJARFQ-DZHKQxRL.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js.gz → architectureDiagram-VXUJARFQ-DZHKQxRL.js.gz} +0 -0
- package/dist/ui/assets/{base-80a1f760-BVsv_T1S.js → base-80a1f760-pDLzaKJY.js} +1 -1
- package/dist/ui/assets/{blockDiagram-VD42YOAC-CezN66iB.js → blockDiagram-VD42YOAC-BAOUMLja.js} +1 -1
- package/dist/ui/assets/blockDiagram-VD42YOAC-BAOUMLja.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dze59YuK.js → c4Diagram-YG6GDRKO-C0xcWHxz.js} +1 -1
- package/dist/ui/assets/c4Diagram-YG6GDRKO-C0xcWHxz.js.gz +0 -0
- package/dist/ui/assets/channel-DpHH4gqH.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-CXL-V_XA.js → chunk-4BX2VUAB-DCYNUaJZ.js} +1 -1
- package/dist/ui/assets/{chunk-55IACEB6-CI3h0xTl.js → chunk-55IACEB6-DU3b1X7p.js} +1 -1
- package/dist/ui/assets/{chunk-B4BG7PRW-CFohiEqO.js → chunk-B4BG7PRW-BJlNsfTo.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-BJlNsfTo.js.gz +0 -0
- package/dist/ui/assets/{chunk-DI55MBZ5-BbF4fGKj.js → chunk-DI55MBZ5-CKQY-IiF.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-CKQY-IiF.js.gz +0 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-C5x6cpDg.js → chunk-FMBD7UC4-DmjQ-Dzu.js} +1 -1
- package/dist/ui/assets/{chunk-QN33PNHL-CEDiC29y.js → chunk-QN33PNHL-Bps50N51.js} +1 -1
- package/dist/ui/assets/{chunk-QZHKN3VN-DPo28cCF.js → chunk-QZHKN3VN-CNDKr6Xh.js} +1 -1
- package/dist/ui/assets/{chunk-TZMSLE5B-C94jSlIG.js → chunk-TZMSLE5B-R2Vz5IHZ.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-R2Vz5IHZ.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-CbDCU4XU.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CbDCU4XU.js +1 -0
- package/dist/ui/assets/clone-DSMLFNzW.js +1 -0
- package/dist/ui/assets/{consoleHook-59e792cb-cpS6JVM4.js → consoleHook-59e792cb-MfGBgEJx.js} +1 -1
- package/dist/ui/assets/consoleHook-59e792cb-MfGBgEJx.js.gz +0 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-CcoEg_Ct.js → cose-bilkent-S5V4N54A-Bkbv_h_w.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-Bkbv_h_w.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-DWAyqs2B.js → dagre-6UL2VRFP-DUoxEnB9.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-DUoxEnB9.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-C7J2MNfc.js → diagram-PSM6KHXK-BUdRu7ma.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-BUdRu7ma.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-6KZjqziN.js → diagram-QEK2KX5R-DEoZ3bpF.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-DEoZ3bpF.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-DIL01325.js → diagram-S2PKOQOG-CxM9wSuL.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-CxM9wSuL.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-D5j4CetG.js → erDiagram-Q2GNP2WA-D5VuZpBE.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-D5VuZpBE.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-Bxx2iEi-.js → flowDiagram-NV44I4VS-uuzmVpS4.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-uuzmVpS4.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BtBi1ZfT.js → ganttDiagram-LVOFAZNH-7spsgOUT.js} +1 -1
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-7spsgOUT.js.gz +0 -0
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CY1TKvzA.js → gitGraphDiagram-NY62KEGX-DJDE3D90.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-DJDE3D90.js.gz +0 -0
- package/dist/ui/assets/{graph-DC6eH7AX.js → graph-BmWYHUOg.js} +1 -1
- package/dist/ui/assets/graph-BmWYHUOg.js.gz +0 -0
- package/dist/ui/assets/{index-599aeaf7-Dh_oObwY.js → index-599aeaf7-C76CG5K3.js} +1 -1
- package/dist/ui/assets/index-599aeaf7-C76CG5K3.js.gz +0 -0
- package/dist/ui/assets/index-B0lOKf7g.js +4 -0
- package/dist/ui/assets/index-B0lOKf7g.js.gz +0 -0
- package/dist/ui/assets/{index-DJLnZ-9H.js → index-CMrDOI5G.js} +294 -298
- package/dist/ui/assets/index-CMrDOI5G.js.gz +0 -0
- package/dist/ui/assets/{index-DQn7RJ8z.js → index-CuMJFr7K.js} +1 -1
- package/dist/ui/assets/index-CuMJFr7K.js.gz +0 -0
- package/dist/ui/assets/{index-CxWOjjRu.js → index-fQo-B6L6.js} +1 -1
- package/dist/ui/assets/index-fQo-B6L6.js.gz +0 -0
- package/dist/ui/assets/{infoDiagram-ER5ION4S-COpJ37pc.js → infoDiagram-ER5ION4S--dZLWvYP.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CpODBkng.js → journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DWShJ5Su.js → kanban-definition-3W4ZIXB7-DoDzQCSc.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-DoDzQCSc.js.gz +0 -0
- package/dist/ui/assets/{layout-ttMTfXMb.js → layout-BmSvKYXZ.js} +1 -1
- package/dist/ui/assets/layout-BmSvKYXZ.js.gz +0 -0
- package/dist/ui/assets/{linear-DD8VTncp.js → linear-BnPF1K20.js} +1 -1
- package/dist/ui/assets/linear-BnPF1K20.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-BlvxruUX.js → mermaid.core-Suk7MkfT.js} +5 -5
- package/dist/ui/assets/mermaid.core-Suk7MkfT.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-CR0ESdqM.js → mindmap-definition-VGOIOE7T-Bj9HZQA9.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-Bj9HZQA9.js.gz +0 -0
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-B94eVYhY.js → pieDiagram-ADFJNKIX-BIcJ5ee8.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BIcJ5ee8.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C4tNKfCm.js → quadrantDiagram-AYHSOK5B-CJm5QQ8N.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CJm5QQ8N.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-CuG3A95Q.js → requirementDiagram-UZGBJVZJ-Bg6r943V.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bg6r943V.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BCfc7mLC.js → sankeyDiagram-TZEHDZUN-C2XnZZZp.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-C2XnZZZp.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-D8tVuIkx.js → sequenceDiagram-WL72ISMW-DOg-bBN1.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-DOg-bBN1.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-DvM8so2A.js → stateDiagram-FKZM4ZOC-DgZgPM-o.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-DgZgPM-o.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-C_0TAQGU.js +1 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-CP2O8vqw.js → timeline-definition-IT6M3QCI-CmkWt6nL.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CmkWt6nL.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-SGJAEegj.js → treemap-KMMF4GRG-CV8wwXTM.js} +1 -1
- package/dist/ui/assets/treemap-KMMF4GRG-CV8wwXTM.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CpwYBSmP.js → xychartDiagram-PRI3JC2R-CvuPvlyn.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CvuPvlyn.js.gz +0 -0
- package/dist/ui/index.html +1 -1
- package/package.json +2 -1
- package/dist/ui/assets/_basePickBy-By_woBZB.js.gz +0 -0
- package/dist/ui/assets/_baseUniq-C2jLj-Al.js.gz +0 -0
- package/dist/ui/assets/arc-DADMFVbt.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-CezN66iB.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-Dze59YuK.js.gz +0 -0
- package/dist/ui/assets/channel-B2nSdT47.js +0 -1
- package/dist/ui/assets/chunk-B4BG7PRW-CFohiEqO.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-BbF4fGKj.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-C94jSlIG.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-lwQJA5v0.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-lwQJA5v0.js +0 -1
- package/dist/ui/assets/clone-DmZ98vg9.js +0 -1
- package/dist/ui/assets/consoleHook-59e792cb-cpS6JVM4.js.gz +0 -0
- package/dist/ui/assets/cose-bilkent-S5V4N54A-CcoEg_Ct.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-DWAyqs2B.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-C7J2MNfc.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-6KZjqziN.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-DIL01325.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-D5j4CetG.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-Bxx2iEi-.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-BtBi1ZfT.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CY1TKvzA.js.gz +0 -0
- package/dist/ui/assets/graph-DC6eH7AX.js.gz +0 -0
- package/dist/ui/assets/index-599aeaf7-Dh_oObwY.js.gz +0 -0
- package/dist/ui/assets/index-CxWOjjRu.js.gz +0 -0
- package/dist/ui/assets/index-DJLnZ-9H.js.gz +0 -0
- package/dist/ui/assets/index-DQn7RJ8z.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CpODBkng.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-DWShJ5Su.js.gz +0 -0
- package/dist/ui/assets/layout-ttMTfXMb.js.gz +0 -0
- package/dist/ui/assets/linear-DD8VTncp.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-BlvxruUX.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-CR0ESdqM.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-B94eVYhY.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C4tNKfCm.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-CuG3A95Q.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BCfc7mLC.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-D8tVuIkx.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-DvM8so2A.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-kQ-gZX7K.js +0 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CP2O8vqw.js.gz +0 -0
- package/dist/ui/assets/treemap-KMMF4GRG-SGJAEegj.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CpwYBSmP.js.gz +0 -0
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* Call `enrichContentBlocks()` which finds tool_use blocks and uses their input
|
|
18
18
|
* to enrich adjacent tool_result blocks in one pass.
|
|
19
19
|
*/
|
|
20
|
-
import { execSync } from 'node:child_process';
|
|
20
|
+
import { execFileSync, execSync } from 'node:child_process';
|
|
21
21
|
import * as fs from 'node:fs';
|
|
22
22
|
import * as path from 'node:path';
|
|
23
23
|
import { structuredPatch } from 'diff';
|
|
@@ -25,6 +25,60 @@ import { structuredPatch } from 'diff';
|
|
|
25
25
|
const MAX_FILE_SIZE_BYTES = 1_048_576;
|
|
26
26
|
/** Context lines around changes (same as Claude Code CLI) */
|
|
27
27
|
const CONTEXT_LINES = 3;
|
|
28
|
+
function isSafeRepoRelativePath(relativePath) {
|
|
29
|
+
const normalized = path.posix.normalize(relativePath.split(path.sep).join('/'));
|
|
30
|
+
return !(!normalized ||
|
|
31
|
+
normalized.startsWith('/') ||
|
|
32
|
+
normalized === '..' ||
|
|
33
|
+
normalized.startsWith('../') ||
|
|
34
|
+
normalized.includes('\0') ||
|
|
35
|
+
normalized.includes('\n') ||
|
|
36
|
+
normalized.includes('\r'));
|
|
37
|
+
}
|
|
38
|
+
function tryRealpath(p) {
|
|
39
|
+
try {
|
|
40
|
+
return fs.realpathSync(p);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve a path to a git-repo-relative path, tolerating symlink prefix drift.
|
|
48
|
+
*
|
|
49
|
+
* In production we may receive absolute tool paths under a symlinked mount
|
|
50
|
+
* while git reports a canonical root under a different prefix. This helper
|
|
51
|
+
* tries lexical and canonicalized candidates and returns a safe repo-relative path.
|
|
52
|
+
*/
|
|
53
|
+
function resolveRepoRelativePath(gitRoot, absolutePath) {
|
|
54
|
+
const lexicalRelative = path.relative(gitRoot, absolutePath);
|
|
55
|
+
if (isSafeRepoRelativePath(lexicalRelative)) {
|
|
56
|
+
return lexicalRelative;
|
|
57
|
+
}
|
|
58
|
+
const gitRootReal = tryRealpath(gitRoot);
|
|
59
|
+
if (!gitRootReal)
|
|
60
|
+
return null;
|
|
61
|
+
const candidates = new Set();
|
|
62
|
+
candidates.add(absolutePath);
|
|
63
|
+
const absoluteReal = tryRealpath(absolutePath);
|
|
64
|
+
if (absoluteReal) {
|
|
65
|
+
candidates.add(absoluteReal);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// File may not exist (e.g., delete). Resolve through parent directory.
|
|
69
|
+
const parentReal = tryRealpath(path.dirname(absolutePath));
|
|
70
|
+
if (parentReal) {
|
|
71
|
+
candidates.add(path.join(parentReal, path.basename(absolutePath)));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const candidate of candidates) {
|
|
75
|
+
const relativePath = path.relative(gitRootReal, candidate);
|
|
76
|
+
if (isSafeRepoRelativePath(relativePath)) {
|
|
77
|
+
return relativePath;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
28
82
|
// ---------------------------------------------------------------------------
|
|
29
83
|
// Pattern 1: Split messages (Claude)
|
|
30
84
|
// ---------------------------------------------------------------------------
|
|
@@ -36,6 +90,8 @@ const CONTEXT_LINES = 3;
|
|
|
36
90
|
* Entries are deleted after consumption to avoid unbounded growth.
|
|
37
91
|
*/
|
|
38
92
|
const pendingToolUses = new Map();
|
|
93
|
+
const pendingEditFilesSnapshots = new Map();
|
|
94
|
+
const MAX_PENDING_EDIT_FILES_SNAPSHOTS = 400;
|
|
39
95
|
/**
|
|
40
96
|
* Register tool uses from an assistant message for later enrichment lookup.
|
|
41
97
|
* Used when tool_use and tool_result are in separate messages (Claude pattern).
|
|
@@ -45,6 +101,80 @@ export function registerToolUses(toolUses) {
|
|
|
45
101
|
pendingToolUses.set(tu.id, { name: tu.name, input: tu.input });
|
|
46
102
|
}
|
|
47
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Register a pre-edit snapshot for tools that need true pre/post diffs.
|
|
106
|
+
* Currently used for Codex edit_files at tool-start time so completion does not
|
|
107
|
+
* rely on git HEAD state.
|
|
108
|
+
*/
|
|
109
|
+
export function registerToolInvocationStart(toolUseId, toolName, toolInput, context) {
|
|
110
|
+
try {
|
|
111
|
+
if (toolName.toLowerCase() !== 'edit_files')
|
|
112
|
+
return;
|
|
113
|
+
const changes = toolInput.changes;
|
|
114
|
+
if (!changes || changes.length === 0)
|
|
115
|
+
return;
|
|
116
|
+
const workingDirectory = context?.workingDirectory;
|
|
117
|
+
let gitRoot;
|
|
118
|
+
try {
|
|
119
|
+
gitRoot = execSync('git rev-parse --show-toplevel', {
|
|
120
|
+
encoding: 'utf-8',
|
|
121
|
+
timeout: 5000,
|
|
122
|
+
...(workingDirectory ? { cwd: workingDirectory } : {}),
|
|
123
|
+
}).trim();
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const snapshots = [];
|
|
129
|
+
for (const change of changes) {
|
|
130
|
+
if (!change?.path)
|
|
131
|
+
continue;
|
|
132
|
+
const kind = normalizeChangeKind(change.kind);
|
|
133
|
+
const absolutePath = path.isAbsolute(change.path)
|
|
134
|
+
? change.path
|
|
135
|
+
: path.resolve(workingDirectory || gitRoot, change.path);
|
|
136
|
+
// Only snapshot files inside the repo.
|
|
137
|
+
if (!resolveRepoRelativePath(gitRoot, absolutePath))
|
|
138
|
+
continue;
|
|
139
|
+
let beforeExists = false;
|
|
140
|
+
let beforeContent;
|
|
141
|
+
try {
|
|
142
|
+
const stat = fs.statSync(absolutePath);
|
|
143
|
+
if (stat.size <= MAX_FILE_SIZE_BYTES) {
|
|
144
|
+
beforeContent = fs.readFileSync(absolutePath, 'utf-8');
|
|
145
|
+
}
|
|
146
|
+
beforeExists = true;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
beforeExists = false;
|
|
150
|
+
}
|
|
151
|
+
snapshots.push({
|
|
152
|
+
path: change.path,
|
|
153
|
+
kind,
|
|
154
|
+
absolutePath,
|
|
155
|
+
beforeExists,
|
|
156
|
+
beforeContent,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (snapshots.length > 0) {
|
|
160
|
+
pendingEditFilesSnapshots.set(getSnapshotKey(toolUseId, context), {
|
|
161
|
+
snapshots,
|
|
162
|
+
createdAt: Date.now(),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
pruneOldestEditFilesSnapshots();
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Best effort — swallow any errors
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear pending per-invocation snapshot state for a specific tool use.
|
|
173
|
+
* Used on terminal paths (stop/abort/error) to prevent stale cache buildup.
|
|
174
|
+
*/
|
|
175
|
+
export function clearToolInvocationState(toolUseId, context) {
|
|
176
|
+
pendingEditFilesSnapshots.delete(getSnapshotKey(toolUseId, context));
|
|
177
|
+
}
|
|
48
178
|
/**
|
|
49
179
|
* Enrich tool_result content blocks using previously registered tool_use data.
|
|
50
180
|
* Used when tool_use and tool_result are in separate messages (Claude pattern).
|
|
@@ -64,7 +194,7 @@ export function enrichToolResults(contentBlocks) {
|
|
|
64
194
|
continue;
|
|
65
195
|
// Consume the entry — we no longer need it
|
|
66
196
|
pendingToolUses.delete(toolUseId);
|
|
67
|
-
enrichBlock(block, toolUse.name, toolUse.input);
|
|
197
|
+
enrichBlock(block, toolUse.name, toolUse.input, undefined, toolUseId);
|
|
68
198
|
}
|
|
69
199
|
// GC: clear any stale entries older than expected
|
|
70
200
|
if (pendingToolUses.size > 200) {
|
|
@@ -81,7 +211,7 @@ export function enrichToolResults(contentBlocks) {
|
|
|
81
211
|
* Used by Codex, OpenCode, and Gemini handlers.
|
|
82
212
|
* Mutates content blocks in-place. Best-effort.
|
|
83
213
|
*/
|
|
84
|
-
export function enrichContentBlocks(contentBlocks) {
|
|
214
|
+
export function enrichContentBlocks(contentBlocks, context) {
|
|
85
215
|
// Build local map from tool_use blocks in this array
|
|
86
216
|
const localToolUses = new Map();
|
|
87
217
|
for (const block of contentBlocks) {
|
|
@@ -101,7 +231,7 @@ export function enrichContentBlocks(contentBlocks) {
|
|
|
101
231
|
const toolUse = localToolUses.get(toolUseId);
|
|
102
232
|
if (!toolUse)
|
|
103
233
|
continue;
|
|
104
|
-
enrichBlock(block, toolUse.name, toolUse.input);
|
|
234
|
+
enrichBlock(block, toolUse.name, toolUse.input, context, toolUseId);
|
|
105
235
|
}
|
|
106
236
|
}
|
|
107
237
|
// ---------------------------------------------------------------------------
|
|
@@ -111,7 +241,7 @@ export function enrichContentBlocks(contentBlocks) {
|
|
|
111
241
|
* Enrich a single tool_result block with diff data.
|
|
112
242
|
* Best-effort — swallows all errors.
|
|
113
243
|
*/
|
|
114
|
-
function enrichBlock(block, toolName, toolInput) {
|
|
244
|
+
function enrichBlock(block, toolName, toolInput, context, toolUseId) {
|
|
115
245
|
try {
|
|
116
246
|
// Normalize tool names across SDKs (Claude: "Edit", Codex: "edit", etc.)
|
|
117
247
|
const normalized = toolName.toLowerCase();
|
|
@@ -122,7 +252,7 @@ function enrichBlock(block, toolName, toolInput) {
|
|
|
122
252
|
enrichWriteResult(block, toolInput);
|
|
123
253
|
}
|
|
124
254
|
else if (normalized === 'edit_files') {
|
|
125
|
-
enrichEditFilesResult(block, toolInput);
|
|
255
|
+
enrichEditFilesResult(block, toolInput, context, toolUseId);
|
|
126
256
|
}
|
|
127
257
|
}
|
|
128
258
|
catch {
|
|
@@ -234,16 +364,35 @@ function enrichWriteResult(block, input) {
|
|
|
234
364
|
* No old/new content is provided — we reconstruct diffs by comparing
|
|
235
365
|
* the current file (post-edit) against git HEAD.
|
|
236
366
|
*/
|
|
237
|
-
function enrichEditFilesResult(block, input) {
|
|
367
|
+
function enrichEditFilesResult(block, input, context, toolUseId) {
|
|
238
368
|
const changes = input.changes;
|
|
239
369
|
if (!changes || changes.length === 0)
|
|
240
370
|
return;
|
|
371
|
+
const workingDirectory = context?.workingDirectory;
|
|
372
|
+
const snapshotEntry = toolUseId
|
|
373
|
+
? pendingEditFilesSnapshots.get(getSnapshotKey(toolUseId, context))
|
|
374
|
+
: undefined;
|
|
375
|
+
if (toolUseId) {
|
|
376
|
+
pendingEditFilesSnapshots.delete(getSnapshotKey(toolUseId, context));
|
|
377
|
+
}
|
|
378
|
+
const snapshots = snapshotEntry?.snapshots;
|
|
379
|
+
if (snapshots?.length) {
|
|
380
|
+
const snapshotDiffs = enrichFromEditFilesSnapshots(snapshots);
|
|
381
|
+
if (snapshotDiffs.length > 0) {
|
|
382
|
+
block.diff = {
|
|
383
|
+
structuredPatch: snapshotDiffs[0].structuredPatch,
|
|
384
|
+
files: snapshotDiffs,
|
|
385
|
+
};
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
241
389
|
// Find git root once for relative path resolution
|
|
242
390
|
let gitRoot;
|
|
243
391
|
try {
|
|
244
392
|
gitRoot = execSync('git rev-parse --show-toplevel', {
|
|
245
393
|
encoding: 'utf-8',
|
|
246
394
|
timeout: 5000,
|
|
395
|
+
...(workingDirectory ? { cwd: workingDirectory } : {}),
|
|
247
396
|
}).trim();
|
|
248
397
|
}
|
|
249
398
|
catch {
|
|
@@ -253,15 +402,18 @@ function enrichEditFilesResult(block, input) {
|
|
|
253
402
|
for (const change of changes) {
|
|
254
403
|
if (!change.path)
|
|
255
404
|
continue;
|
|
256
|
-
const kind = (change.kind
|
|
405
|
+
const kind = normalizeChangeKind(change.kind);
|
|
257
406
|
const filePath = change.path;
|
|
407
|
+
const resolvedPath = path.isAbsolute(filePath)
|
|
408
|
+
? filePath
|
|
409
|
+
: path.resolve(workingDirectory || gitRoot, filePath);
|
|
258
410
|
try {
|
|
259
411
|
if (kind === 'add') {
|
|
260
412
|
// New file — all additions
|
|
261
|
-
const stat = fs.statSync(
|
|
413
|
+
const stat = fs.statSync(resolvedPath);
|
|
262
414
|
if (stat.size > MAX_FILE_SIZE_BYTES)
|
|
263
415
|
continue;
|
|
264
|
-
const content = fs.readFileSync(
|
|
416
|
+
const content = fs.readFileSync(resolvedPath, 'utf-8');
|
|
265
417
|
const patch = structuredPatch(filePath, filePath, '', content, '', '', {
|
|
266
418
|
context: 0,
|
|
267
419
|
});
|
|
@@ -271,11 +423,12 @@ function enrichEditFilesResult(block, input) {
|
|
|
271
423
|
}
|
|
272
424
|
else if (kind === 'delete') {
|
|
273
425
|
// Deleted file — get old content from git
|
|
274
|
-
const relativePath =
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
426
|
+
const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
|
|
427
|
+
if (!relativePath)
|
|
428
|
+
continue;
|
|
429
|
+
const oldContent = gitShowHeadFile(gitRoot, relativePath);
|
|
430
|
+
if (oldContent === null)
|
|
431
|
+
continue;
|
|
279
432
|
const patch = structuredPatch(filePath, filePath, oldContent, '', '', '', {
|
|
280
433
|
context: CONTEXT_LINES,
|
|
281
434
|
});
|
|
@@ -285,19 +438,15 @@ function enrichEditFilesResult(block, input) {
|
|
|
285
438
|
}
|
|
286
439
|
else {
|
|
287
440
|
// Update — diff git HEAD vs current file
|
|
288
|
-
const stat = fs.statSync(
|
|
441
|
+
const stat = fs.statSync(resolvedPath);
|
|
289
442
|
if (stat.size > MAX_FILE_SIZE_BYTES)
|
|
290
443
|
continue;
|
|
291
|
-
const currentContent = fs.readFileSync(
|
|
292
|
-
const relativePath =
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
timeout: 5000,
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
catch {
|
|
444
|
+
const currentContent = fs.readFileSync(resolvedPath, 'utf-8');
|
|
445
|
+
const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
|
|
446
|
+
if (!relativePath)
|
|
447
|
+
continue;
|
|
448
|
+
const oldContent = gitShowHeadFile(gitRoot, relativePath);
|
|
449
|
+
if (oldContent === null) {
|
|
301
450
|
// File may be new (not in HEAD) — treat as addition
|
|
302
451
|
const patch = structuredPatch(filePath, filePath, '', currentContent, '', '', {
|
|
303
452
|
context: 0,
|
|
@@ -327,3 +476,92 @@ function enrichEditFilesResult(block, input) {
|
|
|
327
476
|
};
|
|
328
477
|
}
|
|
329
478
|
}
|
|
479
|
+
function gitShowHeadFile(gitRoot, relativePath) {
|
|
480
|
+
// Ensure the ref path is safe and uses git's forward-slash separator.
|
|
481
|
+
const normalized = path.posix.normalize(relativePath.split(path.sep).join('/'));
|
|
482
|
+
if (!isSafeRepoRelativePath(normalized)) {
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
485
|
+
try {
|
|
486
|
+
return execFileSync('git', ['show', `HEAD:${normalized}`], {
|
|
487
|
+
encoding: 'utf-8',
|
|
488
|
+
timeout: 5000,
|
|
489
|
+
cwd: gitRoot,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
catch {
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
function normalizeChangeKind(kind) {
|
|
497
|
+
if (kind === 'add' || kind === 'delete' || kind === 'update') {
|
|
498
|
+
return kind;
|
|
499
|
+
}
|
|
500
|
+
return 'update';
|
|
501
|
+
}
|
|
502
|
+
function getSnapshotKey(toolUseId, context) {
|
|
503
|
+
return `${context?.snapshotScope ?? 'global'}:${toolUseId}`;
|
|
504
|
+
}
|
|
505
|
+
function pruneOldestEditFilesSnapshots() {
|
|
506
|
+
if (pendingEditFilesSnapshots.size <= MAX_PENDING_EDIT_FILES_SNAPSHOTS)
|
|
507
|
+
return;
|
|
508
|
+
const overflowCount = pendingEditFilesSnapshots.size - MAX_PENDING_EDIT_FILES_SNAPSHOTS;
|
|
509
|
+
const oldestKeys = [...pendingEditFilesSnapshots.entries()]
|
|
510
|
+
.sort((a, b) => a[1].createdAt - b[1].createdAt)
|
|
511
|
+
.slice(0, overflowCount)
|
|
512
|
+
.map(([key]) => key);
|
|
513
|
+
for (const key of oldestKeys) {
|
|
514
|
+
pendingEditFilesSnapshots.delete(key);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
function enrichFromEditFilesSnapshots(snapshots) {
|
|
518
|
+
const fileDiffs = [];
|
|
519
|
+
for (const snapshot of snapshots) {
|
|
520
|
+
try {
|
|
521
|
+
let afterExists = false;
|
|
522
|
+
let afterContent = '';
|
|
523
|
+
try {
|
|
524
|
+
const stat = fs.statSync(snapshot.absolutePath);
|
|
525
|
+
if (stat.size <= MAX_FILE_SIZE_BYTES) {
|
|
526
|
+
afterContent = fs.readFileSync(snapshot.absolutePath, 'utf-8');
|
|
527
|
+
}
|
|
528
|
+
afterExists = true;
|
|
529
|
+
}
|
|
530
|
+
catch {
|
|
531
|
+
afterExists = false;
|
|
532
|
+
}
|
|
533
|
+
const beforeContent = snapshot.beforeExists ? (snapshot.beforeContent ?? '') : '';
|
|
534
|
+
const beforeForDiff = snapshot.beforeExists ? beforeContent : '';
|
|
535
|
+
const afterForDiff = afterExists ? afterContent : '';
|
|
536
|
+
if (!snapshot.beforeExists && !afterExists)
|
|
537
|
+
continue;
|
|
538
|
+
if (beforeForDiff === afterForDiff)
|
|
539
|
+
continue;
|
|
540
|
+
let resultKind = snapshot.kind;
|
|
541
|
+
if (!snapshot.beforeExists && afterExists) {
|
|
542
|
+
resultKind = 'add';
|
|
543
|
+
}
|
|
544
|
+
else if (snapshot.beforeExists && !afterExists) {
|
|
545
|
+
resultKind = 'delete';
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
resultKind = 'update';
|
|
549
|
+
}
|
|
550
|
+
const patch = structuredPatch(snapshot.path, snapshot.path, beforeForDiff, afterForDiff, '', '', {
|
|
551
|
+
context: resultKind === 'add' ? 0 : CONTEXT_LINES,
|
|
552
|
+
});
|
|
553
|
+
if (patch.hunks.length > 0) {
|
|
554
|
+
fileDiffs.push({
|
|
555
|
+
path: snapshot.path,
|
|
556
|
+
kind: resultKind,
|
|
557
|
+
structuredPatch: patch.hunks,
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
// Best effort — skip files that fail
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
// Keep fallback path in calling method if this yields no diffs.
|
|
566
|
+
return fileDiffs;
|
|
567
|
+
}
|
|
@@ -30,6 +30,12 @@ export interface TasksService {
|
|
|
30
30
|
patch(id: string, data: Partial<any>): Promise<any>;
|
|
31
31
|
emit(event: string, data: unknown): void;
|
|
32
32
|
}
|
|
33
|
+
export interface TasksStreamingService {
|
|
34
|
+
create(data: {
|
|
35
|
+
event: 'tool:start' | 'tool:complete' | 'thinking:chunk';
|
|
36
|
+
data: Record<string, unknown>;
|
|
37
|
+
}): Promise<unknown>;
|
|
38
|
+
}
|
|
33
39
|
/**
|
|
34
40
|
* Service interface for updating sessions via FeathersJS
|
|
35
41
|
* This ensures WebSocket events are emitted when sessions are updated (e.g., permission config)
|
|
@@ -42,13 +48,15 @@ export declare class ClaudeTool implements ITool {
|
|
|
42
48
|
private sessionsRepo?;
|
|
43
49
|
private messagesService?;
|
|
44
50
|
private tasksService?;
|
|
51
|
+
private tasksStreamingService?;
|
|
45
52
|
readonly toolType: "claude-code";
|
|
46
53
|
readonly name = "Claude Code";
|
|
47
54
|
private promptService?;
|
|
48
|
-
constructor(messagesRepo?: MessagesRepository | undefined, sessionsRepo?: SessionRepository | undefined, apiKey?: string, messagesService?: MessagesService | undefined, sessionMCPRepo?: SessionMCPServerRepository, mcpServerRepo?: MCPServerRepository, permissionService?: PermissionService, tasksService?: TasksService | undefined, sessionsService?: SessionsService, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, mcpEnabled?: boolean, _useNativeAuth?: boolean, // Claude supports `claude login` OAuth, but no special handling needed in tool
|
|
55
|
+
constructor(messagesRepo?: MessagesRepository | undefined, sessionsRepo?: SessionRepository | undefined, apiKey?: string, messagesService?: MessagesService | undefined, sessionMCPRepo?: SessionMCPServerRepository, mcpServerRepo?: MCPServerRepository, permissionService?: PermissionService, tasksService?: TasksService | undefined, tasksStreamingService?: TasksStreamingService | undefined, sessionsService?: SessionsService, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, mcpEnabled?: boolean, _useNativeAuth?: boolean, // Claude supports `claude login` OAuth, but no special handling needed in tool
|
|
49
56
|
inputRequestService?: import('../../input-requests/input-request-service').InputRequestService, usersRepo?: import('../../db/feathers-repositories').UsersRepository);
|
|
50
57
|
getCapabilities(): ToolCapabilities;
|
|
51
58
|
checkInstalled(): Promise<boolean>;
|
|
59
|
+
private emitTaskEvent;
|
|
52
60
|
importSession(sessionId: string, options?: ImportOptions): Promise<SessionData>;
|
|
53
61
|
/**
|
|
54
62
|
* Execute a prompt against a session WITH real-time streaming
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,MAAM,EAEZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0E5F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAE3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED,qBAAa,UAAW,YAAW,KAAK;IAOpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IAErB,OAAO,CAAC,eAAe,CAAC;IAIxB,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,15 +70,17 @@ export class ClaudeTool {
|
|
|
70
70
|
sessionsRepo;
|
|
71
71
|
messagesService;
|
|
72
72
|
tasksService;
|
|
73
|
+
tasksStreamingService;
|
|
73
74
|
toolType = 'claude-code';
|
|
74
75
|
name = 'Claude Code';
|
|
75
76
|
promptService;
|
|
76
|
-
constructor(messagesRepo, sessionsRepo, apiKey, messagesService, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, sessionsService, worktreesRepo, reposRepo, mcpEnabled, _useNativeAuth, // Claude supports `claude login` OAuth, but no special handling needed in tool
|
|
77
|
+
constructor(messagesRepo, sessionsRepo, apiKey, messagesService, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, tasksStreamingService, sessionsService, worktreesRepo, reposRepo, mcpEnabled, _useNativeAuth, // Claude supports `claude login` OAuth, but no special handling needed in tool
|
|
77
78
|
inputRequestService, usersRepo) {
|
|
78
79
|
this.messagesRepo = messagesRepo;
|
|
79
80
|
this.sessionsRepo = sessionsRepo;
|
|
80
81
|
this.messagesService = messagesService;
|
|
81
82
|
this.tasksService = tasksService;
|
|
83
|
+
this.tasksStreamingService = tasksStreamingService;
|
|
82
84
|
if (messagesRepo && sessionsRepo) {
|
|
83
85
|
this.promptService = new ClaudePromptService(messagesRepo, sessionsRepo, apiKey, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, sessionsService, worktreesRepo, reposRepo, messagesService, mcpEnabled, inputRequestService, usersRepo);
|
|
84
86
|
}
|
|
@@ -105,6 +107,14 @@ export class ClaudeTool {
|
|
|
105
107
|
return false;
|
|
106
108
|
}
|
|
107
109
|
}
|
|
110
|
+
async emitTaskEvent(event, data) {
|
|
111
|
+
if (this.tasksStreamingService) {
|
|
112
|
+
await this.tasksStreamingService.create({ event, data });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Fallback for environments that don't expose /tasks/streaming.
|
|
116
|
+
this.tasksService?.emit(event, data);
|
|
117
|
+
}
|
|
108
118
|
async importSession(sessionId, options) {
|
|
109
119
|
// Load session using existing transcript parser
|
|
110
120
|
const session = await loadClaudeSession(sessionId, options?.projectDir);
|
|
@@ -240,8 +250,8 @@ export class ClaudeTool {
|
|
|
240
250
|
}
|
|
241
251
|
// Handle tool execution start
|
|
242
252
|
if (event.type === 'tool_start') {
|
|
243
|
-
if (
|
|
244
|
-
this.
|
|
253
|
+
if (taskId) {
|
|
254
|
+
await this.emitTaskEvent('tool:start', {
|
|
245
255
|
task_id: taskId,
|
|
246
256
|
session_id: sessionId,
|
|
247
257
|
tool_use_id: event.toolUseId,
|
|
@@ -251,8 +261,8 @@ export class ClaudeTool {
|
|
|
251
261
|
}
|
|
252
262
|
// Handle tool execution complete
|
|
253
263
|
if (event.type === 'tool_complete') {
|
|
254
|
-
if (
|
|
255
|
-
this.
|
|
264
|
+
if (taskId) {
|
|
265
|
+
await this.emitTaskEvent('tool:complete', {
|
|
256
266
|
task_id: taskId,
|
|
257
267
|
session_id: sessionId,
|
|
258
268
|
tool_use_id: event.toolUseId,
|
|
@@ -305,8 +315,8 @@ export class ClaudeTool {
|
|
|
305
315
|
// Handle thinking partial (streaming)
|
|
306
316
|
if (event.type === 'thinking_partial') {
|
|
307
317
|
// Emit to tasks service for task-level tracking
|
|
308
|
-
if (
|
|
309
|
-
this.
|
|
318
|
+
if (taskId) {
|
|
319
|
+
await this.emitTaskEvent('thinking:chunk', {
|
|
310
320
|
task_id: taskId,
|
|
311
321
|
session_id: sessionId,
|
|
312
322
|
chunk: event.thinkingChunk,
|
|
@@ -11,7 +11,7 @@ import type { NormalizedSdkResponse, RawSdkResponse } from '../../types/sdk-resp
|
|
|
11
11
|
import type { TokenUsage } from '../../types/token-usage.js';
|
|
12
12
|
import { type MessageID, type MessageSource, type PermissionMode, type SessionID, type TaskID } from '../../types.js';
|
|
13
13
|
import type { ITool, StreamingCallbacks, ToolCapabilities } from '../base/index.js';
|
|
14
|
-
import type { MessagesService, TasksService } from '../claude/claude-tool.js';
|
|
14
|
+
import type { MessagesService, TasksService, TasksStreamingService } from '../claude/claude-tool.js';
|
|
15
15
|
interface CodexExecutionResult {
|
|
16
16
|
userMessageId: MessageID;
|
|
17
17
|
assistantMessageIds: MessageID[];
|
|
@@ -20,6 +20,11 @@ interface CodexExecutionResult {
|
|
|
20
20
|
contextWindowLimit?: number;
|
|
21
21
|
model?: string;
|
|
22
22
|
rawSdkResponse?: unknown;
|
|
23
|
+
rawContextUsage?: {
|
|
24
|
+
totalTokens: number;
|
|
25
|
+
maxTokens: number;
|
|
26
|
+
percentage: number;
|
|
27
|
+
};
|
|
23
28
|
wasStopped?: boolean;
|
|
24
29
|
}
|
|
25
30
|
export declare class CodexTool implements ITool {
|
|
@@ -28,12 +33,15 @@ export declare class CodexTool implements ITool {
|
|
|
28
33
|
private promptService?;
|
|
29
34
|
private messagesRepo?;
|
|
30
35
|
private sessionsRepo?;
|
|
36
|
+
private worktreesRepo?;
|
|
31
37
|
private messagesService?;
|
|
32
38
|
private tasksService?;
|
|
33
|
-
|
|
39
|
+
private tasksStreamingService?;
|
|
40
|
+
constructor(messagesRepo?: MessagesRepository, sessionsRepo?: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, apiKey?: string, messagesService?: MessagesService, tasksService?: TasksService, tasksStreamingService?: TasksStreamingService, _useNativeAuth?: boolean, // Codex doesn't have OAuth fallback, but accept for interface consistency
|
|
34
41
|
mcpServerRepo?: MCPServerRepository, usersRepo?: UsersRepository);
|
|
35
42
|
getCapabilities(): ToolCapabilities;
|
|
36
43
|
checkInstalled(): Promise<boolean>;
|
|
44
|
+
private emitTaskEvent;
|
|
37
45
|
/**
|
|
38
46
|
* Execute a prompt against a session WITH real-time streaming
|
|
39
47
|
*
|
|
@@ -103,16 +111,20 @@ export declare class CodexTool implements ITool {
|
|
|
103
111
|
*/
|
|
104
112
|
normalizedSdkResponse(_rawResponse: RawSdkResponse): NormalizedSdkResponse;
|
|
105
113
|
/**
|
|
106
|
-
* Compute
|
|
114
|
+
* Compute context window usage for a Codex session
|
|
107
115
|
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
116
|
+
* Codex SDK usage is reported per turn (not cumulative across tasks).
|
|
117
|
+
* For context occupancy, use input-side tokens only:
|
|
118
|
+
* - usage.input_tokens
|
|
119
|
+
* - usage.cached_input_tokens
|
|
120
|
+
*
|
|
121
|
+
* Output tokens are excluded because they are generated during the turn and
|
|
122
|
+
* are not prompt-side context occupancy.
|
|
111
123
|
*
|
|
112
124
|
* @param sessionId - Session ID to compute context for
|
|
113
125
|
* @param currentTaskId - Optional current task ID (not used for Codex, kept for interface consistency)
|
|
114
126
|
* @param currentRawSdkResponse - Optional raw SDK response from current task (if available in memory)
|
|
115
|
-
* @returns Promise resolving to
|
|
127
|
+
* @returns Promise resolving to context usage in tokens
|
|
116
128
|
*/
|
|
117
129
|
computeContextWindow(sessionId: string, _currentTaskId?: string, currentRawSdkResponse?: unknown): Promise<number>;
|
|
118
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,MAAM,EACZ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"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"}
|