agor-live 0.21.2 → 0.22.0
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/commands/branch/env/restart.js +1 -1
- package/dist/cli/commands/branch/env/start.js +1 -1
- package/dist/cli/commands/branch/env/stop.js +1 -1
- package/dist/core/api/index.cjs +5 -1
- package/dist/core/api/index.d.ts +6 -1
- package/dist/core/api/index.d.ts.map +1 -1
- package/dist/core/api/index.js +5 -1
- package/dist/core/claude/index.cjs +162 -14
- package/dist/core/claude/index.js +166 -18
- package/dist/core/client/index.cjs +43 -3
- package/dist/core/client/index.js +37 -3
- package/dist/core/config/browser.cjs +2 -2
- package/dist/core/config/browser.js +2 -2
- package/dist/core/config/config-manager.d.ts.map +1 -1
- package/dist/core/config/constants.d.ts +1 -1
- package/dist/core/config/index.cjs +174 -20
- package/dist/core/config/index.js +178 -24
- package/dist/core/config/types.d.ts +8 -0
- package/dist/core/config/types.d.ts.map +1 -1
- package/dist/core/db/index.cjs +495 -86
- package/dist/core/db/index.js +482 -75
- package/dist/core/db/repositories/artifacts.d.ts.map +1 -1
- package/dist/core/db/repositories/branches.d.ts +13 -1
- package/dist/core/db/repositories/branches.d.ts.map +1 -1
- package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
- package/dist/core/db/repositories/index.d.ts +1 -0
- package/dist/core/db/repositories/index.d.ts.map +1 -1
- package/dist/core/db/repositories/session-relationships.d.ts +30 -0
- package/dist/core/db/repositories/session-relationships.d.ts.map +1 -0
- package/dist/core/db/repositories/users.d.ts +11 -0
- package/dist/core/db/repositories/users.d.ts.map +1 -1
- package/dist/core/db/schema.d.ts +421 -4
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.postgres.d.ts +226 -2
- package/dist/core/db/schema.postgres.d.ts.map +1 -1
- package/dist/core/db/schema.sqlite.d.ts +228 -2
- package/dist/core/db/schema.sqlite.d.ts.map +1 -1
- package/dist/core/drizzle/postgres/0050_artifact_source_session.sql +3 -0
- package/dist/core/drizzle/postgres/0051_session_relationships.sql +26 -0
- package/dist/core/drizzle/postgres/meta/_journal.json +14 -0
- package/dist/core/drizzle/sqlite/0059_artifact_source_session.sql +2 -0
- package/dist/core/drizzle/sqlite/0060_session_relationships.sql +23 -0
- package/dist/core/drizzle/sqlite/meta/_journal.json +14 -0
- package/dist/core/gateway/connector-registry.d.ts.map +1 -1
- package/dist/core/gateway/connector.d.ts +22 -0
- package/dist/core/gateway/connector.d.ts.map +1 -1
- package/dist/core/gateway/connectors/slack.d.ts +35 -3
- package/dist/core/gateway/connectors/slack.d.ts.map +1 -1
- package/dist/core/gateway/connectors/teams.d.ts +107 -0
- package/dist/core/gateway/connectors/teams.d.ts.map +1 -0
- package/dist/core/gateway/context.d.ts.map +1 -1
- package/dist/core/gateway/index.cjs +552 -52
- package/dist/core/gateway/index.d.ts +3 -2
- package/dist/core/gateway/index.d.ts.map +1 -1
- package/dist/core/gateway/index.js +544 -52
- package/dist/core/gateway/system-message.d.ts +21 -0
- package/dist/core/gateway/system-message.d.ts.map +1 -1
- package/dist/core/index.cjs +616 -127
- package/dist/core/index.js +597 -116
- package/dist/core/mcp/index.cjs +146 -9
- package/dist/core/mcp/index.js +146 -9
- package/dist/core/mcp/template-resolver.d.ts.map +1 -1
- package/dist/core/seed/index.cjs +375 -59
- package/dist/core/seed/index.js +378 -62
- package/dist/core/sessions/index.cjs +19 -0
- package/dist/core/sessions/index.js +19 -0
- package/dist/core/templates/agor-system-prompt.md +21 -53
- package/dist/core/templates/session-context.cjs +2 -73
- package/dist/core/templates/session-context.d.ts +9 -53
- package/dist/core/templates/session-context.d.ts.map +1 -1
- package/dist/core/templates/session-context.js +2 -72
- package/dist/core/tools/mcp/jwt-auth.cjs +2 -20
- package/dist/core/tools/mcp/jwt-auth.d.ts.map +1 -1
- package/dist/core/tools/mcp/jwt-auth.js +2 -20
- package/dist/core/tools/mcp/oauth-mcp-transport.cjs +2 -15
- package/dist/core/tools/mcp/oauth-mcp-transport.d.ts.map +1 -1
- package/dist/core/tools/mcp/oauth-mcp-transport.js +2 -15
- package/dist/core/tools/mcp/oauth-refresh.cjs +167 -19
- package/dist/core/tools/mcp/oauth-refresh.js +167 -19
- package/dist/core/types/artifact.d.ts +5 -1
- package/dist/core/types/artifact.d.ts.map +1 -1
- package/dist/core/types/branch.d.ts +14 -0
- package/dist/core/types/branch.d.ts.map +1 -1
- package/dist/core/types/gateway.d.ts +1 -1
- package/dist/core/types/gateway.d.ts.map +1 -1
- package/dist/core/types/id.d.ts +1 -0
- package/dist/core/types/id.d.ts.map +1 -1
- package/dist/core/types/index.cjs +36 -0
- package/dist/core/types/index.js +30 -0
- package/dist/core/types/session.d.ts +65 -1
- package/dist/core/types/session.d.ts.map +1 -1
- package/dist/core/types/task.d.ts +9 -0
- package/dist/core/types/task.d.ts.map +1 -1
- package/dist/core/unix/index.cjs +371 -55
- package/dist/core/unix/index.js +374 -58
- package/dist/core/unix/unix-integration-service.d.ts +10 -7
- package/dist/core/unix/unix-integration-service.d.ts.map +1 -1
- package/dist/core/utils/permission-mode-mapper.cjs +19 -0
- package/dist/core/utils/permission-mode-mapper.js +19 -0
- package/dist/daemon/declarations.d.ts +7 -0
- package/dist/daemon/declarations.d.ts.map +1 -1
- package/dist/daemon/hooks/gateway-route.d.ts.map +1 -1
- package/dist/daemon/hooks/gateway-route.js +53 -1
- package/dist/daemon/index.js +3760 -2107
- package/dist/daemon/main.js +3760 -2107
- package/dist/daemon/mcp/server.js +155 -17
- package/dist/daemon/mcp/tools/analytics.js +6 -7
- package/dist/daemon/mcp/tools/artifacts.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/artifacts.js +7 -7
- package/dist/daemon/mcp/tools/boards.js +6 -7
- package/dist/daemon/mcp/tools/branches.js +6 -7
- package/dist/daemon/mcp/tools/card-types.js +6 -7
- package/dist/daemon/mcp/tools/cards.js +6 -7
- package/dist/daemon/mcp/tools/environment.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/environment.js +19 -12
- package/dist/daemon/mcp/tools/knowledge.js +6 -7
- package/dist/daemon/mcp/tools/mcp-servers.js +6 -7
- package/dist/daemon/mcp/tools/messages.js +6 -7
- package/dist/daemon/mcp/tools/proxies.js +6 -7
- package/dist/daemon/mcp/tools/repos.js +6 -7
- package/dist/daemon/mcp/tools/schedules.js +6 -7
- package/dist/daemon/mcp/tools/search.js +6 -7
- package/dist/daemon/mcp/tools/sessions.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/sessions.js +140 -11
- package/dist/daemon/mcp/tools/tasks.js +6 -7
- package/dist/daemon/mcp/tools/users.js +6 -7
- package/dist/daemon/mcp/tools/widgets.js +7 -8
- package/dist/daemon/register-hooks.d.ts +5 -1
- package/dist/daemon/register-hooks.d.ts.map +1 -1
- package/dist/daemon/register-hooks.js +404 -179
- package/dist/daemon/register-routes.d.ts.map +1 -1
- package/dist/daemon/register-routes.js +360 -162
- package/dist/daemon/register-services.d.ts.map +1 -1
- package/dist/daemon/register-services.js +1928 -671
- package/dist/daemon/services/artifacts.d.ts +10 -1
- package/dist/daemon/services/artifacts.d.ts.map +1 -1
- package/dist/daemon/services/artifacts.js +25 -1
- package/dist/daemon/services/branches.d.ts +11 -1
- package/dist/daemon/services/branches.d.ts.map +1 -1
- package/dist/daemon/services/branches.js +470 -184
- package/dist/daemon/services/claude-models.js +879 -339
- package/dist/daemon/services/gateway.d.ts +58 -2
- package/dist/daemon/services/gateway.d.ts.map +1 -1
- package/dist/daemon/services/gateway.js +590 -47
- package/dist/daemon/services/groups.d.ts +2 -0
- package/dist/daemon/services/groups.d.ts.map +1 -1
- package/dist/daemon/services/groups.js +56 -0
- package/dist/daemon/services/mcp-servers.d.ts.map +1 -1
- package/dist/daemon/services/mcp-servers.js +0 -6
- package/dist/daemon/services/scheduler.d.ts.map +1 -1
- package/dist/daemon/services/scheduler.js +6 -2
- package/dist/daemon/services/sessions.d.ts +11 -3
- package/dist/daemon/services/sessions.d.ts.map +1 -1
- package/dist/daemon/services/sessions.js +68 -7
- package/dist/daemon/services/tasks.d.ts +13 -2
- package/dist/daemon/services/tasks.d.ts.map +1 -1
- package/dist/daemon/services/tasks.js +42 -26
- package/dist/daemon/startup.js +6 -2
- package/dist/daemon/utils/session-stop.d.ts +43 -0
- package/dist/daemon/utils/session-stop.d.ts.map +1 -0
- package/dist/daemon/utils/session-stop.js +102 -0
- package/dist/daemon/utils/session-task-state.d.ts +7 -2
- package/dist/daemon/utils/session-task-state.d.ts.map +1 -1
- package/dist/daemon/utils/session-task-state.js +9 -3
- package/dist/daemon/utils/session-tasks.d.ts +4 -4
- package/dist/daemon/utils/session-tasks.d.ts.map +1 -1
- package/dist/daemon/utils/session-tasks.js +4 -8
- package/dist/executor/commands/environment.d.ts +13 -0
- package/dist/executor/commands/environment.d.ts.map +1 -0
- package/dist/executor/commands/environment.js +287 -0
- package/dist/executor/commands/index.d.ts.map +1 -1
- package/dist/executor/commands/index.js +5 -1
- package/dist/executor/commands/unix.d.ts +8 -1
- package/dist/executor/commands/unix.d.ts.map +1 -1
- package/dist/executor/commands/unix.js +157 -2
- package/dist/executor/payload-types.d.ts +201 -5
- package/dist/executor/payload-types.d.ts.map +1 -1
- package/dist/executor/payload-types.js +98 -0
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/base/mcp-scoping.js +14 -0
- package/dist/executor/sdk-handlers/claude/message-processor.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/message-processor.js +0 -1
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts +1 -0
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/query-builder.js +91 -39
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +12 -5
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +72 -30
- package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts +2 -4
- package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/copilot/prompt-service.js +4 -13
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +2 -4
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/prompt-service.js +4 -13
- package/dist/ui/assets/App-DcEY8Ota.js +3 -0
- package/dist/ui/assets/App-DcEY8Ota.js.gz +0 -0
- package/dist/ui/assets/{ArtifactConsentModal-ParNk5kW.js → ArtifactConsentModal-CiCbK9iv.js} +1 -1
- package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js +9 -0
- package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js +18 -0
- package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js.gz +0 -0
- package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js +34 -0
- package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js.gz +0 -0
- package/dist/ui/assets/{CodeEditor.inner-D51Z_CLQ.js → CodeEditor.inner-DBgsP4tn.js} +2 -2
- package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js.gz +0 -0
- package/dist/ui/assets/ConversationView-CUWR0gR6.js +1 -0
- package/dist/ui/assets/ConversationView-CUWR0gR6.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-B2bzlXfn.js +24 -0
- package/dist/ui/assets/KnowledgePage-B2bzlXfn.js.gz +0 -0
- package/dist/ui/assets/MarketingScreenshotPage-9Qd7eZsm.css +1 -0
- package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js +143 -0
- package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js.gz +0 -0
- package/dist/ui/assets/MobileApp-VgVnsnsN.js +1 -0
- package/dist/ui/assets/MobileApp-VgVnsnsN.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js +20 -0
- package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js.gz +0 -0
- package/dist/ui/assets/{App-BAdBsEnV.css → SessionCanvas-mEmYGZhC.css} +1 -1
- package/dist/ui/assets/SessionCanvas-mEmYGZhC.css.gz +0 -0
- package/dist/ui/assets/{StreamdownDemoPage-B9wbgp2s.js → StreamdownDemoPage-wzWaqWwr.js} +1 -1
- package/dist/ui/assets/StreamdownDemoPage-wzWaqWwr.js.gz +0 -0
- package/dist/ui/assets/{ThemeSwitcher-ubn6IOz9.js → ThemeSwitcher-Dly2y9pi.js} +1 -1
- package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js.gz +0 -0
- package/dist/ui/assets/antd-CfbbHJOz.js +401 -0
- package/dist/ui/assets/antd-CfbbHJOz.js.gz +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-CykGFbQU.js +1 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-ChmZt3zk.js → architectureDiagram-VXUJARFQ-C8HXAenz.js} +1 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js.gz +0 -0
- package/dist/ui/assets/{blockDiagram-VD42YOAC-CzGHAHao.js → blockDiagram-VD42YOAC-BhZaEN19.js} +1 -1
- package/dist/ui/assets/blockDiagram-VD42YOAC-BhZaEN19.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-DscJyaWN.js → c4Diagram-YG6GDRKO-Dk_UH-sY.js} +1 -1
- package/dist/ui/assets/c4Diagram-YG6GDRKO-Dk_UH-sY.js.gz +0 -0
- package/dist/ui/assets/channel-D6_nUWlW.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-DoWpTvP8.js → chunk-4BX2VUAB-XprbG2TG.js} +1 -1
- package/dist/ui/assets/chunk-55IACEB6-ByzqIgSb.js +1 -0
- package/dist/ui/assets/{chunk-ABZYJK2D-RzDCrjE6.js → chunk-ABZYJK2D-BJcrryHK.js} +1 -1
- package/dist/ui/assets/chunk-ABZYJK2D-BJcrryHK.js.gz +0 -0
- package/dist/ui/assets/{chunk-AGHRB4JF-jidCS5Of.js → chunk-AGHRB4JF-DvxmfbM0.js} +1 -1
- package/dist/ui/assets/chunk-AGHRB4JF-DvxmfbM0.js.gz +0 -0
- package/dist/ui/assets/{chunk-ATLVNIR6-BEIIfJtC.js → chunk-ATLVNIR6-DbeJ0OrR.js} +1 -1
- package/dist/ui/assets/chunk-ATLVNIR6-DbeJ0OrR.js.gz +0 -0
- package/dist/ui/assets/{chunk-B4BG7PRW-B8b6dQQ2.js → chunk-B4BG7PRW-C53q2ggf.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-C53q2ggf.js.gz +0 -0
- package/dist/ui/assets/{chunk-CVBHYZKI-D-mQAfrk.js → chunk-CVBHYZKI-B3EBSlb3.js} +1 -1
- package/dist/ui/assets/{chunk-DI55MBZ5-BfATX3V8.js → chunk-DI55MBZ5-vIyNEQN-.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-vIyNEQN-.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-B3ObkuOm.js +1 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-fqXscNvc.js → chunk-FMBD7UC4-rddmfK-Z.js} +1 -1
- package/dist/ui/assets/{chunk-HN2XXSSU-BCHvD80g.js → chunk-HN2XXSSU-Dttqcg3b.js} +1 -1
- package/dist/ui/assets/chunk-HN2XXSSU-Dttqcg3b.js.gz +0 -0
- package/dist/ui/assets/{chunk-JA3XYJ7Z-Cp6dqHnY.js → chunk-JA3XYJ7Z-DbNDev3D.js} +1 -1
- package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js.gz +0 -0
- package/dist/ui/assets/{chunk-JZLCHNYA-cKMooY3y.js → chunk-JZLCHNYA-EUmx2y4H.js} +1 -1
- package/dist/ui/assets/chunk-JZLCHNYA-EUmx2y4H.js.gz +0 -0
- package/dist/ui/assets/{chunk-MI3HLSF2-BlzO5wOE.js → chunk-MI3HLSF2-65n9Mkyc.js} +1 -1
- package/dist/ui/assets/chunk-MI3HLSF2-65n9Mkyc.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js +2 -0
- package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js.gz +0 -0
- package/dist/ui/assets/{chunk-QN33PNHL-DIHGQ_pd.js → chunk-QN33PNHL-DsRKK6NR.js} +1 -1
- package/dist/ui/assets/{chunk-QXUST7PY-C9l0muI0.js → chunk-QXUST7PY-BCYnMiS3.js} +1 -1
- package/dist/ui/assets/chunk-QXUST7PY-BCYnMiS3.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-HucAw4xW.js +1 -0
- package/dist/ui/assets/{chunk-S3R3BYOJ-VJiLzt2o.js → chunk-S3R3BYOJ-CWMEa9Dc.js} +1 -1
- package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js.gz +0 -0
- package/dist/ui/assets/{chunk-TZMSLE5B-DZwI0C_2.js → chunk-TZMSLE5B-BuQUQcTr.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-BuQUQcTr.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-CUT3rPTB.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CUT3rPTB.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-Ipik-oSD.js → cose-bilkent-S5V4N54A-CnPB3ARO.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-CnPB3ARO.js.gz +0 -0
- package/dist/ui/assets/cursor-QEb7m-rN.png +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-BDpyWQnh.js → dagre-6UL2VRFP-DhS-k_Se.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-DhS-k_Se.js.gz +0 -0
- package/dist/ui/assets/{dagre-CgA4KhUX.js → dagre-KgLoHEuy.js} +1 -1
- package/dist/ui/assets/dagre-KgLoHEuy.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-B4GRzxLJ.js → diagram-PSM6KHXK-BZg3MJmb.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-BWPW28XI.js → diagram-QEK2KX5R-BPCitvbo.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-BPCitvbo.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-BIHhcGoV.js → diagram-S2PKOQOG-NW4uK6sx.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-NW4uK6sx.js.gz +0 -0
- package/dist/ui/assets/{editor-C-HJ7Yw0.js → editor-CzFWIUw2.js} +1 -1
- package/dist/ui/assets/editor-CzFWIUw2.js.gz +0 -0
- package/dist/ui/assets/{emoji-D8F6B62m.js → emoji-Dkz4Zzv_.js} +1 -1
- package/dist/ui/assets/emoji-Dkz4Zzv_.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-ubTaAFcK.js → erDiagram-Q2GNP2WA-me1fboaf.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-me1fboaf.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-BHLCTYjI.js → flowDiagram-NV44I4VS-DzE8dGsh.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-ClC3pay1.js → ganttDiagram-LVOFAZNH-CFQD09Mi.js} +2 -2
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js.gz +0 -0
- package/dist/ui/assets/{gitGraph-F6HP7TQM-DghoobE6.js → gitGraph-F6HP7TQM-CfFE_uAC.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-Clqpiswu.js → gitGraphDiagram-NY62KEGX-CaVoxU4C.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js.gz +0 -0
- package/dist/ui/assets/index-BN5_Qq7R.js +324 -0
- package/dist/ui/assets/index-BN5_Qq7R.js.gz +0 -0
- package/dist/ui/assets/index-DxuPq13l.css +1 -0
- package/dist/ui/assets/index-DxuPq13l.css.gz +0 -0
- package/dist/ui/assets/{info-NVLQJR56-0ZldEXPQ.js → info-NVLQJR56-i_xHYg3f.js} +1 -1
- package/dist/ui/assets/{infoDiagram-ER5ION4S-DMmPX-il.js → infoDiagram-ER5ION4S-2NL93b78.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CrVickA2.js → journeyDiagram-XKPGCS4Q-CZF-2DHU.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CZF-2DHU.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-C_BsdHYL.js → kanban-definition-3W4ZIXB7-CfvJIOny.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-CfvJIOny.js.gz +0 -0
- package/dist/ui/assets/{line-CfBP7Yic.js → line-DDv8kOJk.js} +1 -1
- package/dist/ui/assets/{linear-BsjageUB.js → linear-Daef-l29.js} +1 -1
- package/dist/ui/assets/linear-Daef-l29.js.gz +0 -0
- package/dist/ui/assets/{mermaid-parser.core-DZdP-NFq.js → mermaid-parser.core-CdK9QgYV.js} +2 -2
- package/dist/ui/assets/mermaid-parser.core-CdK9QgYV.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-TNrI0pHG.js → mermaid.core-D6GS9mU-.js} +3 -3
- package/dist/ui/assets/mermaid.core-D6GS9mU-.js.gz +0 -0
- package/dist/ui/assets/message-SqLqNYcv.js +36 -0
- package/dist/ui/assets/message-SqLqNYcv.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-BbmaUjMY.js → mindmap-definition-VGOIOE7T-Cb3QMflX.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-Cb3QMflX.js.gz +0 -0
- package/dist/ui/assets/{packet-BFZMPI3H-D_ZhkXuT.js → packet-BFZMPI3H-Bm2uwz4i.js} +1 -1
- package/dist/ui/assets/{particles-Dv28pjOd.js → particles-DsJFOarW.js} +1 -1
- package/dist/ui/assets/particles-DsJFOarW.js.gz +0 -0
- package/dist/ui/assets/{pie-7BOR55EZ-Dn0Q3qNx.js → pie-7BOR55EZ-5i17tVnF.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-BbyjfYu8.js → pieDiagram-ADFJNKIX-BxIwQWvw.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BxIwQWvw.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-Bc3GqMKz.js → quadrantDiagram-AYHSOK5B-B5HPe4ga.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-B5HPe4ga.js.gz +0 -0
- package/dist/ui/assets/{radar-NHE76QYJ-BHwoAy1q.js → radar-NHE76QYJ-BTn-tq0k.js} +1 -1
- package/dist/ui/assets/{reactflow-BVYPxNhc.js → reactflow-Bf74ngoo.js} +2 -2
- package/dist/ui/assets/reactflow-Bf74ngoo.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-BQaKKL09.js → requirementDiagram-UZGBJVZJ-YfI6llkX.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-YfI6llkX.js.gz +0 -0
- package/dist/ui/assets/{sandpack-BQW_FQ7G.js → sandpack-D7koO5op.js} +1 -1
- package/dist/ui/assets/sandpack-D7koO5op.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-DiJvDvhb.js → sankeyDiagram-TZEHDZUN-DOk_B10B.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-Dw32824o.js → sequenceDiagram-WL72ISMW-DAe4Um17.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-DAe4Um17.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BCOpNdHV.js → stateDiagram-FKZM4ZOC-CCesDu_C.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CMlIrsoO.js +1 -0
- package/dist/ui/assets/{syntax-VJrU5BEu.js → syntax-C-M-8jOU.js} +1 -1
- package/dist/ui/assets/syntax-C-M-8jOU.js.gz +0 -0
- package/dist/ui/assets/{theme-DZtFA8b4.js → theme-BQZdiqwv.js} +1 -1
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-Jh_WZzXv.js → timeline-definition-IT6M3QCI-D6P5txjT.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-D6P5txjT.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-CPYIgjxE.js → treemap-KMMF4GRG-Bitm3gy4.js} +1 -1
- package/dist/ui/assets/{knowledgeRoutes-CivaUqha.js → useUserLocalStorage-Ckb8HsIw.js} +1 -1
- package/dist/ui/assets/useUserLocalStorage-Ckb8HsIw.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CERc7Rdb.js → xychartDiagram-PRI3JC2R-CsybjUbd.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CsybjUbd.js.gz +0 -0
- package/dist/ui/index.html +13 -11
- package/dist/ui/index.html.gz +0 -0
- package/package.json +10 -9
- package/dist/ui/assets/App-9s2WHM6S.js +0 -22
- package/dist/ui/assets/App-9s2WHM6S.js.gz +0 -0
- package/dist/ui/assets/App-BAdBsEnV.css.gz +0 -0
- package/dist/ui/assets/ArtifactConsentModal-ParNk5kW.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-VQxLMCiN.js +0 -9
- package/dist/ui/assets/ArtifactFullscreenPage-VQxLMCiN.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-3RchrIgk.js +0 -18
- package/dist/ui/assets/AutocompleteTextarea-3RchrIgk.js.gz +0 -0
- package/dist/ui/assets/CodeEditor.inner-D51Z_CLQ.js.gz +0 -0
- package/dist/ui/assets/ConversationView-Dyddw2b1.js +0 -34
- package/dist/ui/assets/ConversationView-Dyddw2b1.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-CdftslnF.js +0 -24
- package/dist/ui/assets/KnowledgePage-CdftslnF.js.gz +0 -0
- package/dist/ui/assets/MobileApp-BdBMpnJ1.js +0 -1
- package/dist/ui/assets/MobileApp-BdBMpnJ1.js.gz +0 -0
- package/dist/ui/assets/StreamdownDemoPage-B9wbgp2s.js.gz +0 -0
- package/dist/ui/assets/ThemeSwitcher-ubn6IOz9.js.gz +0 -0
- package/dist/ui/assets/antd-C-HfEC4E.js +0 -400
- package/dist/ui/assets/antd-C-HfEC4E.js.gz +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-dkBewUpN.js +0 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-ChmZt3zk.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-CzGHAHao.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-DscJyaWN.js.gz +0 -0
- package/dist/ui/assets/channel-DvRQqEqC.js +0 -1
- package/dist/ui/assets/chunk-55IACEB6-DojF2pZN.js +0 -1
- package/dist/ui/assets/chunk-ABZYJK2D-RzDCrjE6.js.gz +0 -0
- package/dist/ui/assets/chunk-AGHRB4JF-jidCS5Of.js.gz +0 -0
- package/dist/ui/assets/chunk-ATLVNIR6-BEIIfJtC.js.gz +0 -0
- package/dist/ui/assets/chunk-B4BG7PRW-B8b6dQQ2.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-BfATX3V8.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-BKt6lPJM.js +0 -1
- package/dist/ui/assets/chunk-HN2XXSSU-BCHvD80g.js.gz +0 -0
- package/dist/ui/assets/chunk-JA3XYJ7Z-Cp6dqHnY.js.gz +0 -0
- package/dist/ui/assets/chunk-JZLCHNYA-cKMooY3y.js.gz +0 -0
- package/dist/ui/assets/chunk-MI3HLSF2-BlzO5wOE.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-pASDorUx.js +0 -2
- package/dist/ui/assets/chunk-N4CR4FBY-pASDorUx.js.gz +0 -0
- package/dist/ui/assets/chunk-QXUST7PY-C9l0muI0.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-CZskCFCf.js +0 -1
- package/dist/ui/assets/chunk-S3R3BYOJ-VJiLzt2o.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-DZwI0C_2.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-BFASUbmZ.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BFASUbmZ.js +0 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-Ipik-oSD.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-BDpyWQnh.js.gz +0 -0
- package/dist/ui/assets/dagre-CgA4KhUX.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-B4GRzxLJ.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-BWPW28XI.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-BIHhcGoV.js.gz +0 -0
- package/dist/ui/assets/editor-C-HJ7Yw0.js.gz +0 -0
- package/dist/ui/assets/emoji-D8F6B62m.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-ubTaAFcK.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-BHLCTYjI.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-ClC3pay1.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-Clqpiswu.js.gz +0 -0
- package/dist/ui/assets/index-D9OElx9A.css +0 -1
- package/dist/ui/assets/index-D9OElx9A.css.gz +0 -0
- package/dist/ui/assets/index-DxPuzG7E.js +0 -350
- package/dist/ui/assets/index-DxPuzG7E.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CrVickA2.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-C_BsdHYL.js.gz +0 -0
- package/dist/ui/assets/knowledgeRoutes-CivaUqha.js.gz +0 -0
- package/dist/ui/assets/linear-BsjageUB.js.gz +0 -0
- package/dist/ui/assets/mermaid-parser.core-DZdP-NFq.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-TNrI0pHG.js.gz +0 -0
- package/dist/ui/assets/message-BtWWJ9Af.js +0 -36
- package/dist/ui/assets/message-BtWWJ9Af.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-BbmaUjMY.js.gz +0 -0
- package/dist/ui/assets/particles-Dv28pjOd.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BbyjfYu8.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-Bc3GqMKz.js.gz +0 -0
- package/dist/ui/assets/reactflow-BVYPxNhc.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-BQaKKL09.js.gz +0 -0
- package/dist/ui/assets/sandpack-BQW_FQ7G.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DiJvDvhb.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-Dw32824o.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BCOpNdHV.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-Cuqwvgfg.js +0 -1
- package/dist/ui/assets/syntax-VJrU5BEu.js.gz +0 -0
- package/dist/ui/assets/timeline-definition-IT6M3QCI-Jh_WZzXv.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CERc7Rdb.js.gz +0 -0
package/dist/core/db/index.cjs
CHANGED
|
@@ -543,6 +543,9 @@ async function getBaseUrl() {
|
|
|
543
543
|
if (config.daemon?.base_url) {
|
|
544
544
|
return validateBaseUrl(config.daemon.base_url);
|
|
545
545
|
}
|
|
546
|
+
if (config.ui?.base_url) {
|
|
547
|
+
return validateBaseUrl(config.ui.base_url);
|
|
548
|
+
}
|
|
546
549
|
const defaults = getDefaultConfig();
|
|
547
550
|
const envPort = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : void 0;
|
|
548
551
|
const port = envPort || config.daemon?.port || defaults.daemon?.port || DAEMON.DEFAULT_PORT;
|
|
@@ -857,7 +860,7 @@ var init_schedule = __esm({
|
|
|
857
860
|
});
|
|
858
861
|
|
|
859
862
|
// src/types/session.ts
|
|
860
|
-
var SessionStatus;
|
|
863
|
+
var SessionStatus, EXECUTING_SESSION_STATUSES;
|
|
861
864
|
var init_session = __esm({
|
|
862
865
|
"src/types/session.ts"() {
|
|
863
866
|
"use strict";
|
|
@@ -875,11 +878,17 @@ var init_session = __esm({
|
|
|
875
878
|
COMPLETED: "completed",
|
|
876
879
|
FAILED: "failed"
|
|
877
880
|
};
|
|
881
|
+
EXECUTING_SESSION_STATUSES = /* @__PURE__ */ new Set([
|
|
882
|
+
SessionStatus.RUNNING,
|
|
883
|
+
SessionStatus.STOPPING,
|
|
884
|
+
SessionStatus.AWAITING_PERMISSION,
|
|
885
|
+
SessionStatus.AWAITING_INPUT
|
|
886
|
+
]);
|
|
878
887
|
}
|
|
879
888
|
});
|
|
880
889
|
|
|
881
890
|
// src/types/task.ts
|
|
882
|
-
var TaskStatus, TERMINAL_TASK_STATUSES;
|
|
891
|
+
var TaskStatus, TERMINAL_TASK_STATUSES, EXECUTING_TASK_STATUSES;
|
|
883
892
|
var init_task = __esm({
|
|
884
893
|
"src/types/task.ts"() {
|
|
885
894
|
"use strict";
|
|
@@ -907,6 +916,12 @@ var init_task = __esm({
|
|
|
907
916
|
TaskStatus.STOPPED,
|
|
908
917
|
TaskStatus.TIMED_OUT
|
|
909
918
|
]);
|
|
919
|
+
EXECUTING_TASK_STATUSES = /* @__PURE__ */ new Set([
|
|
920
|
+
TaskStatus.RUNNING,
|
|
921
|
+
TaskStatus.STOPPING,
|
|
922
|
+
TaskStatus.AWAITING_PERMISSION,
|
|
923
|
+
TaskStatus.AWAITING_INPUT
|
|
924
|
+
]);
|
|
910
925
|
}
|
|
911
926
|
});
|
|
912
927
|
|
|
@@ -1070,6 +1085,8 @@ __export(schema_postgres_exports, {
|
|
|
1070
1085
|
serializedSessions: () => serializedSessions,
|
|
1071
1086
|
sessionEnvSelections: () => sessionEnvSelections,
|
|
1072
1087
|
sessionMcpServers: () => sessionMcpServers,
|
|
1088
|
+
sessionRelationships: () => sessionRelationships,
|
|
1089
|
+
sessionRelationshipsRelations: () => sessionRelationshipsRelations,
|
|
1073
1090
|
sessions: () => sessions,
|
|
1074
1091
|
sessionsRelations: () => sessionsRelations,
|
|
1075
1092
|
tasks: () => tasks,
|
|
@@ -1078,7 +1095,7 @@ __export(schema_postgres_exports, {
|
|
|
1078
1095
|
userMcpOauthTokens: () => userMcpOauthTokens,
|
|
1079
1096
|
users: () => users
|
|
1080
1097
|
});
|
|
1081
|
-
var import_drizzle_orm, import_pg_core, bytea, t, sessions, tasks, serializedSessions, messages, boards, repos, branches, branchOwners, boardOwners, schedules, users, groups, groupMemberships, branchGroupGrants, boardGroupGrants, appVariables, userApiKeys, mcpServers, cardTypes, cards, artifacts, artifactTrustGrants, boardObjects, sessionMcpServers, userMcpOauthTokens, boardComments, gatewayChannels, threadSessionMap, sessionEnvSelections, kbNamespaces, kbNamespaceAcl, kbDocuments, kbDocumentVersions, kbDocumentUnits, kbEmbeddingSpaces, kbGraphNodes, kbGraphEdges, sessionsRelations, branchesRelations, schedulesRelations;
|
|
1098
|
+
var import_drizzle_orm, import_pg_core, bytea, t, sessions, sessionRelationships, tasks, serializedSessions, messages, boards, repos, branches, branchOwners, boardOwners, schedules, users, groups, groupMemberships, branchGroupGrants, boardGroupGrants, appVariables, userApiKeys, mcpServers, cardTypes, cards, artifacts, artifactTrustGrants, boardObjects, sessionMcpServers, userMcpOauthTokens, boardComments, gatewayChannels, threadSessionMap, sessionEnvSelections, kbNamespaces, kbNamespaceAcl, kbDocuments, kbDocumentVersions, kbDocumentUnits, kbEmbeddingSpaces, kbGraphNodes, kbGraphEdges, sessionsRelations, sessionRelationshipsRelations, branchesRelations, schedulesRelations;
|
|
1082
1099
|
var init_schema_postgres = __esm({
|
|
1083
1100
|
"src/db/schema.postgres.ts"() {
|
|
1084
1101
|
"use strict";
|
|
@@ -1173,6 +1190,36 @@ var init_schema_postgres = __esm({
|
|
|
1173
1190
|
scheduleRunUnique: (0, import_pg_core.uniqueIndex)("sessions_schedule_run_unique").on(table.schedule_id, table.scheduled_run_at).where(import_drizzle_orm.sql`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
1174
1191
|
})
|
|
1175
1192
|
);
|
|
1193
|
+
sessionRelationships = (0, import_pg_core.pgTable)(
|
|
1194
|
+
"session_relationships",
|
|
1195
|
+
{
|
|
1196
|
+
relationship_id: (0, import_pg_core.varchar)("relationship_id", { length: 36 }).primaryKey(),
|
|
1197
|
+
source_session_id: (0, import_pg_core.varchar)("source_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1198
|
+
target_session_id: (0, import_pg_core.varchar)("target_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1199
|
+
relationship_type: (0, import_pg_core.text)("relationship_type", { enum: ["remote_create"] }).notNull(),
|
|
1200
|
+
created_by: (0, import_pg_core.varchar)("created_by", { length: 36 }).notNull(),
|
|
1201
|
+
created_at: t.timestamp("created_at").notNull(),
|
|
1202
|
+
updated_at: t.timestamp("updated_at"),
|
|
1203
|
+
callback_enabled: t.bool("callback_enabled").notNull().default(false),
|
|
1204
|
+
callback_session_id: (0, import_pg_core.varchar)("callback_session_id", { length: 36 }).references(
|
|
1205
|
+
() => sessions.session_id,
|
|
1206
|
+
{
|
|
1207
|
+
onDelete: "set null"
|
|
1208
|
+
}
|
|
1209
|
+
),
|
|
1210
|
+
data: t.json("data")
|
|
1211
|
+
},
|
|
1212
|
+
(table) => ({
|
|
1213
|
+
sourceIdx: (0, import_pg_core.index)("session_relationships_source_idx").on(table.source_session_id),
|
|
1214
|
+
targetIdx: (0, import_pg_core.index)("session_relationships_target_idx").on(table.target_session_id),
|
|
1215
|
+
callbackIdx: (0, import_pg_core.index)("session_relationships_callback_idx").on(table.callback_session_id),
|
|
1216
|
+
sourceTargetTypeUnique: (0, import_pg_core.uniqueIndex)("session_relationships_source_target_type_unique").on(
|
|
1217
|
+
table.source_session_id,
|
|
1218
|
+
table.target_session_id,
|
|
1219
|
+
table.relationship_type
|
|
1220
|
+
)
|
|
1221
|
+
})
|
|
1222
|
+
);
|
|
1176
1223
|
tasks = (0, import_pg_core.pgTable)(
|
|
1177
1224
|
"tasks",
|
|
1178
1225
|
{
|
|
@@ -1709,6 +1756,12 @@ var init_schema_postgres = __esm({
|
|
|
1709
1756
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).references(() => branches.branch_id, {
|
|
1710
1757
|
onDelete: "set null"
|
|
1711
1758
|
}),
|
|
1759
|
+
source_session_id: (0, import_pg_core.varchar)("source_session_id", { length: 36 }).references(
|
|
1760
|
+
() => sessions.session_id,
|
|
1761
|
+
{
|
|
1762
|
+
onDelete: "set null"
|
|
1763
|
+
}
|
|
1764
|
+
),
|
|
1712
1765
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
1713
1766
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
1714
1767
|
description: (0, import_pg_core.text)("description"),
|
|
@@ -1735,6 +1788,7 @@ var init_schema_postgres = __esm({
|
|
|
1735
1788
|
},
|
|
1736
1789
|
(table) => ({
|
|
1737
1790
|
branchIdx: (0, import_pg_core.index)("artifacts_branch_idx").on(table.branch_id),
|
|
1791
|
+
sourceSessionIdx: (0, import_pg_core.index)("artifacts_source_session_idx").on(table.source_session_id),
|
|
1738
1792
|
boardIdx: (0, import_pg_core.index)("artifacts_board_idx").on(table.board_id),
|
|
1739
1793
|
archivedIdx: (0, import_pg_core.index)("artifacts_archived_idx").on(table.archived),
|
|
1740
1794
|
publicIdx: (0, import_pg_core.index)("artifacts_public_idx").on(table.public)
|
|
@@ -1891,7 +1945,7 @@ var init_schema_postgres = __esm({
|
|
|
1891
1945
|
// Materialized for queries
|
|
1892
1946
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
1893
1947
|
channel_type: (0, import_pg_core.text)("channel_type", {
|
|
1894
|
-
enum: ["slack", "discord", "whatsapp", "telegram", "github"]
|
|
1948
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
1895
1949
|
}).notNull(),
|
|
1896
1950
|
target_branch_id: (0, import_pg_core.varchar)("target_branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
1897
1951
|
agor_user_id: (0, import_pg_core.varchar)("agor_user_id", { length: 36 }).notNull(),
|
|
@@ -2275,7 +2329,7 @@ var init_schema_postgres = __esm({
|
|
|
2275
2329
|
archivedIdx: (0, import_pg_core.index)("kb_graph_edges_archived_idx").on(table.archived)
|
|
2276
2330
|
})
|
|
2277
2331
|
);
|
|
2278
|
-
sessionsRelations = (0, import_drizzle_orm.relations)(sessions, ({ one }) => ({
|
|
2332
|
+
sessionsRelations = (0, import_drizzle_orm.relations)(sessions, ({ one, many }) => ({
|
|
2279
2333
|
branch: one(branches, {
|
|
2280
2334
|
fields: [sessions.branch_id],
|
|
2281
2335
|
references: [branches.branch_id]
|
|
@@ -2283,6 +2337,24 @@ var init_schema_postgres = __esm({
|
|
|
2283
2337
|
schedule: one(schedules, {
|
|
2284
2338
|
fields: [sessions.schedule_id],
|
|
2285
2339
|
references: [schedules.schedule_id]
|
|
2340
|
+
}),
|
|
2341
|
+
outboundRelationships: many(sessionRelationships, { relationName: "relationshipSource" }),
|
|
2342
|
+
inboundRelationships: many(sessionRelationships, { relationName: "relationshipTarget" })
|
|
2343
|
+
}));
|
|
2344
|
+
sessionRelationshipsRelations = (0, import_drizzle_orm.relations)(sessionRelationships, ({ one }) => ({
|
|
2345
|
+
sourceSession: one(sessions, {
|
|
2346
|
+
fields: [sessionRelationships.source_session_id],
|
|
2347
|
+
references: [sessions.session_id],
|
|
2348
|
+
relationName: "relationshipSource"
|
|
2349
|
+
}),
|
|
2350
|
+
targetSession: one(sessions, {
|
|
2351
|
+
fields: [sessionRelationships.target_session_id],
|
|
2352
|
+
references: [sessions.session_id],
|
|
2353
|
+
relationName: "relationshipTarget"
|
|
2354
|
+
}),
|
|
2355
|
+
callbackSession: one(sessions, {
|
|
2356
|
+
fields: [sessionRelationships.callback_session_id],
|
|
2357
|
+
references: [sessions.session_id]
|
|
2286
2358
|
})
|
|
2287
2359
|
}));
|
|
2288
2360
|
branchesRelations = (0, import_drizzle_orm.relations)(branches, ({ many }) => ({
|
|
@@ -2335,6 +2407,8 @@ __export(schema_sqlite_exports, {
|
|
|
2335
2407
|
serializedSessions: () => serializedSessions2,
|
|
2336
2408
|
sessionEnvSelections: () => sessionEnvSelections2,
|
|
2337
2409
|
sessionMcpServers: () => sessionMcpServers2,
|
|
2410
|
+
sessionRelationships: () => sessionRelationships2,
|
|
2411
|
+
sessionRelationshipsRelations: () => sessionRelationshipsRelations2,
|
|
2338
2412
|
sessions: () => sessions2,
|
|
2339
2413
|
sessionsRelations: () => sessionsRelations2,
|
|
2340
2414
|
tasks: () => tasks2,
|
|
@@ -2343,7 +2417,7 @@ __export(schema_sqlite_exports, {
|
|
|
2343
2417
|
userMcpOauthTokens: () => userMcpOauthTokens2,
|
|
2344
2418
|
users: () => users2
|
|
2345
2419
|
});
|
|
2346
|
-
var import_drizzle_orm2, import_sqlite_core, t2, sessions2, tasks2, serializedSessions2, messages2, boards2, repos2, branches2, branchOwners2, boardOwners2, schedules2, users2, groups2, groupMemberships2, branchGroupGrants2, boardGroupGrants2, appVariables2, userApiKeys2, mcpServers2, cardTypes2, cards2, artifacts2, artifactTrustGrants2, boardObjects2, sessionMcpServers2, userMcpOauthTokens2, boardComments2, gatewayChannels2, threadSessionMap2, sessionEnvSelections2, kbNamespaces2, kbNamespaceAcl2, kbDocuments2, kbDocumentVersions2, kbDocumentUnits2, kbEmbeddingSpaces2, kbGraphNodes2, kbGraphEdges2, sessionsRelations2, branchesRelations2, schedulesRelations2;
|
|
2420
|
+
var import_drizzle_orm2, import_sqlite_core, t2, sessions2, sessionRelationships2, tasks2, serializedSessions2, messages2, boards2, repos2, branches2, branchOwners2, boardOwners2, schedules2, users2, groups2, groupMemberships2, branchGroupGrants2, boardGroupGrants2, appVariables2, userApiKeys2, mcpServers2, cardTypes2, cards2, artifacts2, artifactTrustGrants2, boardObjects2, sessionMcpServers2, userMcpOauthTokens2, boardComments2, gatewayChannels2, threadSessionMap2, sessionEnvSelections2, kbNamespaces2, kbNamespaceAcl2, kbDocuments2, kbDocumentVersions2, kbDocumentUnits2, kbEmbeddingSpaces2, kbGraphNodes2, kbGraphEdges2, sessionsRelations2, sessionRelationshipsRelations2, branchesRelations2, schedulesRelations2;
|
|
2347
2421
|
var init_schema_sqlite = __esm({
|
|
2348
2422
|
"src/db/schema.sqlite.ts"() {
|
|
2349
2423
|
"use strict";
|
|
@@ -2435,6 +2509,36 @@ var init_schema_sqlite = __esm({
|
|
|
2435
2509
|
scheduleRunUnique: (0, import_sqlite_core.uniqueIndex)("sessions_schedule_run_unique").on(table.schedule_id, table.scheduled_run_at).where(import_drizzle_orm2.sql`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
2436
2510
|
})
|
|
2437
2511
|
);
|
|
2512
|
+
sessionRelationships2 = (0, import_sqlite_core.sqliteTable)(
|
|
2513
|
+
"session_relationships",
|
|
2514
|
+
{
|
|
2515
|
+
relationship_id: (0, import_sqlite_core.text)("relationship_id", { length: 36 }).primaryKey(),
|
|
2516
|
+
source_session_id: (0, import_sqlite_core.text)("source_session_id", { length: 36 }).notNull().references(() => sessions2.session_id, { onDelete: "cascade" }),
|
|
2517
|
+
target_session_id: (0, import_sqlite_core.text)("target_session_id", { length: 36 }).notNull().references(() => sessions2.session_id, { onDelete: "cascade" }),
|
|
2518
|
+
relationship_type: (0, import_sqlite_core.text)("relationship_type", { enum: ["remote_create"] }).notNull(),
|
|
2519
|
+
created_by: (0, import_sqlite_core.text)("created_by", { length: 36 }).notNull(),
|
|
2520
|
+
created_at: t2.timestamp("created_at").notNull(),
|
|
2521
|
+
updated_at: t2.timestamp("updated_at"),
|
|
2522
|
+
callback_enabled: t2.bool("callback_enabled").notNull().default(false),
|
|
2523
|
+
callback_session_id: (0, import_sqlite_core.text)("callback_session_id", { length: 36 }).references(
|
|
2524
|
+
() => sessions2.session_id,
|
|
2525
|
+
{
|
|
2526
|
+
onDelete: "set null"
|
|
2527
|
+
}
|
|
2528
|
+
),
|
|
2529
|
+
data: t2.json("data")
|
|
2530
|
+
},
|
|
2531
|
+
(table) => ({
|
|
2532
|
+
sourceIdx: (0, import_sqlite_core.index)("session_relationships_source_idx").on(table.source_session_id),
|
|
2533
|
+
targetIdx: (0, import_sqlite_core.index)("session_relationships_target_idx").on(table.target_session_id),
|
|
2534
|
+
callbackIdx: (0, import_sqlite_core.index)("session_relationships_callback_idx").on(table.callback_session_id),
|
|
2535
|
+
sourceTargetTypeUnique: (0, import_sqlite_core.uniqueIndex)("session_relationships_source_target_type_unique").on(
|
|
2536
|
+
table.source_session_id,
|
|
2537
|
+
table.target_session_id,
|
|
2538
|
+
table.relationship_type
|
|
2539
|
+
)
|
|
2540
|
+
})
|
|
2541
|
+
);
|
|
2438
2542
|
tasks2 = (0, import_sqlite_core.sqliteTable)(
|
|
2439
2543
|
"tasks",
|
|
2440
2544
|
{
|
|
@@ -2979,6 +3083,12 @@ var init_schema_sqlite = __esm({
|
|
|
2979
3083
|
branch_id: (0, import_sqlite_core.text)("branch_id", { length: 36 }).references(() => branches2.branch_id, {
|
|
2980
3084
|
onDelete: "set null"
|
|
2981
3085
|
}),
|
|
3086
|
+
source_session_id: (0, import_sqlite_core.text)("source_session_id", { length: 36 }).references(
|
|
3087
|
+
() => sessions2.session_id,
|
|
3088
|
+
{
|
|
3089
|
+
onDelete: "set null"
|
|
3090
|
+
}
|
|
3091
|
+
),
|
|
2982
3092
|
board_id: (0, import_sqlite_core.text)("board_id", { length: 36 }).notNull().references(() => boards2.board_id, { onDelete: "cascade" }),
|
|
2983
3093
|
name: (0, import_sqlite_core.text)("name").notNull(),
|
|
2984
3094
|
description: (0, import_sqlite_core.text)("description"),
|
|
@@ -3005,6 +3115,7 @@ var init_schema_sqlite = __esm({
|
|
|
3005
3115
|
},
|
|
3006
3116
|
(table) => ({
|
|
3007
3117
|
branchIdx: (0, import_sqlite_core.index)("artifacts_branch_idx").on(table.branch_id),
|
|
3118
|
+
sourceSessionIdx: (0, import_sqlite_core.index)("artifacts_source_session_idx").on(table.source_session_id),
|
|
3008
3119
|
boardIdx: (0, import_sqlite_core.index)("artifacts_board_idx").on(table.board_id),
|
|
3009
3120
|
archivedIdx: (0, import_sqlite_core.index)("artifacts_archived_idx").on(table.archived),
|
|
3010
3121
|
publicIdx: (0, import_sqlite_core.index)("artifacts_public_idx").on(table.public)
|
|
@@ -3163,7 +3274,7 @@ var init_schema_sqlite = __esm({
|
|
|
3163
3274
|
// Materialized for queries
|
|
3164
3275
|
name: (0, import_sqlite_core.text)("name").notNull(),
|
|
3165
3276
|
channel_type: (0, import_sqlite_core.text)("channel_type", {
|
|
3166
|
-
enum: ["slack", "discord", "whatsapp", "telegram", "github"]
|
|
3277
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
3167
3278
|
}).notNull(),
|
|
3168
3279
|
target_branch_id: (0, import_sqlite_core.text)("target_branch_id", { length: 36 }).notNull().references(() => branches2.branch_id, { onDelete: "cascade" }),
|
|
3169
3280
|
agor_user_id: (0, import_sqlite_core.text)("agor_user_id", { length: 36 }).notNull(),
|
|
@@ -3546,7 +3657,7 @@ var init_schema_sqlite = __esm({
|
|
|
3546
3657
|
archivedIdx: (0, import_sqlite_core.index)("kb_graph_edges_archived_idx").on(table.archived)
|
|
3547
3658
|
})
|
|
3548
3659
|
);
|
|
3549
|
-
sessionsRelations2 = (0, import_drizzle_orm2.relations)(sessions2, ({ one }) => ({
|
|
3660
|
+
sessionsRelations2 = (0, import_drizzle_orm2.relations)(sessions2, ({ one, many }) => ({
|
|
3550
3661
|
branch: one(branches2, {
|
|
3551
3662
|
fields: [sessions2.branch_id],
|
|
3552
3663
|
references: [branches2.branch_id]
|
|
@@ -3554,6 +3665,24 @@ var init_schema_sqlite = __esm({
|
|
|
3554
3665
|
schedule: one(schedules2, {
|
|
3555
3666
|
fields: [sessions2.schedule_id],
|
|
3556
3667
|
references: [schedules2.schedule_id]
|
|
3668
|
+
}),
|
|
3669
|
+
outboundRelationships: many(sessionRelationships2, { relationName: "relationshipSource" }),
|
|
3670
|
+
inboundRelationships: many(sessionRelationships2, { relationName: "relationshipTarget" })
|
|
3671
|
+
}));
|
|
3672
|
+
sessionRelationshipsRelations2 = (0, import_drizzle_orm2.relations)(sessionRelationships2, ({ one }) => ({
|
|
3673
|
+
sourceSession: one(sessions2, {
|
|
3674
|
+
fields: [sessionRelationships2.source_session_id],
|
|
3675
|
+
references: [sessions2.session_id],
|
|
3676
|
+
relationName: "relationshipSource"
|
|
3677
|
+
}),
|
|
3678
|
+
targetSession: one(sessions2, {
|
|
3679
|
+
fields: [sessionRelationships2.target_session_id],
|
|
3680
|
+
references: [sessions2.session_id],
|
|
3681
|
+
relationName: "relationshipTarget"
|
|
3682
|
+
}),
|
|
3683
|
+
callbackSession: one(sessions2, {
|
|
3684
|
+
fields: [sessionRelationships2.callback_session_id],
|
|
3685
|
+
references: [sessions2.session_id]
|
|
3557
3686
|
})
|
|
3558
3687
|
}));
|
|
3559
3688
|
branchesRelations2 = (0, import_drizzle_orm2.relations)(branches2, ({ many }) => ({
|
|
@@ -3904,6 +4033,7 @@ __export(schema_exports, {
|
|
|
3904
4033
|
serializedSessions: () => serializedSessions3,
|
|
3905
4034
|
sessionEnvSelections: () => sessionEnvSelections3,
|
|
3906
4035
|
sessionMcpServers: () => sessionMcpServers3,
|
|
4036
|
+
sessionRelationships: () => sessionRelationships3,
|
|
3907
4037
|
sessions: () => sessions3,
|
|
3908
4038
|
tasks: () => tasks3,
|
|
3909
4039
|
threadSessionMap: () => threadSessionMap3,
|
|
@@ -3911,7 +4041,7 @@ __export(schema_exports, {
|
|
|
3911
4041
|
userMcpOauthTokens: () => userMcpOauthTokens3,
|
|
3912
4042
|
users: () => users3
|
|
3913
4043
|
});
|
|
3914
|
-
var dialect, schema, sessions3, tasks3, messages3, boards3, repos3, branches3, branchOwners3, boardOwners3, groups3, groupMemberships3, branchGroupGrants3, boardGroupGrants3, schedules3, users3, appVariables3, mcpServers3, cardTypes3, cards3, artifacts3, artifactTrustGrants3, boardObjects3, sessionMcpServers3, sessionEnvSelections3, userMcpOauthTokens3, boardComments3, gatewayChannels3, threadSessionMap3, userApiKeys3, serializedSessions3, kbNamespaces3, kbNamespaceAcl3, kbDocuments3, kbDocumentVersions3, kbDocumentUnits3, kbEmbeddingSpaces3, kbGraphNodes3, kbGraphEdges3;
|
|
4044
|
+
var dialect, schema, sessions3, tasks3, messages3, boards3, repos3, branches3, branchOwners3, boardOwners3, groups3, groupMemberships3, branchGroupGrants3, boardGroupGrants3, schedules3, users3, appVariables3, mcpServers3, cardTypes3, cards3, artifacts3, artifactTrustGrants3, boardObjects3, sessionMcpServers3, sessionRelationships3, sessionEnvSelections3, userMcpOauthTokens3, boardComments3, gatewayChannels3, threadSessionMap3, userApiKeys3, serializedSessions3, kbNamespaces3, kbNamespaceAcl3, kbDocuments3, kbDocumentVersions3, kbDocumentUnits3, kbEmbeddingSpaces3, kbGraphNodes3, kbGraphEdges3;
|
|
3915
4045
|
var init_schema = __esm({
|
|
3916
4046
|
"src/db/schema.ts"() {
|
|
3917
4047
|
"use strict";
|
|
@@ -3943,6 +4073,7 @@ var init_schema = __esm({
|
|
|
3943
4073
|
artifactTrustGrants3 = schema.artifactTrustGrants;
|
|
3944
4074
|
boardObjects3 = schema.boardObjects;
|
|
3945
4075
|
sessionMcpServers3 = schema.sessionMcpServers;
|
|
4076
|
+
sessionRelationships3 = schema.sessionRelationships;
|
|
3946
4077
|
sessionEnvSelections3 = schema.sessionEnvSelections;
|
|
3947
4078
|
userMcpOauthTokens3 = schema.userMcpOauthTokens;
|
|
3948
4079
|
boardComments3 = schema.boardComments;
|
|
@@ -4200,6 +4331,7 @@ __export(db_exports, {
|
|
|
4200
4331
|
SerializedSessionRepository: () => SerializedSessionRepository,
|
|
4201
4332
|
SessionEnvSelectionRepository: () => SessionEnvSelectionRepository,
|
|
4202
4333
|
SessionMCPServerRepository: () => SessionMCPServerRepository,
|
|
4334
|
+
SessionRelationshipRepository: () => SessionRelationshipRepository,
|
|
4203
4335
|
SessionRepository: () => SessionRepository,
|
|
4204
4336
|
TaskRepository: () => TaskRepository,
|
|
4205
4337
|
ThreadSessionMapRepository: () => ThreadSessionMapRepository,
|
|
@@ -4207,11 +4339,11 @@ __export(db_exports, {
|
|
|
4207
4339
|
UserMCPOAuthTokenRepository: () => UserMCPOAuthTokenRepository,
|
|
4208
4340
|
UsersRepository: () => UsersRepository,
|
|
4209
4341
|
advisoryLockKeyForUuid: () => advisoryLockKeyForUuid,
|
|
4210
|
-
and: () =>
|
|
4342
|
+
and: () => import_drizzle_orm34.and,
|
|
4211
4343
|
appVariables: () => appVariables3,
|
|
4212
4344
|
artifactTrustGrants: () => artifactTrustGrants3,
|
|
4213
4345
|
artifacts: () => artifacts3,
|
|
4214
|
-
asc: () =>
|
|
4346
|
+
asc: () => import_drizzle_orm34.asc,
|
|
4215
4347
|
assertUsableBootstrapAdminPassword: () => assertUsableBootstrapAdminPassword,
|
|
4216
4348
|
boardComments: () => boardComments3,
|
|
4217
4349
|
boardGroupGrants: () => boardGroupGrants3,
|
|
@@ -4234,9 +4366,9 @@ __export(db_exports, {
|
|
|
4234
4366
|
dateTruncUtc: () => dateTruncUtc,
|
|
4235
4367
|
decryptApiKey: () => decryptApiKey,
|
|
4236
4368
|
deleteFrom: () => deleteFrom,
|
|
4237
|
-
desc: () =>
|
|
4369
|
+
desc: () => import_drizzle_orm34.desc,
|
|
4238
4370
|
encryptApiKey: () => encryptApiKey,
|
|
4239
|
-
eq: () =>
|
|
4371
|
+
eq: () => import_drizzle_orm34.eq,
|
|
4240
4372
|
executeAll: () => executeAll,
|
|
4241
4373
|
executeGet: () => executeGet,
|
|
4242
4374
|
executeRaw: () => executeRaw,
|
|
@@ -4252,11 +4384,11 @@ __export(db_exports, {
|
|
|
4252
4384
|
getUserByEmail: () => getUserByEmail,
|
|
4253
4385
|
groupMemberships: () => groupMemberships3,
|
|
4254
4386
|
groups: () => groups3,
|
|
4255
|
-
gt: () =>
|
|
4256
|
-
gte: () =>
|
|
4387
|
+
gt: () => import_drizzle_orm34.gt,
|
|
4388
|
+
gte: () => import_drizzle_orm34.gte,
|
|
4257
4389
|
hash: () => hash,
|
|
4258
4390
|
identifyUrlParam: () => identifyUrlParam,
|
|
4259
|
-
inArray: () =>
|
|
4391
|
+
inArray: () => import_drizzle_orm34.inArray,
|
|
4260
4392
|
initializeDatabase: () => initializeDatabase,
|
|
4261
4393
|
insert: () => insert,
|
|
4262
4394
|
insertOne: () => insertOne,
|
|
@@ -4275,12 +4407,12 @@ __export(db_exports, {
|
|
|
4275
4407
|
kbGraphNodes: () => kbGraphNodes3,
|
|
4276
4408
|
kbNamespaceAcl: () => kbNamespaceAcl3,
|
|
4277
4409
|
kbNamespaces: () => kbNamespaces3,
|
|
4278
|
-
like: () =>
|
|
4410
|
+
like: () => import_drizzle_orm34.like,
|
|
4279
4411
|
lockRowForUpdate: () => lockRowForUpdate,
|
|
4280
|
-
lte: () =>
|
|
4412
|
+
lte: () => import_drizzle_orm34.lte,
|
|
4281
4413
|
mcpServers: () => mcpServers3,
|
|
4282
4414
|
messages: () => messages3,
|
|
4283
|
-
or: () =>
|
|
4415
|
+
or: () => import_drizzle_orm34.or,
|
|
4284
4416
|
reattributeLegacyAnonymousRows: () => reattributeLegacyAnonymousRows,
|
|
4285
4417
|
repos: () => repos3,
|
|
4286
4418
|
resolveByShortIdPrefix: () => resolveByShortIdPrefix,
|
|
@@ -4292,9 +4424,10 @@ __export(db_exports, {
|
|
|
4292
4424
|
serializedSessions: () => serializedSessions3,
|
|
4293
4425
|
sessionEnvSelections: () => sessionEnvSelections3,
|
|
4294
4426
|
sessionMcpServers: () => sessionMcpServers3,
|
|
4427
|
+
sessionRelationships: () => sessionRelationships3,
|
|
4295
4428
|
sessions: () => sessions3,
|
|
4296
4429
|
shortId: () => shortId,
|
|
4297
|
-
sql: () =>
|
|
4430
|
+
sql: () => import_drizzle_orm34.sql,
|
|
4298
4431
|
tasks: () => tasks3,
|
|
4299
4432
|
threadSessionMap: () => threadSessionMap3,
|
|
4300
4433
|
tryAdvisoryXactLock: () => tryAdvisoryXactLock,
|
|
@@ -4309,7 +4442,7 @@ __export(db_exports, {
|
|
|
4309
4442
|
});
|
|
4310
4443
|
module.exports = __toCommonJS(db_exports);
|
|
4311
4444
|
init_cjs_shims();
|
|
4312
|
-
var
|
|
4445
|
+
var import_drizzle_orm34 = require("drizzle-orm");
|
|
4313
4446
|
var import_bcryptjs3 = __toESM(require("bcryptjs"), 1);
|
|
4314
4447
|
init_ids();
|
|
4315
4448
|
|
|
@@ -4437,8 +4570,8 @@ function createPostgresDatabase(config) {
|
|
|
4437
4570
|
if (config.ssl !== void 0) {
|
|
4438
4571
|
options.ssl = config.ssl;
|
|
4439
4572
|
}
|
|
4440
|
-
const
|
|
4441
|
-
return (0, import_postgres_js.drizzle)(
|
|
4573
|
+
const sql16 = (0, import_postgres.default)(config.url, options);
|
|
4574
|
+
return (0, import_postgres_js.drizzle)(sql16, { schema: schema_postgres_exports });
|
|
4442
4575
|
} catch (error) {
|
|
4443
4576
|
throw new DatabaseConnectionError(
|
|
4444
4577
|
`Failed to create PostgreSQL client: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -5129,6 +5262,7 @@ var ArtifactRepository = class {
|
|
|
5129
5262
|
return {
|
|
5130
5263
|
artifact_id: artifactId,
|
|
5131
5264
|
branch_id: row.branch_id ?? null,
|
|
5265
|
+
source_session_id: row.source_session_id ?? null,
|
|
5132
5266
|
board_id: row.board_id,
|
|
5133
5267
|
name: row.name,
|
|
5134
5268
|
description: row.description ?? void 0,
|
|
@@ -5167,6 +5301,7 @@ var ArtifactRepository = class {
|
|
|
5167
5301
|
const insertData = {
|
|
5168
5302
|
artifact_id: artifactId,
|
|
5169
5303
|
branch_id: data.branch_id ?? null,
|
|
5304
|
+
source_session_id: data.source_session_id ?? null,
|
|
5170
5305
|
board_id: data.board_id ?? "",
|
|
5171
5306
|
name: data.name ?? "Untitled Artifact",
|
|
5172
5307
|
description: data.description ?? null,
|
|
@@ -5319,6 +5454,9 @@ var ArtifactRepository = class {
|
|
|
5319
5454
|
setData.agor_grants = updates.agor_grants ?? null;
|
|
5320
5455
|
}
|
|
5321
5456
|
if (updates.public !== void 0) setData.public = updates.public;
|
|
5457
|
+
if (updates.source_session_id !== void 0) {
|
|
5458
|
+
setData.source_session_id = updates.source_session_id ?? null;
|
|
5459
|
+
}
|
|
5322
5460
|
if (updates.archived !== void 0) setData.archived = updates.archived;
|
|
5323
5461
|
if (updates.archived_at !== void 0) {
|
|
5324
5462
|
setData.archived_at = updates.archived_at ? new Date(updates.archived_at) : null;
|
|
@@ -6544,6 +6682,7 @@ var FS_ACCESS_RANK = {
|
|
|
6544
6682
|
};
|
|
6545
6683
|
var VIEW_OR_BETTER_BRANCH_PERMISSIONS = ["view", "session", "prompt", "all"];
|
|
6546
6684
|
var BRANCH_PERMISSION_SOURCES = ["board", "override"];
|
|
6685
|
+
var FS_ACCESS_BRANCH_PERMISSIONS = ["read", "write"];
|
|
6547
6686
|
var BranchRepository = class {
|
|
6548
6687
|
constructor(db) {
|
|
6549
6688
|
this.db = db;
|
|
@@ -7037,6 +7176,83 @@ var BranchRepository = class {
|
|
|
7037
7176
|
}
|
|
7038
7177
|
return Array.from(userIds);
|
|
7039
7178
|
}
|
|
7179
|
+
/**
|
|
7180
|
+
* Find users whose explicit branch or aligned-board grants should materialize
|
|
7181
|
+
* into filesystem access for the branch.
|
|
7182
|
+
*
|
|
7183
|
+
* This intentionally excludes ambient "others" access because there is no
|
|
7184
|
+
* bounded user set to expand. Board owners apply whenever the branch is
|
|
7185
|
+
* explicitly aligned to board permissions (`permission_source = 'board'`);
|
|
7186
|
+
* board group grants additionally require a shared board. Override branches
|
|
7187
|
+
* must not inherit board grants.
|
|
7188
|
+
*/
|
|
7189
|
+
async findExplicitFsAccessUserIds(branchId) {
|
|
7190
|
+
const branchRow = await select(this.db, {
|
|
7191
|
+
board_id: branches3.board_id,
|
|
7192
|
+
permission_source: branches3.permission_source
|
|
7193
|
+
}).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, branchId)).one();
|
|
7194
|
+
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branchId)).all();
|
|
7195
|
+
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, branchGroupGrants3.group_id)).innerJoin(
|
|
7196
|
+
groups3,
|
|
7197
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
7198
|
+
).where(
|
|
7199
|
+
(0, import_drizzle_orm14.and)(
|
|
7200
|
+
(0, import_drizzle_orm14.eq)(branchGroupGrants3.branch_id, branchId),
|
|
7201
|
+
(0, import_drizzle_orm14.inArray)(
|
|
7202
|
+
import_drizzle_orm14.sql`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
7203
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7204
|
+
)
|
|
7205
|
+
)
|
|
7206
|
+
).all();
|
|
7207
|
+
const isBoardAligned = branchRow?.permission_source === "board" && branchRow.board_id;
|
|
7208
|
+
const boardOwnerRows = isBoardAligned ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where((0, import_drizzle_orm14.eq)(boardOwners3.board_id, branchRow.board_id)).all() : [];
|
|
7209
|
+
const boardGroupRows = isBoardAligned ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, boardGroupGrants3.group_id)).innerJoin(
|
|
7210
|
+
groups3,
|
|
7211
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
7212
|
+
).innerJoin(
|
|
7213
|
+
boards3,
|
|
7214
|
+
(0, import_drizzle_orm14.and)(
|
|
7215
|
+
(0, import_drizzle_orm14.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
7216
|
+
(0, import_drizzle_orm14.eq)(
|
|
7217
|
+
import_drizzle_orm14.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`,
|
|
7218
|
+
"shared"
|
|
7219
|
+
)
|
|
7220
|
+
)
|
|
7221
|
+
).where(
|
|
7222
|
+
(0, import_drizzle_orm14.and)(
|
|
7223
|
+
(0, import_drizzle_orm14.eq)(boardGroupGrants3.board_id, branchRow.board_id),
|
|
7224
|
+
(0, import_drizzle_orm14.inArray)(
|
|
7225
|
+
import_drizzle_orm14.sql`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
7226
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7227
|
+
)
|
|
7228
|
+
)
|
|
7229
|
+
).all() : [];
|
|
7230
|
+
const userIds = /* @__PURE__ */ new Set();
|
|
7231
|
+
for (const row of ownerRows) {
|
|
7232
|
+
userIds.add(row.user_id);
|
|
7233
|
+
}
|
|
7234
|
+
for (const row of groupRows) {
|
|
7235
|
+
userIds.add(row.user_id);
|
|
7236
|
+
}
|
|
7237
|
+
for (const row of boardOwnerRows) {
|
|
7238
|
+
userIds.add(row.user_id);
|
|
7239
|
+
}
|
|
7240
|
+
for (const row of boardGroupRows) {
|
|
7241
|
+
userIds.add(row.user_id);
|
|
7242
|
+
}
|
|
7243
|
+
return Array.from(userIds);
|
|
7244
|
+
}
|
|
7245
|
+
async findBoardAlignedBranches(boardId) {
|
|
7246
|
+
const rows = await select(this.db).from(branches3).where(
|
|
7247
|
+
(0, import_drizzle_orm14.and)(
|
|
7248
|
+
(0, import_drizzle_orm14.eq)(branches3.board_id, boardId),
|
|
7249
|
+
(0, import_drizzle_orm14.eq)(branches3.permission_source, "board"),
|
|
7250
|
+
(0, import_drizzle_orm14.eq)(branches3.archived, false)
|
|
7251
|
+
)
|
|
7252
|
+
).all();
|
|
7253
|
+
const baseUrl = await getBaseUrl();
|
|
7254
|
+
return rows.map((row) => this.rowToBranch(row, baseUrl));
|
|
7255
|
+
}
|
|
7040
7256
|
/**
|
|
7041
7257
|
* Get all owners of a branch
|
|
7042
7258
|
*
|
|
@@ -8612,8 +8828,10 @@ var SENSITIVE_CONFIG_FIELDS = [
|
|
|
8612
8828
|
"signing_secret",
|
|
8613
8829
|
// Slack
|
|
8614
8830
|
"private_key",
|
|
8615
|
-
"webhook_secret"
|
|
8831
|
+
"webhook_secret",
|
|
8616
8832
|
// GitHub
|
|
8833
|
+
"app_password"
|
|
8834
|
+
// Teams (Azure Bot App Secret)
|
|
8617
8835
|
];
|
|
8618
8836
|
var REDACTED_SENTINEL = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
8619
8837
|
function encryptConfig(config) {
|
|
@@ -12461,10 +12679,170 @@ var SessionMCPServerRepository = class {
|
|
|
12461
12679
|
}
|
|
12462
12680
|
};
|
|
12463
12681
|
|
|
12682
|
+
// src/db/repositories/session-relationships.ts
|
|
12683
|
+
init_cjs_shims();
|
|
12684
|
+
var import_drizzle_orm28 = require("drizzle-orm");
|
|
12685
|
+
init_ids();
|
|
12686
|
+
init_database_wrapper();
|
|
12687
|
+
init_schema();
|
|
12688
|
+
var SessionRelationshipRepository = class {
|
|
12689
|
+
constructor(db) {
|
|
12690
|
+
this.db = db;
|
|
12691
|
+
}
|
|
12692
|
+
rowToRelationship(row) {
|
|
12693
|
+
return {
|
|
12694
|
+
relationship_id: row.relationship_id,
|
|
12695
|
+
source_session_id: row.source_session_id,
|
|
12696
|
+
target_session_id: row.target_session_id,
|
|
12697
|
+
relationship_type: row.relationship_type,
|
|
12698
|
+
created_by: row.created_by,
|
|
12699
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
12700
|
+
updated_at: row.updated_at ? new Date(row.updated_at).toISOString() : null,
|
|
12701
|
+
callback_enabled: Boolean(row.callback_enabled),
|
|
12702
|
+
callback_session_id: row.callback_session_id ?? null,
|
|
12703
|
+
data: row.data ?? null
|
|
12704
|
+
};
|
|
12705
|
+
}
|
|
12706
|
+
async create(input) {
|
|
12707
|
+
try {
|
|
12708
|
+
const now = /* @__PURE__ */ new Date();
|
|
12709
|
+
const row = {
|
|
12710
|
+
relationship_id: generateId(),
|
|
12711
|
+
source_session_id: input.source_session_id,
|
|
12712
|
+
target_session_id: input.target_session_id,
|
|
12713
|
+
relationship_type: input.relationship_type,
|
|
12714
|
+
created_by: input.created_by,
|
|
12715
|
+
created_at: now,
|
|
12716
|
+
updated_at: now,
|
|
12717
|
+
callback_enabled: input.callback_enabled ?? false,
|
|
12718
|
+
callback_session_id: input.callback_session_id ?? null,
|
|
12719
|
+
data: input.data ?? null
|
|
12720
|
+
};
|
|
12721
|
+
await insert(this.db, sessionRelationships3).values(row).run();
|
|
12722
|
+
return this.rowToRelationship(row);
|
|
12723
|
+
} catch (error) {
|
|
12724
|
+
throw new RepositoryError(
|
|
12725
|
+
`Failed to create session relationship: ${error instanceof Error ? error.message : String(error)}`,
|
|
12726
|
+
error
|
|
12727
|
+
);
|
|
12728
|
+
}
|
|
12729
|
+
}
|
|
12730
|
+
async get(relationshipId) {
|
|
12731
|
+
try {
|
|
12732
|
+
const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
12733
|
+
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12734
|
+
return this.rowToRelationship(row);
|
|
12735
|
+
} catch (error) {
|
|
12736
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
12737
|
+
throw new RepositoryError(
|
|
12738
|
+
`Failed to get session relationship: ${error instanceof Error ? error.message : String(error)}`,
|
|
12739
|
+
error
|
|
12740
|
+
);
|
|
12741
|
+
}
|
|
12742
|
+
}
|
|
12743
|
+
async findForSession(sessionId) {
|
|
12744
|
+
try {
|
|
12745
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12746
|
+
(0, import_drizzle_orm28.or)(
|
|
12747
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.source_session_id, sessionId),
|
|
12748
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.target_session_id, sessionId)
|
|
12749
|
+
)
|
|
12750
|
+
).all();
|
|
12751
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12752
|
+
} catch (error) {
|
|
12753
|
+
throw new RepositoryError(
|
|
12754
|
+
`Failed to list session relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12755
|
+
error
|
|
12756
|
+
);
|
|
12757
|
+
}
|
|
12758
|
+
}
|
|
12759
|
+
async findForSessions(sessionIds) {
|
|
12760
|
+
if (sessionIds.length === 0) return [];
|
|
12761
|
+
try {
|
|
12762
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12763
|
+
(0, import_drizzle_orm28.or)(
|
|
12764
|
+
(0, import_drizzle_orm28.inArray)(sessionRelationships3.source_session_id, sessionIds),
|
|
12765
|
+
(0, import_drizzle_orm28.inArray)(sessionRelationships3.target_session_id, sessionIds)
|
|
12766
|
+
)
|
|
12767
|
+
).all();
|
|
12768
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12769
|
+
} catch (error) {
|
|
12770
|
+
throw new RepositoryError(
|
|
12771
|
+
`Failed to list session relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12772
|
+
error
|
|
12773
|
+
);
|
|
12774
|
+
}
|
|
12775
|
+
}
|
|
12776
|
+
async findRemoteChildren(sourceSessionId) {
|
|
12777
|
+
try {
|
|
12778
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12779
|
+
(0, import_drizzle_orm28.and)(
|
|
12780
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.source_session_id, sourceSessionId),
|
|
12781
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
12782
|
+
)
|
|
12783
|
+
).all();
|
|
12784
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12785
|
+
} catch (error) {
|
|
12786
|
+
throw new RepositoryError(
|
|
12787
|
+
`Failed to list remote child relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12788
|
+
error
|
|
12789
|
+
);
|
|
12790
|
+
}
|
|
12791
|
+
}
|
|
12792
|
+
async findRemoteParents(targetSessionId) {
|
|
12793
|
+
try {
|
|
12794
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12795
|
+
(0, import_drizzle_orm28.and)(
|
|
12796
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.target_session_id, targetSessionId),
|
|
12797
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
12798
|
+
)
|
|
12799
|
+
).all();
|
|
12800
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12801
|
+
} catch (error) {
|
|
12802
|
+
throw new RepositoryError(
|
|
12803
|
+
`Failed to list remote parent relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12804
|
+
error
|
|
12805
|
+
);
|
|
12806
|
+
}
|
|
12807
|
+
}
|
|
12808
|
+
async setCallbackEnabled(relationshipId, callbackEnabled) {
|
|
12809
|
+
try {
|
|
12810
|
+
const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_id, relationshipId)).run();
|
|
12811
|
+
if (result.rowsAffected === 0) {
|
|
12812
|
+
throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12813
|
+
}
|
|
12814
|
+
const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
12815
|
+
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12816
|
+
return this.rowToRelationship(row);
|
|
12817
|
+
} catch (error) {
|
|
12818
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
12819
|
+
throw new RepositoryError(
|
|
12820
|
+
`Failed to update session relationship callback state: ${error instanceof Error ? error.message : String(error)}`,
|
|
12821
|
+
error
|
|
12822
|
+
);
|
|
12823
|
+
}
|
|
12824
|
+
}
|
|
12825
|
+
async setCallbackEnabledForTargetSession(targetSessionId, callbackEnabled) {
|
|
12826
|
+
try {
|
|
12827
|
+
await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where(
|
|
12828
|
+
(0, import_drizzle_orm28.and)(
|
|
12829
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.target_session_id, targetSessionId),
|
|
12830
|
+
(0, import_drizzle_orm28.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
12831
|
+
)
|
|
12832
|
+
).run();
|
|
12833
|
+
} catch (error) {
|
|
12834
|
+
throw new RepositoryError(
|
|
12835
|
+
`Failed to update target session relationship callback state: ${error instanceof Error ? error.message : String(error)}`,
|
|
12836
|
+
error
|
|
12837
|
+
);
|
|
12838
|
+
}
|
|
12839
|
+
}
|
|
12840
|
+
};
|
|
12841
|
+
|
|
12464
12842
|
// src/db/repositories/tasks.ts
|
|
12465
12843
|
init_cjs_shims();
|
|
12466
12844
|
init_types2();
|
|
12467
|
-
var
|
|
12845
|
+
var import_drizzle_orm29 = require("drizzle-orm");
|
|
12468
12846
|
init_ids();
|
|
12469
12847
|
init_database_wrapper();
|
|
12470
12848
|
init_schema();
|
|
@@ -12552,7 +12930,7 @@ var TaskRepository = class {
|
|
|
12552
12930
|
*/
|
|
12553
12931
|
async resolveId(id) {
|
|
12554
12932
|
return resolveByShortIdPrefix(id, "Task", async (pattern) => {
|
|
12555
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
12933
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.like)(tasks3.task_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
12556
12934
|
return rows.map((r) => r.task_id);
|
|
12557
12935
|
});
|
|
12558
12936
|
}
|
|
@@ -12563,7 +12941,7 @@ var TaskRepository = class {
|
|
|
12563
12941
|
try {
|
|
12564
12942
|
const insertData = this.taskToInsert(data);
|
|
12565
12943
|
await insert(this.db, tasks3).values(insertData).run();
|
|
12566
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
12944
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
12567
12945
|
if (!row) {
|
|
12568
12946
|
throw new RepositoryError("Failed to retrieve created task");
|
|
12569
12947
|
}
|
|
@@ -12587,7 +12965,7 @@ var TaskRepository = class {
|
|
|
12587
12965
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
12588
12966
|
await insert(this.db, tasks3).values(inserts).run();
|
|
12589
12967
|
const taskIds = inserts.map((t3) => t3.task_id);
|
|
12590
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
12968
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.inArray)(tasks3.task_id, taskIds)).all();
|
|
12591
12969
|
const rowsById = new Map(rows.map((r) => [r.task_id, r]));
|
|
12592
12970
|
return taskIds.map((id) => this.rowToTask(rowsById.get(id)));
|
|
12593
12971
|
} catch (error) {
|
|
@@ -12603,7 +12981,7 @@ var TaskRepository = class {
|
|
|
12603
12981
|
async findById(id) {
|
|
12604
12982
|
try {
|
|
12605
12983
|
const fullId = await this.resolveId(id);
|
|
12606
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
12984
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.task_id, fullId)).one();
|
|
12607
12985
|
return row ? this.rowToTask(row) : null;
|
|
12608
12986
|
} catch (error) {
|
|
12609
12987
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -12633,7 +13011,7 @@ var TaskRepository = class {
|
|
|
12633
13011
|
*/
|
|
12634
13012
|
async findBySession(sessionId) {
|
|
12635
13013
|
try {
|
|
12636
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
13014
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
|
|
12637
13015
|
return rows.map((row) => this.rowToTask(row));
|
|
12638
13016
|
} catch (error) {
|
|
12639
13017
|
throw new RepositoryError(
|
|
@@ -12647,7 +13025,7 @@ var TaskRepository = class {
|
|
|
12647
13025
|
*/
|
|
12648
13026
|
async findRunning() {
|
|
12649
13027
|
try {
|
|
12650
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
13028
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.status, TaskStatus.RUNNING)).all();
|
|
12651
13029
|
return rows.map((row) => this.rowToTask(row));
|
|
12652
13030
|
} catch (error) {
|
|
12653
13031
|
throw new RepositoryError(
|
|
@@ -12668,7 +13046,7 @@ var TaskRepository = class {
|
|
|
12668
13046
|
async findOrphaned() {
|
|
12669
13047
|
try {
|
|
12670
13048
|
const rows = await select(this.db).from(tasks3).where(
|
|
12671
|
-
|
|
13049
|
+
import_drizzle_orm29.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input')`
|
|
12672
13050
|
).all();
|
|
12673
13051
|
return rows.map((row) => this.rowToTask(row));
|
|
12674
13052
|
} catch (error) {
|
|
@@ -12688,7 +13066,7 @@ var TaskRepository = class {
|
|
|
12688
13066
|
async findActiveWithExecutorHeartbeat() {
|
|
12689
13067
|
try {
|
|
12690
13068
|
const rows = await select(this.db).from(tasks3).where(
|
|
12691
|
-
|
|
13069
|
+
import_drizzle_orm29.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input') AND ${tasks3.last_executor_heartbeat_at} IS NOT NULL`
|
|
12692
13070
|
).all();
|
|
12693
13071
|
return rows.map((row) => this.rowToTask(row));
|
|
12694
13072
|
} catch (error) {
|
|
@@ -12703,7 +13081,7 @@ var TaskRepository = class {
|
|
|
12703
13081
|
*/
|
|
12704
13082
|
async findByStatus(status) {
|
|
12705
13083
|
try {
|
|
12706
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
13084
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.status, status)).all();
|
|
12707
13085
|
return rows.map((row) => this.rowToTask(row));
|
|
12708
13086
|
} catch (error) {
|
|
12709
13087
|
throw new RepositoryError(
|
|
@@ -12725,8 +13103,8 @@ var TaskRepository = class {
|
|
|
12725
13103
|
`\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
|
|
12726
13104
|
);
|
|
12727
13105
|
const result = await this.db.transaction(async (tx) => {
|
|
12728
|
-
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0,
|
|
12729
|
-
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
13106
|
+
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0, import_drizzle_orm29.eq)(tasks3.task_id, fullId));
|
|
13107
|
+
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.task_id, fullId)).one();
|
|
12730
13108
|
if (!currentRow) {
|
|
12731
13109
|
throw new EntityNotFoundError("Task", id);
|
|
12732
13110
|
}
|
|
@@ -12740,7 +13118,7 @@ var TaskRepository = class {
|
|
|
12740
13118
|
last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
|
|
12741
13119
|
session_md5: insertData.session_md5,
|
|
12742
13120
|
data: insertData.data
|
|
12743
|
-
}).where((0,
|
|
13121
|
+
}).where((0, import_drizzle_orm29.eq)(tasks3.task_id, fullId)).run();
|
|
12744
13122
|
return merged;
|
|
12745
13123
|
});
|
|
12746
13124
|
return result;
|
|
@@ -12759,7 +13137,7 @@ var TaskRepository = class {
|
|
|
12759
13137
|
async delete(id) {
|
|
12760
13138
|
try {
|
|
12761
13139
|
const fullId = await this.resolveId(id);
|
|
12762
|
-
const result = await deleteFrom(this.db, tasks3).where((0,
|
|
13140
|
+
const result = await deleteFrom(this.db, tasks3).where((0, import_drizzle_orm29.eq)(tasks3.task_id, fullId)).run();
|
|
12763
13141
|
if (result.rowsAffected === 0) {
|
|
12764
13142
|
throw new EntityNotFoundError("Task", id);
|
|
12765
13143
|
}
|
|
@@ -12813,15 +13191,15 @@ var TaskRepository = class {
|
|
|
12813
13191
|
}
|
|
12814
13192
|
return this.db.transaction(async (tx) => {
|
|
12815
13193
|
const positionRow = await select(txAsDb(tx), {
|
|
12816
|
-
maxPos:
|
|
12817
|
-
}).from(tasks3).where(
|
|
13194
|
+
maxPos: import_drizzle_orm29.sql`max(${tasks3.queue_position})`
|
|
13195
|
+
}).from(tasks3).where(import_drizzle_orm29.sql`${tasks3.session_id} = ${input.session_id} AND ${tasks3.status} = 'queued'`).one();
|
|
12818
13196
|
const nextPosition = (positionRow?.maxPos ?? 0) + 1;
|
|
12819
13197
|
const insertData = this.taskToInsert({
|
|
12820
13198
|
...taskBase,
|
|
12821
13199
|
queue_position: nextPosition
|
|
12822
13200
|
});
|
|
12823
13201
|
await insert(txAsDb(tx), tasks3).values(insertData).run();
|
|
12824
|
-
const row = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
13202
|
+
const row = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
12825
13203
|
if (!row) {
|
|
12826
13204
|
throw new RepositoryError("Failed to retrieve created queued task");
|
|
12827
13205
|
}
|
|
@@ -12833,7 +13211,7 @@ var TaskRepository = class {
|
|
|
12833
13211
|
*/
|
|
12834
13212
|
async findQueued(sessionId) {
|
|
12835
13213
|
try {
|
|
12836
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
13214
|
+
const rows = await select(this.db).from(tasks3).where(import_drizzle_orm29.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).all();
|
|
12837
13215
|
return rows.map((row) => this.rowToTask(row));
|
|
12838
13216
|
} catch (error) {
|
|
12839
13217
|
throw new RepositoryError(
|
|
@@ -12848,7 +13226,7 @@ var TaskRepository = class {
|
|
|
12848
13226
|
*/
|
|
12849
13227
|
async getNextQueued(sessionId) {
|
|
12850
13228
|
try {
|
|
12851
|
-
const row = await select(this.db).from(tasks3).where(
|
|
13229
|
+
const row = await select(this.db).from(tasks3).where(import_drizzle_orm29.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).limit(1).one();
|
|
12852
13230
|
return row ? this.rowToTask(row) : null;
|
|
12853
13231
|
} catch (error) {
|
|
12854
13232
|
throw new RepositoryError(
|
|
@@ -12862,7 +13240,7 @@ var TaskRepository = class {
|
|
|
12862
13240
|
*/
|
|
12863
13241
|
async countBySession(sessionId) {
|
|
12864
13242
|
try {
|
|
12865
|
-
const result = await select(this.db, { count:
|
|
13243
|
+
const result = await select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(tasks3).where((0, import_drizzle_orm29.eq)(tasks3.session_id, sessionId)).one();
|
|
12866
13244
|
return result?.count ?? 0;
|
|
12867
13245
|
} catch (error) {
|
|
12868
13246
|
throw new RepositoryError(
|
|
@@ -12876,7 +13254,7 @@ var TaskRepository = class {
|
|
|
12876
13254
|
// src/db/repositories/thread-session-map.ts
|
|
12877
13255
|
init_cjs_shims();
|
|
12878
13256
|
init_types2();
|
|
12879
|
-
var
|
|
13257
|
+
var import_drizzle_orm30 = require("drizzle-orm");
|
|
12880
13258
|
init_ids();
|
|
12881
13259
|
init_database_wrapper();
|
|
12882
13260
|
init_schema();
|
|
@@ -12926,7 +13304,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12926
13304
|
return id;
|
|
12927
13305
|
}
|
|
12928
13306
|
const pattern = prefixToLikePattern(id);
|
|
12929
|
-
const results = await select(this.db).from(threadSessionMap3).where((0,
|
|
13307
|
+
const results = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.like)(threadSessionMap3.id, pattern)).all();
|
|
12930
13308
|
if (results.length === 0) {
|
|
12931
13309
|
throw new EntityNotFoundError("ThreadSessionMap", id);
|
|
12932
13310
|
}
|
|
@@ -12949,7 +13327,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12949
13327
|
id: data.id ?? generateId()
|
|
12950
13328
|
});
|
|
12951
13329
|
await insert(this.db, threadSessionMap3).values(insertData).run();
|
|
12952
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
13330
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, insertData.id)).one();
|
|
12953
13331
|
if (!row) {
|
|
12954
13332
|
throw new RepositoryError("Failed to retrieve created thread-session mapping");
|
|
12955
13333
|
}
|
|
@@ -12968,7 +13346,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12968
13346
|
async findById(id) {
|
|
12969
13347
|
try {
|
|
12970
13348
|
const fullId = await this.resolveId(id);
|
|
12971
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
13349
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, fullId)).one();
|
|
12972
13350
|
return row ? this.rowToMapping(row) : null;
|
|
12973
13351
|
} catch (error) {
|
|
12974
13352
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -13009,7 +13387,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13009
13387
|
status: insertData.status,
|
|
13010
13388
|
last_message_at: insertData.last_message_at,
|
|
13011
13389
|
metadata: insertData.metadata
|
|
13012
|
-
}).where((0,
|
|
13390
|
+
}).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, fullId)).run();
|
|
13013
13391
|
const updated = await this.findById(fullId);
|
|
13014
13392
|
if (!updated) {
|
|
13015
13393
|
throw new RepositoryError("Failed to retrieve updated thread-session mapping");
|
|
@@ -13030,7 +13408,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13030
13408
|
async delete(id) {
|
|
13031
13409
|
try {
|
|
13032
13410
|
const fullId = await this.resolveId(id);
|
|
13033
|
-
const result = await deleteFrom(this.db, threadSessionMap3).where((0,
|
|
13411
|
+
const result = await deleteFrom(this.db, threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, fullId)).run();
|
|
13034
13412
|
if (result.rowsAffected === 0) {
|
|
13035
13413
|
throw new EntityNotFoundError("ThreadSessionMap", id);
|
|
13036
13414
|
}
|
|
@@ -13048,7 +13426,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13048
13426
|
async findByChannelAndThread(channelId, threadId) {
|
|
13049
13427
|
try {
|
|
13050
13428
|
const row = await select(this.db).from(threadSessionMap3).where(
|
|
13051
|
-
(0,
|
|
13429
|
+
(0, import_drizzle_orm30.and)((0, import_drizzle_orm30.eq)(threadSessionMap3.channel_id, channelId), (0, import_drizzle_orm30.eq)(threadSessionMap3.thread_id, threadId))
|
|
13052
13430
|
).one();
|
|
13053
13431
|
return row ? this.rowToMapping(row) : null;
|
|
13054
13432
|
} catch (error) {
|
|
@@ -13065,7 +13443,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13065
13443
|
*/
|
|
13066
13444
|
async findByThread(threadId) {
|
|
13067
13445
|
try {
|
|
13068
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
13446
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.thread_id, threadId)).one();
|
|
13069
13447
|
return row ? this.rowToMapping(row) : null;
|
|
13070
13448
|
} catch (error) {
|
|
13071
13449
|
throw new RepositoryError(
|
|
@@ -13079,7 +13457,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13079
13457
|
*/
|
|
13080
13458
|
async findBySession(sessionId) {
|
|
13081
13459
|
try {
|
|
13082
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
13460
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.session_id, sessionId)).one();
|
|
13083
13461
|
return row ? this.rowToMapping(row) : null;
|
|
13084
13462
|
} catch (error) {
|
|
13085
13463
|
throw new RepositoryError(
|
|
@@ -13093,11 +13471,11 @@ var ThreadSessionMapRepository = class {
|
|
|
13093
13471
|
*/
|
|
13094
13472
|
async findByChannel(channelId, status) {
|
|
13095
13473
|
try {
|
|
13096
|
-
const conditions = [(0,
|
|
13474
|
+
const conditions = [(0, import_drizzle_orm30.eq)(threadSessionMap3.channel_id, channelId)];
|
|
13097
13475
|
if (status) {
|
|
13098
|
-
conditions.push((0,
|
|
13476
|
+
conditions.push((0, import_drizzle_orm30.eq)(threadSessionMap3.status, status));
|
|
13099
13477
|
}
|
|
13100
|
-
const rows = await select(this.db).from(threadSessionMap3).where((0,
|
|
13478
|
+
const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.and)(...conditions)).all();
|
|
13101
13479
|
return rows.map((row) => this.rowToMapping(row));
|
|
13102
13480
|
} catch (error) {
|
|
13103
13481
|
throw new RepositoryError(
|
|
@@ -13113,7 +13491,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13113
13491
|
try {
|
|
13114
13492
|
await update(this.db, threadSessionMap3).set({
|
|
13115
13493
|
last_message_at: /* @__PURE__ */ new Date()
|
|
13116
|
-
}).where((0,
|
|
13494
|
+
}).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, id)).run();
|
|
13117
13495
|
} catch (error) {
|
|
13118
13496
|
throw new RepositoryError(
|
|
13119
13497
|
`Failed to update last message timestamp: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -13126,7 +13504,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13126
13504
|
*/
|
|
13127
13505
|
async updateMetadata(id, metadata) {
|
|
13128
13506
|
try {
|
|
13129
|
-
await update(this.db, threadSessionMap3).set({ metadata }).where((0,
|
|
13507
|
+
await update(this.db, threadSessionMap3).set({ metadata }).where((0, import_drizzle_orm30.eq)(threadSessionMap3.id, id)).run();
|
|
13130
13508
|
} catch (error) {
|
|
13131
13509
|
throw new RepositoryError(
|
|
13132
13510
|
`Failed to update metadata: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -13141,7 +13519,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13141
13519
|
try {
|
|
13142
13520
|
const cutoff = new Date(Date.now() - daysInactive * 24 * 60 * 60 * 1e3);
|
|
13143
13521
|
const rows = await select(this.db).from(threadSessionMap3).where(
|
|
13144
|
-
(0,
|
|
13522
|
+
(0, import_drizzle_orm30.and)((0, import_drizzle_orm30.eq)(threadSessionMap3.status, "active"), (0, import_drizzle_orm30.lt)(threadSessionMap3.last_message_at, cutoff))
|
|
13145
13523
|
).all();
|
|
13146
13524
|
return rows.map((row) => this.rowToMapping(row));
|
|
13147
13525
|
} catch (error) {
|
|
@@ -13156,7 +13534,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13156
13534
|
*/
|
|
13157
13535
|
async findByBranch(branchId) {
|
|
13158
13536
|
try {
|
|
13159
|
-
const rows = await select(this.db).from(threadSessionMap3).where((0,
|
|
13537
|
+
const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm30.eq)(threadSessionMap3.branch_id, branchId)).all();
|
|
13160
13538
|
return rows.map((row) => this.rowToMapping(row));
|
|
13161
13539
|
} catch (error) {
|
|
13162
13540
|
throw new RepositoryError(
|
|
@@ -13171,7 +13549,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13171
13549
|
init_cjs_shims();
|
|
13172
13550
|
var import_node_crypto5 = require("crypto");
|
|
13173
13551
|
var import_bcryptjs2 = __toESM(require("bcryptjs"), 1);
|
|
13174
|
-
var
|
|
13552
|
+
var import_drizzle_orm31 = require("drizzle-orm");
|
|
13175
13553
|
init_ids();
|
|
13176
13554
|
init_database_wrapper();
|
|
13177
13555
|
init_schema();
|
|
@@ -13211,7 +13589,7 @@ var UserApiKeysRepository = class {
|
|
|
13211
13589
|
}
|
|
13212
13590
|
/** List all API keys for a user (never returns hashes) */
|
|
13213
13591
|
async listByUser(userId) {
|
|
13214
|
-
const rows = await select(this.db).from(userApiKeys3).where((0,
|
|
13592
|
+
const rows = await select(this.db).from(userApiKeys3).where((0, import_drizzle_orm31.eq)(userApiKeys3.user_id, userId)).all();
|
|
13215
13593
|
return rows.map((r) => ({
|
|
13216
13594
|
id: r.id,
|
|
13217
13595
|
name: r.name,
|
|
@@ -13222,7 +13600,7 @@ var UserApiKeysRepository = class {
|
|
|
13222
13600
|
}
|
|
13223
13601
|
/** Find a key by prefix (for auth lookup). Returns rows with hash for verification. */
|
|
13224
13602
|
async findByPrefix(prefix) {
|
|
13225
|
-
return select(this.db).from(userApiKeys3).where((0,
|
|
13603
|
+
return select(this.db).from(userApiKeys3).where((0, import_drizzle_orm31.eq)(userApiKeys3.prefix, prefix)).all();
|
|
13226
13604
|
}
|
|
13227
13605
|
/** Verify a raw API key against stored hashes. Returns the matching row or null. */
|
|
13228
13606
|
async verifyKey(rawKey) {
|
|
@@ -13237,25 +13615,25 @@ var UserApiKeysRepository = class {
|
|
|
13237
13615
|
}
|
|
13238
13616
|
/** Update last_used_at timestamp */
|
|
13239
13617
|
async updateLastUsed(id) {
|
|
13240
|
-
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0,
|
|
13618
|
+
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm31.eq)(userApiKeys3.id, id)).run();
|
|
13241
13619
|
}
|
|
13242
13620
|
/** Update key name */
|
|
13243
13621
|
async updateName(id, userId, name) {
|
|
13244
|
-
await update(this.db, userApiKeys3).set({ name }).where((0,
|
|
13622
|
+
await update(this.db, userApiKeys3).set({ name }).where((0, import_drizzle_orm31.and)((0, import_drizzle_orm31.eq)(userApiKeys3.id, id), (0, import_drizzle_orm31.eq)(userApiKeys3.user_id, userId))).run();
|
|
13245
13623
|
}
|
|
13246
13624
|
/** Delete a key */
|
|
13247
13625
|
async delete(id, userId) {
|
|
13248
|
-
await deleteFrom(this.db, userApiKeys3).where((0,
|
|
13626
|
+
await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm31.and)((0, import_drizzle_orm31.eq)(userApiKeys3.id, id), (0, import_drizzle_orm31.eq)(userApiKeys3.user_id, userId))).run();
|
|
13249
13627
|
}
|
|
13250
13628
|
/** Delete all keys for a user */
|
|
13251
13629
|
async deleteAllForUser(userId) {
|
|
13252
|
-
await deleteFrom(this.db, userApiKeys3).where((0,
|
|
13630
|
+
await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm31.eq)(userApiKeys3.user_id, userId)).run();
|
|
13253
13631
|
}
|
|
13254
13632
|
};
|
|
13255
13633
|
|
|
13256
13634
|
// src/db/repositories/user-mcp-oauth-tokens.ts
|
|
13257
13635
|
init_cjs_shims();
|
|
13258
|
-
var
|
|
13636
|
+
var import_drizzle_orm32 = require("drizzle-orm");
|
|
13259
13637
|
init_database_wrapper();
|
|
13260
13638
|
init_schema();
|
|
13261
13639
|
function rowToToken(row) {
|
|
@@ -13272,9 +13650,9 @@ function rowToToken(row) {
|
|
|
13272
13650
|
};
|
|
13273
13651
|
}
|
|
13274
13652
|
function matchKey(userId, serverId) {
|
|
13275
|
-
return (0,
|
|
13276
|
-
userId === null ? (0,
|
|
13277
|
-
(0,
|
|
13653
|
+
return (0, import_drizzle_orm32.and)(
|
|
13654
|
+
userId === null ? (0, import_drizzle_orm32.isNull)(userMcpOauthTokens3.user_id) : (0, import_drizzle_orm32.eq)(userMcpOauthTokens3.user_id, userId),
|
|
13655
|
+
(0, import_drizzle_orm32.eq)(userMcpOauthTokens3.mcp_server_id, serverId)
|
|
13278
13656
|
);
|
|
13279
13657
|
}
|
|
13280
13658
|
var UserMCPOAuthTokenRepository = class {
|
|
@@ -13391,7 +13769,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13391
13769
|
}
|
|
13392
13770
|
async deleteAllForUser(userId) {
|
|
13393
13771
|
try {
|
|
13394
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0,
|
|
13772
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm32.eq)(userMcpOauthTokens3.user_id, userId)).run();
|
|
13395
13773
|
return result.rowsAffected;
|
|
13396
13774
|
} catch (error) {
|
|
13397
13775
|
throw new RepositoryError(
|
|
@@ -13402,7 +13780,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13402
13780
|
}
|
|
13403
13781
|
async deleteAllForServer(serverId) {
|
|
13404
13782
|
try {
|
|
13405
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0,
|
|
13783
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm32.eq)(userMcpOauthTokens3.mcp_server_id, serverId)).run();
|
|
13406
13784
|
return result.rowsAffected;
|
|
13407
13785
|
} catch (error) {
|
|
13408
13786
|
throw new RepositoryError(
|
|
@@ -13413,7 +13791,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13413
13791
|
}
|
|
13414
13792
|
async listForUser(userId) {
|
|
13415
13793
|
try {
|
|
13416
|
-
const rows = await select(this.db).from(userMcpOauthTokens3).where((0,
|
|
13794
|
+
const rows = await select(this.db).from(userMcpOauthTokens3).where((0, import_drizzle_orm32.eq)(userMcpOauthTokens3.user_id, userId)).all();
|
|
13417
13795
|
return rows.map(rowToToken);
|
|
13418
13796
|
} catch (error) {
|
|
13419
13797
|
throw new RepositoryError(
|
|
@@ -13431,7 +13809,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13431
13809
|
// src/db/repositories/users.ts
|
|
13432
13810
|
init_cjs_shims();
|
|
13433
13811
|
init_types2();
|
|
13434
|
-
var
|
|
13812
|
+
var import_drizzle_orm33 = require("drizzle-orm");
|
|
13435
13813
|
|
|
13436
13814
|
// src/config/env-vars.ts
|
|
13437
13815
|
init_cjs_shims();
|
|
@@ -13553,7 +13931,7 @@ var UsersRepository = class {
|
|
|
13553
13931
|
*/
|
|
13554
13932
|
async resolveId(id) {
|
|
13555
13933
|
return resolveByShortIdPrefix(id, "User", async (pattern) => {
|
|
13556
|
-
const rows = await select(this.db).from(users3).where((0,
|
|
13934
|
+
const rows = await select(this.db).from(users3).where((0, import_drizzle_orm33.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
13557
13935
|
return rows.map((r) => r.user_id);
|
|
13558
13936
|
});
|
|
13559
13937
|
}
|
|
@@ -13561,7 +13939,7 @@ var UsersRepository = class {
|
|
|
13561
13939
|
* Check if unix_username is already taken by another user
|
|
13562
13940
|
*/
|
|
13563
13941
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
13564
|
-
const result = await select(this.db).from(users3).where((0,
|
|
13942
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.unix_username, unixUsername)).one();
|
|
13565
13943
|
if (!result) {
|
|
13566
13944
|
return false;
|
|
13567
13945
|
}
|
|
@@ -13584,7 +13962,7 @@ var UsersRepository = class {
|
|
|
13584
13962
|
}
|
|
13585
13963
|
const insertData = this.userToInsert(data);
|
|
13586
13964
|
await insert(this.db, users3).values(insertData).run();
|
|
13587
|
-
const row = await select(this.db).from(users3).where((0,
|
|
13965
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, insertData.user_id)).one();
|
|
13588
13966
|
if (!row) {
|
|
13589
13967
|
throw new RepositoryError("Failed to retrieve created user");
|
|
13590
13968
|
}
|
|
@@ -13596,7 +13974,7 @@ var UsersRepository = class {
|
|
|
13596
13974
|
async findById(id) {
|
|
13597
13975
|
try {
|
|
13598
13976
|
const fullId = await this.resolveId(id);
|
|
13599
|
-
const result = await select(this.db).from(users3).where((0,
|
|
13977
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
13600
13978
|
if (!result) {
|
|
13601
13979
|
return null;
|
|
13602
13980
|
}
|
|
@@ -13612,12 +13990,41 @@ var UsersRepository = class {
|
|
|
13612
13990
|
* Find user by email
|
|
13613
13991
|
*/
|
|
13614
13992
|
async findByEmail(email) {
|
|
13615
|
-
const result = await select(this.db).from(users3).where((0,
|
|
13993
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.email, email)).one();
|
|
13616
13994
|
if (!result) {
|
|
13617
13995
|
return null;
|
|
13618
13996
|
}
|
|
13619
13997
|
return this.rowToUser(result);
|
|
13620
13998
|
}
|
|
13999
|
+
/**
|
|
14000
|
+
* Find user by email for external identity providers.
|
|
14001
|
+
*
|
|
14002
|
+
* Agor intentionally keeps exact/case-sensitive email lookup semantics for
|
|
14003
|
+
* auth paths because the schema historically allowed case-distinct emails.
|
|
14004
|
+
* External providers such as Slack and GitHub treat email addresses as a
|
|
14005
|
+
* canonical identity hint, so their alignment path needs a case-insensitive
|
|
14006
|
+
* match. Prefer an exact match when present; otherwise return a
|
|
14007
|
+
* case-insensitive match only when it is unambiguous.
|
|
14008
|
+
*/
|
|
14009
|
+
async findByEmailForAlignment(email) {
|
|
14010
|
+
const normalizedEmail = email.trim().toLowerCase();
|
|
14011
|
+
if (!normalizedEmail) return null;
|
|
14012
|
+
const exact = await this.findByEmail(normalizedEmail);
|
|
14013
|
+
if (exact) return exact;
|
|
14014
|
+
const results = await select(this.db).from(users3).where(import_drizzle_orm33.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
|
|
14015
|
+
if (results.length !== 1) {
|
|
14016
|
+
if (results.length > 1) {
|
|
14017
|
+
console.warn(
|
|
14018
|
+
`[users] Ambiguous case-insensitive email alignment for ${normalizedEmail}: ${results.map((row) => {
|
|
14019
|
+
const userRow = row;
|
|
14020
|
+
return `${shortId(userRow.user_id)}:${userRow.email}`;
|
|
14021
|
+
}).join(", ")}`
|
|
14022
|
+
);
|
|
14023
|
+
}
|
|
14024
|
+
return null;
|
|
14025
|
+
}
|
|
14026
|
+
return this.rowToUser(results[0]);
|
|
14027
|
+
}
|
|
13621
14028
|
/**
|
|
13622
14029
|
* Find all users
|
|
13623
14030
|
*/
|
|
@@ -13654,8 +14061,8 @@ var UsersRepository = class {
|
|
|
13654
14061
|
await update(this.db, users3).set({
|
|
13655
14062
|
...insertData,
|
|
13656
14063
|
updated_at: /* @__PURE__ */ new Date()
|
|
13657
|
-
}).where((0,
|
|
13658
|
-
const row = await select(this.db).from(users3).where((0,
|
|
14064
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
14065
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
13659
14066
|
if (!row) {
|
|
13660
14067
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
13661
14068
|
}
|
|
@@ -13666,7 +14073,7 @@ var UsersRepository = class {
|
|
|
13666
14073
|
*/
|
|
13667
14074
|
async delete(id) {
|
|
13668
14075
|
const fullId = await this.resolveId(id);
|
|
13669
|
-
await deleteFrom(this.db, users3).where((0,
|
|
14076
|
+
await deleteFrom(this.db, users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
13670
14077
|
}
|
|
13671
14078
|
/**
|
|
13672
14079
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -13674,7 +14081,7 @@ var UsersRepository = class {
|
|
|
13674
14081
|
async getRawRow(id) {
|
|
13675
14082
|
try {
|
|
13676
14083
|
const fullId = await this.resolveId(id);
|
|
13677
|
-
const result = await select(this.db).from(users3).where((0,
|
|
14084
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
13678
14085
|
return result;
|
|
13679
14086
|
} catch (error) {
|
|
13680
14087
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -13756,7 +14163,7 @@ var UsersRepository = class {
|
|
|
13756
14163
|
await update(this.db, users3).set({
|
|
13757
14164
|
data: { ...row.data, agentic_tools: next },
|
|
13758
14165
|
updated_at: /* @__PURE__ */ new Date()
|
|
13759
|
-
}).where((0,
|
|
14166
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
13760
14167
|
}
|
|
13761
14168
|
/**
|
|
13762
14169
|
* Delete a single credential field for a tool.
|
|
@@ -13782,7 +14189,7 @@ var UsersRepository = class {
|
|
|
13782
14189
|
await update(this.db, users3).set({
|
|
13783
14190
|
data: { ...row.data, agentic_tools: next },
|
|
13784
14191
|
updated_at: /* @__PURE__ */ new Date()
|
|
13785
|
-
}).where((0,
|
|
14192
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
13786
14193
|
}
|
|
13787
14194
|
};
|
|
13788
14195
|
|
|
@@ -13845,6 +14252,7 @@ var hash = import_bcryptjs3.default.hash;
|
|
|
13845
14252
|
SerializedSessionRepository,
|
|
13846
14253
|
SessionEnvSelectionRepository,
|
|
13847
14254
|
SessionMCPServerRepository,
|
|
14255
|
+
SessionRelationshipRepository,
|
|
13848
14256
|
SessionRepository,
|
|
13849
14257
|
TaskRepository,
|
|
13850
14258
|
ThreadSessionMapRepository,
|
|
@@ -13937,6 +14345,7 @@ var hash = import_bcryptjs3.default.hash;
|
|
|
13937
14345
|
serializedSessions,
|
|
13938
14346
|
sessionEnvSelections,
|
|
13939
14347
|
sessionMcpServers,
|
|
14348
|
+
sessionRelationships,
|
|
13940
14349
|
sessions,
|
|
13941
14350
|
shortId,
|
|
13942
14351
|
sql,
|