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.
Files changed (346) hide show
  1. package/bin/agor-daemon.js +1 -1
  2. package/dist/cli/base-command.d.ts +1 -1
  3. package/dist/cli/base-command.js +8 -7
  4. package/dist/cli/commands/auth/login.js +2 -2
  5. package/dist/cli/commands/board/add-session.d.ts +1 -1
  6. package/dist/cli/commands/board/add-session.js +15 -17
  7. package/dist/cli/commands/board/clone.d.ts +1 -1
  8. package/dist/cli/commands/board/clone.js +8 -7
  9. package/dist/cli/commands/board/export.d.ts +1 -1
  10. package/dist/cli/commands/board/export.js +8 -7
  11. package/dist/cli/commands/board/import.d.ts +1 -1
  12. package/dist/cli/commands/board/import.js +8 -7
  13. package/dist/cli/commands/board/list.d.ts +1 -1
  14. package/dist/cli/commands/board/list.js +15 -13
  15. package/dist/cli/commands/daemon/logs.js +71 -6
  16. package/dist/cli/commands/daemon/restart.js +43 -6
  17. package/dist/cli/commands/daemon/start.d.ts +6 -0
  18. package/dist/cli/commands/daemon/start.js +208 -133
  19. package/dist/cli/commands/daemon/status.js +5 -2
  20. package/dist/cli/commands/daemon/stop.js +3 -0
  21. package/dist/cli/commands/init.js +1 -1
  22. package/dist/cli/commands/login.js +2 -2
  23. package/dist/cli/commands/mcp/add.d.ts +1 -1
  24. package/dist/cli/commands/mcp/add.js +8 -7
  25. package/dist/cli/commands/mcp/list.d.ts +1 -1
  26. package/dist/cli/commands/mcp/list.js +9 -9
  27. package/dist/cli/commands/mcp/remove.d.ts +1 -1
  28. package/dist/cli/commands/mcp/remove.js +9 -9
  29. package/dist/cli/commands/mcp/show.d.ts +1 -1
  30. package/dist/cli/commands/mcp/show.js +9 -9
  31. package/dist/cli/commands/open.js +2 -2
  32. package/dist/cli/commands/repo/add-local.d.ts +1 -1
  33. package/dist/cli/commands/repo/add-local.js +8 -7
  34. package/dist/cli/commands/repo/add.d.ts +1 -1
  35. package/dist/cli/commands/repo/add.js +9 -8
  36. package/dist/cli/commands/repo/list.d.ts +1 -1
  37. package/dist/cli/commands/repo/list.js +9 -9
  38. package/dist/cli/commands/repo/rm.d.ts +1 -1
  39. package/dist/cli/commands/repo/rm.js +9 -9
  40. package/dist/cli/commands/session/list.d.ts +1 -1
  41. package/dist/cli/commands/session/list.js +9 -10
  42. package/dist/cli/commands/session/load-claude.d.ts +1 -1
  43. package/dist/cli/commands/session/load-claude.js +10 -10
  44. package/dist/cli/commands/user/create.d.ts +1 -1
  45. package/dist/cli/commands/user/create.js +8 -7
  46. package/dist/cli/commands/user/delete.d.ts +1 -1
  47. package/dist/cli/commands/user/delete.js +9 -9
  48. package/dist/cli/commands/user/update.d.ts +1 -1
  49. package/dist/cli/commands/user/update.js +9 -9
  50. package/dist/cli/commands/worktree/add.d.ts +1 -1
  51. package/dist/cli/commands/worktree/add.js +9 -9
  52. package/dist/cli/commands/worktree/archive.d.ts +1 -1
  53. package/dist/cli/commands/worktree/archive.js +10 -10
  54. package/dist/cli/commands/worktree/cd.d.ts +1 -1
  55. package/dist/cli/commands/worktree/cd.js +8 -7
  56. package/dist/cli/commands/worktree/env/restart.d.ts +1 -1
  57. package/dist/cli/commands/worktree/env/restart.js +9 -8
  58. package/dist/cli/commands/worktree/env/start.d.ts +1 -1
  59. package/dist/cli/commands/worktree/env/start.js +9 -8
  60. package/dist/cli/commands/worktree/env/status.d.ts +1 -1
  61. package/dist/cli/commands/worktree/env/status.js +9 -8
  62. package/dist/cli/commands/worktree/env/stop.d.ts +1 -1
  63. package/dist/cli/commands/worktree/env/stop.js +9 -8
  64. package/dist/cli/commands/worktree/list.d.ts +1 -1
  65. package/dist/cli/commands/worktree/list.js +12 -15
  66. package/dist/cli/commands/worktree/rm.d.ts +1 -1
  67. package/dist/cli/commands/worktree/rm.js +10 -10
  68. package/dist/cli/commands/worktree/show.d.ts +1 -1
  69. package/dist/cli/commands/worktree/show.js +10 -10
  70. package/dist/cli/commands/worktree/unarchive.d.ts +1 -1
  71. package/dist/cli/commands/worktree/unarchive.js +10 -10
  72. package/dist/cli/commands/worktree/update.d.ts +1 -1
  73. package/dist/cli/commands/worktree/update.js +9 -8
  74. package/dist/cli/lib/context.d.ts +7 -1
  75. package/dist/cli/lib/context.js +13 -0
  76. package/dist/cli/lib/daemon-manager.d.ts +15 -2
  77. package/dist/cli/lib/daemon-manager.js +106 -7
  78. package/dist/cli/lib/daemon-manager.test.d.ts +2 -0
  79. package/dist/cli/lib/daemon-manager.test.js +17355 -0
  80. package/dist/cli/lib/help.js +2 -2
  81. package/dist/core/{agentic-tool-1L19ixPC.d.ts → agentic-tool-B6RT-ZX5.d.ts} +1 -1
  82. package/dist/core/{agentic-tool-3oiAj9Lg.d.cts → agentic-tool-Cs4nK-CC.d.cts} +1 -1
  83. package/dist/core/api/index.cjs +90 -4
  84. package/dist/core/api/index.d.cts +61 -18
  85. package/dist/core/api/index.d.ts +61 -18
  86. package/dist/core/api/index.js +88 -3
  87. package/dist/core/{artifact-B5MFR79G.d.ts → artifact-CIQzxjNP.d.ts} +2 -2
  88. package/dist/core/{artifact-Bi-1jifF.d.cts → artifact-DaHQPZVX.d.cts} +2 -2
  89. package/dist/core/{board-B9Xnux_i.d.ts → board-DG--dAS_.d.ts} +2 -2
  90. package/dist/core/{board-CPZGf5wF.d.cts → board-DogjFoWy.d.cts} +2 -2
  91. package/dist/core/{board-comment-BoDqwrnL.d.ts → board-comment-9ORrSlA1.d.ts} +1 -1
  92. package/dist/core/{board-comment-BQKnob6r.d.cts → board-comment-WzJC3SuF.d.cts} +1 -1
  93. package/dist/core/claude/index.cjs +9 -8
  94. package/dist/core/claude/index.d.cts +3 -3
  95. package/dist/core/claude/index.d.ts +3 -3
  96. package/dist/core/claude/index.js +9 -8
  97. package/dist/core/{client-HEOUNaCs.d.ts → client-NFCS0H8T.d.ts} +5 -5
  98. package/dist/core/{client-BC_18M7T.d.cts → client-XpghdMQL.d.cts} +5 -5
  99. package/dist/core/config/browser.d.cts +7 -7
  100. package/dist/core/config/browser.d.ts +7 -7
  101. package/dist/core/config/index.cjs +1 -0
  102. package/dist/core/config/index.d.cts +13 -13
  103. package/dist/core/config/index.d.ts +13 -13
  104. package/dist/core/config/index.js +1 -0
  105. package/dist/core/{config-manager-DK1LMXEc.d.cts → config-manager-BbMvB3Lz.d.cts} +1 -1
  106. package/dist/core/{config-manager-YrO9mG5j.d.ts → config-manager-etFWO6Wo.d.ts} +1 -1
  107. package/dist/core/{config-services-DrHSgUEm.d.ts → config-services-C848cfbD.d.ts} +4 -4
  108. package/dist/core/{config-services-CuhBWSs_.d.cts → config-services-CDhfaNpd.d.cts} +4 -4
  109. package/dist/core/db/index.cjs +13 -10
  110. package/dist/core/db/index.d.cts +16 -16
  111. package/dist/core/db/index.d.ts +16 -16
  112. package/dist/core/db/index.js +13 -10
  113. package/dist/core/db/session-guard.d.cts +8 -8
  114. package/dist/core/db/session-guard.d.ts +8 -8
  115. package/dist/core/environment/variable-resolver.d.cts +2 -2
  116. package/dist/core/environment/variable-resolver.d.ts +2 -2
  117. package/dist/core/{feathers-CzuSOZgY.d.ts → feathers--R3ml98e.d.cts} +12 -4
  118. package/dist/core/{feathers-CYAHFZ05.d.cts → feathers-C8PkF35p.d.ts} +12 -4
  119. package/dist/core/gateway/index.d.cts +5 -5
  120. package/dist/core/gateway/index.d.ts +5 -5
  121. package/dist/core/{gateway-Ci8LcUxK.d.ts → gateway-BYCTTJVJ.d.ts} +4 -4
  122. package/dist/core/{gateway-gHbaS6qt.d.cts → gateway-D5me_jjo.d.cts} +4 -4
  123. package/dist/core/git/index.d.cts +8 -8
  124. package/dist/core/git/index.d.ts +8 -8
  125. package/dist/core/{id-Cv3ntaTJ.d.cts → id-2oR2NdLp.d.cts} +17 -1
  126. package/dist/core/{id-Cv3ntaTJ.d.ts → id-2oR2NdLp.d.ts} +17 -1
  127. package/dist/core/index.cjs +95 -4
  128. package/dist/core/index.d.cts +19 -19
  129. package/dist/core/index.d.ts +19 -19
  130. package/dist/core/index.js +93 -4
  131. package/dist/core/mcp/index.d.cts +2 -2
  132. package/dist/core/mcp/index.d.ts +2 -2
  133. package/dist/core/{mcp-VhU-PMHo.d.ts → mcp-D7eTnVUO.d.ts} +1 -1
  134. package/dist/core/{mcp-CtC1DFEm.d.cts → mcp-DUrvGUDS.d.cts} +1 -1
  135. package/dist/core/{message-CbD99EwO.d.cts → message-BbDSJvyl.d.cts} +1 -1
  136. package/dist/core/{message-Cwhx2ItQ.d.ts → message-C4Bb-L6c.d.ts} +1 -1
  137. package/dist/core/permissions/index.d.cts +2 -2
  138. package/dist/core/permissions/index.d.ts +2 -2
  139. package/dist/core/{repo-j12tCmyK.d.ts → repo-DaP4omZL.d.ts} +1 -1
  140. package/dist/core/{repo-CcvhnJDf.d.cts → repo-zg1xnWQQ.d.cts} +1 -1
  141. package/dist/core/seed/index.cjs +13 -10
  142. package/dist/core/seed/index.d.cts +1 -1
  143. package/dist/core/seed/index.d.ts +1 -1
  144. package/dist/core/seed/index.js +13 -10
  145. package/dist/core/{session-DEU5FS0N.d.cts → session-C7mvs-rD.d.cts} +2 -2
  146. package/dist/core/{session-Bw8_FN2l.d.ts → session-elEYFVev.d.ts} +2 -2
  147. package/dist/core/{session-guard-CJ7sfOF1.d.ts → session-guard-D7hUa4D2.d.ts} +3 -3
  148. package/dist/core/{session-guard-BjHxMpvV.d.cts → session-guard-DOQgVFL6.d.cts} +3 -3
  149. package/dist/core/{task-CKHC1gPj.d.ts → task-C8SPRSHg.d.ts} +8 -1
  150. package/dist/core/{task-DCPYEXlG.d.cts → task-DJMxZTv4.d.cts} +8 -1
  151. package/dist/core/templates/session-context.d.cts +5 -5
  152. package/dist/core/templates/session-context.d.ts +5 -5
  153. package/dist/core/tools/mcp/jwt-auth.d.cts +2 -2
  154. package/dist/core/tools/mcp/jwt-auth.d.ts +2 -2
  155. package/dist/core/types/index.cjs +7 -0
  156. package/dist/core/types/index.d.cts +16 -16
  157. package/dist/core/types/index.d.ts +16 -16
  158. package/dist/core/types/index.js +6 -0
  159. package/dist/core/{types-BE6DTpRe.d.cts → types-BQRGoDkg.d.cts} +1 -1
  160. package/dist/core/{types-BvYoeNhO.d.ts → types-CvXKxTNP.d.ts} +1 -1
  161. package/dist/core/unix/index.cjs +5 -2
  162. package/dist/core/unix/index.d.cts +8 -8
  163. package/dist/core/unix/index.d.ts +8 -8
  164. package/dist/core/unix/index.js +5 -2
  165. package/dist/core/{user-pO3lB_da.d.ts → user-C9UDwwtA.d.ts} +3 -3
  166. package/dist/core/{user-BpKIlt04.d.cts → user-wScngdUE.d.cts} +3 -3
  167. package/dist/core/utils/board-placement.d.cts +3 -3
  168. package/dist/core/utils/board-placement.d.ts +3 -3
  169. package/dist/core/utils/permission-mode-mapper.d.cts +3 -3
  170. package/dist/core/utils/permission-mode-mapper.d.ts +3 -3
  171. package/dist/core/utils/url.cjs +8 -2
  172. package/dist/core/utils/url.d.cts +1 -1
  173. package/dist/core/utils/url.d.ts +1 -1
  174. package/dist/core/utils/url.js +8 -2
  175. package/dist/daemon/index.d.ts +34 -1
  176. package/dist/daemon/index.js +36 -13
  177. package/dist/daemon/main.d.ts +2 -0
  178. package/dist/daemon/main.js +32581 -0
  179. package/dist/daemon/register-routes.js +15 -0
  180. package/dist/daemon/register-services.js +4 -1
  181. package/dist/daemon/startup.d.ts +2 -0
  182. package/dist/daemon/startup.js +8 -4
  183. package/dist/executor/db/feathers-repositories.d.ts +1 -0
  184. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  185. package/dist/executor/db/feathers-repositories.js +1 -0
  186. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  187. package/dist/executor/handlers/sdk/base-executor.js +33 -21
  188. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  189. package/dist/executor/handlers/sdk/claude.js +1 -1
  190. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  191. package/dist/executor/handlers/sdk/codex.js +1 -1
  192. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts +20 -1
  193. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts.map +1 -1
  194. package/dist/executor/sdk-handlers/base/diff-enrichment.js +264 -26
  195. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +9 -1
  196. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  197. package/dist/executor/sdk-handlers/claude/claude-tool.js +17 -7
  198. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +19 -7
  199. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  200. package/dist/executor/sdk-handlers/codex/codex-tool.js +166 -38
  201. package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts +12 -0
  202. package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts.map +1 -0
  203. package/dist/executor/sdk-handlers/codex/context-window-fallback.js +72 -0
  204. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +12 -1
  205. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  206. package/dist/executor/sdk-handlers/codex/prompt-service.js +124 -18
  207. package/dist/executor/sdk-handlers/codex/usage.d.ts +35 -0
  208. package/dist/executor/sdk-handlers/codex/usage.d.ts.map +1 -1
  209. package/dist/executor/sdk-handlers/codex/usage.js +90 -0
  210. package/dist/ui/assets/{_basePickBy-By_woBZB.js → _basePickBy-CQZh_v13.js} +1 -1
  211. package/dist/ui/assets/_basePickBy-CQZh_v13.js.gz +0 -0
  212. package/dist/ui/assets/{_baseUniq-C2jLj-Al.js → _baseUniq-Cgf5LtCM.js} +1 -1
  213. package/dist/ui/assets/_baseUniq-Cgf5LtCM.js.gz +0 -0
  214. package/dist/ui/assets/{arc-DADMFVbt.js → arc-DnTl2a4f.js} +1 -1
  215. package/dist/ui/assets/arc-DnTl2a4f.js.gz +0 -0
  216. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js → architectureDiagram-VXUJARFQ-DZHKQxRL.js} +1 -1
  217. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js.gz → architectureDiagram-VXUJARFQ-DZHKQxRL.js.gz} +0 -0
  218. package/dist/ui/assets/{base-80a1f760-BVsv_T1S.js → base-80a1f760-pDLzaKJY.js} +1 -1
  219. package/dist/ui/assets/{blockDiagram-VD42YOAC-CezN66iB.js → blockDiagram-VD42YOAC-BAOUMLja.js} +1 -1
  220. package/dist/ui/assets/blockDiagram-VD42YOAC-BAOUMLja.js.gz +0 -0
  221. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dze59YuK.js → c4Diagram-YG6GDRKO-C0xcWHxz.js} +1 -1
  222. package/dist/ui/assets/c4Diagram-YG6GDRKO-C0xcWHxz.js.gz +0 -0
  223. package/dist/ui/assets/channel-DpHH4gqH.js +1 -0
  224. package/dist/ui/assets/{chunk-4BX2VUAB-CXL-V_XA.js → chunk-4BX2VUAB-DCYNUaJZ.js} +1 -1
  225. package/dist/ui/assets/{chunk-55IACEB6-CI3h0xTl.js → chunk-55IACEB6-DU3b1X7p.js} +1 -1
  226. package/dist/ui/assets/{chunk-B4BG7PRW-CFohiEqO.js → chunk-B4BG7PRW-BJlNsfTo.js} +1 -1
  227. package/dist/ui/assets/chunk-B4BG7PRW-BJlNsfTo.js.gz +0 -0
  228. package/dist/ui/assets/{chunk-DI55MBZ5-BbF4fGKj.js → chunk-DI55MBZ5-CKQY-IiF.js} +1 -1
  229. package/dist/ui/assets/chunk-DI55MBZ5-CKQY-IiF.js.gz +0 -0
  230. package/dist/ui/assets/{chunk-FMBD7UC4-C5x6cpDg.js → chunk-FMBD7UC4-DmjQ-Dzu.js} +1 -1
  231. package/dist/ui/assets/{chunk-QN33PNHL-CEDiC29y.js → chunk-QN33PNHL-Bps50N51.js} +1 -1
  232. package/dist/ui/assets/{chunk-QZHKN3VN-DPo28cCF.js → chunk-QZHKN3VN-CNDKr6Xh.js} +1 -1
  233. package/dist/ui/assets/{chunk-TZMSLE5B-C94jSlIG.js → chunk-TZMSLE5B-R2Vz5IHZ.js} +1 -1
  234. package/dist/ui/assets/chunk-TZMSLE5B-R2Vz5IHZ.js.gz +0 -0
  235. package/dist/ui/assets/classDiagram-2ON5EDUG-CbDCU4XU.js +1 -0
  236. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CbDCU4XU.js +1 -0
  237. package/dist/ui/assets/clone-DSMLFNzW.js +1 -0
  238. package/dist/ui/assets/{consoleHook-59e792cb-cpS6JVM4.js → consoleHook-59e792cb-MfGBgEJx.js} +1 -1
  239. package/dist/ui/assets/consoleHook-59e792cb-MfGBgEJx.js.gz +0 -0
  240. package/dist/ui/assets/{cose-bilkent-S5V4N54A-CcoEg_Ct.js → cose-bilkent-S5V4N54A-Bkbv_h_w.js} +1 -1
  241. package/dist/ui/assets/cose-bilkent-S5V4N54A-Bkbv_h_w.js.gz +0 -0
  242. package/dist/ui/assets/{dagre-6UL2VRFP-DWAyqs2B.js → dagre-6UL2VRFP-DUoxEnB9.js} +1 -1
  243. package/dist/ui/assets/dagre-6UL2VRFP-DUoxEnB9.js.gz +0 -0
  244. package/dist/ui/assets/{diagram-PSM6KHXK-C7J2MNfc.js → diagram-PSM6KHXK-BUdRu7ma.js} +1 -1
  245. package/dist/ui/assets/diagram-PSM6KHXK-BUdRu7ma.js.gz +0 -0
  246. package/dist/ui/assets/{diagram-QEK2KX5R-6KZjqziN.js → diagram-QEK2KX5R-DEoZ3bpF.js} +1 -1
  247. package/dist/ui/assets/diagram-QEK2KX5R-DEoZ3bpF.js.gz +0 -0
  248. package/dist/ui/assets/{diagram-S2PKOQOG-DIL01325.js → diagram-S2PKOQOG-CxM9wSuL.js} +1 -1
  249. package/dist/ui/assets/diagram-S2PKOQOG-CxM9wSuL.js.gz +0 -0
  250. package/dist/ui/assets/{erDiagram-Q2GNP2WA-D5j4CetG.js → erDiagram-Q2GNP2WA-D5VuZpBE.js} +1 -1
  251. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5VuZpBE.js.gz +0 -0
  252. package/dist/ui/assets/{flowDiagram-NV44I4VS-Bxx2iEi-.js → flowDiagram-NV44I4VS-uuzmVpS4.js} +1 -1
  253. package/dist/ui/assets/flowDiagram-NV44I4VS-uuzmVpS4.js.gz +0 -0
  254. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BtBi1ZfT.js → ganttDiagram-LVOFAZNH-7spsgOUT.js} +1 -1
  255. package/dist/ui/assets/ganttDiagram-LVOFAZNH-7spsgOUT.js.gz +0 -0
  256. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CY1TKvzA.js → gitGraphDiagram-NY62KEGX-DJDE3D90.js} +1 -1
  257. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-DJDE3D90.js.gz +0 -0
  258. package/dist/ui/assets/{graph-DC6eH7AX.js → graph-BmWYHUOg.js} +1 -1
  259. package/dist/ui/assets/graph-BmWYHUOg.js.gz +0 -0
  260. package/dist/ui/assets/{index-599aeaf7-Dh_oObwY.js → index-599aeaf7-C76CG5K3.js} +1 -1
  261. package/dist/ui/assets/index-599aeaf7-C76CG5K3.js.gz +0 -0
  262. package/dist/ui/assets/index-B0lOKf7g.js +4 -0
  263. package/dist/ui/assets/index-B0lOKf7g.js.gz +0 -0
  264. package/dist/ui/assets/{index-DJLnZ-9H.js → index-CMrDOI5G.js} +294 -298
  265. package/dist/ui/assets/index-CMrDOI5G.js.gz +0 -0
  266. package/dist/ui/assets/{index-DQn7RJ8z.js → index-CuMJFr7K.js} +1 -1
  267. package/dist/ui/assets/index-CuMJFr7K.js.gz +0 -0
  268. package/dist/ui/assets/{index-CxWOjjRu.js → index-fQo-B6L6.js} +1 -1
  269. package/dist/ui/assets/index-fQo-B6L6.js.gz +0 -0
  270. package/dist/ui/assets/{infoDiagram-ER5ION4S-COpJ37pc.js → infoDiagram-ER5ION4S--dZLWvYP.js} +1 -1
  271. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CpODBkng.js → journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js} +1 -1
  272. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js.gz +0 -0
  273. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DWShJ5Su.js → kanban-definition-3W4ZIXB7-DoDzQCSc.js} +1 -1
  274. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DoDzQCSc.js.gz +0 -0
  275. package/dist/ui/assets/{layout-ttMTfXMb.js → layout-BmSvKYXZ.js} +1 -1
  276. package/dist/ui/assets/layout-BmSvKYXZ.js.gz +0 -0
  277. package/dist/ui/assets/{linear-DD8VTncp.js → linear-BnPF1K20.js} +1 -1
  278. package/dist/ui/assets/linear-BnPF1K20.js.gz +0 -0
  279. package/dist/ui/assets/{mermaid.core-BlvxruUX.js → mermaid.core-Suk7MkfT.js} +5 -5
  280. package/dist/ui/assets/mermaid.core-Suk7MkfT.js.gz +0 -0
  281. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-CR0ESdqM.js → mindmap-definition-VGOIOE7T-Bj9HZQA9.js} +1 -1
  282. package/dist/ui/assets/mindmap-definition-VGOIOE7T-Bj9HZQA9.js.gz +0 -0
  283. package/dist/ui/assets/{pieDiagram-ADFJNKIX-B94eVYhY.js → pieDiagram-ADFJNKIX-BIcJ5ee8.js} +1 -1
  284. package/dist/ui/assets/pieDiagram-ADFJNKIX-BIcJ5ee8.js.gz +0 -0
  285. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C4tNKfCm.js → quadrantDiagram-AYHSOK5B-CJm5QQ8N.js} +1 -1
  286. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CJm5QQ8N.js.gz +0 -0
  287. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-CuG3A95Q.js → requirementDiagram-UZGBJVZJ-Bg6r943V.js} +1 -1
  288. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bg6r943V.js.gz +0 -0
  289. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BCfc7mLC.js → sankeyDiagram-TZEHDZUN-C2XnZZZp.js} +1 -1
  290. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-C2XnZZZp.js.gz +0 -0
  291. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-D8tVuIkx.js → sequenceDiagram-WL72ISMW-DOg-bBN1.js} +1 -1
  292. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DOg-bBN1.js.gz +0 -0
  293. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-DvM8so2A.js → stateDiagram-FKZM4ZOC-DgZgPM-o.js} +1 -1
  294. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DgZgPM-o.js.gz +0 -0
  295. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-C_0TAQGU.js +1 -0
  296. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CP2O8vqw.js → timeline-definition-IT6M3QCI-CmkWt6nL.js} +1 -1
  297. package/dist/ui/assets/timeline-definition-IT6M3QCI-CmkWt6nL.js.gz +0 -0
  298. package/dist/ui/assets/{treemap-KMMF4GRG-SGJAEegj.js → treemap-KMMF4GRG-CV8wwXTM.js} +1 -1
  299. package/dist/ui/assets/treemap-KMMF4GRG-CV8wwXTM.js.gz +0 -0
  300. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CpwYBSmP.js → xychartDiagram-PRI3JC2R-CvuPvlyn.js} +1 -1
  301. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CvuPvlyn.js.gz +0 -0
  302. package/dist/ui/index.html +1 -1
  303. package/package.json +2 -1
  304. package/dist/ui/assets/_basePickBy-By_woBZB.js.gz +0 -0
  305. package/dist/ui/assets/_baseUniq-C2jLj-Al.js.gz +0 -0
  306. package/dist/ui/assets/arc-DADMFVbt.js.gz +0 -0
  307. package/dist/ui/assets/blockDiagram-VD42YOAC-CezN66iB.js.gz +0 -0
  308. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dze59YuK.js.gz +0 -0
  309. package/dist/ui/assets/channel-B2nSdT47.js +0 -1
  310. package/dist/ui/assets/chunk-B4BG7PRW-CFohiEqO.js.gz +0 -0
  311. package/dist/ui/assets/chunk-DI55MBZ5-BbF4fGKj.js.gz +0 -0
  312. package/dist/ui/assets/chunk-TZMSLE5B-C94jSlIG.js.gz +0 -0
  313. package/dist/ui/assets/classDiagram-2ON5EDUG-lwQJA5v0.js +0 -1
  314. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-lwQJA5v0.js +0 -1
  315. package/dist/ui/assets/clone-DmZ98vg9.js +0 -1
  316. package/dist/ui/assets/consoleHook-59e792cb-cpS6JVM4.js.gz +0 -0
  317. package/dist/ui/assets/cose-bilkent-S5V4N54A-CcoEg_Ct.js.gz +0 -0
  318. package/dist/ui/assets/dagre-6UL2VRFP-DWAyqs2B.js.gz +0 -0
  319. package/dist/ui/assets/diagram-PSM6KHXK-C7J2MNfc.js.gz +0 -0
  320. package/dist/ui/assets/diagram-QEK2KX5R-6KZjqziN.js.gz +0 -0
  321. package/dist/ui/assets/diagram-S2PKOQOG-DIL01325.js.gz +0 -0
  322. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5j4CetG.js.gz +0 -0
  323. package/dist/ui/assets/flowDiagram-NV44I4VS-Bxx2iEi-.js.gz +0 -0
  324. package/dist/ui/assets/ganttDiagram-LVOFAZNH-BtBi1ZfT.js.gz +0 -0
  325. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CY1TKvzA.js.gz +0 -0
  326. package/dist/ui/assets/graph-DC6eH7AX.js.gz +0 -0
  327. package/dist/ui/assets/index-599aeaf7-Dh_oObwY.js.gz +0 -0
  328. package/dist/ui/assets/index-CxWOjjRu.js.gz +0 -0
  329. package/dist/ui/assets/index-DJLnZ-9H.js.gz +0 -0
  330. package/dist/ui/assets/index-DQn7RJ8z.js.gz +0 -0
  331. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CpODBkng.js.gz +0 -0
  332. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DWShJ5Su.js.gz +0 -0
  333. package/dist/ui/assets/layout-ttMTfXMb.js.gz +0 -0
  334. package/dist/ui/assets/linear-DD8VTncp.js.gz +0 -0
  335. package/dist/ui/assets/mermaid.core-BlvxruUX.js.gz +0 -0
  336. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CR0ESdqM.js.gz +0 -0
  337. package/dist/ui/assets/pieDiagram-ADFJNKIX-B94eVYhY.js.gz +0 -0
  338. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C4tNKfCm.js.gz +0 -0
  339. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-CuG3A95Q.js.gz +0 -0
  340. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BCfc7mLC.js.gz +0 -0
  341. package/dist/ui/assets/sequenceDiagram-WL72ISMW-D8tVuIkx.js.gz +0 -0
  342. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DvM8so2A.js.gz +0 -0
  343. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-kQ-gZX7K.js +0 -1
  344. package/dist/ui/assets/timeline-definition-IT6M3QCI-CP2O8vqw.js.gz +0 -0
  345. package/dist/ui/assets/treemap-KMMF4GRG-SGJAEegj.js.gz +0 -0
  346. 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/core/db";
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/core/api";
64
- import { getDaemonUrl } from "@agor/core/config";
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
- this.daemonUrl = await getDaemonUrl();
76
- const running = await isDaemonRunning(this.daemonUrl);
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(this.daemonUrl, apiKey);
86
+ return await createRestClient(daemonUrl, apiKey ?? void 0);
86
87
  }
