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
@@ -6,7 +6,15 @@ var __export = (target, all) => {
6
6
 
7
7
  // src/mcp/tools/sessions.ts
8
8
  import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
9
- import { resolveModelConfigPrecedence } from "@agor/core/models";
9
+ import {
10
+ AVAILABLE_CLAUDE_MODEL_ALIASES,
11
+ CODEX_MODEL_METADATA,
12
+ DEFAULT_CLAUDE_MODEL,
13
+ DEFAULT_CODEX_MODEL,
14
+ DEFAULT_GEMINI_MODEL,
15
+ GEMINI_MODELS
16
+ } from "@agor/core/models";
17
+ import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
10
18
  import {
11
19
  AGENTIC_TOOL_CAPABILITIES,
12
20
  getSessionType
@@ -13875,6 +13883,64 @@ import { NotFoundError } from "@agor/core/utils/errors";
13875
13883
  // src/mcp/tools/cards.ts
13876
13884
  import { BoardObjectRepository } from "@agor/core/db";
13877
13885
 
13886
+ // src/mcp/tools/mcp-servers.ts
13887
+ async function getOAuthStatus(ctx, mcpServer) {
13888
+ const authType = mcpServer.auth?.type || "none";
13889
+ const oauthMode = mcpServer.auth?.oauth_mode || "per_user";
13890
+ if (authType !== "oauth") {
13891
+ return { authenticated: true };
13892
+ }
13893
+ const { UserMCPOAuthTokenRepository } = await import("@agor/core/db");
13894
+ const userTokenRepo = new UserMCPOAuthTokenRepository(ctx.db);
13895
+ const lookupUserId = oauthMode === "shared" ? null : ctx.userId;
13896
+ const tokenData = await userTokenRepo.getToken(lookupUserId, mcpServer.mcp_server_id);
13897
+ if (tokenData) {
13898
+ if (!tokenData.oauth_token_expires_at || tokenData.oauth_token_expires_at > /* @__PURE__ */ new Date()) {
13899
+ return {
13900
+ authenticated: true,
13901
+ tokenExpiresAt: tokenData.oauth_token_expires_at?.getTime()
13902
+ };
13903
+ }
13904
+ }
13905
+ return { authenticated: false };
13906
+ }
13907
+ async function summarizeMcpServer(ctx, mcpServer) {
13908
+ const authType = mcpServer.auth?.type || "none";
13909
+ const oauthMode = mcpServer.auth?.oauth_mode || "per_user";
13910
+ const { authenticated } = await getOAuthStatus(ctx, mcpServer);
13911
+ return {
13912
+ mcp_server_id: mcpServer.mcp_server_id,
13913
+ name: mcpServer.name,
13914
+ display_name: mcpServer.display_name,
13915
+ transport: mcpServer.transport,
13916
+ auth_type: authType,
13917
+ oauth_mode: oauthMode,
13918
+ oauth_authenticated: authenticated,
13919
+ enabled: mcpServer.enabled
13920
+ };
13921
+ }
13922
+ async function listAttachedMcpServers(ctx, sessionId, opts = {}) {
13923
+ const sessionMCPServers = await ctx.app.service("session-mcp-servers").find({
13924
+ ...ctx.baseServiceParams,
13925
+ query: {
13926
+ session_id: sessionId,
13927
+ ...opts.includeDisabled ? {} : { enabled: true },
13928
+ $limit: 100
13929
+ }
13930
+ });
13931
+ const data = Array.isArray(sessionMCPServers) ? sessionMCPServers : sessionMCPServers.data;
13932
+ const summaries = [];
13933
+ for (const sms of data) {
13934
+ try {
13935
+ const mcpServer = await ctx.app.service("mcp-servers").get(sms.mcp_server_id, ctx.baseServiceParams);
13936
+ summaries.push(await summarizeMcpServer(ctx, mcpServer));
13937
+ } catch (error48) {
13938
+ console.warn(`Failed to fetch MCP server ${sms.mcp_server_id}:`, error48);
13939
+ }
13940
+ }
13941
+ return summaries;
13942
+ }
13943
+
13878
13944
  // src/mcp/tools/messages.ts
13879
13945
  import { isWorktreeRbacEnabled } from "@agor/core/config";
13880
13946
  import {
@@ -13899,7 +13965,7 @@ import { ROLES as ROLES2 } from "@agor/core/types";
13899
13965
  // src/mcp/tools/worktrees.ts
13900
13966
  import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
13901
13967
  import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
13902
- import { resolveModelConfig } from "@agor/core/models";
13968
+ import { resolveSessionDefaults } from "@agor/core/sessions";
13903
13969
  import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
13904
13970
  import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
13905
13971
  import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
@@ -13912,16 +13978,27 @@ function textResult(data) {
13912
13978
  }
13913
13979
 
13914
13980
  // src/mcp/tools/sessions.ts
13915
- var modelConfigInputSchema = external_exports.object({
13981
+ var modelConfigObjectSchema = external_exports.object({
13916
13982
  mode: external_exports.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
13917
13983
  // .min(1): reject empty-string model explicitly so callers don't silently
13918
13984
  // fall through to user defaults when they meant to pin a specific model.
13919
13985
  model: external_exports.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
13920
13986
  effort: external_exports.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
13921
13987
  provider: external_exports.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
13922
- }).optional().describe(
13923
- "Model override for this session. When set, overrides the user default model_config. Threaded through to the spawned agent process so it actually runs on the requested model."
13988
+ });
13989
+ var modelConfigInputSchema = external_exports.union([
13990
+ external_exports.string().min(1).describe(
13991
+ "Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
13992
+ ),
13993
+ modelConfigObjectSchema
13994
+ ]).optional().describe(
13995
+ "Model override for this session. Pass either a model ID string (e.g. 'claude-opus-4-6') or a full { mode, model, effort, provider } object. Overrides the user default model_config and is threaded through to the spawned agent process. Call agor_models_list to discover valid model IDs per agenticTool."
13924
13996
  );
13997
+ function coerceModelConfig(input) {
13998
+ if (input === void 0) return void 0;
13999
+ if (typeof input === "string") return { model: input };
14000
+ return input;
14001
+ }
13925
14002
  function registerSessionTools(server, ctx) {
13926
14003
  server.registerTool(
13927
14004
  "agor_sessions_list",
@@ -13974,7 +14051,7 @@ function registerSessionTools(server, ctx) {
13974
14051
  server.registerTool(
13975
14052
  "agor_sessions_get",
13976
14053
  {
13977
- description: "Get detailed information about a specific session, including genealogy and current state. The response includes a `url` field with a clickable link to view the session in the UI.",
14054
+ description: "Get detailed information about a specific session, including genealogy, current state, and the MCP servers currently attached to it (with OAuth status \u2014 check `attached_mcp_servers[].oauth_authenticated` to spot servers needing auth). The response includes a `url` field with a clickable link to view the session in the UI.",
13978
14055
  annotations: { readOnlyHint: true },
13979
14056
  inputSchema: external_exports.object({
13980
14057
  sessionId: external_exports.string().describe("Session ID (UUIDv7 or short ID like 01a1b2c3)")
@@ -13987,13 +14064,14 @@ function registerSessionTools(server, ctx) {
13987
14064
  _last_message_truncation_length: 500
13988
14065
  };
13989
14066
  const session = await ctx.app.service("sessions").get(args.sessionId, sessionParams);
13990
- return textResult(session);
14067
+ const attached_mcp_servers = await listAttachedMcpServers(ctx, session.session_id);
14068
+ return textResult({ ...session, attached_mcp_servers });
13991
14069
  }
13992
14070
  );
13993
14071
  server.registerTool(
13994
14072
  "agor_sessions_get_current",
13995
14073
  {
13996
- description: "Get information about the current session (the one making this MCP call). Returns session details plus denormalized worktree, repo, and board context \u2014 useful for introspection and getting IDs needed by other tools.",
14074
+ description: "Get information about the current session (the one making this MCP call). Returns session details, denormalized worktree/repo/board context, and the MCP servers attached to this session (each with `oauth_authenticated` so callers can spot servers needing auth). To browse the broader catalog of servers eligible to attach, use `agor_mcp_servers_list`.",
13997
14075
  annotations: { readOnlyHint: true },
13998
14076
  inputSchema: external_exports.object({})
13999
14077
  },
@@ -14043,11 +14121,13 @@ function registerSessionTools(server, ctx) {
14043
14121
  } catch {
14044
14122
  }
14045
14123
  }
14124
+ const attached_mcp_servers = await listAttachedMcpServers(ctx, ctx.sessionId);
14046
14125
  return textResult({
14047
14126
  session,
14048
14127
  worktree,
14049
14128
  repo,
14050
- board
14129
+ board,
14130
+ attached_mcp_servers
14051
14131
  });
14052
14132
  }
14053
14133
  );
@@ -14204,10 +14284,10 @@ function registerSessionTools(server, ctx) {
14204
14284
  extraInstructions: args.extraInstructions,
14205
14285
  task_id: args.taskId,
14206
14286
  mcpServerIds: args.mcpServerIds,
14207
- modelConfig: args.modelConfig
14287
+ modelConfig: coerceModelConfig(args.modelConfig)
14208
14288
  };
14209
14289
  const childSession = await ctx.app.service("sessions").spawn(ctx.sessionId, spawnData, ctx.baseServiceParams);
14210
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14290
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14211
14291
  {
14212
14292
  prompt: args.prompt,
14213
14293
  permissionMode: childSession.permission_config?.mode || "acceptEdits",
@@ -14220,8 +14300,8 @@ function registerSessionTools(server, ctx) {
14220
14300
  );
14221
14301
  return textResult({
14222
14302
  session: childSession,
14223
- taskId: promptResponse.taskId,
14224
- status: promptResponse.status,
14303
+ taskId: task.task_id,
14304
+ status: task.status,
14225
14305
  note: "Subsession created and prompt execution started in background."
14226
14306
  });
14227
14307
  }
@@ -14251,22 +14331,23 @@ function registerSessionTools(server, ctx) {
14251
14331
  const mode = args.mode;
14252
14332
  const sessionId = await resolveSessionId(ctx, args.sessionId);
14253
14333
  if (mode === "continue") {
14254
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14334
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14255
14335
  { prompt: args.prompt, stream: true },
14256
14336
  { ...ctx.baseServiceParams, route: { id: sessionId } }
14257
14337
  );
14258
- if (promptResponse.queued) {
14338
+ if (task.status === "queued") {
14259
14339
  return textResult({
14260
14340
  success: true,
14261
14341
  queued: true,
14262
- queue_position: promptResponse.queue_position,
14342
+ taskId: task.task_id,
14343
+ queue_position: task.queue_position,
14263
14344
  note: "Session is busy. Prompt has been queued and will execute automatically when the session becomes idle."
14264
14345
  });
14265
14346
  }
14266
14347
  return textResult({
14267
14348
  success: true,
14268
- taskId: promptResponse.taskId,
14269
- status: promptResponse.status,
14349
+ taskId: task.task_id,
14350
+ status: task.status,
14270
14351
  note: "Prompt added to existing session and execution started."
14271
14352
  });
14272
14353
  } else if (mode === "fork" || mode === "btw") {
@@ -14295,7 +14376,7 @@ function registerSessionTools(server, ctx) {
14295
14376
  await ctx.app.service("sessions").patch(forkedSession.session_id, forkPatch, ctx.baseServiceParams);
14296
14377
  }
14297
14378
  const updatedSession = await ctx.app.service("sessions").get(forkedSession.session_id, ctx.baseServiceParams);
14298
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14379
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14299
14380
  {
14300
14381
  prompt: args.prompt,
14301
14382
  permissionMode: updatedSession.permission_config?.mode,
@@ -14306,21 +14387,21 @@ function registerSessionTools(server, ctx) {
14306
14387
  const note = mode === "btw" ? 'Ephemeral "btw" fork created. Result will be sent back via callback when done, then the fork will auto-archive.' : "Forked session created and prompt execution started.";
14307
14388
  return textResult({
14308
14389
  session: updatedSession,
14309
- taskId: promptResponse.taskId,
14310
- status: promptResponse.status,
14390
+ taskId: task.task_id,
14391
+ status: task.status,
14311
14392
  note
14312
14393
  });
14313
14394
  } else if (mode === "subsession") {
14314
14395
  const spawnData = {
14315
14396
  prompt: args.prompt,
14316
14397
  mcpServerIds: args.mcpServerIds,
14317
- modelConfig: args.modelConfig
14398
+ modelConfig: coerceModelConfig(args.modelConfig)
14318
14399
  };
14319
14400
  if (args.title) spawnData.title = args.title;
14320
14401
  if (args.agenticTool) spawnData.agent = args.agenticTool;
14321
14402
  if (args.taskId) spawnData.task_id = args.taskId;
14322
14403
  const childSession = await ctx.app.service("sessions").spawn(sessionId, spawnData, ctx.baseServiceParams);
14323
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14404
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14324
14405
  {
14325
14406
  prompt: args.prompt,
14326
14407
  permissionMode: childSession.permission_config?.mode,
@@ -14330,8 +14411,8 @@ function registerSessionTools(server, ctx) {
14330
14411
  );
14331
14412
  return textResult({
14332
14413
  session: childSession,
14333
- taskId: promptResponse.taskId,
14334
- status: promptResponse.status,
14414
+ taskId: task.task_id,
14415
+ status: task.status,
14335
14416
  note: "Subsession created and prompt execution started."
14336
14417
  });
14337
14418
  }
@@ -14341,7 +14422,7 @@ function registerSessionTools(server, ctx) {
14341
14422
  server.registerTool(
14342
14423
  "agor_sessions_create",
14343
14424
  {
14344
- description: "Create a new session in an existing worktree. Use for starting fresh work on a new task in the same codebase (e.g., new feature branch, separate investigation). Unlike spawn, this creates an independent session with no parent-child relationship. MCP servers are inherited from the worktree (if configured) or user defaults, or can be overridden via `mcpServerIds`. Model selection falls back to user defaults and can be overridden via `modelConfig`. Supports optional callbacks to notify the creating session when the new session completes.",
14425
+ description: 'Create a new session in an existing worktree. Use for starting fresh work on a new task in the same codebase (e.g., new feature branch, separate investigation). Unlike spawn, this creates an independent session with no parent-child relationship. MCP servers are inherited from the worktree (if configured) or user defaults, or can be overridden via `mcpServerIds`. Model selection falls back to user defaults and can be overridden via `modelConfig` (accepts either a model ID string like "claude-opus-4-6" or a full {mode, model, effort, provider} object \u2014 call `agor_models_list` to discover valid model IDs per agenticTool). Supports optional callbacks to notify the creating session when the new session completes.',
14345
14426
  inputSchema: external_exports.object({
14346
14427
  worktreeId: external_exports.string().describe("Worktree ID where the session will run (required)"),
14347
14428
  agenticTool: external_exports.enum(["claude-code", "codex", "gemini"]).describe("Which agent to use for this session (required)"),
@@ -14375,27 +14456,20 @@ function registerSessionTools(server, ctx) {
14375
14456
  const { getGitState, getCurrentBranch } = await import("@agor/core/git");
14376
14457
  const currentSha = await getGitState(worktree.path);
14377
14458
  const currentRef = await getCurrentBranch(worktree.path);
14378
- const { getDefaultPermissionMode } = await import("@agor/core/types");
14379
- const { mapPermissionMode } = await import("@agor/core/utils/permission-mode-mapper");
14380
- const userToolDefaults = user?.default_agentic_config?.[agenticTool];
14381
- const requestedMode = userToolDefaults?.permissionMode || getDefaultPermissionMode(agenticTool);
14382
- const permissionMode = mapPermissionMode(requestedMode, agenticTool);
14383
- const permissionConfig = {
14384
- mode: permissionMode,
14385
- allowedTools: []
14386
- };
14387
- if (agenticTool === "codex" && userToolDefaults?.codexSandboxMode && userToolDefaults?.codexApprovalPolicy) {
14388
- permissionConfig.codex = {
14389
- sandboxMode: userToolDefaults.codexSandboxMode,
14390
- approvalPolicy: userToolDefaults.codexApprovalPolicy,
14391
- networkAccess: userToolDefaults.codexNetworkAccess
14392
- };
14393
- }
14394
- const modelConfig = resolveModelConfigPrecedence([
14395
- args.modelConfig,
14396
- userToolDefaults?.modelConfig
14397
- ]);
14398
- const mcpServerIds = args.mcpServerIds !== void 0 ? await Promise.all(args.mcpServerIds.map((id) => resolveMcpServerId(ctx, id))) : worktree.mcp_server_ids && worktree.mcp_server_ids.length > 0 ? worktree.mcp_server_ids : userToolDefaults?.mcpServerIds || [];
14459
+ const explicitMcpServerIds = args.mcpServerIds !== void 0 ? await Promise.all(args.mcpServerIds.map((id) => resolveMcpServerId(ctx, id))) : void 0;
14460
+ const resolvedDefaults = resolveSessionDefaults2({
14461
+ agenticTool,
14462
+ user,
14463
+ worktree,
14464
+ overrides: {
14465
+ modelConfig: coerceModelConfig(args.modelConfig),
14466
+ mcpServerIds: explicitMcpServerIds
14467
+ }
14468
+ });
14469
+ const permissionConfig = resolvedDefaults.permission_config;
14470
+ const modelConfig = resolvedDefaults.model_config;
14471
+ const mcpServerIds = resolvedDefaults.mcp_server_ids;
14472
+ const permissionMode = permissionConfig.mode;
14399
14473
  const mcpServerIdsFromArgs = args.mcpServerIds !== void 0;
14400
14474
  const callbackConfig = {};
14401
14475
  const effectiveCallbackSessionId = args.callbackSessionId || ctx.sessionId;
@@ -14451,9 +14525,9 @@ function registerSessionTools(server, ctx) {
14451
14525
  if (mcpServerIds && mcpServerIds.length > 0) {
14452
14526
  for (const mcpServerId of mcpServerIds) {
14453
14527
  try {
14454
- await ctx.app.service("session-mcp-servers").create(
14455
- { session_id: session.session_id, mcp_server_id: mcpServerId },
14456
- ctx.baseServiceParams
14528
+ await ctx.app.service("/sessions/:id/mcp-servers").create(
14529
+ { mcpServerId },
14530
+ { ...ctx.baseServiceParams, route: { id: session.session_id } }
14457
14531
  );
14458
14532
  } catch (error48) {
14459
14533
  const reason = error48 instanceof Error ? error48.message : String(error48);
@@ -14467,9 +14541,9 @@ function registerSessionTools(server, ctx) {
14467
14541
  }
14468
14542
  }
14469
14543
  }
14470
- let promptResponse = null;
14544
+ let initialTask = null;
14471
14545
  if (args.initialPrompt) {
14472
- promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14546
+ initialTask = await ctx.app.service("/sessions/:id/prompt").create(
14473
14547
  { prompt: args.initialPrompt, permissionMode, stream: true },
14474
14548
  { ...ctx.baseServiceParams, route: { id: session.session_id } }
14475
14549
  );
@@ -14478,7 +14552,7 @@ function registerSessionTools(server, ctx) {
14478
14552
  const mcpFailureNote = mcpAttachFailures.length > 0 ? ` Warning: ${mcpAttachFailures.length} requested MCP server(s) failed to attach \u2014 see mcpAttachFailures.` : "";
14479
14553
  return textResult({
14480
14554
  session,
14481
- taskId: promptResponse?.taskId,
14555
+ taskId: initialTask?.task_id,
14482
14556
  note: args.initialPrompt ? `Session created and initial prompt execution started.${callbackNote}${mcpFailureNote}` : `Session created successfully.${callbackNote}${mcpFailureNote}`,
14483
14557
  ...mcpAttachFailures.length > 0 && { mcpAttachFailures }
14484
14558
  });
@@ -14739,6 +14813,54 @@ function registerSessionTools(server, ctx) {
14739
14813
  });
14740
14814
  }
14741
14815
  );
14816
+ server.registerTool(
14817
+ "agor_models_list",
14818
+ {
14819
+ description: "List valid model IDs grouped by agenticTool. Use this to discover what to pass for `modelConfig` (or its string shorthand) in agor_sessions_create / spawn / prompt. Sourced live from the daemon model registry \u2014 when new models ship and the registry is updated, this tool returns them on the next call.",
14820
+ annotations: { readOnlyHint: true },
14821
+ inputSchema: external_exports.object({
14822
+ agenticTool: external_exports.enum(["claude-code", "codex", "gemini"]).optional().describe("Filter to a single agentic tool. Omit to return all tools.")
14823
+ })
14824
+ },
14825
+ async (args) => {
14826
+ const claudeModels = AVAILABLE_CLAUDE_MODEL_ALIASES.map((m) => ({
14827
+ id: m.id,
14828
+ displayName: m.displayName,
14829
+ description: m.description,
14830
+ family: m.family
14831
+ }));
14832
+ const codexModels = Object.entries(CODEX_MODEL_METADATA).map(([id, meta3]) => ({
14833
+ id,
14834
+ displayName: meta3.name,
14835
+ description: meta3.description
14836
+ }));
14837
+ const geminiModels = Object.entries(GEMINI_MODELS).map(([id, meta3]) => ({
14838
+ id,
14839
+ displayName: meta3.name,
14840
+ description: meta3.description,
14841
+ useCase: meta3.useCase
14842
+ }));
14843
+ const all = {
14844
+ "claude-code": {
14845
+ default: DEFAULT_CLAUDE_MODEL,
14846
+ models: claudeModels
14847
+ },
14848
+ codex: {
14849
+ default: DEFAULT_CODEX_MODEL,
14850
+ models: codexModels
14851
+ },
14852
+ gemini: {
14853
+ default: DEFAULT_GEMINI_MODEL,
14854
+ models: geminiModels,
14855
+ note: "Gemini models are normally fetched live from the Google API per-user. This is the static fallback list \u2014 newer models may exist."
14856
+ }
14857
+ };
14858
+ if (args.agenticTool) {
14859
+ return textResult({ [args.agenticTool]: all[args.agenticTool] });
14860
+ }
14861
+ return textResult(all);
14862
+ }
14863
+ );
14742
14864
  }
14743
14865
  export {
14744
14866
  registerSessionTools
@@ -13829,20 +13829,34 @@ import { extractSlugFromUrl, isValidGitUrl, isValidSlug } from "@agor/core/confi
13829
13829
 
13830
13830
  // src/mcp/tools/sessions.ts
13831
13831
  import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
13832
- import { resolveModelConfigPrecedence } from "@agor/core/models";
13832
+ import {
13833
+ AVAILABLE_CLAUDE_MODEL_ALIASES,
13834
+ CODEX_MODEL_METADATA,
13835
+ DEFAULT_CLAUDE_MODEL,
13836
+ DEFAULT_CODEX_MODEL,
13837
+ DEFAULT_GEMINI_MODEL,
13838
+ GEMINI_MODELS
13839
+ } from "@agor/core/models";
13840
+ import { resolveSessionDefaults } from "@agor/core/sessions";
13833
13841
  import {
13834
13842
  AGENTIC_TOOL_CAPABILITIES,
13835
13843
  getSessionType
13836
13844
  } from "@agor/core/types";
13837
- var modelConfigInputSchema = external_exports.object({
13845
+ var modelConfigObjectSchema = external_exports.object({
13838
13846
  mode: external_exports.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
13839
13847
  // .min(1): reject empty-string model explicitly so callers don't silently
13840
13848
  // fall through to user defaults when they meant to pin a specific model.
13841
13849
  model: external_exports.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
13842
13850
  effort: external_exports.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
13843
13851
  provider: external_exports.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
13844
- }).optional().describe(
13845
- "Model override for this session. When set, overrides the user default model_config. Threaded through to the spawned agent process so it actually runs on the requested model."
13852
+ });
13853
+ var modelConfigInputSchema = external_exports.union([
13854
+ external_exports.string().min(1).describe(
13855
+ "Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
13856
+ ),
13857
+ modelConfigObjectSchema
13858
+ ]).optional().describe(
13859
+ "Model override for this session. Pass either a model ID string (e.g. 'claude-opus-4-6') or a full { mode, model, effort, provider } object. Overrides the user default model_config and is threaded through to the spawned agent process. Call agor_models_list to discover valid model IDs per agenticTool."
13846
13860
  );
13847
13861
 
13848
13862
  // src/mcp/tools/users.ts
@@ -13851,7 +13865,7 @@ import { ROLES as ROLES2 } from "@agor/core/types";
13851
13865
  // src/mcp/tools/worktrees.ts
13852
13866
  import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
13853
13867
  import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
13854
- import { resolveModelConfig } from "@agor/core/models";
13868
+ import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
13855
13869
  import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
13856
13870
  import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
13857
13871
  import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
@@ -13826,26 +13826,40 @@ import { extractSlugFromUrl, isValidGitUrl, isValidSlug } from "@agor/core/confi
13826
13826
 
13827
13827
  // src/mcp/tools/sessions.ts
13828
13828
  import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
13829
- import { resolveModelConfigPrecedence } from "@agor/core/models";
13829
+ import {
13830
+ AVAILABLE_CLAUDE_MODEL_ALIASES,
13831
+ CODEX_MODEL_METADATA,
13832
+ DEFAULT_CLAUDE_MODEL,
13833
+ DEFAULT_CODEX_MODEL,
13834
+ DEFAULT_GEMINI_MODEL,
13835
+ GEMINI_MODELS
13836
+ } from "@agor/core/models";
13837
+ import { resolveSessionDefaults } from "@agor/core/sessions";
13830
13838
  import {
13831
13839
  AGENTIC_TOOL_CAPABILITIES,
13832
13840
  getSessionType
13833
13841
  } from "@agor/core/types";
13834
- var modelConfigInputSchema = external_exports.object({
13842
+ var modelConfigObjectSchema = external_exports.object({
13835
13843
  mode: external_exports.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
13836
13844
  // .min(1): reject empty-string model explicitly so callers don't silently
13837
13845
  // fall through to user defaults when they meant to pin a specific model.
13838
13846
  model: external_exports.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
13839
13847
  effort: external_exports.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
13840
13848
  provider: external_exports.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
13841
- }).optional().describe(
13842
- "Model override for this session. When set, overrides the user default model_config. Threaded through to the spawned agent process so it actually runs on the requested model."
13849
+ });
13850
+ var modelConfigInputSchema = external_exports.union([
13851
+ external_exports.string().min(1).describe(
13852
+ "Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
13853
+ ),
13854
+ modelConfigObjectSchema
13855
+ ]).optional().describe(
13856
+ "Model override for this session. Pass either a model ID string (e.g. 'claude-opus-4-6') or a full { mode, model, effort, provider } object. Overrides the user default model_config and is threaded through to the spawned agent process. Call agor_models_list to discover valid model IDs per agenticTool."
13843
13857
  );
13844
13858
 
13845
13859
  // src/mcp/tools/worktrees.ts
13846
13860
  import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
13847
13861
  import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
13848
- import { resolveModelConfig } from "@agor/core/models";
13862
+ import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
13849
13863
  import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
13850
13864
  import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
13851
13865
  import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
@@ -7,7 +7,7 @@ var __export = (target, all) => {
7
7
  // src/mcp/tools/worktrees.ts
8
8
  import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
9
9
  import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
10
- import { resolveModelConfig } from "@agor/core/models";
10
+ import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
11
11
  import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
12
12
  import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
13
13
  import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
@@ -13853,20 +13853,34 @@ import { extractSlugFromUrl, isValidGitUrl, isValidSlug } from "@agor/core/confi
13853
13853
 
13854
13854
  // src/mcp/tools/sessions.ts
13855
13855
  import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
13856
- import { resolveModelConfigPrecedence } from "@agor/core/models";
13856
+ import {
13857
+ AVAILABLE_CLAUDE_MODEL_ALIASES,
13858
+ CODEX_MODEL_METADATA,
13859
+ DEFAULT_CLAUDE_MODEL,
13860
+ DEFAULT_CODEX_MODEL,
13861
+ DEFAULT_GEMINI_MODEL,
13862
+ GEMINI_MODELS
13863
+ } from "@agor/core/models";
13864
+ import { resolveSessionDefaults } from "@agor/core/sessions";
13857
13865
  import {
13858
13866
  AGENTIC_TOOL_CAPABILITIES,
13859
13867
  getSessionType
13860
13868
  } from "@agor/core/types";
13861
- var modelConfigInputSchema = external_exports.object({
13869
+ var modelConfigObjectSchema = external_exports.object({
13862
13870
  mode: external_exports.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
13863
13871
  // .min(1): reject empty-string model explicitly so callers don't silently
13864
13872
  // fall through to user defaults when they meant to pin a specific model.
13865
13873
  model: external_exports.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
13866
13874
  effort: external_exports.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
13867
13875
  provider: external_exports.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
13868
- }).optional().describe(
13869
- "Model override for this session. When set, overrides the user default model_config. Threaded through to the spawned agent process so it actually runs on the requested model."
13876
+ });
13877
+ var modelConfigInputSchema = external_exports.union([
13878
+ external_exports.string().min(1).describe(
13879
+ "Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
13880
+ ),
13881
+ modelConfigObjectSchema
13882
+ ]).optional().describe(
13883
+ "Model override for this session. Pass either a model ID string (e.g. 'claude-opus-4-6') or a full { mode, model, effort, provider } object. Overrides the user default model_config and is threaded through to the spawned agent process. Call agor_models_list to discover valid model IDs per agenticTool."
13870
13884
  );
13871
13885
 
13872
13886
  // src/mcp/tools/users.ts
@@ -14319,27 +14333,28 @@ function registerWorktreeTools(server, ctx) {
14319
14333
  };
14320
14334
  const renderedPrompt = renderTemplate(zone.trigger.template, templateContext);
14321
14335
  if (renderedPrompt) {
14322
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14336
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14323
14337
  { prompt: renderedPrompt, stream: true },
14324
14338
  { ...ctx.baseServiceParams, route: { id: targetSessionId } }
14325
14339
  );
14326
- if (promptResponse.queued) {
14340
+ if (task.status === "queued") {
14327
14341
  promptResult = {
14328
14342
  queued: true,
14329
- queue_position: promptResponse.queue_position,
14343
+ taskId: task.task_id,
14344
+ queue_position: task.queue_position,
14330
14345
  sessionId: targetSessionId,
14331
14346
  note: "Session is busy. Zone trigger prompt has been queued."
14332
14347
  };
14333
14348
  console.log(
14334
- `\u{1F4EC} Zone trigger queued for session ${targetSessionId.substring(0, 8)} at position ${promptResponse.queue_position}`
14349
+ `\u{1F4EC} Zone trigger queued for session ${targetSessionId.substring(0, 8)} at position ${task.queue_position}`
14335
14350
  );
14336
14351
  } else {
14337
14352
  promptResult = {
14338
- taskId: promptResponse.taskId,
14353
+ taskId: task.task_id,
14339
14354
  sessionId: targetSessionId,
14340
14355
  note: "Zone trigger prompt sent to target session"
14341
14356
  };
14342
- console.log(`\u2705 Zone trigger executed: task ${promptResponse.taskId.substring(0, 8)}`);
14357
+ console.log(`\u2705 Zone trigger executed: task ${task.task_id.substring(0, 8)}`);
14343
14358
  }
14344
14359
  } else {
14345
14360
  promptResult = {
@@ -14379,24 +14394,11 @@ function registerWorktreeTools(server, ctx) {
14379
14394
  const { getGitState, getCurrentBranch } = await import("@agor/core/git");
14380
14395
  const currentSha = await getGitState(worktree.path);
14381
14396
  const currentRef = await getCurrentBranch(worktree.path);
14382
- const { getDefaultPermissionMode } = await import("@agor/core/types");
14383
- const { mapPermissionMode } = await import("@agor/core/utils/permission-mode-mapper");
14384
- const userToolDefaults = user?.default_agentic_config?.[agenticTool];
14385
- const requestedMode = userToolDefaults?.permissionMode || getDefaultPermissionMode(agenticTool);
14386
- const permissionMode = mapPermissionMode(requestedMode, agenticTool);
14387
- const permissionConfig = {
14388
- mode: permissionMode,
14389
- allowedTools: []
14390
- };
14391
- if (agenticTool === "codex" && userToolDefaults?.codexSandboxMode && userToolDefaults?.codexApprovalPolicy) {
14392
- permissionConfig.codex = {
14393
- sandboxMode: userToolDefaults.codexSandboxMode,
14394
- approvalPolicy: userToolDefaults.codexApprovalPolicy,
14395
- networkAccess: userToolDefaults.codexNetworkAccess
14396
- };
14397
- }
14398
- const modelConfig = resolveModelConfig(userToolDefaults?.modelConfig);
14399
- const mcpServerIds = worktree.mcp_server_ids && worktree.mcp_server_ids.length > 0 ? worktree.mcp_server_ids : userToolDefaults?.mcpServerIds || [];
14397
+ const {
14398
+ permission_config: permissionConfig,
14399
+ model_config: modelConfig,
14400
+ mcp_server_ids: mcpServerIds
14401
+ } = resolveSessionDefaults2({ agenticTool, user, worktree });
14400
14402
  const sessionData = {
14401
14403
  worktree_id: worktreeId,
14402
14404
  agentic_tool: agenticTool,
@@ -14421,12 +14423,9 @@ function registerWorktreeTools(server, ctx) {
14421
14423
  if (mcpServerIds.length > 0) {
14422
14424
  for (const mcpServerId of mcpServerIds) {
14423
14425
  try {
14424
- await ctx.app.service("session-mcp-servers").create(
14425
- {
14426
- session_id: newSession.session_id,
14427
- mcp_server_id: mcpServerId
14428
- },
14429
- ctx.baseServiceParams
14426
+ await ctx.app.service("/sessions/:id/mcp-servers").create(
14427
+ { mcpServerId },
14428
+ { ...ctx.baseServiceParams, route: { id: newSession.session_id } }
14430
14429
  );
14431
14430
  } catch (error48) {
14432
14431
  console.warn(
@@ -14436,16 +14435,16 @@ function registerWorktreeTools(server, ctx) {
14436
14435
  }
14437
14436
  console.log(`\u2705 Attached ${mcpServerIds.length} MCP servers`);
14438
14437
  }
14439
- const promptResponse = await ctx.app.service("/sessions/:id/prompt").create(
14438
+ const task = await ctx.app.service("/sessions/:id/prompt").create(
14440
14439
  { prompt: renderedPrompt, stream: true },
14441
14440
  { ...ctx.baseServiceParams, route: { id: newSession.session_id } }
14442
14441
  );
14443
14442
  promptResult = {
14444
- taskId: promptResponse.taskId,
14443
+ taskId: task.task_id,
14445
14444
  sessionId: newSession.session_id,
14446
14445
  note: `always_new trigger: created session ${newSession.session_id.substring(0, 8)} (${agenticTool}) and sent prompt`
14447
14446
  };
14448
- console.log(`\u2705 Zone trigger executed: task ${promptResponse.taskId.substring(0, 8)}`);
14447
+ console.log(`\u2705 Zone trigger executed: task ${task.task_id.substring(0, 8)}`);
14449
14448
  } else {
14450
14449
  promptResult = {
14451
14450
  note: "Zone trigger template rendered to empty string (check template syntax)"