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.js
CHANGED
|
@@ -525,6 +525,9 @@ async function getBaseUrl() {
|
|
|
525
525
|
if (config.daemon?.base_url) {
|
|
526
526
|
return validateBaseUrl(config.daemon.base_url);
|
|
527
527
|
}
|
|
528
|
+
if (config.ui?.base_url) {
|
|
529
|
+
return validateBaseUrl(config.ui.base_url);
|
|
530
|
+
}
|
|
528
531
|
const defaults = getDefaultConfig();
|
|
529
532
|
const envPort = process.env.PORT ? Number.parseInt(process.env.PORT, 10) : void 0;
|
|
530
533
|
const port = envPort || config.daemon?.port || defaults.daemon?.port || DAEMON.DEFAULT_PORT;
|
|
@@ -834,7 +837,7 @@ var init_schedule = __esm({
|
|
|
834
837
|
});
|
|
835
838
|
|
|
836
839
|
// src/types/session.ts
|
|
837
|
-
var SessionStatus;
|
|
840
|
+
var SessionStatus, EXECUTING_SESSION_STATUSES;
|
|
838
841
|
var init_session = __esm({
|
|
839
842
|
"src/types/session.ts"() {
|
|
840
843
|
"use strict";
|
|
@@ -852,11 +855,17 @@ var init_session = __esm({
|
|
|
852
855
|
COMPLETED: "completed",
|
|
853
856
|
FAILED: "failed"
|
|
854
857
|
};
|
|
858
|
+
EXECUTING_SESSION_STATUSES = /* @__PURE__ */ new Set([
|
|
859
|
+
SessionStatus.RUNNING,
|
|
860
|
+
SessionStatus.STOPPING,
|
|
861
|
+
SessionStatus.AWAITING_PERMISSION,
|
|
862
|
+
SessionStatus.AWAITING_INPUT
|
|
863
|
+
]);
|
|
855
864
|
}
|
|
856
865
|
});
|
|
857
866
|
|
|
858
867
|
// src/types/task.ts
|
|
859
|
-
var TaskStatus, TERMINAL_TASK_STATUSES;
|
|
868
|
+
var TaskStatus, TERMINAL_TASK_STATUSES, EXECUTING_TASK_STATUSES;
|
|
860
869
|
var init_task = __esm({
|
|
861
870
|
"src/types/task.ts"() {
|
|
862
871
|
"use strict";
|
|
@@ -884,6 +893,12 @@ var init_task = __esm({
|
|
|
884
893
|
TaskStatus.STOPPED,
|
|
885
894
|
TaskStatus.TIMED_OUT
|
|
886
895
|
]);
|
|
896
|
+
EXECUTING_TASK_STATUSES = /* @__PURE__ */ new Set([
|
|
897
|
+
TaskStatus.RUNNING,
|
|
898
|
+
TaskStatus.STOPPING,
|
|
899
|
+
TaskStatus.AWAITING_PERMISSION,
|
|
900
|
+
TaskStatus.AWAITING_INPUT
|
|
901
|
+
]);
|
|
887
902
|
}
|
|
888
903
|
});
|
|
889
904
|
|
|
@@ -1047,6 +1062,8 @@ __export(schema_postgres_exports, {
|
|
|
1047
1062
|
serializedSessions: () => serializedSessions,
|
|
1048
1063
|
sessionEnvSelections: () => sessionEnvSelections,
|
|
1049
1064
|
sessionMcpServers: () => sessionMcpServers,
|
|
1065
|
+
sessionRelationships: () => sessionRelationships,
|
|
1066
|
+
sessionRelationshipsRelations: () => sessionRelationshipsRelations,
|
|
1050
1067
|
sessions: () => sessions,
|
|
1051
1068
|
sessionsRelations: () => sessionsRelations,
|
|
1052
1069
|
tasks: () => tasks,
|
|
@@ -1070,7 +1087,7 @@ import {
|
|
|
1070
1087
|
uniqueIndex,
|
|
1071
1088
|
varchar
|
|
1072
1089
|
} from "drizzle-orm/pg-core";
|
|
1073
|
-
var 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;
|
|
1090
|
+
var 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;
|
|
1074
1091
|
var init_schema_postgres = __esm({
|
|
1075
1092
|
"src/db/schema.postgres.ts"() {
|
|
1076
1093
|
"use strict";
|
|
@@ -1163,6 +1180,36 @@ var init_schema_postgres = __esm({
|
|
|
1163
1180
|
scheduleRunUnique: uniqueIndex("sessions_schedule_run_unique").on(table.schedule_id, table.scheduled_run_at).where(sql`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
1164
1181
|
})
|
|
1165
1182
|
);
|
|
1183
|
+
sessionRelationships = pgTable(
|
|
1184
|
+
"session_relationships",
|
|
1185
|
+
{
|
|
1186
|
+
relationship_id: varchar("relationship_id", { length: 36 }).primaryKey(),
|
|
1187
|
+
source_session_id: varchar("source_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1188
|
+
target_session_id: varchar("target_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1189
|
+
relationship_type: text("relationship_type", { enum: ["remote_create"] }).notNull(),
|
|
1190
|
+
created_by: varchar("created_by", { length: 36 }).notNull(),
|
|
1191
|
+
created_at: t.timestamp("created_at").notNull(),
|
|
1192
|
+
updated_at: t.timestamp("updated_at"),
|
|
1193
|
+
callback_enabled: t.bool("callback_enabled").notNull().default(false),
|
|
1194
|
+
callback_session_id: varchar("callback_session_id", { length: 36 }).references(
|
|
1195
|
+
() => sessions.session_id,
|
|
1196
|
+
{
|
|
1197
|
+
onDelete: "set null"
|
|
1198
|
+
}
|
|
1199
|
+
),
|
|
1200
|
+
data: t.json("data")
|
|
1201
|
+
},
|
|
1202
|
+
(table) => ({
|
|
1203
|
+
sourceIdx: index("session_relationships_source_idx").on(table.source_session_id),
|
|
1204
|
+
targetIdx: index("session_relationships_target_idx").on(table.target_session_id),
|
|
1205
|
+
callbackIdx: index("session_relationships_callback_idx").on(table.callback_session_id),
|
|
1206
|
+
sourceTargetTypeUnique: uniqueIndex("session_relationships_source_target_type_unique").on(
|
|
1207
|
+
table.source_session_id,
|
|
1208
|
+
table.target_session_id,
|
|
1209
|
+
table.relationship_type
|
|
1210
|
+
)
|
|
1211
|
+
})
|
|
1212
|
+
);
|
|
1166
1213
|
tasks = pgTable(
|
|
1167
1214
|
"tasks",
|
|
1168
1215
|
{
|
|
@@ -1699,6 +1746,12 @@ var init_schema_postgres = __esm({
|
|
|
1699
1746
|
branch_id: varchar("branch_id", { length: 36 }).references(() => branches.branch_id, {
|
|
1700
1747
|
onDelete: "set null"
|
|
1701
1748
|
}),
|
|
1749
|
+
source_session_id: varchar("source_session_id", { length: 36 }).references(
|
|
1750
|
+
() => sessions.session_id,
|
|
1751
|
+
{
|
|
1752
|
+
onDelete: "set null"
|
|
1753
|
+
}
|
|
1754
|
+
),
|
|
1702
1755
|
board_id: varchar("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
1703
1756
|
name: text("name").notNull(),
|
|
1704
1757
|
description: text("description"),
|
|
@@ -1725,6 +1778,7 @@ var init_schema_postgres = __esm({
|
|
|
1725
1778
|
},
|
|
1726
1779
|
(table) => ({
|
|
1727
1780
|
branchIdx: index("artifacts_branch_idx").on(table.branch_id),
|
|
1781
|
+
sourceSessionIdx: index("artifacts_source_session_idx").on(table.source_session_id),
|
|
1728
1782
|
boardIdx: index("artifacts_board_idx").on(table.board_id),
|
|
1729
1783
|
archivedIdx: index("artifacts_archived_idx").on(table.archived),
|
|
1730
1784
|
publicIdx: index("artifacts_public_idx").on(table.public)
|
|
@@ -1881,7 +1935,7 @@ var init_schema_postgres = __esm({
|
|
|
1881
1935
|
// Materialized for queries
|
|
1882
1936
|
name: text("name").notNull(),
|
|
1883
1937
|
channel_type: text("channel_type", {
|
|
1884
|
-
enum: ["slack", "discord", "whatsapp", "telegram", "github"]
|
|
1938
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
1885
1939
|
}).notNull(),
|
|
1886
1940
|
target_branch_id: varchar("target_branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
1887
1941
|
agor_user_id: varchar("agor_user_id", { length: 36 }).notNull(),
|
|
@@ -2265,7 +2319,7 @@ var init_schema_postgres = __esm({
|
|
|
2265
2319
|
archivedIdx: index("kb_graph_edges_archived_idx").on(table.archived)
|
|
2266
2320
|
})
|
|
2267
2321
|
);
|
|
2268
|
-
sessionsRelations = relations(sessions, ({ one }) => ({
|
|
2322
|
+
sessionsRelations = relations(sessions, ({ one, many }) => ({
|
|
2269
2323
|
branch: one(branches, {
|
|
2270
2324
|
fields: [sessions.branch_id],
|
|
2271
2325
|
references: [branches.branch_id]
|
|
@@ -2273,6 +2327,24 @@ var init_schema_postgres = __esm({
|
|
|
2273
2327
|
schedule: one(schedules, {
|
|
2274
2328
|
fields: [sessions.schedule_id],
|
|
2275
2329
|
references: [schedules.schedule_id]
|
|
2330
|
+
}),
|
|
2331
|
+
outboundRelationships: many(sessionRelationships, { relationName: "relationshipSource" }),
|
|
2332
|
+
inboundRelationships: many(sessionRelationships, { relationName: "relationshipTarget" })
|
|
2333
|
+
}));
|
|
2334
|
+
sessionRelationshipsRelations = relations(sessionRelationships, ({ one }) => ({
|
|
2335
|
+
sourceSession: one(sessions, {
|
|
2336
|
+
fields: [sessionRelationships.source_session_id],
|
|
2337
|
+
references: [sessions.session_id],
|
|
2338
|
+
relationName: "relationshipSource"
|
|
2339
|
+
}),
|
|
2340
|
+
targetSession: one(sessions, {
|
|
2341
|
+
fields: [sessionRelationships.target_session_id],
|
|
2342
|
+
references: [sessions.session_id],
|
|
2343
|
+
relationName: "relationshipTarget"
|
|
2344
|
+
}),
|
|
2345
|
+
callbackSession: one(sessions, {
|
|
2346
|
+
fields: [sessionRelationships.callback_session_id],
|
|
2347
|
+
references: [sessions.session_id]
|
|
2276
2348
|
})
|
|
2277
2349
|
}));
|
|
2278
2350
|
branchesRelations = relations(branches, ({ many }) => ({
|
|
@@ -2325,6 +2397,8 @@ __export(schema_sqlite_exports, {
|
|
|
2325
2397
|
serializedSessions: () => serializedSessions2,
|
|
2326
2398
|
sessionEnvSelections: () => sessionEnvSelections2,
|
|
2327
2399
|
sessionMcpServers: () => sessionMcpServers2,
|
|
2400
|
+
sessionRelationships: () => sessionRelationships2,
|
|
2401
|
+
sessionRelationshipsRelations: () => sessionRelationshipsRelations2,
|
|
2328
2402
|
sessions: () => sessions2,
|
|
2329
2403
|
sessionsRelations: () => sessionsRelations2,
|
|
2330
2404
|
tasks: () => tasks2,
|
|
@@ -2343,7 +2417,7 @@ import {
|
|
|
2343
2417
|
text as text2,
|
|
2344
2418
|
uniqueIndex as uniqueIndex2
|
|
2345
2419
|
} from "drizzle-orm/sqlite-core";
|
|
2346
|
-
var 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 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";
|
|
@@ -2433,6 +2507,36 @@ var init_schema_sqlite = __esm({
|
|
|
2433
2507
|
scheduleRunUnique: uniqueIndex2("sessions_schedule_run_unique").on(table.schedule_id, table.scheduled_run_at).where(sql2`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
2434
2508
|
})
|
|
2435
2509
|
);
|
|
2510
|
+
sessionRelationships2 = sqliteTable(
|
|
2511
|
+
"session_relationships",
|
|
2512
|
+
{
|
|
2513
|
+
relationship_id: text2("relationship_id", { length: 36 }).primaryKey(),
|
|
2514
|
+
source_session_id: text2("source_session_id", { length: 36 }).notNull().references(() => sessions2.session_id, { onDelete: "cascade" }),
|
|
2515
|
+
target_session_id: text2("target_session_id", { length: 36 }).notNull().references(() => sessions2.session_id, { onDelete: "cascade" }),
|
|
2516
|
+
relationship_type: text2("relationship_type", { enum: ["remote_create"] }).notNull(),
|
|
2517
|
+
created_by: text2("created_by", { length: 36 }).notNull(),
|
|
2518
|
+
created_at: t2.timestamp("created_at").notNull(),
|
|
2519
|
+
updated_at: t2.timestamp("updated_at"),
|
|
2520
|
+
callback_enabled: t2.bool("callback_enabled").notNull().default(false),
|
|
2521
|
+
callback_session_id: text2("callback_session_id", { length: 36 }).references(
|
|
2522
|
+
() => sessions2.session_id,
|
|
2523
|
+
{
|
|
2524
|
+
onDelete: "set null"
|
|
2525
|
+
}
|
|
2526
|
+
),
|
|
2527
|
+
data: t2.json("data")
|
|
2528
|
+
},
|
|
2529
|
+
(table) => ({
|
|
2530
|
+
sourceIdx: index2("session_relationships_source_idx").on(table.source_session_id),
|
|
2531
|
+
targetIdx: index2("session_relationships_target_idx").on(table.target_session_id),
|
|
2532
|
+
callbackIdx: index2("session_relationships_callback_idx").on(table.callback_session_id),
|
|
2533
|
+
sourceTargetTypeUnique: uniqueIndex2("session_relationships_source_target_type_unique").on(
|
|
2534
|
+
table.source_session_id,
|
|
2535
|
+
table.target_session_id,
|
|
2536
|
+
table.relationship_type
|
|
2537
|
+
)
|
|
2538
|
+
})
|
|
2539
|
+
);
|
|
2436
2540
|
tasks2 = sqliteTable(
|
|
2437
2541
|
"tasks",
|
|
2438
2542
|
{
|
|
@@ -2977,6 +3081,12 @@ var init_schema_sqlite = __esm({
|
|
|
2977
3081
|
branch_id: text2("branch_id", { length: 36 }).references(() => branches2.branch_id, {
|
|
2978
3082
|
onDelete: "set null"
|
|
2979
3083
|
}),
|
|
3084
|
+
source_session_id: text2("source_session_id", { length: 36 }).references(
|
|
3085
|
+
() => sessions2.session_id,
|
|
3086
|
+
{
|
|
3087
|
+
onDelete: "set null"
|
|
3088
|
+
}
|
|
3089
|
+
),
|
|
2980
3090
|
board_id: text2("board_id", { length: 36 }).notNull().references(() => boards2.board_id, { onDelete: "cascade" }),
|
|
2981
3091
|
name: text2("name").notNull(),
|
|
2982
3092
|
description: text2("description"),
|
|
@@ -3003,6 +3113,7 @@ var init_schema_sqlite = __esm({
|
|
|
3003
3113
|
},
|
|
3004
3114
|
(table) => ({
|
|
3005
3115
|
branchIdx: index2("artifacts_branch_idx").on(table.branch_id),
|
|
3116
|
+
sourceSessionIdx: index2("artifacts_source_session_idx").on(table.source_session_id),
|
|
3006
3117
|
boardIdx: index2("artifacts_board_idx").on(table.board_id),
|
|
3007
3118
|
archivedIdx: index2("artifacts_archived_idx").on(table.archived),
|
|
3008
3119
|
publicIdx: index2("artifacts_public_idx").on(table.public)
|
|
@@ -3161,7 +3272,7 @@ var init_schema_sqlite = __esm({
|
|
|
3161
3272
|
// Materialized for queries
|
|
3162
3273
|
name: text2("name").notNull(),
|
|
3163
3274
|
channel_type: text2("channel_type", {
|
|
3164
|
-
enum: ["slack", "discord", "whatsapp", "telegram", "github"]
|
|
3275
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
3165
3276
|
}).notNull(),
|
|
3166
3277
|
target_branch_id: text2("target_branch_id", { length: 36 }).notNull().references(() => branches2.branch_id, { onDelete: "cascade" }),
|
|
3167
3278
|
agor_user_id: text2("agor_user_id", { length: 36 }).notNull(),
|
|
@@ -3544,7 +3655,7 @@ var init_schema_sqlite = __esm({
|
|
|
3544
3655
|
archivedIdx: index2("kb_graph_edges_archived_idx").on(table.archived)
|
|
3545
3656
|
})
|
|
3546
3657
|
);
|
|
3547
|
-
sessionsRelations2 = relations2(sessions2, ({ one }) => ({
|
|
3658
|
+
sessionsRelations2 = relations2(sessions2, ({ one, many }) => ({
|
|
3548
3659
|
branch: one(branches2, {
|
|
3549
3660
|
fields: [sessions2.branch_id],
|
|
3550
3661
|
references: [branches2.branch_id]
|
|
@@ -3552,6 +3663,24 @@ var init_schema_sqlite = __esm({
|
|
|
3552
3663
|
schedule: one(schedules2, {
|
|
3553
3664
|
fields: [sessions2.schedule_id],
|
|
3554
3665
|
references: [schedules2.schedule_id]
|
|
3666
|
+
}),
|
|
3667
|
+
outboundRelationships: many(sessionRelationships2, { relationName: "relationshipSource" }),
|
|
3668
|
+
inboundRelationships: many(sessionRelationships2, { relationName: "relationshipTarget" })
|
|
3669
|
+
}));
|
|
3670
|
+
sessionRelationshipsRelations2 = relations2(sessionRelationships2, ({ one }) => ({
|
|
3671
|
+
sourceSession: one(sessions2, {
|
|
3672
|
+
fields: [sessionRelationships2.source_session_id],
|
|
3673
|
+
references: [sessions2.session_id],
|
|
3674
|
+
relationName: "relationshipSource"
|
|
3675
|
+
}),
|
|
3676
|
+
targetSession: one(sessions2, {
|
|
3677
|
+
fields: [sessionRelationships2.target_session_id],
|
|
3678
|
+
references: [sessions2.session_id],
|
|
3679
|
+
relationName: "relationshipTarget"
|
|
3680
|
+
}),
|
|
3681
|
+
callbackSession: one(sessions2, {
|
|
3682
|
+
fields: [sessionRelationships2.callback_session_id],
|
|
3683
|
+
references: [sessions2.session_id]
|
|
3555
3684
|
})
|
|
3556
3685
|
}));
|
|
3557
3686
|
branchesRelations2 = relations2(branches2, ({ many }) => ({
|
|
@@ -3901,6 +4030,7 @@ __export(schema_exports, {
|
|
|
3901
4030
|
serializedSessions: () => serializedSessions3,
|
|
3902
4031
|
sessionEnvSelections: () => sessionEnvSelections3,
|
|
3903
4032
|
sessionMcpServers: () => sessionMcpServers3,
|
|
4033
|
+
sessionRelationships: () => sessionRelationships3,
|
|
3904
4034
|
sessions: () => sessions3,
|
|
3905
4035
|
tasks: () => tasks3,
|
|
3906
4036
|
threadSessionMap: () => threadSessionMap3,
|
|
@@ -3908,7 +4038,7 @@ __export(schema_exports, {
|
|
|
3908
4038
|
userMcpOauthTokens: () => userMcpOauthTokens3,
|
|
3909
4039
|
users: () => users3
|
|
3910
4040
|
});
|
|
3911
|
-
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;
|
|
4041
|
+
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;
|
|
3912
4042
|
var init_schema = __esm({
|
|
3913
4043
|
"src/db/schema.ts"() {
|
|
3914
4044
|
"use strict";
|
|
@@ -3940,6 +4070,7 @@ var init_schema = __esm({
|
|
|
3940
4070
|
artifactTrustGrants3 = schema.artifactTrustGrants;
|
|
3941
4071
|
boardObjects3 = schema.boardObjects;
|
|
3942
4072
|
sessionMcpServers3 = schema.sessionMcpServers;
|
|
4073
|
+
sessionRelationships3 = schema.sessionRelationships;
|
|
3943
4074
|
sessionEnvSelections3 = schema.sessionEnvSelections;
|
|
3944
4075
|
userMcpOauthTokens3 = schema.userMcpOauthTokens;
|
|
3945
4076
|
boardComments3 = schema.boardComments;
|
|
@@ -4163,17 +4294,17 @@ var init_first_run_bootstrap = __esm({
|
|
|
4163
4294
|
init_esm_shims();
|
|
4164
4295
|
init_ids();
|
|
4165
4296
|
import {
|
|
4166
|
-
and as
|
|
4297
|
+
and as and23,
|
|
4167
4298
|
asc as asc3,
|
|
4168
4299
|
desc as desc6,
|
|
4169
|
-
eq as
|
|
4300
|
+
eq as eq31,
|
|
4170
4301
|
gt,
|
|
4171
4302
|
gte,
|
|
4172
|
-
inArray as
|
|
4303
|
+
inArray as inArray8,
|
|
4173
4304
|
like as like16,
|
|
4174
4305
|
lte as lte2,
|
|
4175
|
-
or as
|
|
4176
|
-
sql as
|
|
4306
|
+
or as or9,
|
|
4307
|
+
sql as sql15
|
|
4177
4308
|
} from "drizzle-orm";
|
|
4178
4309
|
import bcryptjs from "bcryptjs";
|
|
4179
4310
|
|
|
@@ -4301,8 +4432,8 @@ function createPostgresDatabase(config) {
|
|
|
4301
4432
|
if (config.ssl !== void 0) {
|
|
4302
4433
|
options.ssl = config.ssl;
|
|
4303
4434
|
}
|
|
4304
|
-
const
|
|
4305
|
-
return drizzlePostgres(
|
|
4435
|
+
const sql16 = postgres(config.url, options);
|
|
4436
|
+
return drizzlePostgres(sql16, { schema: schema_postgres_exports });
|
|
4306
4437
|
} catch (error) {
|
|
4307
4438
|
throw new DatabaseConnectionError(
|
|
4308
4439
|
`Failed to create PostgreSQL client: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -4993,6 +5124,7 @@ var ArtifactRepository = class {
|
|
|
4993
5124
|
return {
|
|
4994
5125
|
artifact_id: artifactId,
|
|
4995
5126
|
branch_id: row.branch_id ?? null,
|
|
5127
|
+
source_session_id: row.source_session_id ?? null,
|
|
4996
5128
|
board_id: row.board_id,
|
|
4997
5129
|
name: row.name,
|
|
4998
5130
|
description: row.description ?? void 0,
|
|
@@ -5031,6 +5163,7 @@ var ArtifactRepository = class {
|
|
|
5031
5163
|
const insertData = {
|
|
5032
5164
|
artifact_id: artifactId,
|
|
5033
5165
|
branch_id: data.branch_id ?? null,
|
|
5166
|
+
source_session_id: data.source_session_id ?? null,
|
|
5034
5167
|
board_id: data.board_id ?? "",
|
|
5035
5168
|
name: data.name ?? "Untitled Artifact",
|
|
5036
5169
|
description: data.description ?? null,
|
|
@@ -5183,6 +5316,9 @@ var ArtifactRepository = class {
|
|
|
5183
5316
|
setData.agor_grants = updates.agor_grants ?? null;
|
|
5184
5317
|
}
|
|
5185
5318
|
if (updates.public !== void 0) setData.public = updates.public;
|
|
5319
|
+
if (updates.source_session_id !== void 0) {
|
|
5320
|
+
setData.source_session_id = updates.source_session_id ?? null;
|
|
5321
|
+
}
|
|
5186
5322
|
if (updates.archived !== void 0) setData.archived = updates.archived;
|
|
5187
5323
|
if (updates.archived_at !== void 0) {
|
|
5188
5324
|
setData.archived_at = updates.archived_at ? new Date(updates.archived_at) : null;
|
|
@@ -6408,6 +6544,7 @@ var FS_ACCESS_RANK = {
|
|
|
6408
6544
|
};
|
|
6409
6545
|
var VIEW_OR_BETTER_BRANCH_PERMISSIONS = ["view", "session", "prompt", "all"];
|
|
6410
6546
|
var BRANCH_PERMISSION_SOURCES = ["board", "override"];
|
|
6547
|
+
var FS_ACCESS_BRANCH_PERMISSIONS = ["read", "write"];
|
|
6411
6548
|
var BranchRepository = class {
|
|
6412
6549
|
constructor(db) {
|
|
6413
6550
|
this.db = db;
|
|
@@ -6901,6 +7038,83 @@ var BranchRepository = class {
|
|
|
6901
7038
|
}
|
|
6902
7039
|
return Array.from(userIds);
|
|
6903
7040
|
}
|
|
7041
|
+
/**
|
|
7042
|
+
* Find users whose explicit branch or aligned-board grants should materialize
|
|
7043
|
+
* into filesystem access for the branch.
|
|
7044
|
+
*
|
|
7045
|
+
* This intentionally excludes ambient "others" access because there is no
|
|
7046
|
+
* bounded user set to expand. Board owners apply whenever the branch is
|
|
7047
|
+
* explicitly aligned to board permissions (`permission_source = 'board'`);
|
|
7048
|
+
* board group grants additionally require a shared board. Override branches
|
|
7049
|
+
* must not inherit board grants.
|
|
7050
|
+
*/
|
|
7051
|
+
async findExplicitFsAccessUserIds(branchId) {
|
|
7052
|
+
const branchRow = await select(this.db, {
|
|
7053
|
+
board_id: branches3.board_id,
|
|
7054
|
+
permission_source: branches3.permission_source
|
|
7055
|
+
}).from(branches3).where(eq11(branches3.branch_id, branchId)).one();
|
|
7056
|
+
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where(eq11(branchOwners3.branch_id, branchId)).all();
|
|
7057
|
+
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, eq11(groupMemberships3.group_id, branchGroupGrants3.group_id)).innerJoin(
|
|
7058
|
+
groups3,
|
|
7059
|
+
and8(eq11(groups3.group_id, branchGroupGrants3.group_id), eq11(groups3.archived, false))
|
|
7060
|
+
).where(
|
|
7061
|
+
and8(
|
|
7062
|
+
eq11(branchGroupGrants3.branch_id, branchId),
|
|
7063
|
+
inArray3(
|
|
7064
|
+
sql7`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
7065
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7066
|
+
)
|
|
7067
|
+
)
|
|
7068
|
+
).all();
|
|
7069
|
+
const isBoardAligned = branchRow?.permission_source === "board" && branchRow.board_id;
|
|
7070
|
+
const boardOwnerRows = isBoardAligned ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where(eq11(boardOwners3.board_id, branchRow.board_id)).all() : [];
|
|
7071
|
+
const boardGroupRows = isBoardAligned ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, eq11(groupMemberships3.group_id, boardGroupGrants3.group_id)).innerJoin(
|
|
7072
|
+
groups3,
|
|
7073
|
+
and8(eq11(groups3.group_id, boardGroupGrants3.group_id), eq11(groups3.archived, false))
|
|
7074
|
+
).innerJoin(
|
|
7075
|
+
boards3,
|
|
7076
|
+
and8(
|
|
7077
|
+
eq11(boards3.board_id, boardGroupGrants3.board_id),
|
|
7078
|
+
eq11(
|
|
7079
|
+
sql7`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`,
|
|
7080
|
+
"shared"
|
|
7081
|
+
)
|
|
7082
|
+
)
|
|
7083
|
+
).where(
|
|
7084
|
+
and8(
|
|
7085
|
+
eq11(boardGroupGrants3.board_id, branchRow.board_id),
|
|
7086
|
+
inArray3(
|
|
7087
|
+
sql7`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
7088
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7089
|
+
)
|
|
7090
|
+
)
|
|
7091
|
+
).all() : [];
|
|
7092
|
+
const userIds = /* @__PURE__ */ new Set();
|
|
7093
|
+
for (const row of ownerRows) {
|
|
7094
|
+
userIds.add(row.user_id);
|
|
7095
|
+
}
|
|
7096
|
+
for (const row of groupRows) {
|
|
7097
|
+
userIds.add(row.user_id);
|
|
7098
|
+
}
|
|
7099
|
+
for (const row of boardOwnerRows) {
|
|
7100
|
+
userIds.add(row.user_id);
|
|
7101
|
+
}
|
|
7102
|
+
for (const row of boardGroupRows) {
|
|
7103
|
+
userIds.add(row.user_id);
|
|
7104
|
+
}
|
|
7105
|
+
return Array.from(userIds);
|
|
7106
|
+
}
|
|
7107
|
+
async findBoardAlignedBranches(boardId) {
|
|
7108
|
+
const rows = await select(this.db).from(branches3).where(
|
|
7109
|
+
and8(
|
|
7110
|
+
eq11(branches3.board_id, boardId),
|
|
7111
|
+
eq11(branches3.permission_source, "board"),
|
|
7112
|
+
eq11(branches3.archived, false)
|
|
7113
|
+
)
|
|
7114
|
+
).all();
|
|
7115
|
+
const baseUrl = await getBaseUrl();
|
|
7116
|
+
return rows.map((row) => this.rowToBranch(row, baseUrl));
|
|
7117
|
+
}
|
|
6904
7118
|
/**
|
|
6905
7119
|
* Get all owners of a branch
|
|
6906
7120
|
*
|
|
@@ -8476,8 +8690,10 @@ var SENSITIVE_CONFIG_FIELDS = [
|
|
|
8476
8690
|
"signing_secret",
|
|
8477
8691
|
// Slack
|
|
8478
8692
|
"private_key",
|
|
8479
|
-
"webhook_secret"
|
|
8693
|
+
"webhook_secret",
|
|
8480
8694
|
// GitHub
|
|
8695
|
+
"app_password"
|
|
8696
|
+
// Teams (Azure Bot App Secret)
|
|
8481
8697
|
];
|
|
8482
8698
|
var REDACTED_SENTINEL = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
8483
8699
|
function encryptConfig(config) {
|
|
@@ -12325,13 +12541,173 @@ var SessionMCPServerRepository = class {
|
|
|
12325
12541
|
}
|
|
12326
12542
|
};
|
|
12327
12543
|
|
|
12544
|
+
// src/db/repositories/session-relationships.ts
|
|
12545
|
+
init_esm_shims();
|
|
12546
|
+
init_ids();
|
|
12547
|
+
init_database_wrapper();
|
|
12548
|
+
init_schema();
|
|
12549
|
+
import { and as and19, eq as eq25, inArray as inArray6, or as or8 } from "drizzle-orm";
|
|
12550
|
+
var SessionRelationshipRepository = class {
|
|
12551
|
+
constructor(db) {
|
|
12552
|
+
this.db = db;
|
|
12553
|
+
}
|
|
12554
|
+
rowToRelationship(row) {
|
|
12555
|
+
return {
|
|
12556
|
+
relationship_id: row.relationship_id,
|
|
12557
|
+
source_session_id: row.source_session_id,
|
|
12558
|
+
target_session_id: row.target_session_id,
|
|
12559
|
+
relationship_type: row.relationship_type,
|
|
12560
|
+
created_by: row.created_by,
|
|
12561
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
12562
|
+
updated_at: row.updated_at ? new Date(row.updated_at).toISOString() : null,
|
|
12563
|
+
callback_enabled: Boolean(row.callback_enabled),
|
|
12564
|
+
callback_session_id: row.callback_session_id ?? null,
|
|
12565
|
+
data: row.data ?? null
|
|
12566
|
+
};
|
|
12567
|
+
}
|
|
12568
|
+
async create(input) {
|
|
12569
|
+
try {
|
|
12570
|
+
const now = /* @__PURE__ */ new Date();
|
|
12571
|
+
const row = {
|
|
12572
|
+
relationship_id: generateId(),
|
|
12573
|
+
source_session_id: input.source_session_id,
|
|
12574
|
+
target_session_id: input.target_session_id,
|
|
12575
|
+
relationship_type: input.relationship_type,
|
|
12576
|
+
created_by: input.created_by,
|
|
12577
|
+
created_at: now,
|
|
12578
|
+
updated_at: now,
|
|
12579
|
+
callback_enabled: input.callback_enabled ?? false,
|
|
12580
|
+
callback_session_id: input.callback_session_id ?? null,
|
|
12581
|
+
data: input.data ?? null
|
|
12582
|
+
};
|
|
12583
|
+
await insert(this.db, sessionRelationships3).values(row).run();
|
|
12584
|
+
return this.rowToRelationship(row);
|
|
12585
|
+
} catch (error) {
|
|
12586
|
+
throw new RepositoryError(
|
|
12587
|
+
`Failed to create session relationship: ${error instanceof Error ? error.message : String(error)}`,
|
|
12588
|
+
error
|
|
12589
|
+
);
|
|
12590
|
+
}
|
|
12591
|
+
}
|
|
12592
|
+
async get(relationshipId) {
|
|
12593
|
+
try {
|
|
12594
|
+
const row = await select(this.db).from(sessionRelationships3).where(eq25(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
12595
|
+
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12596
|
+
return this.rowToRelationship(row);
|
|
12597
|
+
} catch (error) {
|
|
12598
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
12599
|
+
throw new RepositoryError(
|
|
12600
|
+
`Failed to get session relationship: ${error instanceof Error ? error.message : String(error)}`,
|
|
12601
|
+
error
|
|
12602
|
+
);
|
|
12603
|
+
}
|
|
12604
|
+
}
|
|
12605
|
+
async findForSession(sessionId) {
|
|
12606
|
+
try {
|
|
12607
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12608
|
+
or8(
|
|
12609
|
+
eq25(sessionRelationships3.source_session_id, sessionId),
|
|
12610
|
+
eq25(sessionRelationships3.target_session_id, sessionId)
|
|
12611
|
+
)
|
|
12612
|
+
).all();
|
|
12613
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12614
|
+
} catch (error) {
|
|
12615
|
+
throw new RepositoryError(
|
|
12616
|
+
`Failed to list session relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12617
|
+
error
|
|
12618
|
+
);
|
|
12619
|
+
}
|
|
12620
|
+
}
|
|
12621
|
+
async findForSessions(sessionIds) {
|
|
12622
|
+
if (sessionIds.length === 0) return [];
|
|
12623
|
+
try {
|
|
12624
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12625
|
+
or8(
|
|
12626
|
+
inArray6(sessionRelationships3.source_session_id, sessionIds),
|
|
12627
|
+
inArray6(sessionRelationships3.target_session_id, sessionIds)
|
|
12628
|
+
)
|
|
12629
|
+
).all();
|
|
12630
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12631
|
+
} catch (error) {
|
|
12632
|
+
throw new RepositoryError(
|
|
12633
|
+
`Failed to list session relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12634
|
+
error
|
|
12635
|
+
);
|
|
12636
|
+
}
|
|
12637
|
+
}
|
|
12638
|
+
async findRemoteChildren(sourceSessionId) {
|
|
12639
|
+
try {
|
|
12640
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12641
|
+
and19(
|
|
12642
|
+
eq25(sessionRelationships3.source_session_id, sourceSessionId),
|
|
12643
|
+
eq25(sessionRelationships3.relationship_type, "remote_create")
|
|
12644
|
+
)
|
|
12645
|
+
).all();
|
|
12646
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12647
|
+
} catch (error) {
|
|
12648
|
+
throw new RepositoryError(
|
|
12649
|
+
`Failed to list remote child relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12650
|
+
error
|
|
12651
|
+
);
|
|
12652
|
+
}
|
|
12653
|
+
}
|
|
12654
|
+
async findRemoteParents(targetSessionId) {
|
|
12655
|
+
try {
|
|
12656
|
+
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
12657
|
+
and19(
|
|
12658
|
+
eq25(sessionRelationships3.target_session_id, targetSessionId),
|
|
12659
|
+
eq25(sessionRelationships3.relationship_type, "remote_create")
|
|
12660
|
+
)
|
|
12661
|
+
).all();
|
|
12662
|
+
return rows.map((row) => this.rowToRelationship(row));
|
|
12663
|
+
} catch (error) {
|
|
12664
|
+
throw new RepositoryError(
|
|
12665
|
+
`Failed to list remote parent relationships: ${error instanceof Error ? error.message : String(error)}`,
|
|
12666
|
+
error
|
|
12667
|
+
);
|
|
12668
|
+
}
|
|
12669
|
+
}
|
|
12670
|
+
async setCallbackEnabled(relationshipId, callbackEnabled) {
|
|
12671
|
+
try {
|
|
12672
|
+
const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where(eq25(sessionRelationships3.relationship_id, relationshipId)).run();
|
|
12673
|
+
if (result.rowsAffected === 0) {
|
|
12674
|
+
throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12675
|
+
}
|
|
12676
|
+
const row = await select(this.db).from(sessionRelationships3).where(eq25(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
12677
|
+
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
12678
|
+
return this.rowToRelationship(row);
|
|
12679
|
+
} catch (error) {
|
|
12680
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
12681
|
+
throw new RepositoryError(
|
|
12682
|
+
`Failed to update session relationship callback state: ${error instanceof Error ? error.message : String(error)}`,
|
|
12683
|
+
error
|
|
12684
|
+
);
|
|
12685
|
+
}
|
|
12686
|
+
}
|
|
12687
|
+
async setCallbackEnabledForTargetSession(targetSessionId, callbackEnabled) {
|
|
12688
|
+
try {
|
|
12689
|
+
await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where(
|
|
12690
|
+
and19(
|
|
12691
|
+
eq25(sessionRelationships3.target_session_id, targetSessionId),
|
|
12692
|
+
eq25(sessionRelationships3.relationship_type, "remote_create")
|
|
12693
|
+
)
|
|
12694
|
+
).run();
|
|
12695
|
+
} catch (error) {
|
|
12696
|
+
throw new RepositoryError(
|
|
12697
|
+
`Failed to update target session relationship callback state: ${error instanceof Error ? error.message : String(error)}`,
|
|
12698
|
+
error
|
|
12699
|
+
);
|
|
12700
|
+
}
|
|
12701
|
+
}
|
|
12702
|
+
};
|
|
12703
|
+
|
|
12328
12704
|
// src/db/repositories/tasks.ts
|
|
12329
12705
|
init_esm_shims();
|
|
12330
12706
|
init_types2();
|
|
12331
12707
|
init_ids();
|
|
12332
12708
|
init_database_wrapper();
|
|
12333
12709
|
init_schema();
|
|
12334
|
-
import { eq as
|
|
12710
|
+
import { eq as eq26, inArray as inArray7, like as like13, sql as sql13 } from "drizzle-orm";
|
|
12335
12711
|
var TaskRepository = class {
|
|
12336
12712
|
constructor(db) {
|
|
12337
12713
|
this.db = db;
|
|
@@ -12427,7 +12803,7 @@ var TaskRepository = class {
|
|
|
12427
12803
|
try {
|
|
12428
12804
|
const insertData = this.taskToInsert(data);
|
|
12429
12805
|
await insert(this.db, tasks3).values(insertData).run();
|
|
12430
|
-
const row = await select(this.db).from(tasks3).where(
|
|
12806
|
+
const row = await select(this.db).from(tasks3).where(eq26(tasks3.task_id, insertData.task_id)).one();
|
|
12431
12807
|
if (!row) {
|
|
12432
12808
|
throw new RepositoryError("Failed to retrieve created task");
|
|
12433
12809
|
}
|
|
@@ -12451,7 +12827,7 @@ var TaskRepository = class {
|
|
|
12451
12827
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
12452
12828
|
await insert(this.db, tasks3).values(inserts).run();
|
|
12453
12829
|
const taskIds = inserts.map((t3) => t3.task_id);
|
|
12454
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
12830
|
+
const rows = await select(this.db).from(tasks3).where(inArray7(tasks3.task_id, taskIds)).all();
|
|
12455
12831
|
const rowsById = new Map(rows.map((r) => [r.task_id, r]));
|
|
12456
12832
|
return taskIds.map((id) => this.rowToTask(rowsById.get(id)));
|
|
12457
12833
|
} catch (error) {
|
|
@@ -12467,7 +12843,7 @@ var TaskRepository = class {
|
|
|
12467
12843
|
async findById(id) {
|
|
12468
12844
|
try {
|
|
12469
12845
|
const fullId = await this.resolveId(id);
|
|
12470
|
-
const row = await select(this.db).from(tasks3).where(
|
|
12846
|
+
const row = await select(this.db).from(tasks3).where(eq26(tasks3.task_id, fullId)).one();
|
|
12471
12847
|
return row ? this.rowToTask(row) : null;
|
|
12472
12848
|
} catch (error) {
|
|
12473
12849
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -12497,7 +12873,7 @@ var TaskRepository = class {
|
|
|
12497
12873
|
*/
|
|
12498
12874
|
async findBySession(sessionId) {
|
|
12499
12875
|
try {
|
|
12500
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
12876
|
+
const rows = await select(this.db).from(tasks3).where(eq26(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
|
|
12501
12877
|
return rows.map((row) => this.rowToTask(row));
|
|
12502
12878
|
} catch (error) {
|
|
12503
12879
|
throw new RepositoryError(
|
|
@@ -12511,7 +12887,7 @@ var TaskRepository = class {
|
|
|
12511
12887
|
*/
|
|
12512
12888
|
async findRunning() {
|
|
12513
12889
|
try {
|
|
12514
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
12890
|
+
const rows = await select(this.db).from(tasks3).where(eq26(tasks3.status, TaskStatus.RUNNING)).all();
|
|
12515
12891
|
return rows.map((row) => this.rowToTask(row));
|
|
12516
12892
|
} catch (error) {
|
|
12517
12893
|
throw new RepositoryError(
|
|
@@ -12567,7 +12943,7 @@ var TaskRepository = class {
|
|
|
12567
12943
|
*/
|
|
12568
12944
|
async findByStatus(status) {
|
|
12569
12945
|
try {
|
|
12570
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
12946
|
+
const rows = await select(this.db).from(tasks3).where(eq26(tasks3.status, status)).all();
|
|
12571
12947
|
return rows.map((row) => this.rowToTask(row));
|
|
12572
12948
|
} catch (error) {
|
|
12573
12949
|
throw new RepositoryError(
|
|
@@ -12589,8 +12965,8 @@ var TaskRepository = class {
|
|
|
12589
12965
|
`\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
|
|
12590
12966
|
);
|
|
12591
12967
|
const result = await this.db.transaction(async (tx) => {
|
|
12592
|
-
await lockRowForUpdate(txAsDb(tx), this.db, tasks3,
|
|
12593
|
-
const currentRow = await select(txAsDb(tx)).from(tasks3).where(
|
|
12968
|
+
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, eq26(tasks3.task_id, fullId));
|
|
12969
|
+
const currentRow = await select(txAsDb(tx)).from(tasks3).where(eq26(tasks3.task_id, fullId)).one();
|
|
12594
12970
|
if (!currentRow) {
|
|
12595
12971
|
throw new EntityNotFoundError("Task", id);
|
|
12596
12972
|
}
|
|
@@ -12604,7 +12980,7 @@ var TaskRepository = class {
|
|
|
12604
12980
|
last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
|
|
12605
12981
|
session_md5: insertData.session_md5,
|
|
12606
12982
|
data: insertData.data
|
|
12607
|
-
}).where(
|
|
12983
|
+
}).where(eq26(tasks3.task_id, fullId)).run();
|
|
12608
12984
|
return merged;
|
|
12609
12985
|
});
|
|
12610
12986
|
return result;
|
|
@@ -12623,7 +12999,7 @@ var TaskRepository = class {
|
|
|
12623
12999
|
async delete(id) {
|
|
12624
13000
|
try {
|
|
12625
13001
|
const fullId = await this.resolveId(id);
|
|
12626
|
-
const result = await deleteFrom(this.db, tasks3).where(
|
|
13002
|
+
const result = await deleteFrom(this.db, tasks3).where(eq26(tasks3.task_id, fullId)).run();
|
|
12627
13003
|
if (result.rowsAffected === 0) {
|
|
12628
13004
|
throw new EntityNotFoundError("Task", id);
|
|
12629
13005
|
}
|
|
@@ -12685,7 +13061,7 @@ var TaskRepository = class {
|
|
|
12685
13061
|
queue_position: nextPosition
|
|
12686
13062
|
});
|
|
12687
13063
|
await insert(txAsDb(tx), tasks3).values(insertData).run();
|
|
12688
|
-
const row = await select(txAsDb(tx)).from(tasks3).where(
|
|
13064
|
+
const row = await select(txAsDb(tx)).from(tasks3).where(eq26(tasks3.task_id, insertData.task_id)).one();
|
|
12689
13065
|
if (!row) {
|
|
12690
13066
|
throw new RepositoryError("Failed to retrieve created queued task");
|
|
12691
13067
|
}
|
|
@@ -12726,7 +13102,7 @@ var TaskRepository = class {
|
|
|
12726
13102
|
*/
|
|
12727
13103
|
async countBySession(sessionId) {
|
|
12728
13104
|
try {
|
|
12729
|
-
const result = await select(this.db, { count: sql13`count(*)` }).from(tasks3).where(
|
|
13105
|
+
const result = await select(this.db, { count: sql13`count(*)` }).from(tasks3).where(eq26(tasks3.session_id, sessionId)).one();
|
|
12730
13106
|
return result?.count ?? 0;
|
|
12731
13107
|
} catch (error) {
|
|
12732
13108
|
throw new RepositoryError(
|
|
@@ -12743,7 +13119,7 @@ init_types2();
|
|
|
12743
13119
|
init_ids();
|
|
12744
13120
|
init_database_wrapper();
|
|
12745
13121
|
init_schema();
|
|
12746
|
-
import { and as
|
|
13122
|
+
import { and as and20, eq as eq27, like as like14, lt as lt2 } from "drizzle-orm";
|
|
12747
13123
|
var ThreadSessionMapRepository = class {
|
|
12748
13124
|
constructor(db) {
|
|
12749
13125
|
this.db = db;
|
|
@@ -12813,7 +13189,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12813
13189
|
id: data.id ?? generateId()
|
|
12814
13190
|
});
|
|
12815
13191
|
await insert(this.db, threadSessionMap3).values(insertData).run();
|
|
12816
|
-
const row = await select(this.db).from(threadSessionMap3).where(
|
|
13192
|
+
const row = await select(this.db).from(threadSessionMap3).where(eq27(threadSessionMap3.id, insertData.id)).one();
|
|
12817
13193
|
if (!row) {
|
|
12818
13194
|
throw new RepositoryError("Failed to retrieve created thread-session mapping");
|
|
12819
13195
|
}
|
|
@@ -12832,7 +13208,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12832
13208
|
async findById(id) {
|
|
12833
13209
|
try {
|
|
12834
13210
|
const fullId = await this.resolveId(id);
|
|
12835
|
-
const row = await select(this.db).from(threadSessionMap3).where(
|
|
13211
|
+
const row = await select(this.db).from(threadSessionMap3).where(eq27(threadSessionMap3.id, fullId)).one();
|
|
12836
13212
|
return row ? this.rowToMapping(row) : null;
|
|
12837
13213
|
} catch (error) {
|
|
12838
13214
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -12873,7 +13249,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12873
13249
|
status: insertData.status,
|
|
12874
13250
|
last_message_at: insertData.last_message_at,
|
|
12875
13251
|
metadata: insertData.metadata
|
|
12876
|
-
}).where(
|
|
13252
|
+
}).where(eq27(threadSessionMap3.id, fullId)).run();
|
|
12877
13253
|
const updated = await this.findById(fullId);
|
|
12878
13254
|
if (!updated) {
|
|
12879
13255
|
throw new RepositoryError("Failed to retrieve updated thread-session mapping");
|
|
@@ -12894,7 +13270,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12894
13270
|
async delete(id) {
|
|
12895
13271
|
try {
|
|
12896
13272
|
const fullId = await this.resolveId(id);
|
|
12897
|
-
const result = await deleteFrom(this.db, threadSessionMap3).where(
|
|
13273
|
+
const result = await deleteFrom(this.db, threadSessionMap3).where(eq27(threadSessionMap3.id, fullId)).run();
|
|
12898
13274
|
if (result.rowsAffected === 0) {
|
|
12899
13275
|
throw new EntityNotFoundError("ThreadSessionMap", id);
|
|
12900
13276
|
}
|
|
@@ -12912,7 +13288,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12912
13288
|
async findByChannelAndThread(channelId, threadId) {
|
|
12913
13289
|
try {
|
|
12914
13290
|
const row = await select(this.db).from(threadSessionMap3).where(
|
|
12915
|
-
|
|
13291
|
+
and20(eq27(threadSessionMap3.channel_id, channelId), eq27(threadSessionMap3.thread_id, threadId))
|
|
12916
13292
|
).one();
|
|
12917
13293
|
return row ? this.rowToMapping(row) : null;
|
|
12918
13294
|
} catch (error) {
|
|
@@ -12929,7 +13305,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12929
13305
|
*/
|
|
12930
13306
|
async findByThread(threadId) {
|
|
12931
13307
|
try {
|
|
12932
|
-
const row = await select(this.db).from(threadSessionMap3).where(
|
|
13308
|
+
const row = await select(this.db).from(threadSessionMap3).where(eq27(threadSessionMap3.thread_id, threadId)).one();
|
|
12933
13309
|
return row ? this.rowToMapping(row) : null;
|
|
12934
13310
|
} catch (error) {
|
|
12935
13311
|
throw new RepositoryError(
|
|
@@ -12943,7 +13319,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12943
13319
|
*/
|
|
12944
13320
|
async findBySession(sessionId) {
|
|
12945
13321
|
try {
|
|
12946
|
-
const row = await select(this.db).from(threadSessionMap3).where(
|
|
13322
|
+
const row = await select(this.db).from(threadSessionMap3).where(eq27(threadSessionMap3.session_id, sessionId)).one();
|
|
12947
13323
|
return row ? this.rowToMapping(row) : null;
|
|
12948
13324
|
} catch (error) {
|
|
12949
13325
|
throw new RepositoryError(
|
|
@@ -12957,11 +13333,11 @@ var ThreadSessionMapRepository = class {
|
|
|
12957
13333
|
*/
|
|
12958
13334
|
async findByChannel(channelId, status) {
|
|
12959
13335
|
try {
|
|
12960
|
-
const conditions = [
|
|
13336
|
+
const conditions = [eq27(threadSessionMap3.channel_id, channelId)];
|
|
12961
13337
|
if (status) {
|
|
12962
|
-
conditions.push(
|
|
13338
|
+
conditions.push(eq27(threadSessionMap3.status, status));
|
|
12963
13339
|
}
|
|
12964
|
-
const rows = await select(this.db).from(threadSessionMap3).where(
|
|
13340
|
+
const rows = await select(this.db).from(threadSessionMap3).where(and20(...conditions)).all();
|
|
12965
13341
|
return rows.map((row) => this.rowToMapping(row));
|
|
12966
13342
|
} catch (error) {
|
|
12967
13343
|
throw new RepositoryError(
|
|
@@ -12977,7 +13353,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12977
13353
|
try {
|
|
12978
13354
|
await update(this.db, threadSessionMap3).set({
|
|
12979
13355
|
last_message_at: /* @__PURE__ */ new Date()
|
|
12980
|
-
}).where(
|
|
13356
|
+
}).where(eq27(threadSessionMap3.id, id)).run();
|
|
12981
13357
|
} catch (error) {
|
|
12982
13358
|
throw new RepositoryError(
|
|
12983
13359
|
`Failed to update last message timestamp: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -12990,7 +13366,7 @@ var ThreadSessionMapRepository = class {
|
|
|
12990
13366
|
*/
|
|
12991
13367
|
async updateMetadata(id, metadata) {
|
|
12992
13368
|
try {
|
|
12993
|
-
await update(this.db, threadSessionMap3).set({ metadata }).where(
|
|
13369
|
+
await update(this.db, threadSessionMap3).set({ metadata }).where(eq27(threadSessionMap3.id, id)).run();
|
|
12994
13370
|
} catch (error) {
|
|
12995
13371
|
throw new RepositoryError(
|
|
12996
13372
|
`Failed to update metadata: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -13005,7 +13381,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13005
13381
|
try {
|
|
13006
13382
|
const cutoff = new Date(Date.now() - daysInactive * 24 * 60 * 60 * 1e3);
|
|
13007
13383
|
const rows = await select(this.db).from(threadSessionMap3).where(
|
|
13008
|
-
|
|
13384
|
+
and20(eq27(threadSessionMap3.status, "active"), lt2(threadSessionMap3.last_message_at, cutoff))
|
|
13009
13385
|
).all();
|
|
13010
13386
|
return rows.map((row) => this.rowToMapping(row));
|
|
13011
13387
|
} catch (error) {
|
|
@@ -13020,7 +13396,7 @@ var ThreadSessionMapRepository = class {
|
|
|
13020
13396
|
*/
|
|
13021
13397
|
async findByBranch(branchId) {
|
|
13022
13398
|
try {
|
|
13023
|
-
const rows = await select(this.db).from(threadSessionMap3).where(
|
|
13399
|
+
const rows = await select(this.db).from(threadSessionMap3).where(eq27(threadSessionMap3.branch_id, branchId)).all();
|
|
13024
13400
|
return rows.map((row) => this.rowToMapping(row));
|
|
13025
13401
|
} catch (error) {
|
|
13026
13402
|
throw new RepositoryError(
|
|
@@ -13038,7 +13414,7 @@ init_database_wrapper();
|
|
|
13038
13414
|
init_schema();
|
|
13039
13415
|
import { randomBytes as randomBytes3 } from "crypto";
|
|
13040
13416
|
import bcrypt2 from "bcryptjs";
|
|
13041
|
-
import { and as
|
|
13417
|
+
import { and as and21, eq as eq28 } from "drizzle-orm";
|
|
13042
13418
|
var KEY_PREFIX = "agor_sk_";
|
|
13043
13419
|
var KEY_PREFIX_LENGTH = 12;
|
|
13044
13420
|
var KEY_RANDOM_BYTES = 32;
|
|
@@ -13075,7 +13451,7 @@ var UserApiKeysRepository = class {
|
|
|
13075
13451
|
}
|
|
13076
13452
|
/** List all API keys for a user (never returns hashes) */
|
|
13077
13453
|
async listByUser(userId) {
|
|
13078
|
-
const rows = await select(this.db).from(userApiKeys3).where(
|
|
13454
|
+
const rows = await select(this.db).from(userApiKeys3).where(eq28(userApiKeys3.user_id, userId)).all();
|
|
13079
13455
|
return rows.map((r) => ({
|
|
13080
13456
|
id: r.id,
|
|
13081
13457
|
name: r.name,
|
|
@@ -13086,7 +13462,7 @@ var UserApiKeysRepository = class {
|
|
|
13086
13462
|
}
|
|
13087
13463
|
/** Find a key by prefix (for auth lookup). Returns rows with hash for verification. */
|
|
13088
13464
|
async findByPrefix(prefix) {
|
|
13089
|
-
return select(this.db).from(userApiKeys3).where(
|
|
13465
|
+
return select(this.db).from(userApiKeys3).where(eq28(userApiKeys3.prefix, prefix)).all();
|
|
13090
13466
|
}
|
|
13091
13467
|
/** Verify a raw API key against stored hashes. Returns the matching row or null. */
|
|
13092
13468
|
async verifyKey(rawKey) {
|
|
@@ -13101,19 +13477,19 @@ var UserApiKeysRepository = class {
|
|
|
13101
13477
|
}
|
|
13102
13478
|
/** Update last_used_at timestamp */
|
|
13103
13479
|
async updateLastUsed(id) {
|
|
13104
|
-
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where(
|
|
13480
|
+
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where(eq28(userApiKeys3.id, id)).run();
|
|
13105
13481
|
}
|
|
13106
13482
|
/** Update key name */
|
|
13107
13483
|
async updateName(id, userId, name) {
|
|
13108
|
-
await update(this.db, userApiKeys3).set({ name }).where(
|
|
13484
|
+
await update(this.db, userApiKeys3).set({ name }).where(and21(eq28(userApiKeys3.id, id), eq28(userApiKeys3.user_id, userId))).run();
|
|
13109
13485
|
}
|
|
13110
13486
|
/** Delete a key */
|
|
13111
13487
|
async delete(id, userId) {
|
|
13112
|
-
await deleteFrom(this.db, userApiKeys3).where(
|
|
13488
|
+
await deleteFrom(this.db, userApiKeys3).where(and21(eq28(userApiKeys3.id, id), eq28(userApiKeys3.user_id, userId))).run();
|
|
13113
13489
|
}
|
|
13114
13490
|
/** Delete all keys for a user */
|
|
13115
13491
|
async deleteAllForUser(userId) {
|
|
13116
|
-
await deleteFrom(this.db, userApiKeys3).where(
|
|
13492
|
+
await deleteFrom(this.db, userApiKeys3).where(eq28(userApiKeys3.user_id, userId)).run();
|
|
13117
13493
|
}
|
|
13118
13494
|
};
|
|
13119
13495
|
|
|
@@ -13121,7 +13497,7 @@ var UserApiKeysRepository = class {
|
|
|
13121
13497
|
init_esm_shims();
|
|
13122
13498
|
init_database_wrapper();
|
|
13123
13499
|
init_schema();
|
|
13124
|
-
import { and as
|
|
13500
|
+
import { and as and22, eq as eq29, isNull as isNull6 } from "drizzle-orm";
|
|
13125
13501
|
function rowToToken(row) {
|
|
13126
13502
|
return {
|
|
13127
13503
|
user_id: row.user_id ?? null,
|
|
@@ -13136,9 +13512,9 @@ function rowToToken(row) {
|
|
|
13136
13512
|
};
|
|
13137
13513
|
}
|
|
13138
13514
|
function matchKey(userId, serverId) {
|
|
13139
|
-
return
|
|
13140
|
-
userId === null ? isNull6(userMcpOauthTokens3.user_id) :
|
|
13141
|
-
|
|
13515
|
+
return and22(
|
|
13516
|
+
userId === null ? isNull6(userMcpOauthTokens3.user_id) : eq29(userMcpOauthTokens3.user_id, userId),
|
|
13517
|
+
eq29(userMcpOauthTokens3.mcp_server_id, serverId)
|
|
13142
13518
|
);
|
|
13143
13519
|
}
|
|
13144
13520
|
var UserMCPOAuthTokenRepository = class {
|
|
@@ -13255,7 +13631,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13255
13631
|
}
|
|
13256
13632
|
async deleteAllForUser(userId) {
|
|
13257
13633
|
try {
|
|
13258
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where(
|
|
13634
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where(eq29(userMcpOauthTokens3.user_id, userId)).run();
|
|
13259
13635
|
return result.rowsAffected;
|
|
13260
13636
|
} catch (error) {
|
|
13261
13637
|
throw new RepositoryError(
|
|
@@ -13266,7 +13642,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13266
13642
|
}
|
|
13267
13643
|
async deleteAllForServer(serverId) {
|
|
13268
13644
|
try {
|
|
13269
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where(
|
|
13645
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where(eq29(userMcpOauthTokens3.mcp_server_id, serverId)).run();
|
|
13270
13646
|
return result.rowsAffected;
|
|
13271
13647
|
} catch (error) {
|
|
13272
13648
|
throw new RepositoryError(
|
|
@@ -13277,7 +13653,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13277
13653
|
}
|
|
13278
13654
|
async listForUser(userId) {
|
|
13279
13655
|
try {
|
|
13280
|
-
const rows = await select(this.db).from(userMcpOauthTokens3).where(
|
|
13656
|
+
const rows = await select(this.db).from(userMcpOauthTokens3).where(eq29(userMcpOauthTokens3.user_id, userId)).all();
|
|
13281
13657
|
return rows.map(rowToToken);
|
|
13282
13658
|
} catch (error) {
|
|
13283
13659
|
throw new RepositoryError(
|
|
@@ -13295,7 +13671,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
13295
13671
|
// src/db/repositories/users.ts
|
|
13296
13672
|
init_esm_shims();
|
|
13297
13673
|
init_types2();
|
|
13298
|
-
import { eq as
|
|
13674
|
+
import { eq as eq30, like as like15, sql as sql14 } from "drizzle-orm";
|
|
13299
13675
|
|
|
13300
13676
|
// src/config/env-vars.ts
|
|
13301
13677
|
init_esm_shims();
|
|
@@ -13425,7 +13801,7 @@ var UsersRepository = class {
|
|
|
13425
13801
|
* Check if unix_username is already taken by another user
|
|
13426
13802
|
*/
|
|
13427
13803
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
13428
|
-
const result = await select(this.db).from(users3).where(
|
|
13804
|
+
const result = await select(this.db).from(users3).where(eq30(users3.unix_username, unixUsername)).one();
|
|
13429
13805
|
if (!result) {
|
|
13430
13806
|
return false;
|
|
13431
13807
|
}
|
|
@@ -13448,7 +13824,7 @@ var UsersRepository = class {
|
|
|
13448
13824
|
}
|
|
13449
13825
|
const insertData = this.userToInsert(data);
|
|
13450
13826
|
await insert(this.db, users3).values(insertData).run();
|
|
13451
|
-
const row = await select(this.db).from(users3).where(
|
|
13827
|
+
const row = await select(this.db).from(users3).where(eq30(users3.user_id, insertData.user_id)).one();
|
|
13452
13828
|
if (!row) {
|
|
13453
13829
|
throw new RepositoryError("Failed to retrieve created user");
|
|
13454
13830
|
}
|
|
@@ -13460,7 +13836,7 @@ var UsersRepository = class {
|
|
|
13460
13836
|
async findById(id) {
|
|
13461
13837
|
try {
|
|
13462
13838
|
const fullId = await this.resolveId(id);
|
|
13463
|
-
const result = await select(this.db).from(users3).where(
|
|
13839
|
+
const result = await select(this.db).from(users3).where(eq30(users3.user_id, fullId)).one();
|
|
13464
13840
|
if (!result) {
|
|
13465
13841
|
return null;
|
|
13466
13842
|
}
|
|
@@ -13476,12 +13852,41 @@ var UsersRepository = class {
|
|
|
13476
13852
|
* Find user by email
|
|
13477
13853
|
*/
|
|
13478
13854
|
async findByEmail(email) {
|
|
13479
|
-
const result = await select(this.db).from(users3).where(
|
|
13855
|
+
const result = await select(this.db).from(users3).where(eq30(users3.email, email)).one();
|
|
13480
13856
|
if (!result) {
|
|
13481
13857
|
return null;
|
|
13482
13858
|
}
|
|
13483
13859
|
return this.rowToUser(result);
|
|
13484
13860
|
}
|
|
13861
|
+
/**
|
|
13862
|
+
* Find user by email for external identity providers.
|
|
13863
|
+
*
|
|
13864
|
+
* Agor intentionally keeps exact/case-sensitive email lookup semantics for
|
|
13865
|
+
* auth paths because the schema historically allowed case-distinct emails.
|
|
13866
|
+
* External providers such as Slack and GitHub treat email addresses as a
|
|
13867
|
+
* canonical identity hint, so their alignment path needs a case-insensitive
|
|
13868
|
+
* match. Prefer an exact match when present; otherwise return a
|
|
13869
|
+
* case-insensitive match only when it is unambiguous.
|
|
13870
|
+
*/
|
|
13871
|
+
async findByEmailForAlignment(email) {
|
|
13872
|
+
const normalizedEmail = email.trim().toLowerCase();
|
|
13873
|
+
if (!normalizedEmail) return null;
|
|
13874
|
+
const exact = await this.findByEmail(normalizedEmail);
|
|
13875
|
+
if (exact) return exact;
|
|
13876
|
+
const results = await select(this.db).from(users3).where(sql14`LOWER(${users3.email}) = ${normalizedEmail}`).all();
|
|
13877
|
+
if (results.length !== 1) {
|
|
13878
|
+
if (results.length > 1) {
|
|
13879
|
+
console.warn(
|
|
13880
|
+
`[users] Ambiguous case-insensitive email alignment for ${normalizedEmail}: ${results.map((row) => {
|
|
13881
|
+
const userRow = row;
|
|
13882
|
+
return `${shortId(userRow.user_id)}:${userRow.email}`;
|
|
13883
|
+
}).join(", ")}`
|
|
13884
|
+
);
|
|
13885
|
+
}
|
|
13886
|
+
return null;
|
|
13887
|
+
}
|
|
13888
|
+
return this.rowToUser(results[0]);
|
|
13889
|
+
}
|
|
13485
13890
|
/**
|
|
13486
13891
|
* Find all users
|
|
13487
13892
|
*/
|
|
@@ -13518,8 +13923,8 @@ var UsersRepository = class {
|
|
|
13518
13923
|
await update(this.db, users3).set({
|
|
13519
13924
|
...insertData,
|
|
13520
13925
|
updated_at: /* @__PURE__ */ new Date()
|
|
13521
|
-
}).where(
|
|
13522
|
-
const row = await select(this.db).from(users3).where(
|
|
13926
|
+
}).where(eq30(users3.user_id, fullId)).run();
|
|
13927
|
+
const row = await select(this.db).from(users3).where(eq30(users3.user_id, fullId)).one();
|
|
13523
13928
|
if (!row) {
|
|
13524
13929
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
13525
13930
|
}
|
|
@@ -13530,7 +13935,7 @@ var UsersRepository = class {
|
|
|
13530
13935
|
*/
|
|
13531
13936
|
async delete(id) {
|
|
13532
13937
|
const fullId = await this.resolveId(id);
|
|
13533
|
-
await deleteFrom(this.db, users3).where(
|
|
13938
|
+
await deleteFrom(this.db, users3).where(eq30(users3.user_id, fullId)).run();
|
|
13534
13939
|
}
|
|
13535
13940
|
/**
|
|
13536
13941
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -13538,7 +13943,7 @@ var UsersRepository = class {
|
|
|
13538
13943
|
async getRawRow(id) {
|
|
13539
13944
|
try {
|
|
13540
13945
|
const fullId = await this.resolveId(id);
|
|
13541
|
-
const result = await select(this.db).from(users3).where(
|
|
13946
|
+
const result = await select(this.db).from(users3).where(eq30(users3.user_id, fullId)).one();
|
|
13542
13947
|
return result;
|
|
13543
13948
|
} catch (error) {
|
|
13544
13949
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -13620,7 +14025,7 @@ var UsersRepository = class {
|
|
|
13620
14025
|
await update(this.db, users3).set({
|
|
13621
14026
|
data: { ...row.data, agentic_tools: next },
|
|
13622
14027
|
updated_at: /* @__PURE__ */ new Date()
|
|
13623
|
-
}).where(
|
|
14028
|
+
}).where(eq30(users3.user_id, fullId)).run();
|
|
13624
14029
|
}
|
|
13625
14030
|
/**
|
|
13626
14031
|
* Delete a single credential field for a tool.
|
|
@@ -13646,7 +14051,7 @@ var UsersRepository = class {
|
|
|
13646
14051
|
await update(this.db, users3).set({
|
|
13647
14052
|
data: { ...row.data, agentic_tools: next },
|
|
13648
14053
|
updated_at: /* @__PURE__ */ new Date()
|
|
13649
|
-
}).where(
|
|
14054
|
+
}).where(eq30(users3.user_id, fullId)).run();
|
|
13650
14055
|
}
|
|
13651
14056
|
};
|
|
13652
14057
|
|
|
@@ -13708,6 +14113,7 @@ export {
|
|
|
13708
14113
|
SerializedSessionRepository,
|
|
13709
14114
|
SessionEnvSelectionRepository,
|
|
13710
14115
|
SessionMCPServerRepository,
|
|
14116
|
+
SessionRelationshipRepository,
|
|
13711
14117
|
SessionRepository,
|
|
13712
14118
|
TaskRepository,
|
|
13713
14119
|
ThreadSessionMapRepository,
|
|
@@ -13715,7 +14121,7 @@ export {
|
|
|
13715
14121
|
UserMCPOAuthTokenRepository,
|
|
13716
14122
|
UsersRepository,
|
|
13717
14123
|
advisoryLockKeyForUuid,
|
|
13718
|
-
|
|
14124
|
+
and23 as and,
|
|
13719
14125
|
appVariables3 as appVariables,
|
|
13720
14126
|
artifactTrustGrants3 as artifactTrustGrants,
|
|
13721
14127
|
artifacts3 as artifacts,
|
|
@@ -13744,7 +14150,7 @@ export {
|
|
|
13744
14150
|
deleteFrom,
|
|
13745
14151
|
desc6 as desc,
|
|
13746
14152
|
encryptApiKey,
|
|
13747
|
-
|
|
14153
|
+
eq31 as eq,
|
|
13748
14154
|
executeAll,
|
|
13749
14155
|
executeGet,
|
|
13750
14156
|
executeRaw,
|
|
@@ -13764,7 +14170,7 @@ export {
|
|
|
13764
14170
|
gte,
|
|
13765
14171
|
hash,
|
|
13766
14172
|
identifyUrlParam,
|
|
13767
|
-
|
|
14173
|
+
inArray8 as inArray,
|
|
13768
14174
|
initializeDatabase,
|
|
13769
14175
|
insert,
|
|
13770
14176
|
insertOne,
|
|
@@ -13788,7 +14194,7 @@ export {
|
|
|
13788
14194
|
lte2 as lte,
|
|
13789
14195
|
mcpServers3 as mcpServers,
|
|
13790
14196
|
messages3 as messages,
|
|
13791
|
-
|
|
14197
|
+
or9 as or,
|
|
13792
14198
|
reattributeLegacyAnonymousRows,
|
|
13793
14199
|
repos3 as repos,
|
|
13794
14200
|
resolveByShortIdPrefix,
|
|
@@ -13800,9 +14206,10 @@ export {
|
|
|
13800
14206
|
serializedSessions3 as serializedSessions,
|
|
13801
14207
|
sessionEnvSelections3 as sessionEnvSelections,
|
|
13802
14208
|
sessionMcpServers3 as sessionMcpServers,
|
|
14209
|
+
sessionRelationships3 as sessionRelationships,
|
|
13803
14210
|
sessions3 as sessions,
|
|
13804
14211
|
shortId,
|
|
13805
|
-
|
|
14212
|
+
sql15 as sql,
|
|
13806
14213
|
tasks3 as tasks,
|
|
13807
14214
|
threadSessionMap3 as threadSessionMap,
|
|
13808
14215
|
tryAdvisoryXactLock,
|