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
|
@@ -54,14 +54,14 @@ var init_auth = __esm({
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
// src/commands/worktree/show.ts
|
|
57
|
-
import { formatShortId } from "@agor/
|
|
57
|
+
import { formatShortId } from "@agor-live/client";
|
|
58
58
|
import { Args } from "@oclif/core";
|
|
59
59
|
import chalk2 from "chalk";
|
|
60
60
|
|
|
61
61
|
// src/base-command.ts
|
|
62
62
|
init_auth();
|
|
63
|
-
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor/
|
|
64
|
-
import { getDaemonUrl } from "@agor/
|
|
63
|
+
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor-live/client";
|
|
64
|
+
import { getDaemonUrl } from "@agor-live/client/config";
|
|
65
65
|
import { Command } from "@oclif/core";
|
|
66
66
|
import chalk from "chalk";
|
|
67
67
|
var BaseCommand = class extends Command {
|
|
@@ -72,8 +72,9 @@ var BaseCommand = class extends Command {
|
|
|
72
72
|
* @returns Feathers client instance
|
|
73
73
|
*/
|
|
74
74
|
async connectToDaemon() {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const daemonUrl = await getDaemonUrl();
|
|
76
|
+
this.daemonUrl = daemonUrl;
|
|
77
|
+
const running = await isDaemonRunning(daemonUrl);
|
|
77
78
|
if (!running) {
|
|
78
79
|
this.log(
|
|
79
80
|
chalk.red("\u2717 Daemon not running") + "\n\n" + chalk.bold("To start the daemon:") + "\n " + chalk.cyan("cd apps/agor-daemon && pnpm dev") + "\n\n" + chalk.bold("To configure daemon URL:") + "\n " + chalk.cyan("agor config set daemon.url <url>") + "\n " + chalk.gray(`Current: ${this.daemonUrl}`)
|
|
@@ -82,9 +83,9 @@ var BaseCommand = class extends Command {
|
|
|
82
83
|
}
|
|
83
84
|
const apiKey = getApiKeyFromEnv();
|
|
84
85
|
if (apiKey) {
|
|
85
|
-
return await createRestClient(
|
|
86
|
+
return await createRestClient(daemonUrl, apiKey ?? void 0);
|
|
86
87
|
}
|
|
87
|
-
const client = await createRestClient(
|
|
88
|
+
const client = await createRestClient(daemonUrl);
|
|
88
89
|
const storedAuth = await loadToken();
|
|
89
90
|
if (storedAuth) {
|
|
90
91
|
try {
|
|
@@ -101,7 +102,7 @@ var BaseCommand = class extends Command {
|
|
|
101
102
|
}
|
|
102
103
|
} else {
|
|
103
104
|
try {
|
|
104
|
-
const response = await fetch(`${
|
|
105
|
+
const response = await fetch(`${daemonUrl}/health`);
|
|
105
106
|
const health = await response.json();
|
|
106
107
|
if (health.auth?.requireAuth) {
|
|
107
108
|
this.error(
|
|
@@ -214,10 +215,9 @@ var WorktreeShow = class _WorktreeShow extends BaseCommand {
|
|
|
214
215
|
this.log(chalk2.bold("Sessions:"));
|
|
215
216
|
const sessionsService = client.service("sessions");
|
|
216
217
|
try {
|
|
217
|
-
const
|
|
218
|
+
const allSessions = await sessionsService.findAll({
|
|
218
219
|
query: { worktree_id: worktree.worktree_id, $limit: 1e4 }
|
|
219
220
|
});
|
|
220
|
-
const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
|
|
221
221
|
if (allSessions.length > 0) {
|
|
222
222
|
this.log(` ${chalk2.cyan(allSessions.length.toString())} session(s)`);
|
|
223
223
|
for (const session of allSessions.slice(0, 5)) {
|
|
@@ -54,14 +54,14 @@ var init_auth = __esm({
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
// src/commands/worktree/unarchive.ts
|
|
57
|
-
import { formatShortId } from "@agor/
|
|
57
|
+
import { formatShortId } from "@agor-live/client";
|
|
58
58
|
import { Args, Flags } from "@oclif/core";
|
|
59
59
|
import chalk2 from "chalk";
|
|
60
60
|
|
|
61
61
|
// src/base-command.ts
|
|
62
62
|
init_auth();
|
|
63
|
-
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor/
|
|
64
|
-
import { getDaemonUrl } from "@agor/
|
|
63
|
+
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor-live/client";
|
|
64
|
+
import { getDaemonUrl } from "@agor-live/client/config";
|
|
65
65
|
import { Command } from "@oclif/core";
|
|
66
66
|
import chalk from "chalk";
|
|
67
67
|
var BaseCommand = class extends Command {
|
|
@@ -72,8 +72,9 @@ var BaseCommand = class extends Command {
|
|
|
72
72
|
* @returns Feathers client instance
|
|
73
73
|
*/
|
|
74
74
|
async connectToDaemon() {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const daemonUrl = await getDaemonUrl();
|
|
76
|
+
this.daemonUrl = daemonUrl;
|
|
77
|
+
const running = await isDaemonRunning(daemonUrl);
|
|
77
78
|
if (!running) {
|
|
78
79
|
this.log(
|
|
79
80
|
chalk.red("\u2717 Daemon not running") + "\n\n" + chalk.bold("To start the daemon:") + "\n " + chalk.cyan("cd apps/agor-daemon && pnpm dev") + "\n\n" + chalk.bold("To configure daemon URL:") + "\n " + chalk.cyan("agor config set daemon.url <url>") + "\n " + chalk.gray(`Current: ${this.daemonUrl}`)
|
|
@@ -82,9 +83,9 @@ var BaseCommand = class extends Command {
|
|
|
82
83
|
}
|
|
83
84
|
const apiKey = getApiKeyFromEnv();
|
|
84
85
|
if (apiKey) {
|
|
85
|
-
return await createRestClient(
|
|
86
|
+
return await createRestClient(daemonUrl, apiKey ?? void 0);
|
|
86
87
|
}
|
|
87
|
-
const client = await createRestClient(
|
|
88
|
+
const client = await createRestClient(daemonUrl);
|
|
88
89
|
const storedAuth = await loadToken();
|
|
89
90
|
if (storedAuth) {
|
|
90
91
|
try {
|
|
@@ -101,7 +102,7 @@ var BaseCommand = class extends Command {
|
|
|
101
102
|
}
|
|
102
103
|
} else {
|
|
103
104
|
try {
|
|
104
|
-
const response = await fetch(`${
|
|
105
|
+
const response = await fetch(`${daemonUrl}/health`);
|
|
105
106
|
const health = await response.json();
|
|
106
107
|
if (health.auth?.requireAuth) {
|
|
107
108
|
this.error(
|
|
@@ -179,7 +180,7 @@ var WorktreeUnarchive = class _WorktreeUnarchive extends BaseCommand {
|
|
|
179
180
|
this.log(` ID: ${chalk2.dim(formatShortId(worktree.worktree_id))}`);
|
|
180
181
|
const sessionsService = client.service("sessions");
|
|
181
182
|
try {
|
|
182
|
-
const
|
|
183
|
+
const allSessions = await sessionsService.findAll({
|
|
183
184
|
query: {
|
|
184
185
|
worktree_id: worktree.worktree_id,
|
|
185
186
|
archived: true,
|
|
@@ -187,7 +188,6 @@ var WorktreeUnarchive = class _WorktreeUnarchive extends BaseCommand {
|
|
|
187
188
|
$limit: 1e4
|
|
188
189
|
}
|
|
189
190
|
});
|
|
190
|
-
const allSessions = Array.isArray(sessionsResult) ? sessionsResult : sessionsResult.data;
|
|
191
191
|
if (allSessions.length > 0) {
|
|
192
192
|
this.log(
|
|
193
193
|
` Sessions: ${chalk2.dim(`${allSessions.length} session(s) will also be unarchived`)}`
|
|
@@ -54,14 +54,14 @@ var init_auth = __esm({
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
// src/commands/worktree/update.ts
|
|
57
|
-
import { formatShortId } from "@agor/
|
|
57
|
+
import { formatShortId } from "@agor-live/client";
|
|
58
58
|
import { Args, Flags } from "@oclif/core";
|
|
59
59
|
import chalk2 from "chalk";
|
|
60
60
|
|
|
61
61
|
// src/base-command.ts
|
|
62
62
|
init_auth();
|
|
63
|
-
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor/
|
|
64
|
-
import { getDaemonUrl } from "@agor/
|
|
63
|
+
import { createRestClient, getApiKeyFromEnv, isDaemonRunning } from "@agor-live/client";
|
|
64
|
+
import { getDaemonUrl } from "@agor-live/client/config";
|
|
65
65
|
import { Command } from "@oclif/core";
|
|
66
66
|
import chalk from "chalk";
|
|
67
67
|
var BaseCommand = class extends Command {
|
|
@@ -72,8 +72,9 @@ var BaseCommand = class extends Command {
|
|
|
72
72
|
* @returns Feathers client instance
|
|
73
73
|
*/
|
|
74
74
|
async connectToDaemon() {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const daemonUrl = await getDaemonUrl();
|
|
76
|
+
this.daemonUrl = daemonUrl;
|
|
77
|
+
const running = await isDaemonRunning(daemonUrl);
|
|
77
78
|
if (!running) {
|
|
78
79
|
this.log(
|
|
79
80
|
chalk.red("\u2717 Daemon not running") + "\n\n" + chalk.bold("To start the daemon:") + "\n " + chalk.cyan("cd apps/agor-daemon && pnpm dev") + "\n\n" + chalk.bold("To configure daemon URL:") + "\n " + chalk.cyan("agor config set daemon.url <url>") + "\n " + chalk.gray(`Current: ${this.daemonUrl}`)
|
|
@@ -82,9 +83,9 @@ var BaseCommand = class extends Command {
|
|
|
82
83
|
}
|
|
83
84
|
const apiKey = getApiKeyFromEnv();
|
|
84
85
|
if (apiKey) {
|
|
85
|
-
return await createRestClient(
|
|
86
|
+
return await createRestClient(daemonUrl, apiKey ?? void 0);
|
|
86
87
|
}
|
|
87
|
-
const client = await createRestClient(
|
|
88
|
+
const client = await createRestClient(daemonUrl);
|
|
88
89
|
const storedAuth = await loadToken();
|
|
89
90
|
if (storedAuth) {
|
|
90
91
|
try {
|
|
@@ -101,7 +102,7 @@ var BaseCommand = class extends Command {
|
|
|
101
102
|
}
|
|
102
103
|
} else {
|
|
103
104
|
try {
|
|
104
|
-
const response = await fetch(`${
|
|
105
|
+
const response = await fetch(`${daemonUrl}/health`);
|
|
105
106
|
const health = await response.json();
|
|
106
107
|
if (health.auth?.requireAuth) {
|
|
107
108
|
this.error(
|
|
@@ -17,6 +17,12 @@ declare function isInstalledPackage(): boolean;
|
|
|
17
17
|
* @returns path to daemon binary, or null if in development
|
|
18
18
|
*/
|
|
19
19
|
declare function getDaemonPath(): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Get path to bundled daemon module (library entrypoint for startDaemon import)
|
|
22
|
+
*
|
|
23
|
+
* @returns path to daemon module, or null if in development
|
|
24
|
+
*/
|
|
25
|
+
declare function getDaemonModulePath(): string | null;
|
|
20
26
|
/**
|
|
21
27
|
* Check if running in GitHub Codespaces
|
|
22
28
|
*
|
|
@@ -40,4 +46,4 @@ declare function getUIUrl(): string;
|
|
|
40
46
|
*/
|
|
41
47
|
declare function isAgorInitialized(): Promise<boolean>;
|
|
42
48
|
|
|
43
|
-
export { getDaemonPath, getUIUrl, isAgorInitialized, isCodespaces, isInstalledPackage };
|
|
49
|
+
export { getDaemonModulePath, getDaemonPath, getUIUrl, isAgorInitialized, isCodespaces, isInstalledPackage };
|
package/dist/cli/lib/context.js
CHANGED
|
@@ -9,6 +9,18 @@ function isInstalledPackage() {
|
|
|
9
9
|
return !isInMonorepoSource;
|
|
10
10
|
}
|
|
11
11
|
function getDaemonPath() {
|
|
12
|
+
if (!isInstalledPackage()) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const dirname = typeof __dirname !== "undefined" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const cliDistIndex = dirname.indexOf(`${path.sep}dist${path.sep}cli`);
|
|
17
|
+
if (cliDistIndex === -1) {
|
|
18
|
+
return path.resolve(dirname, "../../daemon/main.js");
|
|
19
|
+
}
|
|
20
|
+
const packageRoot = dirname.substring(0, cliDistIndex);
|
|
21
|
+
return path.join(packageRoot, "dist", "daemon", "main.js");
|
|
22
|
+
}
|
|
23
|
+
function getDaemonModulePath() {
|
|
12
24
|
if (!isInstalledPackage()) {
|
|
13
25
|
return null;
|
|
14
26
|
}
|
|
@@ -51,6 +63,7 @@ async function isAgorInitialized() {
|
|
|
51
63
|
}
|
|
52
64
|
}
|
|
53
65
|
export {
|
|
66
|
+
getDaemonModulePath,
|
|
54
67
|
getDaemonPath,
|
|
55
68
|
getUIUrl,
|
|
56
69
|
isAgorInitialized,
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Handles starting, stopping, and monitoring the daemon process in production mode.
|
|
5
5
|
* Uses PID files and detached processes for background execution.
|
|
6
6
|
*/
|
|
7
|
+
interface DaemonLogRotationOptions {
|
|
8
|
+
maxBytes?: number;
|
|
9
|
+
maxFiles?: number;
|
|
10
|
+
}
|
|
7
11
|
/**
|
|
8
12
|
* Get Agor home directory (~/.agor)
|
|
9
13
|
*/
|
|
@@ -26,10 +30,11 @@ declare function getDaemonPid(): number | null;
|
|
|
26
30
|
* Start daemon in background
|
|
27
31
|
*
|
|
28
32
|
* @param daemonPath - Path to daemon binary
|
|
33
|
+
* @param extraEnv - Additional environment variables for the child process
|
|
29
34
|
* @returns PID of started daemon
|
|
30
35
|
* @throws Error if daemon already running or failed to start
|
|
31
36
|
*/
|
|
32
|
-
declare function startDaemon(daemonPath: string): number;
|
|
37
|
+
declare function startDaemon(daemonPath: string, extraEnv?: Record<string, string>): number;
|
|
33
38
|
/**
|
|
34
39
|
* Stop daemon gracefully
|
|
35
40
|
*
|
|
@@ -40,9 +45,17 @@ declare function stopDaemon(): boolean;
|
|
|
40
45
|
/**
|
|
41
46
|
* Get last N lines from log file
|
|
42
47
|
*
|
|
48
|
+
* Reads from the end of the file with a bounded window to avoid loading
|
|
49
|
+
* arbitrarily large logs into memory.
|
|
50
|
+
*
|
|
43
51
|
* @param lines - Number of lines to read (default: 50)
|
|
44
52
|
* @returns Log content
|
|
45
53
|
*/
|
|
46
54
|
declare function readLogs(lines?: number): string;
|
|
55
|
+
/**
|
|
56
|
+
* Rotate daemon log file if it exceeds configured size.
|
|
57
|
+
* Retains N rotated files: daemon.log.1 ... daemon.log.N
|
|
58
|
+
*/
|
|
59
|
+
declare function rotateDaemonLogIfNeeded(logFile: string, options?: DaemonLogRotationOptions): void;
|
|
47
60
|
|
|
48
|
-
export { getAgorHome, getDaemonPid, getLogFilePath, getPidFilePath, readLogs, startDaemon, stopDaemon };
|
|
61
|
+
export { type DaemonLogRotationOptions, getAgorHome, getDaemonPid, getLogFilePath, getPidFilePath, readLogs, rotateDaemonLogIfNeeded, startDaemon, stopDaemon };
|
|
@@ -3,6 +3,12 @@ import { spawn } from "child_process";
|
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import os from "os";
|
|
5
5
|
import path from "path";
|
|
6
|
+
var DEFAULT_LOG_LINES = 50;
|
|
7
|
+
var MIN_TAIL_READ_BYTES = 64 * 1024;
|
|
8
|
+
var AVG_LOG_LINE_BYTES = 256;
|
|
9
|
+
var MAX_TAIL_READ_BYTES = 8 * 1024 * 1024;
|
|
10
|
+
var DEFAULT_ROTATE_MAX_BYTES = 50 * 1024 * 1024;
|
|
11
|
+
var DEFAULT_ROTATE_MAX_FILES = 5;
|
|
6
12
|
function getAgorHome() {
|
|
7
13
|
return path.join(os.homedir(), ".agor");
|
|
8
14
|
}
|
|
@@ -30,7 +36,7 @@ function getDaemonPid() {
|
|
|
30
36
|
return null;
|
|
31
37
|
}
|
|
32
38
|
}
|
|
33
|
-
function startDaemon(daemonPath) {
|
|
39
|
+
function startDaemon(daemonPath, extraEnv) {
|
|
34
40
|
const existingPid = getDaemonPid();
|
|
35
41
|
if (existingPid !== null) {
|
|
36
42
|
throw new Error(`Daemon already running (PID ${existingPid})`);
|
|
@@ -39,13 +45,19 @@ function startDaemon(daemonPath) {
|
|
|
39
45
|
throw new Error(`Daemon binary not found at: ${daemonPath}`);
|
|
40
46
|
}
|
|
41
47
|
const logFile = getLogFilePath();
|
|
48
|
+
try {
|
|
49
|
+
rotateDaemonLogIfNeeded(logFile);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.warn(`\u26A0 Failed to rotate daemon logs: ${error.message}`);
|
|
52
|
+
}
|
|
42
53
|
const logStream = fs.openSync(logFile, "a");
|
|
43
54
|
const child = spawn("node", [daemonPath], {
|
|
44
55
|
detached: true,
|
|
45
56
|
stdio: ["ignore", logStream, logStream],
|
|
46
57
|
env: {
|
|
47
58
|
...process.env,
|
|
48
|
-
NODE_ENV: "production"
|
|
59
|
+
NODE_ENV: "production",
|
|
60
|
+
...extraEnv
|
|
49
61
|
}
|
|
50
62
|
});
|
|
51
63
|
child.unref();
|
|
@@ -88,15 +100,101 @@ function stopDaemon() {
|
|
|
88
100
|
throw new Error(`Failed to stop daemon: ${error.message}`);
|
|
89
101
|
}
|
|
90
102
|
}
|
|
91
|
-
function readLogs(lines =
|
|
103
|
+
function readLogs(lines = DEFAULT_LOG_LINES) {
|
|
92
104
|
const logFile = getLogFilePath();
|
|
93
105
|
if (!fs.existsSync(logFile)) {
|
|
94
106
|
return "No logs found";
|
|
95
107
|
}
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
const safeLines = sanitizeRequestedLineCount(lines);
|
|
109
|
+
if (safeLines <= 0) {
|
|
110
|
+
return "";
|
|
111
|
+
}
|
|
112
|
+
const fd = fs.openSync(logFile, "r");
|
|
113
|
+
try {
|
|
114
|
+
const fileSize = fs.fstatSync(fd).size;
|
|
115
|
+
if (fileSize <= 0) {
|
|
116
|
+
return "";
|
|
117
|
+
}
|
|
118
|
+
const maxReadableBytes = Math.min(fileSize, MAX_TAIL_READ_BYTES);
|
|
119
|
+
let bytesToRead = Math.min(
|
|
120
|
+
maxReadableBytes,
|
|
121
|
+
Math.max(MIN_TAIL_READ_BYTES, safeLines * AVG_LOG_LINE_BYTES)
|
|
122
|
+
);
|
|
123
|
+
let lastLines = [];
|
|
124
|
+
let truncatedByCap = false;
|
|
125
|
+
while (bytesToRead <= maxReadableBytes) {
|
|
126
|
+
const tailBuffer = readTailBuffer(fd, fileSize, bytesToRead);
|
|
127
|
+
const tailContent = tailBuffer.toString("utf-8").replaceAll("\0", "").replace(/\r\n/g, "\n");
|
|
128
|
+
const allLines = tailContent.split("\n").filter((line) => line.trim() !== "");
|
|
129
|
+
lastLines = allLines.slice(-safeLines);
|
|
130
|
+
if (bytesToRead === maxReadableBytes && fileSize > maxReadableBytes && allLines.length < safeLines) {
|
|
131
|
+
truncatedByCap = true;
|
|
132
|
+
}
|
|
133
|
+
if (allLines.length >= safeLines || bytesToRead === maxReadableBytes) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
bytesToRead = Math.min(maxReadableBytes, bytesToRead * 2);
|
|
137
|
+
}
|
|
138
|
+
const logText = lastLines.join("\n");
|
|
139
|
+
if (!truncatedByCap) {
|
|
140
|
+
return logText;
|
|
141
|
+
}
|
|
142
|
+
const prefix = `[output truncated: scanned last ${formatBytes(maxReadableBytes)} of ${formatBytes(fileSize)}]`;
|
|
143
|
+
return logText.length > 0 ? `${prefix}
|
|
144
|
+
${logText}` : prefix;
|
|
145
|
+
} finally {
|
|
146
|
+
fs.closeSync(fd);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function rotateDaemonLogIfNeeded(logFile, options = {}) {
|
|
150
|
+
if (!fs.existsSync(logFile)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const maxBytes = Math.max(1, Math.floor(options.maxBytes ?? DEFAULT_ROTATE_MAX_BYTES));
|
|
154
|
+
const maxFiles = Math.max(1, Math.floor(options.maxFiles ?? DEFAULT_ROTATE_MAX_FILES));
|
|
155
|
+
const logSize = fs.statSync(logFile).size;
|
|
156
|
+
if (logSize <= maxBytes) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const oldestLog = `${logFile}.${maxFiles}`;
|
|
160
|
+
if (fs.existsSync(oldestLog)) {
|
|
161
|
+
fs.unlinkSync(oldestLog);
|
|
162
|
+
}
|
|
163
|
+
for (let i = maxFiles - 1; i >= 1; i--) {
|
|
164
|
+
const src = `${logFile}.${i}`;
|
|
165
|
+
const dest = `${logFile}.${i + 1}`;
|
|
166
|
+
if (!fs.existsSync(src)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (fs.existsSync(dest)) {
|
|
170
|
+
fs.unlinkSync(dest);
|
|
171
|
+
}
|
|
172
|
+
fs.renameSync(src, dest);
|
|
173
|
+
}
|
|
174
|
+
fs.renameSync(logFile, `${logFile}.1`);
|
|
175
|
+
}
|
|
176
|
+
function sanitizeRequestedLineCount(lines) {
|
|
177
|
+
if (!Number.isFinite(lines)) {
|
|
178
|
+
return DEFAULT_LOG_LINES;
|
|
179
|
+
}
|
|
180
|
+
const parsed = Math.floor(lines);
|
|
181
|
+
return Math.max(0, parsed);
|
|
182
|
+
}
|
|
183
|
+
function readTailBuffer(fd, fileSize, bytesToRead) {
|
|
184
|
+
const readLength = Math.min(bytesToRead, fileSize);
|
|
185
|
+
const start = fileSize - readLength;
|
|
186
|
+
const buffer = Buffer.allocUnsafe(readLength);
|
|
187
|
+
const bytesRead = fs.readSync(fd, buffer, 0, readLength, start);
|
|
188
|
+
return bytesRead === readLength ? buffer : buffer.subarray(0, bytesRead);
|
|
189
|
+
}
|
|
190
|
+
function formatBytes(bytes) {
|
|
191
|
+
if (bytes >= 1024 * 1024) {
|
|
192
|
+
return `${Math.round(bytes / (1024 * 1024) * 10) / 10}MB`;
|
|
193
|
+
}
|
|
194
|
+
if (bytes >= 1024) {
|
|
195
|
+
return `${Math.round(bytes / 1024 * 10) / 10}KB`;
|
|
196
|
+
}
|
|
197
|
+
return `${bytes}B`;
|
|
100
198
|
}
|
|
101
199
|
export {
|
|
102
200
|
getAgorHome,
|
|
@@ -104,6 +202,7 @@ export {
|
|
|
104
202
|
getLogFilePath,
|
|
105
203
|
getPidFilePath,
|
|
106
204
|
readLogs,
|
|
205
|
+
rotateDaemonLogIfNeeded,
|
|
107
206
|
startDaemon,
|
|
108
207
|
stopDaemon
|
|
109
208
|
};
|