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
@@ -406,6 +406,9 @@ function loadConfigSync() {
406
406
  );
407
407
  }
408
408
  }
409
+ function isConfigCredentialKey(key) {
410
+ return CONFIG_CREDENTIAL_KEYS.has(key);
411
+ }
409
412
  function getCredential(key) {
410
413
  try {
411
414
  const config = loadConfigSync();
@@ -501,7 +504,7 @@ async function getReposDirAsync() {
501
504
  async function getWorktreesDirAsync() {
502
505
  return path2.join(await getDataHomeAsync(), "worktrees");
503
506
  }
504
- var PublicBaseUrlNotConfiguredError;
507
+ var PublicBaseUrlNotConfiguredError, CONFIG_CREDENTIAL_KEYS;
505
508
  var init_config_manager = __esm({
506
509
  "src/config/config-manager.ts"() {
507
510
  "use strict";
@@ -514,6 +517,13 @@ var init_config_manager = __esm({
514
517
  this.name = "PublicBaseUrlNotConfiguredError";
515
518
  }
516
519
  };
520
+ CONFIG_CREDENTIAL_KEYS = /* @__PURE__ */ new Set([
521
+ "ANTHROPIC_API_KEY",
522
+ "ANTHROPIC_AUTH_TOKEN",
523
+ "ANTHROPIC_BASE_URL",
524
+ "OPENAI_API_KEY",
525
+ "GEMINI_API_KEY"
526
+ ]);
517
527
  }
518
528
  });
519
529
 
@@ -985,6 +995,7 @@ var init_schema_postgres = __esm({
985
995
  completed_at: t.timestamp("completed_at"),
986
996
  status: text("status", {
987
997
  enum: [
998
+ "queued",
988
999
  "created",
989
1000
  "running",
990
1001
  "stopping",
@@ -996,6 +1007,8 @@ var init_schema_postgres = __esm({
996
1007
  "stopped"
997
1008
  ]
998
1009
  }).notNull(),
1010
+ // Queue position (lower drains first); only populated for status='queued'
1011
+ queue_position: integer("queue_position"),
999
1012
  // User attribution
1000
1013
  created_by: varchar("created_by", { length: 36 }).notNull().default("anonymous"),
1001
1014
  // MD5 of SDK session file at task completion (only populated when stateless_fs_mode is enabled)
@@ -1005,7 +1018,12 @@ var init_schema_postgres = __esm({
1005
1018
  (table) => ({
1006
1019
  sessionIdx: index("tasks_session_idx").on(table.session_id),
1007
1020
  statusIdx: index("tasks_status_idx").on(table.status),
1008
- createdIdx: index("tasks_created_idx").on(table.created_at)
1021
+ createdIdx: index("tasks_created_idx").on(table.created_at),
1022
+ queueIdx: index("tasks_queue_idx").on(table.session_id, table.status, table.queue_position),
1023
+ // Partial unique index — defense-in-depth for `tasks.createPending` race
1024
+ // serialization. Only QUEUED rows are constrained; CREATED/RUNNING/done
1025
+ // rows have NULL queue_position and are unaffected.
1026
+ queuedPositionUnique: uniqueIndex("tasks_queued_position_unique").on(table.session_id, table.queue_position).where(sql2`${table.status} = 'queued'`)
1009
1027
  })
1010
1028
  );
1011
1029
  serializedSessions = pgTable(
@@ -1065,11 +1083,9 @@ var init_schema_postgres = __esm({
1065
1083
  // First 200 chars for list views
1066
1084
  // Parent tool use ID (for nested tool calls - e.g., Task tool spawning Read/Grep)
1067
1085
  parent_tool_use_id: text("parent_tool_use_id"),
1068
- // Message queueing fields
1069
- status: text("status", { enum: ["queued"] }),
1070
- // 'queued' or null (normal message)
1071
- queue_position: integer("queue_position"),
1072
- // Position in queue (1, 2, 3, ...)
1086
+ // NOTE: queueing moved off `messages` and onto `tasks.status='queued'` as
1087
+ // of migration sqlite/0040 (postgres/0030). The legacy `status` and
1088
+ // `queue_position` columns are gone — see `tasks.queue_position` instead.
1073
1089
  // Full data (JSON blob)
1074
1090
  data: t.json("data").$type().notNull()
1075
1091
  },
@@ -1077,8 +1093,7 @@ var init_schema_postgres = __esm({
1077
1093
  // Indexes for efficient lookups
1078
1094
  sessionIdx: index("messages_session_id_idx").on(table.session_id),
1079
1095
  taskIdx: index("messages_task_id_idx").on(table.task_id),
1080
- sessionIndexIdx: index("messages_session_index_idx").on(table.session_id, table.index),
1081
- queueIdx: index("messages_queue_idx").on(table.session_id, table.status, table.queue_position)
1096
+ sessionIndexIdx: index("messages_session_index_idx").on(table.session_id, table.index)
1082
1097
  })
1083
1098
  );
1084
1099
  boards = pgTable(
@@ -1723,6 +1738,7 @@ var init_schema_sqlite = __esm({
1723
1738
  completed_at: t2.timestamp("completed_at"),
1724
1739
  status: text2("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: integer2("queue_position"),
1737
1755
  // User attribution
1738
1756
  created_by: text2("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: index2("tasks_session_idx").on(table.session_id),
1745
1763
  statusIdx: index2("tasks_status_idx").on(table.status),
1746
- createdIdx: index2("tasks_created_idx").on(table.created_at)
1764
+ createdIdx: index2("tasks_created_idx").on(table.created_at),
1765
+ queueIdx: index2("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: uniqueIndex2("tasks_queued_position_unique").on(table.session_id, table.queue_position).where(sql3`${table.status} = 'queued'`)
1747
1770
  })
1748
1771
  );
1749
1772
  serializedSessions2 = 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: text2("parent_tool_use_id"),
1806
- // Message queueing fields
1807
- status: text2("status", { enum: ["queued"] }),
1808
- // 'queued' or null (normal message)
1809
- queue_position: integer2("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: index2("messages_session_id_idx").on(table.session_id),
1817
1838
  taskIdx: index2("messages_task_id_idx").on(table.task_id),
1818
- sessionIndexIdx: index2("messages_session_index_idx").on(table.session_id, table.index),
1819
- queueIdx: index2("messages_queue_idx").on(table.session_id, table.status, table.queue_position)
1839
+ sessionIndexIdx: index2("messages_session_index_idx").on(table.session_id, table.index)
1820
1840
  })
1821
1841
  );
1822
1842
  boards2 = sqliteTable(
@@ -3044,6 +3064,7 @@ var ALLOWED_ENV_VARS = /* @__PURE__ */ new Set([
3044
3064
  "ANTHROPIC_BASE_URL",
3045
3065
  "ANTHROPIC_AUTH_TOKEN",
3046
3066
  "OPENAI_API_KEY",
3067
+ "OPENAI_BASE_URL",
3047
3068
  "GEMINI_API_KEY",
3048
3069
  "GOOGLE_API_KEY",
3049
3070
  // Vertex AI (Claude Code on GCP)
@@ -3084,7 +3105,7 @@ var AGOR_INTERNAL_ENV_VARS = /* @__PURE__ */ new Set([
3084
3105
  ]);
3085
3106
  async function resolveUserEnvironment(userId, db, options = {}) {
3086
3107
  const env = {};
3087
- const { sessionId } = options;
3108
+ const { sessionId, tool } = options;
3088
3109
  try {
3089
3110
  const row = await select(db).from(users3).where(eq2(users3.user_id, userId)).one();
3090
3111
  if (row) {
@@ -3118,16 +3139,22 @@ async function resolveUserEnvironment(userId, db, options = {}) {
3118
3139
  console.error(`Failed to decrypt env var ${key} for user ${userId}:`, err);
3119
3140
  }
3120
3141
  }
3121
- const encryptedApiKeys = data.api_keys;
3122
- if (encryptedApiKeys) {
3123
- for (const [key, encryptedValue] of Object.entries(encryptedApiKeys)) {
3124
- try {
3125
- const decryptedValue = decryptApiKey(encryptedValue);
3126
- if (decryptedValue && decryptedValue.trim() !== "") {
3127
- env[key] = decryptedValue;
3142
+ if (tool) {
3143
+ const toolFields = data.agentic_tools?.[tool];
3144
+ if (toolFields) {
3145
+ for (const [key, encryptedValue] of Object.entries(toolFields)) {
3146
+ if (!encryptedValue) continue;
3147
+ try {
3148
+ const decryptedValue = decryptApiKey(encryptedValue);
3149
+ if (decryptedValue && decryptedValue.trim() !== "") {
3150
+ env[key] = decryptedValue;
3151
+ }
3152
+ } catch (err) {
3153
+ console.error(
3154
+ `Failed to decrypt agentic_tools.${tool}.${key} for user ${userId}:`,
3155
+ err
3156
+ );
3128
3157
  }
3129
- } catch (err) {
3130
- console.error(`Failed to decrypt API key ${key} for user ${userId}:`, err);
3131
3158
  }
3132
3159
  }
3133
3160
  }
@@ -3165,7 +3192,7 @@ function buildAllowlistedEnv() {
3165
3192
  }
3166
3193
  return env;
3167
3194
  }
3168
- async function createUserProcessEnvironment(userId, db, additionalEnv, forImpersonation = false, gatewayEnv, sessionId) {
3195
+ async function createUserProcessEnvironment(userId, db, additionalEnv, forImpersonation = false, gatewayEnv, sessionId, tool) {
3169
3196
  const env = buildAllowlistedEnv();
3170
3197
  const USER_IDENTITY_VARS = ["HOME", "USER", "LOGNAME", "SHELL"];
3171
3198
  if (forImpersonation) {
@@ -3183,7 +3210,7 @@ async function createUserProcessEnvironment(userId, db, additionalEnv, forImpers
3183
3210
  }
3184
3211
  }
3185
3212
  if (userId && db) {
3186
- const userEnv = await resolveUserEnvironment(userId, db, { sessionId });
3213
+ const userEnv = await resolveUserEnvironment(userId, db, { sessionId, tool });
3187
3214
  for (const [key, value] of Object.entries(userEnv)) {
3188
3215
  if (value && value.trim() !== "") {
3189
3216
  env[key] = value;
@@ -3480,7 +3507,7 @@ init_esm_shims();
3480
3507
  init_types();
3481
3508
  init_config_manager();
3482
3509
  init_ids();
3483
- import { and as and9, desc as desc2, eq as eq15, inArray as inArray2, isNotNull as isNotNull2, isNull as isNull2, like as like9, or as or3, sql as sql7 } from "drizzle-orm";
3510
+ import { and as and9, desc as desc2, eq as eq15, inArray as inArray2, isNotNull as isNotNull2, like as like9, or as or3, sql as sql7 } from "drizzle-orm";
3484
3511
  init_database_wrapper();
3485
3512
  init_schema();
3486
3513
 
@@ -3512,10 +3539,11 @@ import { and as and12, eq as eq19 } from "drizzle-orm";
3512
3539
  init_esm_shims();
3513
3540
  init_database_wrapper();
3514
3541
  init_schema();
3515
- import { and as and13, eq as eq20, isNull as isNull3 } from "drizzle-orm";
3542
+ import { and as and13, eq as eq20, isNull as isNull2 } from "drizzle-orm";
3516
3543
 
3517
3544
  // src/db/repositories/users.ts
3518
3545
  init_esm_shims();
3546
+ init_types();
3519
3547
  import { eq as eq21, like as like12 } from "drizzle-orm";
3520
3548
  init_ids();
3521
3549
  init_database_wrapper();
@@ -3527,18 +3555,7 @@ init_types();
3527
3555
  init_ids();
3528
3556
  init_database_wrapper();
3529
3557
  init_schema();
3530
- import {
3531
- and as and14,
3532
- desc as desc3,
3533
- eq as eq22,
3534
- getTableColumns,
3535
- inArray as inArray3,
3536
- isNotNull as isNotNull3,
3537
- isNull as isNull4,
3538
- like as like13,
3539
- or as or4,
3540
- sql as sql9
3541
- } from "drizzle-orm";
3558
+ import { and as and14, desc as desc3, eq as eq22, getTableColumns, inArray as inArray3, isNotNull as isNotNull3, like as like13, or as or4, sql as sql9 } from "drizzle-orm";
3542
3559
 
3543
3560
  // src/db/index.ts
3544
3561
  init_schema();
@@ -3572,7 +3589,18 @@ async function resolveApiKey(keyName, context = {}) {
3572
3589
  const row = await select(context.db).from(users3).where(eq24(users3.user_id, context.userId)).one();
3573
3590
  if (row) {
3574
3591
  const data = row.data;
3575
- const encryptedKey = data.api_keys?.[keyName];
3592
+ let encryptedKey;
3593
+ const tools = data.agentic_tools ?? {};
3594
+ if (context.tool) {
3595
+ encryptedKey = tools[context.tool]?.[keyName];
3596
+ } else {
3597
+ for (const fields of Object.values(tools)) {
3598
+ if (fields?.[keyName]) {
3599
+ encryptedKey = fields[keyName];
3600
+ break;
3601
+ }
3602
+ }
3603
+ }
3576
3604
  if (encryptedKey) {
3577
3605
  try {
3578
3606
  const decryptedKey = decryptApiKey(encryptedKey);
@@ -3597,12 +3625,13 @@ async function resolveApiKey(keyName, context = {}) {
3597
3625
  } else if (!context.db) {
3598
3626
  console.log(` \u2192 Skipping user-level check (no database connection)`);
3599
3627
  }
3600
- console.log(` \u2192 Checking app-level configuration (config.yaml)...`);
3601
- const globalKey = getCredential(keyName);
3602
- if (globalKey && globalKey.length > 0) {
3603
- console.log(` \u2713 Found app-level API key for ${keyName} (from config.yaml)`);
3604
- return { apiKey: globalKey, source: "config", useNativeAuth: false };
3605
- } else {
3628
+ if (isConfigCredentialKey(keyName)) {
3629
+ console.log(` \u2192 Checking app-level configuration (config.yaml)...`);
3630
+ const globalKey = getCredential(keyName);
3631
+ if (globalKey && globalKey.length > 0) {
3632
+ console.log(` \u2713 Found app-level API key for ${keyName} (from config.yaml)`);
3633
+ return { apiKey: globalKey, source: "config", useNativeAuth: false };
3634
+ }
3606
3635
  console.log(` \u2717 No app-level API key for ${keyName}`);
3607
3636
  }
3608
3637
  console.log(` \u2192 Checking OS-level environment variables...`);
@@ -3610,16 +3639,17 @@ async function resolveApiKey(keyName, context = {}) {
3610
3639
  if (envKey && envKey.length > 0) {
3611
3640
  console.log(` \u2713 Found OS-level environment variable ${keyName}`);
3612
3641
  return { apiKey: envKey, source: "env", useNativeAuth: false };
3613
- } else {
3614
- console.log(` \u2717 No OS-level environment variable ${keyName}`);
3615
3642
  }
3643
+ console.log(` \u2717 No OS-level environment variable ${keyName}`);
3616
3644
  console.log(` \u2139\uFE0F No API key found for ${keyName} - SDK will use native authentication`);
3617
3645
  return { apiKey: void 0, source: "none", useNativeAuth: true };
3618
3646
  }
3619
3647
  function resolveApiKeySync(keyName) {
3620
- const globalKey = getCredential(keyName);
3621
- if (globalKey && globalKey.length > 0) {
3622
- return { apiKey: globalKey, source: "config", useNativeAuth: false };
3648
+ if (isConfigCredentialKey(keyName)) {
3649
+ const globalKey = getCredential(keyName);
3650
+ if (globalKey && globalKey.length > 0) {
3651
+ return { apiKey: globalKey, source: "config", useNativeAuth: false };
3652
+ }
3623
3653
  }
3624
3654
  const envKey = process.env[keyName];
3625
3655
  if (envKey && envKey.length > 0) {
@@ -4218,6 +4248,7 @@ export {
4218
4248
  getWorktreesDir,
4219
4249
  getWorktreesDirAsync,
4220
4250
  initConfig,
4251
+ isConfigCredentialKey,
4221
4252
  isEnvVarAllowed,
4222
4253
  isUnixImpersonationEnabled,
4223
4254
  isValid,
@@ -1,4 +1,4 @@
1
- import { a as AgorConfig } from './types-DNqfdt1z.cjs';
1
+ import { a as AgorConfig } from './types-D4Rl6ZKN.cjs';
2
2
 
3
3
  /**
4
4
  * Agor Config Manager
@@ -139,6 +139,15 @@ declare function requirePublicBaseUrl(): Promise<string>;
139
139
  * Use for hot paths where async is not possible.
140
140
  */
141
141
  declare function loadConfigSync(): AgorConfig;
142
+ /**
143
+ * Credential keys that are valid in `config.yaml`'s `credentials` section
144
+ * (i.e., keys that have a meaningful global / app-level value). User-only
145
+ * tokens like `CLAUDE_CODE_OAUTH_TOKEN` (Pro/Max subscription) and
146
+ * `COPILOT_GITHUB_TOKEN` are intentionally excluded — they don't make sense
147
+ * as a global default.
148
+ */
149
+ type ConfigCredentialKey = 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'ANTHROPIC_BASE_URL' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY';
150
+ declare function isConfigCredentialKey(key: string): key is ConfigCredentialKey;
142
151
  /**
143
152
  * Get credential with precedence: config.yaml > process.env
144
153
  *
@@ -148,7 +157,7 @@ declare function loadConfigSync(): AgorConfig;
148
157
  * @param key - Credential key from CredentialKey enum
149
158
  * @returns API key or undefined
150
159
  */
151
- declare function getCredential(key: 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'ANTHROPIC_BASE_URL' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY'): string | undefined;
160
+ declare function getCredential(key: ConfigCredentialKey): string | undefined;
152
161
  /**
153
162
  * Get the Unix user that the Agor daemon runs as
154
163
  *
@@ -268,4 +277,4 @@ declare function getReposDirAsync(): Promise<string>;
268
277
  */
269
278
  declare function getWorktreesDirAsync(): Promise<string>;
270
279
 
271
- export { saveConfig as A, setConfigValue as B, unsetConfigValue as C, PublicBaseUrlNotConfiguredError as P, expandHomePath as a, getBaseUrl as b, getConfigPath as c, getConfigValue as d, ensureCodexHome as e, getCredential as f, getAgorHome as g, getDaemonUrl as h, getDaemonUser as i, getDataHome as j, getDataHomeAsync as k, getDefaultConfig as l, getReposDir as m, getReposDirAsync as n, getWorktreePath as o, getWorktreesDir as p, getWorktreesDirAsync as q, initConfig as r, isUnixImpersonationEnabled as s, isWorktreeRbacEnabled as t, loadConfig as u, loadConfigFromFile as v, loadConfigSync as w, requireDaemonUser as x, requirePublicBaseUrl as y, resolveCodexHome as z };
280
+ export { resolveCodexHome as A, saveConfig as B, type ConfigCredentialKey as C, setConfigValue as D, unsetConfigValue as E, PublicBaseUrlNotConfiguredError as P, expandHomePath as a, getBaseUrl as b, getConfigPath as c, getConfigValue as d, ensureCodexHome as e, getCredential as f, getAgorHome as g, getDaemonUrl as h, getDaemonUser as i, getDataHome as j, getDataHomeAsync as k, getDefaultConfig as l, getReposDir as m, getReposDirAsync as n, getWorktreePath as o, getWorktreesDir as p, getWorktreesDirAsync as q, initConfig as r, isConfigCredentialKey as s, isUnixImpersonationEnabled as t, isWorktreeRbacEnabled as u, loadConfig as v, loadConfigFromFile as w, loadConfigSync as x, requireDaemonUser as y, requirePublicBaseUrl as z };
@@ -1,4 +1,4 @@
1
- import { a as AgorConfig } from './types-DqPMmTad.js';
1
+ import { a as AgorConfig } from './types-n61iaXub.js';
2
2
 
3
3
  /**
4
4
  * Agor Config Manager
@@ -139,6 +139,15 @@ declare function requirePublicBaseUrl(): Promise<string>;
139
139
  * Use for hot paths where async is not possible.
140
140
  */
141
141
  declare function loadConfigSync(): AgorConfig;
142
+ /**
143
+ * Credential keys that are valid in `config.yaml`'s `credentials` section
144
+ * (i.e., keys that have a meaningful global / app-level value). User-only
145
+ * tokens like `CLAUDE_CODE_OAUTH_TOKEN` (Pro/Max subscription) and
146
+ * `COPILOT_GITHUB_TOKEN` are intentionally excluded — they don't make sense
147
+ * as a global default.
148
+ */
149
+ type ConfigCredentialKey = 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'ANTHROPIC_BASE_URL' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY';
150
+ declare function isConfigCredentialKey(key: string): key is ConfigCredentialKey;
142
151
  /**
143
152
  * Get credential with precedence: config.yaml > process.env
144
153
  *
@@ -148,7 +157,7 @@ declare function loadConfigSync(): AgorConfig;
148
157
  * @param key - Credential key from CredentialKey enum
149
158
  * @returns API key or undefined
150
159
  */
151
- declare function getCredential(key: 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN' | 'ANTHROPIC_BASE_URL' | 'OPENAI_API_KEY' | 'GEMINI_API_KEY'): string | undefined;
160
+ declare function getCredential(key: ConfigCredentialKey): string | undefined;
152
161
  /**
153
162
  * Get the Unix user that the Agor daemon runs as
154
163
  *
@@ -268,4 +277,4 @@ declare function getReposDirAsync(): Promise<string>;
268
277
  */
269
278
  declare function getWorktreesDirAsync(): Promise<string>;
270
279
 
271
- export { saveConfig as A, setConfigValue as B, unsetConfigValue as C, PublicBaseUrlNotConfiguredError as P, expandHomePath as a, getBaseUrl as b, getConfigPath as c, getConfigValue as d, ensureCodexHome as e, getCredential as f, getAgorHome as g, getDaemonUrl as h, getDaemonUser as i, getDataHome as j, getDataHomeAsync as k, getDefaultConfig as l, getReposDir as m, getReposDirAsync as n, getWorktreePath as o, getWorktreesDir as p, getWorktreesDirAsync as q, initConfig as r, isUnixImpersonationEnabled as s, isWorktreeRbacEnabled as t, loadConfig as u, loadConfigFromFile as v, loadConfigSync as w, requireDaemonUser as x, requirePublicBaseUrl as y, resolveCodexHome as z };
280
+ export { resolveCodexHome as A, saveConfig as B, type ConfigCredentialKey as C, setConfigValue as D, unsetConfigValue as E, PublicBaseUrlNotConfiguredError as P, expandHomePath as a, getBaseUrl as b, getConfigPath as c, getConfigValue as d, ensureCodexHome as e, getCredential as f, getAgorHome as g, getDaemonUrl as h, getDaemonUser as i, getDataHome as j, getDataHomeAsync as k, getDefaultConfig as l, getReposDir as m, getReposDirAsync as n, getWorktreePath as o, getWorktreesDir as p, getWorktreesDirAsync as q, initConfig as r, isConfigCredentialKey as s, isUnixImpersonationEnabled as t, isWorktreeRbacEnabled as u, loadConfig as v, loadConfigFromFile as w, loadConfigSync as x, requireDaemonUser as y, requirePublicBaseUrl as z };
@@ -1,7 +1,7 @@
1
1
  import { c as AgenticToolName } from './agentic-tool-BulhIUGb.cjs';
2
2
  import { R as Repo, h as Worktree } from './repo-Ckl-vaAk.cjs';
3
3
  import { P as PermissionMode } from './session-MNU4BQv4.cjs';
4
- import { g as User } from './user-DkNdeFoz.cjs';
4
+ import { q as User } from './user-CpfkcV2C.cjs';
5
5
 
6
6
  type ResourceRepoConfig = Pick<Repo, 'repo_id' | 'slug' | 'remote_url' | 'repo_type' | 'default_branch'> & {
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { c as AgenticToolName } from './agentic-tool-cYqsU5i5.js';
2
2
  import { R as Repo, h as Worktree } from './repo-84E0A2gV.js';
3
3
  import { P as PermissionMode } from './session-CAfhv1qL.js';
4
- import { g as User } from './user-BfVWBmXA.js';
4
+ import { q as User } from './user-DP-XZMIM.js';
5
5
 
6
6
  type ResourceRepoConfig = Pick<Repo, 'repo_id' | 'slug' | 'remote_url' | 'repo_type' | 'default_branch'> & {
7
7
  /**