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
|
@@ -102,6 +102,15 @@ declare function getSocketAuthState(socket: Socket): SocketAuthState;
|
|
|
102
102
|
* Exported for unit tests.
|
|
103
103
|
*/
|
|
104
104
|
declare function createTokenBucket(capacity: number, refillPerSec: number, now?: () => number): () => boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Per-user socket.io room name. Sockets owned by `userId` auto-join this room
|
|
107
|
+
* on connect / login (see the connection handler and the `app.on('login', …)`
|
|
108
|
+
* hook in this file). Use this everywhere we want to emit to "every tab the
|
|
109
|
+
* user owns" — e.g. user-scoped notifications like `oauth:completed`.
|
|
110
|
+
*
|
|
111
|
+
* Centralized so the prefix can change in one place without drift.
|
|
112
|
+
*/
|
|
113
|
+
declare function userRoomName(userId: string): string;
|
|
105
114
|
/**
|
|
106
115
|
* Validate a terminal channel name and extract its target user_id.
|
|
107
116
|
*
|
|
@@ -150,4 +159,4 @@ declare function createSocketIOConfig(app: Application, options: SocketIOOptions
|
|
|
150
159
|
*/
|
|
151
160
|
declare function configureChannels(app: Application): void;
|
|
152
161
|
|
|
153
|
-
export { type SocketAuthState, type SocketIOOptions, type SocketIOResult, configureChannels, createSocketIOConfig, createTokenBucket, getSocketAuthState, parseTerminalChannel };
|
|
162
|
+
export { type SocketAuthState, type SocketIOOptions, type SocketIOResult, configureChannels, createSocketIOConfig, createTokenBucket, getSocketAuthState, parseTerminalChannel, userRoomName };
|
|
@@ -32,6 +32,9 @@ function createTokenBucket(capacity, refillPerSec, now = Date.now) {
|
|
|
32
32
|
return false;
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
+
function userRoomName(userId) {
|
|
36
|
+
return `user:${userId}`;
|
|
37
|
+
}
|
|
35
38
|
function parseTerminalChannel(channel) {
|
|
36
39
|
if (typeof channel !== "string") return null;
|
|
37
40
|
if (!channel.startsWith("user/") || !channel.endsWith("/terminal")) return null;
|
|
@@ -125,7 +128,7 @@ function createSocketIOConfig(app, options) {
|
|
|
125
128
|
});
|
|
126
129
|
}
|
|
127
130
|
if (user?.user_id) {
|
|
128
|
-
socket.join(
|
|
131
|
+
socket.join(userRoomName(user.user_id));
|
|
129
132
|
console.log(
|
|
130
133
|
`\u{1F3E0} Socket ${socket.id} joined user room at connection: user:${user.user_id.substring(0, 8)}`
|
|
131
134
|
);
|
|
@@ -320,7 +323,7 @@ function createSocketIOConfig(app, options) {
|
|
|
320
323
|
if (!userId) return;
|
|
321
324
|
for (const [, socket] of io.sockets.sockets) {
|
|
322
325
|
if (socket.feathers === context.connection) {
|
|
323
|
-
socket.join(
|
|
326
|
+
socket.join(userRoomName(userId));
|
|
324
327
|
console.log(
|
|
325
328
|
`\u{1F3E0} Socket ${socket.id} joined user room after login: user:${userId.substring(0, 8)}`
|
|
326
329
|
);
|
|
@@ -364,5 +367,6 @@ export {
|
|
|
364
367
|
createSocketIOConfig,
|
|
365
368
|
createTokenBucket,
|
|
366
369
|
getSocketAuthState,
|
|
367
|
-
parseTerminalChannel
|
|
370
|
+
parseTerminalChannel,
|
|
371
|
+
userRoomName
|
|
368
372
|
};
|
package/dist/daemon/startup.js
CHANGED
|
@@ -735,7 +735,19 @@ async function cleanupOrphans(ctx) {
|
|
|
735
735
|
}
|
|
736
736
|
}
|
|
737
737
|
}
|
|
738
|
-
|
|
738
|
+
const queuedResult = await tasksService.find({
|
|
739
|
+
query: { status: TaskStatus.QUEUED, $limit: 1e3 }
|
|
740
|
+
});
|
|
741
|
+
const queuedTasks = queuedResult.data;
|
|
742
|
+
if (queuedTasks.length > 0) {
|
|
743
|
+
console.log(` Found ${queuedTasks.length} queued task(s) \u2014 wiping queue on restart`);
|
|
744
|
+
for (const task of queuedTasks) {
|
|
745
|
+
await tasksService.patch(task.task_id, {
|
|
746
|
+
status: TaskStatus.STOPPED
|
|
747
|
+
});
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
if (orphanedTasks.length === 0 && orphanedSessions.length === 0 && queuedTasks.length === 0) {
|
|
739
751
|
console.log(" No orphaned tasks or sessions found");
|
|
740
752
|
}
|
|
741
753
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { HookContext } from '@agor/core/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Before-create hook that auto-fills `permission_config` and `model_config`
|
|
5
|
+
* from the creator's `default_agentic_config[tool]` when the caller omits them.
|
|
6
|
+
*
|
|
7
|
+
* Why this hook exists
|
|
8
|
+
* --------------------
|
|
9
|
+
* Multiple session-creation paths (MCP `agor_sessions_create`, MCP
|
|
10
|
+
* `agor_worktrees_set_zone`, gateway, the UI drag-into-zone handler, raw
|
|
11
|
+
* REST) used to each carry their own copy of the "fetch user → read tool
|
|
12
|
+
* defaults → resolve permission mode → build permission_config" dance. The UI
|
|
13
|
+
* drag handler shipped without it (issue #1064), so dragged sessions were
|
|
14
|
+
* created with `permission_config: null` — which Claude Code interprets as
|
|
15
|
+
* the most restrictive mode and which made every dragged session hang
|
|
16
|
+
* waiting for manual approval.
|
|
17
|
+
*
|
|
18
|
+
* Centralizing the resolution as a `before:create` hook means:
|
|
19
|
+
* - Every caller benefits, including future ones.
|
|
20
|
+
* - Callers that DO want to set explicit config (MCP tools with `modelConfig`
|
|
21
|
+
* args, gateway with channel-level config, spawn/fork with parent
|
|
22
|
+
* inheritance) just pre-populate the field — the hook leaves populated
|
|
23
|
+
* fields untouched.
|
|
24
|
+
*
|
|
25
|
+
* The shared resolution logic lives in `@agor/core/sessions`
|
|
26
|
+
* ({@link resolveSessionDefaults}); this hook is just the FeathersJS adapter
|
|
27
|
+
* around it.
|
|
28
|
+
*
|
|
29
|
+
* Caveats
|
|
30
|
+
* -------
|
|
31
|
+
* - The hook ONLY fills `permission_config` and `model_config`. MCP server
|
|
32
|
+
* attachment is intentionally left to caller-side code because the
|
|
33
|
+
* "explicit-failures-must-surface" semantics differ between
|
|
34
|
+
* explicitly-requested servers (caller wants to know about failures) and
|
|
35
|
+
* inherited servers (best-effort, log-and-skip). See the open follow-up
|
|
36
|
+
* in `apps/agor-ui/src/components/SessionCanvas/SessionCanvas.tsx`.
|
|
37
|
+
* - Internal calls (no `params.provider`) only resolve via `data.created_by`,
|
|
38
|
+
* so service-to-service callers must stamp it (or the helper falls back to
|
|
39
|
+
* the system default — same behavior as the bug today, just no longer
|
|
40
|
+
* reachable via REST/MCP/UI).
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param opts.warnOnExternalDefaultFill — when `true` (recommended in dev),
|
|
45
|
+
* logs a warning whenever an external (REST/socketio/MCP) caller omits
|
|
46
|
+
* `permission_config`. This surfaces lazy callers without breaking them.
|
|
47
|
+
* The hook still applies defaults; the warning is purely diagnostic.
|
|
48
|
+
*/
|
|
49
|
+
interface ApplySessionConfigDefaultsOpts {
|
|
50
|
+
warnOnExternalDefaultFill?: boolean;
|
|
51
|
+
}
|
|
52
|
+
declare function applySessionConfigDefaults(opts?: ApplySessionConfigDefaultsOpts): (context: HookContext) => Promise<HookContext>;
|
|
53
|
+
|
|
54
|
+
export { type ApplySessionConfigDefaultsOpts, applySessionConfigDefaults };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// src/utils/apply-session-config-defaults.ts
|
|
2
|
+
import { resolveSessionDefaults } from "@agor/core/sessions";
|
|
3
|
+
function applySessionConfigDefaults(opts = {}) {
|
|
4
|
+
const { warnOnExternalDefaultFill = true } = opts;
|
|
5
|
+
return async (context) => {
|
|
6
|
+
if (Array.isArray(context.data)) {
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
9
|
+
const data = context.data;
|
|
10
|
+
if (!data) return context;
|
|
11
|
+
const hasPermission = data.permission_config != null;
|
|
12
|
+
const hasModel = data.model_config != null;
|
|
13
|
+
if (hasPermission && hasModel) return context;
|
|
14
|
+
const agenticTool = data.agentic_tool;
|
|
15
|
+
if (!agenticTool) return context;
|
|
16
|
+
const userId = data.created_by;
|
|
17
|
+
if (!userId) return context;
|
|
18
|
+
let user;
|
|
19
|
+
try {
|
|
20
|
+
const usersService = context.app.service("users");
|
|
21
|
+
user = await usersService.get(userId, { provider: void 0 });
|
|
22
|
+
} catch (err) {
|
|
23
|
+
console.warn(
|
|
24
|
+
`[apply-session-config-defaults] Failed to load user ${userId} for defaults:`,
|
|
25
|
+
err instanceof Error ? err.message : String(err)
|
|
26
|
+
);
|
|
27
|
+
user = null;
|
|
28
|
+
}
|
|
29
|
+
const resolved = resolveSessionDefaults({ agenticTool, user });
|
|
30
|
+
if (!hasPermission) {
|
|
31
|
+
data.permission_config = resolved.permission_config;
|
|
32
|
+
if (warnOnExternalDefaultFill && context.params.provider) {
|
|
33
|
+
console.warn(
|
|
34
|
+
`[apply-session-config-defaults] Filled missing permission_config for ${agenticTool} session (user=${userId}, provider=${context.params.provider}, mode=${resolved.permission_config.mode}). Caller should send permission_config explicitly.`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!hasModel && resolved.model_config) {
|
|
39
|
+
data.model_config = resolved.model_config;
|
|
40
|
+
}
|
|
41
|
+
return context;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
applySessionConfigDefaults
|
|
46
|
+
};
|
|
@@ -100,7 +100,9 @@ function spawnExecutorLocal(payload, options) {
|
|
|
100
100
|
ANTHROPIC_API_KEY: env.ANTHROPIC_API_KEY,
|
|
101
101
|
ANTHROPIC_AUTH_TOKEN: env.ANTHROPIC_AUTH_TOKEN,
|
|
102
102
|
ANTHROPIC_BASE_URL: env.ANTHROPIC_BASE_URL,
|
|
103
|
+
CLAUDE_CODE_OAUTH_TOKEN: env.CLAUDE_CODE_OAUTH_TOKEN,
|
|
103
104
|
OPENAI_API_KEY: env.OPENAI_API_KEY,
|
|
105
|
+
OPENAI_BASE_URL: env.OPENAI_BASE_URL,
|
|
104
106
|
GEMINI_API_KEY: env.GEMINI_API_KEY,
|
|
105
107
|
GOOGLE_API_KEY: env.GOOGLE_API_KEY
|
|
106
108
|
}).filter(([_, v]) => v !== void 0)
|
|
@@ -9,8 +9,7 @@ import { WorktreePermissionLevel, Session, HookContext, Worktree, UUID } from '@
|
|
|
9
9
|
* Uses RBACParams to provide type-safe access to cached RBAC entities (worktree, session, ownership).
|
|
10
10
|
* This avoids redundant database queries within hook chains.
|
|
11
11
|
*
|
|
12
|
-
* @see context/
|
|
13
|
-
* @see context/explorations/unix-user-modes.md
|
|
12
|
+
* @see context/guides/rbac-and-unix-isolation.md
|
|
14
13
|
*/
|
|
15
14
|
|
|
16
15
|
/**
|
|
@@ -183,8 +182,7 @@ declare function loadWorktreeFromSession(worktreeRepo: WorktreeRepository): (con
|
|
|
183
182
|
* This is CRITICAL for Unix isolation - session execution context is determined
|
|
184
183
|
* by session.created_by (which maps to Unix user) and session.unix_username.
|
|
185
184
|
*
|
|
186
|
-
* @see context/
|
|
187
|
-
* @see context/explorations/unix-user-modes.md - Session Execution Model
|
|
185
|
+
* @see context/guides/rbac-and-unix-isolation.md — Session Ownership / Execution Model
|
|
188
186
|
*/
|
|
189
187
|
declare function ensureSessionImmutability(): (context: HookContext) => HookContext<unknown>;
|
|
190
188
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zellij.d.ts","sourceRoot":"","sources":["../../src/commands/zellij.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"zellij.d.ts","sourceRoot":"","sources":["../../src/commands/zellij.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAYjD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAoPzB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAgDzB;AAuID;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAWpC"}
|
|
@@ -85,8 +85,8 @@ export async function handleZellijAttach(payload, options) {
|
|
|
85
85
|
process.exit(0);
|
|
86
86
|
});
|
|
87
87
|
// Import node-pty dynamically (native module)
|
|
88
|
-
// Using
|
|
89
|
-
const nodePty =
|
|
88
|
+
// Using upstream microsoft/node-pty (no engines cap, supports Node 24/25)
|
|
89
|
+
const nodePty = await import('node-pty');
|
|
90
90
|
// Build zellij command - config path added after fs/actualHome are defined below
|
|
91
91
|
const zellijArgs = ['attach', sessionName, '--create'];
|
|
92
92
|
// Build clean environment for Zellij
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* This module provides shared helpers to reduce duplication across
|
|
5
5
|
* Claude, Codex, Gemini, and OpenCode executors.
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
7
|
+
import { type ApiKeyName } from '@agor/core/config';
|
|
8
|
+
import type { AgenticToolName, MessageID, MessageSource, PermissionMode, SessionID, TaskID } from '@agor/core/types';
|
|
8
9
|
import { createFeathersBackedRepositories } from '../../db/feathers-repositories.js';
|
|
9
10
|
import type { StreamingCallbacks } from '../../sdk-handlers/base/types.js';
|
|
10
11
|
import type { AgorClient } from '../../services/feathers-client.js';
|
|
@@ -87,8 +88,8 @@ export declare function executeToolTask(params: {
|
|
|
87
88
|
prompt: string;
|
|
88
89
|
permissionMode?: PermissionMode;
|
|
89
90
|
abortController: AbortController;
|
|
90
|
-
apiKeyEnvVar:
|
|
91
|
-
toolName:
|
|
91
|
+
apiKeyEnvVar: ApiKeyName;
|
|
92
|
+
toolName: AgenticToolName;
|
|
92
93
|
messageSource?: 'gateway' | 'agor';
|
|
93
94
|
createTool: (repos: ReturnType<typeof createFeathersBackedRepositories>, apiKey: string, useNativeAuth: boolean) => BaseTool;
|
|
94
95
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-executor.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdk/base-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"base-executor.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdk/base-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,13 +158,16 @@ async function captureGitStateAtTaskEnd(client, sessionId) {
|
|
|
158
158
|
*
|
|
159
159
|
* Returns resolution result with key, source, and useNativeAuth flag
|
|
160
160
|
*/
|
|
161
|
-
async function resolveApiKeyForTask(keyName, client, taskId) {
|
|
161
|
+
async function resolveApiKeyForTask(keyName, client, taskId, tool) {
|
|
162
162
|
// Call daemon service to resolve API key (no direct database access from executor!)
|
|
163
|
-
// This allows executors to run as different Unix users without needing database access
|
|
163
|
+
// This allows executors to run as different Unix users without needing database access.
|
|
164
|
+
// `tool` scopes the per-user lookup to the calling SDK's bucket so a Codex spawn
|
|
165
|
+
// never resolves a key stored under `agentic_tools['claude-code']`, and vice versa.
|
|
164
166
|
try {
|
|
165
167
|
const result = (await client.service('config/resolve-api-key').create({
|
|
166
168
|
taskId,
|
|
167
169
|
keyName,
|
|
170
|
+
tool,
|
|
168
171
|
}));
|
|
169
172
|
console.log(`[API Key Resolution] Resolved ${keyName} via daemon (source: ${result.source})`);
|
|
170
173
|
return result;
|
|
@@ -181,13 +184,16 @@ async function resolveApiKeyForTask(keyName, client, taskId) {
|
|
|
181
184
|
export async function executeToolTask(params) {
|
|
182
185
|
const { client, sessionId, taskId, prompt, permissionMode, apiKeyEnvVar, toolName, createTool } = params;
|
|
183
186
|
console.log(`[${toolName}] Executing task ${taskId.substring(0, 8)}...`);
|
|
184
|
-
// Resolve API key with proper precedence (user → config → env → native auth)
|
|
185
|
-
|
|
187
|
+
// Resolve API key with proper precedence (user → config → env → native auth).
|
|
188
|
+
// Pass `toolName` so the daemon scopes the per-user lookup to this tool's
|
|
189
|
+
// credential bucket — prevents cross-SDK leak (e.g. Codex picking up an
|
|
190
|
+
// ANTHROPIC_API_KEY stored under claude-code).
|
|
191
|
+
const resolution = await resolveApiKeyForTask(apiKeyEnvVar, client, taskId, toolName);
|
|
186
192
|
// Fail fast if stored key can't be decrypted (e.g. master secret changed)
|
|
187
193
|
if (resolution.decryptionFailed) {
|
|
188
194
|
throw new Error(`API key "${apiKeyEnvVar}" could not be decrypted. ` +
|
|
189
195
|
`The stored key may have been encrypted with a different master secret. ` +
|
|
190
|
-
`Please re-enter your API key in Settings >
|
|
196
|
+
`Please re-enter your API key in Settings > ${toolName} > Authentication.`);
|
|
191
197
|
}
|
|
192
198
|
// Log resolution result
|
|
193
199
|
if (resolution.apiKey) {
|
|
@@ -12,11 +12,11 @@ import { z } from 'zod';
|
|
|
12
12
|
* Tool types supported by the prompt command
|
|
13
13
|
*/
|
|
14
14
|
export declare const ToolTypeSchema: z.ZodEnum<{
|
|
15
|
-
opencode: "opencode";
|
|
16
15
|
"claude-code": "claude-code";
|
|
17
|
-
copilot: "copilot";
|
|
18
16
|
gemini: "gemini";
|
|
19
17
|
codex: "codex";
|
|
18
|
+
opencode: "opencode";
|
|
19
|
+
copilot: "copilot";
|
|
20
20
|
}>;
|
|
21
21
|
export type ToolType = z.infer<typeof ToolTypeSchema>;
|
|
22
22
|
/**
|
|
@@ -31,12 +31,12 @@ export type ToolType = z.infer<typeof ToolTypeSchema>;
|
|
|
31
31
|
*/
|
|
32
32
|
export declare const PermissionModeSchema: z.ZodEnum<{
|
|
33
33
|
default: "default";
|
|
34
|
-
autoEdit: "autoEdit";
|
|
35
|
-
yolo: "yolo";
|
|
36
34
|
acceptEdits: "acceptEdits";
|
|
37
35
|
bypassPermissions: "bypassPermissions";
|
|
38
36
|
plan: "plan";
|
|
39
37
|
dontAsk: "dontAsk";
|
|
38
|
+
autoEdit: "autoEdit";
|
|
39
|
+
yolo: "yolo";
|
|
40
40
|
ask: "ask";
|
|
41
41
|
auto: "auto";
|
|
42
42
|
"on-failure": "on-failure";
|
|
@@ -69,20 +69,20 @@ export declare const PromptPayloadSchema: z.ZodObject<{
|
|
|
69
69
|
taskId: z.ZodString;
|
|
70
70
|
prompt: z.ZodString;
|
|
71
71
|
tool: z.ZodEnum<{
|
|
72
|
-
opencode: "opencode";
|
|
73
72
|
"claude-code": "claude-code";
|
|
74
|
-
copilot: "copilot";
|
|
75
73
|
gemini: "gemini";
|
|
76
74
|
codex: "codex";
|
|
75
|
+
opencode: "opencode";
|
|
76
|
+
copilot: "copilot";
|
|
77
77
|
}>;
|
|
78
78
|
permissionMode: z.ZodOptional<z.ZodEnum<{
|
|
79
79
|
default: "default";
|
|
80
|
-
autoEdit: "autoEdit";
|
|
81
|
-
yolo: "yolo";
|
|
82
80
|
acceptEdits: "acceptEdits";
|
|
83
81
|
bypassPermissions: "bypassPermissions";
|
|
84
82
|
plan: "plan";
|
|
85
83
|
dontAsk: "dontAsk";
|
|
84
|
+
autoEdit: "autoEdit";
|
|
85
|
+
yolo: "yolo";
|
|
86
86
|
ask: "ask";
|
|
87
87
|
auto: "auto";
|
|
88
88
|
"on-failure": "on-failure";
|
|
@@ -90,8 +90,8 @@ export declare const PromptPayloadSchema: z.ZodObject<{
|
|
|
90
90
|
}>>;
|
|
91
91
|
cwd: z.ZodString;
|
|
92
92
|
messageSource: z.ZodOptional<z.ZodEnum<{
|
|
93
|
-
agor: "agor";
|
|
94
93
|
gateway: "gateway";
|
|
94
|
+
agor: "agor";
|
|
95
95
|
}>>;
|
|
96
96
|
}, z.core.$strip>;
|
|
97
97
|
}, z.core.$strip>;
|
|
@@ -344,20 +344,20 @@ export declare const ExecutorPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObject
|
|
|
344
344
|
taskId: z.ZodString;
|
|
345
345
|
prompt: z.ZodString;
|
|
346
346
|
tool: z.ZodEnum<{
|
|
347
|
-
opencode: "opencode";
|
|
348
347
|
"claude-code": "claude-code";
|
|
349
|
-
copilot: "copilot";
|
|
350
348
|
gemini: "gemini";
|
|
351
349
|
codex: "codex";
|
|
350
|
+
opencode: "opencode";
|
|
351
|
+
copilot: "copilot";
|
|
352
352
|
}>;
|
|
353
353
|
permissionMode: z.ZodOptional<z.ZodEnum<{
|
|
354
354
|
default: "default";
|
|
355
|
-
autoEdit: "autoEdit";
|
|
356
|
-
yolo: "yolo";
|
|
357
355
|
acceptEdits: "acceptEdits";
|
|
358
356
|
bypassPermissions: "bypassPermissions";
|
|
359
357
|
plan: "plan";
|
|
360
358
|
dontAsk: "dontAsk";
|
|
359
|
+
autoEdit: "autoEdit";
|
|
360
|
+
yolo: "yolo";
|
|
361
361
|
ask: "ask";
|
|
362
362
|
auto: "auto";
|
|
363
363
|
"on-failure": "on-failure";
|
|
@@ -365,8 +365,8 @@ export declare const ExecutorPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObject
|
|
|
365
365
|
}>>;
|
|
366
366
|
cwd: z.ZodString;
|
|
367
367
|
messageSource: z.ZodOptional<z.ZodEnum<{
|
|
368
|
-
agor: "agor";
|
|
369
368
|
gateway: "gateway";
|
|
369
|
+
agor: "agor";
|
|
370
370
|
}>>;
|
|
371
371
|
}, z.core.$strip>;
|
|
372
372
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,MAAM,EAEZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0E5F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAE3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,IAAI,EAAE;QACX,KAAK,EAAE,YAAY,GAAG,eAAe,GAAG,gBAAgB,CAAC;QACzD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED,qBAAa,UAAW,YAAW,KAAK;IAOpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IAErB,OAAO,CAAC,eAAe,CAAC;IAIxB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,qBAAqB,CAAC;IAdhC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,OAAO,CAAC,aAAa,CAAC,CAAsB;gBAGlC,YAAY,CAAC,EAAE,kBAAkB,YAAA,EACjC,YAAY,CAAC,EAAE,iBAAiB,YAAA,EACxC,MAAM,CAAC,EAAE,MAAM,EACP,eAAe,CAAC,EAAE,eAAe,YAAA,EACzC,cAAc,CAAC,EAAE,0BAA0B,EAC3C,aAAa,CAAC,EAAE,mBAAmB,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EAC7B,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,qBAAqB,CAAC,EAAE,qBAAqB,YAAA,EACrD,eAAe,CAAC,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,kBAAkB,EAClC,SAAS,CAAC,EAAE,cAAc,EAC1B,UAAU,CAAC,EAAE,OAAO,EACpB,cAAc,CAAC,EAAE,OAAO,EAAE,+EAA+E;IACzG,mBAAmB,CAAC,EAAE,OAAO,4CAA4C,EAAE,mBAAmB,EAC9F,SAAS,CAAC,EAAE,OAAO,gCAAgC,EAAE,eAAe;IAsBtE,eAAe,IAAI,gBAAgB;IAY7B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;YAW1B,aAAa;IAarB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA6BrF;;;;;;;;;;;;;;OAcG;IACG,0BAA0B,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,EAC/B,kBAAkB,CAAC,EAAE,OAAO,SAAS,EAAE,kBAAkB,EACzD,eAAe,CAAC,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;QACT,aAAa,EAAE,SAAS,CAAC;QACzB,mBAAmB,EAAE,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;QAC3D,mFAAmF;QACnF,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,iCAAiC,CAAC;QAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,oGAAoG;QACpG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAkmBF;;;OAGG;YACW,qBAAqB;IA0CnC;;;;;;;;OAQG;IACG,aAAa,CACjB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;QACT,aAAa,EAAE,SAAS,CAAC;QACzB,mBAAmB,EAAE,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;QAC3D,mFAAmF;QACnF,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,iCAAiC,CAAC;QAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,oGAAoG;QACpG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA+PF;;;;;;;;OAQG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;SAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IA2BF;;;;;OAKG;IACH,qBAAqB,CAAC,YAAY,EAAE,cAAc,GAAG,qBAAqB;IAM1E;;;;;;;;;;;;;;;;;;;OAmBG;IACH;;;;;;;;;;;;;;;OAeG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EACvB,sBAAsB,CAAC,EAAE,OAAO,GAC/B,OAAO,CAAC,MAAM,CAAC;CAMnB"}
|
|
@@ -163,8 +163,11 @@ export class ClaudeTool {
|
|
|
163
163
|
// Get next message index
|
|
164
164
|
const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
|
|
165
165
|
let nextIndex = existingMessages.length;
|
|
166
|
-
// Create user message
|
|
167
|
-
|
|
166
|
+
// Create user message (or reuse the daemon's pre-write — see Alt D in
|
|
167
|
+
// docs/never-lose-prompt-design.md). When the row is reused, advance
|
|
168
|
+
// nextIndex from the returned message's actual index.
|
|
169
|
+
const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
|
|
170
|
+
nextIndex = userMessage.index + 1;
|
|
168
171
|
// Execute prompt via Agent SDK with streaming
|
|
169
172
|
const assistantMessageIds = [];
|
|
170
173
|
let capturedAgentSessionId;
|
|
@@ -655,8 +658,10 @@ export class ClaudeTool {
|
|
|
655
658
|
// Get next message index
|
|
656
659
|
const existingMessages = await this.messagesRepo.findBySessionId(sessionId);
|
|
657
660
|
let nextIndex = existingMessages.length;
|
|
658
|
-
// Create user message
|
|
659
|
-
|
|
661
|
+
// Create user message (or reuse the daemon's pre-write — see Alt D in
|
|
662
|
+
// docs/never-lose-prompt-design.md).
|
|
663
|
+
const userMessage = await createUserMessage(sessionId, prompt, taskId, nextIndex, this.messagesService, { messageSource, existingMessages });
|
|
664
|
+
nextIndex = userMessage.index + 1;
|
|
660
665
|
// Execute prompt via Agent SDK
|
|
661
666
|
const assistantMessageIds = [];
|
|
662
667
|
let capturedAgentSessionId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-extractor.d.ts","sourceRoot":"","sources":["../../../../src/sdk-handlers/claude/import/task-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAQ,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,UAAU,CAAC,SAAS,CAAC;IACpC,aAAa,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"task-extractor.d.ts","sourceRoot":"","sources":["../../../../src/sdk-handlers/claude/import/task-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAQ,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,UAAU,CAAC,SAAS,CAAC;IACpC,aAAa,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,EAAE,CAsEjB"}
|
|
@@ -44,10 +44,6 @@ export function extractTasksFromMessages(messages, sessionId) {
|
|
|
44
44
|
else {
|
|
45
45
|
fullPrompt = JSON.stringify(userMessage.content);
|
|
46
46
|
}
|
|
47
|
-
// Clean up newlines and excessive whitespace for description
|
|
48
|
-
const cleanPrompt = fullPrompt.replace(/\n/g, ' ').replace(/\s+/g, ' ').trim();
|
|
49
|
-
// Generate short description (first 120 chars)
|
|
50
|
-
const description = cleanPrompt.substring(0, 120) + (cleanPrompt.length > 120 ? '...' : '');
|
|
51
47
|
// Get timestamps
|
|
52
48
|
const startTimestamp = userMessage.timestamp;
|
|
53
49
|
const endMessage = messages[endIndex];
|
|
@@ -57,7 +53,6 @@ export function extractTasksFromMessages(messages, sessionId) {
|
|
|
57
53
|
task_id: generateId(),
|
|
58
54
|
session_id: sessionId,
|
|
59
55
|
full_prompt: fullPrompt,
|
|
60
|
-
description,
|
|
61
56
|
status: TaskStatus.COMPLETED, // Imported sessions are historical
|
|
62
57
|
message_range: {
|
|
63
58
|
start_index: startIndex,
|
|
@@ -17,9 +17,30 @@ import type { MessagesService, TasksService } from './claude-tool.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function extractTokenUsage(raw: unknown): TokenUsage | undefined;
|
|
19
19
|
/**
|
|
20
|
-
* Create user message in database (from text prompt)
|
|
20
|
+
* Create user message in database (from text prompt).
|
|
21
|
+
*
|
|
22
|
+
* Idempotency (Alt D — "never lose a prompt"): when `options.existingMessages` is
|
|
23
|
+
* provided AND a user message already exists for this `taskId`, this returns the
|
|
24
|
+
* pre-existing row WITHOUT inserting. This lets the executor remain a safe
|
|
25
|
+
* fallback writer even after the daemon adopts the user-message write up-front
|
|
26
|
+
* inside `POST /sessions/:id/prompt`.
|
|
27
|
+
*
|
|
28
|
+
* Callers should always pass `existingMessages` (the result of
|
|
29
|
+
* `messagesRepo.findBySessionId(sessionId)` they already fetched to compute
|
|
30
|
+
* `nextIndex`) so the guard can fire. The `nextIndex` argument is still used
|
|
31
|
+
* for the freshly-created row's `index`; if the guard fires, callers should
|
|
32
|
+
* recompute their next index from the returned message:
|
|
33
|
+
*
|
|
34
|
+
* nextIndex = userMessage.index + 1;
|
|
21
35
|
*/
|
|
22
|
-
export declare function createUserMessage(sessionId: SessionID, prompt: string, taskId: TaskID | undefined, nextIndex: number, messagesService: MessagesService,
|
|
36
|
+
export declare function createUserMessage(sessionId: SessionID, prompt: string, taskId: TaskID | undefined, nextIndex: number, messagesService: MessagesService, options?: {
|
|
37
|
+
messageSource?: MessageSource;
|
|
38
|
+
/**
|
|
39
|
+
* Pre-fetched messages for this session. When provided, used to detect a
|
|
40
|
+
* pre-existing user-message row for `taskId` and skip the insert.
|
|
41
|
+
*/
|
|
42
|
+
existingMessages?: ReadonlyArray<Message>;
|
|
43
|
+
}): Promise<Message>;
|
|
23
44
|
/**
|
|
24
45
|
* Create user message from SDK content (tool results, etc.)
|
|
25
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-builder.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/message-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGtE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAetE;AAED
|
|
1
|
+
{"version":3,"file":"message-builder.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/message-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,9 +30,40 @@ export function extractTokenUsage(raw) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Create user message in database (from text prompt)
|
|
33
|
+
* Create user message in database (from text prompt).
|
|
34
|
+
*
|
|
35
|
+
* Idempotency (Alt D — "never lose a prompt"): when `options.existingMessages` is
|
|
36
|
+
* provided AND a user message already exists for this `taskId`, this returns the
|
|
37
|
+
* pre-existing row WITHOUT inserting. This lets the executor remain a safe
|
|
38
|
+
* fallback writer even after the daemon adopts the user-message write up-front
|
|
39
|
+
* inside `POST /sessions/:id/prompt`.
|
|
40
|
+
*
|
|
41
|
+
* Callers should always pass `existingMessages` (the result of
|
|
42
|
+
* `messagesRepo.findBySessionId(sessionId)` they already fetched to compute
|
|
43
|
+
* `nextIndex`) so the guard can fire. The `nextIndex` argument is still used
|
|
44
|
+
* for the freshly-created row's `index`; if the guard fires, callers should
|
|
45
|
+
* recompute their next index from the returned message:
|
|
46
|
+
*
|
|
47
|
+
* nextIndex = userMessage.index + 1;
|
|
34
48
|
*/
|
|
35
|
-
export async function createUserMessage(sessionId, prompt, taskId, nextIndex, messagesService,
|
|
49
|
+
export async function createUserMessage(sessionId, prompt, taskId, nextIndex, messagesService, options) {
|
|
50
|
+
const { messageSource, existingMessages } = options ?? {};
|
|
51
|
+
// Skip-if-exists guard (Alt D): if the daemon already wrote the initial
|
|
52
|
+
// prompt row for this task, return it instead of inserting a duplicate.
|
|
53
|
+
//
|
|
54
|
+
// Match on `role === USER` regardless of `type`, because the daemon writes
|
|
55
|
+
// callback prompts as `type:'system', role:'user'` (so the UI can apply the
|
|
56
|
+
// Agor-callback styling) while normal prompts are `type:'user', role:'user'`.
|
|
57
|
+
// A `type`-strict predicate misses callback rows and double-inserts the
|
|
58
|
+
// prompt. Tool-result rows (also role:USER) cannot exist yet at executor
|
|
59
|
+
// startup — this guard runs before any agent turn has produced output —
|
|
60
|
+
// so role-only matching is safe here.
|
|
61
|
+
if (taskId && existingMessages) {
|
|
62
|
+
const existing = existingMessages.find((m) => m.task_id === taskId && m.role === MessageRole.USER);
|
|
63
|
+
if (existing) {
|
|
64
|
+
return existing;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
36
67
|
const userMessage = {
|
|
37
68
|
message_id: generateId(),
|
|
38
69
|
session_id: sessionId,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Fires AFTER SDK checks settings.json, respects user's existing permissions.
|
|
6
6
|
* Uses SDK's built-in permission persistence via updatedPermissions.
|
|
7
7
|
*/
|
|
8
|
-
import type { SessionID, TaskID } from '@agor/core/types';
|
|
8
|
+
import type { PermissionMode, SessionID, TaskID } from '@agor/core/types';
|
|
9
9
|
import type { MCPServerRepository, MessagesRepository, SessionMCPServerRepository, SessionRepository } from '../../../db/feathers-repositories.js';
|
|
10
10
|
import type { InputRequestService } from '../../../input-requests/input-request-service.js';
|
|
11
11
|
import type { PermissionService } from '../../../permissions/permission-service.js';
|
|
@@ -28,6 +28,14 @@ export declare function createCanUseToolCallback(sessionId: SessionID, taskId: T
|
|
|
28
28
|
permissionLocks: Map<SessionID, Promise<void>>;
|
|
29
29
|
mcpServerRepo: MCPServerRepository;
|
|
30
30
|
sessionMCPRepo: SessionMCPServerRepository;
|
|
31
|
+
/**
|
|
32
|
+
* Effective permission mode for this query. Used to fast-path non-
|
|
33
|
+
* AskUserQuestion tools to `allow` when running in `bypassPermissions`,
|
|
34
|
+
* since the callback is now registered in bypass mode too (see
|
|
35
|
+
* query-builder.ts for why — AskUserQuestion's `requiresUserInteraction`
|
|
36
|
+
* forces the SDK to invoke `canUseTool` regardless of mode).
|
|
37
|
+
*/
|
|
38
|
+
permissionMode?: PermissionMode;
|
|
31
39
|
}): (toolName: string, toolInput: Record<string, unknown>, options: {
|
|
32
40
|
signal: AbortSignal;
|
|
33
41
|
suggestions?: Array<Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-hooks.d.ts","sourceRoot":"","sources":["../../../../src/sdk-handlers/claude/permissions/permission-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAsB,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"permission-hooks.d.ts","sourceRoot":"","sources":["../../../../src/sdk-handlers/claude/permissions/permission-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAsB,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAS9F,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EAClB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IACJ,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,iBAAiB,CAAC;IAChC,YAAY,EAAE,kBAAkB,CAAC;IACjC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,aAAa,EAAE,mBAAmB,CAAC;IACnC,cAAc,EAAE,0BAA0B,CAAC;IAC3C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,IAGC,UAAU,MAAM,EAChB,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,KAC7E,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,UAAU,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnC,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,EAAE,SAAS,GAAG,iBAAiB,GAAG,cAAc,GAAG,eAAe,CAAC;KAC/E,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAqfH"}
|
|
@@ -138,6 +138,18 @@ export function createCanUseToolCallback(sessionId, taskId, deps) {
|
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
// Bypass-mode fast-path: when permissionMode is `bypassPermissions`, the SDK
|
|
142
|
+
// would normally skip canUseTool entirely. We register the callback anyway
|
|
143
|
+
// so AskUserQuestion (handled above) still routes through Agor's UI — but
|
|
144
|
+
// every other tool should be auto-allowed without prompting, matching the
|
|
145
|
+
// mode's semantics. Without this, registering canUseTool in bypass mode
|
|
146
|
+
// would force every tool through the WebSocket permission flow.
|
|
147
|
+
if (deps.permissionMode === 'bypassPermissions') {
|
|
148
|
+
return {
|
|
149
|
+
behavior: 'allow',
|
|
150
|
+
updatedInput: toolInput,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
141
153
|
// Auto-approve MCP tools only if they belong to an attached MCP server
|
|
142
154
|
// MCP tool names follow pattern: mcp__<server_name>__<tool_name>
|
|
143
155
|
if (toolName.startsWith('mcp__')) {
|