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.
- package/dist/cli/lib/banner.d.ts +1 -1
- package/dist/cli/lib/banner.js +1 -1
- package/dist/cli/lib/check-migrations.test.js +9627 -9112
- package/dist/cli/lib/daemon-manager.test.js +9632 -9117
- package/dist/cli/lib/help.js +1 -1
- package/dist/core/api/index.d.cts +3 -3
- package/dist/core/api/index.d.ts +3 -3
- package/dist/core/{board-comment-DIdOJrSF.d.cts → board-comment-CCFVVN7K.d.cts} +0 -2
- package/dist/core/{board-comment-3N-jSgsk.d.ts → board-comment-iT3DgZb4.d.ts} +0 -2
- package/dist/core/claude/index.cjs +29 -19
- package/dist/core/claude/index.d.cts +2 -2
- package/dist/core/claude/index.d.ts +2 -2
- package/dist/core/claude/index.js +32 -33
- package/dist/core/client/index.cjs +49 -0
- package/dist/core/client/index.d.cts +7 -7
- package/dist/core/client/index.d.ts +7 -7
- package/dist/core/client/index.js +46 -0
- package/dist/core/{client-B5PyIvNc.d.cts → client-CemqXk0v.d.cts} +116 -100
- package/dist/core/{client-C1CsRi19.d.ts → client-uYEOha6g.d.ts} +116 -100
- package/dist/core/config/browser.d.cts +3 -3
- package/dist/core/config/browser.d.ts +3 -3
- package/dist/core/config/index.cjs +84 -41
- package/dist/core/config/index.d.cts +59 -17
- package/dist/core/config/index.d.ts +59 -17
- package/dist/core/config/index.js +86 -55
- package/dist/core/{config-manager-TxxjFMRd.d.cts → config-manager-B8TP9Kz0.d.cts} +12 -3
- package/dist/core/{config-manager-DTrsj6G3.d.ts → config-manager-CDEB0FY4.d.ts} +12 -3
- package/dist/core/{config-services-YEZ4DwCD.d.cts → config-services-CXyQKEK5.d.cts} +1 -1
- package/dist/core/{config-services-DcO2GRgh.d.ts → config-services-DhM7_yWn.d.ts} +1 -1
- package/dist/core/db/index.cjs +235 -175
- package/dist/core/db/index.d.cts +190 -147
- package/dist/core/db/index.d.ts +190 -147
- package/dist/core/db/index.js +239 -190
- package/dist/core/db/session-guard.d.cts +4 -4
- package/dist/core/db/session-guard.d.ts +4 -4
- package/dist/core/drizzle/postgres/0028_queued_tasks.sql +8 -0
- package/dist/core/drizzle/postgres/0030_migrate_queued_messages.sql +24 -0
- package/dist/core/drizzle/postgres/0031_restructure_agentic_tool_config.sql +201 -0
- package/dist/core/drizzle/postgres/meta/_journal.json +21 -0
- package/dist/core/drizzle/sqlite/0039_queued_tasks.sql +13 -0
- package/dist/core/drizzle/sqlite/0040_migrate_queued_messages.sql +61 -0
- package/dist/core/drizzle/sqlite/0041_restructure_agentic_tool_config.sql +204 -0
- package/dist/core/drizzle/sqlite/meta/_journal.json +21 -0
- package/dist/core/gateway/index.d.cts +2 -2
- package/dist/core/gateway/index.d.ts +2 -2
- package/dist/core/{gateway-BnOlAelY.d.cts → gateway-BWq4j_Ll.d.cts} +1 -1
- package/dist/core/{gateway-B_4X-v07.d.ts → gateway-C3Jm_akw.d.ts} +1 -1
- package/dist/core/git/index.d.cts +4 -4
- package/dist/core/git/index.d.ts +4 -4
- package/dist/core/index.cjs +474 -201
- package/dist/core/index.d.cts +12 -10
- package/dist/core/index.d.ts +12 -10
- package/dist/core/index.js +473 -216
- package/dist/core/lib/feathers-validation.cjs +2 -1
- package/dist/core/lib/feathers-validation.d.cts +1 -1
- package/dist/core/lib/feathers-validation.d.ts +1 -1
- package/dist/core/lib/feathers-validation.js +2 -1
- package/dist/core/mcp/index.cjs +26 -16
- package/dist/core/mcp/index.js +26 -16
- package/dist/core/{message-DinITA7a.d.cts → message-CSWOsdcZ.d.cts} +1 -9
- package/dist/core/{message-CHUUP6OS.d.ts → message-DZa8g0s0.d.ts} +1 -9
- package/dist/core/models/index.d.cts +3 -73
- package/dist/core/models/index.d.ts +3 -73
- package/dist/core/package.json +5 -0
- package/dist/core/permissions/index.d.cts +1 -1
- package/dist/core/permissions/index.d.ts +1 -1
- package/dist/core/resolve-config-BcL-Hv8k.d.ts +74 -0
- package/dist/core/resolve-config-DTCxuSBx.d.cts +74 -0
- package/dist/core/seed/index.cjs +145 -98
- package/dist/core/seed/index.js +148 -112
- package/dist/core/{session-guard-C0LkDEN7.d.ts → session-guard-BFqVtBoS.d.ts} +1 -1
- package/dist/core/{session-guard-kvAx_8Fb.d.cts → session-guard-KHh0cnET.d.cts} +1 -1
- package/dist/core/sessions/index.cjs +184 -0
- package/dist/core/sessions/index.d.cts +79 -0
- package/dist/core/sessions/index.d.ts +79 -0
- package/dist/core/sessions/index.js +157 -0
- package/dist/core/{task-BLPFCORT.d.ts → task-BHV-YHg1.d.ts} +41 -3
- package/dist/core/{task-wht1RJEL.d.cts → task-C2Hy7H6u.d.cts} +41 -3
- package/dist/core/templates/session-context.d.cts +1 -1
- package/dist/core/templates/session-context.d.ts +1 -1
- package/dist/core/tools/mcp/oauth-mcp-transport.cjs +168 -66
- package/dist/core/tools/mcp/oauth-mcp-transport.d.cts +92 -16
- package/dist/core/tools/mcp/oauth-mcp-transport.d.ts +92 -16
- package/dist/core/tools/mcp/oauth-mcp-transport.js +165 -66
- package/dist/core/tools/mcp/oauth-refresh.cjs +43 -53
- package/dist/core/tools/mcp/oauth-refresh.d.cts +3 -3
- package/dist/core/tools/mcp/oauth-refresh.d.ts +3 -3
- package/dist/core/tools/mcp/oauth-refresh.js +58 -78
- package/dist/core/types/index.cjs +49 -0
- package/dist/core/types/index.d.cts +7 -7
- package/dist/core/types/index.d.ts +7 -7
- package/dist/core/types/index.js +46 -0
- package/dist/core/{types-DNqfdt1z.d.cts → types-D4Rl6ZKN.d.cts} +18 -2
- package/dist/core/{types-DqPMmTad.d.ts → types-n61iaXub.d.ts} +18 -2
- package/dist/core/unix/index.cjs +164 -110
- package/dist/core/unix/index.d.cts +7 -8
- package/dist/core/unix/index.d.ts +7 -8
- package/dist/core/unix/index.js +167 -124
- package/dist/core/{user-DkNdeFoz.d.cts → user-CpfkcV2C.d.cts} +139 -13
- package/dist/core/{user-BfVWBmXA.d.ts → user-DP-XZMIM.d.ts} +139 -13
- package/dist/core/utils/permission-mode-mapper.d.cts +0 -2
- package/dist/core/utils/permission-mode-mapper.d.ts +0 -2
- package/dist/daemon/index.js +2976 -2791
- package/dist/daemon/main.js +2976 -2791
- package/dist/daemon/mcp/server.js +177 -134
- package/dist/daemon/mcp/tools/analytics.js +19 -5
- package/dist/daemon/mcp/tools/artifacts.js +19 -5
- package/dist/daemon/mcp/tools/boards.js +19 -5
- package/dist/daemon/mcp/tools/card-types.js +19 -5
- package/dist/daemon/mcp/tools/cards.js +19 -5
- package/dist/daemon/mcp/tools/environment.js +19 -5
- package/dist/daemon/mcp/tools/mcp-servers.d.ts +29 -2
- package/dist/daemon/mcp/tools/mcp-servers.js +64 -54
- package/dist/daemon/mcp/tools/messages.js +19 -5
- package/dist/daemon/mcp/tools/repos.js +19 -5
- package/dist/daemon/mcp/tools/search.js +19 -5
- package/dist/daemon/mcp/tools/sessions.js +175 -53
- package/dist/daemon/mcp/tools/tasks.js +19 -5
- package/dist/daemon/mcp/tools/users.js +19 -5
- package/dist/daemon/mcp/tools/worktrees.js +37 -38
- package/dist/daemon/register-hooks.js +52 -1
- package/dist/daemon/register-routes.js +436 -424
- package/dist/daemon/register-services.js +255 -140
- package/dist/daemon/services/config.d.ts +7 -1
- package/dist/daemon/services/config.js +3 -2
- package/dist/daemon/services/gateway.js +28 -15
- package/dist/daemon/services/mcp-servers.d.ts +7 -2
- package/dist/daemon/services/repos.js +2 -0
- package/dist/daemon/services/sessions.d.ts +1 -1
- package/dist/daemon/services/sessions.js +8 -16
- package/dist/daemon/services/tasks.js +16 -10
- package/dist/daemon/services/terminals.js +2 -0
- package/dist/daemon/services/users.d.ts +27 -11
- package/dist/daemon/services/users.js +89 -43
- package/dist/daemon/services/worktree-owners.js +2 -0
- package/dist/daemon/services/worktrees.js +2 -0
- package/dist/daemon/setup/index.js +5 -2
- package/dist/daemon/setup/socketio.d.ts +10 -1
- package/dist/daemon/setup/socketio.js +7 -3
- package/dist/daemon/startup.js +13 -1
- package/dist/daemon/utils/apply-session-config-defaults.d.ts +54 -0
- package/dist/daemon/utils/apply-session-config-defaults.js +46 -0
- package/dist/daemon/utils/spawn-executor.js +2 -0
- package/dist/daemon/utils/worktree-authorization.d.ts +2 -4
- package/dist/executor/commands/zellij.d.ts.map +1 -1
- package/dist/executor/commands/zellij.js +2 -2
- package/dist/executor/handlers/sdk/base-executor.d.ts +4 -3
- package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/base-executor.js +11 -5
- package/dist/executor/payload-types.d.ts +14 -14
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/claude-tool.js +9 -4
- package/dist/executor/sdk-handlers/claude/import/task-extractor.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/import/task-extractor.js +0 -5
- package/dist/executor/sdk-handlers/claude/message-builder.d.ts +23 -2
- package/dist/executor/sdk-handlers/claude/message-builder.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/message-builder.js +33 -2
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts +9 -1
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +12 -0
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/query-builder.js +11 -6
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +0 -5
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.js +9 -24
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +15 -2
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +39 -10
- package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +0 -5
- package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/copilot/copilot-tool.js +5 -22
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +0 -5
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/gemini-tool.js +9 -24
- package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js → CodeEditor.inner-CVLqZBtM.js} +1 -1
- package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js.gz → CodeEditor.inner-CVLqZBtM.js.gz} +0 -0
- package/dist/ui/assets/{_basePickBy-DfxojsEt.js → _basePickBy-CFq5ES2J.js} +1 -1
- package/dist/ui/assets/_basePickBy-CFq5ES2J.js.gz +0 -0
- package/dist/ui/assets/{_baseUniq-DWFPJOTC.js → _baseUniq-C4uKBvNt.js} +1 -1
- package/dist/ui/assets/_baseUniq-C4uKBvNt.js.gz +0 -0
- package/dist/ui/assets/{arc-vMZ_XGSI.js → arc-BnrcXDJJ.js} +1 -1
- package/dist/ui/assets/arc-BnrcXDJJ.js.gz +0 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DGpk_uOD.js → architectureDiagram-VXUJARFQ-DD9HD-WR.js} +1 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-DD9HD-WR.js.gz +0 -0
- package/dist/ui/assets/{base-80a1f760-BsVlOKqO.js → base-80a1f760-BK1VmxWU.js} +1 -1
- package/dist/ui/assets/{blockDiagram-VD42YOAC-BkRnxc94.js → blockDiagram-VD42YOAC-LBAckZZe.js} +1 -1
- package/dist/ui/assets/blockDiagram-VD42YOAC-LBAckZZe.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js → c4Diagram-YG6GDRKO-yEdylcYP.js} +1 -1
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js.gz → c4Diagram-YG6GDRKO-yEdylcYP.js.gz} +0 -0
- package/dist/ui/assets/channel-CMN-iY3Q.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-C4oVWDo8.js → chunk-4BX2VUAB-IHtzKbmQ.js} +1 -1
- package/dist/ui/assets/{chunk-55IACEB6-CsBbTu57.js → chunk-55IACEB6-C4o5tv_F.js} +1 -1
- package/dist/ui/assets/{chunk-B4BG7PRW-DtkeCZab.js → chunk-B4BG7PRW-EPkzLvlB.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-EPkzLvlB.js.gz +0 -0
- package/dist/ui/assets/{chunk-DI55MBZ5-BQ_asW-1.js → chunk-DI55MBZ5-CW-Bzkzj.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-CW-Bzkzj.js.gz +0 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-DAdcLNG-.js → chunk-FMBD7UC4-DvGU02Io.js} +1 -1
- package/dist/ui/assets/{chunk-QN33PNHL-Do2zad3m.js → chunk-QN33PNHL-C-PIlz9n.js} +1 -1
- package/dist/ui/assets/{chunk-QZHKN3VN-CyhMmSdC.js → chunk-QZHKN3VN-BhpJFm6h.js} +1 -1
- package/dist/ui/assets/{chunk-TZMSLE5B-DlPypnIq.js → chunk-TZMSLE5B-Biake8IU.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-Biake8IU.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-Bz1et8oA.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-Bz1et8oA.js +1 -0
- package/dist/ui/assets/clone-Dxo5sEAf.js +1 -0
- package/dist/ui/assets/{consoleHook-59e792cb-DHYIclEd.js → consoleHook-59e792cb-BzEkHWE8.js} +1 -1
- package/dist/ui/assets/consoleHook-59e792cb-BzEkHWE8.js.gz +0 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-DotJH9qH.js → cose-bilkent-S5V4N54A-vAiVi74s.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-vAiVi74s.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-Btssr8QF.js → dagre-6UL2VRFP-C8w7TshD.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-C8w7TshD.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-D5_Jkog3.js → diagram-PSM6KHXK-CvnjEmtQ.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-CvnjEmtQ.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-DlPEVSL5.js → diagram-QEK2KX5R-D245unng.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-D245unng.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-CjO1k8aG.js → diagram-S2PKOQOG-DgGUHL8Z.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-DgGUHL8Z.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-3cO02-K3.js → erDiagram-Q2GNP2WA-Cf5paK9b.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-Cf5paK9b.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-CajTpSxI.js → flowDiagram-NV44I4VS-BJpHmEXV.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-BJpHmEXV.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js → ganttDiagram-LVOFAZNH-zOyTZcXC.js} +1 -1
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js.gz → ganttDiagram-LVOFAZNH-zOyTZcXC.js.gz} +0 -0
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CH16bg-j.js → gitGraphDiagram-NY62KEGX-B0uxwqMv.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-B0uxwqMv.js.gz +0 -0
- package/dist/ui/assets/{graph-IQoZvE3o.js → graph-NWXc73TO.js} +1 -1
- package/dist/ui/assets/graph-NWXc73TO.js.gz +0 -0
- package/dist/ui/assets/{index-599aeaf7-RUCkgwsg.js → index-599aeaf7-BKmNqoNF.js} +1 -1
- package/dist/ui/assets/index-599aeaf7-BKmNqoNF.js.gz +0 -0
- package/dist/ui/assets/{index-B3AvIgqP.js → index-BRYNiHLB.js} +345 -349
- package/dist/ui/assets/index-BRYNiHLB.js.gz +0 -0
- package/dist/ui/assets/{index-QV5-5yA2.js → index-BX6Xmhes.js} +1 -1
- package/dist/ui/assets/index-BX6Xmhes.js.gz +0 -0
- package/dist/ui/assets/{index-ChmRuj_T.js → index-W1hIq1uU.js} +1 -1
- package/dist/ui/assets/index-W1hIq1uU.js.gz +0 -0
- package/dist/ui/assets/{index-C-quzPWC.js → index-ctuok0zf.js} +1 -1
- package/dist/ui/assets/index-ctuok0zf.js.gz +0 -0
- package/dist/ui/assets/{infoDiagram-ER5ION4S-2e4gZVGT.js → infoDiagram-ER5ION4S-CquCuoTH.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-B5bgV3GH.js → journeyDiagram-XKPGCS4Q-B_XkufZ8.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B_XkufZ8.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-Bp-aWRSc.js → kanban-definition-3W4ZIXB7-C2Bo9HkB.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-C2Bo9HkB.js.gz +0 -0
- package/dist/ui/assets/katex-C6wkUDai.css +1 -0
- package/dist/ui/assets/{katex-DGRguze2.css.gz → katex-C6wkUDai.css.gz} +0 -0
- package/dist/ui/assets/{layout-BH-2XJZq.js → layout-D9A7Uaku.js} +1 -1
- package/dist/ui/assets/layout-D9A7Uaku.js.gz +0 -0
- package/dist/ui/assets/{linear-DCYXhl_f.js → linear-BJUwJsxE.js} +1 -1
- package/dist/ui/assets/linear-BJUwJsxE.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-BAuL6kgQ.js → mermaid.core-DcOEcjcA.js} +5 -5
- package/dist/ui/assets/mermaid.core-DcOEcjcA.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-DpH5N-N0.js → mindmap-definition-VGOIOE7T-BFT1m7BG.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-BFT1m7BG.js.gz +0 -0
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-BB8fBxj1.js → pieDiagram-ADFJNKIX-BFaX1oBV.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BFaX1oBV.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-D6oZLdUD.js → quadrantDiagram-AYHSOK5B-DQps5392.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DQps5392.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-B4uGPp8w.js → requirementDiagram-UZGBJVZJ-3EZ5KWEi.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-3EZ5KWEi.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-MXhIjhme.js → sankeyDiagram-TZEHDZUN-D0qcydqq.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-D0qcydqq.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-Cm53TYug.js → sequenceDiagram-WL72ISMW-BCR5gaaN.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-BCR5gaaN.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BVuxUkj5.js → stateDiagram-FKZM4ZOC-BvX4FLQ9.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BvX4FLQ9.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CxLDvgTF.js +1 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-CMypNiEP.js → timeline-definition-IT6M3QCI-_AWp5LJn.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-_AWp5LJn.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-BEtnV3BT.js → treemap-KMMF4GRG-BZ9FBl5-.js} +1 -1
- package/dist/ui/assets/treemap-KMMF4GRG-BZ9FBl5-.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BnioEYUM.js → xychartDiagram-PRI3JC2R-_wB7yuVd.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-_wB7yuVd.js.gz +0 -0
- package/dist/ui/index.html +1 -1
- package/package.json +8 -8
- package/dist/ui/assets/_basePickBy-DfxojsEt.js.gz +0 -0
- package/dist/ui/assets/_baseUniq-DWFPJOTC.js.gz +0 -0
- package/dist/ui/assets/arc-vMZ_XGSI.js.gz +0 -0
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-DGpk_uOD.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-BkRnxc94.js.gz +0 -0
- package/dist/ui/assets/channel-B9aI4bYN.js +0 -1
- package/dist/ui/assets/chunk-B4BG7PRW-DtkeCZab.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-BQ_asW-1.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-DlPypnIq.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-p-68WO4Z.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-p-68WO4Z.js +0 -1
- package/dist/ui/assets/clone-DzK5ogfn.js +0 -1
- package/dist/ui/assets/consoleHook-59e792cb-DHYIclEd.js.gz +0 -0
- package/dist/ui/assets/cose-bilkent-S5V4N54A-DotJH9qH.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-Btssr8QF.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-D5_Jkog3.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-DlPEVSL5.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-CjO1k8aG.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-3cO02-K3.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-CajTpSxI.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CH16bg-j.js.gz +0 -0
- package/dist/ui/assets/graph-IQoZvE3o.js.gz +0 -0
- package/dist/ui/assets/index-599aeaf7-RUCkgwsg.js.gz +0 -0
- package/dist/ui/assets/index-B3AvIgqP.js.gz +0 -0
- package/dist/ui/assets/index-C-quzPWC.js.gz +0 -0
- package/dist/ui/assets/index-ChmRuj_T.js.gz +0 -0
- package/dist/ui/assets/index-QV5-5yA2.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B5bgV3GH.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-Bp-aWRSc.js.gz +0 -0
- package/dist/ui/assets/katex-DGRguze2.css +0 -1
- package/dist/ui/assets/layout-BH-2XJZq.js.gz +0 -0
- package/dist/ui/assets/linear-DCYXhl_f.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-BAuL6kgQ.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-DpH5N-N0.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BB8fBxj1.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-D6oZLdUD.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-B4uGPp8w.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-MXhIjhme.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-Cm53TYug.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BVuxUkj5.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-8Jeww6Dc.js +0 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CMypNiEP.js.gz +0 -0
- package/dist/ui/assets/treemap-KMMF4GRG-BEtnV3BT.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-BnioEYUM.js.gz +0 -0
|
@@ -15308,11 +15308,47 @@ async function getOAuthStatus(ctx, mcpServer) {
|
|
|
15308
15308
|
}
|
|
15309
15309
|
return { authenticated: false };
|
|
15310
15310
|
}
|
|
15311
|
+
async function summarizeMcpServer(ctx, mcpServer) {
|
|
15312
|
+
const authType = mcpServer.auth?.type || "none";
|
|
15313
|
+
const oauthMode = mcpServer.auth?.oauth_mode || "per_user";
|
|
15314
|
+
const { authenticated } = await getOAuthStatus(ctx, mcpServer);
|
|
15315
|
+
return {
|
|
15316
|
+
mcp_server_id: mcpServer.mcp_server_id,
|
|
15317
|
+
name: mcpServer.name,
|
|
15318
|
+
display_name: mcpServer.display_name,
|
|
15319
|
+
transport: mcpServer.transport,
|
|
15320
|
+
auth_type: authType,
|
|
15321
|
+
oauth_mode: oauthMode,
|
|
15322
|
+
oauth_authenticated: authenticated,
|
|
15323
|
+
enabled: mcpServer.enabled
|
|
15324
|
+
};
|
|
15325
|
+
}
|
|
15326
|
+
async function listAttachedMcpServers(ctx, sessionId, opts = {}) {
|
|
15327
|
+
const sessionMCPServers = await ctx.app.service("session-mcp-servers").find({
|
|
15328
|
+
...ctx.baseServiceParams,
|
|
15329
|
+
query: {
|
|
15330
|
+
session_id: sessionId,
|
|
15331
|
+
...opts.includeDisabled ? {} : { enabled: true },
|
|
15332
|
+
$limit: 100
|
|
15333
|
+
}
|
|
15334
|
+
});
|
|
15335
|
+
const data = Array.isArray(sessionMCPServers) ? sessionMCPServers : sessionMCPServers.data;
|
|
15336
|
+
const summaries = [];
|
|
15337
|
+
for (const sms of data) {
|
|
15338
|
+
try {
|
|
15339
|
+
const mcpServer = await ctx.app.service("mcp-servers").get(sms.mcp_server_id, ctx.baseServiceParams);
|
|
15340
|
+
summaries.push(await summarizeMcpServer(ctx, mcpServer));
|
|
15341
|
+
} catch (error48) {
|
|
15342
|
+
console.warn(`Failed to fetch MCP server ${sms.mcp_server_id}:`, error48);
|
|
15343
|
+
}
|
|
15344
|
+
}
|
|
15345
|
+
return summaries;
|
|
15346
|
+
}
|
|
15311
15347
|
function registerMcpServerTools(server, ctx) {
|
|
15312
15348
|
server.registerTool(
|
|
15313
15349
|
"agor_mcp_servers_list",
|
|
15314
15350
|
{
|
|
15315
|
-
description: "List MCP servers
|
|
15351
|
+
description: "List the MCP-server catalog the current user can access (i.e. servers eligible to attach to a session). Each entry includes name, transport, auth type, and OAuth status. Use this to discover IDs to pass to `agor_sessions_create({ mcpServerIds })`. To see which servers are currently ATTACHED to a session, read `attached_mcp_servers` from `agor_sessions_get_current` or `agor_sessions_get`.",
|
|
15316
15352
|
annotations: { readOnlyHint: true },
|
|
15317
15353
|
inputSchema: external_exports2.object({
|
|
15318
15354
|
includeDisabled: external_exports2.boolean().optional().describe("Include disabled MCP servers (default: false)")
|
|
@@ -15320,62 +15356,20 @@ function registerMcpServerTools(server, ctx) {
|
|
|
15320
15356
|
},
|
|
15321
15357
|
async (args) => {
|
|
15322
15358
|
const includeDisabled = args.includeDisabled === true;
|
|
15323
|
-
const
|
|
15359
|
+
const result = await ctx.app.service("mcp-servers").find({
|
|
15324
15360
|
...ctx.baseServiceParams,
|
|
15325
15361
|
query: {
|
|
15326
|
-
|
|
15362
|
+
scope: "global",
|
|
15327
15363
|
...includeDisabled ? {} : { enabled: true },
|
|
15328
15364
|
$limit: 100
|
|
15329
15365
|
}
|
|
15330
15366
|
});
|
|
15367
|
+
const data = Array.isArray(result) ? result : result.data;
|
|
15331
15368
|
const servers = [];
|
|
15332
|
-
const
|
|
15333
|
-
|
|
15334
|
-
(sms) => sms.mcp_server_id
|
|
15335
|
-
);
|
|
15336
|
-
for (const serverId of mcpServerIds) {
|
|
15337
|
-
try {
|
|
15338
|
-
const mcpServer = await ctx.app.service("mcp-servers").get(serverId, ctx.baseServiceParams);
|
|
15339
|
-
const authType = mcpServer.auth?.type || "none";
|
|
15340
|
-
const oauthMode = mcpServer.auth?.oauth_mode || "per_user";
|
|
15341
|
-
const { authenticated } = await getOAuthStatus(ctx, mcpServer);
|
|
15342
|
-
servers.push({
|
|
15343
|
-
mcp_server_id: mcpServer.mcp_server_id,
|
|
15344
|
-
name: mcpServer.name,
|
|
15345
|
-
display_name: mcpServer.display_name,
|
|
15346
|
-
transport: mcpServer.transport,
|
|
15347
|
-
auth_type: authType,
|
|
15348
|
-
oauth_mode: oauthMode,
|
|
15349
|
-
oauth_authenticated: authenticated,
|
|
15350
|
-
enabled: mcpServer.enabled
|
|
15351
|
-
});
|
|
15352
|
-
} catch (error48) {
|
|
15353
|
-
console.warn(`Failed to fetch MCP server ${serverId}:`, error48);
|
|
15354
|
-
}
|
|
15355
|
-
}
|
|
15356
|
-
const globalServers = await ctx.app.service("mcp-servers").find({
|
|
15357
|
-
...ctx.baseServiceParams,
|
|
15358
|
-
query: { scope: "global", ...includeDisabled ? {} : { enabled: true }, $limit: 100 }
|
|
15359
|
-
});
|
|
15360
|
-
for (const mcpServer of Array.isArray(globalServers) ? globalServers : globalServers.data) {
|
|
15361
|
-
if (!mcpServerIds.includes(mcpServer.mcp_server_id)) {
|
|
15362
|
-
const authType = mcpServer.auth?.type || "none";
|
|
15363
|
-
const oauthMode = mcpServer.auth?.oauth_mode || "per_user";
|
|
15364
|
-
const { authenticated } = await getOAuthStatus(ctx, mcpServer);
|
|
15365
|
-
servers.push({
|
|
15366
|
-
mcp_server_id: mcpServer.mcp_server_id,
|
|
15367
|
-
name: mcpServer.name,
|
|
15368
|
-
display_name: mcpServer.display_name,
|
|
15369
|
-
transport: mcpServer.transport,
|
|
15370
|
-
auth_type: authType,
|
|
15371
|
-
oauth_mode: oauthMode,
|
|
15372
|
-
oauth_authenticated: authenticated,
|
|
15373
|
-
enabled: mcpServer.enabled
|
|
15374
|
-
});
|
|
15375
|
-
}
|
|
15369
|
+
for (const mcpServer of data) {
|
|
15370
|
+
servers.push(await summarizeMcpServer(ctx, mcpServer));
|
|
15376
15371
|
}
|
|
15377
15372
|
return textResult({
|
|
15378
|
-
session_id: ctx.sessionId,
|
|
15379
15373
|
mcp_servers: servers,
|
|
15380
15374
|
summary: {
|
|
15381
15375
|
total: servers.length,
|
|
@@ -15781,21 +15775,40 @@ function registerSearchTools(server, registry2) {
|
|
|
15781
15775
|
|
|
15782
15776
|
// src/mcp/tools/sessions.ts
|
|
15783
15777
|
import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
|
|
15784
|
-
import {
|
|
15778
|
+
import {
|
|
15779
|
+
AVAILABLE_CLAUDE_MODEL_ALIASES,
|
|
15780
|
+
CODEX_MODEL_METADATA,
|
|
15781
|
+
DEFAULT_CLAUDE_MODEL,
|
|
15782
|
+
DEFAULT_CODEX_MODEL,
|
|
15783
|
+
DEFAULT_GEMINI_MODEL,
|
|
15784
|
+
GEMINI_MODELS
|
|
15785
|
+
} from "@agor/core/models";
|
|
15786
|
+
import { resolveSessionDefaults } from "@agor/core/sessions";
|
|
15785
15787
|
import {
|
|
15786
15788
|
AGENTIC_TOOL_CAPABILITIES,
|
|
15787
15789
|
getSessionType
|
|
15788
15790
|
} from "@agor/core/types";
|
|
15789
|
-
var
|
|
15791
|
+
var modelConfigObjectSchema = external_exports2.object({
|
|
15790
15792
|
mode: external_exports2.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
|
|
15791
15793
|
// .min(1): reject empty-string model explicitly so callers don't silently
|
|
15792
15794
|
// fall through to user defaults when they meant to pin a specific model.
|
|
15793
15795
|
model: external_exports2.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
|
|
15794
15796
|
effort: external_exports2.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
|
|
15795
15797
|
provider: external_exports2.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
|
|
15796
|
-
})
|
|
15797
|
-
|
|
15798
|
+
});
|
|
15799
|
+
var modelConfigInputSchema = external_exports2.union([
|
|
15800
|
+
external_exports2.string().min(1).describe(
|
|
15801
|
+
"Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
|
|
15802
|
+
),
|
|
15803
|
+
modelConfigObjectSchema
|
|
15804
|
+
]).optional().describe(
|
|
15805
|
+
"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."
|
|
15798
15806
|
);
|
|
15807
|
+
function coerceModelConfig(input) {
|
|
15808
|
+
if (input === void 0) return void 0;
|
|
15809
|
+
if (typeof input === "string") return { model: input };
|
|
15810
|
+
return input;
|
|
15811
|
+
}
|
|
15799
15812
|
function registerSessionTools(server, ctx) {
|
|
15800
15813
|
server.registerTool(
|
|
15801
15814
|
"agor_sessions_list",
|
|
@@ -15848,7 +15861,7 @@ function registerSessionTools(server, ctx) {
|
|
|
15848
15861
|
server.registerTool(
|
|
15849
15862
|
"agor_sessions_get",
|
|
15850
15863
|
{
|
|
15851
|
-
description: "Get detailed information about a specific session, including genealogy and
|
|
15864
|
+
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.",
|
|
15852
15865
|
annotations: { readOnlyHint: true },
|
|
15853
15866
|
inputSchema: external_exports2.object({
|
|
15854
15867
|
sessionId: external_exports2.string().describe("Session ID (UUIDv7 or short ID like 01a1b2c3)")
|
|
@@ -15861,13 +15874,14 @@ function registerSessionTools(server, ctx) {
|
|
|
15861
15874
|
_last_message_truncation_length: 500
|
|
15862
15875
|
};
|
|
15863
15876
|
const session = await ctx.app.service("sessions").get(args.sessionId, sessionParams);
|
|
15864
|
-
|
|
15877
|
+
const attached_mcp_servers = await listAttachedMcpServers(ctx, session.session_id);
|
|
15878
|
+
return textResult({ ...session, attached_mcp_servers });
|
|
15865
15879
|
}
|
|
15866
15880
|
);
|
|
15867
15881
|
server.registerTool(
|
|
15868
15882
|
"agor_sessions_get_current",
|
|
15869
15883
|
{
|
|
15870
|
-
description: "Get information about the current session (the one making this MCP call). Returns session details
|
|
15884
|
+
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`.",
|
|
15871
15885
|
annotations: { readOnlyHint: true },
|
|
15872
15886
|
inputSchema: external_exports2.object({})
|
|
15873
15887
|
},
|
|
@@ -15917,11 +15931,13 @@ function registerSessionTools(server, ctx) {
|
|
|
15917
15931
|
} catch {
|
|
15918
15932
|
}
|
|
15919
15933
|
}
|
|
15934
|
+
const attached_mcp_servers = await listAttachedMcpServers(ctx, ctx.sessionId);
|
|
15920
15935
|
return textResult({
|
|
15921
15936
|
session,
|
|
15922
15937
|
worktree,
|
|
15923
15938
|
repo,
|
|
15924
|
-
board
|
|
15939
|
+
board,
|
|
15940
|
+
attached_mcp_servers
|
|
15925
15941
|
});
|
|
15926
15942
|
}
|
|
15927
15943
|
);
|
|
@@ -16078,10 +16094,10 @@ function registerSessionTools(server, ctx) {
|
|
|
16078
16094
|
extraInstructions: args.extraInstructions,
|
|
16079
16095
|
task_id: args.taskId,
|
|
16080
16096
|
mcpServerIds: args.mcpServerIds,
|
|
16081
|
-
modelConfig: args.modelConfig
|
|
16097
|
+
modelConfig: coerceModelConfig(args.modelConfig)
|
|
16082
16098
|
};
|
|
16083
16099
|
const childSession = await ctx.app.service("sessions").spawn(ctx.sessionId, spawnData, ctx.baseServiceParams);
|
|
16084
|
-
const
|
|
16100
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
16085
16101
|
{
|
|
16086
16102
|
prompt: args.prompt,
|
|
16087
16103
|
permissionMode: childSession.permission_config?.mode || "acceptEdits",
|
|
@@ -16094,8 +16110,8 @@ function registerSessionTools(server, ctx) {
|
|
|
16094
16110
|
);
|
|
16095
16111
|
return textResult({
|
|
16096
16112
|
session: childSession,
|
|
16097
|
-
taskId:
|
|
16098
|
-
status:
|
|
16113
|
+
taskId: task.task_id,
|
|
16114
|
+
status: task.status,
|
|
16099
16115
|
note: "Subsession created and prompt execution started in background."
|
|
16100
16116
|
});
|
|
16101
16117
|
}
|
|
@@ -16125,22 +16141,23 @@ function registerSessionTools(server, ctx) {
|
|
|
16125
16141
|
const mode = args.mode;
|
|
16126
16142
|
const sessionId = await resolveSessionId(ctx, args.sessionId);
|
|
16127
16143
|
if (mode === "continue") {
|
|
16128
|
-
const
|
|
16144
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
16129
16145
|
{ prompt: args.prompt, stream: true },
|
|
16130
16146
|
{ ...ctx.baseServiceParams, route: { id: sessionId } }
|
|
16131
16147
|
);
|
|
16132
|
-
if (
|
|
16148
|
+
if (task.status === "queued") {
|
|
16133
16149
|
return textResult({
|
|
16134
16150
|
success: true,
|
|
16135
16151
|
queued: true,
|
|
16136
|
-
|
|
16152
|
+
taskId: task.task_id,
|
|
16153
|
+
queue_position: task.queue_position,
|
|
16137
16154
|
note: "Session is busy. Prompt has been queued and will execute automatically when the session becomes idle."
|
|
16138
16155
|
});
|
|
16139
16156
|
}
|
|
16140
16157
|
return textResult({
|
|
16141
16158
|
success: true,
|
|
16142
|
-
taskId:
|
|
16143
|
-
status:
|
|
16159
|
+
taskId: task.task_id,
|
|
16160
|
+
status: task.status,
|
|
16144
16161
|
note: "Prompt added to existing session and execution started."
|
|
16145
16162
|
});
|
|
16146
16163
|
} else if (mode === "fork" || mode === "btw") {
|
|
@@ -16169,7 +16186,7 @@ function registerSessionTools(server, ctx) {
|
|
|
16169
16186
|
await ctx.app.service("sessions").patch(forkedSession.session_id, forkPatch, ctx.baseServiceParams);
|
|
16170
16187
|
}
|
|
16171
16188
|
const updatedSession = await ctx.app.service("sessions").get(forkedSession.session_id, ctx.baseServiceParams);
|
|
16172
|
-
const
|
|
16189
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
16173
16190
|
{
|
|
16174
16191
|
prompt: args.prompt,
|
|
16175
16192
|
permissionMode: updatedSession.permission_config?.mode,
|
|
@@ -16180,21 +16197,21 @@ function registerSessionTools(server, ctx) {
|
|
|
16180
16197
|
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.";
|
|
16181
16198
|
return textResult({
|
|
16182
16199
|
session: updatedSession,
|
|
16183
|
-
taskId:
|
|
16184
|
-
status:
|
|
16200
|
+
taskId: task.task_id,
|
|
16201
|
+
status: task.status,
|
|
16185
16202
|
note
|
|
16186
16203
|
});
|
|
16187
16204
|
} else if (mode === "subsession") {
|
|
16188
16205
|
const spawnData = {
|
|
16189
16206
|
prompt: args.prompt,
|
|
16190
16207
|
mcpServerIds: args.mcpServerIds,
|
|
16191
|
-
modelConfig: args.modelConfig
|
|
16208
|
+
modelConfig: coerceModelConfig(args.modelConfig)
|
|
16192
16209
|
};
|
|
16193
16210
|
if (args.title) spawnData.title = args.title;
|
|
16194
16211
|
if (args.agenticTool) spawnData.agent = args.agenticTool;
|
|
16195
16212
|
if (args.taskId) spawnData.task_id = args.taskId;
|
|
16196
16213
|
const childSession = await ctx.app.service("sessions").spawn(sessionId, spawnData, ctx.baseServiceParams);
|
|
16197
|
-
const
|
|
16214
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
16198
16215
|
{
|
|
16199
16216
|
prompt: args.prompt,
|
|
16200
16217
|
permissionMode: childSession.permission_config?.mode,
|
|
@@ -16204,8 +16221,8 @@ function registerSessionTools(server, ctx) {
|
|
|
16204
16221
|
);
|
|
16205
16222
|
return textResult({
|
|
16206
16223
|
session: childSession,
|
|
16207
|
-
taskId:
|
|
16208
|
-
status:
|
|
16224
|
+
taskId: task.task_id,
|
|
16225
|
+
status: task.status,
|
|
16209
16226
|
note: "Subsession created and prompt execution started."
|
|
16210
16227
|
});
|
|
16211
16228
|
}
|
|
@@ -16215,7 +16232,7 @@ function registerSessionTools(server, ctx) {
|
|
|
16215
16232
|
server.registerTool(
|
|
16216
16233
|
"agor_sessions_create",
|
|
16217
16234
|
{
|
|
16218
|
-
description:
|
|
16235
|
+
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.',
|
|
16219
16236
|
inputSchema: external_exports2.object({
|
|
16220
16237
|
worktreeId: external_exports2.string().describe("Worktree ID where the session will run (required)"),
|
|
16221
16238
|
agenticTool: external_exports2.enum(["claude-code", "codex", "gemini"]).describe("Which agent to use for this session (required)"),
|
|
@@ -16249,27 +16266,20 @@ function registerSessionTools(server, ctx) {
|
|
|
16249
16266
|
const { getGitState, getCurrentBranch } = await import("@agor/core/git");
|
|
16250
16267
|
const currentSha = await getGitState(worktree.path);
|
|
16251
16268
|
const currentRef = await getCurrentBranch(worktree.path);
|
|
16252
|
-
const
|
|
16253
|
-
const
|
|
16254
|
-
|
|
16255
|
-
|
|
16256
|
-
|
|
16257
|
-
|
|
16258
|
-
|
|
16259
|
-
|
|
16260
|
-
|
|
16261
|
-
|
|
16262
|
-
|
|
16263
|
-
|
|
16264
|
-
|
|
16265
|
-
|
|
16266
|
-
};
|
|
16267
|
-
}
|
|
16268
|
-
const modelConfig = resolveModelConfigPrecedence([
|
|
16269
|
-
args.modelConfig,
|
|
16270
|
-
userToolDefaults?.modelConfig
|
|
16271
|
-
]);
|
|
16272
|
-
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 || [];
|
|
16269
|
+
const explicitMcpServerIds = args.mcpServerIds !== void 0 ? await Promise.all(args.mcpServerIds.map((id) => resolveMcpServerId(ctx, id))) : void 0;
|
|
16270
|
+
const resolvedDefaults = resolveSessionDefaults({
|
|
16271
|
+
agenticTool,
|
|
16272
|
+
user,
|
|
16273
|
+
worktree,
|
|
16274
|
+
overrides: {
|
|
16275
|
+
modelConfig: coerceModelConfig(args.modelConfig),
|
|
16276
|
+
mcpServerIds: explicitMcpServerIds
|
|
16277
|
+
}
|
|
16278
|
+
});
|
|
16279
|
+
const permissionConfig = resolvedDefaults.permission_config;
|
|
16280
|
+
const modelConfig = resolvedDefaults.model_config;
|
|
16281
|
+
const mcpServerIds = resolvedDefaults.mcp_server_ids;
|
|
16282
|
+
const permissionMode = permissionConfig.mode;
|
|
16273
16283
|
const mcpServerIdsFromArgs = args.mcpServerIds !== void 0;
|
|
16274
16284
|
const callbackConfig = {};
|
|
16275
16285
|
const effectiveCallbackSessionId = args.callbackSessionId || ctx.sessionId;
|
|
@@ -16325,9 +16335,9 @@ function registerSessionTools(server, ctx) {
|
|
|
16325
16335
|
if (mcpServerIds && mcpServerIds.length > 0) {
|
|
16326
16336
|
for (const mcpServerId of mcpServerIds) {
|
|
16327
16337
|
try {
|
|
16328
|
-
await ctx.app.service("
|
|
16329
|
-
{
|
|
16330
|
-
ctx.baseServiceParams
|
|
16338
|
+
await ctx.app.service("/sessions/:id/mcp-servers").create(
|
|
16339
|
+
{ mcpServerId },
|
|
16340
|
+
{ ...ctx.baseServiceParams, route: { id: session.session_id } }
|
|
16331
16341
|
);
|
|
16332
16342
|
} catch (error48) {
|
|
16333
16343
|
const reason = error48 instanceof Error ? error48.message : String(error48);
|
|
@@ -16341,9 +16351,9 @@ function registerSessionTools(server, ctx) {
|
|
|
16341
16351
|
}
|
|
16342
16352
|
}
|
|
16343
16353
|
}
|
|
16344
|
-
let
|
|
16354
|
+
let initialTask = null;
|
|
16345
16355
|
if (args.initialPrompt) {
|
|
16346
|
-
|
|
16356
|
+
initialTask = await ctx.app.service("/sessions/:id/prompt").create(
|
|
16347
16357
|
{ prompt: args.initialPrompt, permissionMode, stream: true },
|
|
16348
16358
|
{ ...ctx.baseServiceParams, route: { id: session.session_id } }
|
|
16349
16359
|
);
|
|
@@ -16352,7 +16362,7 @@ function registerSessionTools(server, ctx) {
|
|
|
16352
16362
|
const mcpFailureNote = mcpAttachFailures.length > 0 ? ` Warning: ${mcpAttachFailures.length} requested MCP server(s) failed to attach \u2014 see mcpAttachFailures.` : "";
|
|
16353
16363
|
return textResult({
|
|
16354
16364
|
session,
|
|
16355
|
-
taskId:
|
|
16365
|
+
taskId: initialTask?.task_id,
|
|
16356
16366
|
note: args.initialPrompt ? `Session created and initial prompt execution started.${callbackNote}${mcpFailureNote}` : `Session created successfully.${callbackNote}${mcpFailureNote}`,
|
|
16357
16367
|
...mcpAttachFailures.length > 0 && { mcpAttachFailures }
|
|
16358
16368
|
});
|
|
@@ -16613,6 +16623,54 @@ function registerSessionTools(server, ctx) {
|
|
|
16613
16623
|
});
|
|
16614
16624
|
}
|
|
16615
16625
|
);
|
|
16626
|
+
server.registerTool(
|
|
16627
|
+
"agor_models_list",
|
|
16628
|
+
{
|
|
16629
|
+
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.",
|
|
16630
|
+
annotations: { readOnlyHint: true },
|
|
16631
|
+
inputSchema: external_exports2.object({
|
|
16632
|
+
agenticTool: external_exports2.enum(["claude-code", "codex", "gemini"]).optional().describe("Filter to a single agentic tool. Omit to return all tools.")
|
|
16633
|
+
})
|
|
16634
|
+
},
|
|
16635
|
+
async (args) => {
|
|
16636
|
+
const claudeModels = AVAILABLE_CLAUDE_MODEL_ALIASES.map((m) => ({
|
|
16637
|
+
id: m.id,
|
|
16638
|
+
displayName: m.displayName,
|
|
16639
|
+
description: m.description,
|
|
16640
|
+
family: m.family
|
|
16641
|
+
}));
|
|
16642
|
+
const codexModels = Object.entries(CODEX_MODEL_METADATA).map(([id, meta3]) => ({
|
|
16643
|
+
id,
|
|
16644
|
+
displayName: meta3.name,
|
|
16645
|
+
description: meta3.description
|
|
16646
|
+
}));
|
|
16647
|
+
const geminiModels = Object.entries(GEMINI_MODELS).map(([id, meta3]) => ({
|
|
16648
|
+
id,
|
|
16649
|
+
displayName: meta3.name,
|
|
16650
|
+
description: meta3.description,
|
|
16651
|
+
useCase: meta3.useCase
|
|
16652
|
+
}));
|
|
16653
|
+
const all = {
|
|
16654
|
+
"claude-code": {
|
|
16655
|
+
default: DEFAULT_CLAUDE_MODEL,
|
|
16656
|
+
models: claudeModels
|
|
16657
|
+
},
|
|
16658
|
+
codex: {
|
|
16659
|
+
default: DEFAULT_CODEX_MODEL,
|
|
16660
|
+
models: codexModels
|
|
16661
|
+
},
|
|
16662
|
+
gemini: {
|
|
16663
|
+
default: DEFAULT_GEMINI_MODEL,
|
|
16664
|
+
models: geminiModels,
|
|
16665
|
+
note: "Gemini models are normally fetched live from the Google API per-user. This is the static fallback list \u2014 newer models may exist."
|
|
16666
|
+
}
|
|
16667
|
+
};
|
|
16668
|
+
if (args.agenticTool) {
|
|
16669
|
+
return textResult({ [args.agenticTool]: all[args.agenticTool] });
|
|
16670
|
+
}
|
|
16671
|
+
return textResult(all);
|
|
16672
|
+
}
|
|
16673
|
+
);
|
|
16616
16674
|
}
|
|
16617
16675
|
|
|
16618
16676
|
// src/mcp/tools/tasks.ts
|
|
@@ -16797,7 +16855,7 @@ function registerUserTools(server, ctx) {
|
|
|
16797
16855
|
// src/mcp/tools/worktrees.ts
|
|
16798
16856
|
import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
|
|
16799
16857
|
import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
|
|
16800
|
-
import {
|
|
16858
|
+
import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
|
|
16801
16859
|
import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
|
|
16802
16860
|
import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
|
|
16803
16861
|
import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
|
|
@@ -17235,27 +17293,28 @@ function registerWorktreeTools(server, ctx) {
|
|
|
17235
17293
|
};
|
|
17236
17294
|
const renderedPrompt = renderTemplate(zone.trigger.template, templateContext);
|
|
17237
17295
|
if (renderedPrompt) {
|
|
17238
|
-
const
|
|
17296
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
17239
17297
|
{ prompt: renderedPrompt, stream: true },
|
|
17240
17298
|
{ ...ctx.baseServiceParams, route: { id: targetSessionId } }
|
|
17241
17299
|
);
|
|
17242
|
-
if (
|
|
17300
|
+
if (task.status === "queued") {
|
|
17243
17301
|
promptResult = {
|
|
17244
17302
|
queued: true,
|
|
17245
|
-
|
|
17303
|
+
taskId: task.task_id,
|
|
17304
|
+
queue_position: task.queue_position,
|
|
17246
17305
|
sessionId: targetSessionId,
|
|
17247
17306
|
note: "Session is busy. Zone trigger prompt has been queued."
|
|
17248
17307
|
};
|
|
17249
17308
|
console.log(
|
|
17250
|
-
`\u{1F4EC} Zone trigger queued for session ${targetSessionId.substring(0, 8)} at position ${
|
|
17309
|
+
`\u{1F4EC} Zone trigger queued for session ${targetSessionId.substring(0, 8)} at position ${task.queue_position}`
|
|
17251
17310
|
);
|
|
17252
17311
|
} else {
|
|
17253
17312
|
promptResult = {
|
|
17254
|
-
taskId:
|
|
17313
|
+
taskId: task.task_id,
|
|
17255
17314
|
sessionId: targetSessionId,
|
|
17256
17315
|
note: "Zone trigger prompt sent to target session"
|
|
17257
17316
|
};
|
|
17258
|
-
console.log(`\u2705 Zone trigger executed: task ${
|
|
17317
|
+
console.log(`\u2705 Zone trigger executed: task ${task.task_id.substring(0, 8)}`);
|
|
17259
17318
|
}
|
|
17260
17319
|
} else {
|
|
17261
17320
|
promptResult = {
|
|
@@ -17295,24 +17354,11 @@ function registerWorktreeTools(server, ctx) {
|
|
|
17295
17354
|
const { getGitState, getCurrentBranch } = await import("@agor/core/git");
|
|
17296
17355
|
const currentSha = await getGitState(worktree.path);
|
|
17297
17356
|
const currentRef = await getCurrentBranch(worktree.path);
|
|
17298
|
-
const {
|
|
17299
|
-
|
|
17300
|
-
|
|
17301
|
-
|
|
17302
|
-
|
|
17303
|
-
const permissionConfig = {
|
|
17304
|
-
mode: permissionMode,
|
|
17305
|
-
allowedTools: []
|
|
17306
|
-
};
|
|
17307
|
-
if (agenticTool === "codex" && userToolDefaults?.codexSandboxMode && userToolDefaults?.codexApprovalPolicy) {
|
|
17308
|
-
permissionConfig.codex = {
|
|
17309
|
-
sandboxMode: userToolDefaults.codexSandboxMode,
|
|
17310
|
-
approvalPolicy: userToolDefaults.codexApprovalPolicy,
|
|
17311
|
-
networkAccess: userToolDefaults.codexNetworkAccess
|
|
17312
|
-
};
|
|
17313
|
-
}
|
|
17314
|
-
const modelConfig = resolveModelConfig(userToolDefaults?.modelConfig);
|
|
17315
|
-
const mcpServerIds = worktree.mcp_server_ids && worktree.mcp_server_ids.length > 0 ? worktree.mcp_server_ids : userToolDefaults?.mcpServerIds || [];
|
|
17357
|
+
const {
|
|
17358
|
+
permission_config: permissionConfig,
|
|
17359
|
+
model_config: modelConfig,
|
|
17360
|
+
mcp_server_ids: mcpServerIds
|
|
17361
|
+
} = resolveSessionDefaults2({ agenticTool, user, worktree });
|
|
17316
17362
|
const sessionData = {
|
|
17317
17363
|
worktree_id: worktreeId,
|
|
17318
17364
|
agentic_tool: agenticTool,
|
|
@@ -17337,12 +17383,9 @@ function registerWorktreeTools(server, ctx) {
|
|
|
17337
17383
|
if (mcpServerIds.length > 0) {
|
|
17338
17384
|
for (const mcpServerId of mcpServerIds) {
|
|
17339
17385
|
try {
|
|
17340
|
-
await ctx.app.service("
|
|
17341
|
-
{
|
|
17342
|
-
|
|
17343
|
-
mcp_server_id: mcpServerId
|
|
17344
|
-
},
|
|
17345
|
-
ctx.baseServiceParams
|
|
17386
|
+
await ctx.app.service("/sessions/:id/mcp-servers").create(
|
|
17387
|
+
{ mcpServerId },
|
|
17388
|
+
{ ...ctx.baseServiceParams, route: { id: newSession.session_id } }
|
|
17346
17389
|
);
|
|
17347
17390
|
} catch (error48) {
|
|
17348
17391
|
console.warn(
|
|
@@ -17352,16 +17395,16 @@ function registerWorktreeTools(server, ctx) {
|
|
|
17352
17395
|
}
|
|
17353
17396
|
console.log(`\u2705 Attached ${mcpServerIds.length} MCP servers`);
|
|
17354
17397
|
}
|
|
17355
|
-
const
|
|
17398
|
+
const task = await ctx.app.service("/sessions/:id/prompt").create(
|
|
17356
17399
|
{ prompt: renderedPrompt, stream: true },
|
|
17357
17400
|
{ ...ctx.baseServiceParams, route: { id: newSession.session_id } }
|
|
17358
17401
|
);
|
|
17359
17402
|
promptResult = {
|
|
17360
|
-
taskId:
|
|
17403
|
+
taskId: task.task_id,
|
|
17361
17404
|
sessionId: newSession.session_id,
|
|
17362
17405
|
note: `always_new trigger: created session ${newSession.session_id.substring(0, 8)} (${agenticTool}) and sent prompt`
|
|
17363
17406
|
};
|
|
17364
|
-
console.log(`\u2705 Zone trigger executed: task ${
|
|
17407
|
+
console.log(`\u2705 Zone trigger executed: task ${task.task_id.substring(0, 8)}`);
|
|
17365
17408
|
} else {
|
|
17366
17409
|
promptResult = {
|
|
17367
17410
|
note: "Zone trigger template rendered to empty string (check template syntax)"
|
|
@@ -13837,20 +13837,34 @@ import { extractSlugFromUrl, isValidGitUrl, isValidSlug } from "@agor/core/confi
|
|
|
13837
13837
|
|
|
13838
13838
|
// src/mcp/tools/sessions.ts
|
|
13839
13839
|
import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
|
|
13840
|
-
import {
|
|
13840
|
+
import {
|
|
13841
|
+
AVAILABLE_CLAUDE_MODEL_ALIASES,
|
|
13842
|
+
CODEX_MODEL_METADATA,
|
|
13843
|
+
DEFAULT_CLAUDE_MODEL,
|
|
13844
|
+
DEFAULT_CODEX_MODEL,
|
|
13845
|
+
DEFAULT_GEMINI_MODEL,
|
|
13846
|
+
GEMINI_MODELS
|
|
13847
|
+
} from "@agor/core/models";
|
|
13848
|
+
import { resolveSessionDefaults } from "@agor/core/sessions";
|
|
13841
13849
|
import {
|
|
13842
13850
|
AGENTIC_TOOL_CAPABILITIES,
|
|
13843
13851
|
getSessionType
|
|
13844
13852
|
} from "@agor/core/types";
|
|
13845
|
-
var
|
|
13853
|
+
var modelConfigObjectSchema = external_exports.object({
|
|
13846
13854
|
mode: external_exports.enum(["alias", "exact"]).optional().describe("Model selection mode (default: 'alias')"),
|
|
13847
13855
|
// .min(1): reject empty-string model explicitly so callers don't silently
|
|
13848
13856
|
// fall through to user defaults when they meant to pin a specific model.
|
|
13849
13857
|
model: external_exports.string().min(1).describe("Model identifier (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6')"),
|
|
13850
13858
|
effort: external_exports.enum(["low", "medium", "high", "max"]).optional().describe("Reasoning effort level (default: high)"),
|
|
13851
13859
|
provider: external_exports.string().optional().describe("Provider ID (OpenCode only, e.g. 'anthropic')")
|
|
13852
|
-
})
|
|
13853
|
-
|
|
13860
|
+
});
|
|
13861
|
+
var modelConfigInputSchema = external_exports.union([
|
|
13862
|
+
external_exports.string().min(1).describe(
|
|
13863
|
+
"Shorthand: just the model ID string (e.g. 'claude-opus-4-6'). Equivalent to { model: <id> }."
|
|
13864
|
+
),
|
|
13865
|
+
modelConfigObjectSchema
|
|
13866
|
+
]).optional().describe(
|
|
13867
|
+
"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."
|
|
13854
13868
|
);
|
|
13855
13869
|
|
|
13856
13870
|
// src/mcp/tools/users.ts
|
|
@@ -13859,7 +13873,7 @@ import { ROLES as ROLES2 } from "@agor/core/types";
|
|
|
13859
13873
|
// src/mcp/tools/worktrees.ts
|
|
13860
13874
|
import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
|
|
13861
13875
|
import { WorktreeRepository as WorktreeRepository3 } from "@agor/core/db";
|
|
13862
|
-
import {
|
|
13876
|
+
import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
|
|
13863
13877
|
import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
|
|
13864
13878
|
import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
|
|
13865
13879
|
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 } from "@agor/core/db";
|
|
13856
|
-
import {
|
|
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
|
|
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
|
-
})
|
|
13869
|
-
|
|
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
|
|
@@ -13875,7 +13889,7 @@ import { ROLES as ROLES2 } from "@agor/core/types";
|
|
|
13875
13889
|
// src/mcp/tools/worktrees.ts
|
|
13876
13890
|
import { isWorktreeRbacEnabled as isWorktreeRbacEnabled2 } from "@agor/core/config";
|
|
13877
13891
|
import { WorktreeRepository as WorktreeRepository2 } from "@agor/core/db";
|
|
13878
|
-
import {
|
|
13892
|
+
import { resolveSessionDefaults as resolveSessionDefaults2 } from "@agor/core/sessions";
|
|
13879
13893
|
import { getAssistantConfig, isAssistant, WORKTREE_PERMISSION_LEVELS as WORKTREE_PERMISSION_LEVELS2 } from "@agor/core/types";
|
|
13880
13894
|
import { computeZoneRelativePosition } from "@agor/core/utils/board-placement";
|
|
13881
13895
|
import { normalizeOptionalHttpUrl } from "@agor/core/utils/url";
|