87
- const client = await createRestClient(this.daemonUrl);
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(`${this.daemonUrl}/health`);
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 sessionsResult = await sessionsService.find({
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)) {
@@ -1,6 +1,6 @@
1
1
  import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
2
  import { BaseCommand } from '../../base-command.js';
3
- import '@agor/core/api';
3
+ import '@agor-live/client';
4
4
  import '@oclif/core';
5
5
 
6
6
  declare class WorktreeUnarchive extends BaseCommand {
@@ -54,14 +54,14 @@ var init_auth = __esm({
54
54
  });
55
55
 
56
56
  // src/commands/worktree/unarchive.ts
57
- import { formatShortId } from "@agor/core/db";
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/core/api";
64
- import { getDaemonUrl } from "@agor/core/config";
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
- this.daemonUrl = await getDaemonUrl();
76
- const running = await isDaemonRunning(this.daemonUrl);
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(this.daemonUrl, apiKey);
86
+ return await createRestClient(daemonUrl, apiKey ?? void 0);
86
87
  }
87
- const client = await createRestClient(this.daemonUrl);
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(`${this.daemonUrl}/health`);
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 sessionsResult = await sessionsService.find({
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`)}`
@@ -1,6 +1,6 @@
1
1
  import * as _oclif_core_interfaces from '@oclif/core/interfaces';
2
2
  import { BaseCommand } from '../../base-command.js';
3
- import '@agor/core/api';
3
+ import '@agor-live/client';
4
4
  import '@oclif/core';
5
5
 
6
6
  declare class WorktreeUpdate extends BaseCommand {
@@ -54,14 +54,14 @@ var init_auth = __esm({
54
54
  });
55
55
 
56
56
  // src/commands/worktree/update.ts
57
- import { formatShortId } from "@agor/core/db";
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/core/api";
64
- import { getDaemonUrl } from "@agor/core/config";
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
- this.daemonUrl = await getDaemonUrl();
76
- const running = await isDaemonRunning(this.daemonUrl);
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(this.daemonUrl, apiKey);
86
+ return await createRestClient(daemonUrl, apiKey ?? void 0);
86
87
  }
87
- const client = await createRestClient(this.daemonUrl);
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(`${this.daemonUrl}/health`);
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 };
@@ -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 = 50) {
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 content = fs.readFileSync(logFile, "utf-8");
97
- const allLines = content.split("\n").filter((line) => line.trim() !== "");
98
- const lastLines = allLines.slice(-lines);
99
- return lastLines.join("\n");
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
  };
@@ -0,0 +1,2 @@
1
+
2
+ export { }