agor-live 0.23.1 → 0.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/claude/index.cjs +51 -27
- package/dist/core/claude/index.js +51 -27
- package/dist/core/claude-cli/index.cjs +13 -0
- package/dist/core/claude-cli/index.js +13 -0
- package/dist/core/claude-cli/pricing.d.ts.map +1 -1
- package/dist/core/client/index.cjs +17 -0
- package/dist/core/client/index.js +16 -0
- package/dist/core/db/index.cjs +618 -421
- package/dist/core/db/index.js +550 -353
- package/dist/core/db/repositories/boards.d.ts +27 -0
- package/dist/core/db/repositories/boards.d.ts.map +1 -1
- package/dist/core/db/repositories/branches.d.ts +11 -1
- package/dist/core/db/repositories/branches.d.ts.map +1 -1
- package/dist/core/db/repositories/gateway-channels.d.ts +9 -0
- package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
- package/dist/core/db/repositories/sessions.d.ts +7 -0
- package/dist/core/db/repositories/sessions.d.ts.map +1 -1
- package/dist/core/environment/render-snapshot.cjs +6 -2
- package/dist/core/environment/render-snapshot.d.ts +2 -0
- package/dist/core/environment/render-snapshot.d.ts.map +1 -1
- package/dist/core/environment/render-snapshot.js +6 -2
- package/dist/core/environment/variable-resolver.cjs +3 -1
- package/dist/core/environment/variable-resolver.js +3 -1
- package/dist/core/index.cjs +684 -486
- package/dist/core/index.js +684 -486
- package/dist/core/lib/feathers-validation.cjs +3 -0
- package/dist/core/lib/feathers-validation.d.ts +1 -0
- package/dist/core/lib/feathers-validation.d.ts.map +1 -1
- package/dist/core/lib/feathers-validation.js +3 -0
- package/dist/core/local-actions/index.cjs +123 -56
- package/dist/core/local-actions/index.js +121 -54
- package/dist/core/mcp/index.cjs +21 -3
- package/dist/core/mcp/index.d.ts +1 -1
- package/dist/core/mcp/index.d.ts.map +1 -1
- package/dist/core/mcp/index.js +18 -3
- package/dist/core/mcp/template-patterns.d.ts +15 -0
- package/dist/core/mcp/template-patterns.d.ts.map +1 -0
- package/dist/core/mcp/template-resolver.d.ts +13 -0
- package/dist/core/mcp/template-resolver.d.ts.map +1 -1
- package/dist/core/models/browser.cjs +6 -0
- package/dist/core/models/browser.js +6 -0
- package/dist/core/models/claude.d.ts.map +1 -1
- package/dist/core/models/index.cjs +6 -0
- package/dist/core/models/index.js +6 -0
- package/dist/core/seed/index.cjs +360 -216
- package/dist/core/seed/index.js +329 -185
- package/dist/core/templates/handlebars-helpers.cjs +3 -1
- package/dist/core/templates/handlebars-helpers.d.ts +5 -0
- package/dist/core/templates/handlebars-helpers.d.ts.map +1 -1
- package/dist/core/templates/handlebars-helpers.js +3 -1
- package/dist/core/tools/mcp/auth-secrets.cjs +3460 -3
- package/dist/core/tools/mcp/auth-secrets.d.ts.map +1 -1
- package/dist/core/tools/mcp/auth-secrets.js +3477 -3
- package/dist/core/tools/mcp/http-headers.cjs +17 -1
- package/dist/core/tools/mcp/http-headers.d.ts.map +1 -1
- package/dist/core/tools/mcp/http-headers.js +15 -1
- package/dist/core/tools/mcp/oauth-refresh.cjs +67 -43
- package/dist/core/tools/mcp/oauth-refresh.js +65 -41
- package/dist/core/types/board.d.ts +12 -0
- package/dist/core/types/board.d.ts.map +1 -1
- package/dist/core/types/gateway.d.ts +14 -0
- package/dist/core/types/gateway.d.ts.map +1 -1
- package/dist/core/types/index.cjs +17 -0
- package/dist/core/types/index.js +16 -0
- package/dist/core/unix/index.cjs +67 -0
- package/dist/core/unix/index.js +67 -0
- package/dist/daemon/auth/executor-runtime-scope.d.ts.map +1 -1
- package/dist/daemon/auth/executor-runtime-scope.js +19 -5
- package/dist/daemon/auth/executor-session-token.d.ts +15 -0
- package/dist/daemon/auth/executor-session-token.d.ts.map +1 -0
- package/dist/daemon/auth/executor-session-token.js +17 -0
- package/dist/daemon/auth/issue-browser-tokens-hook.d.ts +24 -0
- package/dist/daemon/auth/issue-browser-tokens-hook.d.ts.map +1 -0
- package/dist/daemon/auth/issue-browser-tokens-hook.js +95 -0
- package/dist/daemon/auth/service-jwt-strategy.d.ts.map +1 -1
- package/dist/daemon/auth/service-jwt-strategy.js +14 -2
- package/dist/daemon/declarations.d.ts +1 -0
- package/dist/daemon/declarations.d.ts.map +1 -1
- package/dist/daemon/index.js +1365 -418
- package/dist/daemon/main.js +1365 -418
- package/dist/daemon/mcp/server.js +294 -31
- package/dist/daemon/mcp/tools/analytics.js +73 -24
- package/dist/daemon/mcp/tools/artifacts.js +73 -24
- package/dist/daemon/mcp/tools/boards.js +73 -24
- package/dist/daemon/mcp/tools/branches.js +73 -24
- package/dist/daemon/mcp/tools/card-types.js +73 -24
- package/dist/daemon/mcp/tools/cards.js +73 -24
- package/dist/daemon/mcp/tools/environment.js +73 -24
- package/dist/daemon/mcp/tools/gateway-channels.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/gateway-channels.js +190 -38
- package/dist/daemon/mcp/tools/knowledge.js +73 -24
- package/dist/daemon/mcp/tools/mcp-servers.js +73 -24
- package/dist/daemon/mcp/tools/messages.js +73 -24
- package/dist/daemon/mcp/tools/proxies.js +73 -24
- package/dist/daemon/mcp/tools/repos.js +73 -24
- package/dist/daemon/mcp/tools/schedules.js +73 -24
- package/dist/daemon/mcp/tools/search.js +73 -24
- package/dist/daemon/mcp/tools/sessions.js +73 -24
- package/dist/daemon/mcp/tools/tasks.js +73 -24
- package/dist/daemon/mcp/tools/users.js +76 -27
- package/dist/daemon/mcp/tools/widgets.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/widgets.js +257 -99
- package/dist/daemon/oauth-auth-helpers.d.ts +35 -0
- package/dist/daemon/oauth-auth-helpers.d.ts.map +1 -0
- package/dist/daemon/oauth-auth-helpers.js +14 -0
- package/dist/daemon/register-hooks.d.ts +1 -0
- package/dist/daemon/register-hooks.d.ts.map +1 -1
- package/dist/daemon/register-hooks.js +304 -53
- package/dist/daemon/register-routes.d.ts.map +1 -1
- package/dist/daemon/register-routes.js +738 -288
- package/dist/daemon/register-services.d.ts.map +1 -1
- package/dist/daemon/register-services.js +386 -155
- package/dist/daemon/services/boards.d.ts +5 -0
- package/dist/daemon/services/boards.d.ts.map +1 -1
- package/dist/daemon/services/boards.js +7 -0
- package/dist/daemon/services/branches.d.ts.map +1 -1
- package/dist/daemon/services/branches.js +31 -2
- package/dist/daemon/services/claude-models.d.ts.map +1 -1
- package/dist/daemon/services/claude-models.js +4 -1
- package/dist/daemon/services/gateway.d.ts +15 -0
- package/dist/daemon/services/gateway.d.ts.map +1 -1
- package/dist/daemon/services/gateway.js +34 -0
- package/dist/daemon/services/health-monitor.d.ts.map +1 -1
- package/dist/daemon/services/health-monitor.js +10 -7
- package/dist/daemon/services/session-streams.d.ts +29 -0
- package/dist/daemon/services/session-streams.d.ts.map +1 -0
- package/dist/daemon/services/session-streams.js +84 -0
- package/dist/daemon/services/session-token-service.d.ts.map +1 -1
- package/dist/daemon/services/session-token-service.js +8 -4
- package/dist/daemon/setup/index.js +43 -11
- package/dist/daemon/setup/socketio.d.ts.map +1 -1
- package/dist/daemon/setup/socketio.js +43 -11
- package/dist/daemon/startup.d.ts.map +1 -1
- package/dist/daemon/startup.js +37 -16
- package/dist/daemon/utils/authorization.js +19 -5
- package/dist/daemon/utils/emit-service-event.d.ts +56 -0
- package/dist/daemon/utils/emit-service-event.d.ts.map +1 -0
- package/dist/daemon/utils/emit-service-event.js +23 -0
- package/dist/daemon/utils/mcp-header-secrets.d.ts +3 -5
- package/dist/daemon/utils/mcp-header-secrets.d.ts.map +1 -1
- package/dist/daemon/utils/mcp-header-secrets.js +31 -2
- package/dist/daemon/utils/realtime-access-cache.d.ts +9 -0
- package/dist/daemon/utils/realtime-access-cache.d.ts.map +1 -1
- package/dist/daemon/utils/realtime-access-cache.js +24 -0
- package/dist/daemon/utils/realtime-publish.d.ts +24 -0
- package/dist/daemon/utils/realtime-publish.d.ts.map +1 -1
- package/dist/daemon/utils/realtime-publish.js +120 -2
- package/dist/daemon/utils/session-queue-tenant-scope.d.ts +24 -0
- package/dist/daemon/utils/session-queue-tenant-scope.d.ts.map +1 -0
- package/dist/daemon/utils/session-queue-tenant-scope.js +133 -0
- package/dist/daemon/widgets/gateway-token/index.d.ts +114 -0
- package/dist/daemon/widgets/gateway-token/index.d.ts.map +1 -0
- package/dist/daemon/widgets/gateway-token/index.js +14711 -0
- package/dist/daemon/widgets/index.d.ts.map +1 -1
- package/dist/daemon/widgets/index.js +190 -16
- package/dist/daemon/widgets/registry.d.ts +7 -0
- package/dist/daemon/widgets/registry.d.ts.map +1 -1
- package/dist/daemon/widgets/submissions.js +12 -9
- package/dist/executor/commands/git.d.ts.map +1 -1
- package/dist/executor/commands/git.js +2 -0
- package/dist/executor/db/feathers-repositories.d.ts +19 -1
- package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
- package/dist/executor/db/feathers-repositories.js +31 -1
- package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/claude.js +1 -1
- package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/codex.js +1 -1
- package/dist/executor/handlers/sdk/copilot.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/copilot.js +1 -1
- package/dist/executor/handlers/sdk/cursor.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/cursor.js +1 -0
- package/dist/executor/handlers/sdk/gemini.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/gemini.js +1 -1
- package/dist/executor/handlers/sdk/opencode.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/opencode.js +1 -1
- package/dist/executor/payload-types.d.ts +5 -5
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +8 -1
- package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/base/mcp-scoping.js +58 -6
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +2 -2
- package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/claude-tool.js +2 -2
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +13 -3
- package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/prompt-service.js +16 -3
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts +2 -1
- package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/claude/query-builder.js +2 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +2 -2
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.js +2 -2
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +3 -2
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +70 -6
- package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +2 -2
- package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/copilot/copilot-tool.js +2 -2
- package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts +3 -2
- package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/copilot/prompt-service.js +4 -1
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +2 -2
- package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/gemini-tool.js +2 -2
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +3 -2
- package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/gemini/prompt-service.js +4 -1
- package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts +3 -2
- package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/opencode/opencode-tool.js +4 -1
- package/dist/executor/services/feathers-client.d.ts.map +1 -1
- package/dist/executor/services/feathers-client.js +119 -20
- package/dist/ui/assets/AgorEmojiPickerInner-leeNywMc.js +1 -0
- package/dist/ui/assets/App-Dpl4Cc0U.js +4 -0
- package/dist/ui/assets/App-Dpl4Cc0U.js.gz +0 -0
- package/dist/ui/assets/AppNode-wN3UZlFK.js +1 -0
- package/dist/ui/assets/AppNode-wN3UZlFK.js.gz +0 -0
- package/dist/ui/assets/{ArtifactConsentModal-oMMzRn8L.js → ArtifactConsentModal-DjzXcP_L.js} +1 -1
- package/dist/ui/assets/ArtifactConsentModal-DjzXcP_L.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js +9 -0
- package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js.gz +0 -0
- package/dist/ui/assets/ArtifactNode-DISy2T-6.js +9 -0
- package/dist/ui/assets/ArtifactNode-DISy2T-6.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js +19 -0
- package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js.gz +0 -0
- package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js +34 -0
- package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js.gz +0 -0
- package/dist/ui/assets/{CodeEditor.inner-Cuj6RuLL.js → CodeEditor.inner-HmSdTLW5.js} +1 -1
- package/dist/ui/assets/CodeEditor.inner-HmSdTLW5.js.gz +0 -0
- package/dist/ui/assets/ConversationView-mWaA-B1f.js +1 -0
- package/dist/ui/assets/ConversationView-mWaA-B1f.js.gz +0 -0
- package/dist/ui/assets/{EmbeddedTerminal-Lx5I9EOJ.js → EmbeddedTerminal-NNoyPA81.js} +1 -1
- package/dist/ui/assets/EmbeddedTerminal-NNoyPA81.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-CkxVnRvz.js +24 -0
- package/dist/ui/assets/KnowledgePage-CkxVnRvz.js.gz +0 -0
- package/dist/ui/assets/{MarketingScreenshotPage-CmDPBHOl.js → MarketingScreenshotPage-B86Gs8jx.js} +2 -2
- package/dist/ui/assets/MarketingScreenshotPage-B86Gs8jx.js.gz +0 -0
- package/dist/ui/assets/MobileApp-BPs-SXvz.js +1 -0
- package/dist/ui/assets/MobileApp-BPs-SXvz.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-xVfDoEtz.js +13 -0
- package/dist/ui/assets/SessionCanvas-xVfDoEtz.js.gz +0 -0
- package/dist/ui/assets/{StreamdownDemoPage-okKKR2QH.js → StreamdownDemoPage-CvWLzVsv.js} +2 -2
- package/dist/ui/assets/StreamdownDemoPage-CvWLzVsv.js.gz +0 -0
- package/dist/ui/assets/{TerminalModal-D9jMGZXv.js → TerminalModal-ExOgsuOP.js} +2 -2
- package/dist/ui/assets/TerminalModal-ExOgsuOP.js.gz +0 -0
- package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js +1 -0
- package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js.gz +0 -0
- package/dist/ui/assets/{ThemedSyntaxHighlighter.inner-C1FdIHn0.js → ThemedSyntaxHighlighter.inner-rpCN9S6K.js} +1 -1
- package/dist/ui/assets/{antd-DT5ackd0.js → antd-BCqimh1J.js} +5 -5
- package/dist/ui/assets/{antd-DT5ackd0.js.gz → antd-BCqimh1J.js.gz} +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-BxSQIjrE.js +1 -0
- package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DwTJGGoj.js → architectureDiagram-VXUJARFQ-pDpGHSqT.js} +1 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-pDpGHSqT.js.gz +0 -0
- package/dist/ui/assets/{blockDiagram-VD42YOAC-Dh1_TVW2.js → blockDiagram-VD42YOAC-uP8JTJpK.js} +1 -1
- package/dist/ui/assets/blockDiagram-VD42YOAC-uP8JTJpK.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-B1e96AcB.js → c4Diagram-YG6GDRKO-qQe72Mm7.js} +1 -1
- package/dist/ui/assets/c4Diagram-YG6GDRKO-qQe72Mm7.js.gz +0 -0
- package/dist/ui/assets/channel-CoUBs6Zn.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-BODpCjJx.js → chunk-4BX2VUAB-sz-YE8Nt.js} +1 -1
- package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js +3 -0
- package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js.gz +0 -0
- package/dist/ui/assets/chunk-55IACEB6-BS04dgKF.js +1 -0
- package/dist/ui/assets/{chunk-ABZYJK2D-DCTXWSzV.js → chunk-ABZYJK2D-t3Gkphds.js} +3 -3
- package/dist/ui/assets/chunk-ABZYJK2D-t3Gkphds.js.gz +0 -0
- package/dist/ui/assets/{chunk-AGHRB4JF-CbNphBjE.js → chunk-AGHRB4JF-D_QmWxbY.js} +1 -1
- package/dist/ui/assets/chunk-AGHRB4JF-D_QmWxbY.js.gz +0 -0
- package/dist/ui/assets/{chunk-ATLVNIR6-rWg3qxof.js → chunk-ATLVNIR6-Bmg7-Ufz.js} +1 -1
- package/dist/ui/assets/chunk-ATLVNIR6-Bmg7-Ufz.js.gz +0 -0
- package/dist/ui/assets/{chunk-B4BG7PRW-CgtLCbpE.js → chunk-B4BG7PRW-dnSEE1u-.js} +1 -1
- package/dist/ui/assets/chunk-B4BG7PRW-dnSEE1u-.js.gz +0 -0
- package/dist/ui/assets/{chunk-CVBHYZKI-DTL6Zgr0.js → chunk-CVBHYZKI-BStaYnF0.js} +1 -1
- package/dist/ui/assets/{chunk-DI55MBZ5-Dwvx2Kva.js → chunk-DI55MBZ5-28dvx6o3.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-28dvx6o3.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-X-FURkEh.js +1 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-BogA_9CV.js → chunk-FMBD7UC4-C_63gC9S.js} +1 -1
- package/dist/ui/assets/{chunk-HN2XXSSU-2blQO3Gb.js → chunk-HN2XXSSU-UFD374KI.js} +1 -1
- package/dist/ui/assets/chunk-HN2XXSSU-UFD374KI.js.gz +0 -0
- package/dist/ui/assets/{chunk-JA3XYJ7Z-Cr1rmOui.js → chunk-JA3XYJ7Z-B60hLNeR.js} +1 -1
- package/dist/ui/assets/chunk-JA3XYJ7Z-B60hLNeR.js.gz +0 -0
- package/dist/ui/assets/{chunk-JZLCHNYA-BsgZ79Fa.js → chunk-JZLCHNYA-ButC6pwN.js} +1 -1
- package/dist/ui/assets/chunk-JZLCHNYA-ButC6pwN.js.gz +0 -0
- package/dist/ui/assets/{chunk-MI3HLSF2-dwYeUy5S.js → chunk-MI3HLSF2-BivYzoSV.js} +1 -1
- package/dist/ui/assets/chunk-MI3HLSF2-BivYzoSV.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js +2 -0
- package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js.gz +0 -0
- package/dist/ui/assets/{chunk-QN33PNHL-DxdIDCAa.js → chunk-QN33PNHL-tXtHZpaG.js} +1 -1
- package/dist/ui/assets/{chunk-QXUST7PY-BCK2V0i-.js → chunk-QXUST7PY-DATib_Vv.js} +1 -1
- package/dist/ui/assets/chunk-QXUST7PY-DATib_Vv.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-y6l249e5.js +1 -0
- package/dist/ui/assets/{chunk-S3R3BYOJ-GP3zIxrB.js → chunk-S3R3BYOJ-BEtfmflI.js} +1 -1
- package/dist/ui/assets/chunk-S3R3BYOJ-BEtfmflI.js.gz +0 -0
- package/dist/ui/assets/{chunk-TZMSLE5B-dX5RaM6g.js → chunk-TZMSLE5B-BY1ZtogK.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-BY1ZtogK.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-BYvq-uPY.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BYvq-uPY.js +1 -0
- package/dist/ui/assets/constants-CYzQKfD1.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-Dx0BJVDl.js → cose-bilkent-S5V4N54A-DPvYrqGG.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-DPvYrqGG.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-DiQSUxqN.js → dagre-6UL2VRFP-D800J6qb.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-D800J6qb.js.gz +0 -0
- package/dist/ui/assets/{dagre-Bekd9Vdj.js → dagre-TNc4wezg.js} +1 -1
- package/dist/ui/assets/dagre-TNc4wezg.js.gz +0 -0
- package/dist/ui/assets/{diagram-PSM6KHXK-DtJnDQjc.js → diagram-PSM6KHXK-CGdP9F-X.js} +1 -1
- package/dist/ui/assets/diagram-PSM6KHXK-CGdP9F-X.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-CobkCRdj.js → diagram-QEK2KX5R-BD5lOCe5.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-BD5lOCe5.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-DHEZYivc.js → diagram-S2PKOQOG-cp3l22vN.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-cp3l22vN.js.gz +0 -0
- package/dist/ui/assets/editor-Cr0W5BQI.js +39 -0
- package/dist/ui/assets/editor-Cr0W5BQI.js.gz +0 -0
- package/dist/ui/assets/{emoji-B0hLmSLZ.js → emoji-Bv3m24sO.js} +1 -1
- package/dist/ui/assets/emoji-Bv3m24sO.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-BVNeTZPQ.js → erDiagram-Q2GNP2WA-CQSXRgqr.js} +1 -1
- package/dist/ui/assets/erDiagram-Q2GNP2WA-CQSXRgqr.js.gz +0 -0
- package/dist/ui/assets/{flowDiagram-NV44I4VS-C73VFdyk.js → flowDiagram-NV44I4VS-CKcKpkph.js} +1 -1
- package/dist/ui/assets/flowDiagram-NV44I4VS-CKcKpkph.js.gz +0 -0
- package/dist/ui/assets/{ganttDiagram-LVOFAZNH-B_RosuD1.js → ganttDiagram-LVOFAZNH-DlAHzXO5.js} +1 -1
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-DlAHzXO5.js.gz +0 -0
- package/dist/ui/assets/{gitGraph-F6HP7TQM-DMFIqn4h.js → gitGraph-F6HP7TQM-DeuXy4B1.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-hxbgwNA1.js → gitGraphDiagram-NY62KEGX-aB-AI4Vq.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-aB-AI4Vq.js.gz +0 -0
- package/dist/ui/assets/index-B-qHc0o5.js +63 -0
- package/dist/ui/assets/index-B-qHc0o5.js.gz +0 -0
- package/dist/ui/assets/{info-NVLQJR56-DZ3K-w48.js → info-NVLQJR56-B9PG7xsc.js} +1 -1
- package/dist/ui/assets/{infoDiagram-ER5ION4S-CxnBJQu6.js → infoDiagram-ER5ION4S-C5Wpoqim.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CHYNj-f8.js → journeyDiagram-XKPGCS4Q-CHLziqfS.js} +1 -1
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHLziqfS.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DQPCCsj2.js → kanban-definition-3W4ZIXB7-Dq7GzQE_.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-Dq7GzQE_.js.gz +0 -0
- package/dist/ui/assets/{line-DBRjKmfa.js → line-DHKNg83I.js} +1 -1
- package/dist/ui/assets/{linear-DFao5Wyp.js → linear-BvUfn0I8.js} +1 -1
- package/dist/ui/assets/linear-BvUfn0I8.js.gz +0 -0
- package/dist/ui/assets/{mermaid-parser.core-DYCfacHj.js → mermaid-parser.core-C6d9tKoo.js} +2 -2
- package/dist/ui/assets/mermaid-parser.core-C6d9tKoo.js.gz +0 -0
- package/dist/ui/assets/{mermaid.core-C6xGFSdE.js → mermaid.core-CxE5KezR.js} +3 -3
- package/dist/ui/assets/mermaid.core-CxE5KezR.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-L3Pw-YM7.js → mindmap-definition-VGOIOE7T-DmPoQ48w.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-DmPoQ48w.js.gz +0 -0
- package/dist/ui/assets/{packet-BFZMPI3H-CpL6iNoa.js → packet-BFZMPI3H-JZEkVZxU.js} +1 -1
- package/dist/ui/assets/{particles-CT8hcJOA.js → particles-CxMmUw86.js} +1 -1
- package/dist/ui/assets/particles-CxMmUw86.js.gz +0 -0
- package/dist/ui/assets/{pie-7BOR55EZ-hTqChbTo.js → pie-7BOR55EZ-_1II5pYQ.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-Bf4Nou75.js → pieDiagram-ADFJNKIX-DrNkH33i.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-DrNkH33i.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-DpjUTLB1.js → quadrantDiagram-AYHSOK5B-DOpC-HEF.js} +1 -1
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DOpC-HEF.js.gz +0 -0
- package/dist/ui/assets/{radar-NHE76QYJ-myy7OENC.js → radar-NHE76QYJ-DDmqhzEZ.js} +1 -1
- package/dist/ui/assets/{reactflow-Cubtnk8i.js → reactflow-D98uPOMq.js} +1 -1
- package/dist/ui/assets/reactflow-D98uPOMq.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-Bfrfh-0-.js → requirementDiagram-UZGBJVZJ-Bzx0iEPP.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bzx0iEPP.js.gz +0 -0
- package/dist/ui/assets/{sandpack-C58bwfIS.js → sandpack-059Z4UWP.js} +1 -1
- package/dist/ui/assets/sandpack-059Z4UWP.js.gz +0 -0
- package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js +1 -0
- package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js.gz +0 -0
- package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-ClZAZ6va.js → sankeyDiagram-TZEHDZUN-Do9pvfDv.js} +1 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-Do9pvfDv.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-CNgly63p.js → sequenceDiagram-WL72ISMW-CN8neUTA.js} +1 -1
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-CN8neUTA.js.gz +0 -0
- package/dist/ui/assets/{src-DAeyG22O.js → src-DEbsv3pp.js} +2 -2
- package/dist/ui/assets/src-DEbsv3pp.js.gz +0 -0
- package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BrEAoDpE.js → stateDiagram-FKZM4ZOC-BluWJi8n.js} +1 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BluWJi8n.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-DeyqBMDR.js +1 -0
- package/dist/ui/assets/{streamdown-BdAVfkeF.js → streamdown-BT1twtFc.js} +5 -5
- package/dist/ui/assets/streamdown-BT1twtFc.js.gz +0 -0
- package/dist/ui/assets/{syntax-BOfTnQiy.js → syntax-CBu6nLfm.js} +1 -1
- package/dist/ui/assets/syntax-CBu6nLfm.js.gz +0 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-CaRH3k4l.js → timeline-definition-IT6M3QCI-WdUNkiRj.js} +1 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-WdUNkiRj.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-CUaLOV_B.js → treemap-KMMF4GRG-CoriU4Jl.js} +1 -1
- package/dist/ui/assets/{useUserLocalStorage-C8sgXgXR.js → useUserLocalStorage-GidNiOPC.js} +1 -1
- package/dist/ui/assets/useUserLocalStorage-GidNiOPC.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BlhkI9T_.js → xychartDiagram-PRI3JC2R-CgBAKNt2.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CgBAKNt2.js.gz +0 -0
- package/dist/ui/index.html +9 -8
- package/dist/ui/index.html.gz +0 -0
- package/package.json +2 -2
- package/dist/ui/assets/AgorEmojiPickerInner-DQjr8M3_.js +0 -1
- package/dist/ui/assets/App-hJtcOxHv.js +0 -5
- package/dist/ui/assets/App-hJtcOxHv.js.gz +0 -0
- package/dist/ui/assets/AppNode-BhuMpn8O.js +0 -1
- package/dist/ui/assets/AppNode-BhuMpn8O.js.gz +0 -0
- package/dist/ui/assets/ArtifactConsentModal-oMMzRn8L.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js +0 -9
- package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js.gz +0 -0
- package/dist/ui/assets/ArtifactNode-BzQcrwFS.js +0 -9
- package/dist/ui/assets/ArtifactNode-BzQcrwFS.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js +0 -19
- package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js.gz +0 -0
- package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js +0 -34
- package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js.gz +0 -0
- package/dist/ui/assets/CodeEditor.inner-Cuj6RuLL.js.gz +0 -0
- package/dist/ui/assets/ConversationView-9-3ma1u-.js +0 -1
- package/dist/ui/assets/ConversationView-9-3ma1u-.js.gz +0 -0
- package/dist/ui/assets/EmbeddedTerminal-Lx5I9EOJ.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js +0 -24
- package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js.gz +0 -0
- package/dist/ui/assets/MarketingScreenshotPage-CmDPBHOl.js.gz +0 -0
- package/dist/ui/assets/MobileApp-BpgSG_gz.js +0 -1
- package/dist/ui/assets/MobileApp-BpgSG_gz.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-B6_mtlxK.js +0 -13
- package/dist/ui/assets/SessionCanvas-B6_mtlxK.js.gz +0 -0
- package/dist/ui/assets/StreamdownDemoPage-okKKR2QH.js.gz +0 -0
- package/dist/ui/assets/TerminalModal-D9jMGZXv.js.gz +0 -0
- package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js +0 -1
- package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js.gz +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-DMnxkQRZ.js +0 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-DwTJGGoj.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-Dh1_TVW2.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-B1e96AcB.js.gz +0 -0
- package/dist/ui/assets/channel-Jv4dT4S5.js +0 -1
- package/dist/ui/assets/chunk-55IACEB6-lJXvUquf.js +0 -1
- package/dist/ui/assets/chunk-ABZYJK2D-DCTXWSzV.js.gz +0 -0
- package/dist/ui/assets/chunk-AGHRB4JF-CbNphBjE.js.gz +0 -0
- package/dist/ui/assets/chunk-ATLVNIR6-rWg3qxof.js.gz +0 -0
- package/dist/ui/assets/chunk-B4BG7PRW-CgtLCbpE.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-Dwvx2Kva.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-DHyaqTsP.js +0 -1
- package/dist/ui/assets/chunk-HN2XXSSU-2blQO3Gb.js.gz +0 -0
- package/dist/ui/assets/chunk-JA3XYJ7Z-Cr1rmOui.js.gz +0 -0
- package/dist/ui/assets/chunk-JZLCHNYA-BsgZ79Fa.js.gz +0 -0
- package/dist/ui/assets/chunk-MI3HLSF2-dwYeUy5S.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js +0 -2
- package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js.gz +0 -0
- package/dist/ui/assets/chunk-QXUST7PY-BCK2V0i-.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-CALjGrEE.js +0 -1
- package/dist/ui/assets/chunk-S3R3BYOJ-GP3zIxrB.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-dX5RaM6g.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-C3_RVP70.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-C3_RVP70.js +0 -1
- package/dist/ui/assets/constants-GjIDNVyt.js +0 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-Dx0BJVDl.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-DiQSUxqN.js.gz +0 -0
- package/dist/ui/assets/dagre-Bekd9Vdj.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-DtJnDQjc.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-CobkCRdj.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-DHEZYivc.js.gz +0 -0
- package/dist/ui/assets/editor-DQIG-JYZ.js +0 -43
- package/dist/ui/assets/editor-DQIG-JYZ.js.gz +0 -0
- package/dist/ui/assets/emoji-B0hLmSLZ.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-BVNeTZPQ.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-C73VFdyk.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-B_RosuD1.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-hxbgwNA1.js.gz +0 -0
- package/dist/ui/assets/index-DTz1Dif6.js +0 -64
- package/dist/ui/assets/index-DTz1Dif6.js.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHYNj-f8.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-DQPCCsj2.js.gz +0 -0
- package/dist/ui/assets/linear-DFao5Wyp.js.gz +0 -0
- package/dist/ui/assets/mermaid-parser.core-DYCfacHj.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-C6xGFSdE.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-L3Pw-YM7.js.gz +0 -0
- package/dist/ui/assets/particles-CT8hcJOA.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-Bf4Nou75.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DpjUTLB1.js.gz +0 -0
- package/dist/ui/assets/reactflow-Cubtnk8i.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bfrfh-0-.js.gz +0 -0
- package/dist/ui/assets/sandpack-C58bwfIS.js.gz +0 -0
- package/dist/ui/assets/sandpackDefaults-Bkga8XAE.js +0 -1
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-ClZAZ6va.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-CNgly63p.js.gz +0 -0
- package/dist/ui/assets/src-DAeyG22O.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BrEAoDpE.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BNL52_oN.js +0 -1
- package/dist/ui/assets/streamdown-BdAVfkeF.js.gz +0 -0
- package/dist/ui/assets/syntax-BOfTnQiy.js.gz +0 -0
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CaRH3k4l.js.gz +0 -0
- package/dist/ui/assets/useUserLocalStorage-C8sgXgXR.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-BlhkI9T_.js.gz +0 -0
package/dist/core/db/index.cjs
CHANGED
|
@@ -791,6 +791,21 @@ var init_file = __esm({
|
|
|
791
791
|
});
|
|
792
792
|
|
|
793
793
|
// src/types/gateway.ts
|
|
794
|
+
function getRequiredSecretFields(channelType, config) {
|
|
795
|
+
switch (channelType) {
|
|
796
|
+
case "slack": {
|
|
797
|
+
const wantsInbound = config.connection_mode === "socket" || config.enable_channels === true || config.enable_groups === true || config.enable_mpim === true;
|
|
798
|
+
const outboundOnly = config.outbound_enabled === true && !wantsInbound;
|
|
799
|
+
return outboundOnly ? ["bot_token"] : ["bot_token", "app_token"];
|
|
800
|
+
}
|
|
801
|
+
case "github":
|
|
802
|
+
return ["private_key"];
|
|
803
|
+
case "teams":
|
|
804
|
+
return ["app_password"];
|
|
805
|
+
default:
|
|
806
|
+
return [];
|
|
807
|
+
}
|
|
808
|
+
}
|
|
794
809
|
var GATEWAY_SENSITIVE_CONFIG_FIELDS, GATEWAY_REDACTED_SENTINEL;
|
|
795
810
|
var init_gateway = __esm({
|
|
796
811
|
"src/types/gateway.ts"() {
|
|
@@ -4927,11 +4942,11 @@ __export(db_exports, {
|
|
|
4927
4942
|
activeGroupGrantAccessExists: () => activeGroupGrantAccessExists,
|
|
4928
4943
|
advisoryLockKeyForUuid: () => advisoryLockKeyForUuid,
|
|
4929
4944
|
alignedBoardDefaultVisible: () => alignedBoardDefaultVisible,
|
|
4930
|
-
and: () =>
|
|
4945
|
+
and: () => import_drizzle_orm37.and,
|
|
4931
4946
|
appVariables: () => appVariables3,
|
|
4932
4947
|
artifactTrustGrants: () => artifactTrustGrants3,
|
|
4933
4948
|
artifacts: () => artifacts3,
|
|
4934
|
-
asc: () =>
|
|
4949
|
+
asc: () => import_drizzle_orm37.asc,
|
|
4935
4950
|
assertUsableBootstrapAdminPassword: () => assertUsableBootstrapAdminPassword,
|
|
4936
4951
|
attachHiddenTenant: () => attachHiddenTenant,
|
|
4937
4952
|
boardComments: () => boardComments3,
|
|
@@ -4947,7 +4962,7 @@ __export(db_exports, {
|
|
|
4947
4962
|
cards: () => cards3,
|
|
4948
4963
|
checkMigrationStatus: () => checkMigrationStatus,
|
|
4949
4964
|
compare: () => compare,
|
|
4950
|
-
count: () =>
|
|
4965
|
+
count: () => import_drizzle_orm37.count,
|
|
4951
4966
|
createDatabase: () => createDatabase,
|
|
4952
4967
|
createDatabaseAsync: () => createDatabaseAsync,
|
|
4953
4968
|
createDefaultAdminUser: () => createDefaultAdminUser,
|
|
@@ -4958,10 +4973,10 @@ __export(db_exports, {
|
|
|
4958
4973
|
dateTruncUtc: () => dateTruncUtc,
|
|
4959
4974
|
decryptApiKey: () => decryptApiKey,
|
|
4960
4975
|
deleteFrom: () => deleteFrom,
|
|
4961
|
-
desc: () =>
|
|
4976
|
+
desc: () => import_drizzle_orm37.desc,
|
|
4962
4977
|
encryptApiKey: () => encryptApiKey,
|
|
4963
4978
|
enqueueTenantDatabasePostCommitCallback: () => enqueueTenantDatabasePostCommitCallback,
|
|
4964
|
-
eq: () =>
|
|
4979
|
+
eq: () => import_drizzle_orm37.eq,
|
|
4965
4980
|
executeAll: () => executeAll,
|
|
4966
4981
|
executeGet: () => executeGet,
|
|
4967
4982
|
executeRaw: () => executeRaw,
|
|
@@ -4982,11 +4997,11 @@ __export(db_exports, {
|
|
|
4982
4997
|
getUserByEmail: () => getUserByEmail,
|
|
4983
4998
|
groupMemberships: () => groupMemberships3,
|
|
4984
4999
|
groups: () => groups3,
|
|
4985
|
-
gt: () =>
|
|
4986
|
-
gte: () =>
|
|
5000
|
+
gt: () => import_drizzle_orm37.gt,
|
|
5001
|
+
gte: () => import_drizzle_orm37.gte,
|
|
4987
5002
|
hash: () => hash,
|
|
4988
5003
|
identifyUrlParam: () => identifyUrlParam,
|
|
4989
|
-
inArray: () =>
|
|
5004
|
+
inArray: () => import_drizzle_orm37.inArray,
|
|
4990
5005
|
initializeDatabase: () => initializeDatabase,
|
|
4991
5006
|
insert: () => insert,
|
|
4992
5007
|
insertOne: () => insertOne,
|
|
@@ -5005,13 +5020,13 @@ __export(db_exports, {
|
|
|
5005
5020
|
kbGraphNodes: () => kbGraphNodes3,
|
|
5006
5021
|
kbNamespaceAcl: () => kbNamespaceAcl3,
|
|
5007
5022
|
kbNamespaces: () => kbNamespaces3,
|
|
5008
|
-
like: () =>
|
|
5023
|
+
like: () => import_drizzle_orm37.like,
|
|
5009
5024
|
lockRowForUpdate: () => lockRowForUpdate,
|
|
5010
|
-
lt: () =>
|
|
5011
|
-
lte: () =>
|
|
5025
|
+
lt: () => import_drizzle_orm37.lt,
|
|
5026
|
+
lte: () => import_drizzle_orm37.lte,
|
|
5012
5027
|
mcpServers: () => mcpServers3,
|
|
5013
5028
|
messages: () => messages3,
|
|
5014
|
-
or: () =>
|
|
5029
|
+
or: () => import_drizzle_orm37.or,
|
|
5015
5030
|
reattributeLegacyAnonymousRows: () => reattributeLegacyAnonymousRows,
|
|
5016
5031
|
repos: () => repos3,
|
|
5017
5032
|
requireCurrentTenantId: () => requireCurrentTenantId,
|
|
@@ -5030,7 +5045,7 @@ __export(db_exports, {
|
|
|
5030
5045
|
sessionRelationships: () => sessionRelationships3,
|
|
5031
5046
|
sessions: () => sessions3,
|
|
5032
5047
|
shortId: () => shortId,
|
|
5033
|
-
sql: () =>
|
|
5048
|
+
sql: () => import_drizzle_orm37.sql,
|
|
5034
5049
|
tasks: () => tasks3,
|
|
5035
5050
|
tenantDatabaseScope: () => tenantDatabaseScope,
|
|
5036
5051
|
threadSessionMap: () => threadSessionMap3,
|
|
@@ -5053,7 +5068,7 @@ __export(db_exports, {
|
|
|
5053
5068
|
});
|
|
5054
5069
|
module.exports = __toCommonJS(db_exports);
|
|
5055
5070
|
init_cjs_shims();
|
|
5056
|
-
var
|
|
5071
|
+
var import_drizzle_orm37 = require("drizzle-orm");
|
|
5057
5072
|
var import_bcryptjs3 = __toESM(require("bcryptjs"), 1);
|
|
5058
5073
|
init_ids();
|
|
5059
5074
|
|
|
@@ -8204,6 +8219,63 @@ var BranchRepository = class {
|
|
|
8204
8219
|
}
|
|
8205
8220
|
return Array.from(userIds);
|
|
8206
8221
|
}
|
|
8222
|
+
/**
|
|
8223
|
+
* Find non-archived branches whose explicit filesystem access set can change
|
|
8224
|
+
* when membership in the given group changes.
|
|
8225
|
+
*
|
|
8226
|
+
* Keep this inverse lookup in lockstep with findExplicitFsAccessUserIds():
|
|
8227
|
+
* both encode which group grants materialize into branch-folder access.
|
|
8228
|
+
* App-only grants (`fs_access = 'none'`) are intentionally excluded because
|
|
8229
|
+
* membership changes for those grants do not require branch-folder mutation.
|
|
8230
|
+
*/
|
|
8231
|
+
async findExplicitFsAccessBranchIdsForGroup(groupId) {
|
|
8232
|
+
const directRows = await select(this.db, { branch_id: branchGroupGrants3.branch_id }).from(branchGroupGrants3).innerJoin(branches3, (0, import_drizzle_orm15.eq)(branches3.branch_id, branchGroupGrants3.branch_id)).innerJoin(
|
|
8233
|
+
groups3,
|
|
8234
|
+
(0, import_drizzle_orm15.and)((0, import_drizzle_orm15.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm15.eq)(groups3.archived, false))
|
|
8235
|
+
).where(
|
|
8236
|
+
(0, import_drizzle_orm15.and)(
|
|
8237
|
+
(0, import_drizzle_orm15.eq)(branchGroupGrants3.group_id, groupId),
|
|
8238
|
+
(0, import_drizzle_orm15.eq)(branches3.archived, false),
|
|
8239
|
+
(0, import_drizzle_orm15.inArray)(
|
|
8240
|
+
import_drizzle_orm15.sql`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
8241
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
8242
|
+
)
|
|
8243
|
+
)
|
|
8244
|
+
).all();
|
|
8245
|
+
const boardRows = await select(this.db, { branch_id: branches3.branch_id }).from(boardGroupGrants3).innerJoin(
|
|
8246
|
+
groups3,
|
|
8247
|
+
(0, import_drizzle_orm15.and)((0, import_drizzle_orm15.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm15.eq)(groups3.archived, false))
|
|
8248
|
+
).innerJoin(
|
|
8249
|
+
boards3,
|
|
8250
|
+
(0, import_drizzle_orm15.and)(
|
|
8251
|
+
(0, import_drizzle_orm15.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
8252
|
+
(0, import_drizzle_orm15.eq)(import_drizzle_orm15.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`, "shared")
|
|
8253
|
+
)
|
|
8254
|
+
).innerJoin(
|
|
8255
|
+
branches3,
|
|
8256
|
+
(0, import_drizzle_orm15.and)(
|
|
8257
|
+
(0, import_drizzle_orm15.eq)(branches3.board_id, boardGroupGrants3.board_id),
|
|
8258
|
+
(0, import_drizzle_orm15.eq)(branches3.permission_source, "board"),
|
|
8259
|
+
(0, import_drizzle_orm15.eq)(branches3.archived, false)
|
|
8260
|
+
)
|
|
8261
|
+
).where(
|
|
8262
|
+
(0, import_drizzle_orm15.and)(
|
|
8263
|
+
(0, import_drizzle_orm15.eq)(boardGroupGrants3.group_id, groupId),
|
|
8264
|
+
(0, import_drizzle_orm15.inArray)(
|
|
8265
|
+
import_drizzle_orm15.sql`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
8266
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
8267
|
+
)
|
|
8268
|
+
)
|
|
8269
|
+
).all();
|
|
8270
|
+
const branchIds = /* @__PURE__ */ new Set();
|
|
8271
|
+
for (const row of directRows) {
|
|
8272
|
+
branchIds.add(row.branch_id);
|
|
8273
|
+
}
|
|
8274
|
+
for (const row of boardRows) {
|
|
8275
|
+
branchIds.add(row.branch_id);
|
|
8276
|
+
}
|
|
8277
|
+
return Array.from(branchIds);
|
|
8278
|
+
}
|
|
8207
8279
|
async findBoardAlignedBranches(boardId) {
|
|
8208
8280
|
const rows = await select(this.db).from(branches3).where(
|
|
8209
8281
|
(0, import_drizzle_orm15.and)(
|
|
@@ -9211,6 +9283,60 @@ var BoardRepository = class {
|
|
|
9211
9283
|
);
|
|
9212
9284
|
}
|
|
9213
9285
|
}
|
|
9286
|
+
/**
|
|
9287
|
+
* Shallow-merge field patches into existing board objects in a single
|
|
9288
|
+
* read-modify-write.
|
|
9289
|
+
*
|
|
9290
|
+
* Unlike upsertBoardObject (which fully replaces the object value, dropping
|
|
9291
|
+
* omitted fields), this overwrites ONLY the provided keys and leaves the rest
|
|
9292
|
+
* of each object intact — so a narrow change (e.g. a zIndex reorder) has a
|
|
9293
|
+
* smaller blast radius and won't clobber a field edited via a different patch
|
|
9294
|
+
* call. Multiple objects in one call are merged before a single write, so a
|
|
9295
|
+
* forward/backward swap touches both neighbors in one update.
|
|
9296
|
+
*
|
|
9297
|
+
* Objects that no longer exist are SKIPPED, never re-created — so a swap can't
|
|
9298
|
+
* resurrect a neighbor deleted between the client's read and this write.
|
|
9299
|
+
*
|
|
9300
|
+
* Only an explicit allowlist of fields can be merged (currently just `zIndex`,
|
|
9301
|
+
* which is also clamped into the board-object band [1, 499] so it can never be
|
|
9302
|
+
* pushed onto the card (500) / comment (1000) layers). Any other key in a
|
|
9303
|
+
* patch is ignored, so this narrow action cannot reshape an object (e.g. flip
|
|
9304
|
+
* its `type`) the way a full upsert could.
|
|
9305
|
+
*
|
|
9306
|
+
* NOTE: this is NOT atomic against concurrent writers. Like every other board
|
|
9307
|
+
* writer, the findById → update sequence has a lost-update window: a write
|
|
9308
|
+
* that lands between the read and the update can be overwritten (last-write-
|
|
9309
|
+
* wins). Merging only the patched keys narrows that window's blast radius
|
|
9310
|
+
* versus a full-object upsert, but does not close it.
|
|
9311
|
+
*/
|
|
9312
|
+
async mergeBoardObjectFields(boardId, patches) {
|
|
9313
|
+
const Z_MIN = 1;
|
|
9314
|
+
const Z_MAX = 499;
|
|
9315
|
+
try {
|
|
9316
|
+
const fullId = await this.resolveId(boardId);
|
|
9317
|
+
const current = await this.findById(fullId);
|
|
9318
|
+
if (!current) {
|
|
9319
|
+
throw new EntityNotFoundError("Board", boardId);
|
|
9320
|
+
}
|
|
9321
|
+
const updatedObjects = { ...current.objects || {} };
|
|
9322
|
+
for (const [objectId, fields] of Object.entries(patches)) {
|
|
9323
|
+
const existing = updatedObjects[objectId];
|
|
9324
|
+
if (!existing) continue;
|
|
9325
|
+
const { zIndex } = fields;
|
|
9326
|
+
if (typeof zIndex !== "number" || !Number.isFinite(zIndex)) continue;
|
|
9327
|
+
const safeZIndex = Math.min(Z_MAX, Math.max(Z_MIN, zIndex));
|
|
9328
|
+
updatedObjects[objectId] = { ...existing, zIndex: safeZIndex };
|
|
9329
|
+
}
|
|
9330
|
+
return this.update(fullId, { objects: updatedObjects });
|
|
9331
|
+
} catch (error) {
|
|
9332
|
+
if (error instanceof RepositoryError) throw error;
|
|
9333
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
9334
|
+
throw new RepositoryError(
|
|
9335
|
+
`Failed to merge board object fields: ${error instanceof Error ? error.message : String(error)}`,
|
|
9336
|
+
error
|
|
9337
|
+
);
|
|
9338
|
+
}
|
|
9339
|
+
}
|
|
9214
9340
|
/**
|
|
9215
9341
|
* DEPRECATED: Delete a zone and handle associated sessions
|
|
9216
9342
|
* TODO: Reimplement using board-objects table
|
|
@@ -9945,6 +10071,28 @@ var GatewayChannelRepository = class {
|
|
|
9945
10071
|
agentic_config: encryptedAgenticConfig
|
|
9946
10072
|
};
|
|
9947
10073
|
}
|
|
10074
|
+
/**
|
|
10075
|
+
* Enforce the "enabled requires secrets" invariant on every write path.
|
|
10076
|
+
*
|
|
10077
|
+
* An enabled channel can never exist without the secrets its type needs to
|
|
10078
|
+
* function. Runs on the post-merge, decrypted config so a patch that only
|
|
10079
|
+
* flips `enabled: true` on a channel with already-stored tokens passes.
|
|
10080
|
+
* Disabled ("draft") channels are exempt.
|
|
10081
|
+
*/
|
|
10082
|
+
assertRequiredSecretsWhenEnabled(channel) {
|
|
10083
|
+
if (channel.enabled === false) return;
|
|
10084
|
+
const channelType = channel.channel_type ?? "slack";
|
|
10085
|
+
const config = channel.config ?? {};
|
|
10086
|
+
const missing = getRequiredSecretFields(channelType, config).filter((field) => {
|
|
10087
|
+
const value = config[field];
|
|
10088
|
+
return typeof value !== "string" || value.trim() === "" || value === GATEWAY_REDACTED_SENTINEL;
|
|
10089
|
+
});
|
|
10090
|
+
if (missing.length > 0) {
|
|
10091
|
+
throw new RepositoryError(
|
|
10092
|
+
`Cannot enable ${channelType} gateway channel: missing required secret(s) ${missing.join(", ")}`
|
|
10093
|
+
);
|
|
10094
|
+
}
|
|
10095
|
+
}
|
|
9948
10096
|
/**
|
|
9949
10097
|
* Resolve short ID to full ID
|
|
9950
10098
|
*/
|
|
@@ -9976,6 +10124,7 @@ var GatewayChannelRepository = class {
|
|
|
9976
10124
|
id: data.id ?? generateId(),
|
|
9977
10125
|
channel_key: data.channel_key ?? generateId()
|
|
9978
10126
|
});
|
|
10127
|
+
this.assertRequiredSecretsWhenEnabled(data);
|
|
9979
10128
|
await insert(this.db, gatewayChannels3).values(insertData).run();
|
|
9980
10129
|
const row = await select(this.db).from(gatewayChannels3).where((0, import_drizzle_orm19.eq)(gatewayChannels3.id, insertData.id)).one();
|
|
9981
10130
|
if (!row) {
|
|
@@ -10042,6 +10191,7 @@ var GatewayChannelRepository = class {
|
|
|
10042
10191
|
}
|
|
10043
10192
|
merged.config = mergedConfig;
|
|
10044
10193
|
}
|
|
10194
|
+
this.assertRequiredSecretsWhenEnabled(merged);
|
|
10045
10195
|
const insertData = this.channelToInsert(merged);
|
|
10046
10196
|
await update(this.db, gatewayChannels3).set({
|
|
10047
10197
|
name: insertData.name,
|
|
@@ -11550,12 +11700,165 @@ var KnowledgeGraphRepository = class {
|
|
|
11550
11700
|
|
|
11551
11701
|
// src/db/repositories/mcp-servers.ts
|
|
11552
11702
|
init_cjs_shims();
|
|
11553
|
-
var
|
|
11703
|
+
var import_drizzle_orm24 = require("drizzle-orm");
|
|
11554
11704
|
init_ids();
|
|
11555
11705
|
|
|
11556
11706
|
// src/tools/mcp/auth-secrets.ts
|
|
11557
11707
|
init_cjs_shims();
|
|
11558
11708
|
|
|
11709
|
+
// src/mcp/template-resolver.ts
|
|
11710
|
+
init_cjs_shims();
|
|
11711
|
+
|
|
11712
|
+
// src/config/env-resolver.ts
|
|
11713
|
+
init_cjs_shims();
|
|
11714
|
+
var import_drizzle_orm23 = require("drizzle-orm");
|
|
11715
|
+
init_database_wrapper();
|
|
11716
|
+
|
|
11717
|
+
// src/db/repositories/session-env-selections.ts
|
|
11718
|
+
init_cjs_shims();
|
|
11719
|
+
var import_drizzle_orm22 = require("drizzle-orm");
|
|
11720
|
+
init_database_wrapper();
|
|
11721
|
+
init_schema();
|
|
11722
|
+
var SessionEnvSelectionRepository = class {
|
|
11723
|
+
constructor(db) {
|
|
11724
|
+
this.db = db;
|
|
11725
|
+
}
|
|
11726
|
+
/** Shared SELECT for a session's rows — single source of truth for reads. */
|
|
11727
|
+
async fetchRows(sessionId) {
|
|
11728
|
+
try {
|
|
11729
|
+
return await select(this.db).from(sessionEnvSelections3).where((0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId)).all();
|
|
11730
|
+
} catch (error) {
|
|
11731
|
+
throw new RepositoryError(
|
|
11732
|
+
`Failed to list session env selections: ${error instanceof Error ? error.message : String(error)}`,
|
|
11733
|
+
error
|
|
11734
|
+
);
|
|
11735
|
+
}
|
|
11736
|
+
}
|
|
11737
|
+
/** List selected env var names for a session (not hydrated). */
|
|
11738
|
+
async listNames(sessionId) {
|
|
11739
|
+
const rows = await this.fetchRows(sessionId);
|
|
11740
|
+
return rows.map((r) => r.env_var_name);
|
|
11741
|
+
}
|
|
11742
|
+
/** Return a Set for fast membership checks in the env resolver. */
|
|
11743
|
+
async asSet(sessionId) {
|
|
11744
|
+
const names = await this.listNames(sessionId);
|
|
11745
|
+
return new Set(names);
|
|
11746
|
+
}
|
|
11747
|
+
/** Full rows with timestamps — for the REST API response. */
|
|
11748
|
+
async list(sessionId) {
|
|
11749
|
+
const rows = await this.fetchRows(sessionId);
|
|
11750
|
+
return rows.map((r) => ({
|
|
11751
|
+
session_id: r.session_id,
|
|
11752
|
+
env_var_name: r.env_var_name,
|
|
11753
|
+
created_at: new Date(r.created_at)
|
|
11754
|
+
}));
|
|
11755
|
+
}
|
|
11756
|
+
/** Add a selection. No-op if it already exists. */
|
|
11757
|
+
async add(sessionId, envVarName) {
|
|
11758
|
+
try {
|
|
11759
|
+
const existing = await select(this.db).from(sessionEnvSelections3).where(
|
|
11760
|
+
(0, import_drizzle_orm22.and)(
|
|
11761
|
+
(0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId),
|
|
11762
|
+
(0, import_drizzle_orm22.eq)(sessionEnvSelections3.env_var_name, envVarName)
|
|
11763
|
+
)
|
|
11764
|
+
).one();
|
|
11765
|
+
if (existing) return;
|
|
11766
|
+
await insert(this.db, sessionEnvSelections3).values({
|
|
11767
|
+
session_id: sessionId,
|
|
11768
|
+
env_var_name: envVarName,
|
|
11769
|
+
created_at: /* @__PURE__ */ new Date()
|
|
11770
|
+
}).run();
|
|
11771
|
+
} catch (error) {
|
|
11772
|
+
throw new RepositoryError(
|
|
11773
|
+
`Failed to add session env selection: ${error instanceof Error ? error.message : String(error)}`,
|
|
11774
|
+
error
|
|
11775
|
+
);
|
|
11776
|
+
}
|
|
11777
|
+
}
|
|
11778
|
+
/** Remove a selection. No-op if it doesn't exist. */
|
|
11779
|
+
async remove(sessionId, envVarName) {
|
|
11780
|
+
try {
|
|
11781
|
+
await deleteFrom(this.db, sessionEnvSelections3).where(
|
|
11782
|
+
(0, import_drizzle_orm22.and)(
|
|
11783
|
+
(0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId),
|
|
11784
|
+
(0, import_drizzle_orm22.eq)(sessionEnvSelections3.env_var_name, envVarName)
|
|
11785
|
+
)
|
|
11786
|
+
).run();
|
|
11787
|
+
} catch (error) {
|
|
11788
|
+
throw new RepositoryError(
|
|
11789
|
+
`Failed to remove session env selection: ${error instanceof Error ? error.message : String(error)}`,
|
|
11790
|
+
error
|
|
11791
|
+
);
|
|
11792
|
+
}
|
|
11793
|
+
}
|
|
11794
|
+
/** Bulk replace — deletes all existing rows, inserts the new set. */
|
|
11795
|
+
async setAll(sessionId, envVarNames) {
|
|
11796
|
+
try {
|
|
11797
|
+
await deleteFrom(this.db, sessionEnvSelections3).where((0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId)).run();
|
|
11798
|
+
if (envVarNames.length === 0) return;
|
|
11799
|
+
const now = /* @__PURE__ */ new Date();
|
|
11800
|
+
await insert(this.db, sessionEnvSelections3).values(
|
|
11801
|
+
envVarNames.map((name) => ({
|
|
11802
|
+
session_id: sessionId,
|
|
11803
|
+
env_var_name: name,
|
|
11804
|
+
created_at: now
|
|
11805
|
+
}))
|
|
11806
|
+
).run();
|
|
11807
|
+
} catch (error) {
|
|
11808
|
+
throw new RepositoryError(
|
|
11809
|
+
`Failed to set session env selections: ${error instanceof Error ? error.message : String(error)}`,
|
|
11810
|
+
error
|
|
11811
|
+
);
|
|
11812
|
+
}
|
|
11813
|
+
}
|
|
11814
|
+
};
|
|
11815
|
+
|
|
11816
|
+
// src/config/env-resolver.ts
|
|
11817
|
+
init_schema();
|
|
11818
|
+
|
|
11819
|
+
// src/config/env-blocklist.ts
|
|
11820
|
+
init_cjs_shims();
|
|
11821
|
+
var BLOCKED_ENV_PATTERNS = Object.freeze([
|
|
11822
|
+
/^LD_/i,
|
|
11823
|
+
/^DYLD_/i,
|
|
11824
|
+
/^PYTHON(?!_AGOR_)/i
|
|
11825
|
+
]);
|
|
11826
|
+
|
|
11827
|
+
// src/config/env-vars.ts
|
|
11828
|
+
init_cjs_shims();
|
|
11829
|
+
var V05_SCOPES = ["global", "session"];
|
|
11830
|
+
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
11831
|
+
function normalizeStoredEnvVar(raw) {
|
|
11832
|
+
if (typeof raw === "string") {
|
|
11833
|
+
return { value_encrypted: raw, scope: "global" };
|
|
11834
|
+
}
|
|
11835
|
+
return {
|
|
11836
|
+
value_encrypted: raw.value_encrypted,
|
|
11837
|
+
scope: raw.scope,
|
|
11838
|
+
resource_id: raw.resource_id ?? null,
|
|
11839
|
+
extra_config: raw.extra_config ?? null
|
|
11840
|
+
};
|
|
11841
|
+
}
|
|
11842
|
+
function normalizeStoredEnvMap(raw) {
|
|
11843
|
+
const out = {};
|
|
11844
|
+
if (!raw) return out;
|
|
11845
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
11846
|
+
try {
|
|
11847
|
+
out[key] = normalizeStoredEnvVar(value);
|
|
11848
|
+
} catch (err) {
|
|
11849
|
+
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
11850
|
+
}
|
|
11851
|
+
}
|
|
11852
|
+
return out;
|
|
11853
|
+
}
|
|
11854
|
+
|
|
11855
|
+
// src/templates/handlebars-helpers.ts
|
|
11856
|
+
init_cjs_shims();
|
|
11857
|
+
var import_handlebars = __toESM(require("handlebars"), 1);
|
|
11858
|
+
|
|
11859
|
+
// src/mcp/template-patterns.ts
|
|
11860
|
+
init_cjs_shims();
|
|
11861
|
+
|
|
11559
11862
|
// src/tools/mcp/http-headers.ts
|
|
11560
11863
|
init_cjs_shims();
|
|
11561
11864
|
var MCP_HEADER_REDACTED_SENTINEL = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
@@ -11706,7 +12009,7 @@ var MCPServerRepository = class {
|
|
|
11706
12009
|
*/
|
|
11707
12010
|
async resolveId(id) {
|
|
11708
12011
|
return resolveByShortIdPrefix(id, "MCPServer", async (pattern) => {
|
|
11709
|
-
const rows = await select(this.db).from(mcpServers3).where((0,
|
|
12012
|
+
const rows = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.like)(mcpServers3.mcp_server_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
11710
12013
|
return rows.map((r) => r.mcp_server_id);
|
|
11711
12014
|
});
|
|
11712
12015
|
}
|
|
@@ -11717,7 +12020,7 @@ var MCPServerRepository = class {
|
|
|
11717
12020
|
try {
|
|
11718
12021
|
const insertData = this.mcpServerToInsert(data);
|
|
11719
12022
|
await insert(this.db, mcpServers3).values(insertData).run();
|
|
11720
|
-
const row = await select(this.db).from(mcpServers3).where((0,
|
|
12023
|
+
const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, insertData.mcp_server_id)).one();
|
|
11721
12024
|
if (!row) {
|
|
11722
12025
|
throw new RepositoryError("Failed to retrieve created MCP server");
|
|
11723
12026
|
}
|
|
@@ -11736,7 +12039,7 @@ var MCPServerRepository = class {
|
|
|
11736
12039
|
async findById(id) {
|
|
11737
12040
|
try {
|
|
11738
12041
|
const fullId = await this.resolveId(id);
|
|
11739
|
-
const row = await select(this.db).from(mcpServers3).where((0,
|
|
12042
|
+
const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).one();
|
|
11740
12043
|
return row ? this.rowToMCPServer(row) : null;
|
|
11741
12044
|
} catch (error) {
|
|
11742
12045
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -11755,24 +12058,24 @@ var MCPServerRepository = class {
|
|
|
11755
12058
|
let query = select(this.db).from(mcpServers3);
|
|
11756
12059
|
const conditions = [];
|
|
11757
12060
|
if (filters?.scope) {
|
|
11758
|
-
conditions.push((0,
|
|
12061
|
+
conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.scope, filters.scope));
|
|
11759
12062
|
}
|
|
11760
12063
|
if (filters?.scopeId) {
|
|
11761
12064
|
if (filters.scope === "global") {
|
|
11762
|
-
conditions.push((0,
|
|
12065
|
+
conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.owner_user_id, filters.scopeId));
|
|
11763
12066
|
}
|
|
11764
12067
|
}
|
|
11765
12068
|
if (filters?.transport) {
|
|
11766
|
-
conditions.push((0,
|
|
12069
|
+
conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.transport, filters.transport));
|
|
11767
12070
|
}
|
|
11768
12071
|
if (filters?.enabled !== void 0) {
|
|
11769
|
-
conditions.push((0,
|
|
12072
|
+
conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.enabled, filters.enabled));
|
|
11770
12073
|
}
|
|
11771
12074
|
if (filters?.source) {
|
|
11772
|
-
conditions.push((0,
|
|
12075
|
+
conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.source, filters.source));
|
|
11773
12076
|
}
|
|
11774
12077
|
if (conditions.length > 0) {
|
|
11775
|
-
query = query.where((0,
|
|
12078
|
+
query = query.where((0, import_drizzle_orm24.and)(...conditions));
|
|
11776
12079
|
}
|
|
11777
12080
|
const rows = await query.all();
|
|
11778
12081
|
return rows.map((row) => this.rowToMCPServer(row));
|
|
@@ -11819,7 +12122,7 @@ var MCPServerRepository = class {
|
|
|
11819
12122
|
transport: insertData.transport,
|
|
11820
12123
|
updated_at: /* @__PURE__ */ new Date(),
|
|
11821
12124
|
data: insertData.data
|
|
11822
|
-
}).where((0,
|
|
12125
|
+
}).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).run();
|
|
11823
12126
|
const updated = await this.findById(fullId);
|
|
11824
12127
|
if (!updated) {
|
|
11825
12128
|
throw new RepositoryError("Failed to retrieve updated MCP server");
|
|
@@ -11840,7 +12143,7 @@ var MCPServerRepository = class {
|
|
|
11840
12143
|
async delete(id) {
|
|
11841
12144
|
try {
|
|
11842
12145
|
const fullId = await this.resolveId(id);
|
|
11843
|
-
const result = await deleteFrom(this.db, mcpServers3).where((0,
|
|
12146
|
+
const result = await deleteFrom(this.db, mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).run();
|
|
11844
12147
|
if (result.rowsAffected === 0) {
|
|
11845
12148
|
throw new EntityNotFoundError("MCPServer", id);
|
|
11846
12149
|
}
|
|
@@ -11870,7 +12173,7 @@ var MCPServerRepository = class {
|
|
|
11870
12173
|
|
|
11871
12174
|
// src/db/repositories/messages.ts
|
|
11872
12175
|
init_cjs_shims();
|
|
11873
|
-
var
|
|
12176
|
+
var import_drizzle_orm25 = require("drizzle-orm");
|
|
11874
12177
|
init_database_wrapper();
|
|
11875
12178
|
init_schema();
|
|
11876
12179
|
var MessagesRepository = class {
|
|
@@ -11938,7 +12241,7 @@ var MessagesRepository = class {
|
|
|
11938
12241
|
* Get message by ID
|
|
11939
12242
|
*/
|
|
11940
12243
|
async findById(messageId) {
|
|
11941
|
-
const row = await select(this.db).from(messages3).where((0,
|
|
12244
|
+
const row = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).one();
|
|
11942
12245
|
return row ? this.rowToMessage(row) : null;
|
|
11943
12246
|
}
|
|
11944
12247
|
/**
|
|
@@ -11947,19 +12250,19 @@ var MessagesRepository = class {
|
|
|
11947
12250
|
async findAll(filter) {
|
|
11948
12251
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
11949
12252
|
const conditions = [];
|
|
11950
|
-
if (filter?.sessionId) conditions.push((0,
|
|
12253
|
+
if (filter?.sessionId) conditions.push((0, import_drizzle_orm25.eq)(messages3.session_id, filter.sessionId));
|
|
11951
12254
|
if (filter?.sessionIds !== void 0)
|
|
11952
|
-
conditions.push((0,
|
|
11953
|
-
if (filter?.taskId) conditions.push((0,
|
|
11954
|
-
if (filter?.type) conditions.push((0,
|
|
11955
|
-
if (filter?.role) conditions.push((0,
|
|
12255
|
+
conditions.push((0, import_drizzle_orm25.inArray)(messages3.session_id, filter.sessionIds));
|
|
12256
|
+
if (filter?.taskId) conditions.push((0, import_drizzle_orm25.eq)(messages3.task_id, filter.taskId));
|
|
12257
|
+
if (filter?.type) conditions.push((0, import_drizzle_orm25.eq)(messages3.type, filter.type));
|
|
12258
|
+
if (filter?.role) conditions.push((0, import_drizzle_orm25.eq)(messages3.role, filter.role));
|
|
11956
12259
|
if (filter?.visibleToUserId) {
|
|
11957
12260
|
conditions.push(
|
|
11958
12261
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, messages3.session_id)
|
|
11959
12262
|
);
|
|
11960
12263
|
}
|
|
11961
12264
|
let query = select(this.db).from(messages3);
|
|
11962
|
-
if (conditions.length > 0) query = query.where((0,
|
|
12265
|
+
if (conditions.length > 0) query = query.where((0, import_drizzle_orm25.and)(...conditions));
|
|
11963
12266
|
const rows = await query.orderBy(messages3.index).all();
|
|
11964
12267
|
return rows.map((r) => this.rowToMessage(r));
|
|
11965
12268
|
}
|
|
@@ -11967,21 +12270,21 @@ var MessagesRepository = class {
|
|
|
11967
12270
|
* Get all messages for a session (ordered by index)
|
|
11968
12271
|
*/
|
|
11969
12272
|
async findBySessionId(sessionId) {
|
|
11970
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
12273
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
11971
12274
|
return rows.map((r) => this.rowToMessage(r));
|
|
11972
12275
|
}
|
|
11973
12276
|
/**
|
|
11974
12277
|
* Get all messages for a session filtered by type (ordered by index)
|
|
11975
12278
|
*/
|
|
11976
12279
|
async findBySessionIdAndType(sessionId, type) {
|
|
11977
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
12280
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.and)((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId), (0, import_drizzle_orm25.eq)(messages3.type, type))).orderBy(messages3.index).all();
|
|
11978
12281
|
return rows.map((r) => this.rowToMessage(r));
|
|
11979
12282
|
}
|
|
11980
12283
|
/**
|
|
11981
12284
|
* Get all messages for a task (ordered by index)
|
|
11982
12285
|
*/
|
|
11983
12286
|
async findByTaskId(taskId) {
|
|
11984
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
12287
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.task_id, taskId)).orderBy(messages3.index).all();
|
|
11985
12288
|
return rows.map((r) => this.rowToMessage(r));
|
|
11986
12289
|
}
|
|
11987
12290
|
/**
|
|
@@ -11989,7 +12292,7 @@ var MessagesRepository = class {
|
|
|
11989
12292
|
* Used for task message_range queries
|
|
11990
12293
|
*/
|
|
11991
12294
|
async findByRange(sessionId, startIndex, endIndex) {
|
|
11992
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
12295
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
11993
12296
|
return rows.filter((r) => r.index >= startIndex && r.index <= endIndex).map((r) => this.rowToMessage(r));
|
|
11994
12297
|
}
|
|
11995
12298
|
/**
|
|
@@ -12002,33 +12305,33 @@ var MessagesRepository = class {
|
|
|
12002
12305
|
}
|
|
12003
12306
|
const updated = { ...existing, ...updates };
|
|
12004
12307
|
const row = this.messageToRow(updated);
|
|
12005
|
-
const result = await update(this.db, messages3).set(row).where((0,
|
|
12308
|
+
const result = await update(this.db, messages3).set(row).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).returning().one();
|
|
12006
12309
|
return this.rowToMessage(result);
|
|
12007
12310
|
}
|
|
12008
12311
|
/**
|
|
12009
12312
|
* Update message task assignment
|
|
12010
12313
|
*/
|
|
12011
12314
|
async assignToTask(messageId, taskId) {
|
|
12012
|
-
const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0,
|
|
12315
|
+
const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).returning().one();
|
|
12013
12316
|
return this.rowToMessage(updated);
|
|
12014
12317
|
}
|
|
12015
12318
|
/**
|
|
12016
12319
|
* Delete all messages for a session (cascades automatically via FK)
|
|
12017
12320
|
*/
|
|
12018
12321
|
async deleteBySessionId(sessionId) {
|
|
12019
|
-
await deleteFrom(this.db, messages3).where((0,
|
|
12322
|
+
await deleteFrom(this.db, messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).run();
|
|
12020
12323
|
}
|
|
12021
12324
|
/**
|
|
12022
12325
|
* Delete a single message
|
|
12023
12326
|
*/
|
|
12024
12327
|
async delete(messageId) {
|
|
12025
|
-
await deleteFrom(this.db, messages3).where((0,
|
|
12328
|
+
await deleteFrom(this.db, messages3).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).run();
|
|
12026
12329
|
}
|
|
12027
12330
|
};
|
|
12028
12331
|
|
|
12029
12332
|
// src/db/repositories/repos.ts
|
|
12030
12333
|
init_cjs_shims();
|
|
12031
|
-
var
|
|
12334
|
+
var import_drizzle_orm26 = require("drizzle-orm");
|
|
12032
12335
|
|
|
12033
12336
|
// src/config/variant-resolver.ts
|
|
12034
12337
|
init_cjs_shims();
|
|
@@ -12178,7 +12481,7 @@ var RepoRepository = class {
|
|
|
12178
12481
|
*/
|
|
12179
12482
|
async resolveId(id) {
|
|
12180
12483
|
return resolveByShortIdPrefix(id, "Repo", async (pattern) => {
|
|
12181
|
-
const rows = await select(this.db).from(repos3).where((0,
|
|
12484
|
+
const rows = await select(this.db).from(repos3).where((0, import_drizzle_orm26.like)(repos3.repo_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
12182
12485
|
return rows.map((r) => r.repo_id);
|
|
12183
12486
|
});
|
|
12184
12487
|
}
|
|
@@ -12189,7 +12492,7 @@ var RepoRepository = class {
|
|
|
12189
12492
|
try {
|
|
12190
12493
|
const insertData = this.repoToInsert(data);
|
|
12191
12494
|
await insert(this.db, repos3).values(insertData).run();
|
|
12192
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
12495
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, insertData.repo_id)).one();
|
|
12193
12496
|
if (!row) {
|
|
12194
12497
|
throw new RepositoryError("Failed to retrieve created repo");
|
|
12195
12498
|
}
|
|
@@ -12208,7 +12511,7 @@ var RepoRepository = class {
|
|
|
12208
12511
|
async findById(id) {
|
|
12209
12512
|
try {
|
|
12210
12513
|
const fullId = await this.resolveId(id);
|
|
12211
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
12514
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
|
|
12212
12515
|
return row ? this.rowToRepo(row) : null;
|
|
12213
12516
|
} catch (error) {
|
|
12214
12517
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -12224,7 +12527,7 @@ var RepoRepository = class {
|
|
|
12224
12527
|
*/
|
|
12225
12528
|
async findBySlug(slug) {
|
|
12226
12529
|
try {
|
|
12227
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
12530
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.slug, slug)).one();
|
|
12228
12531
|
return row ? this.rowToRepo(row) : null;
|
|
12229
12532
|
} catch (error) {
|
|
12230
12533
|
throw new RepositoryError(
|
|
@@ -12292,8 +12595,8 @@ var RepoRepository = class {
|
|
|
12292
12595
|
let changed = 0;
|
|
12293
12596
|
for (const finding of scan.findings) {
|
|
12294
12597
|
await this.db.transaction(async (tx) => {
|
|
12295
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
12296
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
12598
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id));
|
|
12599
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id)).one();
|
|
12297
12600
|
if (!currentRow) return;
|
|
12298
12601
|
const data = currentRow.data;
|
|
12299
12602
|
if (typeof data.remote_url !== "string" || !httpUrlHasUserinfo(data.remote_url)) {
|
|
@@ -12305,7 +12608,7 @@ var RepoRepository = class {
|
|
|
12305
12608
|
...data,
|
|
12306
12609
|
remote_url: stripHttpUrlUserinfo(data.remote_url)
|
|
12307
12610
|
}
|
|
12308
|
-
}).where((0,
|
|
12611
|
+
}).where((0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id)).run();
|
|
12309
12612
|
changed += 1;
|
|
12310
12613
|
});
|
|
12311
12614
|
}
|
|
@@ -12327,8 +12630,8 @@ var RepoRepository = class {
|
|
|
12327
12630
|
try {
|
|
12328
12631
|
const fullId = await this.resolveId(id);
|
|
12329
12632
|
return await this.db.transaction(async (tx) => {
|
|
12330
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
12331
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
12633
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, fullId));
|
|
12634
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
|
|
12332
12635
|
if (!currentRow) {
|
|
12333
12636
|
throw new EntityNotFoundError("Repo", id);
|
|
12334
12637
|
}
|
|
@@ -12342,7 +12645,7 @@ var RepoRepository = class {
|
|
|
12342
12645
|
repo_type: insertData.repo_type,
|
|
12343
12646
|
unix_group: merged.unix_group ?? null,
|
|
12344
12647
|
data: insertData.data
|
|
12345
|
-
}).where((0,
|
|
12648
|
+
}).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
|
|
12346
12649
|
merged.clone_error = insertData.data.clone_error;
|
|
12347
12650
|
merged.remote_url = insertData.data.remote_url;
|
|
12348
12651
|
merged.last_updated = newUpdatedAt.toISOString();
|
|
@@ -12376,8 +12679,8 @@ var RepoRepository = class {
|
|
|
12376
12679
|
try {
|
|
12377
12680
|
const fullId = await this.resolveId(id);
|
|
12378
12681
|
return await this.db.transaction(async (tx) => {
|
|
12379
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
12380
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
12682
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, fullId));
|
|
12683
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
|
|
12381
12684
|
if (!currentRow) {
|
|
12382
12685
|
throw new EntityNotFoundError("Repo", id);
|
|
12383
12686
|
}
|
|
@@ -12391,7 +12694,7 @@ var RepoRepository = class {
|
|
|
12391
12694
|
repo_type: insertData.repo_type,
|
|
12392
12695
|
unix_group: next.unix_group ?? null,
|
|
12393
12696
|
data: insertData.data
|
|
12394
|
-
}).where((0,
|
|
12697
|
+
}).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
|
|
12395
12698
|
next.environment = insertData.data.environment;
|
|
12396
12699
|
next.environment_config = insertData.data.environment_config;
|
|
12397
12700
|
next.remote_url = insertData.data.remote_url;
|
|
@@ -12431,7 +12734,7 @@ var RepoRepository = class {
|
|
|
12431
12734
|
async delete(id) {
|
|
12432
12735
|
try {
|
|
12433
12736
|
const fullId = await this.resolveId(id);
|
|
12434
|
-
const result = await deleteFrom(this.db, repos3).where((0,
|
|
12737
|
+
const result = await deleteFrom(this.db, repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
|
|
12435
12738
|
if (result.rowsAffected === 0) {
|
|
12436
12739
|
throw new EntityNotFoundError("Repo", id);
|
|
12437
12740
|
}
|
|
@@ -12462,7 +12765,7 @@ var RepoRepository = class {
|
|
|
12462
12765
|
*/
|
|
12463
12766
|
async count() {
|
|
12464
12767
|
try {
|
|
12465
|
-
const result = await select(this.db, { count:
|
|
12768
|
+
const result = await select(this.db, { count: import_drizzle_orm26.sql`count(*)` }).from(repos3).one();
|
|
12466
12769
|
return result?.count ?? 0;
|
|
12467
12770
|
} catch (error) {
|
|
12468
12771
|
throw new RepositoryError(
|
|
@@ -12475,7 +12778,7 @@ var RepoRepository = class {
|
|
|
12475
12778
|
|
|
12476
12779
|
// src/db/repositories/schedules.ts
|
|
12477
12780
|
init_cjs_shims();
|
|
12478
|
-
var
|
|
12781
|
+
var import_drizzle_orm27 = require("drizzle-orm");
|
|
12479
12782
|
init_ids();
|
|
12480
12783
|
init_database_wrapper();
|
|
12481
12784
|
init_schema();
|
|
@@ -12554,7 +12857,7 @@ var ScheduleRepository = class {
|
|
|
12554
12857
|
*/
|
|
12555
12858
|
async resolveId(id) {
|
|
12556
12859
|
return resolveByShortIdPrefix(id, "Schedule", async (pattern) => {
|
|
12557
|
-
const rows = await select(this.db).from(schedules3).where((0,
|
|
12860
|
+
const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.like)(schedules3.schedule_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
12558
12861
|
return rows.map((r) => r.schedule_id);
|
|
12559
12862
|
});
|
|
12560
12863
|
}
|
|
@@ -12577,7 +12880,7 @@ var ScheduleRepository = class {
|
|
|
12577
12880
|
async findById(id) {
|
|
12578
12881
|
try {
|
|
12579
12882
|
const fullId = await this.resolveId(id);
|
|
12580
|
-
const row = await select(this.db).from(schedules3).where((0,
|
|
12883
|
+
const row = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).one();
|
|
12581
12884
|
if (!row) return null;
|
|
12582
12885
|
return this.rowToSchedule(row);
|
|
12583
12886
|
} catch (error) {
|
|
@@ -12594,18 +12897,18 @@ var ScheduleRepository = class {
|
|
|
12594
12897
|
*/
|
|
12595
12898
|
async findAll(filter) {
|
|
12596
12899
|
const conditions = [];
|
|
12597
|
-
if (filter?.branch_id) conditions.push((0,
|
|
12598
|
-
if (filter?.enabled !== void 0) conditions.push((0,
|
|
12599
|
-
if (filter?.created_by) conditions.push((0,
|
|
12900
|
+
if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
|
|
12901
|
+
if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
|
|
12902
|
+
if (filter?.created_by) conditions.push((0, import_drizzle_orm27.eq)(schedules3.created_by, filter.created_by));
|
|
12600
12903
|
const query = select(this.db).from(schedules3);
|
|
12601
|
-
const rows = conditions.length > 0 ? await query.where((0,
|
|
12904
|
+
const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm27.and)(...conditions)).all() : await query.all();
|
|
12602
12905
|
return rows.map((row) => this.rowToSchedule(row));
|
|
12603
12906
|
}
|
|
12604
12907
|
/**
|
|
12605
12908
|
* All schedules on a branch (newest first by created_at).
|
|
12606
12909
|
*/
|
|
12607
12910
|
async findByBranchId(branchId) {
|
|
12608
|
-
const rows = await select(this.db).from(schedules3).where((0,
|
|
12911
|
+
const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.branch_id, branchId)).orderBy((0, import_drizzle_orm27.desc)(schedules3.created_at)).all();
|
|
12609
12912
|
return rows.map((row) => this.rowToSchedule(row));
|
|
12610
12913
|
}
|
|
12611
12914
|
/**
|
|
@@ -12621,13 +12924,13 @@ var ScheduleRepository = class {
|
|
|
12621
12924
|
* Uses the `schedules_enabled_next_run_idx` covering index.
|
|
12622
12925
|
*/
|
|
12623
12926
|
dueCondition(now) {
|
|
12624
|
-
return (0,
|
|
12625
|
-
(0,
|
|
12626
|
-
(0,
|
|
12927
|
+
return (0, import_drizzle_orm27.and)(
|
|
12928
|
+
(0, import_drizzle_orm27.eq)(schedules3.enabled, true),
|
|
12929
|
+
(0, import_drizzle_orm27.or)((0, import_drizzle_orm27.isNull)(schedules3.next_run_at), (0, import_drizzle_orm27.lte)(schedules3.next_run_at, now))
|
|
12627
12930
|
);
|
|
12628
12931
|
}
|
|
12629
12932
|
async findDue(now = Date.now()) {
|
|
12630
|
-
const rows = await select(this.db).from(schedules3).where(this.dueCondition(now)).orderBy((0,
|
|
12933
|
+
const rows = await select(this.db).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm27.asc)(schedules3.next_run_at)).all();
|
|
12631
12934
|
return rows.map((row) => this.rowToSchedule(row));
|
|
12632
12935
|
}
|
|
12633
12936
|
/**
|
|
@@ -12638,7 +12941,7 @@ var ScheduleRepository = class {
|
|
|
12638
12941
|
async findDueRefs(now = Date.now()) {
|
|
12639
12942
|
const tenantColumn = schedules3.tenant_id;
|
|
12640
12943
|
const columns = isPostgresDatabase(this.db) && tenantColumn ? { schedule_id: schedules3.schedule_id, tenant_id: tenantColumn } : { schedule_id: schedules3.schedule_id };
|
|
12641
|
-
const rows = await select(this.db, columns).from(schedules3).where(this.dueCondition(now)).orderBy((0,
|
|
12944
|
+
const rows = await select(this.db, columns).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm27.asc)(schedules3.next_run_at)).all();
|
|
12642
12945
|
return rows.map((row) => ({
|
|
12643
12946
|
schedule_id: row.schedule_id,
|
|
12644
12947
|
...typeof row.tenant_id === "string" && row.tenant_id.length > 0 ? { tenant_id: row.tenant_id } : {}
|
|
@@ -12656,13 +12959,13 @@ var ScheduleRepository = class {
|
|
|
12656
12959
|
*/
|
|
12657
12960
|
async findAccessibleSchedules(userId, filter) {
|
|
12658
12961
|
const conditions = [visibleBranchAccessCondition(this.db, userId)];
|
|
12659
|
-
if (filter?.branch_id) conditions.push((0,
|
|
12660
|
-
if (filter?.enabled !== void 0) conditions.push((0,
|
|
12661
|
-
if (filter?.created_by) conditions.push((0,
|
|
12662
|
-
const results = await select(this.db).from(schedules3).innerJoin(branches3, (0,
|
|
12962
|
+
if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
|
|
12963
|
+
if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
|
|
12964
|
+
if (filter?.created_by) conditions.push((0, import_drizzle_orm27.eq)(schedules3.created_by, filter.created_by));
|
|
12965
|
+
const results = await select(this.db).from(schedules3).innerJoin(branches3, (0, import_drizzle_orm27.eq)(schedules3.branch_id, branches3.branch_id)).leftJoin(
|
|
12663
12966
|
branchOwners3,
|
|
12664
|
-
(0,
|
|
12665
|
-
).where((0,
|
|
12967
|
+
(0, import_drizzle_orm27.and)((0, import_drizzle_orm27.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm27.eq)(branchOwners3.user_id, userId))
|
|
12968
|
+
).where((0, import_drizzle_orm27.and)(...conditions)).all();
|
|
12666
12969
|
const seen = /* @__PURE__ */ new Set();
|
|
12667
12970
|
const out = [];
|
|
12668
12971
|
for (const r of results) {
|
|
@@ -12683,8 +12986,8 @@ var ScheduleRepository = class {
|
|
|
12683
12986
|
async update(id, updates) {
|
|
12684
12987
|
const fullId = await this.resolveId(id);
|
|
12685
12988
|
return await this.db.transaction(async (tx) => {
|
|
12686
|
-
await lockRowForUpdate(txAsDb(tx), this.db, schedules3, (0,
|
|
12687
|
-
const currentRow = await select(txAsDb(tx)).from(schedules3).where((0,
|
|
12989
|
+
await lockRowForUpdate(txAsDb(tx), this.db, schedules3, (0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId));
|
|
12990
|
+
const currentRow = await select(txAsDb(tx)).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).one();
|
|
12688
12991
|
if (!currentRow) throw new EntityNotFoundError("Schedule", id);
|
|
12689
12992
|
const current = this.rowToSchedule(currentRow);
|
|
12690
12993
|
const merged = deepMerge(current, {
|
|
@@ -12698,13 +13001,13 @@ var ScheduleRepository = class {
|
|
|
12698
13001
|
});
|
|
12699
13002
|
const insertData = this.scheduleToInsert(merged);
|
|
12700
13003
|
insertData.updated_at = /* @__PURE__ */ new Date();
|
|
12701
|
-
const row = await update(txAsDb(tx), schedules3).set(insertData).where((0,
|
|
13004
|
+
const row = await update(txAsDb(tx), schedules3).set(insertData).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).returning().one();
|
|
12702
13005
|
return this.rowToSchedule(row);
|
|
12703
13006
|
});
|
|
12704
13007
|
}
|
|
12705
13008
|
async delete(id) {
|
|
12706
13009
|
const fullId = await this.resolveId(id);
|
|
12707
|
-
const result = await deleteFrom(this.db, schedules3).where((0,
|
|
13010
|
+
const result = await deleteFrom(this.db, schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).run();
|
|
12708
13011
|
if (result.rowsAffected === 0) throw new EntityNotFoundError("Schedule", id);
|
|
12709
13012
|
}
|
|
12710
13013
|
/**
|
|
@@ -12712,17 +13015,17 @@ var ScheduleRepository = class {
|
|
|
12712
13015
|
*/
|
|
12713
13016
|
async count(filter) {
|
|
12714
13017
|
const conditions = [];
|
|
12715
|
-
if (filter?.branch_id) conditions.push((0,
|
|
12716
|
-
if (filter?.enabled !== void 0) conditions.push((0,
|
|
12717
|
-
const query = select(this.db, { count:
|
|
12718
|
-
const row = conditions.length > 0 ? await query.where((0,
|
|
13018
|
+
if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
|
|
13019
|
+
if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
|
|
13020
|
+
const query = select(this.db, { count: import_drizzle_orm27.sql`count(*)` }).from(schedules3);
|
|
13021
|
+
const row = conditions.length > 0 ? await query.where((0, import_drizzle_orm27.and)(...conditions)).one() : await query.one();
|
|
12719
13022
|
return Number(row?.count ?? 0);
|
|
12720
13023
|
}
|
|
12721
13024
|
};
|
|
12722
13025
|
|
|
12723
13026
|
// src/db/repositories/serialized-sessions.ts
|
|
12724
13027
|
init_cjs_shims();
|
|
12725
|
-
var
|
|
13028
|
+
var import_drizzle_orm28 = require("drizzle-orm");
|
|
12726
13029
|
init_ids();
|
|
12727
13030
|
init_database_wrapper();
|
|
12728
13031
|
init_schema();
|
|
@@ -12749,8 +13052,8 @@ var SerializedSessionRepository = class {
|
|
|
12749
13052
|
async findLatestDone(sessionId) {
|
|
12750
13053
|
try {
|
|
12751
13054
|
const row = await select(this.db).from(serializedSessions3).where(
|
|
12752
|
-
(0,
|
|
12753
|
-
).orderBy((0,
|
|
13055
|
+
(0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId), (0, import_drizzle_orm28.eq)(serializedSessions3.status, "done"))
|
|
13056
|
+
).orderBy((0, import_drizzle_orm28.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm28.desc)(serializedSessions3.created_at)).limit(1).one();
|
|
12754
13057
|
return row ? rowToSerializedSession(row) : null;
|
|
12755
13058
|
} catch (error) {
|
|
12756
13059
|
throw new RepositoryError(
|
|
@@ -12764,7 +13067,7 @@ var SerializedSessionRepository = class {
|
|
|
12764
13067
|
*/
|
|
12765
13068
|
async findLatest(sessionId) {
|
|
12766
13069
|
try {
|
|
12767
|
-
const row = await select(this.db).from(serializedSessions3).where((0,
|
|
13070
|
+
const row = await select(this.db).from(serializedSessions3).where((0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId)).orderBy((0, import_drizzle_orm28.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm28.desc)(serializedSessions3.created_at)).limit(1).one();
|
|
12768
13071
|
return row ? rowToSerializedSession(row) : null;
|
|
12769
13072
|
} catch (error) {
|
|
12770
13073
|
throw new RepositoryError(
|
|
@@ -12815,7 +13118,7 @@ var SerializedSessionRepository = class {
|
|
|
12815
13118
|
*/
|
|
12816
13119
|
async markDone(id, payload) {
|
|
12817
13120
|
try {
|
|
12818
|
-
await update(this.db, serializedSessions3).set({ status: "done", payload }).where((0,
|
|
13121
|
+
await update(this.db, serializedSessions3).set({ status: "done", payload }).where((0, import_drizzle_orm28.eq)(serializedSessions3.id, id)).run();
|
|
12819
13122
|
} catch (error) {
|
|
12820
13123
|
throw new RepositoryError(
|
|
12821
13124
|
`Failed to mark serialized session as done: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -12828,7 +13131,7 @@ var SerializedSessionRepository = class {
|
|
|
12828
13131
|
*/
|
|
12829
13132
|
async deleteById(id) {
|
|
12830
13133
|
try {
|
|
12831
|
-
await deleteFrom(this.db, serializedSessions3).where((0,
|
|
13134
|
+
await deleteFrom(this.db, serializedSessions3).where((0, import_drizzle_orm28.eq)(serializedSessions3.id, id)).run();
|
|
12832
13135
|
} catch (error) {
|
|
12833
13136
|
throw new RepositoryError(
|
|
12834
13137
|
`Failed to delete serialized session: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -12843,9 +13146,9 @@ var SerializedSessionRepository = class {
|
|
|
12843
13146
|
async deletePreviousTurns(sessionId, beforeTurnIndex) {
|
|
12844
13147
|
try {
|
|
12845
13148
|
await deleteFrom(this.db, serializedSessions3).where(
|
|
12846
|
-
(0,
|
|
12847
|
-
(0,
|
|
12848
|
-
(0,
|
|
13149
|
+
(0, import_drizzle_orm28.and)(
|
|
13150
|
+
(0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId),
|
|
13151
|
+
(0, import_drizzle_orm28.lt)(serializedSessions3.turn_index, beforeTurnIndex)
|
|
12849
13152
|
)
|
|
12850
13153
|
).run();
|
|
12851
13154
|
} catch (error) {
|
|
@@ -12857,115 +13160,16 @@ var SerializedSessionRepository = class {
|
|
|
12857
13160
|
}
|
|
12858
13161
|
};
|
|
12859
13162
|
|
|
12860
|
-
// src/db/repositories/session-env-selections.ts
|
|
12861
|
-
init_cjs_shims();
|
|
12862
|
-
var import_drizzle_orm27 = require("drizzle-orm");
|
|
12863
|
-
init_database_wrapper();
|
|
12864
|
-
init_schema();
|
|
12865
|
-
var SessionEnvSelectionRepository = class {
|
|
12866
|
-
constructor(db) {
|
|
12867
|
-
this.db = db;
|
|
12868
|
-
}
|
|
12869
|
-
/** Shared SELECT for a session's rows — single source of truth for reads. */
|
|
12870
|
-
async fetchRows(sessionId) {
|
|
12871
|
-
try {
|
|
12872
|
-
return await select(this.db).from(sessionEnvSelections3).where((0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId)).all();
|
|
12873
|
-
} catch (error) {
|
|
12874
|
-
throw new RepositoryError(
|
|
12875
|
-
`Failed to list session env selections: ${error instanceof Error ? error.message : String(error)}`,
|
|
12876
|
-
error
|
|
12877
|
-
);
|
|
12878
|
-
}
|
|
12879
|
-
}
|
|
12880
|
-
/** List selected env var names for a session (not hydrated). */
|
|
12881
|
-
async listNames(sessionId) {
|
|
12882
|
-
const rows = await this.fetchRows(sessionId);
|
|
12883
|
-
return rows.map((r) => r.env_var_name);
|
|
12884
|
-
}
|
|
12885
|
-
/** Return a Set for fast membership checks in the env resolver. */
|
|
12886
|
-
async asSet(sessionId) {
|
|
12887
|
-
const names = await this.listNames(sessionId);
|
|
12888
|
-
return new Set(names);
|
|
12889
|
-
}
|
|
12890
|
-
/** Full rows with timestamps — for the REST API response. */
|
|
12891
|
-
async list(sessionId) {
|
|
12892
|
-
const rows = await this.fetchRows(sessionId);
|
|
12893
|
-
return rows.map((r) => ({
|
|
12894
|
-
session_id: r.session_id,
|
|
12895
|
-
env_var_name: r.env_var_name,
|
|
12896
|
-
created_at: new Date(r.created_at)
|
|
12897
|
-
}));
|
|
12898
|
-
}
|
|
12899
|
-
/** Add a selection. No-op if it already exists. */
|
|
12900
|
-
async add(sessionId, envVarName) {
|
|
12901
|
-
try {
|
|
12902
|
-
const existing = await select(this.db).from(sessionEnvSelections3).where(
|
|
12903
|
-
(0, import_drizzle_orm27.and)(
|
|
12904
|
-
(0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId),
|
|
12905
|
-
(0, import_drizzle_orm27.eq)(sessionEnvSelections3.env_var_name, envVarName)
|
|
12906
|
-
)
|
|
12907
|
-
).one();
|
|
12908
|
-
if (existing) return;
|
|
12909
|
-
await insert(this.db, sessionEnvSelections3).values({
|
|
12910
|
-
session_id: sessionId,
|
|
12911
|
-
env_var_name: envVarName,
|
|
12912
|
-
created_at: /* @__PURE__ */ new Date()
|
|
12913
|
-
}).run();
|
|
12914
|
-
} catch (error) {
|
|
12915
|
-
throw new RepositoryError(
|
|
12916
|
-
`Failed to add session env selection: ${error instanceof Error ? error.message : String(error)}`,
|
|
12917
|
-
error
|
|
12918
|
-
);
|
|
12919
|
-
}
|
|
12920
|
-
}
|
|
12921
|
-
/** Remove a selection. No-op if it doesn't exist. */
|
|
12922
|
-
async remove(sessionId, envVarName) {
|
|
12923
|
-
try {
|
|
12924
|
-
await deleteFrom(this.db, sessionEnvSelections3).where(
|
|
12925
|
-
(0, import_drizzle_orm27.and)(
|
|
12926
|
-
(0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId),
|
|
12927
|
-
(0, import_drizzle_orm27.eq)(sessionEnvSelections3.env_var_name, envVarName)
|
|
12928
|
-
)
|
|
12929
|
-
).run();
|
|
12930
|
-
} catch (error) {
|
|
12931
|
-
throw new RepositoryError(
|
|
12932
|
-
`Failed to remove session env selection: ${error instanceof Error ? error.message : String(error)}`,
|
|
12933
|
-
error
|
|
12934
|
-
);
|
|
12935
|
-
}
|
|
12936
|
-
}
|
|
12937
|
-
/** Bulk replace — deletes all existing rows, inserts the new set. */
|
|
12938
|
-
async setAll(sessionId, envVarNames) {
|
|
12939
|
-
try {
|
|
12940
|
-
await deleteFrom(this.db, sessionEnvSelections3).where((0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId)).run();
|
|
12941
|
-
if (envVarNames.length === 0) return;
|
|
12942
|
-
const now = /* @__PURE__ */ new Date();
|
|
12943
|
-
await insert(this.db, sessionEnvSelections3).values(
|
|
12944
|
-
envVarNames.map((name) => ({
|
|
12945
|
-
session_id: sessionId,
|
|
12946
|
-
env_var_name: name,
|
|
12947
|
-
created_at: now
|
|
12948
|
-
}))
|
|
12949
|
-
).run();
|
|
12950
|
-
} catch (error) {
|
|
12951
|
-
throw new RepositoryError(
|
|
12952
|
-
`Failed to set session env selections: ${error instanceof Error ? error.message : String(error)}`,
|
|
12953
|
-
error
|
|
12954
|
-
);
|
|
12955
|
-
}
|
|
12956
|
-
}
|
|
12957
|
-
};
|
|
12958
|
-
|
|
12959
13163
|
// src/db/repositories/session-mcp-servers.ts
|
|
12960
13164
|
init_cjs_shims();
|
|
12961
|
-
var
|
|
13165
|
+
var import_drizzle_orm30 = require("drizzle-orm");
|
|
12962
13166
|
init_database_wrapper();
|
|
12963
13167
|
init_schema();
|
|
12964
13168
|
|
|
12965
13169
|
// src/db/repositories/sessions.ts
|
|
12966
13170
|
init_cjs_shims();
|
|
12967
13171
|
init_types2();
|
|
12968
|
-
var
|
|
13172
|
+
var import_drizzle_orm29 = require("drizzle-orm");
|
|
12969
13173
|
init_config_manager();
|
|
12970
13174
|
init_ids();
|
|
12971
13175
|
init_database_wrapper();
|
|
@@ -12992,40 +13196,43 @@ var SessionRepository = class {
|
|
|
12992
13196
|
const sessionId = row.session_id;
|
|
12993
13197
|
const boardId = branchBoardId ?? null;
|
|
12994
13198
|
const url = baseUrl && boardId ? getSessionUrl(sessionId, baseUrl) : null;
|
|
12995
|
-
return
|
|
12996
|
-
|
|
12997
|
-
|
|
12998
|
-
|
|
12999
|
-
|
|
13000
|
-
|
|
13001
|
-
|
|
13002
|
-
|
|
13003
|
-
|
|
13004
|
-
|
|
13005
|
-
|
|
13006
|
-
|
|
13007
|
-
|
|
13008
|
-
|
|
13009
|
-
|
|
13010
|
-
|
|
13011
|
-
|
|
13012
|
-
|
|
13013
|
-
|
|
13014
|
-
|
|
13015
|
-
|
|
13199
|
+
return attachHiddenTenant(
|
|
13200
|
+
{
|
|
13201
|
+
session_id: sessionId,
|
|
13202
|
+
status: row.status,
|
|
13203
|
+
agentic_tool: row.agentic_tool,
|
|
13204
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
13205
|
+
last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
13206
|
+
created_by: row.created_by,
|
|
13207
|
+
unix_username: row.unix_username || null,
|
|
13208
|
+
branch_id: row.branch_id,
|
|
13209
|
+
branch_board_id: boardId,
|
|
13210
|
+
url,
|
|
13211
|
+
...row.data,
|
|
13212
|
+
tasks: row.data.tasks.map((id) => id),
|
|
13213
|
+
genealogy: {
|
|
13214
|
+
parent_session_id: row.parent_session_id,
|
|
13215
|
+
forked_from_session_id: row.forked_from_session_id,
|
|
13216
|
+
fork_point_task_id: genealogyData.fork_point_task_id,
|
|
13217
|
+
fork_point_message_index: genealogyData.fork_point_message_index,
|
|
13218
|
+
spawn_point_task_id: genealogyData.spawn_point_task_id,
|
|
13219
|
+
spawn_point_message_index: genealogyData.spawn_point_message_index,
|
|
13220
|
+
children: genealogyData.children.map((id) => id)
|
|
13221
|
+
},
|
|
13222
|
+
permission_config: row.data.permission_config,
|
|
13223
|
+
scheduled_run_at: row.scheduled_run_at ?? void 0,
|
|
13224
|
+
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
13225
|
+
schedule_id: row.schedule_id ?? void 0,
|
|
13226
|
+
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
13227
|
+
archived: Boolean(row.archived),
|
|
13228
|
+
// Convert SQLite integer (0/1) to boolean
|
|
13229
|
+
archived_reason: row.archived_reason ?? void 0,
|
|
13230
|
+
current_context_usage: row.data.current_context_usage,
|
|
13231
|
+
context_window_limit: row.data.context_window_limit,
|
|
13232
|
+
last_context_update_at: row.data.last_context_update_at
|
|
13016
13233
|
},
|
|
13017
|
-
|
|
13018
|
-
|
|
13019
|
-
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
13020
|
-
schedule_id: row.schedule_id ?? void 0,
|
|
13021
|
-
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
13022
|
-
archived: Boolean(row.archived),
|
|
13023
|
-
// Convert SQLite integer (0/1) to boolean
|
|
13024
|
-
archived_reason: row.archived_reason ?? void 0,
|
|
13025
|
-
current_context_usage: row.data.current_context_usage,
|
|
13026
|
-
context_window_limit: row.data.context_window_limit,
|
|
13027
|
-
last_context_update_at: row.data.last_context_update_at
|
|
13028
|
-
};
|
|
13234
|
+
row
|
|
13235
|
+
);
|
|
13029
13236
|
}
|
|
13030
13237
|
/**
|
|
13031
13238
|
* Convert Session to database insert format
|
|
@@ -13101,7 +13308,7 @@ var SessionRepository = class {
|
|
|
13101
13308
|
*/
|
|
13102
13309
|
async resolveId(id) {
|
|
13103
13310
|
return resolveByShortIdPrefix(id, "Session", async (pattern) => {
|
|
13104
|
-
const rows = await select(this.db).from(sessions3).where((0,
|
|
13311
|
+
const rows = await select(this.db).from(sessions3).where((0, import_drizzle_orm29.like)(sessions3.session_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
13105
13312
|
return rows.map((r) => r.session_id);
|
|
13106
13313
|
});
|
|
13107
13314
|
}
|
|
@@ -13113,7 +13320,7 @@ var SessionRepository = class {
|
|
|
13113
13320
|
const insertData = this.sessionToInsert(data);
|
|
13114
13321
|
await insert(this.db, sessions3).values(insertData).run();
|
|
13115
13322
|
const baseUrl = await getBaseUrl();
|
|
13116
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13323
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, insertData.session_id)).one();
|
|
13117
13324
|
if (!result) {
|
|
13118
13325
|
throw new RepositoryError("Failed to retrieve created session");
|
|
13119
13326
|
}
|
|
@@ -13138,7 +13345,7 @@ var SessionRepository = class {
|
|
|
13138
13345
|
try {
|
|
13139
13346
|
const fullId = await this.resolveId(id);
|
|
13140
13347
|
const baseUrl = await getBaseUrl();
|
|
13141
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13348
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
|
|
13142
13349
|
if (!result) {
|
|
13143
13350
|
return null;
|
|
13144
13351
|
}
|
|
@@ -13161,7 +13368,7 @@ var SessionRepository = class {
|
|
|
13161
13368
|
async findBranchIdBySessionId(id) {
|
|
13162
13369
|
try {
|
|
13163
13370
|
const fullId = await this.resolveId(id);
|
|
13164
|
-
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0,
|
|
13371
|
+
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
|
|
13165
13372
|
return row?.branch_id ?? null;
|
|
13166
13373
|
} catch (error) {
|
|
13167
13374
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -13172,6 +13379,26 @@ var SessionRepository = class {
|
|
|
13172
13379
|
);
|
|
13173
13380
|
}
|
|
13174
13381
|
}
|
|
13382
|
+
/**
|
|
13383
|
+
* Resolve the owning user id for a session without hydrating the full row.
|
|
13384
|
+
* Used by realtime delivery to offer streaming events to the session
|
|
13385
|
+
* creator's own connections as a fallback, so their open tabs keep updating
|
|
13386
|
+
* even before they subscribe to the per-session stream channel.
|
|
13387
|
+
*/
|
|
13388
|
+
async findCreatedByBySessionId(id) {
|
|
13389
|
+
try {
|
|
13390
|
+
const fullId = await this.resolveId(id);
|
|
13391
|
+
const row = await select(this.db, { created_by: sessions3.created_by }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
|
|
13392
|
+
return row?.created_by ?? null;
|
|
13393
|
+
} catch (error) {
|
|
13394
|
+
if (error instanceof EntityNotFoundError) return null;
|
|
13395
|
+
if (error instanceof AmbiguousIdError) throw error;
|
|
13396
|
+
throw new RepositoryError(
|
|
13397
|
+
`Failed to find session owner: ${error instanceof Error ? error.message : String(error)}`,
|
|
13398
|
+
error
|
|
13399
|
+
);
|
|
13400
|
+
}
|
|
13401
|
+
}
|
|
13175
13402
|
/**
|
|
13176
13403
|
* Find all sessions
|
|
13177
13404
|
*
|
|
@@ -13184,14 +13411,14 @@ var SessionRepository = class {
|
|
|
13184
13411
|
if (filter?.visibleToUserId) {
|
|
13185
13412
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
13186
13413
|
}
|
|
13187
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13414
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
13188
13415
|
branchOwners3,
|
|
13189
|
-
(0,
|
|
13190
|
-
(0,
|
|
13191
|
-
(0,
|
|
13416
|
+
(0, import_drizzle_orm29.and)(
|
|
13417
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
13418
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.user_id, filter.visibleToUserId)
|
|
13192
13419
|
)
|
|
13193
|
-
) : select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13194
|
-
const results = conditions.length > 0 ? await query.where((0,
|
|
13420
|
+
) : select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
|
|
13421
|
+
const results = conditions.length > 0 ? await query.where((0, import_drizzle_orm29.and)(...conditions)).all() : await query.all();
|
|
13195
13422
|
return results.map(
|
|
13196
13423
|
(result) => {
|
|
13197
13424
|
const sessionRow = result.sessions;
|
|
@@ -13214,7 +13441,7 @@ var SessionRepository = class {
|
|
|
13214
13441
|
async findByStatus(status) {
|
|
13215
13442
|
try {
|
|
13216
13443
|
const baseUrl = await getBaseUrl();
|
|
13217
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13444
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.status, status)).all();
|
|
13218
13445
|
return results.map(
|
|
13219
13446
|
(result) => {
|
|
13220
13447
|
const sessionRow = result.sessions;
|
|
@@ -13242,18 +13469,18 @@ var SessionRepository = class {
|
|
|
13242
13469
|
async findByBoard(boardId, filter) {
|
|
13243
13470
|
try {
|
|
13244
13471
|
const baseUrl = await getBaseUrl();
|
|
13245
|
-
const conditions = [(0,
|
|
13472
|
+
const conditions = [(0, import_drizzle_orm29.eq)(branches3.board_id, boardId)];
|
|
13246
13473
|
if (filter?.visibleToUserId) {
|
|
13247
13474
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
13248
13475
|
}
|
|
13249
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
13476
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
13250
13477
|
branchOwners3,
|
|
13251
|
-
(0,
|
|
13252
|
-
(0,
|
|
13253
|
-
(0,
|
|
13478
|
+
(0, import_drizzle_orm29.and)(
|
|
13479
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
13480
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.user_id, filter.visibleToUserId)
|
|
13254
13481
|
)
|
|
13255
|
-
) : select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
13256
|
-
const results = await query.where((0,
|
|
13482
|
+
) : select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
|
|
13483
|
+
const results = await query.where((0, import_drizzle_orm29.and)(...conditions)).all();
|
|
13257
13484
|
return results.map(
|
|
13258
13485
|
(result) => {
|
|
13259
13486
|
const sessionRow = result.sessions;
|
|
@@ -13289,38 +13516,38 @@ var SessionRepository = class {
|
|
|
13289
13516
|
try {
|
|
13290
13517
|
const baseUrl = await getBaseUrl();
|
|
13291
13518
|
const conditions = [];
|
|
13292
|
-
if (opts.boardId !== void 0) conditions.push((0,
|
|
13293
|
-
if (opts.archived !== void 0) conditions.push((0,
|
|
13519
|
+
if (opts.boardId !== void 0) conditions.push((0, import_drizzle_orm29.eq)(branches3.board_id, opts.boardId));
|
|
13520
|
+
if (opts.archived !== void 0) conditions.push((0, import_drizzle_orm29.eq)(sessions3.archived, opts.archived));
|
|
13294
13521
|
if (opts.visibleToUserId) {
|
|
13295
13522
|
conditions.push(visibleBranchAccessCondition(this.db, opts.visibleToUserId));
|
|
13296
13523
|
}
|
|
13297
|
-
const whereClause = conditions.length > 0 ? (0,
|
|
13298
|
-
let countQuery = select(this.db, { count:
|
|
13524
|
+
const whereClause = conditions.length > 0 ? (0, import_drizzle_orm29.and)(...conditions) : void 0;
|
|
13525
|
+
let countQuery = select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
|
|
13299
13526
|
if (opts.visibleToUserId) {
|
|
13300
13527
|
countQuery = countQuery.leftJoin(
|
|
13301
13528
|
branchOwners3,
|
|
13302
|
-
(0,
|
|
13303
|
-
(0,
|
|
13304
|
-
(0,
|
|
13529
|
+
(0, import_drizzle_orm29.and)(
|
|
13530
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
13531
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.user_id, opts.visibleToUserId)
|
|
13305
13532
|
)
|
|
13306
13533
|
);
|
|
13307
13534
|
}
|
|
13308
13535
|
const countRow = await (whereClause ? countQuery.where(whereClause) : countQuery).one();
|
|
13309
13536
|
const total = Number(countRow?.count ?? 0);
|
|
13310
|
-
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13537
|
+
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
|
|
13311
13538
|
if (opts.visibleToUserId) {
|
|
13312
13539
|
dataQuery = dataQuery.leftJoin(
|
|
13313
13540
|
branchOwners3,
|
|
13314
|
-
(0,
|
|
13315
|
-
(0,
|
|
13316
|
-
(0,
|
|
13541
|
+
(0, import_drizzle_orm29.and)(
|
|
13542
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
13543
|
+
(0, import_drizzle_orm29.eq)(branchOwners3.user_id, opts.visibleToUserId)
|
|
13317
13544
|
)
|
|
13318
13545
|
);
|
|
13319
13546
|
}
|
|
13320
13547
|
if (whereClause) dataQuery = dataQuery.where(whereClause);
|
|
13321
13548
|
if (opts.sortUpdatedAt !== void 0) {
|
|
13322
13549
|
dataQuery = dataQuery.orderBy(
|
|
13323
|
-
opts.sortUpdatedAt === -1 ? (0,
|
|
13550
|
+
opts.sortUpdatedAt === -1 ? (0, import_drizzle_orm29.desc)(sessions3.updated_at) : sessions3.updated_at
|
|
13324
13551
|
);
|
|
13325
13552
|
}
|
|
13326
13553
|
if (opts.limit !== void 0) dataQuery = dataQuery.limit(opts.limit);
|
|
@@ -13350,10 +13577,10 @@ var SessionRepository = class {
|
|
|
13350
13577
|
const fullId = await this.resolveId(sessionId);
|
|
13351
13578
|
const baseUrl = await getBaseUrl();
|
|
13352
13579
|
const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
|
|
13353
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13354
|
-
(0,
|
|
13355
|
-
|
|
13356
|
-
|
|
13580
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where(
|
|
13581
|
+
(0, import_drizzle_orm29.or)(
|
|
13582
|
+
import_drizzle_orm29.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
|
|
13583
|
+
import_drizzle_orm29.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
|
|
13357
13584
|
)
|
|
13358
13585
|
).all();
|
|
13359
13586
|
return results.map(
|
|
@@ -13419,8 +13646,8 @@ var SessionRepository = class {
|
|
|
13419
13646
|
const statusInfo = updates.status ? ` (status: ${updates.status}, ready_for_prompt: ${updates.ready_for_prompt})` : "";
|
|
13420
13647
|
console.debug(`\u{1F504} [SessionRepo] Updating session ${shortId(fullId)}${statusInfo}`);
|
|
13421
13648
|
const result = await this.db.transaction(async (tx) => {
|
|
13422
|
-
await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0,
|
|
13423
|
-
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0,
|
|
13649
|
+
await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0, import_drizzle_orm29.eq)(sessions3.session_id, fullId));
|
|
13650
|
+
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
|
|
13424
13651
|
if (!currentResult) {
|
|
13425
13652
|
throw new EntityNotFoundError("Session", id);
|
|
13426
13653
|
}
|
|
@@ -13433,12 +13660,12 @@ var SessionRepository = class {
|
|
|
13433
13660
|
if (shouldRefreshLastUpdated) {
|
|
13434
13661
|
insertData.updated_at = /* @__PURE__ */ new Date();
|
|
13435
13662
|
}
|
|
13436
|
-
await update(txAsDb(tx), sessions3).set(insertData).where((0,
|
|
13663
|
+
await update(txAsDb(tx), sessions3).set(insertData).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).run();
|
|
13437
13664
|
if (!insertData.updated_at) {
|
|
13438
13665
|
throw new RepositoryError("Session update did not produce an updated_at timestamp");
|
|
13439
13666
|
}
|
|
13440
13667
|
merged.last_updated = insertData.updated_at.toISOString();
|
|
13441
|
-
return merged;
|
|
13668
|
+
return attachHiddenTenant(merged, currentRow);
|
|
13442
13669
|
});
|
|
13443
13670
|
return result;
|
|
13444
13671
|
} catch (error) {
|
|
@@ -13456,8 +13683,8 @@ var SessionRepository = class {
|
|
|
13456
13683
|
async countMessages(sessionId) {
|
|
13457
13684
|
const fullId = await this.resolveId(sessionId);
|
|
13458
13685
|
const result = await select(this.db, {
|
|
13459
|
-
count:
|
|
13460
|
-
}).from(messages3).where((0,
|
|
13686
|
+
count: import_drizzle_orm29.sql`count(*)`
|
|
13687
|
+
}).from(messages3).where((0, import_drizzle_orm29.eq)(messages3.session_id, fullId)).one();
|
|
13461
13688
|
return Number(result?.count ?? 0);
|
|
13462
13689
|
}
|
|
13463
13690
|
/**
|
|
@@ -13466,7 +13693,7 @@ var SessionRepository = class {
|
|
|
13466
13693
|
async delete(id) {
|
|
13467
13694
|
try {
|
|
13468
13695
|
const fullId = await this.resolveId(id);
|
|
13469
|
-
const result = await deleteFrom(this.db, sessions3).where((0,
|
|
13696
|
+
const result = await deleteFrom(this.db, sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).run();
|
|
13470
13697
|
if (result.rowsAffected === 0) {
|
|
13471
13698
|
throw new EntityNotFoundError("Session", id);
|
|
13472
13699
|
}
|
|
@@ -13490,7 +13717,7 @@ var SessionRepository = class {
|
|
|
13490
13717
|
*/
|
|
13491
13718
|
async count() {
|
|
13492
13719
|
try {
|
|
13493
|
-
const result = await select(this.db, { count:
|
|
13720
|
+
const result = await select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).one();
|
|
13494
13721
|
return result?.count ?? 0;
|
|
13495
13722
|
} catch (error) {
|
|
13496
13723
|
throw new RepositoryError(
|
|
@@ -13513,8 +13740,8 @@ var SessionRepository = class {
|
|
|
13513
13740
|
async findScheduleRun(scheduleId, scheduledRunAt) {
|
|
13514
13741
|
try {
|
|
13515
13742
|
const baseUrl = await getBaseUrl();
|
|
13516
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13517
|
-
(0,
|
|
13743
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where(
|
|
13744
|
+
(0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm29.eq)(sessions3.scheduled_run_at, scheduledRunAt))
|
|
13518
13745
|
).one();
|
|
13519
13746
|
if (!result) return null;
|
|
13520
13747
|
const r = result;
|
|
@@ -13537,9 +13764,9 @@ var SessionRepository = class {
|
|
|
13537
13764
|
async findByScheduleId(scheduleId, opts = {}) {
|
|
13538
13765
|
try {
|
|
13539
13766
|
const baseUrl = await getBaseUrl();
|
|
13540
|
-
let query = select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
13767
|
+
let query = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId));
|
|
13541
13768
|
if (opts.orderByScheduledRunAt === "desc") {
|
|
13542
|
-
query = query.orderBy((0,
|
|
13769
|
+
query = query.orderBy((0, import_drizzle_orm29.desc)(sessions3.scheduled_run_at));
|
|
13543
13770
|
} else if (opts.orderByScheduledRunAt === "asc") {
|
|
13544
13771
|
query = query.orderBy(sessions3.scheduled_run_at);
|
|
13545
13772
|
}
|
|
@@ -13564,7 +13791,7 @@ var SessionRepository = class {
|
|
|
13564
13791
|
*/
|
|
13565
13792
|
async countByScheduleId(scheduleId) {
|
|
13566
13793
|
try {
|
|
13567
|
-
const result = await select(this.db, { count:
|
|
13794
|
+
const result = await select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId)).one();
|
|
13568
13795
|
return Number(result?.count ?? 0);
|
|
13569
13796
|
} catch (error) {
|
|
13570
13797
|
throw new RepositoryError(
|
|
@@ -13586,7 +13813,7 @@ var SessionRepository = class {
|
|
|
13586
13813
|
async existsInBranchWithStatuses(branchId, statuses) {
|
|
13587
13814
|
if (statuses.length === 0) return false;
|
|
13588
13815
|
try {
|
|
13589
|
-
const row = await select(this.db, { one:
|
|
13816
|
+
const row = await select(this.db, { one: import_drizzle_orm29.sql`1` }).from(sessions3).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.branch_id, branchId), (0, import_drizzle_orm29.inArray)(sessions3.status, [...statuses]))).limit(1).one();
|
|
13590
13817
|
return row != null;
|
|
13591
13818
|
} catch (error) {
|
|
13592
13819
|
throw new RepositoryError(
|
|
@@ -13602,7 +13829,7 @@ var SessionRepository = class {
|
|
|
13602
13829
|
async existsInScheduleWithStatuses(scheduleId, statuses) {
|
|
13603
13830
|
if (statuses.length === 0) return false;
|
|
13604
13831
|
try {
|
|
13605
|
-
const row = await select(this.db, { one:
|
|
13832
|
+
const row = await select(this.db, { one: import_drizzle_orm29.sql`1` }).from(sessions3).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm29.inArray)(sessions3.status, [...statuses]))).limit(1).one();
|
|
13606
13833
|
return row != null;
|
|
13607
13834
|
} catch (error) {
|
|
13608
13835
|
throw new RepositoryError(
|
|
@@ -13633,10 +13860,10 @@ var SessionRepository = class {
|
|
|
13633
13860
|
async findAccessibleSessions(userId, boardId) {
|
|
13634
13861
|
const baseUrl = await getBaseUrl();
|
|
13635
13862
|
const accessCondition = visibleBranchAccessCondition(this.db, userId);
|
|
13636
|
-
const whereCondition = boardId ? (0,
|
|
13637
|
-
const results = await select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
13863
|
+
const whereCondition = boardId ? (0, import_drizzle_orm29.and)(accessCondition, (0, import_drizzle_orm29.eq)(branches3.board_id, boardId)) : accessCondition;
|
|
13864
|
+
const results = await select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
13638
13865
|
branchOwners3,
|
|
13639
|
-
(0,
|
|
13866
|
+
(0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm29.eq)(branchOwners3.user_id, userId))
|
|
13640
13867
|
).where(whereCondition).all();
|
|
13641
13868
|
const seen = /* @__PURE__ */ new Set();
|
|
13642
13869
|
const sessionsOut = [];
|
|
@@ -13679,8 +13906,8 @@ var SessionRepository = class {
|
|
|
13679
13906
|
for (const sessionId of sessionIds) {
|
|
13680
13907
|
const query = select(this.db, {
|
|
13681
13908
|
data: messagesTable.data
|
|
13682
|
-
}).from(messagesTable).where((0,
|
|
13683
|
-
const lastMessage = await query.orderBy((0,
|
|
13909
|
+
}).from(messagesTable).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(messagesTable.session_id, sessionId), (0, import_drizzle_orm29.eq)(messagesTable.role, "assistant")));
|
|
13910
|
+
const lastMessage = await query.orderBy((0, import_drizzle_orm29.desc)(messagesTable.index)).limit(1).one();
|
|
13684
13911
|
if (lastMessage) {
|
|
13685
13912
|
const messageData = lastMessage.data;
|
|
13686
13913
|
let fullText = "";
|
|
@@ -13714,7 +13941,7 @@ var SessionRepository = class {
|
|
|
13714
13941
|
*/
|
|
13715
13942
|
async exists(sessionId) {
|
|
13716
13943
|
try {
|
|
13717
|
-
const row = await select(this.db).from(sessions3).where((0,
|
|
13944
|
+
const row = await select(this.db).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, sessionId)).one();
|
|
13718
13945
|
return row != null;
|
|
13719
13946
|
} catch (error) {
|
|
13720
13947
|
throw new RepositoryError(
|
|
@@ -13748,16 +13975,16 @@ var SessionMCPServerRepository = class {
|
|
|
13748
13975
|
throw new EntityNotFoundError("MCPServer", serverId);
|
|
13749
13976
|
}
|
|
13750
13977
|
const existing = await select(this.db).from(sessionMcpServers3).where(
|
|
13751
|
-
(0,
|
|
13752
|
-
(0,
|
|
13753
|
-
(0,
|
|
13978
|
+
(0, import_drizzle_orm30.and)(
|
|
13979
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
|
|
13980
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
|
|
13754
13981
|
)
|
|
13755
13982
|
).one();
|
|
13756
13983
|
if (existing) {
|
|
13757
13984
|
await update(this.db, sessionMcpServers3).set({ enabled: true }).where(
|
|
13758
|
-
(0,
|
|
13759
|
-
(0,
|
|
13760
|
-
(0,
|
|
13985
|
+
(0, import_drizzle_orm30.and)(
|
|
13986
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
|
|
13987
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
|
|
13761
13988
|
)
|
|
13762
13989
|
).run();
|
|
13763
13990
|
return;
|
|
@@ -13783,9 +14010,9 @@ var SessionMCPServerRepository = class {
|
|
|
13783
14010
|
async removeServer(sessionId, serverId) {
|
|
13784
14011
|
try {
|
|
13785
14012
|
const result = await deleteFrom(this.db, sessionMcpServers3).where(
|
|
13786
|
-
(0,
|
|
13787
|
-
(0,
|
|
13788
|
-
(0,
|
|
14013
|
+
(0, import_drizzle_orm30.and)(
|
|
14014
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
|
|
14015
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
|
|
13789
14016
|
)
|
|
13790
14017
|
).run();
|
|
13791
14018
|
if (result.rowsAffected === 0) {
|
|
@@ -13805,9 +14032,9 @@ var SessionMCPServerRepository = class {
|
|
|
13805
14032
|
async toggleServer(sessionId, serverId, enabled) {
|
|
13806
14033
|
try {
|
|
13807
14034
|
const result = await update(this.db, sessionMcpServers3).set({ enabled }).where(
|
|
13808
|
-
(0,
|
|
13809
|
-
(0,
|
|
13810
|
-
(0,
|
|
14035
|
+
(0, import_drizzle_orm30.and)(
|
|
14036
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
|
|
14037
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
|
|
13811
14038
|
)
|
|
13812
14039
|
).run();
|
|
13813
14040
|
if (result.rowsAffected === 0) {
|
|
@@ -13826,11 +14053,11 @@ var SessionMCPServerRepository = class {
|
|
|
13826
14053
|
*/
|
|
13827
14054
|
async listServers(sessionId, enabledOnly = false) {
|
|
13828
14055
|
try {
|
|
13829
|
-
const conditions = [(0,
|
|
14056
|
+
const conditions = [(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)];
|
|
13830
14057
|
if (enabledOnly) {
|
|
13831
|
-
conditions.push((0,
|
|
14058
|
+
conditions.push((0, import_drizzle_orm30.eq)(sessionMcpServers3.enabled, true));
|
|
13832
14059
|
}
|
|
13833
|
-
const relationships = await select(this.db).from(sessionMcpServers3).where((0,
|
|
14060
|
+
const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm30.and)(...conditions)).all();
|
|
13834
14061
|
const servers = [];
|
|
13835
14062
|
for (const rel of relationships) {
|
|
13836
14063
|
const server = await this.mcpServerRepo.findById(rel.mcp_server_id);
|
|
@@ -13852,11 +14079,11 @@ var SessionMCPServerRepository = class {
|
|
|
13852
14079
|
*/
|
|
13853
14080
|
async listServersWithMetadata(sessionId, enabledOnly = false) {
|
|
13854
14081
|
try {
|
|
13855
|
-
const conditions = [(0,
|
|
14082
|
+
const conditions = [(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)];
|
|
13856
14083
|
if (enabledOnly) {
|
|
13857
|
-
conditions.push((0,
|
|
14084
|
+
conditions.push((0, import_drizzle_orm30.eq)(sessionMcpServers3.enabled, true));
|
|
13858
14085
|
}
|
|
13859
|
-
const relationships = await select(this.db).from(sessionMcpServers3).where((0,
|
|
14086
|
+
const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm30.and)(...conditions)).all();
|
|
13860
14087
|
const results = [];
|
|
13861
14088
|
for (const rel of relationships) {
|
|
13862
14089
|
const server = await this.mcpServerRepo.findById(rel.mcp_server_id);
|
|
@@ -13887,7 +14114,7 @@ var SessionMCPServerRepository = class {
|
|
|
13887
14114
|
if (!session) {
|
|
13888
14115
|
throw new EntityNotFoundError("Session", sessionId);
|
|
13889
14116
|
}
|
|
13890
|
-
await deleteFrom(this.db, sessionMcpServers3).where((0,
|
|
14117
|
+
await deleteFrom(this.db, sessionMcpServers3).where((0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)).run();
|
|
13891
14118
|
if (serverIds.length > 0) {
|
|
13892
14119
|
const inserts = serverIds.map((serverId) => ({
|
|
13893
14120
|
session_id: sessionId,
|
|
@@ -13911,9 +14138,9 @@ var SessionMCPServerRepository = class {
|
|
|
13911
14138
|
async getRelationship(sessionId, serverId) {
|
|
13912
14139
|
try {
|
|
13913
14140
|
const row = await select(this.db).from(sessionMcpServers3).where(
|
|
13914
|
-
(0,
|
|
13915
|
-
(0,
|
|
13916
|
-
(0,
|
|
14141
|
+
(0, import_drizzle_orm30.and)(
|
|
14142
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
|
|
14143
|
+
(0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
|
|
13917
14144
|
)
|
|
13918
14145
|
).one();
|
|
13919
14146
|
if (!row) {
|
|
@@ -13950,7 +14177,7 @@ var SessionMCPServerRepository = class {
|
|
|
13950
14177
|
|
|
13951
14178
|
// src/db/repositories/session-relationships.ts
|
|
13952
14179
|
init_cjs_shims();
|
|
13953
|
-
var
|
|
14180
|
+
var import_drizzle_orm31 = require("drizzle-orm");
|
|
13954
14181
|
init_ids();
|
|
13955
14182
|
init_database_wrapper();
|
|
13956
14183
|
init_schema();
|
|
@@ -13998,7 +14225,7 @@ var SessionRelationshipRepository = class {
|
|
|
13998
14225
|
}
|
|
13999
14226
|
async get(relationshipId) {
|
|
14000
14227
|
try {
|
|
14001
|
-
const row = await select(this.db).from(sessionRelationships3).where((0,
|
|
14228
|
+
const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
14002
14229
|
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
14003
14230
|
return this.rowToRelationship(row);
|
|
14004
14231
|
} catch (error) {
|
|
@@ -14012,9 +14239,9 @@ var SessionRelationshipRepository = class {
|
|
|
14012
14239
|
async findForSession(sessionId) {
|
|
14013
14240
|
try {
|
|
14014
14241
|
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
14015
|
-
(0,
|
|
14016
|
-
(0,
|
|
14017
|
-
(0,
|
|
14242
|
+
(0, import_drizzle_orm31.or)(
|
|
14243
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.source_session_id, sessionId),
|
|
14244
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, sessionId)
|
|
14018
14245
|
)
|
|
14019
14246
|
).all();
|
|
14020
14247
|
return rows.map((row) => this.rowToRelationship(row));
|
|
@@ -14029,9 +14256,9 @@ var SessionRelationshipRepository = class {
|
|
|
14029
14256
|
if (sessionIds.length === 0) return [];
|
|
14030
14257
|
try {
|
|
14031
14258
|
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
14032
|
-
(0,
|
|
14033
|
-
(0,
|
|
14034
|
-
(0,
|
|
14259
|
+
(0, import_drizzle_orm31.or)(
|
|
14260
|
+
(0, import_drizzle_orm31.inArray)(sessionRelationships3.source_session_id, sessionIds),
|
|
14261
|
+
(0, import_drizzle_orm31.inArray)(sessionRelationships3.target_session_id, sessionIds)
|
|
14035
14262
|
)
|
|
14036
14263
|
).all();
|
|
14037
14264
|
return rows.map((row) => this.rowToRelationship(row));
|
|
@@ -14045,9 +14272,9 @@ var SessionRelationshipRepository = class {
|
|
|
14045
14272
|
async findRemoteChildren(sourceSessionId) {
|
|
14046
14273
|
try {
|
|
14047
14274
|
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
14048
|
-
(0,
|
|
14049
|
-
(0,
|
|
14050
|
-
(0,
|
|
14275
|
+
(0, import_drizzle_orm31.and)(
|
|
14276
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.source_session_id, sourceSessionId),
|
|
14277
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
14051
14278
|
)
|
|
14052
14279
|
).all();
|
|
14053
14280
|
return rows.map((row) => this.rowToRelationship(row));
|
|
@@ -14061,9 +14288,9 @@ var SessionRelationshipRepository = class {
|
|
|
14061
14288
|
async findRemoteParents(targetSessionId) {
|
|
14062
14289
|
try {
|
|
14063
14290
|
const rows = await select(this.db).from(sessionRelationships3).where(
|
|
14064
|
-
(0,
|
|
14065
|
-
(0,
|
|
14066
|
-
(0,
|
|
14291
|
+
(0, import_drizzle_orm31.and)(
|
|
14292
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, targetSessionId),
|
|
14293
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
14067
14294
|
)
|
|
14068
14295
|
).all();
|
|
14069
14296
|
return rows.map((row) => this.rowToRelationship(row));
|
|
@@ -14076,11 +14303,11 @@ var SessionRelationshipRepository = class {
|
|
|
14076
14303
|
}
|
|
14077
14304
|
async setCallbackEnabled(relationshipId, callbackEnabled) {
|
|
14078
14305
|
try {
|
|
14079
|
-
const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where((0,
|
|
14306
|
+
const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).run();
|
|
14080
14307
|
if (result.rowsAffected === 0) {
|
|
14081
14308
|
throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
14082
14309
|
}
|
|
14083
|
-
const row = await select(this.db).from(sessionRelationships3).where((0,
|
|
14310
|
+
const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
|
|
14084
14311
|
if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
|
|
14085
14312
|
return this.rowToRelationship(row);
|
|
14086
14313
|
} catch (error) {
|
|
@@ -14094,9 +14321,9 @@ var SessionRelationshipRepository = class {
|
|
|
14094
14321
|
async setCallbackEnabledForTargetSession(targetSessionId, callbackEnabled) {
|
|
14095
14322
|
try {
|
|
14096
14323
|
await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where(
|
|
14097
|
-
(0,
|
|
14098
|
-
(0,
|
|
14099
|
-
(0,
|
|
14324
|
+
(0, import_drizzle_orm31.and)(
|
|
14325
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, targetSessionId),
|
|
14326
|
+
(0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
|
|
14100
14327
|
)
|
|
14101
14328
|
).run();
|
|
14102
14329
|
} catch (error) {
|
|
@@ -14111,7 +14338,7 @@ var SessionRelationshipRepository = class {
|
|
|
14111
14338
|
// src/db/repositories/tasks.ts
|
|
14112
14339
|
init_cjs_shims();
|
|
14113
14340
|
init_types2();
|
|
14114
|
-
var
|
|
14341
|
+
var import_drizzle_orm32 = require("drizzle-orm");
|
|
14115
14342
|
init_ids();
|
|
14116
14343
|
init_database_wrapper();
|
|
14117
14344
|
init_schema();
|
|
@@ -14199,7 +14426,7 @@ var TaskRepository = class {
|
|
|
14199
14426
|
*/
|
|
14200
14427
|
async resolveId(id) {
|
|
14201
14428
|
return resolveByShortIdPrefix(id, "Task", async (pattern) => {
|
|
14202
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
14429
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.like)(tasks3.task_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
14203
14430
|
return rows.map((r) => r.task_id);
|
|
14204
14431
|
});
|
|
14205
14432
|
}
|
|
@@ -14210,7 +14437,7 @@ var TaskRepository = class {
|
|
|
14210
14437
|
try {
|
|
14211
14438
|
const insertData = this.taskToInsert(data);
|
|
14212
14439
|
await insert(this.db, tasks3).values(insertData).run();
|
|
14213
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
14440
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
14214
14441
|
if (!row) {
|
|
14215
14442
|
throw new RepositoryError("Failed to retrieve created task");
|
|
14216
14443
|
}
|
|
@@ -14234,7 +14461,7 @@ var TaskRepository = class {
|
|
|
14234
14461
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
14235
14462
|
await insert(this.db, tasks3).values(inserts).run();
|
|
14236
14463
|
const taskIds = inserts.map((t3) => t3.task_id);
|
|
14237
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
14464
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.inArray)(tasks3.task_id, taskIds)).all();
|
|
14238
14465
|
const rowsById = new Map(rows.map((r) => [r.task_id, r]));
|
|
14239
14466
|
return taskIds.map((id) => this.rowToTask(rowsById.get(id)));
|
|
14240
14467
|
} catch (error) {
|
|
@@ -14250,7 +14477,7 @@ var TaskRepository = class {
|
|
|
14250
14477
|
async findById(id) {
|
|
14251
14478
|
try {
|
|
14252
14479
|
const fullId = await this.resolveId(id);
|
|
14253
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
14480
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).one();
|
|
14254
14481
|
return row ? this.rowToTask(row) : null;
|
|
14255
14482
|
} catch (error) {
|
|
14256
14483
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -14268,17 +14495,17 @@ var TaskRepository = class {
|
|
|
14268
14495
|
try {
|
|
14269
14496
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
14270
14497
|
const conditions = [];
|
|
14271
|
-
if (filter?.sessionId) conditions.push((0,
|
|
14498
|
+
if (filter?.sessionId) conditions.push((0, import_drizzle_orm32.eq)(tasks3.session_id, filter.sessionId));
|
|
14272
14499
|
if (filter?.sessionIds !== void 0)
|
|
14273
|
-
conditions.push((0,
|
|
14274
|
-
if (filter?.status) conditions.push((0,
|
|
14500
|
+
conditions.push((0, import_drizzle_orm32.inArray)(tasks3.session_id, filter.sessionIds));
|
|
14501
|
+
if (filter?.status) conditions.push((0, import_drizzle_orm32.eq)(tasks3.status, filter.status));
|
|
14275
14502
|
if (filter?.visibleToUserId) {
|
|
14276
14503
|
conditions.push(
|
|
14277
14504
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, tasks3.session_id)
|
|
14278
14505
|
);
|
|
14279
14506
|
}
|
|
14280
14507
|
const query = select(this.db).from(tasks3);
|
|
14281
|
-
const rows = conditions.length > 0 ? await query.where((0,
|
|
14508
|
+
const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm32.and)(...conditions)).all() : await query.all();
|
|
14282
14509
|
return rows.map((row) => this.rowToTask(row));
|
|
14283
14510
|
} catch (error) {
|
|
14284
14511
|
throw new RepositoryError(
|
|
@@ -14292,7 +14519,7 @@ var TaskRepository = class {
|
|
|
14292
14519
|
*/
|
|
14293
14520
|
async findBySession(sessionId) {
|
|
14294
14521
|
try {
|
|
14295
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
14522
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
|
|
14296
14523
|
return rows.map((row) => this.rowToTask(row));
|
|
14297
14524
|
} catch (error) {
|
|
14298
14525
|
throw new RepositoryError(
|
|
@@ -14306,7 +14533,7 @@ var TaskRepository = class {
|
|
|
14306
14533
|
*/
|
|
14307
14534
|
async findRunning() {
|
|
14308
14535
|
try {
|
|
14309
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
14536
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.status, TaskStatus.RUNNING)).all();
|
|
14310
14537
|
return rows.map((row) => this.rowToTask(row));
|
|
14311
14538
|
} catch (error) {
|
|
14312
14539
|
throw new RepositoryError(
|
|
@@ -14327,7 +14554,7 @@ var TaskRepository = class {
|
|
|
14327
14554
|
async findOrphaned() {
|
|
14328
14555
|
try {
|
|
14329
14556
|
const rows = await select(this.db).from(tasks3).where(
|
|
14330
|
-
|
|
14557
|
+
import_drizzle_orm32.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input')`
|
|
14331
14558
|
).all();
|
|
14332
14559
|
return rows.map((row) => this.rowToTask(row));
|
|
14333
14560
|
} catch (error) {
|
|
@@ -14347,7 +14574,7 @@ var TaskRepository = class {
|
|
|
14347
14574
|
async findActiveWithExecutorHeartbeat() {
|
|
14348
14575
|
try {
|
|
14349
14576
|
const rows = await select(this.db).from(tasks3).where(
|
|
14350
|
-
|
|
14577
|
+
import_drizzle_orm32.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input') AND ${tasks3.last_executor_heartbeat_at} IS NOT NULL`
|
|
14351
14578
|
).all();
|
|
14352
14579
|
return rows.map((row) => this.rowToTask(row));
|
|
14353
14580
|
} catch (error) {
|
|
@@ -14362,7 +14589,7 @@ var TaskRepository = class {
|
|
|
14362
14589
|
*/
|
|
14363
14590
|
async findByStatus(status) {
|
|
14364
14591
|
try {
|
|
14365
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
14592
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.status, status)).all();
|
|
14366
14593
|
return rows.map((row) => this.rowToTask(row));
|
|
14367
14594
|
} catch (error) {
|
|
14368
14595
|
throw new RepositoryError(
|
|
@@ -14384,8 +14611,8 @@ var TaskRepository = class {
|
|
|
14384
14611
|
`\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
|
|
14385
14612
|
);
|
|
14386
14613
|
const result = await this.db.transaction(async (tx) => {
|
|
14387
|
-
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0,
|
|
14388
|
-
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
14614
|
+
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0, import_drizzle_orm32.eq)(tasks3.task_id, fullId));
|
|
14615
|
+
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).one();
|
|
14389
14616
|
if (!currentRow) {
|
|
14390
14617
|
throw new EntityNotFoundError("Task", id);
|
|
14391
14618
|
}
|
|
@@ -14399,7 +14626,7 @@ var TaskRepository = class {
|
|
|
14399
14626
|
last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
|
|
14400
14627
|
session_md5: insertData.session_md5,
|
|
14401
14628
|
data: insertData.data
|
|
14402
|
-
}).where((0,
|
|
14629
|
+
}).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).run();
|
|
14403
14630
|
return merged;
|
|
14404
14631
|
});
|
|
14405
14632
|
return result;
|
|
@@ -14418,7 +14645,7 @@ var TaskRepository = class {
|
|
|
14418
14645
|
async delete(id) {
|
|
14419
14646
|
try {
|
|
14420
14647
|
const fullId = await this.resolveId(id);
|
|
14421
|
-
const result = await deleteFrom(this.db, tasks3).where((0,
|
|
14648
|
+
const result = await deleteFrom(this.db, tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).run();
|
|
14422
14649
|
if (result.rowsAffected === 0) {
|
|
14423
14650
|
throw new EntityNotFoundError("Task", id);
|
|
14424
14651
|
}
|
|
@@ -14472,15 +14699,15 @@ var TaskRepository = class {
|
|
|
14472
14699
|
}
|
|
14473
14700
|
return this.db.transaction(async (tx) => {
|
|
14474
14701
|
const positionRow = await select(txAsDb(tx), {
|
|
14475
|
-
maxPos:
|
|
14476
|
-
}).from(tasks3).where(
|
|
14702
|
+
maxPos: import_drizzle_orm32.sql`max(${tasks3.queue_position})`
|
|
14703
|
+
}).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${input.session_id} AND ${tasks3.status} = 'queued'`).one();
|
|
14477
14704
|
const nextPosition = (positionRow?.maxPos ?? 0) + 1;
|
|
14478
14705
|
const insertData = this.taskToInsert({
|
|
14479
14706
|
...taskBase,
|
|
14480
14707
|
queue_position: nextPosition
|
|
14481
14708
|
});
|
|
14482
14709
|
await insert(txAsDb(tx), tasks3).values(insertData).run();
|
|
14483
|
-
const row = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
14710
|
+
const row = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
14484
14711
|
if (!row) {
|
|
14485
14712
|
throw new RepositoryError("Failed to retrieve created queued task");
|
|
14486
14713
|
}
|
|
@@ -14492,7 +14719,7 @@ var TaskRepository = class {
|
|
|
14492
14719
|
*/
|
|
14493
14720
|
async findQueued(sessionId) {
|
|
14494
14721
|
try {
|
|
14495
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
14722
|
+
const rows = await select(this.db).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).all();
|
|
14496
14723
|
return rows.map((row) => this.rowToTask(row));
|
|
14497
14724
|
} catch (error) {
|
|
14498
14725
|
throw new RepositoryError(
|
|
@@ -14507,7 +14734,7 @@ var TaskRepository = class {
|
|
|
14507
14734
|
*/
|
|
14508
14735
|
async getNextQueued(sessionId) {
|
|
14509
14736
|
try {
|
|
14510
|
-
const row = await select(this.db).from(tasks3).where(
|
|
14737
|
+
const row = await select(this.db).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).limit(1).one();
|
|
14511
14738
|
return row ? this.rowToTask(row) : null;
|
|
14512
14739
|
} catch (error) {
|
|
14513
14740
|
throw new RepositoryError(
|
|
@@ -14521,7 +14748,7 @@ var TaskRepository = class {
|
|
|
14521
14748
|
*/
|
|
14522
14749
|
async countBySession(sessionId) {
|
|
14523
14750
|
try {
|
|
14524
|
-
const result = await select(this.db, { count:
|
|
14751
|
+
const result = await select(this.db, { count: import_drizzle_orm32.sql`count(*)` }).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.session_id, sessionId)).one();
|
|
14525
14752
|
return result?.count ?? 0;
|
|
14526
14753
|
} catch (error) {
|
|
14527
14754
|
throw new RepositoryError(
|
|
@@ -14535,7 +14762,7 @@ var TaskRepository = class {
|
|
|
14535
14762
|
// src/db/repositories/thread-session-map.ts
|
|
14536
14763
|
init_cjs_shims();
|
|
14537
14764
|
init_types2();
|
|
14538
|
-
var
|
|
14765
|
+
var import_drizzle_orm33 = require("drizzle-orm");
|
|
14539
14766
|
init_ids();
|
|
14540
14767
|
init_database_wrapper();
|
|
14541
14768
|
init_schema();
|
|
@@ -14585,7 +14812,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14585
14812
|
return id;
|
|
14586
14813
|
}
|
|
14587
14814
|
const pattern = prefixToLikePattern(id);
|
|
14588
|
-
const results = await select(this.db).from(threadSessionMap3).where((0,
|
|
14815
|
+
const results = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.like)(threadSessionMap3.id, pattern)).all();
|
|
14589
14816
|
if (results.length === 0) {
|
|
14590
14817
|
throw new EntityNotFoundError("ThreadSessionMap", id);
|
|
14591
14818
|
}
|
|
@@ -14608,7 +14835,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14608
14835
|
id: data.id ?? generateId()
|
|
14609
14836
|
});
|
|
14610
14837
|
await insert(this.db, threadSessionMap3).values(insertData).run();
|
|
14611
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
14838
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, insertData.id)).one();
|
|
14612
14839
|
if (!row) {
|
|
14613
14840
|
throw new RepositoryError("Failed to retrieve created thread-session mapping");
|
|
14614
14841
|
}
|
|
@@ -14627,7 +14854,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14627
14854
|
async findById(id) {
|
|
14628
14855
|
try {
|
|
14629
14856
|
const fullId = await this.resolveId(id);
|
|
14630
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
14857
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).one();
|
|
14631
14858
|
return row ? this.rowToMapping(row) : null;
|
|
14632
14859
|
} catch (error) {
|
|
14633
14860
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -14668,7 +14895,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14668
14895
|
status: insertData.status,
|
|
14669
14896
|
last_message_at: insertData.last_message_at,
|
|
14670
14897
|
metadata: insertData.metadata
|
|
14671
|
-
}).where((0,
|
|
14898
|
+
}).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).run();
|
|
14672
14899
|
const updated = await this.findById(fullId);
|
|
14673
14900
|
if (!updated) {
|
|
14674
14901
|
throw new RepositoryError("Failed to retrieve updated thread-session mapping");
|
|
@@ -14689,7 +14916,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14689
14916
|
async delete(id) {
|
|
14690
14917
|
try {
|
|
14691
14918
|
const fullId = await this.resolveId(id);
|
|
14692
|
-
const result = await deleteFrom(this.db, threadSessionMap3).where((0,
|
|
14919
|
+
const result = await deleteFrom(this.db, threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).run();
|
|
14693
14920
|
if (result.rowsAffected === 0) {
|
|
14694
14921
|
throw new EntityNotFoundError("ThreadSessionMap", id);
|
|
14695
14922
|
}
|
|
@@ -14707,7 +14934,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14707
14934
|
async findByChannelAndThread(channelId, threadId) {
|
|
14708
14935
|
try {
|
|
14709
14936
|
const row = await select(this.db).from(threadSessionMap3).where(
|
|
14710
|
-
(0,
|
|
14937
|
+
(0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(threadSessionMap3.channel_id, channelId), (0, import_drizzle_orm33.eq)(threadSessionMap3.thread_id, threadId))
|
|
14711
14938
|
).one();
|
|
14712
14939
|
return row ? this.rowToMapping(row) : null;
|
|
14713
14940
|
} catch (error) {
|
|
@@ -14724,7 +14951,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14724
14951
|
*/
|
|
14725
14952
|
async findByThread(threadId) {
|
|
14726
14953
|
try {
|
|
14727
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
14954
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.thread_id, threadId)).one();
|
|
14728
14955
|
return row ? this.rowToMapping(row) : null;
|
|
14729
14956
|
} catch (error) {
|
|
14730
14957
|
throw new RepositoryError(
|
|
@@ -14738,7 +14965,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14738
14965
|
*/
|
|
14739
14966
|
async findBySession(sessionId) {
|
|
14740
14967
|
try {
|
|
14741
|
-
const row = await select(this.db).from(threadSessionMap3).where((0,
|
|
14968
|
+
const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.session_id, sessionId)).one();
|
|
14742
14969
|
return row ? this.rowToMapping(row) : null;
|
|
14743
14970
|
} catch (error) {
|
|
14744
14971
|
throw new RepositoryError(
|
|
@@ -14752,11 +14979,11 @@ var ThreadSessionMapRepository = class {
|
|
|
14752
14979
|
*/
|
|
14753
14980
|
async findByChannel(channelId, status) {
|
|
14754
14981
|
try {
|
|
14755
|
-
const conditions = [(0,
|
|
14982
|
+
const conditions = [(0, import_drizzle_orm33.eq)(threadSessionMap3.channel_id, channelId)];
|
|
14756
14983
|
if (status) {
|
|
14757
|
-
conditions.push((0,
|
|
14984
|
+
conditions.push((0, import_drizzle_orm33.eq)(threadSessionMap3.status, status));
|
|
14758
14985
|
}
|
|
14759
|
-
const rows = await select(this.db).from(threadSessionMap3).where((0,
|
|
14986
|
+
const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.and)(...conditions)).all();
|
|
14760
14987
|
return rows.map((row) => this.rowToMapping(row));
|
|
14761
14988
|
} catch (error) {
|
|
14762
14989
|
throw new RepositoryError(
|
|
@@ -14772,7 +14999,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14772
14999
|
try {
|
|
14773
15000
|
await update(this.db, threadSessionMap3).set({
|
|
14774
15001
|
last_message_at: /* @__PURE__ */ new Date()
|
|
14775
|
-
}).where((0,
|
|
15002
|
+
}).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, id)).run();
|
|
14776
15003
|
} catch (error) {
|
|
14777
15004
|
throw new RepositoryError(
|
|
14778
15005
|
`Failed to update last message timestamp: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -14785,7 +15012,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14785
15012
|
*/
|
|
14786
15013
|
async updateMetadata(id, metadata) {
|
|
14787
15014
|
try {
|
|
14788
|
-
await update(this.db, threadSessionMap3).set({ metadata }).where((0,
|
|
15015
|
+
await update(this.db, threadSessionMap3).set({ metadata }).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, id)).run();
|
|
14789
15016
|
} catch (error) {
|
|
14790
15017
|
throw new RepositoryError(
|
|
14791
15018
|
`Failed to update metadata: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -14800,7 +15027,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14800
15027
|
try {
|
|
14801
15028
|
const cutoff = new Date(Date.now() - daysInactive * 24 * 60 * 60 * 1e3);
|
|
14802
15029
|
const rows = await select(this.db).from(threadSessionMap3).where(
|
|
14803
|
-
(0,
|
|
15030
|
+
(0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(threadSessionMap3.status, "active"), (0, import_drizzle_orm33.lt)(threadSessionMap3.last_message_at, cutoff))
|
|
14804
15031
|
).all();
|
|
14805
15032
|
return rows.map((row) => this.rowToMapping(row));
|
|
14806
15033
|
} catch (error) {
|
|
@@ -14815,7 +15042,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14815
15042
|
*/
|
|
14816
15043
|
async findByBranch(branchId) {
|
|
14817
15044
|
try {
|
|
14818
|
-
const rows = await select(this.db).from(threadSessionMap3).where((0,
|
|
15045
|
+
const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.branch_id, branchId)).all();
|
|
14819
15046
|
return rows.map((row) => this.rowToMapping(row));
|
|
14820
15047
|
} catch (error) {
|
|
14821
15048
|
throw new RepositoryError(
|
|
@@ -14830,7 +15057,7 @@ var ThreadSessionMapRepository = class {
|
|
|
14830
15057
|
init_cjs_shims();
|
|
14831
15058
|
var import_node_crypto5 = require("crypto");
|
|
14832
15059
|
var import_bcryptjs2 = __toESM(require("bcryptjs"), 1);
|
|
14833
|
-
var
|
|
15060
|
+
var import_drizzle_orm34 = require("drizzle-orm");
|
|
14834
15061
|
init_ids();
|
|
14835
15062
|
init_database_wrapper();
|
|
14836
15063
|
init_schema();
|
|
@@ -14871,7 +15098,7 @@ var UserApiKeysRepository = class {
|
|
|
14871
15098
|
}
|
|
14872
15099
|
/** List all API keys for a user (never returns hashes) */
|
|
14873
15100
|
async listByUser(userId) {
|
|
14874
|
-
const rows = await select(this.db).from(userApiKeys3).where((0,
|
|
15101
|
+
const rows = await select(this.db).from(userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId)).all();
|
|
14875
15102
|
return rows.map((r) => ({
|
|
14876
15103
|
id: r.id,
|
|
14877
15104
|
name: r.name,
|
|
@@ -14882,7 +15109,7 @@ var UserApiKeysRepository = class {
|
|
|
14882
15109
|
}
|
|
14883
15110
|
/** Find a key by prefix (for auth lookup). Returns rows with hash for verification. */
|
|
14884
15111
|
async findByPrefix(prefix) {
|
|
14885
|
-
return select(this.db).from(userApiKeys3).where((0,
|
|
15112
|
+
return select(this.db).from(userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.prefix, prefix)).all();
|
|
14886
15113
|
}
|
|
14887
15114
|
/** Verify a raw API key against stored hashes. Returns the matching row or null. */
|
|
14888
15115
|
async verifyKey(rawKey) {
|
|
@@ -14911,25 +15138,25 @@ var UserApiKeysRepository = class {
|
|
|
14911
15138
|
await this.updateLastUsedNow(id);
|
|
14912
15139
|
}
|
|
14913
15140
|
async updateLastUsedNow(id) {
|
|
14914
|
-
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0,
|
|
15141
|
+
await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm34.eq)(userApiKeys3.id, id)).run();
|
|
14915
15142
|
}
|
|
14916
15143
|
/** Update key name */
|
|
14917
15144
|
async updateName(id, userId, name) {
|
|
14918
|
-
await update(this.db, userApiKeys3).set({ name }).where((0,
|
|
15145
|
+
await update(this.db, userApiKeys3).set({ name }).where((0, import_drizzle_orm34.and)((0, import_drizzle_orm34.eq)(userApiKeys3.id, id), (0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId))).run();
|
|
14919
15146
|
}
|
|
14920
15147
|
/** Delete a key */
|
|
14921
15148
|
async delete(id, userId) {
|
|
14922
|
-
await deleteFrom(this.db, userApiKeys3).where((0,
|
|
15149
|
+
await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm34.and)((0, import_drizzle_orm34.eq)(userApiKeys3.id, id), (0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId))).run();
|
|
14923
15150
|
}
|
|
14924
15151
|
/** Delete all keys for a user */
|
|
14925
15152
|
async deleteAllForUser(userId) {
|
|
14926
|
-
await deleteFrom(this.db, userApiKeys3).where((0,
|
|
15153
|
+
await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId)).run();
|
|
14927
15154
|
}
|
|
14928
15155
|
};
|
|
14929
15156
|
|
|
14930
15157
|
// src/db/repositories/user-mcp-oauth-tokens.ts
|
|
14931
15158
|
init_cjs_shims();
|
|
14932
|
-
var
|
|
15159
|
+
var import_drizzle_orm35 = require("drizzle-orm");
|
|
14933
15160
|
init_database_wrapper();
|
|
14934
15161
|
init_schema();
|
|
14935
15162
|
function rowToToken(row) {
|
|
@@ -14946,9 +15173,9 @@ function rowToToken(row) {
|
|
|
14946
15173
|
};
|
|
14947
15174
|
}
|
|
14948
15175
|
function matchKey(userId, serverId) {
|
|
14949
|
-
return (0,
|
|
14950
|
-
userId === null ? (0,
|
|
14951
|
-
(0,
|
|
15176
|
+
return (0, import_drizzle_orm35.and)(
|
|
15177
|
+
userId === null ? (0, import_drizzle_orm35.isNull)(userMcpOauthTokens3.user_id) : (0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId),
|
|
15178
|
+
(0, import_drizzle_orm35.eq)(userMcpOauthTokens3.mcp_server_id, serverId)
|
|
14952
15179
|
);
|
|
14953
15180
|
}
|
|
14954
15181
|
var UserMCPOAuthTokenRepository = class {
|
|
@@ -15065,7 +15292,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
15065
15292
|
}
|
|
15066
15293
|
async deleteAllForUser(userId) {
|
|
15067
15294
|
try {
|
|
15068
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0,
|
|
15295
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId)).run();
|
|
15069
15296
|
return result.rowsAffected;
|
|
15070
15297
|
} catch (error) {
|
|
15071
15298
|
throw new RepositoryError(
|
|
@@ -15076,7 +15303,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
15076
15303
|
}
|
|
15077
15304
|
async deleteAllForServer(serverId) {
|
|
15078
15305
|
try {
|
|
15079
|
-
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0,
|
|
15306
|
+
const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.mcp_server_id, serverId)).run();
|
|
15080
15307
|
return result.rowsAffected;
|
|
15081
15308
|
} catch (error) {
|
|
15082
15309
|
throw new RepositoryError(
|
|
@@ -15087,7 +15314,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
15087
15314
|
}
|
|
15088
15315
|
async listForUser(userId) {
|
|
15089
15316
|
try {
|
|
15090
|
-
const rows = await select(this.db).from(userMcpOauthTokens3).where((0,
|
|
15317
|
+
const rows = await select(this.db).from(userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId)).all();
|
|
15091
15318
|
return rows.map(rowToToken);
|
|
15092
15319
|
} catch (error) {
|
|
15093
15320
|
throw new RepositoryError(
|
|
@@ -15105,37 +15332,7 @@ var UserMCPOAuthTokenRepository = class {
|
|
|
15105
15332
|
// src/db/repositories/users.ts
|
|
15106
15333
|
init_cjs_shims();
|
|
15107
15334
|
init_types2();
|
|
15108
|
-
var
|
|
15109
|
-
|
|
15110
|
-
// src/config/env-vars.ts
|
|
15111
|
-
init_cjs_shims();
|
|
15112
|
-
var V05_SCOPES = ["global", "session"];
|
|
15113
|
-
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
15114
|
-
function normalizeStoredEnvVar(raw) {
|
|
15115
|
-
if (typeof raw === "string") {
|
|
15116
|
-
return { value_encrypted: raw, scope: "global" };
|
|
15117
|
-
}
|
|
15118
|
-
return {
|
|
15119
|
-
value_encrypted: raw.value_encrypted,
|
|
15120
|
-
scope: raw.scope,
|
|
15121
|
-
resource_id: raw.resource_id ?? null,
|
|
15122
|
-
extra_config: raw.extra_config ?? null
|
|
15123
|
-
};
|
|
15124
|
-
}
|
|
15125
|
-
function normalizeStoredEnvMap(raw) {
|
|
15126
|
-
const out = {};
|
|
15127
|
-
if (!raw) return out;
|
|
15128
|
-
for (const [key, value] of Object.entries(raw)) {
|
|
15129
|
-
try {
|
|
15130
|
-
out[key] = normalizeStoredEnvVar(value);
|
|
15131
|
-
} catch (err) {
|
|
15132
|
-
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
15133
|
-
}
|
|
15134
|
-
}
|
|
15135
|
-
return out;
|
|
15136
|
-
}
|
|
15137
|
-
|
|
15138
|
-
// src/db/repositories/users.ts
|
|
15335
|
+
var import_drizzle_orm36 = require("drizzle-orm");
|
|
15139
15336
|
init_ids();
|
|
15140
15337
|
init_database_wrapper();
|
|
15141
15338
|
init_schema();
|
|
@@ -15238,7 +15435,7 @@ var UsersRepository = class {
|
|
|
15238
15435
|
*/
|
|
15239
15436
|
async resolveId(id) {
|
|
15240
15437
|
return resolveByShortIdPrefix(id, "User", async (pattern) => {
|
|
15241
|
-
const rows = await select(this.db).from(users3).where((0,
|
|
15438
|
+
const rows = await select(this.db).from(users3).where((0, import_drizzle_orm36.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
15242
15439
|
return rows.map((r) => r.user_id);
|
|
15243
15440
|
});
|
|
15244
15441
|
}
|
|
@@ -15246,7 +15443,7 @@ var UsersRepository = class {
|
|
|
15246
15443
|
* Check if unix_username is already taken by another user
|
|
15247
15444
|
*/
|
|
15248
15445
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
15249
|
-
const result = await select(this.db).from(users3).where((0,
|
|
15446
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.unix_username, unixUsername)).one();
|
|
15250
15447
|
if (!result) {
|
|
15251
15448
|
return false;
|
|
15252
15449
|
}
|
|
@@ -15269,7 +15466,7 @@ var UsersRepository = class {
|
|
|
15269
15466
|
}
|
|
15270
15467
|
const insertData = this.userToInsert(data);
|
|
15271
15468
|
await insert(this.db, users3).values(insertData).run();
|
|
15272
|
-
const row = await select(this.db).from(users3).where((0,
|
|
15469
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, insertData.user_id)).one();
|
|
15273
15470
|
if (!row) {
|
|
15274
15471
|
throw new RepositoryError("Failed to retrieve created user");
|
|
15275
15472
|
}
|
|
@@ -15281,7 +15478,7 @@ var UsersRepository = class {
|
|
|
15281
15478
|
async findById(id) {
|
|
15282
15479
|
try {
|
|
15283
15480
|
const fullId = await this.resolveId(id);
|
|
15284
|
-
const result = await select(this.db).from(users3).where((0,
|
|
15481
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
|
|
15285
15482
|
if (!result) {
|
|
15286
15483
|
return null;
|
|
15287
15484
|
}
|
|
@@ -15297,7 +15494,7 @@ var UsersRepository = class {
|
|
|
15297
15494
|
* Find user by email
|
|
15298
15495
|
*/
|
|
15299
15496
|
async findByEmail(email) {
|
|
15300
|
-
const result = await select(this.db).from(users3).where((0,
|
|
15497
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.email, email)).one();
|
|
15301
15498
|
if (!result) {
|
|
15302
15499
|
return null;
|
|
15303
15500
|
}
|
|
@@ -15318,7 +15515,7 @@ var UsersRepository = class {
|
|
|
15318
15515
|
if (!normalizedEmail) return null;
|
|
15319
15516
|
const exact = await this.findByEmail(normalizedEmail);
|
|
15320
15517
|
if (exact) return exact;
|
|
15321
|
-
const results = await select(this.db).from(users3).where(
|
|
15518
|
+
const results = await select(this.db).from(users3).where(import_drizzle_orm36.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
|
|
15322
15519
|
if (results.length !== 1) {
|
|
15323
15520
|
if (results.length > 1) {
|
|
15324
15521
|
console.warn(
|
|
@@ -15368,8 +15565,8 @@ var UsersRepository = class {
|
|
|
15368
15565
|
await update(this.db, users3).set({
|
|
15369
15566
|
...insertData,
|
|
15370
15567
|
updated_at: /* @__PURE__ */ new Date()
|
|
15371
|
-
}).where((0,
|
|
15372
|
-
const row = await select(this.db).from(users3).where((0,
|
|
15568
|
+
}).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
|
|
15569
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
|
|
15373
15570
|
if (!row) {
|
|
15374
15571
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
15375
15572
|
}
|
|
@@ -15380,7 +15577,7 @@ var UsersRepository = class {
|
|
|
15380
15577
|
*/
|
|
15381
15578
|
async delete(id) {
|
|
15382
15579
|
const fullId = await this.resolveId(id);
|
|
15383
|
-
await deleteFrom(this.db, users3).where((0,
|
|
15580
|
+
await deleteFrom(this.db, users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
|
|
15384
15581
|
}
|
|
15385
15582
|
/**
|
|
15386
15583
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -15388,7 +15585,7 @@ var UsersRepository = class {
|
|
|
15388
15585
|
async getRawRow(id) {
|
|
15389
15586
|
try {
|
|
15390
15587
|
const fullId = await this.resolveId(id);
|
|
15391
|
-
const result = await select(this.db).from(users3).where((0,
|
|
15588
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
|
|
15392
15589
|
return result;
|
|
15393
15590
|
} catch (error) {
|
|
15394
15591
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -15470,7 +15667,7 @@ var UsersRepository = class {
|
|
|
15470
15667
|
await update(this.db, users3).set({
|
|
15471
15668
|
data: { ...row.data, agentic_tools: next },
|
|
15472
15669
|
updated_at: /* @__PURE__ */ new Date()
|
|
15473
|
-
}).where((0,
|
|
15670
|
+
}).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
|
|
15474
15671
|
}
|
|
15475
15672
|
/**
|
|
15476
15673
|
* Delete a single credential field for a tool.
|
|
@@ -15496,7 +15693,7 @@ var UsersRepository = class {
|
|
|
15496
15693
|
await update(this.db, users3).set({
|
|
15497
15694
|
data: { ...row.data, agentic_tools: next },
|
|
15498
15695
|
updated_at: /* @__PURE__ */ new Date()
|
|
15499
|
-
}).where((0,
|
|
15696
|
+
}).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
|
|
15500
15697
|
}
|
|
15501
15698
|
};
|
|
15502
15699
|
|