agor-live 0.12.2 → 0.12.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/core/api/index.d.cts +4 -4
- package/dist/core/api/index.d.ts +4 -4
- package/dist/core/{board-DCNkcsyf.d.cts → board-ByCag4EG.d.cts} +8 -1
- package/dist/core/{board-C-PU8jok.d.ts → board-CZuyMRpr.d.ts} +8 -1
- package/dist/core/claude/index.cjs +46 -5
- package/dist/core/claude/index.js +51 -21
- package/dist/core/{client-CGO13BG6.d.ts → client-BoLj-jqT.d.ts} +30 -5
- package/dist/core/{client-DKbFqX_X.d.cts → client-gnSCmSyL.d.cts} +30 -5
- package/dist/core/config/browser.d.cts +1 -1
- package/dist/core/config/browser.d.ts +1 -1
- package/dist/core/config/index.cjs +60 -4
- package/dist/core/config/index.d.cts +6 -5
- package/dist/core/config/index.d.ts +6 -5
- package/dist/core/config/index.js +64 -20
- package/dist/core/{config-manager-DGBdhxtZ.d.ts → config-manager-BLDGbZHT.d.ts} +16 -2
- package/dist/core/{config-manager-sCgziLkz.d.cts → config-manager-CsBk-Rh2.d.cts} +16 -2
- package/dist/core/db/index.cjs +332 -60
- package/dist/core/db/index.d.cts +33 -7
- package/dist/core/db/index.d.ts +33 -7
- package/dist/core/db/index.js +338 -77
- package/dist/core/drizzle/postgres/meta/_journal.json +1 -1
- package/dist/core/drizzle/sqlite/meta/_journal.json +1 -1
- package/dist/core/{feathers-B0zjReEk.d.ts → feathers-CYMJeMWB.d.ts} +1 -1
- package/dist/core/{feathers-C1uChqXy.d.cts → feathers-Cyk1lpAM.d.cts} +1 -1
- package/dist/core/gateway/index.cjs +137 -12
- package/dist/core/gateway/index.d.cts +22 -6
- package/dist/core/gateway/index.d.ts +22 -6
- package/dist/core/gateway/index.js +137 -12
- package/dist/core/{gateway-Dy9fVyiS.d.ts → gateway-B4CaePYV.d.ts} +2 -2
- package/dist/core/{gateway-DGNtjRnd.d.cts → gateway-C2NOdrxu.d.cts} +2 -2
- package/dist/core/git/index.d.cts +2 -2
- package/dist/core/git/index.d.ts +2 -2
- package/dist/core/index.cjs +226 -48
- package/dist/core/index.d.cts +8 -8
- package/dist/core/index.d.ts +8 -8
- package/dist/core/index.js +230 -64
- package/dist/core/mcp/index.cjs +24 -2
- package/dist/core/mcp/index.js +26 -4
- package/dist/core/seed/index.cjs +83 -13
- package/dist/core/seed/index.js +88 -29
- package/dist/core/{session-Bt9i9089.d.cts → session-BJbTzw3y.d.cts} +17 -1
- package/dist/core/{session-Da9rf6n5.d.ts → session-DLVkt-jY.d.ts} +17 -1
- package/dist/core/templates/session-context.d.cts +1 -1
- package/dist/core/templates/session-context.d.ts +1 -1
- package/dist/core/types/index.d.cts +6 -6
- package/dist/core/types/index.d.ts +6 -6
- package/dist/core/{types-D_wAaaE3.d.cts → types-Ddri21rw.d.cts} +18 -0
- package/dist/core/{types-D_wAaaE3.d.ts → types-Ddri21rw.d.ts} +18 -0
- package/dist/core/unix/index.cjs +63 -6
- package/dist/core/unix/index.d.cts +4 -3
- package/dist/core/unix/index.d.ts +4 -3
- package/dist/core/unix/index.js +68 -22
- package/dist/core/{user-DT1Qzfep.d.ts → user-B77oCF14.d.ts} +1 -1
- package/dist/core/{user-C5id0Zhj.d.cts → user-LBRon9n1.d.cts} +1 -1
- package/dist/core/utils/permission-mode-mapper.d.cts +1 -1
- package/dist/core/utils/permission-mode-mapper.d.ts +1 -1
- package/dist/core/utils/url.cjs +22 -0
- package/dist/core/utils/url.d.cts +45 -1
- package/dist/core/utils/url.d.ts +45 -1
- package/dist/core/utils/url.js +18 -0
- package/dist/daemon/index.js +168 -38
- package/dist/daemon/mcp/routes.js +5 -5
- package/dist/daemon/services/gateway.d.ts +9 -0
- package/dist/daemon/services/gateway.js +73 -6
- package/dist/daemon/services/repos.js +1 -0
- package/dist/daemon/services/thread-session-map.d.ts +6 -0
- package/dist/daemon/services/thread-session-map.js +9 -0
- package/dist/executor/cli.d.ts +0 -0
- package/dist/executor/cli.d.ts.map +0 -0
- package/dist/executor/cli.js +0 -0
- package/dist/executor/commands/git.d.ts +0 -0
- package/dist/executor/commands/git.d.ts.map +1 -1
- package/dist/executor/commands/git.js +3 -2
- package/dist/executor/commands/index.d.ts +0 -0
- package/dist/executor/commands/index.d.ts.map +0 -0
- package/dist/executor/commands/index.js +0 -0
- package/dist/executor/commands/unix.d.ts +0 -0
- package/dist/executor/commands/unix.d.ts.map +0 -0
- package/dist/executor/commands/unix.js +0 -0
- package/dist/executor/commands/zellij.d.ts +0 -0
- package/dist/executor/commands/zellij.d.ts.map +0 -0
- package/dist/executor/commands/zellij.js +0 -0
- package/dist/executor/config.d.ts +0 -0
- package/dist/executor/config.d.ts.map +0 -0
- package/dist/executor/config.js +0 -0
- package/dist/executor/db/feathers-repositories.d.ts +0 -0
- package/dist/executor/db/feathers-repositories.d.ts.map +0 -0
- package/dist/executor/db/feathers-repositories.js +0 -0
- package/dist/executor/handlers/sdk/base-executor.d.ts +0 -0
- package/dist/executor/handlers/sdk/base-executor.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/base-executor.js +0 -0
- package/dist/executor/handlers/sdk/claude.d.ts +0 -0
- package/dist/executor/handlers/sdk/claude.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/claude.js +0 -0
- package/dist/executor/handlers/sdk/codex.d.ts +0 -0
- package/dist/executor/handlers/sdk/codex.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/codex.js +0 -0
- package/dist/executor/handlers/sdk/gemini.d.ts +0 -0
- package/dist/executor/handlers/sdk/gemini.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/gemini.js +0 -0
- package/dist/executor/handlers/sdk/opencode.d.ts +0 -0
- package/dist/executor/handlers/sdk/opencode.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/opencode.js +0 -0
- package/dist/executor/handlers/sdk/tool-registry.d.ts +0 -0
- package/dist/executor/handlers/sdk/tool-registry.d.ts.map +0 -0
- package/dist/executor/handlers/sdk/tool-registry.js +0 -0
- package/dist/executor/index.d.ts +0 -0
- package/dist/executor/index.d.ts.map +0 -0
- package/dist/executor/index.js +0 -0
- package/dist/executor/payload-types.d.ts +8 -0
- package/dist/executor/payload-types.d.ts.map +1 -1
- package/dist/executor/payload-types.js +2 -0
- package/dist/executor/permissions/permission-manager.d.ts +0 -0
- package/dist/executor/permissions/permission-manager.d.ts.map +0 -0
- package/dist/executor/permissions/permission-manager.js +0 -0
- package/dist/executor/permissions/permission-service.d.ts +0 -0
- package/dist/executor/permissions/permission-service.d.ts.map +0 -0
- package/dist/executor/permissions/permission-service.js +0 -0
- package/dist/executor/sdk-handlers/base/index.d.ts +0 -0
- package/dist/executor/sdk-handlers/base/index.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/base/index.js +0 -0
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +0 -0
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/base/mcp-scoping.js +0 -0
- package/dist/executor/sdk-handlers/base/normalizer.interface.d.ts +0 -0
- package/dist/executor/sdk-handlers/base/normalizer.interface.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/base/normalizer.interface.js +0 -0
- package/dist/executor/sdk-handlers/base/tool.interface.d.ts +0 -0
- package/dist/executor/sdk-handlers/base/tool.interface.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/base/tool.interface.js +0 -0
- package/dist/executor/sdk-handlers/base/types.d.ts +0 -0
- package/dist/executor/sdk-handlers/base/types.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/base/types.js +0 -0
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/claude-tool.js +0 -0
- package/dist/executor/sdk-handlers/claude/import/load-session.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/import/load-session.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/import/load-session.js +0 -0
- package/dist/executor/sdk-handlers/claude/import/message-converter.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/import/message-converter.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/import/message-converter.js +0 -0
- package/dist/executor/sdk-handlers/claude/import/task-extractor.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/import/task-extractor.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/import/task-extractor.js +0 -0
- package/dist/executor/sdk-handlers/claude/import/transcript-parser.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/import/transcript-parser.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/import/transcript-parser.js +0 -0
- package/dist/executor/sdk-handlers/claude/index.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/index.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/index.js +0 -0
- package/dist/executor/sdk-handlers/claude/message-builder.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/message-builder.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/message-builder.js +0 -0
- package/dist/executor/sdk-handlers/claude/message-processor.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/message-processor.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/message-processor.js +0 -0
- package/dist/executor/sdk-handlers/claude/models.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/models.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/models.js +0 -0
- package/dist/executor/sdk-handlers/claude/normalizer.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/normalizer.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/normalizer.js +0 -0
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +0 -0
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/prompt-service.js +0 -0
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/query-builder.js +0 -0
- package/dist/executor/sdk-handlers/claude/safe-message-service.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/safe-message-service.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/safe-message-service.js +0 -0
- package/dist/executor/sdk-handlers/claude/session-context.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/session-context.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/session-context.js +0 -0
- package/dist/executor/sdk-handlers/claude/thinking-detector.d.ts +0 -0
- package/dist/executor/sdk-handlers/claude/thinking-detector.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/claude/thinking-detector.js +0 -0
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/codex-tool.js +0 -0
- package/dist/executor/sdk-handlers/codex/index.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/index.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/index.js +0 -0
- package/dist/executor/sdk-handlers/codex/models.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/models.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/models.js +0 -0
- package/dist/executor/sdk-handlers/codex/normalizer.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/normalizer.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/normalizer.js +0 -0
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/prompt-service.js +0 -0
- package/dist/executor/sdk-handlers/codex/usage.d.ts +0 -0
- package/dist/executor/sdk-handlers/codex/usage.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/codex/usage.js +0 -0
- package/dist/executor/sdk-handlers/gemini/conversation-converter.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/conversation-converter.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/conversation-converter.js +0 -0
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/gemini-tool.js +0 -0
- package/dist/executor/sdk-handlers/gemini/index.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/index.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/index.js +0 -0
- package/dist/executor/sdk-handlers/gemini/models.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/models.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/models.js +0 -0
- package/dist/executor/sdk-handlers/gemini/normalizer.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/normalizer.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/normalizer.js +0 -0
- package/dist/executor/sdk-handlers/gemini/permission-mapper.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/permission-mapper.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/permission-mapper.js +0 -0
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/prompt-service.js +0 -0
- package/dist/executor/sdk-handlers/gemini/usage.d.ts +0 -0
- package/dist/executor/sdk-handlers/gemini/usage.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/gemini/usage.js +0 -0
- package/dist/executor/sdk-handlers/models.d.ts +0 -0
- package/dist/executor/sdk-handlers/models.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/models.js +0 -0
- package/dist/executor/sdk-handlers/normalizer-factory.d.ts +0 -0
- package/dist/executor/sdk-handlers/normalizer-factory.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/normalizer-factory.js +0 -0
- package/dist/executor/sdk-handlers/opencode/index.d.ts +0 -0
- package/dist/executor/sdk-handlers/opencode/index.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/opencode/index.js +0 -0
- package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts +0 -0
- package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts.map +0 -0
- package/dist/executor/sdk-handlers/opencode/opencode-tool.js +0 -0
- package/dist/executor/services/feathers-client.d.ts +0 -0
- package/dist/executor/services/feathers-client.d.ts.map +0 -0
- package/dist/executor/services/feathers-client.js +0 -0
- package/dist/executor/types/sdk-response.d.ts +0 -0
- package/dist/executor/types/sdk-response.d.ts.map +0 -0
- package/dist/executor/types/sdk-response.js +0 -0
- package/dist/executor/types/token-usage.d.ts +0 -0
- package/dist/executor/types/token-usage.d.ts.map +0 -0
- package/dist/executor/types/token-usage.js +0 -0
- package/dist/executor/types.d.ts +0 -0
- package/dist/executor/types.d.ts.map +0 -0
- package/dist/executor/types.js +0 -0
- package/dist/ui/assets/{_basePickBy-a0JoJgXO.js → _basePickBy-DM-YlwQP.js} +1 -1
- package/dist/ui/assets/_basePickBy-DM-YlwQP.js.gz +0 -0
- package/dist/ui/assets/{_baseUniq-IFulW561.js → _baseUniq-w9wJK0j5.js} +1 -1
- package/dist/ui/assets/_baseUniq-w9wJK0j5.js.gz +0 -0
- package/dist/ui/assets/{arc-Dj6SyPh6.js → arc-CVXkw1SJ.js} +1 -1
- package/dist/ui/assets/arc-CVXkw1SJ.js.gz +0 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-CjXOzrje.js → architectureDiagram-VXUJARFQ-CevjfWlW.js} +1 -1
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-CjXOzrje.js.gz → architectureDiagram-VXUJARFQ-CevjfWlW.js.gz} +0 -0
- package/dist/ui/assets/{blockDiagram-VD42YOAC-IFpdwkfg.js → blockDiagram-VD42YOAC-b9JU-Vzx.js} +1 -1
- package/dist/ui/assets/{blockDiagram-VD42YOAC-IFpdwkfg.js.gz → blockDiagram-VD42YOAC-b9JU-Vzx.js.gz} +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-qL4Ujfnz.js → c4Diagram-YG6GDRKO-j7VSccDF.js} +1 -1
- package/dist/ui/assets/c4Diagram-YG6GDRKO-j7VSccDF.js.gz +0 -0
- package/dist/ui/assets/channel-BNIBtjaQ.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-CH6tu0mB.js → chunk-4BX2VUAB-D_codqcR.js} +1 -1
- package/dist/ui/assets/{chunk-55IACEB6-DDAZjWTD.js → chunk-55IACEB6-nQq1kviw.js} +1 -1
- package/dist/ui/assets/{chunk-B4BG7PRW-BDSu72O0.js → chunk-B4BG7PRW-DlVxaJL9.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-DlVxaJL9.js.gz +0 -0
- package/dist/ui/assets/{chunk-DI55MBZ5-C7merGRo.js → chunk-DI55MBZ5-Dw95m49m.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-Dw95m49m.js.gz +0 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-DX20G6ZX.js → chunk-FMBD7UC4-Bnk79OV8.js} +1 -1
- package/dist/ui/assets/{chunk-QN33PNHL-BvT3a5aI.js → chunk-QN33PNHL-sqjI-sXo.js} +1 -1
- package/dist/ui/assets/{chunk-QZHKN3VN-oo-Lxdo7.js → chunk-QZHKN3VN-T7CEGHh9.js} +1 -1
- package/dist/ui/assets/{chunk-TZMSLE5B-BV4XHxKb.js → chunk-TZMSLE5B-ok9YQuUI.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-ok9YQuUI.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-DeHTLUto.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-DeHTLUto.js +1 -0
- package/dist/ui/assets/clone-BObtDhw7.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-BA6VY55u.js → cose-bilkent-S5V4N54A-BtanJFqC.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-BtanJFqC.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-DiuqdLez.js → dagre-6UL2VRFP-CIJlfoaz.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-CIJlfoaz.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-DU4u6xZN.js → diagram-PSM6KHXK-DhKlHuZN.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-DhKlHuZN.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-CltgMeel.js → diagram-QEK2KX5R-BbwaTbd7.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-BbwaTbd7.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-SkvAVcTN.js → diagram-S2PKOQOG-Dx1rRlHZ.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-Dx1rRlHZ.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-DJTHxEdE.js → erDiagram-Q2GNP2WA-w60Up3Mg.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-w60Up3Mg.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-BwrFtsSc.js → flowDiagram-NV44I4VS-yvyTqNEi.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-yvyTqNEi.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BnGmdiBB.js → ganttDiagram-LVOFAZNH-NBBWMpCB.js} +1 -1
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-NBBWMpCB.js.gz +0 -0
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-V6mHZ2jy.js → gitGraphDiagram-NY62KEGX-Dc0qrZJi.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-Dc0qrZJi.js.gz +0 -0
- package/dist/ui/assets/{graph-3Ks94Pqc.js → graph-RIZM2qth.js} +1 -1
- package/dist/ui/assets/graph-RIZM2qth.js.gz +0 -0
- package/dist/ui/assets/{index-Dl_jng3-.js → index-BcHc8U_m.js} +240 -240
- package/dist/ui/assets/index-BcHc8U_m.js.gz +0 -0
- package/dist/ui/assets/index-BjxbtAmt.css +1 -0
- package/dist/ui/assets/index-BjxbtAmt.css.gz +0 -0
- package/dist/ui/assets/{infoDiagram-ER5ION4S-DUuNVOek.js → infoDiagram-ER5ION4S-Co1qQ3-G.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-D-N__rLx.js → journeyDiagram-XKPGCS4Q-QaBi_wAx.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-QaBi_wAx.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DsPDRbRp.js → kanban-definition-3W4ZIXB7-B3k5rpP3.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-B3k5rpP3.js.gz +0 -0
- package/dist/ui/assets/{layout-TuyQIiWI.js → layout-YqNNovOM.js} +1 -1
- package/dist/ui/assets/layout-YqNNovOM.js.gz +0 -0
- package/dist/ui/assets/{linear-CQUCx9aD.js → linear-DpjTIW7z.js} +1 -1
- package/dist/ui/assets/linear-DpjTIW7z.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-HQwFIIbn.js → mermaid.core-D-fYaKXC.js} +5 -5
- package/dist/ui/assets/mermaid.core-D-fYaKXC.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-DlR4HpYx.js → mindmap-definition-VGOIOE7T-CddQalgD.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-CddQalgD.js.gz +0 -0
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-OfCYTJ7S.js → pieDiagram-ADFJNKIX-BCPzhaBq.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BCPzhaBq.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B--irB7LvR.js → quadrantDiagram-AYHSOK5B-DrdJW-2E.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DrdJW-2E.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-iPensRLV.js → requirementDiagram-UZGBJVZJ-dV0cdx6D.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-dV0cdx6D.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BSidESLx.js → sankeyDiagram-TZEHDZUN-SLmqiy7a.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-SLmqiy7a.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-BUE46svP.js → sequenceDiagram-WL72ISMW-CyH5EbRm.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-CyH5EbRm.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BJ2azfLs.js → stateDiagram-FKZM4ZOC-DbtBIYM6.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-DbtBIYM6.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-DOAHUeXQ.js +1 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-YfwKc8ip.js → timeline-definition-IT6M3QCI-CzdpjKni.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CzdpjKni.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-DMpxEEn1.js → treemap-KMMF4GRG-D_MXp3HZ.js} +1 -1
- package/dist/ui/assets/treemap-KMMF4GRG-D_MXp3HZ.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-Bn_I2TeN.js → xychartDiagram-PRI3JC2R-BMwyKz4M.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-BMwyKz4M.js.gz +0 -0
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/_basePickBy-a0JoJgXO.js.gz +0 -0
- package/dist/ui/assets/_baseUniq-IFulW561.js.gz +0 -0
- package/dist/ui/assets/arc-Dj6SyPh6.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-qL4Ujfnz.js.gz +0 -0
- package/dist/ui/assets/channel-4SJF66Rh.js +0 -1
- package/dist/ui/assets/chunk-B4BG7PRW-BDSu72O0.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-C7merGRo.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-BV4XHxKb.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-BLjqJ_M9.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BLjqJ_M9.js +0 -1
- package/dist/ui/assets/clone-DjR0SEZ0.js +0 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-BA6VY55u.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-DiuqdLez.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-DU4u6xZN.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-CltgMeel.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-SkvAVcTN.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-DJTHxEdE.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-BwrFtsSc.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-BnGmdiBB.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-V6mHZ2jy.js.gz +0 -0
- package/dist/ui/assets/graph-3Ks94Pqc.js.gz +0 -0
- package/dist/ui/assets/index-CoHRmHKF.css +0 -1
- package/dist/ui/assets/index-CoHRmHKF.css.gz +0 -0
- package/dist/ui/assets/index-Dl_jng3-.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-D-N__rLx.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-DsPDRbRp.js.gz +0 -0
- package/dist/ui/assets/layout-TuyQIiWI.js.gz +0 -0
- package/dist/ui/assets/linear-CQUCx9aD.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-HQwFIIbn.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-DlR4HpYx.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-OfCYTJ7S.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B--irB7LvR.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-iPensRLV.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BSidESLx.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-BUE46svP.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BJ2azfLs.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-B9Lx1w-S.js +0 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-YfwKc8ip.js.gz +0 -0
- package/dist/ui/assets/treemap-KMMF4GRG-DMpxEEn1.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-Bn_I2TeN.js.gz +0 -0
package/dist/core/db/index.cjs
CHANGED
|
@@ -216,13 +216,15 @@ __export(schema_postgres_exports, {
|
|
|
216
216
|
repos: () => repos,
|
|
217
217
|
sessionMcpServers: () => sessionMcpServers,
|
|
218
218
|
sessions: () => sessions,
|
|
219
|
+
sessionsRelations: () => sessionsRelations,
|
|
219
220
|
tasks: () => tasks,
|
|
220
221
|
threadSessionMap: () => threadSessionMap,
|
|
221
222
|
users: () => users,
|
|
222
223
|
worktreeOwners: () => worktreeOwners,
|
|
223
|
-
worktrees: () => worktrees
|
|
224
|
+
worktrees: () => worktrees,
|
|
225
|
+
worktreesRelations: () => worktreesRelations
|
|
224
226
|
});
|
|
225
|
-
var import_drizzle_orm, import_pg_core, t, sessions, tasks, messages, boards, repos, worktrees, worktreeOwners, users, mcpServers, boardObjects, sessionMcpServers, boardComments, gatewayChannels, threadSessionMap;
|
|
227
|
+
var import_drizzle_orm, import_pg_core, t, sessions, tasks, messages, boards, repos, worktrees, worktreeOwners, users, mcpServers, boardObjects, sessionMcpServers, boardComments, gatewayChannels, threadSessionMap, sessionsRelations, worktreesRelations;
|
|
226
228
|
var init_schema_postgres = __esm({
|
|
227
229
|
"src/db/schema.postgres.ts"() {
|
|
228
230
|
"use strict";
|
|
@@ -711,6 +713,15 @@ var init_schema_postgres = __esm({
|
|
|
711
713
|
channelStatusIdx: (0, import_pg_core.index)("idx_thread_map_channel_status").on(table.channel_id, table.status)
|
|
712
714
|
})
|
|
713
715
|
);
|
|
716
|
+
sessionsRelations = (0, import_drizzle_orm.relations)(sessions, ({ one }) => ({
|
|
717
|
+
worktree: one(worktrees, {
|
|
718
|
+
fields: [sessions.worktree_id],
|
|
719
|
+
references: [worktrees.worktree_id]
|
|
720
|
+
})
|
|
721
|
+
}));
|
|
722
|
+
worktreesRelations = (0, import_drizzle_orm.relations)(worktrees, ({ many }) => ({
|
|
723
|
+
sessions: many(sessions)
|
|
724
|
+
}));
|
|
714
725
|
}
|
|
715
726
|
});
|
|
716
727
|
|
|
@@ -726,13 +737,15 @@ __export(schema_sqlite_exports, {
|
|
|
726
737
|
repos: () => repos2,
|
|
727
738
|
sessionMcpServers: () => sessionMcpServers2,
|
|
728
739
|
sessions: () => sessions2,
|
|
740
|
+
sessionsRelations: () => sessionsRelations2,
|
|
729
741
|
tasks: () => tasks2,
|
|
730
742
|
threadSessionMap: () => threadSessionMap2,
|
|
731
743
|
users: () => users2,
|
|
732
744
|
worktreeOwners: () => worktreeOwners2,
|
|
733
|
-
worktrees: () => worktrees2
|
|
745
|
+
worktrees: () => worktrees2,
|
|
746
|
+
worktreesRelations: () => worktreesRelations2
|
|
734
747
|
});
|
|
735
|
-
var import_drizzle_orm2, import_sqlite_core, t2, sessions2, tasks2, messages2, boards2, repos2, worktrees2, worktreeOwners2, users2, mcpServers2, boardObjects2, sessionMcpServers2, boardComments2, gatewayChannels2, threadSessionMap2;
|
|
748
|
+
var import_drizzle_orm2, import_sqlite_core, t2, sessions2, tasks2, messages2, boards2, repos2, worktrees2, worktreeOwners2, users2, mcpServers2, boardObjects2, sessionMcpServers2, boardComments2, gatewayChannels2, threadSessionMap2, sessionsRelations2, worktreesRelations2;
|
|
736
749
|
var init_schema_sqlite = __esm({
|
|
737
750
|
"src/db/schema.sqlite.ts"() {
|
|
738
751
|
"use strict";
|
|
@@ -1222,6 +1235,15 @@ var init_schema_sqlite = __esm({
|
|
|
1222
1235
|
channelStatusIdx: (0, import_sqlite_core.index)("idx_thread_map_channel_status").on(table.channel_id, table.status)
|
|
1223
1236
|
})
|
|
1224
1237
|
);
|
|
1238
|
+
sessionsRelations2 = (0, import_drizzle_orm2.relations)(sessions2, ({ one }) => ({
|
|
1239
|
+
worktree: one(worktrees2, {
|
|
1240
|
+
fields: [sessions2.worktree_id],
|
|
1241
|
+
references: [worktrees2.worktree_id]
|
|
1242
|
+
})
|
|
1243
|
+
}));
|
|
1244
|
+
worktreesRelations2 = (0, import_drizzle_orm2.relations)(worktrees2, ({ many }) => ({
|
|
1245
|
+
sessions: many(sessions2)
|
|
1246
|
+
}));
|
|
1225
1247
|
}
|
|
1226
1248
|
});
|
|
1227
1249
|
|
|
@@ -1281,10 +1303,10 @@ function isSQLiteDatabase(db) {
|
|
|
1281
1303
|
function isPostgresDatabase(db) {
|
|
1282
1304
|
return !("run" in db);
|
|
1283
1305
|
}
|
|
1284
|
-
function jsonExtract(db, column,
|
|
1285
|
-
const parts =
|
|
1306
|
+
function jsonExtract(db, column, path2) {
|
|
1307
|
+
const parts = path2.split(".");
|
|
1286
1308
|
if (isSQLiteDatabase(db)) {
|
|
1287
|
-
return import_drizzle_orm3.sql`json_extract(${column}, ${`$.${
|
|
1309
|
+
return import_drizzle_orm3.sql`json_extract(${column}, ${`$.${path2}`})`;
|
|
1288
1310
|
} else {
|
|
1289
1311
|
if (parts.length === 1) {
|
|
1290
1312
|
return import_drizzle_orm3.sql`${column}${import_drizzle_orm3.sql.raw(`->>'${parts[0]}'`)}`;
|
|
@@ -1634,14 +1656,14 @@ init_schema_factory();
|
|
|
1634
1656
|
init_cjs_shims();
|
|
1635
1657
|
var import_node_os = require("os");
|
|
1636
1658
|
var import_node_path = require("path");
|
|
1637
|
-
function expandPath(
|
|
1638
|
-
if (
|
|
1639
|
-
return `file:${(0, import_node_path.join)((0, import_node_os.homedir)(),
|
|
1659
|
+
function expandPath(path2) {
|
|
1660
|
+
if (path2.startsWith("file:~/")) {
|
|
1661
|
+
return `file:${(0, import_node_path.join)((0, import_node_os.homedir)(), path2.slice(7))}`;
|
|
1640
1662
|
}
|
|
1641
|
-
if (
|
|
1642
|
-
return (0, import_node_path.join)((0, import_node_os.homedir)(),
|
|
1663
|
+
if (path2.startsWith("~/")) {
|
|
1664
|
+
return (0, import_node_path.join)((0, import_node_os.homedir)(), path2.slice(2));
|
|
1643
1665
|
}
|
|
1644
|
-
return
|
|
1666
|
+
return path2;
|
|
1645
1667
|
}
|
|
1646
1668
|
|
|
1647
1669
|
// src/db/client.ts
|
|
@@ -1903,18 +1925,8 @@ async function checkMigrationStatus(db) {
|
|
|
1903
1925
|
);
|
|
1904
1926
|
appliedHashes = result.map((row) => String(row.hash));
|
|
1905
1927
|
}
|
|
1906
|
-
const
|
|
1907
|
-
const
|
|
1908
|
-
const numApplied = normalizedAppliedHashes.length;
|
|
1909
|
-
if (numApplied >= numExpected) {
|
|
1910
|
-
return {
|
|
1911
|
-
hasPending: false,
|
|
1912
|
-
pending: [],
|
|
1913
|
-
applied: expectedMigrations.map((m) => m.tag)
|
|
1914
|
-
};
|
|
1915
|
-
}
|
|
1916
|
-
const pending = expectedMigrations.filter((m) => !normalizedAppliedHashes.includes(m.hash)).map((m) => m.tag);
|
|
1917
|
-
const appliedTags = expectedMigrations.filter((m) => normalizedAppliedHashes.includes(m.hash)).map((m) => m.tag);
|
|
1928
|
+
const pending = expectedMigrations.filter((m) => !appliedHashes.includes(m.hash)).map((m) => m.tag);
|
|
1929
|
+
const appliedTags = expectedMigrations.filter((m) => appliedHashes.includes(m.hash)).map((m) => m.tag);
|
|
1918
1930
|
return {
|
|
1919
1931
|
hasPending: pending.length > 0,
|
|
1920
1932
|
pending,
|
|
@@ -2619,8 +2631,148 @@ var BoardObjectRepository = class {
|
|
|
2619
2631
|
// src/db/repositories/boards.ts
|
|
2620
2632
|
init_cjs_shims();
|
|
2621
2633
|
var import_drizzle_orm7 = require("drizzle-orm");
|
|
2622
|
-
var
|
|
2634
|
+
var yaml2 = __toESM(require("js-yaml"), 1);
|
|
2635
|
+
|
|
2636
|
+
// src/config/config-manager.ts
|
|
2637
|
+
init_cjs_shims();
|
|
2638
|
+
var import_node_fs = require("fs");
|
|
2639
|
+
var import_promises = __toESM(require("fs/promises"), 1);
|
|
2640
|
+
var import_node_os2 = __toESM(require("os"), 1);
|
|
2641
|
+
var import_node_path3 = __toESM(require("path"), 1);
|
|
2642
|
+
var import_js_yaml = __toESM(require("js-yaml"), 1);
|
|
2643
|
+
|
|
2644
|
+
// src/config/constants.ts
|
|
2645
|
+
init_cjs_shims();
|
|
2646
|
+
var DAEMON = {
|
|
2647
|
+
/**
|
|
2648
|
+
* Default daemon port
|
|
2649
|
+
*/
|
|
2650
|
+
DEFAULT_PORT: 3030,
|
|
2651
|
+
/**
|
|
2652
|
+
* Default daemon host
|
|
2653
|
+
*/
|
|
2654
|
+
DEFAULT_HOST: "localhost"
|
|
2655
|
+
};
|
|
2656
|
+
|
|
2657
|
+
// src/config/config-manager.ts
|
|
2658
|
+
function getAgorHome() {
|
|
2659
|
+
return import_node_path3.default.join(import_node_os2.default.homedir(), ".agor");
|
|
2660
|
+
}
|
|
2661
|
+
function getConfigPath() {
|
|
2662
|
+
return import_node_path3.default.join(getAgorHome(), "config.yaml");
|
|
2663
|
+
}
|
|
2664
|
+
function validateConfig(config) {
|
|
2665
|
+
const mode = config.execution?.unix_user_mode;
|
|
2666
|
+
if (mode === "opportunistic") {
|
|
2667
|
+
throw new Error(
|
|
2668
|
+
`Config error: 'opportunistic' unix_user_mode has been deprecated.
|
|
2669
|
+
Please update your config to use one of:
|
|
2670
|
+
- 'insulated': Filesystem isolation via Unix groups (recommended)
|
|
2671
|
+
- 'strict': Full process impersonation required
|
|
2672
|
+
|
|
2673
|
+
To update: agor config set execution.unix_user_mode insulated`
|
|
2674
|
+
);
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
async function loadConfig() {
|
|
2678
|
+
const configPath = getConfigPath();
|
|
2679
|
+
try {
|
|
2680
|
+
const content = await import_promises.default.readFile(configPath, "utf-8");
|
|
2681
|
+
const config = import_js_yaml.default.load(content);
|
|
2682
|
+
const finalConfig = config || {};
|
|
2683
|
+
validateConfig(finalConfig);
|
|
2684
|
+
return finalConfig;
|
|
2685
|
+
} catch (error) {
|
|
2686
|
+
if (error.code === "ENOENT") {
|
|
2687
|
+
return getDefaultConfig();
|
|
2688
|
+
}
|
|
2689
|
+
throw new Error(
|
|
2690
|
+
`Failed to load config: ${error instanceof Error ? error.message : String(error)}`
|
|
2691
|
+
);
|
|
2692
|
+
}
|
|
2693
|
+
}
|
|
2694
|
+
function getDefaultConfig() {
|
|
2695
|
+
return {
|
|
2696
|
+
defaults: {
|
|
2697
|
+
board: "main",
|
|
2698
|
+
agent: "claude-code"
|
|
2699
|
+
},
|
|
2700
|
+
display: {
|
|
2701
|
+
tableStyle: "unicode",
|
|
2702
|
+
colorOutput: true,
|
|
2703
|
+
shortIdLength: 8
|
|
2704
|
+
},
|
|
2705
|
+
daemon: {
|
|
2706
|
+
port: DAEMON.DEFAULT_PORT,
|
|
2707
|
+
host: DAEMON.DEFAULT_HOST,
|
|
2708
|
+
allowAnonymous: true,
|
|
2709
|
+
// Default: Allow anonymous access (local mode)
|
|
2710
|
+
requireAuth: false,
|
|
2711
|
+
// Default: Do not require authentication
|
|
2712
|
+
mcpEnabled: true
|
|
2713
|
+
// Default: Enable built-in MCP server
|
|
2714
|
+
},
|
|
2715
|
+
ui: {
|
|
2716
|
+
port: 5173,
|
|
2717
|
+
host: "localhost"
|
|
2718
|
+
},
|
|
2719
|
+
codex: {
|
|
2720
|
+
home: "~/.agor/codex"
|
|
2721
|
+
},
|
|
2722
|
+
execution: {
|
|
2723
|
+
session_token_expiration_ms: 864e5,
|
|
2724
|
+
// 24 hours
|
|
2725
|
+
session_token_max_uses: 1,
|
|
2726
|
+
// Single-use tokens
|
|
2727
|
+
sync_unix_passwords: true
|
|
2728
|
+
// Default: sync passwords to Unix
|
|
2729
|
+
}
|
|
2730
|
+
};
|
|
2731
|
+
}
|
|
2732
|
+
function validateBaseUrl(url) {
|
|
2733
|
+
const trimmed = url.trim().replace(/\/$/, "");
|
|
2734
|
+
if (!trimmed.startsWith("http://") && !trimmed.startsWith("https://")) {
|
|
2735
|
+
throw new Error(`Invalid base URL: "${url}". Must start with http:// or https://`);
|
|
2736
|
+
}
|
|
2737
|
+
try {
|
|
2738
|
+
new URL(trimmed);
|
|
2739
|
+
} catch {
|
|
2740
|
+
throw new Error(`Invalid base URL format: "${url}". Must be a valid HTTP(S) URL.`);
|
|
2741
|
+
}
|
|
2742
|
+
return trimmed;
|
|
2743
|
+
}
|
|
2744
|
+
async function getBaseUrl() {
|
|
2745
|
+
if (process.env.AGOR_BASE_URL) {
|
|
2746
|
+
return validateBaseUrl(process.env.AGOR_BASE_URL);
|
|
2747
|
+
}
|
|
2748
|
+
const config = await loadConfig();
|
|
2749
|
+
if (config.daemon?.base_url) {
|
|
2750
|
+
return validateBaseUrl(config.daemon.base_url);
|
|
2751
|
+
}
|
|
2752
|
+
const defaults = getDefaultConfig();
|
|
2753
|
+
const envPort = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : void 0;
|
|
2754
|
+
const port = envPort || config.daemon?.port || defaults.daemon?.port || DAEMON.DEFAULT_PORT;
|
|
2755
|
+
const host = config.daemon?.host || defaults.daemon?.host || DAEMON.DEFAULT_HOST;
|
|
2756
|
+
return `http://${host}:${port}`;
|
|
2757
|
+
}
|
|
2758
|
+
|
|
2759
|
+
// src/db/repositories/boards.ts
|
|
2760
|
+
init_ids();
|
|
2761
|
+
|
|
2762
|
+
// src/utils/url.ts
|
|
2763
|
+
init_cjs_shims();
|
|
2623
2764
|
init_ids();
|
|
2765
|
+
function getSessionUrl(sessionId, boardId, boardSlug, baseUrl) {
|
|
2766
|
+
if (!boardId) return null;
|
|
2767
|
+
const boardParam = boardSlug || shortId(boardId);
|
|
2768
|
+
return `${baseUrl}/b/${boardParam}/${shortId(sessionId)}`;
|
|
2769
|
+
}
|
|
2770
|
+
function getBoardUrl(boardId, boardSlug, baseUrl) {
|
|
2771
|
+
const boardParam = boardSlug || shortId(boardId);
|
|
2772
|
+
return `${baseUrl}/b/${boardParam}`;
|
|
2773
|
+
}
|
|
2774
|
+
|
|
2775
|
+
// src/db/repositories/boards.ts
|
|
2624
2776
|
init_database_wrapper();
|
|
2625
2777
|
init_schema();
|
|
2626
2778
|
var BoardRepository = class {
|
|
@@ -2629,16 +2781,23 @@ var BoardRepository = class {
|
|
|
2629
2781
|
}
|
|
2630
2782
|
/**
|
|
2631
2783
|
* Convert database row to Board type
|
|
2784
|
+
*
|
|
2785
|
+
* @param row - Database row
|
|
2786
|
+
* @param baseUrl - Base URL for generating board URLs
|
|
2632
2787
|
*/
|
|
2633
|
-
rowToBoard(row) {
|
|
2788
|
+
rowToBoard(row, baseUrl) {
|
|
2634
2789
|
const data = row.data;
|
|
2790
|
+
const boardId = row.board_id;
|
|
2791
|
+
const slug = row.slug !== null ? row.slug : void 0;
|
|
2792
|
+
const url = baseUrl ? getBoardUrl(boardId, slug, baseUrl) : "";
|
|
2635
2793
|
return {
|
|
2636
|
-
board_id:
|
|
2794
|
+
board_id: boardId,
|
|
2637
2795
|
name: row.name,
|
|
2638
|
-
slug
|
|
2796
|
+
slug,
|
|
2639
2797
|
created_at: new Date(row.created_at).toISOString(),
|
|
2640
2798
|
last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
2641
2799
|
created_by: row.created_by,
|
|
2800
|
+
url,
|
|
2642
2801
|
...data
|
|
2643
2802
|
};
|
|
2644
2803
|
}
|
|
@@ -2718,6 +2877,7 @@ var BoardRepository = class {
|
|
|
2718
2877
|
async create(data) {
|
|
2719
2878
|
try {
|
|
2720
2879
|
const boardId = data.board_id ?? generateId();
|
|
2880
|
+
const baseUrl = await getBaseUrl();
|
|
2721
2881
|
let finalSlug;
|
|
2722
2882
|
if (data.slug === null) {
|
|
2723
2883
|
finalSlug = void 0;
|
|
@@ -2740,7 +2900,7 @@ var BoardRepository = class {
|
|
|
2740
2900
|
if (!row) {
|
|
2741
2901
|
throw new RepositoryError("Failed to retrieve created board");
|
|
2742
2902
|
}
|
|
2743
|
-
return this.rowToBoard(row);
|
|
2903
|
+
return this.rowToBoard(row, baseUrl);
|
|
2744
2904
|
} catch (error) {
|
|
2745
2905
|
if (error instanceof RepositoryError) throw error;
|
|
2746
2906
|
throw new RepositoryError(
|
|
@@ -2755,8 +2915,9 @@ var BoardRepository = class {
|
|
|
2755
2915
|
async findById(id) {
|
|
2756
2916
|
try {
|
|
2757
2917
|
const fullId = await this.resolveId(id);
|
|
2918
|
+
const baseUrl = await getBaseUrl();
|
|
2758
2919
|
const row = await select(this.db).from(boards3).where((0, import_drizzle_orm7.eq)(boards3.board_id, fullId)).one();
|
|
2759
|
-
return row ? this.rowToBoard(row) : null;
|
|
2920
|
+
return row ? this.rowToBoard(row, baseUrl) : null;
|
|
2760
2921
|
} catch (error) {
|
|
2761
2922
|
if (error instanceof EntityNotFoundError) return null;
|
|
2762
2923
|
if (error instanceof AmbiguousIdError) throw error;
|
|
@@ -2771,8 +2932,9 @@ var BoardRepository = class {
|
|
|
2771
2932
|
*/
|
|
2772
2933
|
async findBySlug(slug) {
|
|
2773
2934
|
try {
|
|
2935
|
+
const baseUrl = await getBaseUrl();
|
|
2774
2936
|
const row = await select(this.db).from(boards3).where((0, import_drizzle_orm7.eq)(boards3.slug, slug)).one();
|
|
2775
|
-
return row ? this.rowToBoard(row) : null;
|
|
2937
|
+
return row ? this.rowToBoard(row, baseUrl) : null;
|
|
2776
2938
|
} catch (error) {
|
|
2777
2939
|
throw new RepositoryError(
|
|
2778
2940
|
`Failed to find board by slug: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -2797,8 +2959,9 @@ var BoardRepository = class {
|
|
|
2797
2959
|
*/
|
|
2798
2960
|
async findAll() {
|
|
2799
2961
|
try {
|
|
2962
|
+
const baseUrl = await getBaseUrl();
|
|
2800
2963
|
const rows = await select(this.db).from(boards3).all();
|
|
2801
|
-
return rows.map((row) => this.rowToBoard(row));
|
|
2964
|
+
return rows.map((row) => this.rowToBoard(row, baseUrl));
|
|
2802
2965
|
} catch (error) {
|
|
2803
2966
|
throw new RepositoryError(
|
|
2804
2967
|
`Failed to find all boards: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -3044,7 +3207,7 @@ var BoardRepository = class {
|
|
|
3044
3207
|
"# Version: 1.0",
|
|
3045
3208
|
""
|
|
3046
3209
|
].join("\n");
|
|
3047
|
-
return header +
|
|
3210
|
+
return header + yaml2.dump(blob, { indent: 2, lineWidth: -1 });
|
|
3048
3211
|
}
|
|
3049
3212
|
/**
|
|
3050
3213
|
* Import board from YAML string
|
|
@@ -3060,7 +3223,7 @@ var BoardRepository = class {
|
|
|
3060
3223
|
*/
|
|
3061
3224
|
parseYamlToBlob(yamlContent) {
|
|
3062
3225
|
try {
|
|
3063
|
-
const blob =
|
|
3226
|
+
const blob = yaml2.load(yamlContent, { schema: yaml2.JSON_SCHEMA });
|
|
3064
3227
|
this.validateBoardBlob(blob);
|
|
3065
3228
|
return blob;
|
|
3066
3229
|
} catch (error) {
|
|
@@ -3148,7 +3311,14 @@ function decryptConfig(config) {
|
|
|
3148
3311
|
if (typeof decrypted[field] === "string" && decrypted[field]) {
|
|
3149
3312
|
try {
|
|
3150
3313
|
decrypted[field] = decryptApiKey(decrypted[field]);
|
|
3151
|
-
} catch {
|
|
3314
|
+
} catch (error) {
|
|
3315
|
+
console.error(
|
|
3316
|
+
`[gateway-channels] Failed to decrypt ${field}:`,
|
|
3317
|
+
error instanceof Error ? error.message : String(error)
|
|
3318
|
+
);
|
|
3319
|
+
console.error(
|
|
3320
|
+
"[gateway-channels] Channel credentials may be corrupted or master secret changed"
|
|
3321
|
+
);
|
|
3152
3322
|
}
|
|
3153
3323
|
}
|
|
3154
3324
|
}
|
|
@@ -3289,6 +3459,15 @@ var GatewayChannelRepository = class {
|
|
|
3289
3459
|
throw new EntityNotFoundError("GatewayChannel", id);
|
|
3290
3460
|
}
|
|
3291
3461
|
const merged = { ...current, ...updates };
|
|
3462
|
+
if (updates.config) {
|
|
3463
|
+
const mergedConfig = { ...current.config, ...updates.config };
|
|
3464
|
+
for (const field of SENSITIVE_CONFIG_FIELDS) {
|
|
3465
|
+
if (!updates.config[field] && current.config[field]) {
|
|
3466
|
+
mergedConfig[field] = current.config[field];
|
|
3467
|
+
}
|
|
3468
|
+
}
|
|
3469
|
+
merged.config = mergedConfig;
|
|
3470
|
+
}
|
|
3292
3471
|
const insertData = this.channelToInsert(merged);
|
|
3293
3472
|
await update(this.db, gatewayChannels3).set({
|
|
3294
3473
|
name: insertData.name,
|
|
@@ -4205,11 +4384,19 @@ var SessionRepository = class {
|
|
|
4205
4384
|
}
|
|
4206
4385
|
/**
|
|
4207
4386
|
* Convert database row to Session type
|
|
4387
|
+
*
|
|
4388
|
+
* @param row - Database row
|
|
4389
|
+
* @param worktreeBoardId - Board ID from worktree (if JOINed)
|
|
4390
|
+
* @param boardSlug - Board slug from boards table (if JOINed)
|
|
4391
|
+
* @param baseUrl - Base URL for generating session URLs
|
|
4208
4392
|
*/
|
|
4209
|
-
rowToSession(row) {
|
|
4393
|
+
rowToSession(row, worktreeBoardId, boardSlug, baseUrl) {
|
|
4210
4394
|
const genealogyData = row.data.genealogy || { children: [] };
|
|
4395
|
+
const sessionId = row.session_id;
|
|
4396
|
+
const boardId = worktreeBoardId ?? null;
|
|
4397
|
+
const url = baseUrl ? getSessionUrl(sessionId, boardId, boardSlug, baseUrl) : null;
|
|
4211
4398
|
return {
|
|
4212
|
-
session_id:
|
|
4399
|
+
session_id: sessionId,
|
|
4213
4400
|
status: row.status,
|
|
4214
4401
|
agentic_tool: row.agentic_tool,
|
|
4215
4402
|
created_at: new Date(row.created_at).toISOString(),
|
|
@@ -4217,6 +4404,8 @@ var SessionRepository = class {
|
|
|
4217
4404
|
created_by: row.created_by,
|
|
4218
4405
|
unix_username: row.unix_username || null,
|
|
4219
4406
|
worktree_id: row.worktree_id,
|
|
4407
|
+
worktree_board_id: boardId,
|
|
4408
|
+
url,
|
|
4220
4409
|
...row.data,
|
|
4221
4410
|
tasks: row.data.tasks.map((id) => id),
|
|
4222
4411
|
genealogy: {
|
|
@@ -4329,11 +4518,15 @@ var SessionRepository = class {
|
|
|
4329
4518
|
try {
|
|
4330
4519
|
const insertData = this.sessionToInsert(data);
|
|
4331
4520
|
await insert(this.db, sessions3).values(insertData).run();
|
|
4332
|
-
const
|
|
4333
|
-
|
|
4521
|
+
const baseUrl = await getBaseUrl();
|
|
4522
|
+
const result = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where((0, import_drizzle_orm12.eq)(sessions3.session_id, insertData.session_id)).one();
|
|
4523
|
+
if (!result) {
|
|
4334
4524
|
throw new RepositoryError("Failed to retrieve created session");
|
|
4335
4525
|
}
|
|
4336
|
-
|
|
4526
|
+
const sessionRow = result.sessions;
|
|
4527
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4528
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4529
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4337
4530
|
} catch (error) {
|
|
4338
4531
|
if (error instanceof RepositoryError) throw error;
|
|
4339
4532
|
throw new RepositoryError(
|
|
@@ -4344,12 +4537,22 @@ var SessionRepository = class {
|
|
|
4344
4537
|
}
|
|
4345
4538
|
/**
|
|
4346
4539
|
* Find session by ID (supports short ID)
|
|
4540
|
+
*
|
|
4541
|
+
* Automatically LEFT JOINs with worktrees table to populate worktree_board_id and url.
|
|
4542
|
+
* This avoids N+1 queries when URL generation is needed.
|
|
4347
4543
|
*/
|
|
4348
4544
|
async findById(id) {
|
|
4349
4545
|
try {
|
|
4350
4546
|
const fullId = await this.resolveId(id);
|
|
4351
|
-
const
|
|
4352
|
-
|
|
4547
|
+
const baseUrl = await getBaseUrl();
|
|
4548
|
+
const result = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where((0, import_drizzle_orm12.eq)(sessions3.session_id, fullId)).one();
|
|
4549
|
+
if (!result) {
|
|
4550
|
+
return null;
|
|
4551
|
+
}
|
|
4552
|
+
const sessionRow = result.sessions;
|
|
4553
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4554
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4555
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4353
4556
|
} catch (error) {
|
|
4354
4557
|
if (error instanceof EntityNotFoundError) return null;
|
|
4355
4558
|
if (error instanceof AmbiguousIdError) throw error;
|
|
@@ -4361,11 +4564,21 @@ var SessionRepository = class {
|
|
|
4361
4564
|
}
|
|
4362
4565
|
/**
|
|
4363
4566
|
* Find all sessions
|
|
4567
|
+
*
|
|
4568
|
+
* LEFT JOINs with worktrees to populate board_id and url in a single query.
|
|
4364
4569
|
*/
|
|
4365
4570
|
async findAll() {
|
|
4366
4571
|
try {
|
|
4367
|
-
const
|
|
4368
|
-
|
|
4572
|
+
const baseUrl = await getBaseUrl();
|
|
4573
|
+
const results = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).all();
|
|
4574
|
+
return results.map(
|
|
4575
|
+
(result) => {
|
|
4576
|
+
const sessionRow = result.sessions;
|
|
4577
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4578
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4579
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4580
|
+
}
|
|
4581
|
+
);
|
|
4369
4582
|
} catch (error) {
|
|
4370
4583
|
throw new RepositoryError(
|
|
4371
4584
|
`Failed to find all sessions: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -4375,11 +4588,21 @@ var SessionRepository = class {
|
|
|
4375
4588
|
}
|
|
4376
4589
|
/**
|
|
4377
4590
|
* Find sessions by status
|
|
4591
|
+
*
|
|
4592
|
+
* LEFT JOINs with worktrees to populate board_id and url.
|
|
4378
4593
|
*/
|
|
4379
4594
|
async findByStatus(status) {
|
|
4380
4595
|
try {
|
|
4381
|
-
const
|
|
4382
|
-
|
|
4596
|
+
const baseUrl = await getBaseUrl();
|
|
4597
|
+
const results = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where((0, import_drizzle_orm12.eq)(sessions3.status, status)).all();
|
|
4598
|
+
return results.map(
|
|
4599
|
+
(result) => {
|
|
4600
|
+
const sessionRow = result.sessions;
|
|
4601
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4602
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4603
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4604
|
+
}
|
|
4605
|
+
);
|
|
4383
4606
|
} catch (error) {
|
|
4384
4607
|
throw new RepositoryError(
|
|
4385
4608
|
`Failed to find sessions by status: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -4389,11 +4612,22 @@ var SessionRepository = class {
|
|
|
4389
4612
|
}
|
|
4390
4613
|
/**
|
|
4391
4614
|
* Find sessions by board ID
|
|
4615
|
+
*
|
|
4616
|
+
* Uses materialized board_id column for O(1) indexed lookup.
|
|
4617
|
+
* LEFT JOINs with worktrees to populate url (board_id already known from filter).
|
|
4392
4618
|
*/
|
|
4393
4619
|
async findByBoard(boardId) {
|
|
4394
4620
|
try {
|
|
4395
|
-
const
|
|
4396
|
-
|
|
4621
|
+
const baseUrl = await getBaseUrl();
|
|
4622
|
+
const results = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where((0, import_drizzle_orm12.eq)(sessions3.board_id, boardId)).all();
|
|
4623
|
+
return results.map(
|
|
4624
|
+
(result) => {
|
|
4625
|
+
const sessionRow = result.sessions;
|
|
4626
|
+
const board_id = result.worktrees?.board_id ?? null;
|
|
4627
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4628
|
+
return this.rowToSession(sessionRow, board_id, boardSlug, baseUrl);
|
|
4629
|
+
}
|
|
4630
|
+
);
|
|
4397
4631
|
} catch (error) {
|
|
4398
4632
|
throw new RepositoryError(
|
|
4399
4633
|
`Failed to find sessions by board: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -4403,18 +4637,28 @@ var SessionRepository = class {
|
|
|
4403
4637
|
}
|
|
4404
4638
|
/**
|
|
4405
4639
|
* Find child sessions (forked or spawned from this session)
|
|
4640
|
+
*
|
|
4641
|
+
* LEFT JOINs with worktrees to populate board_id and url.
|
|
4406
4642
|
*/
|
|
4407
4643
|
async findChildren(sessionId) {
|
|
4408
4644
|
try {
|
|
4409
4645
|
const fullId = await this.resolveId(sessionId);
|
|
4646
|
+
const baseUrl = await getBaseUrl();
|
|
4410
4647
|
const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
|
|
4411
|
-
const
|
|
4648
|
+
const results = await select(this.db).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where(
|
|
4412
4649
|
(0, import_drizzle_orm12.or)(
|
|
4413
4650
|
import_drizzle_orm12.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
|
|
4414
4651
|
import_drizzle_orm12.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
|
|
4415
4652
|
)
|
|
4416
4653
|
).all();
|
|
4417
|
-
return
|
|
4654
|
+
return results.map(
|
|
4655
|
+
(result) => {
|
|
4656
|
+
const sessionRow = result.sessions;
|
|
4657
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4658
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4659
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4660
|
+
}
|
|
4661
|
+
);
|
|
4418
4662
|
} catch (error) {
|
|
4419
4663
|
throw new RepositoryError(
|
|
4420
4664
|
`Failed to find child sessions: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -4467,14 +4711,18 @@ var SessionRepository = class {
|
|
|
4467
4711
|
async update(id, updates) {
|
|
4468
4712
|
try {
|
|
4469
4713
|
const fullId = await this.resolveId(id);
|
|
4714
|
+
const baseUrl = await getBaseUrl();
|
|
4470
4715
|
const statusInfo = updates.status ? ` (status: ${updates.status}, ready_for_prompt: ${updates.ready_for_prompt})` : "";
|
|
4471
4716
|
console.debug(`\u{1F504} [SessionRepo] Updating session ${fullId.substring(0, 8)}${statusInfo}`);
|
|
4472
4717
|
const result = await this.db.transaction(async (tx) => {
|
|
4473
|
-
const
|
|
4474
|
-
if (!
|
|
4718
|
+
const currentResult = await select(tx).from(sessions3).leftJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).where((0, import_drizzle_orm12.eq)(sessions3.session_id, fullId)).one();
|
|
4719
|
+
if (!currentResult) {
|
|
4475
4720
|
throw new EntityNotFoundError("Session", id);
|
|
4476
4721
|
}
|
|
4477
|
-
const
|
|
4722
|
+
const currentRow = currentResult.sessions;
|
|
4723
|
+
const boardId = currentResult.worktrees?.board_id ?? null;
|
|
4724
|
+
const boardSlug = currentResult.boards?.slug ?? null;
|
|
4725
|
+
const current = this.rowToSession(currentRow, boardId, boardSlug, baseUrl);
|
|
4478
4726
|
const merged = deepMerge(current, updates);
|
|
4479
4727
|
const insertData = this.sessionToInsert(merged);
|
|
4480
4728
|
await update(tx, sessions3).set({
|
|
@@ -4541,15 +4789,18 @@ var SessionRepository = class {
|
|
|
4541
4789
|
* instead of N+1. Returns sessions where user is a worktree owner OR worktree.others_can
|
|
4542
4790
|
* allows at least 'view' access.
|
|
4543
4791
|
*
|
|
4792
|
+
* Also populates board_id and url via the worktrees JOIN.
|
|
4793
|
+
*
|
|
4544
4794
|
* NOTE: This method should only be called when RBAC is enabled. When RBAC is disabled,
|
|
4545
4795
|
* the scopeSessionQuery hook is not registered, so default Feathers query is used
|
|
4546
4796
|
* (which returns all sessions without filtering).
|
|
4547
4797
|
*
|
|
4548
4798
|
* @param userId - User ID to check access for
|
|
4549
|
-
* @returns Array of accessible sessions
|
|
4799
|
+
* @returns Array of accessible sessions with urls populated
|
|
4550
4800
|
*/
|
|
4551
4801
|
async findAccessibleSessions(userId) {
|
|
4552
|
-
const
|
|
4802
|
+
const baseUrl = await getBaseUrl();
|
|
4803
|
+
const results = await select(this.db).from(sessions3).innerJoin(worktrees3, (0, import_drizzle_orm12.eq)(sessions3.worktree_id, worktrees3.worktree_id)).leftJoin(boards3, (0, import_drizzle_orm12.eq)(worktrees3.board_id, boards3.board_id)).leftJoin(
|
|
4553
4804
|
worktreeOwners3,
|
|
4554
4805
|
(0, import_drizzle_orm12.and)(
|
|
4555
4806
|
(0, import_drizzle_orm12.eq)(worktreeOwners3.worktree_id, worktrees3.worktree_id),
|
|
@@ -4561,7 +4812,14 @@ var SessionRepository = class {
|
|
|
4561
4812
|
(0, import_drizzle_orm12.inArray)(worktrees3.others_can, ["view", "prompt", "all"])
|
|
4562
4813
|
)
|
|
4563
4814
|
).all();
|
|
4564
|
-
return
|
|
4815
|
+
return results.map(
|
|
4816
|
+
(result) => {
|
|
4817
|
+
const sessionRow = result.sessions;
|
|
4818
|
+
const boardId = result.worktrees?.board_id ?? null;
|
|
4819
|
+
const boardSlug = result.boards?.slug ?? null;
|
|
4820
|
+
return this.rowToSession(sessionRow, boardId, boardSlug, baseUrl);
|
|
4821
|
+
}
|
|
4822
|
+
);
|
|
4565
4823
|
}
|
|
4566
4824
|
/**
|
|
4567
4825
|
* Enrich a single session with last assistant message
|
|
@@ -4610,7 +4868,7 @@ var SessionRepository = class {
|
|
|
4610
4868
|
fullText = messageData.content.filter((block) => block.type === "text" && block.text).map((block) => block.text).join("\n");
|
|
4611
4869
|
}
|
|
4612
4870
|
if (fullText.length > truncationLength) {
|
|
4613
|
-
fullText = fullText.substring(0, truncationLength)
|
|
4871
|
+
fullText = `${fullText.substring(0, truncationLength)}...`;
|
|
4614
4872
|
}
|
|
4615
4873
|
lastMessageBySession.set(sessionId, fullText);
|
|
4616
4874
|
}
|
|
@@ -5397,6 +5655,20 @@ var ThreadSessionMapRepository = class {
|
|
|
5397
5655
|
);
|
|
5398
5656
|
}
|
|
5399
5657
|
}
|
|
5658
|
+
/**
|
|
5659
|
+
* Find all mappings for a worktree (for UI filtering gateway sessions)
|
|
5660
|
+
*/
|
|
5661
|
+
async findByWorktree(worktreeId) {
|
|
5662
|
+
try {
|
|
5663
|
+
const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm15.eq)(threadSessionMap3.worktree_id, worktreeId)).all();
|
|
5664
|
+
return rows.map((row) => this.rowToMapping(row));
|
|
5665
|
+
} catch (error) {
|
|
5666
|
+
throw new RepositoryError(
|
|
5667
|
+
`Failed to find mappings by worktree: ${error instanceof Error ? error.message : String(error)}`,
|
|
5668
|
+
error
|
|
5669
|
+
);
|
|
5670
|
+
}
|
|
5671
|
+
}
|
|
5400
5672
|
};
|
|
5401
5673
|
|
|
5402
5674
|
// src/db/repositories/users.ts
|
|
@@ -6173,7 +6445,7 @@ var WorktreeRepository = class {
|
|
|
6173
6445
|
fullText = messageData.content.filter((block) => block.type === "text" && block.text).map((block) => block.text).join("\n");
|
|
6174
6446
|
}
|
|
6175
6447
|
if (fullText.length > truncationLength) {
|
|
6176
|
-
fullText = fullText.substring(0, truncationLength)
|
|
6448
|
+
fullText = `${fullText.substring(0, truncationLength)}...`;
|
|
6177
6449
|
}
|
|
6178
6450
|
lastMessageBySession.set(sessionId, fullText);
|
|
6179
6451
|
}
|
|
@@ -6184,7 +6456,7 @@ var WorktreeRepository = class {
|
|
|
6184
6456
|
const sessionId = row.session_id;
|
|
6185
6457
|
let lastMessage = lastMessageBySession.get(sessionId) || "";
|
|
6186
6458
|
if (lastMessage.length > truncationLength) {
|
|
6187
|
-
lastMessage = lastMessage.substring(0, truncationLength)
|
|
6459
|
+
lastMessage = `${lastMessage.substring(0, truncationLength)}...truncated`;
|
|
6188
6460
|
}
|
|
6189
6461
|
const sessionData = row.data;
|
|
6190
6462
|
const messageCount = sessionData?.message_count ?? 0;
|