agor-live 0.17.2 → 0.17.3

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 (316) hide show
  1. package/dist/cli/lib/banner.d.ts +1 -1
  2. package/dist/cli/lib/banner.js +1 -1
  3. package/dist/cli/lib/check-migrations.test.js +9627 -9112
  4. package/dist/cli/lib/daemon-manager.test.js +9632 -9117
  5. package/dist/cli/lib/help.js +1 -1
  6. package/dist/core/api/index.d.cts +3 -3
  7. package/dist/core/api/index.d.ts +3 -3
  8. package/dist/core/{board-comment-DIdOJrSF.d.cts → board-comment-CCFVVN7K.d.cts} +0 -2
  9. package/dist/core/{board-comment-3N-jSgsk.d.ts → board-comment-iT3DgZb4.d.ts} +0 -2
  10. package/dist/core/claude/index.cjs +29 -19
  11. package/dist/core/claude/index.d.cts +2 -2
  12. package/dist/core/claude/index.d.ts +2 -2
  13. package/dist/core/claude/index.js +32 -33
  14. package/dist/core/client/index.cjs +49 -0
  15. package/dist/core/client/index.d.cts +7 -7
  16. package/dist/core/client/index.d.ts +7 -7
  17. package/dist/core/client/index.js +46 -0
  18. package/dist/core/{client-B5PyIvNc.d.cts → client-CemqXk0v.d.cts} +116 -100
  19. package/dist/core/{client-C1CsRi19.d.ts → client-uYEOha6g.d.ts} +116 -100
  20. package/dist/core/config/browser.d.cts +3 -3
  21. package/dist/core/config/browser.d.ts +3 -3
  22. package/dist/core/config/index.cjs +84 -41
  23. package/dist/core/config/index.d.cts +59 -17
  24. package/dist/core/config/index.d.ts +59 -17
  25. package/dist/core/config/index.js +86 -55
  26. package/dist/core/{config-manager-TxxjFMRd.d.cts → config-manager-B8TP9Kz0.d.cts} +12 -3
  27. package/dist/core/{config-manager-DTrsj6G3.d.ts → config-manager-CDEB0FY4.d.ts} +12 -3
  28. package/dist/core/{config-services-YEZ4DwCD.d.cts → config-services-CXyQKEK5.d.cts} +1 -1
  29. package/dist/core/{config-services-DcO2GRgh.d.ts → config-services-DhM7_yWn.d.ts} +1 -1
  30. package/dist/core/db/index.cjs +235 -175
  31. package/dist/core/db/index.d.cts +190 -147
  32. package/dist/core/db/index.d.ts +190 -147
  33. package/dist/core/db/index.js +239 -190
  34. package/dist/core/db/session-guard.d.cts +4 -4
  35. package/dist/core/db/session-guard.d.ts +4 -4
  36. package/dist/core/drizzle/postgres/0028_queued_tasks.sql +8 -0
  37. package/dist/core/drizzle/postgres/0030_migrate_queued_messages.sql +24 -0
  38. package/dist/core/drizzle/postgres/0031_restructure_agentic_tool_config.sql +201 -0
  39. package/dist/core/drizzle/postgres/meta/_journal.json +21 -0
  40. package/dist/core/drizzle/sqlite/0039_queued_tasks.sql +13 -0
  41. package/dist/core/drizzle/sqlite/0040_migrate_queued_messages.sql +61 -0
  42. package/dist/core/drizzle/sqlite/0041_restructure_agentic_tool_config.sql +204 -0
  43. package/dist/core/drizzle/sqlite/meta/_journal.json +21 -0
  44. package/dist/core/gateway/index.d.cts +2 -2
  45. package/dist/core/gateway/index.d.ts +2 -2
  46. package/dist/core/{gateway-BnOlAelY.d.cts → gateway-BWq4j_Ll.d.cts} +1 -1
  47. package/dist/core/{gateway-B_4X-v07.d.ts → gateway-C3Jm_akw.d.ts} +1 -1
  48. package/dist/core/git/index.d.cts +4 -4
  49. package/dist/core/git/index.d.ts +4 -4
  50. package/dist/core/index.cjs +474 -201
  51. package/dist/core/index.d.cts +12 -10
  52. package/dist/core/index.d.ts +12 -10
  53. package/dist/core/index.js +473 -216
  54. package/dist/core/lib/feathers-validation.cjs +2 -1
  55. package/dist/core/lib/feathers-validation.d.cts +1 -1
  56. package/dist/core/lib/feathers-validation.d.ts +1 -1
  57. package/dist/core/lib/feathers-validation.js +2 -1
  58. package/dist/core/mcp/index.cjs +26 -16
  59. package/dist/core/mcp/index.js +26 -16
  60. package/dist/core/{message-DinITA7a.d.cts → message-CSWOsdcZ.d.cts} +1 -9
  61. package/dist/core/{message-CHUUP6OS.d.ts → message-DZa8g0s0.d.ts} +1 -9
  62. package/dist/core/models/index.d.cts +3 -73
  63. package/dist/core/models/index.d.ts +3 -73
  64. package/dist/core/package.json +5 -0
  65. package/dist/core/permissions/index.d.cts +1 -1
  66. package/dist/core/permissions/index.d.ts +1 -1
  67. package/dist/core/resolve-config-BcL-Hv8k.d.ts +74 -0
  68. package/dist/core/resolve-config-DTCxuSBx.d.cts +74 -0
  69. package/dist/core/seed/index.cjs +145 -98
  70. package/dist/core/seed/index.js +148 -112
  71. package/dist/core/{session-guard-C0LkDEN7.d.ts → session-guard-BFqVtBoS.d.ts} +1 -1
  72. package/dist/core/{session-guard-kvAx_8Fb.d.cts → session-guard-KHh0cnET.d.cts} +1 -1
  73. package/dist/core/sessions/index.cjs +184 -0
  74. package/dist/core/sessions/index.d.cts +79 -0
  75. package/dist/core/sessions/index.d.ts +79 -0
  76. package/dist/core/sessions/index.js +157 -0
  77. package/dist/core/{task-BLPFCORT.d.ts → task-BHV-YHg1.d.ts} +41 -3
  78. package/dist/core/{task-wht1RJEL.d.cts → task-C2Hy7H6u.d.cts} +41 -3
  79. package/dist/core/templates/session-context.d.cts +1 -1
  80. package/dist/core/templates/session-context.d.ts +1 -1
  81. package/dist/core/tools/mcp/oauth-mcp-transport.cjs +168 -66
  82. package/dist/core/tools/mcp/oauth-mcp-transport.d.cts +92 -16
  83. package/dist/core/tools/mcp/oauth-mcp-transport.d.ts +92 -16
  84. package/dist/core/tools/mcp/oauth-mcp-transport.js +165 -66
  85. package/dist/core/tools/mcp/oauth-refresh.cjs +43 -53
  86. package/dist/core/tools/mcp/oauth-refresh.d.cts +3 -3
  87. package/dist/core/tools/mcp/oauth-refresh.d.ts +3 -3
  88. package/dist/core/tools/mcp/oauth-refresh.js +58 -78
  89. package/dist/core/types/index.cjs +49 -0
  90. package/dist/core/types/index.d.cts +7 -7
  91. package/dist/core/types/index.d.ts +7 -7
  92. package/dist/core/types/index.js +46 -0
  93. package/dist/core/{types-DNqfdt1z.d.cts → types-D4Rl6ZKN.d.cts} +18 -2
  94. package/dist/core/{types-DqPMmTad.d.ts → types-n61iaXub.d.ts} +18 -2
  95. package/dist/core/unix/index.cjs +164 -110
  96. package/dist/core/unix/index.d.cts +7 -8
  97. package/dist/core/unix/index.d.ts +7 -8
  98. package/dist/core/unix/index.js +167 -124
  99. package/dist/core/{user-DkNdeFoz.d.cts → user-CpfkcV2C.d.cts} +139 -13
  100. package/dist/core/{user-BfVWBmXA.d.ts → user-DP-XZMIM.d.ts} +139 -13
  101. package/dist/core/utils/permission-mode-mapper.d.cts +0 -2
  102. package/dist/core/utils/permission-mode-mapper.d.ts +0 -2
  103. package/dist/daemon/index.js +2976 -2791
  104. package/dist/daemon/main.js +2976 -2791
  105. package/dist/daemon/mcp/server.js +177 -134
  106. package/dist/daemon/mcp/tools/analytics.js +19 -5
  107. package/dist/daemon/mcp/tools/artifacts.js +19 -5
  108. package/dist/daemon/mcp/tools/boards.js +19 -5
  109. package/dist/daemon/mcp/tools/card-types.js +19 -5
  110. package/dist/daemon/mcp/tools/cards.js +19 -5
  111. package/dist/daemon/mcp/tools/environment.js +19 -5
  112. package/dist/daemon/mcp/tools/mcp-servers.d.ts +29 -2
  113. package/dist/daemon/mcp/tools/mcp-servers.js +64 -54
  114. package/dist/daemon/mcp/tools/messages.js +19 -5
  115. package/dist/daemon/mcp/tools/repos.js +19 -5
  116. package/dist/daemon/mcp/tools/search.js +19 -5
  117. package/dist/daemon/mcp/tools/sessions.js +175 -53
  118. package/dist/daemon/mcp/tools/tasks.js +19 -5
  119. package/dist/daemon/mcp/tools/users.js +19 -5
  120. package/dist/daemon/mcp/tools/worktrees.js +37 -38
  121. package/dist/daemon/register-hooks.js +52 -1
  122. package/dist/daemon/register-routes.js +436 -424
  123. package/dist/daemon/register-services.js +255 -140
  124. package/dist/daemon/services/config.d.ts +7 -1
  125. package/dist/daemon/services/config.js +3 -2
  126. package/dist/daemon/services/gateway.js +28 -15
  127. package/dist/daemon/services/mcp-servers.d.ts +7 -2
  128. package/dist/daemon/services/repos.js +2 -0
  129. package/dist/daemon/services/sessions.d.ts +1 -1
  130. package/dist/daemon/services/sessions.js +8 -16
  131. package/dist/daemon/services/tasks.js +16 -10
  132. package/dist/daemon/services/terminals.js +2 -0
  133. package/dist/daemon/services/users.d.ts +27 -11
  134. package/dist/daemon/services/users.js +89 -43
  135. package/dist/daemon/services/worktree-owners.js +2 -0
  136. package/dist/daemon/services/worktrees.js +2 -0
  137. package/dist/daemon/setup/index.js +5 -2
  138. package/dist/daemon/setup/socketio.d.ts +10 -1
  139. package/dist/daemon/setup/socketio.js +7 -3
  140. package/dist/daemon/startup.js +13 -1
  141. package/dist/daemon/utils/apply-session-config-defaults.d.ts +54 -0
  142. package/dist/daemon/utils/apply-session-config-defaults.js +46 -0
  143. package/dist/daemon/utils/spawn-executor.js +2 -0
  144. package/dist/daemon/utils/worktree-authorization.d.ts +2 -4
  145. package/dist/executor/commands/zellij.d.ts.map +1 -1
  146. package/dist/executor/commands/zellij.js +2 -2
  147. package/dist/executor/handlers/sdk/base-executor.d.ts +4 -3
  148. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  149. package/dist/executor/handlers/sdk/base-executor.js +11 -5
  150. package/dist/executor/payload-types.d.ts +14 -14
  151. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  152. package/dist/executor/sdk-handlers/claude/claude-tool.js +9 -4
  153. package/dist/executor/sdk-handlers/claude/import/task-extractor.d.ts.map +1 -1
  154. package/dist/executor/sdk-handlers/claude/import/task-extractor.js +0 -5
  155. package/dist/executor/sdk-handlers/claude/message-builder.d.ts +23 -2
  156. package/dist/executor/sdk-handlers/claude/message-builder.d.ts.map +1 -1
  157. package/dist/executor/sdk-handlers/claude/message-builder.js +33 -2
  158. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts +9 -1
  159. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +1 -1
  160. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +12 -0
  161. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  162. package/dist/executor/sdk-handlers/claude/query-builder.js +11 -6
  163. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +0 -5
  164. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  165. package/dist/executor/sdk-handlers/codex/codex-tool.js +9 -24
  166. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +15 -2
  167. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  168. package/dist/executor/sdk-handlers/codex/prompt-service.js +39 -10
  169. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +0 -5
  170. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
  171. package/dist/executor/sdk-handlers/copilot/copilot-tool.js +5 -22
  172. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +0 -5
  173. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
  174. package/dist/executor/sdk-handlers/gemini/gemini-tool.js +9 -24
  175. package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js → CodeEditor.inner-CVLqZBtM.js} +1 -1
  176. package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js.gz → CodeEditor.inner-CVLqZBtM.js.gz} +0 -0
  177. package/dist/ui/assets/{_basePickBy-DfxojsEt.js → _basePickBy-CFq5ES2J.js} +1 -1
  178. package/dist/ui/assets/_basePickBy-CFq5ES2J.js.gz +0 -0
  179. package/dist/ui/assets/{_baseUniq-DWFPJOTC.js → _baseUniq-C4uKBvNt.js} +1 -1
  180. package/dist/ui/assets/_baseUniq-C4uKBvNt.js.gz +0 -0
  181. package/dist/ui/assets/{arc-vMZ_XGSI.js → arc-BnrcXDJJ.js} +1 -1
  182. package/dist/ui/assets/arc-BnrcXDJJ.js.gz +0 -0
  183. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DGpk_uOD.js → architectureDiagram-VXUJARFQ-DD9HD-WR.js} +1 -1
  184. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DD9HD-WR.js.gz +0 -0
  185. package/dist/ui/assets/{base-80a1f760-BsVlOKqO.js → base-80a1f760-BK1VmxWU.js} +1 -1
  186. package/dist/ui/assets/{blockDiagram-VD42YOAC-BkRnxc94.js → blockDiagram-VD42YOAC-LBAckZZe.js} +1 -1
  187. package/dist/ui/assets/blockDiagram-VD42YOAC-LBAckZZe.js.gz +0 -0
  188. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js → c4Diagram-YG6GDRKO-yEdylcYP.js} +1 -1
  189. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js.gz → c4Diagram-YG6GDRKO-yEdylcYP.js.gz} +0 -0
  190. package/dist/ui/assets/channel-CMN-iY3Q.js +1 -0
  191. package/dist/ui/assets/{chunk-4BX2VUAB-C4oVWDo8.js → chunk-4BX2VUAB-IHtzKbmQ.js} +1 -1
  192. package/dist/ui/assets/{chunk-55IACEB6-CsBbTu57.js → chunk-55IACEB6-C4o5tv_F.js} +1 -1
  193. package/dist/ui/assets/{chunk-B4BG7PRW-DtkeCZab.js → chunk-B4BG7PRW-EPkzLvlB.js} +1 -1
  194. package/dist/ui/assets/chunk-B4BG7PRW-EPkzLvlB.js.gz +0 -0
  195. package/dist/ui/assets/{chunk-DI55MBZ5-BQ_asW-1.js → chunk-DI55MBZ5-CW-Bzkzj.js} +1 -1
  196. package/dist/ui/assets/chunk-DI55MBZ5-CW-Bzkzj.js.gz +0 -0
  197. package/dist/ui/assets/{chunk-FMBD7UC4-DAdcLNG-.js → chunk-FMBD7UC4-DvGU02Io.js} +1 -1
  198. package/dist/ui/assets/{chunk-QN33PNHL-Do2zad3m.js → chunk-QN33PNHL-C-PIlz9n.js} +1 -1
  199. package/dist/ui/assets/{chunk-QZHKN3VN-CyhMmSdC.js → chunk-QZHKN3VN-BhpJFm6h.js} +1 -1
  200. package/dist/ui/assets/{chunk-TZMSLE5B-DlPypnIq.js → chunk-TZMSLE5B-Biake8IU.js} +1 -1
  201. package/dist/ui/assets/chunk-TZMSLE5B-Biake8IU.js.gz +0 -0
  202. package/dist/ui/assets/classDiagram-2ON5EDUG-Bz1et8oA.js +1 -0
  203. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-Bz1et8oA.js +1 -0
  204. package/dist/ui/assets/clone-Dxo5sEAf.js +1 -0
  205. package/dist/ui/assets/{consoleHook-59e792cb-DHYIclEd.js → consoleHook-59e792cb-BzEkHWE8.js} +1 -1
  206. package/dist/ui/assets/consoleHook-59e792cb-BzEkHWE8.js.gz +0 -0
  207. package/dist/ui/assets/{cose-bilkent-S5V4N54A-DotJH9qH.js → cose-bilkent-S5V4N54A-vAiVi74s.js} +1 -1
  208. package/dist/ui/assets/cose-bilkent-S5V4N54A-vAiVi74s.js.gz +0 -0
  209. package/dist/ui/assets/{dagre-6UL2VRFP-Btssr8QF.js → dagre-6UL2VRFP-C8w7TshD.js} +1 -1
  210. package/dist/ui/assets/dagre-6UL2VRFP-C8w7TshD.js.gz +0 -0
  211. package/dist/ui/assets/{diagram-PSM6KHXK-D5_Jkog3.js → diagram-PSM6KHXK-CvnjEmtQ.js} +1 -1
  212. package/dist/ui/assets/diagram-PSM6KHXK-CvnjEmtQ.js.gz +0 -0
  213. package/dist/ui/assets/{diagram-QEK2KX5R-DlPEVSL5.js → diagram-QEK2KX5R-D245unng.js} +1 -1
  214. package/dist/ui/assets/diagram-QEK2KX5R-D245unng.js.gz +0 -0
  215. package/dist/ui/assets/{diagram-S2PKOQOG-CjO1k8aG.js → diagram-S2PKOQOG-DgGUHL8Z.js} +1 -1
  216. package/dist/ui/assets/diagram-S2PKOQOG-DgGUHL8Z.js.gz +0 -0
  217. package/dist/ui/assets/{erDiagram-Q2GNP2WA-3cO02-K3.js → erDiagram-Q2GNP2WA-Cf5paK9b.js} +1 -1
  218. package/dist/ui/assets/erDiagram-Q2GNP2WA-Cf5paK9b.js.gz +0 -0
  219. package/dist/ui/assets/{flowDiagram-NV44I4VS-CajTpSxI.js → flowDiagram-NV44I4VS-BJpHmEXV.js} +1 -1
  220. package/dist/ui/assets/flowDiagram-NV44I4VS-BJpHmEXV.js.gz +0 -0
  221. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js → ganttDiagram-LVOFAZNH-zOyTZcXC.js} +1 -1
  222. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js.gz → ganttDiagram-LVOFAZNH-zOyTZcXC.js.gz} +0 -0
  223. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CH16bg-j.js → gitGraphDiagram-NY62KEGX-B0uxwqMv.js} +1 -1
  224. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-B0uxwqMv.js.gz +0 -0
  225. package/dist/ui/assets/{graph-IQoZvE3o.js → graph-NWXc73TO.js} +1 -1
  226. package/dist/ui/assets/graph-NWXc73TO.js.gz +0 -0
  227. package/dist/ui/assets/{index-599aeaf7-RUCkgwsg.js → index-599aeaf7-BKmNqoNF.js} +1 -1
  228. package/dist/ui/assets/index-599aeaf7-BKmNqoNF.js.gz +0 -0
  229. package/dist/ui/assets/{index-B3AvIgqP.js → index-BRYNiHLB.js} +345 -349
  230. package/dist/ui/assets/index-BRYNiHLB.js.gz +0 -0
  231. package/dist/ui/assets/{index-QV5-5yA2.js → index-BX6Xmhes.js} +1 -1
  232. package/dist/ui/assets/index-BX6Xmhes.js.gz +0 -0
  233. package/dist/ui/assets/{index-ChmRuj_T.js → index-W1hIq1uU.js} +1 -1
  234. package/dist/ui/assets/index-W1hIq1uU.js.gz +0 -0
  235. package/dist/ui/assets/{index-C-quzPWC.js → index-ctuok0zf.js} +1 -1
  236. package/dist/ui/assets/index-ctuok0zf.js.gz +0 -0
  237. package/dist/ui/assets/{infoDiagram-ER5ION4S-2e4gZVGT.js → infoDiagram-ER5ION4S-CquCuoTH.js} +1 -1
  238. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-B5bgV3GH.js → journeyDiagram-XKPGCS4Q-B_XkufZ8.js} +1 -1
  239. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B_XkufZ8.js.gz +0 -0
  240. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-Bp-aWRSc.js → kanban-definition-3W4ZIXB7-C2Bo9HkB.js} +1 -1
  241. package/dist/ui/assets/kanban-definition-3W4ZIXB7-C2Bo9HkB.js.gz +0 -0
  242. package/dist/ui/assets/katex-C6wkUDai.css +1 -0
  243. package/dist/ui/assets/{katex-DGRguze2.css.gz → katex-C6wkUDai.css.gz} +0 -0
  244. package/dist/ui/assets/{layout-BH-2XJZq.js → layout-D9A7Uaku.js} +1 -1
  245. package/dist/ui/assets/layout-D9A7Uaku.js.gz +0 -0
  246. package/dist/ui/assets/{linear-DCYXhl_f.js → linear-BJUwJsxE.js} +1 -1
  247. package/dist/ui/assets/linear-BJUwJsxE.js.gz +0 -0
  248. package/dist/ui/assets/{mermaid.core-BAuL6kgQ.js → mermaid.core-DcOEcjcA.js} +5 -5
  249. package/dist/ui/assets/mermaid.core-DcOEcjcA.js.gz +0 -0
  250. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-DpH5N-N0.js → mindmap-definition-VGOIOE7T-BFT1m7BG.js} +1 -1
  251. package/dist/ui/assets/mindmap-definition-VGOIOE7T-BFT1m7BG.js.gz +0 -0
  252. package/dist/ui/assets/{pieDiagram-ADFJNKIX-BB8fBxj1.js → pieDiagram-ADFJNKIX-BFaX1oBV.js} +1 -1
  253. package/dist/ui/assets/pieDiagram-ADFJNKIX-BFaX1oBV.js.gz +0 -0
  254. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-D6oZLdUD.js → quadrantDiagram-AYHSOK5B-DQps5392.js} +1 -1
  255. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DQps5392.js.gz +0 -0
  256. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-B4uGPp8w.js → requirementDiagram-UZGBJVZJ-3EZ5KWEi.js} +1 -1
  257. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-3EZ5KWEi.js.gz +0 -0
  258. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-MXhIjhme.js → sankeyDiagram-TZEHDZUN-D0qcydqq.js} +1 -1
  259. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-D0qcydqq.js.gz +0 -0
  260. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-Cm53TYug.js → sequenceDiagram-WL72ISMW-BCR5gaaN.js} +1 -1
  261. package/dist/ui/assets/sequenceDiagram-WL72ISMW-BCR5gaaN.js.gz +0 -0
  262. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BVuxUkj5.js → stateDiagram-FKZM4ZOC-BvX4FLQ9.js} +1 -1
  263. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BvX4FLQ9.js.gz +0 -0
  264. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CxLDvgTF.js +1 -0
  265. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CMypNiEP.js → timeline-definition-IT6M3QCI-_AWp5LJn.js} +1 -1
  266. package/dist/ui/assets/timeline-definition-IT6M3QCI-_AWp5LJn.js.gz +0 -0
  267. package/dist/ui/assets/{treemap-KMMF4GRG-BEtnV3BT.js → treemap-KMMF4GRG-BZ9FBl5-.js} +1 -1
  268. package/dist/ui/assets/treemap-KMMF4GRG-BZ9FBl5-.js.gz +0 -0
  269. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BnioEYUM.js → xychartDiagram-PRI3JC2R-_wB7yuVd.js} +1 -1
  270. package/dist/ui/assets/xychartDiagram-PRI3JC2R-_wB7yuVd.js.gz +0 -0
  271. package/dist/ui/index.html +1 -1
  272. package/package.json +8 -8
  273. package/dist/ui/assets/_basePickBy-DfxojsEt.js.gz +0 -0
  274. package/dist/ui/assets/_baseUniq-DWFPJOTC.js.gz +0 -0
  275. package/dist/ui/assets/arc-vMZ_XGSI.js.gz +0 -0
  276. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DGpk_uOD.js.gz +0 -0
  277. package/dist/ui/assets/blockDiagram-VD42YOAC-BkRnxc94.js.gz +0 -0
  278. package/dist/ui/assets/channel-B9aI4bYN.js +0 -1
  279. package/dist/ui/assets/chunk-B4BG7PRW-DtkeCZab.js.gz +0 -0
  280. package/dist/ui/assets/chunk-DI55MBZ5-BQ_asW-1.js.gz +0 -0
  281. package/dist/ui/assets/chunk-TZMSLE5B-DlPypnIq.js.gz +0 -0
  282. package/dist/ui/assets/classDiagram-2ON5EDUG-p-68WO4Z.js +0 -1
  283. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-p-68WO4Z.js +0 -1
  284. package/dist/ui/assets/clone-DzK5ogfn.js +0 -1
  285. package/dist/ui/assets/consoleHook-59e792cb-DHYIclEd.js.gz +0 -0
  286. package/dist/ui/assets/cose-bilkent-S5V4N54A-DotJH9qH.js.gz +0 -0
  287. package/dist/ui/assets/dagre-6UL2VRFP-Btssr8QF.js.gz +0 -0
  288. package/dist/ui/assets/diagram-PSM6KHXK-D5_Jkog3.js.gz +0 -0
  289. package/dist/ui/assets/diagram-QEK2KX5R-DlPEVSL5.js.gz +0 -0
  290. package/dist/ui/assets/diagram-S2PKOQOG-CjO1k8aG.js.gz +0 -0
  291. package/dist/ui/assets/erDiagram-Q2GNP2WA-3cO02-K3.js.gz +0 -0
  292. package/dist/ui/assets/flowDiagram-NV44I4VS-CajTpSxI.js.gz +0 -0
  293. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CH16bg-j.js.gz +0 -0
  294. package/dist/ui/assets/graph-IQoZvE3o.js.gz +0 -0
  295. package/dist/ui/assets/index-599aeaf7-RUCkgwsg.js.gz +0 -0
  296. package/dist/ui/assets/index-B3AvIgqP.js.gz +0 -0
  297. package/dist/ui/assets/index-C-quzPWC.js.gz +0 -0
  298. package/dist/ui/assets/index-ChmRuj_T.js.gz +0 -0
  299. package/dist/ui/assets/index-QV5-5yA2.js.gz +0 -0
  300. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B5bgV3GH.js.gz +0 -0
  301. package/dist/ui/assets/kanban-definition-3W4ZIXB7-Bp-aWRSc.js.gz +0 -0
  302. package/dist/ui/assets/katex-DGRguze2.css +0 -1
  303. package/dist/ui/assets/layout-BH-2XJZq.js.gz +0 -0
  304. package/dist/ui/assets/linear-DCYXhl_f.js.gz +0 -0
  305. package/dist/ui/assets/mermaid.core-BAuL6kgQ.js.gz +0 -0
  306. package/dist/ui/assets/mindmap-definition-VGOIOE7T-DpH5N-N0.js.gz +0 -0
  307. package/dist/ui/assets/pieDiagram-ADFJNKIX-BB8fBxj1.js.gz +0 -0
  308. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-D6oZLdUD.js.gz +0 -0
  309. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-B4uGPp8w.js.gz +0 -0
  310. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-MXhIjhme.js.gz +0 -0
  311. package/dist/ui/assets/sequenceDiagram-WL72ISMW-Cm53TYug.js.gz +0 -0
  312. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BVuxUkj5.js.gz +0 -0
  313. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-8Jeww6Dc.js +0 -1
  314. package/dist/ui/assets/timeline-definition-IT6M3QCI-CMypNiEP.js.gz +0 -0
  315. package/dist/ui/assets/treemap-KMMF4GRG-BEtnV3BT.js.gz +0 -0
  316. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BnioEYUM.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,KAAK,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAI5C,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,EAAU,MAAM,gBAAgB,CAAC;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqEvF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,OAAO,+CAA+C,EAAE,mBAAmB,CAAC;IAClG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,eAAe,IAAI,OAAO,CAAC,OAAO,gBAAgB,EAAE,iCAAiC,CAAC,CAAC;IACvF;;;;OAIG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;CAC9C;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,eAAe,CAAC;CAC9B,GACL,OAAO,CAAC;IACT,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB,CAAC,CAghBD"}
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,KAAK,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAI5C,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,EAAU,MAAM,gBAAgB,CAAC;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqEvF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,OAAO,+CAA+C,EAAE,mBAAmB,CAAC;IAClG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,eAAe,IAAI,OAAO,CAAC,OAAO,gBAAgB,EAAE,iCAAiC,CAAC,CAAC;IACvF;;;;OAIG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;CAC9C;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,eAAe,CAAC;CAC9B,GACL,OAAO,CAAC;IACT,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB,CAAC,CAmhBD"}
@@ -220,12 +220,16 @@ export async function setupQuery(sessionId, prompt, deps, options = {}) {
220
220
  // Add canUseTool callback if permission service is available and taskId provided
221
221
  // This enables Agor's custom permission UI (WebSocket-based) when SDK would show a prompt
222
222
  // Fires AFTER SDK checks settings.json - respects user's existing Claude CLI permissions!
223
- // IMPORTANT: Only skip for bypassPermissions (which never asks for permissions)
224
- if (deps.permissionService &&
225
- taskId &&
226
- effectivePermissionMode !== 'bypassPermissions' &&
227
- deps.sessionMCPRepo &&
228
- deps.mcpServerRepo) {
223
+ //
224
+ // We register canUseTool even in `bypassPermissions` mode. AskUserQuestion's tool
225
+ // descriptor sets `requiresUserInteraction: true`, which makes the SDK's permission
226
+ // resolver return `{behavior: "ask", message: "Answer questions?"}` BEFORE checking
227
+ // the bypass-mode shortcut (see @anthropic-ai/claude-agent-sdk 0.2.x). With no
228
+ // canUseTool registered, the SDK's default deny fires and the model receives
229
+ // "Answer questions?" as the tool error — bypassing Agor's input-request UI.
230
+ // The callback itself fast-paths non-AskUserQuestion tools to `allow` when in
231
+ // bypass mode so the rest of bypass semantics are preserved.
232
+ if (deps.permissionService && taskId && deps.sessionMCPRepo && deps.mcpServerRepo) {
229
233
  queryOptions.canUseTool = createCanUseToolCallback(sessionId, taskId, {
230
234
  permissionService: deps.permissionService,
231
235
  inputRequestService: deps.inputRequestService,
@@ -237,6 +241,7 @@ export async function setupQuery(sessionId, prompt, deps, options = {}) {
237
241
  permissionLocks: deps.permissionLocks,
238
242
  mcpServerRepo: deps.mcpServerRepo,
239
243
  sessionMCPRepo: deps.sessionMCPRepo,
244
+ permissionMode: effectivePermissionMode,
240
245
  });
241
246
  console.log(`✅ canUseTool callback added (permission mode: ${effectivePermissionMode})`);
242
247
  console.log(` SDK will check settings.json first, then call Agor UI if needed`);
@@ -57,11 +57,6 @@ export declare class CodexTool implements ITool {
57
57
  * @returns User message ID and array of assistant message IDs
58
58
  */
59
59
  executePromptWithStreaming(sessionId: SessionID, prompt: string, taskId?: TaskID, permissionMode?: PermissionMode, streamingCallbacks?: StreamingCallbacks, abortController?: AbortController, messageSource?: MessageSource): Promise<CodexExecutionResult>;
60
- /**
61
- * Create user message in database
62
- * @private
63
- */
64
- private createUserMessage;
65
60
  /**
66
61
  * Capture and store Codex thread ID for conversation continuity.
67
62
  * Throws if the Codex CLI returned a different thread than the one we asked to resume,
@@ -1 +1 @@
1
- {"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { execSync } from 'node:child_process';
10
10
  import { generateId } from '@agor/core/db';
11
11
  import { MessageRole, } from '../../types.js';
12
12
  import { clearToolInvocationState, enrichContentBlocks, registerToolInvocationStart, } from '../base/diff-enrichment.js';
13
+ import { createUserMessage } from '../claude/message-builder.js';
13
14
  import { DEFAULT_CODEX_MODEL } from './models.js';
14
15
  import { CodexPromptService } from './prompt-service.js';
15
16
  import { extractCodexContextWindowUsage } from './usage.js';
@@ -88,8 +89,10 @@ export class CodexTool {
88
89
  // Get next message index
89
90
  const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
90
91
  let nextIndex = existingMessages.length;
91
- // Create user message
92
- const userMessage = await this.createUserMessage(sessionId, prompt, taskId, nextIndex++, messageSource);
92
+ // Create user message (or reuse the daemon's pre-write — see Alt D in
93
+ // docs/never-lose-prompt-design.md).
94
+ const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
95
+ nextIndex = userMessage.index + 1;
93
96
  // Execute prompt via Codex SDK with streaming
94
97
  const assistantMessageIds = [];
95
98
  let capturedThreadId;
@@ -387,26 +390,6 @@ export class CodexTool {
387
390
  wasStopped,
388
391
  };
389
392
  }
390
- /**
391
- * Create user message in database
392
- * @private
393
- */
394
- async createUserMessage(sessionId, prompt, taskId, nextIndex, messageSource) {
395
- const userMessage = {
396
- message_id: generateId(),
397
- session_id: sessionId,
398
- type: 'user',
399
- role: MessageRole.USER,
400
- index: nextIndex,
401
- timestamp: new Date().toISOString(),
402
- content_preview: prompt.substring(0, 200),
403
- content: prompt,
404
- task_id: taskId,
405
- metadata: messageSource ? { source: messageSource } : undefined,
406
- };
407
- await this.messagesService?.create(userMessage);
408
- return userMessage;
409
- }
410
393
  /**
411
394
  * Capture and store Codex thread ID for conversation continuity.
412
395
  * Throws if the Codex CLI returned a different thread than the one we asked to resume,
@@ -492,8 +475,10 @@ export class CodexTool {
492
475
  // Get next message index
493
476
  const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
494
477
  let nextIndex = existingMessages.length;
495
- // Create user message
496
- const userMessage = await this.createUserMessage(sessionId, prompt, taskId, nextIndex++, messageSource);
478
+ // Create user message (or reuse the daemon's pre-write — see Alt D in
479
+ // docs/never-lose-prompt-design.md).
480
+ const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
481
+ nextIndex = userMessage.index + 1;
497
482
  // Execute prompt via Codex SDK
498
483
  const assistantMessageIds = [];
499
484
  let capturedThreadId;
@@ -102,9 +102,21 @@ export declare class CodexPromptService {
102
102
  private codex;
103
103
  private lastMCPServersHash;
104
104
  private lastApiKey;
105
+ private lastBaseUrl;
105
106
  private stopRequested;
106
107
  private apiKey;
107
108
  private lastCodexHome;
109
+ /**
110
+ * Resolve the per-user custom OpenAI-compatible base URL.
111
+ *
112
+ * Sourced from `process.env.OPENAI_BASE_URL`, which the daemon populates
113
+ * from the user's `agentic_tools.codex.OPENAI_BASE_URL` setting via
114
+ * `createUserProcessEnvironment` (see packages/core/src/config/env-resolver.ts).
115
+ *
116
+ * Empty / unset → returns undefined so the Codex SDK uses its default endpoint.
117
+ * Logged at DEBUG only (could leak internal hostnames).
118
+ */
119
+ private resolveBaseUrl;
108
120
  constructor(_messagesRepo: MessagesRepository, sessionsRepo: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository | undefined, worktreesRepo?: WorktreeRepository | undefined, reposRepo?: RepoRepository | undefined, apiKey?: string, mcpServerRepo?: MCPServerRepository | undefined, usersRepo?: UsersRepository | undefined);
109
121
  /**
110
122
  * Reinitialize Codex SDK to pick up config changes
@@ -118,8 +130,9 @@ export declare class CodexPromptService {
118
130
  * Refresh Codex client with latest API key from config
119
131
  * Ensures hot-reload of credentials from Settings UI
120
132
  *
121
- * IMPORTANT: Only recreates Codex instance if API key actually changed
122
- * This prevents memory leak from spawning multiple Codex CLI processes
133
+ * IMPORTANT: Only recreates Codex instance if API key OR base URL actually
134
+ * changed. This prevents memory leak from spawning multiple Codex CLI
135
+ * processes (issue #133).
123
136
  */
124
137
  private refreshClient;
125
138
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/prompt-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/prompt-service.ts"],"names":[],"mappings":"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"}
@@ -29,9 +29,24 @@ export class CodexPromptService {
29
29
  codex;
30
30
  lastMCPServersHash = null;
31
31
  lastApiKey = null;
32
+ lastBaseUrl = null;
32
33
  stopRequested = new Map();
33
34
  apiKey;
34
35
  lastCodexHome = null;
36
+ /**
37
+ * Resolve the per-user custom OpenAI-compatible base URL.
38
+ *
39
+ * Sourced from `process.env.OPENAI_BASE_URL`, which the daemon populates
40
+ * from the user's `agentic_tools.codex.OPENAI_BASE_URL` setting via
41
+ * `createUserProcessEnvironment` (see packages/core/src/config/env-resolver.ts).
42
+ *
43
+ * Empty / unset → returns undefined so the Codex SDK uses its default endpoint.
44
+ * Logged at DEBUG only (could leak internal hostnames).
45
+ */
46
+ resolveBaseUrl() {
47
+ const raw = process.env.OPENAI_BASE_URL?.trim();
48
+ return raw && raw.length > 0 ? raw : undefined;
49
+ }
35
50
  constructor(_messagesRepo, sessionsRepo, sessionMCPServerRepo, worktreesRepo, reposRepo, apiKey, mcpServerRepo, usersRepo) {
36
51
  this.sessionsRepo = sessionsRepo;
37
52
  this.sessionMCPServerRepo = sessionMCPServerRepo;
@@ -42,13 +57,19 @@ export class CodexPromptService {
42
57
  // Store API key from base-executor (already resolved with proper precedence)
43
58
  this.apiKey = apiKey || '';
44
59
  this.lastApiKey = this.apiKey;
60
+ const baseUrl = this.resolveBaseUrl();
61
+ this.lastBaseUrl = baseUrl ?? null;
45
62
  if (!this.apiKey) {
46
63
  console.warn('⚠️ [Codex] No OPENAI_API_KEY provided — Codex SDK requests will fail with 401. ' +
47
- 'Please configure your API key in Settings > API Keys.');
64
+ 'Please configure your API key in Settings > Codex > Authentication.');
65
+ }
66
+ if (baseUrl) {
67
+ console.debug(`🔗 [Codex] Using custom OPENAI_BASE_URL`);
48
68
  }
49
- // Initialize Codex SDK with resolved API key
69
+ // Initialize Codex SDK with resolved API key + optional custom base URL
50
70
  this.codex = new Codex.Codex({
51
71
  apiKey: this.apiKey,
72
+ ...(baseUrl ? { baseUrl } : {}),
52
73
  });
53
74
  }
54
75
  /**
@@ -61,28 +82,36 @@ export class CodexPromptService {
61
82
  reinitializeCodex() {
62
83
  console.log('🔄 [Codex] Reinitializing SDK to pick up config changes...');
63
84
  // Use the resolved API key from base-executor (no fallback to env needed)
85
+ const baseUrl = this.resolveBaseUrl();
64
86
  this.codex = new Codex.Codex({
65
87
  apiKey: this.apiKey,
88
+ ...(baseUrl ? { baseUrl } : {}),
66
89
  });
67
90
  this.lastApiKey = this.apiKey || null;
91
+ this.lastBaseUrl = baseUrl ?? null;
68
92
  console.log('✅ [Codex] SDK reinitialized');
69
93
  }
70
94
  /**
71
95
  * Refresh Codex client with latest API key from config
72
96
  * Ensures hot-reload of credentials from Settings UI
73
97
  *
74
- * IMPORTANT: Only recreates Codex instance if API key actually changed
75
- * This prevents memory leak from spawning multiple Codex CLI processes
98
+ * IMPORTANT: Only recreates Codex instance if API key OR base URL actually
99
+ * changed. This prevents memory leak from spawning multiple Codex CLI
100
+ * processes (issue #133).
76
101
  */
77
102
  refreshClient(currentApiKey) {
78
- // Only recreate if API key changed (prevents memory leak - issue #133)
79
- if (this.lastApiKey !== currentApiKey) {
80
- console.log('🔄 [Codex] API key changed, reinitializing SDK...');
103
+ const currentBaseUrl = this.resolveBaseUrl();
104
+ const baseUrlChanged = (this.lastBaseUrl ?? null) !== (currentBaseUrl ?? null);
105
+ // Only recreate if API key OR base URL changed (prevents memory leak - issue #133)
106
+ if (this.lastApiKey !== currentApiKey || baseUrlChanged) {
107
+ console.log(`🔄 [Codex] ${this.lastApiKey !== currentApiKey ? 'API key' : 'Base URL'} changed, reinitializing SDK...`);
81
108
  this.codex = new Codex.Codex({
82
109
  apiKey: currentApiKey,
110
+ ...(currentBaseUrl ? { baseUrl: currentBaseUrl } : {}),
83
111
  });
84
112
  this.lastApiKey = currentApiKey;
85
- console.log('✅ [Codex] SDK reinitialized with new API key');
113
+ this.lastBaseUrl = currentBaseUrl ?? null;
114
+ console.log('✅ [Codex] SDK reinitialized');
86
115
  }
87
116
  }
88
117
  /**
@@ -770,8 +799,8 @@ export class CodexPromptService {
770
799
  if (errorMessage.includes('401') || errorMessage.includes('Unauthorized')) {
771
800
  const isEmptyKey = errorMessage.includes('Missing bearer');
772
801
  const guidance = isEmptyKey
773
- ? 'No OPENAI_API_KEY is configured. Please add your API key in Settings > API Keys.'
774
- : 'Your OPENAI_API_KEY may be invalid or expired. Please check Settings > API Keys.';
802
+ ? 'No OPENAI_API_KEY is configured. Please add your API key in Settings > Codex > Authentication.'
803
+ : 'Your OPENAI_API_KEY may be invalid or expired. Please check Settings > Codex > Authentication.';
775
804
  console.error(`❌ [Codex] Authentication failed for session ${sessionId.substring(0, 8)}: ${guidance}`);
776
805
  throw new Error(`Codex authentication failed: ${guidance}`);
777
806
  }
@@ -46,11 +46,6 @@ export declare class CopilotTool implements ITool {
46
46
  * Calls streamingCallbacks during message generation for real-time UI updates.
47
47
  */
48
48
  executePromptWithStreaming(sessionId: SessionID, prompt: string, taskId?: TaskID, permissionMode?: PermissionMode, streamingCallbacks?: StreamingCallbacks, abortController?: AbortController, messageSource?: MessageSource): Promise<CopilotExecutionResult>;
49
- /**
50
- * Create user message in database
51
- * @private
52
- */
53
- private createUserMessage;
54
49
  /**
55
50
  * Capture and store Copilot SDK session ID for conversation continuity
56
51
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/copilot/copilot-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/copilot/copilot-tool.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import { generateId } from '@agor/core/db';
15
15
  import { MessageRole, } from '../../types.js';
16
+ import { createUserMessage } from '../claude/message-builder.js';
16
17
  import { DEFAULT_COPILOT_MODEL } from './models.js';
17
18
  import { CopilotPromptService } from './prompt-service.js';
18
19
  export class CopilotTool {
@@ -71,8 +72,10 @@ export class CopilotTool {
71
72
  // Get next message index
72
73
  const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
73
74
  let nextIndex = existingMessages.length;
74
- // Create user message
75
- const userMessage = await this.createUserMessage(sessionId, prompt, taskId, nextIndex++, messageSource);
75
+ // Create user message (or reuse the daemon's pre-write — see Alt D in
76
+ // docs/never-lose-prompt-design.md).
77
+ const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
78
+ nextIndex = userMessage.index + 1;
76
79
  // Execute prompt via Copilot SDK with streaming
77
80
  const assistantMessageIds = [];
78
81
  let capturedSessionId;
@@ -191,26 +194,6 @@ export class CopilotTool {
191
194
  wasStopped,
192
195
  };
193
196
  }
194
- /**
195
- * Create user message in database
196
- * @private
197
- */
198
- async createUserMessage(sessionId, prompt, taskId, nextIndex, messageSource) {
199
- const userMessage = {
200
- message_id: generateId(),
201
- session_id: sessionId,
202
- type: 'user',
203
- role: MessageRole.USER,
204
- index: nextIndex,
205
- timestamp: new Date().toISOString(),
206
- content_preview: prompt.substring(0, 200),
207
- content: prompt,
208
- task_id: taskId,
209
- metadata: messageSource ? { source: messageSource } : undefined,
210
- };
211
- await this.messagesService?.create(userMessage);
212
- return userMessage;
213
- }
214
197
  /**
215
198
  * Capture and store Copilot SDK session ID for conversation continuity
216
199
  * @private
@@ -49,11 +49,6 @@ export declare class GeminiTool implements ITool {
49
49
  * @returns User message ID and array of assistant message IDs
50
50
  */
51
51
  executePromptWithStreaming(sessionId: SessionID, prompt: string, taskId?: TaskID, permissionMode?: PermissionMode, streamingCallbacks?: StreamingCallbacks, abortController?: AbortController, messageSource?: MessageSource): Promise<GeminiExecutionResult>;
52
- /**
53
- * Create user message in database
54
- * @private
55
- */
56
- private createUserMessage;
57
52
  /**
58
53
  * Create complete assistant message in database
59
54
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/gemini/gemini-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/gemini/gemini-tool.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { execSync } from 'node:child_process';
13
13
  import { generateId } from '@agor/core/db';
14
14
  import { MessageRole, } from '../../types.js';
15
15
  import { enrichContentBlocks } from '../base/diff-enrichment.js';
16
+ import { createUserMessage } from '../claude/message-builder.js';
16
17
  import { DEFAULT_GEMINI_MODEL } from './models.js';
17
18
  import { GeminiPromptService } from './prompt-service.js';
18
19
  export class GeminiTool {
@@ -75,8 +76,10 @@ export class GeminiTool {
75
76
  // Get next message index
76
77
  const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
77
78
  let nextIndex = existingMessages.length;
78
- // Create user message
79
- const userMessage = await this.createUserMessage(sessionId, prompt, taskId, nextIndex++, messageSource);
79
+ // Create user message (or reuse the daemon's pre-write — see Alt D in
80
+ // docs/never-lose-prompt-design.md).
81
+ const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
82
+ nextIndex = userMessage.index + 1;
80
83
  // Execute prompt via Gemini SDK with streaming
81
84
  const assistantMessageIds = [];
82
85
  let resolvedModel;
@@ -159,26 +162,6 @@ export class GeminiTool {
159
162
  rawSdkResponse,
160
163
  };
161
164
  }
162
- /**
163
- * Create user message in database
164
- * @private
165
- */
166
- async createUserMessage(sessionId, prompt, taskId, nextIndex, messageSource) {
167
- const userMessage = {
168
- message_id: generateId(),
169
- session_id: sessionId,
170
- type: 'user',
171
- role: MessageRole.USER,
172
- index: nextIndex,
173
- timestamp: new Date().toISOString(),
174
- content_preview: prompt.substring(0, 200),
175
- content: prompt,
176
- task_id: taskId,
177
- metadata: messageSource ? { source: messageSource } : undefined,
178
- };
179
- await this.messagesService?.create(userMessage);
180
- return userMessage;
181
- }
182
165
  /**
183
166
  * Create complete assistant message in database
184
167
  * @private
@@ -235,8 +218,10 @@ export class GeminiTool {
235
218
  // Get next message index
236
219
  const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
237
220
  let nextIndex = existingMessages.length;
238
- // Create user message
239
- const userMessage = await this.createUserMessage(sessionId, prompt, taskId, nextIndex++, messageSource);
221
+ // Create user message (or reuse the daemon's pre-write — see Alt D in
222
+ // docs/never-lose-prompt-design.md).
223
+ const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
224
+ nextIndex = userMessage.index + 1;
240
225
  // Execute prompt via Gemini SDK
241
226
  const assistantMessageIds = [];
242
227
  let resolvedModel;