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
@@ -421,6 +421,9 @@ function loadConfigSync() {
421
421
  );
422
422
  }
423
423
  }
424
+ function isConfigCredentialKey(key) {
425
+ return CONFIG_CREDENTIAL_KEYS.has(key);
426
+ }
424
427
  function getCredential(key) {
425
428
  try {
426
429
  const config = loadConfigSync();
@@ -516,7 +519,7 @@ async function getReposDirAsync() {
516
519
  async function getWorktreesDirAsync() {
517
520
  return import_node_path.default.join(await getDataHomeAsync(), "worktrees");
518
521
  }
519
- var import_node_fs2, import_promises, import_node_os, import_node_path, import_js_yaml2, PublicBaseUrlNotConfiguredError;
522
+ var import_node_fs2, import_promises, import_node_os, import_node_path, import_js_yaml2, PublicBaseUrlNotConfiguredError, CONFIG_CREDENTIAL_KEYS;
520
523
  var init_config_manager = __esm({
521
524
  "src/config/config-manager.ts"() {
522
525
  "use strict";
@@ -534,6 +537,13 @@ var init_config_manager = __esm({
534
537
  this.name = "PublicBaseUrlNotConfiguredError";
535
538
  }
536
539
  };
540
+ CONFIG_CREDENTIAL_KEYS = /* @__PURE__ */ new Set([
541
+ "ANTHROPIC_API_KEY",
542
+ "ANTHROPIC_AUTH_TOKEN",
543
+ "ANTHROPIC_BASE_URL",
544
+ "OPENAI_API_KEY",
545
+ "GEMINI_API_KEY"
546
+ ]);
537
547
  }
538
548
  });
539
549
 
@@ -993,6 +1003,7 @@ var init_schema_postgres = __esm({
993
1003
  completed_at: t.timestamp("completed_at"),
994
1004
  status: (0, import_pg_core.text)("status", {
995
1005
  enum: [
1006
+ "queued",
996
1007
  "created",
997
1008
  "running",
998
1009
  "stopping",
@@ -1004,6 +1015,8 @@ var init_schema_postgres = __esm({
1004
1015
  "stopped"
1005
1016
  ]
1006
1017
  }).notNull(),
1018
+ // Queue position (lower drains first); only populated for status='queued'
1019
+ queue_position: (0, import_pg_core.integer)("queue_position"),
1007
1020
  // User attribution
1008
1021
  created_by: (0, import_pg_core.varchar)("created_by", { length: 36 }).notNull().default("anonymous"),
1009
1022
  // MD5 of SDK session file at task completion (only populated when stateless_fs_mode is enabled)
@@ -1013,7 +1026,12 @@ var init_schema_postgres = __esm({
1013
1026
  (table) => ({
1014
1027
  sessionIdx: (0, import_pg_core.index)("tasks_session_idx").on(table.session_id),
1015
1028
  statusIdx: (0, import_pg_core.index)("tasks_status_idx").on(table.status),
1016
- createdIdx: (0, import_pg_core.index)("tasks_created_idx").on(table.created_at)
1029
+ createdIdx: (0, import_pg_core.index)("tasks_created_idx").on(table.created_at),
1030
+ queueIdx: (0, import_pg_core.index)("tasks_queue_idx").on(table.session_id, table.status, table.queue_position),
1031
+ // Partial unique index — defense-in-depth for `tasks.createPending` race
1032
+ // serialization. Only QUEUED rows are constrained; CREATED/RUNNING/done
1033
+ // rows have NULL queue_position and are unaffected.
1034
+ queuedPositionUnique: (0, import_pg_core.uniqueIndex)("tasks_queued_position_unique").on(table.session_id, table.queue_position).where(import_drizzle_orm2.sql`${table.status} = 'queued'`)
1017
1035
  })
1018
1036
  );
1019
1037
  serializedSessions = (0, import_pg_core.pgTable)(
@@ -1073,11 +1091,9 @@ var init_schema_postgres = __esm({
1073
1091
  // First 200 chars for list views
1074
1092
  // Parent tool use ID (for nested tool calls - e.g., Task tool spawning Read/Grep)
1075
1093
  parent_tool_use_id: (0, import_pg_core.text)("parent_tool_use_id"),
1076
- // Message queueing fields
1077
- status: (0, import_pg_core.text)("status", { enum: ["queued"] }),
1078
- // 'queued' or null (normal message)
1079
- queue_position: (0, import_pg_core.integer)("queue_position"),
1080
- // Position in queue (1, 2, 3, ...)
1094
+ // NOTE: queueing moved off `messages` and onto `tasks.status='queued'` as
1095
+ // of migration sqlite/0040 (postgres/0030). The legacy `status` and
1096
+ // `queue_position` columns are gone — see `tasks.queue_position` instead.
1081
1097
  // Full data (JSON blob)
1082
1098
  data: t.json("data").$type().notNull()
1083
1099
  },
@@ -1085,8 +1101,7 @@ var init_schema_postgres = __esm({
1085
1101
  // Indexes for efficient lookups
1086
1102
  sessionIdx: (0, import_pg_core.index)("messages_session_id_idx").on(table.session_id),
1087
1103
  taskIdx: (0, import_pg_core.index)("messages_task_id_idx").on(table.task_id),
1088
- sessionIndexIdx: (0, import_pg_core.index)("messages_session_index_idx").on(table.session_id, table.index),
1089
- queueIdx: (0, import_pg_core.index)("messages_queue_idx").on(table.session_id, table.status, table.queue_position)
1104
+ sessionIndexIdx: (0, import_pg_core.index)("messages_session_index_idx").on(table.session_id, table.index)
1090
1105
  })
1091
1106
  );
1092
1107
  boards = (0, import_pg_core.pgTable)(
@@ -1723,6 +1738,7 @@ var init_schema_sqlite = __esm({
1723
1738
  completed_at: t2.timestamp("completed_at"),
1724
1739
  status: (0, import_sqlite_core.text)("status", {
1725
1740
  enum: [
1741
+ "queued",
1726
1742
  "created",
1727
1743
  "running",
1728
1744
  "stopping",
@@ -1734,6 +1750,8 @@ var init_schema_sqlite = __esm({
1734
1750
  "stopped"
1735
1751
  ]
1736
1752
  }).notNull(),
1753
+ // Queue position (lower drains first); only populated for status='queued'
1754
+ queue_position: (0, import_sqlite_core.integer)("queue_position"),
1737
1755
  // User attribution
1738
1756
  created_by: (0, import_sqlite_core.text)("created_by", { length: 36 }).notNull().default("anonymous"),
1739
1757
  // MD5 of SDK session file at task completion (only populated when stateless_fs_mode is enabled)
@@ -1743,7 +1761,12 @@ var init_schema_sqlite = __esm({
1743
1761
  (table) => ({
1744
1762
  sessionIdx: (0, import_sqlite_core.index)("tasks_session_idx").on(table.session_id),
1745
1763
  statusIdx: (0, import_sqlite_core.index)("tasks_status_idx").on(table.status),
1746
- createdIdx: (0, import_sqlite_core.index)("tasks_created_idx").on(table.created_at)
1764
+ createdIdx: (0, import_sqlite_core.index)("tasks_created_idx").on(table.created_at),
1765
+ queueIdx: (0, import_sqlite_core.index)("tasks_queue_idx").on(table.session_id, table.status, table.queue_position),
1766
+ // Partial unique index — defense-in-depth for `tasks.createPending` race
1767
+ // serialization. Only QUEUED rows are constrained; CREATED/RUNNING/done
1768
+ // rows have NULL queue_position and are unaffected.
1769
+ queuedPositionUnique: (0, import_sqlite_core.uniqueIndex)("tasks_queued_position_unique").on(table.session_id, table.queue_position).where(import_drizzle_orm3.sql`${table.status} = 'queued'`)
1747
1770
  })
1748
1771
  );
1749
1772
  serializedSessions2 = (0, import_sqlite_core.sqliteTable)(
@@ -1803,11 +1826,9 @@ var init_schema_sqlite = __esm({
1803
1826
  // First 200 chars for list views
1804
1827
  // Parent tool use ID (for nested tool calls - e.g., Task tool spawning Read/Grep)
1805
1828
  parent_tool_use_id: (0, import_sqlite_core.text)("parent_tool_use_id"),
1806
- // Message queueing fields
1807
- status: (0, import_sqlite_core.text)("status", { enum: ["queued"] }),
1808
- // 'queued' or null (normal message)
1809
- queue_position: (0, import_sqlite_core.integer)("queue_position"),
1810
- // Position in queue (1, 2, 3, ...)
1829
+ // NOTE: queueing moved off `messages` and onto `tasks.status='queued'` as
1830
+ // of migration sqlite/0040 (postgres/0030). The legacy `status` and
1831
+ // `queue_position` columns are gone — see `tasks.queue_position` instead.
1811
1832
  // Full data (JSON blob)
1812
1833
  data: t2.json("data").$type().notNull()
1813
1834
  },
@@ -1815,8 +1836,7 @@ var init_schema_sqlite = __esm({
1815
1836
  // Indexes for efficient lookups
1816
1837
  sessionIdx: (0, import_sqlite_core.index)("messages_session_id_idx").on(table.session_id),
1817
1838
  taskIdx: (0, import_sqlite_core.index)("messages_task_id_idx").on(table.task_id),
1818
- sessionIndexIdx: (0, import_sqlite_core.index)("messages_session_index_idx").on(table.session_id, table.index),
1819
- queueIdx: (0, import_sqlite_core.index)("messages_queue_idx").on(table.session_id, table.status, table.queue_position)
1839
+ sessionIndexIdx: (0, import_sqlite_core.index)("messages_session_index_idx").on(table.session_id, table.index)
1820
1840
  })
1821
1841
  );
1822
1842
  boards2 = (0, import_sqlite_core.sqliteTable)(
@@ -2486,6 +2506,7 @@ __export(config_exports, {
2486
2506
  getWorktreesDir: () => getWorktreesDir,
2487
2507
  getWorktreesDirAsync: () => getWorktreesDirAsync,
2488
2508
  initConfig: () => initConfig,
2509
+ isConfigCredentialKey: () => isConfigCredentialKey,
2489
2510
  isEnvVarAllowed: () => isEnvVarAllowed,
2490
2511
  isUnixImpersonationEnabled: () => isUnixImpersonationEnabled,
2491
2512
  isValid: () => isValid,
@@ -3147,6 +3168,7 @@ var ALLOWED_ENV_VARS = /* @__PURE__ */ new Set([
3147
3168
  "ANTHROPIC_BASE_URL",
3148
3169
  "ANTHROPIC_AUTH_TOKEN",
3149
3170
  "OPENAI_API_KEY",
3171
+ "OPENAI_BASE_URL",
3150
3172
  "GEMINI_API_KEY",
3151
3173
  "GOOGLE_API_KEY",
3152
3174
  // Vertex AI (Claude Code on GCP)
@@ -3187,7 +3209,7 @@ var AGOR_INTERNAL_ENV_VARS = /* @__PURE__ */ new Set([
3187
3209
  ]);
3188
3210
  async function resolveUserEnvironment(userId, db, options = {}) {
3189
3211
  const env = {};
3190
- const { sessionId } = options;
3212
+ const { sessionId, tool } = options;
3191
3213
  try {
3192
3214
  const row = await select(db).from(users3).where((0, import_drizzle_orm5.eq)(users3.user_id, userId)).one();
3193
3215
  if (row) {
@@ -3221,16 +3243,22 @@ async function resolveUserEnvironment(userId, db, options = {}) {
3221
3243
  console.error(`Failed to decrypt env var ${key} for user ${userId}:`, err);
3222
3244
  }
3223
3245
  }
3224
- const encryptedApiKeys = data.api_keys;
3225
- if (encryptedApiKeys) {
3226
- for (const [key, encryptedValue] of Object.entries(encryptedApiKeys)) {
3227
- try {
3228
- const decryptedValue = decryptApiKey(encryptedValue);
3229
- if (decryptedValue && decryptedValue.trim() !== "") {
3230
- env[key] = decryptedValue;
3246
+ if (tool) {
3247
+ const toolFields = data.agentic_tools?.[tool];
3248
+ if (toolFields) {
3249
+ for (const [key, encryptedValue] of Object.entries(toolFields)) {
3250
+ if (!encryptedValue) continue;
3251
+ try {
3252
+ const decryptedValue = decryptApiKey(encryptedValue);
3253
+ if (decryptedValue && decryptedValue.trim() !== "") {
3254
+ env[key] = decryptedValue;
3255
+ }
3256
+ } catch (err) {
3257
+ console.error(
3258
+ `Failed to decrypt agentic_tools.${tool}.${key} for user ${userId}:`,
3259
+ err
3260
+ );
3231
3261
  }
3232
- } catch (err) {
3233
- console.error(`Failed to decrypt API key ${key} for user ${userId}:`, err);
3234
3262
  }
3235
3263
  }
3236
3264
  }
@@ -3268,7 +3296,7 @@ function buildAllowlistedEnv() {
3268
3296
  }
3269
3297
  return env;
3270
3298
  }
3271
- async function createUserProcessEnvironment(userId, db, additionalEnv, forImpersonation = false, gatewayEnv, sessionId) {
3299
+ async function createUserProcessEnvironment(userId, db, additionalEnv, forImpersonation = false, gatewayEnv, sessionId, tool) {
3272
3300
  const env = buildAllowlistedEnv();
3273
3301
  const USER_IDENTITY_VARS = ["HOME", "USER", "LOGNAME", "SHELL"];
3274
3302
  if (forImpersonation) {
@@ -3286,7 +3314,7 @@ async function createUserProcessEnvironment(userId, db, additionalEnv, forImpers
3286
3314
  }
3287
3315
  }
3288
3316
  if (userId && db) {
3289
- const userEnv = await resolveUserEnvironment(userId, db, { sessionId });
3317
+ const userEnv = await resolveUserEnvironment(userId, db, { sessionId, tool });
3290
3318
  for (const [key, value] of Object.entries(userEnv)) {
3291
3319
  if (value && value.trim() !== "") {
3292
3320
  env[key] = value;
@@ -3607,6 +3635,7 @@ init_schema();
3607
3635
 
3608
3636
  // src/db/repositories/users.ts
3609
3637
  init_cjs_shims();
3638
+ init_types();
3610
3639
  var import_drizzle_orm24 = require("drizzle-orm");
3611
3640
  init_ids();
3612
3641
  init_database_wrapper();
@@ -3652,7 +3681,18 @@ async function resolveApiKey(keyName, context = {}) {
3652
3681
  const row = await select(context.db).from(users3).where((0, import_drizzle_orm27.eq)(users3.user_id, context.userId)).one();
3653
3682
  if (row) {
3654
3683
  const data = row.data;
3655
- const encryptedKey = data.api_keys?.[keyName];
3684
+ let encryptedKey;
3685
+ const tools = data.agentic_tools ?? {};
3686
+ if (context.tool) {
3687
+ encryptedKey = tools[context.tool]?.[keyName];
3688
+ } else {
3689
+ for (const fields of Object.values(tools)) {
3690
+ if (fields?.[keyName]) {
3691
+ encryptedKey = fields[keyName];
3692
+ break;
3693
+ }
3694
+ }
3695
+ }
3656
3696
  if (encryptedKey) {
3657
3697
  try {
3658
3698
  const decryptedKey = decryptApiKey(encryptedKey);
@@ -3677,12 +3717,13 @@ async function resolveApiKey(keyName, context = {}) {
3677
3717
  } else if (!context.db) {
3678
3718
  console.log(` \u2192 Skipping user-level check (no database connection)`);
3679
3719
  }
3680
- console.log(` \u2192 Checking app-level configuration (config.yaml)...`);
3681
- const globalKey = getCredential(keyName);
3682
- if (globalKey && globalKey.length > 0) {
3683
- console.log(` \u2713 Found app-level API key for ${keyName} (from config.yaml)`);
3684
- return { apiKey: globalKey, source: "config", useNativeAuth: false };
3685
- } else {
3720
+ if (isConfigCredentialKey(keyName)) {
3721
+ console.log(` \u2192 Checking app-level configuration (config.yaml)...`);
3722
+ const globalKey = getCredential(keyName);
3723
+ if (globalKey && globalKey.length > 0) {
3724
+ console.log(` \u2713 Found app-level API key for ${keyName} (from config.yaml)`);
3725
+ return { apiKey: globalKey, source: "config", useNativeAuth: false };
3726
+ }
3686
3727
  console.log(` \u2717 No app-level API key for ${keyName}`);
3687
3728
  }
3688
3729
  console.log(` \u2192 Checking OS-level environment variables...`);
@@ -3690,16 +3731,17 @@ async function resolveApiKey(keyName, context = {}) {
3690
3731
  if (envKey && envKey.length > 0) {
3691
3732
  console.log(` \u2713 Found OS-level environment variable ${keyName}`);
3692
3733
  return { apiKey: envKey, source: "env", useNativeAuth: false };
3693
- } else {
3694
- console.log(` \u2717 No OS-level environment variable ${keyName}`);
3695
3734
  }
3735
+ console.log(` \u2717 No OS-level environment variable ${keyName}`);
3696
3736
  console.log(` \u2139\uFE0F No API key found for ${keyName} - SDK will use native authentication`);
3697
3737
  return { apiKey: void 0, source: "none", useNativeAuth: true };
3698
3738
  }
3699
3739
  function resolveApiKeySync(keyName) {
3700
- const globalKey = getCredential(keyName);
3701
- if (globalKey && globalKey.length > 0) {
3702
- return { apiKey: globalKey, source: "config", useNativeAuth: false };
3740
+ if (isConfigCredentialKey(keyName)) {
3741
+ const globalKey = getCredential(keyName);
3742
+ if (globalKey && globalKey.length > 0) {
3743
+ return { apiKey: globalKey, source: "config", useNativeAuth: false };
3744
+ }
3703
3745
  }
3704
3746
  const envKey = process.env[keyName];
3705
3747
  if (envKey && envKey.length > 0) {
@@ -4299,6 +4341,7 @@ var CredentialKey = /* @__PURE__ */ ((CredentialKey2) => {
4299
4341
  getWorktreesDir,
4300
4342
  getWorktreesDirAsync,
4301
4343
  initConfig,
4344
+ isConfigCredentialKey,
4302
4345
  isEnvVarAllowed,
4303
4346
  isUnixImpersonationEnabled,
4304
4347
  isValid,
@@ -1,25 +1,25 @@
1
1
  import { b as RepoEnvironment, d as RepoEnvironmentConfigV1 } from '../repo-Ckl-vaAk.cjs';
2
- export { P as PublicBaseUrlNotConfiguredError, e as ensureCodexHome, a as expandHomePath, g as getAgorHome, b as getBaseUrl, c as getConfigPath, d as getConfigValue, f as getCredential, h as getDaemonUrl, i as getDaemonUser, j as getDataHome, k as getDataHomeAsync, l as getDefaultConfig, m as getReposDir, n as getReposDirAsync, o as getWorktreePath, p as getWorktreesDir, q as getWorktreesDirAsync, r as initConfig, s as isUnixImpersonationEnabled, t as isWorktreeRbacEnabled, u as loadConfig, v as loadConfigFromFile, w as loadConfigSync, x as requireDaemonUser, y as requirePublicBaseUrl, z as resolveCodexHome, A as saveConfig, B as setConfigValue, C as unsetConfigValue } from '../config-manager-TxxjFMRd.cjs';
2
+ export { C as ConfigCredentialKey, P as PublicBaseUrlNotConfiguredError, e as ensureCodexHome, a as expandHomePath, g as getAgorHome, b as getBaseUrl, c as getConfigPath, d as getConfigValue, f as getCredential, h as getDaemonUrl, i as getDaemonUser, j as getDataHome, k as getDataHomeAsync, l as getDefaultConfig, m as getReposDir, n as getReposDirAsync, o as getWorktreePath, p as getWorktreesDir, q as getWorktreesDirAsync, r as initConfig, s as isConfigCredentialKey, t as isUnixImpersonationEnabled, u as isWorktreeRbacEnabled, v as loadConfig, w as loadConfigFromFile, x as loadConfigSync, y as requireDaemonUser, z as requirePublicBaseUrl, A as resolveCodexHome, B as saveConfig, D as setConfigValue, E as unsetConfigValue } from '../config-manager-B8TP9Kz0.cjs';
3
3
  export { AgorYmlSchema, DAEMON, DATABASE, ENVIRONMENT, GIT, MCP_TOKEN, PAGINATION, REPO_SLUG_PATTERN, RepoReference, RepoReferenceOption, SESSION, WEBSOCKET, YamlVariant, extractSlugFromUrl, formatRepoReference, getDefaultRepoReference, getGroupedRepoReferenceOptions, getRepoReferenceOptions, isValidGitUrl, isValidSlug, normalizeRepoUrl, parseAgorYmlString, parseRepoReference, resolveRepoReference, resolveVariant, resolveVariantOrThrow, validateAgorYmlSchema, validateExtends, validateRepoEnvironment } from './browser.cjs';
4
- import { j as Database } from '../client-B5PyIvNc.cjs';
4
+ import { j as Database } from '../client-CemqXk0v.cjs';
5
5
  import { f as UserID, S as SessionID } from '../id-CoIbY_uc.cjs';
6
- import { c as GatewayEnvVar } from '../gateway-BnOlAelY.cjs';
7
- import { e as EnvVarScope } from '../user-DkNdeFoz.cjs';
6
+ import { c as AgenticToolName } from '../agentic-tool-BulhIUGb.cjs';
7
+ import { c as GatewayEnvVar } from '../gateway-BWq4j_Ll.cjs';
8
+ import { n as EnvVarScope } from '../user-CpfkcV2C.cjs';
8
9
  import { z } from 'zod';
9
- import { b as AgorCorsMode, e as AgorCspDirectives, a as AgorConfig } from '../types-DNqfdt1z.cjs';
10
- export { A as AgorCodexSettings, c as AgorCorsSettings, d as AgorCredentials, f as AgorCspSettings, g as AgorDaemonSettings, h as AgorDatabaseSettings, i as AgorDefaults, j as AgorDisplaySettings, k as AgorExecutionSettings, l as AgorOnboardingSettings, m as AgorOpenCodeSettings, n as AgorPathSettings, o as AgorSecuritySettings, p as AgorUISettings, q as AgorWorktreesSettings, C as ConfigKey, r as CredentialKey, M as ManagedEnvsMinimumRole, U as UnixUserMode, s as UnknownJson } from '../types-DNqfdt1z.cjs';
10
+ import { b as AgorCorsMode, e as AgorCspDirectives, a as AgorConfig } from '../types-D4Rl6ZKN.cjs';
11
+ export { A as AgorCodexSettings, c as AgorCorsSettings, d as AgorCredentials, f as AgorCspSettings, g as AgorDaemonSettings, h as AgorDatabaseSettings, i as AgorDefaults, j as AgorDisplaySettings, k as AgorExecutionSettings, l as AgorOnboardingSettings, m as AgorOpenCodeSettings, n as AgorPathSettings, o as AgorSecuritySettings, p as AgorUISettings, q as AgorWorktreesSettings, C as ConfigKey, r as CredentialKey, M as ManagedEnvsMinimumRole, U as UnixUserMode, s as UnknownJson } from '../types-D4Rl6ZKN.cjs';
11
12
  import 'drizzle-orm/libsql';
12
13
  import 'drizzle-orm/postgres-js';
13
14
  import 'drizzle-orm';
14
- import '../message-DinITA7a.cjs';
15
- import '../agentic-tool-BulhIUGb.cjs';
15
+ import '../message-CSWOsdcZ.cjs';
16
16
  import '../board-D7SnPqp-.cjs';
17
17
  import '../session-MNU4BQv4.cjs';
18
18
  import '../context-BpkCELpO.cjs';
19
- import '../task-wht1RJEL.cjs';
19
+ import '../task-C2Hy7H6u.cjs';
20
20
  import 'drizzle-orm/pg-core';
21
21
  import 'drizzle-orm/sqlite-core';
22
- import '../config-services-YEZ4DwCD.cjs';
22
+ import '../config-services-CXyQKEK5.cjs';
23
23
 
24
24
  /**
25
25
  * `.agor.yml` file I/O.
@@ -178,16 +178,34 @@ interface ResolveUserEnvOptions {
178
178
  * contexts without a session — e.g. worktree-level terminals).
179
179
  */
180
180
  sessionId?: SessionID;
181
+ /**
182
+ * If set, the user's per-tool credentials for THIS tool are merged into the
183
+ * resolved env (e.g. claude-code → ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL).
184
+ * Other tools' credentials are NEVER merged regardless of value.
185
+ *
186
+ * If omitted, NO per-tool credentials are merged — safe default for
187
+ * worktree-level terminals and other contexts that don't run an SDK.
188
+ */
189
+ tool?: AgenticToolName;
181
190
  }
182
191
  /**
183
- * Resolve user environment variables (decrypted from database, no system env vars)
184
- * Includes both env_vars and api_keys from user data.
192
+ * Resolve user environment variables (decrypted from database, no system env vars).
193
+ *
194
+ * Includes:
195
+ * - User-defined env vars from `data.env_vars` (scope-filtered)
196
+ * - If `options.tool` is set, the matching tool's credentials from
197
+ * `data.agentic_tools[tool]` (e.g. claude-code → ANTHROPIC_API_KEY +
198
+ * ANTHROPIC_BASE_URL). Other tools' credentials are NEVER merged.
185
199
  *
186
- * Scope filtering (v0.5):
200
+ * Precedence (later wins): tool credentials > user env vars. This matches the
201
+ * UX intent: per-tool config screens are the explicit, "this is the credential
202
+ * I want for this SDK" surface; global env vars are the fallback. The caller
203
+ * (`createUserProcessEnvironment`) layers config.yaml/system env underneath.
204
+ *
205
+ * Scope filtering on env_vars (v0.5):
187
206
  * - `scope: 'global'` → always included
188
207
  * - `scope: 'session'` → only included if `options.sessionId` is provided
189
- * AND the var name has an entry in `session_env_selections` for that
190
- * session.
208
+ * AND the var name has an entry in `session_env_selections` for that session.
191
209
  * - Any other scope value (reserved for v1+) is skipped.
192
210
  *
193
211
  * Legacy entries (plain-string values on disk) are treated as global-scope.
@@ -257,7 +275,14 @@ gatewayEnv?: GatewayEnvVar[],
257
275
  * If provided, session-scope env vars selected for this session are
258
276
  * included in the user env. Session-scope vars are otherwise excluded.
259
277
  */
260
- sessionId?: SessionID): Promise<Record<string, string>>;
278
+ sessionId?: SessionID,
279
+ /**
280
+ * If provided, the user's per-tool credentials for THIS tool are merged
281
+ * into the environment (e.g. claude-code → ANTHROPIC_*). Other tools'
282
+ * credentials are NEVER merged. Omit for non-SDK contexts (worktree
283
+ * terminals, generic background jobs).
284
+ */
285
+ tool?: AgenticToolName): Promise<Record<string, string>>;
261
286
 
262
287
  /**
263
288
  * Validation constraints for environment variables
@@ -348,12 +373,29 @@ declare function normalizeStoredEnvVar(raw: RawStoredEnvVar): StoredEnvVar;
348
373
  */
349
374
  declare function normalizeStoredEnvMap(raw: Record<string, RawStoredEnvVar> | undefined): Record<string, StoredEnvVar>;
350
375
 
351
- type ApiKeyName = 'ANTHROPIC_API_KEY' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY';
376
+ /**
377
+ * The set of credential env-var names the resolver knows how to look up at the
378
+ * per-user (`agentic_tools[tool][keyName]`), config.yaml, and OS-env layers.
379
+ *
380
+ * Kept as an explicit union (rather than `string`) so callers can't accidentally
381
+ * ask the resolver for an unrelated env var like `PATH` or `AGOR_MASTER_SECRET`.
382
+ * Add new entries here when a tool's per-tool field config grows.
383
+ */
384
+ type ApiKeyName = 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'CLAUDE_CODE_OAUTH_TOKEN' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY' | 'COPILOT_GITHUB_TOKEN';
352
385
  interface KeyResolutionContext {
353
386
  /** User ID for per-user key lookup */
354
387
  userId?: UserID;
355
388
  /** Database instance for user lookup */
356
389
  db?: Database;
390
+ /**
391
+ * Restrict the per-user lookup to a specific tool's credential bucket
392
+ * (`data.agentic_tools[tool][keyName]`). When omitted, the resolver sweeps
393
+ * every tool bucket — kept for back-compat with non-SDK callers (e.g. CLI).
394
+ *
395
+ * SDK executors should ALWAYS pass this so a Codex spawn never resolves a
396
+ * key stored under `agentic_tools['claude-code']`, and vice versa.
397
+ */
398
+ tool?: AgenticToolName;
357
399
  }
358
400
  /**
359
401
  * Result of API key resolution
@@ -1,25 +1,25 @@
1
1
  import { b as RepoEnvironment, d as RepoEnvironmentConfigV1 } from '../repo-84E0A2gV.js';
2
- export { P as PublicBaseUrlNotConfiguredError, e as ensureCodexHome, a as expandHomePath, g as getAgorHome, b as getBaseUrl, c as getConfigPath, d as getConfigValue, f as getCredential, h as getDaemonUrl, i as getDaemonUser, j as getDataHome, k as getDataHomeAsync, l as getDefaultConfig, m as getReposDir, n as getReposDirAsync, o as getWorktreePath, p as getWorktreesDir, q as getWorktreesDirAsync, r as initConfig, s as isUnixImpersonationEnabled, t as isWorktreeRbacEnabled, u as loadConfig, v as loadConfigFromFile, w as loadConfigSync, x as requireDaemonUser, y as requirePublicBaseUrl, z as resolveCodexHome, A as saveConfig, B as setConfigValue, C as unsetConfigValue } from '../config-manager-DTrsj6G3.js';
2
+ export { C as ConfigCredentialKey, P as PublicBaseUrlNotConfiguredError, e as ensureCodexHome, a as expandHomePath, g as getAgorHome, b as getBaseUrl, c as getConfigPath, d as getConfigValue, f as getCredential, h as getDaemonUrl, i as getDaemonUser, j as getDataHome, k as getDataHomeAsync, l as getDefaultConfig, m as getReposDir, n as getReposDirAsync, o as getWorktreePath, p as getWorktreesDir, q as getWorktreesDirAsync, r as initConfig, s as isConfigCredentialKey, t as isUnixImpersonationEnabled, u as isWorktreeRbacEnabled, v as loadConfig, w as loadConfigFromFile, x as loadConfigSync, y as requireDaemonUser, z as requirePublicBaseUrl, A as resolveCodexHome, B as saveConfig, D as setConfigValue, E as unsetConfigValue } from '../config-manager-CDEB0FY4.js';
3
3
  export { AgorYmlSchema, DAEMON, DATABASE, ENVIRONMENT, GIT, MCP_TOKEN, PAGINATION, REPO_SLUG_PATTERN, RepoReference, RepoReferenceOption, SESSION, WEBSOCKET, YamlVariant, extractSlugFromUrl, formatRepoReference, getDefaultRepoReference, getGroupedRepoReferenceOptions, getRepoReferenceOptions, isValidGitUrl, isValidSlug, normalizeRepoUrl, parseAgorYmlString, parseRepoReference, resolveRepoReference, resolveVariant, resolveVariantOrThrow, validateAgorYmlSchema, validateExtends, validateRepoEnvironment } from './browser.js';
4
- import { j as Database } from '../client-C1CsRi19.js';
4
+ import { j as Database } from '../client-uYEOha6g.js';
5
5
  import { f as UserID, S as SessionID } from '../id-CoIbY_uc.js';
6
- import { c as GatewayEnvVar } from '../gateway-B_4X-v07.js';
7
- import { e as EnvVarScope } from '../user-BfVWBmXA.js';
6
+ import { c as AgenticToolName } from '../agentic-tool-cYqsU5i5.js';
7
+ import { c as GatewayEnvVar } from '../gateway-C3Jm_akw.js';
8
+ import { n as EnvVarScope } from '../user-DP-XZMIM.js';
8
9
  import { z } from 'zod';
9
- import { b as AgorCorsMode, e as AgorCspDirectives, a as AgorConfig } from '../types-DqPMmTad.js';
10
- export { A as AgorCodexSettings, c as AgorCorsSettings, d as AgorCredentials, f as AgorCspSettings, g as AgorDaemonSettings, h as AgorDatabaseSettings, i as AgorDefaults, j as AgorDisplaySettings, k as AgorExecutionSettings, l as AgorOnboardingSettings, m as AgorOpenCodeSettings, n as AgorPathSettings, o as AgorSecuritySettings, p as AgorUISettings, q as AgorWorktreesSettings, C as ConfigKey, r as CredentialKey, M as ManagedEnvsMinimumRole, U as UnixUserMode, s as UnknownJson } from '../types-DqPMmTad.js';
10
+ import { b as AgorCorsMode, e as AgorCspDirectives, a as AgorConfig } from '../types-n61iaXub.js';
11
+ export { A as AgorCodexSettings, c as AgorCorsSettings, d as AgorCredentials, f as AgorCspSettings, g as AgorDaemonSettings, h as AgorDatabaseSettings, i as AgorDefaults, j as AgorDisplaySettings, k as AgorExecutionSettings, l as AgorOnboardingSettings, m as AgorOpenCodeSettings, n as AgorPathSettings, o as AgorSecuritySettings, p as AgorUISettings, q as AgorWorktreesSettings, C as ConfigKey, r as CredentialKey, M as ManagedEnvsMinimumRole, U as UnixUserMode, s as UnknownJson } from '../types-n61iaXub.js';
11
12
  import 'drizzle-orm/libsql';
12
13
  import 'drizzle-orm/postgres-js';
13
14
  import 'drizzle-orm';
14
- import '../message-CHUUP6OS.js';
15
- import '../agentic-tool-cYqsU5i5.js';
15
+ import '../message-DZa8g0s0.js';
16
16
  import '../board-D3YJ0_ih.js';
17
17
  import '../session-CAfhv1qL.js';
18
18
  import '../context-BpkCELpO.js';
19
- import '../task-BLPFCORT.js';
19
+ import '../task-BHV-YHg1.js';
20
20
  import 'drizzle-orm/pg-core';
21
21
  import 'drizzle-orm/sqlite-core';
22
- import '../config-services-DcO2GRgh.js';
22
+ import '../config-services-DhM7_yWn.js';
23
23
 
24
24
  /**
25
25
  * `.agor.yml` file I/O.
@@ -178,16 +178,34 @@ interface ResolveUserEnvOptions {
178
178
  * contexts without a session — e.g. worktree-level terminals).
179
179
  */
180
180
  sessionId?: SessionID;
181
+ /**
182
+ * If set, the user's per-tool credentials for THIS tool are merged into the
183
+ * resolved env (e.g. claude-code → ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL).
184
+ * Other tools' credentials are NEVER merged regardless of value.
185
+ *
186
+ * If omitted, NO per-tool credentials are merged — safe default for
187
+ * worktree-level terminals and other contexts that don't run an SDK.
188
+ */
189
+ tool?: AgenticToolName;
181
190
  }
182
191
  /**
183
- * Resolve user environment variables (decrypted from database, no system env vars)
184
- * Includes both env_vars and api_keys from user data.
192
+ * Resolve user environment variables (decrypted from database, no system env vars).
193
+ *
194
+ * Includes:
195
+ * - User-defined env vars from `data.env_vars` (scope-filtered)
196
+ * - If `options.tool` is set, the matching tool's credentials from
197
+ * `data.agentic_tools[tool]` (e.g. claude-code → ANTHROPIC_API_KEY +
198
+ * ANTHROPIC_BASE_URL). Other tools' credentials are NEVER merged.
185
199
  *
186
- * Scope filtering (v0.5):
200
+ * Precedence (later wins): tool credentials > user env vars. This matches the
201
+ * UX intent: per-tool config screens are the explicit, "this is the credential
202
+ * I want for this SDK" surface; global env vars are the fallback. The caller
203
+ * (`createUserProcessEnvironment`) layers config.yaml/system env underneath.
204
+ *
205
+ * Scope filtering on env_vars (v0.5):
187
206
  * - `scope: 'global'` → always included
188
207
  * - `scope: 'session'` → only included if `options.sessionId` is provided
189
- * AND the var name has an entry in `session_env_selections` for that
190
- * session.
208
+ * AND the var name has an entry in `session_env_selections` for that session.
191
209
  * - Any other scope value (reserved for v1+) is skipped.
192
210
  *
193
211
  * Legacy entries (plain-string values on disk) are treated as global-scope.
@@ -257,7 +275,14 @@ gatewayEnv?: GatewayEnvVar[],
257
275
  * If provided, session-scope env vars selected for this session are
258
276
  * included in the user env. Session-scope vars are otherwise excluded.
259
277
  */
260
- sessionId?: SessionID): Promise<Record<string, string>>;
278
+ sessionId?: SessionID,
279
+ /**
280
+ * If provided, the user's per-tool credentials for THIS tool are merged
281
+ * into the environment (e.g. claude-code → ANTHROPIC_*). Other tools'
282
+ * credentials are NEVER merged. Omit for non-SDK contexts (worktree
283
+ * terminals, generic background jobs).
284
+ */
285
+ tool?: AgenticToolName): Promise<Record<string, string>>;
261
286
 
262
287
  /**
263
288
  * Validation constraints for environment variables
@@ -348,12 +373,29 @@ declare function normalizeStoredEnvVar(raw: RawStoredEnvVar): StoredEnvVar;
348
373
  */
349
374
  declare function normalizeStoredEnvMap(raw: Record<string, RawStoredEnvVar> | undefined): Record<string, StoredEnvVar>;
350
375
 
351
- type ApiKeyName = 'ANTHROPIC_API_KEY' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY';
376
+ /**
377
+ * The set of credential env-var names the resolver knows how to look up at the
378
+ * per-user (`agentic_tools[tool][keyName]`), config.yaml, and OS-env layers.
379
+ *
380
+ * Kept as an explicit union (rather than `string`) so callers can't accidentally
381
+ * ask the resolver for an unrelated env var like `PATH` or `AGOR_MASTER_SECRET`.
382
+ * Add new entries here when a tool's per-tool field config grows.
383
+ */
384
+ type ApiKeyName = 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'CLAUDE_CODE_OAUTH_TOKEN' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY' | 'COPILOT_GITHUB_TOKEN';
352
385
  interface KeyResolutionContext {
353
386
  /** User ID for per-user key lookup */
354
387
  userId?: UserID;
355
388
  /** Database instance for user lookup */
356
389
  db?: Database;
390
+ /**
391
+ * Restrict the per-user lookup to a specific tool's credential bucket
392
+ * (`data.agentic_tools[tool][keyName]`). When omitted, the resolver sweeps
393
+ * every tool bucket — kept for back-compat with non-SDK callers (e.g. CLI).
394
+ *
395
+ * SDK executors should ALWAYS pass this so a Codex spawn never resolves a
396
+ * key stored under `agentic_tools['claude-code']`, and vice versa.
397
+ */
398
+ tool?: AgenticToolName;
357
399
  }
358
400
  /**
359
401
  * Result of API key resolution