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/seed/index.cjs
CHANGED
|
@@ -7195,6 +7195,63 @@ var BranchRepository = class {
|
|
|
7195
7195
|
}
|
|
7196
7196
|
return Array.from(userIds);
|
|
7197
7197
|
}
|
|
7198
|
+
/**
|
|
7199
|
+
* Find non-archived branches whose explicit filesystem access set can change
|
|
7200
|
+
* when membership in the given group changes.
|
|
7201
|
+
*
|
|
7202
|
+
* Keep this inverse lookup in lockstep with findExplicitFsAccessUserIds():
|
|
7203
|
+
* both encode which group grants materialize into branch-folder access.
|
|
7204
|
+
* App-only grants (`fs_access = 'none'`) are intentionally excluded because
|
|
7205
|
+
* membership changes for those grants do not require branch-folder mutation.
|
|
7206
|
+
*/
|
|
7207
|
+
async findExplicitFsAccessBranchIdsForGroup(groupId) {
|
|
7208
|
+
const directRows = await select(this.db, { branch_id: branchGroupGrants3.branch_id }).from(branchGroupGrants3).innerJoin(branches3, (0, import_drizzle_orm11.eq)(branches3.branch_id, branchGroupGrants3.branch_id)).innerJoin(
|
|
7209
|
+
groups3,
|
|
7210
|
+
(0, import_drizzle_orm11.and)((0, import_drizzle_orm11.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm11.eq)(groups3.archived, false))
|
|
7211
|
+
).where(
|
|
7212
|
+
(0, import_drizzle_orm11.and)(
|
|
7213
|
+
(0, import_drizzle_orm11.eq)(branchGroupGrants3.group_id, groupId),
|
|
7214
|
+
(0, import_drizzle_orm11.eq)(branches3.archived, false),
|
|
7215
|
+
(0, import_drizzle_orm11.inArray)(
|
|
7216
|
+
import_drizzle_orm11.sql`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
7217
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7218
|
+
)
|
|
7219
|
+
)
|
|
7220
|
+
).all();
|
|
7221
|
+
const boardRows = await select(this.db, { branch_id: branches3.branch_id }).from(boardGroupGrants3).innerJoin(
|
|
7222
|
+
groups3,
|
|
7223
|
+
(0, import_drizzle_orm11.and)((0, import_drizzle_orm11.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm11.eq)(groups3.archived, false))
|
|
7224
|
+
).innerJoin(
|
|
7225
|
+
boards3,
|
|
7226
|
+
(0, import_drizzle_orm11.and)(
|
|
7227
|
+
(0, import_drizzle_orm11.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
7228
|
+
(0, import_drizzle_orm11.eq)(import_drizzle_orm11.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`, "shared")
|
|
7229
|
+
)
|
|
7230
|
+
).innerJoin(
|
|
7231
|
+
branches3,
|
|
7232
|
+
(0, import_drizzle_orm11.and)(
|
|
7233
|
+
(0, import_drizzle_orm11.eq)(branches3.board_id, boardGroupGrants3.board_id),
|
|
7234
|
+
(0, import_drizzle_orm11.eq)(branches3.permission_source, "board"),
|
|
7235
|
+
(0, import_drizzle_orm11.eq)(branches3.archived, false)
|
|
7236
|
+
)
|
|
7237
|
+
).where(
|
|
7238
|
+
(0, import_drizzle_orm11.and)(
|
|
7239
|
+
(0, import_drizzle_orm11.eq)(boardGroupGrants3.group_id, groupId),
|
|
7240
|
+
(0, import_drizzle_orm11.inArray)(
|
|
7241
|
+
import_drizzle_orm11.sql`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
7242
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7243
|
+
)
|
|
7244
|
+
)
|
|
7245
|
+
).all();
|
|
7246
|
+
const branchIds = /* @__PURE__ */ new Set();
|
|
7247
|
+
for (const row of directRows) {
|
|
7248
|
+
branchIds.add(row.branch_id);
|
|
7249
|
+
}
|
|
7250
|
+
for (const row of boardRows) {
|
|
7251
|
+
branchIds.add(row.branch_id);
|
|
7252
|
+
}
|
|
7253
|
+
return Array.from(branchIds);
|
|
7254
|
+
}
|
|
7198
7255
|
async findBoardAlignedBranches(boardId) {
|
|
7199
7256
|
const rows = await select(this.db).from(branches3).where(
|
|
7200
7257
|
(0, import_drizzle_orm11.and)(
|
|
@@ -8202,6 +8259,60 @@ var BoardRepository = class {
|
|
|
8202
8259
|
);
|
|
8203
8260
|
}
|
|
8204
8261
|
}
|
|
8262
|
+
/**
|
|
8263
|
+
* Shallow-merge field patches into existing board objects in a single
|
|
8264
|
+
* read-modify-write.
|
|
8265
|
+
*
|
|
8266
|
+
* Unlike upsertBoardObject (which fully replaces the object value, dropping
|
|
8267
|
+
* omitted fields), this overwrites ONLY the provided keys and leaves the rest
|
|
8268
|
+
* of each object intact — so a narrow change (e.g. a zIndex reorder) has a
|
|
8269
|
+
* smaller blast radius and won't clobber a field edited via a different patch
|
|
8270
|
+
* call. Multiple objects in one call are merged before a single write, so a
|
|
8271
|
+
* forward/backward swap touches both neighbors in one update.
|
|
8272
|
+
*
|
|
8273
|
+
* Objects that no longer exist are SKIPPED, never re-created — so a swap can't
|
|
8274
|
+
* resurrect a neighbor deleted between the client's read and this write.
|
|
8275
|
+
*
|
|
8276
|
+
* Only an explicit allowlist of fields can be merged (currently just `zIndex`,
|
|
8277
|
+
* which is also clamped into the board-object band [1, 499] so it can never be
|
|
8278
|
+
* pushed onto the card (500) / comment (1000) layers). Any other key in a
|
|
8279
|
+
* patch is ignored, so this narrow action cannot reshape an object (e.g. flip
|
|
8280
|
+
* its `type`) the way a full upsert could.
|
|
8281
|
+
*
|
|
8282
|
+
* NOTE: this is NOT atomic against concurrent writers. Like every other board
|
|
8283
|
+
* writer, the findById → update sequence has a lost-update window: a write
|
|
8284
|
+
* that lands between the read and the update can be overwritten (last-write-
|
|
8285
|
+
* wins). Merging only the patched keys narrows that window's blast radius
|
|
8286
|
+
* versus a full-object upsert, but does not close it.
|
|
8287
|
+
*/
|
|
8288
|
+
async mergeBoardObjectFields(boardId, patches) {
|
|
8289
|
+
const Z_MIN = 1;
|
|
8290
|
+
const Z_MAX = 499;
|
|
8291
|
+
try {
|
|
8292
|
+
const fullId = await this.resolveId(boardId);
|
|
8293
|
+
const current = await this.findById(fullId);
|
|
8294
|
+
if (!current) {
|
|
8295
|
+
throw new EntityNotFoundError("Board", boardId);
|
|
8296
|
+
}
|
|
8297
|
+
const updatedObjects = { ...current.objects || {} };
|
|
8298
|
+
for (const [objectId, fields] of Object.entries(patches)) {
|
|
8299
|
+
const existing = updatedObjects[objectId];
|
|
8300
|
+
if (!existing) continue;
|
|
8301
|
+
const { zIndex } = fields;
|
|
8302
|
+
if (typeof zIndex !== "number" || !Number.isFinite(zIndex)) continue;
|
|
8303
|
+
const safeZIndex = Math.min(Z_MAX, Math.max(Z_MIN, zIndex));
|
|
8304
|
+
updatedObjects[objectId] = { ...existing, zIndex: safeZIndex };
|
|
8305
|
+
}
|
|
8306
|
+
return this.update(fullId, { objects: updatedObjects });
|
|
8307
|
+
} catch (error) {
|
|
8308
|
+
if (error instanceof RepositoryError) throw error;
|
|
8309
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
8310
|
+
throw new RepositoryError(
|
|
8311
|
+
`Failed to merge board object fields: ${error instanceof Error ? error.message : String(error)}`,
|
|
8312
|
+
error
|
|
8313
|
+
);
|
|
8314
|
+
}
|
|
8315
|
+
}
|
|
8205
8316
|
/**
|
|
8206
8317
|
* DEPRECATED: Delete a zone and handle associated sessions
|
|
8207
8318
|
* TODO: Reimplement using board-objects table
|
|
@@ -8822,12 +8933,72 @@ init_schema();
|
|
|
8822
8933
|
|
|
8823
8934
|
// src/db/repositories/mcp-servers.ts
|
|
8824
8935
|
init_cjs_shims();
|
|
8825
|
-
var
|
|
8936
|
+
var import_drizzle_orm23 = require("drizzle-orm");
|
|
8826
8937
|
init_ids();
|
|
8827
8938
|
|
|
8828
8939
|
// src/tools/mcp/auth-secrets.ts
|
|
8829
8940
|
init_cjs_shims();
|
|
8830
8941
|
|
|
8942
|
+
// src/mcp/template-resolver.ts
|
|
8943
|
+
init_cjs_shims();
|
|
8944
|
+
|
|
8945
|
+
// src/config/env-resolver.ts
|
|
8946
|
+
init_cjs_shims();
|
|
8947
|
+
var import_drizzle_orm22 = require("drizzle-orm");
|
|
8948
|
+
init_database_wrapper();
|
|
8949
|
+
|
|
8950
|
+
// src/db/repositories/session-env-selections.ts
|
|
8951
|
+
init_cjs_shims();
|
|
8952
|
+
var import_drizzle_orm21 = require("drizzle-orm");
|
|
8953
|
+
init_database_wrapper();
|
|
8954
|
+
init_schema();
|
|
8955
|
+
|
|
8956
|
+
// src/config/env-resolver.ts
|
|
8957
|
+
init_schema();
|
|
8958
|
+
|
|
8959
|
+
// src/config/env-blocklist.ts
|
|
8960
|
+
init_cjs_shims();
|
|
8961
|
+
var BLOCKED_ENV_PATTERNS = Object.freeze([
|
|
8962
|
+
/^LD_/i,
|
|
8963
|
+
/^DYLD_/i,
|
|
8964
|
+
/^PYTHON(?!_AGOR_)/i
|
|
8965
|
+
]);
|
|
8966
|
+
|
|
8967
|
+
// src/config/env-vars.ts
|
|
8968
|
+
init_cjs_shims();
|
|
8969
|
+
var V05_SCOPES = ["global", "session"];
|
|
8970
|
+
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
8971
|
+
function normalizeStoredEnvVar(raw) {
|
|
8972
|
+
if (typeof raw === "string") {
|
|
8973
|
+
return { value_encrypted: raw, scope: "global" };
|
|
8974
|
+
}
|
|
8975
|
+
return {
|
|
8976
|
+
value_encrypted: raw.value_encrypted,
|
|
8977
|
+
scope: raw.scope,
|
|
8978
|
+
resource_id: raw.resource_id ?? null,
|
|
8979
|
+
extra_config: raw.extra_config ?? null
|
|
8980
|
+
};
|
|
8981
|
+
}
|
|
8982
|
+
function normalizeStoredEnvMap(raw) {
|
|
8983
|
+
const out = {};
|
|
8984
|
+
if (!raw) return out;
|
|
8985
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
8986
|
+
try {
|
|
8987
|
+
out[key] = normalizeStoredEnvVar(value);
|
|
8988
|
+
} catch (err) {
|
|
8989
|
+
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
8990
|
+
}
|
|
8991
|
+
}
|
|
8992
|
+
return out;
|
|
8993
|
+
}
|
|
8994
|
+
|
|
8995
|
+
// src/templates/handlebars-helpers.ts
|
|
8996
|
+
init_cjs_shims();
|
|
8997
|
+
var import_handlebars = __toESM(require("handlebars"), 1);
|
|
8998
|
+
|
|
8999
|
+
// src/mcp/template-patterns.ts
|
|
9000
|
+
init_cjs_shims();
|
|
9001
|
+
|
|
8831
9002
|
// src/tools/mcp/http-headers.ts
|
|
8832
9003
|
init_cjs_shims();
|
|
8833
9004
|
|
|
@@ -8837,7 +9008,7 @@ init_schema();
|
|
|
8837
9008
|
|
|
8838
9009
|
// src/db/repositories/messages.ts
|
|
8839
9010
|
init_cjs_shims();
|
|
8840
|
-
var
|
|
9011
|
+
var import_drizzle_orm24 = require("drizzle-orm");
|
|
8841
9012
|
init_database_wrapper();
|
|
8842
9013
|
init_schema();
|
|
8843
9014
|
var MessagesRepository = class {
|
|
@@ -8905,7 +9076,7 @@ var MessagesRepository = class {
|
|
|
8905
9076
|
* Get message by ID
|
|
8906
9077
|
*/
|
|
8907
9078
|
async findById(messageId) {
|
|
8908
|
-
const row = await select(this.db).from(messages3).where((0,
|
|
9079
|
+
const row = await select(this.db).from(messages3).where((0, import_drizzle_orm24.eq)(messages3.message_id, messageId)).one();
|
|
8909
9080
|
return row ? this.rowToMessage(row) : null;
|
|
8910
9081
|
}
|
|
8911
9082
|
/**
|
|
@@ -8914,19 +9085,19 @@ var MessagesRepository = class {
|
|
|
8914
9085
|
async findAll(filter) {
|
|
8915
9086
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
8916
9087
|
const conditions = [];
|
|
8917
|
-
if (filter?.sessionId) conditions.push((0,
|
|
9088
|
+
if (filter?.sessionId) conditions.push((0, import_drizzle_orm24.eq)(messages3.session_id, filter.sessionId));
|
|
8918
9089
|
if (filter?.sessionIds !== void 0)
|
|
8919
|
-
conditions.push((0,
|
|
8920
|
-
if (filter?.taskId) conditions.push((0,
|
|
8921
|
-
if (filter?.type) conditions.push((0,
|
|
8922
|
-
if (filter?.role) conditions.push((0,
|
|
9090
|
+
conditions.push((0, import_drizzle_orm24.inArray)(messages3.session_id, filter.sessionIds));
|
|
9091
|
+
if (filter?.taskId) conditions.push((0, import_drizzle_orm24.eq)(messages3.task_id, filter.taskId));
|
|
9092
|
+
if (filter?.type) conditions.push((0, import_drizzle_orm24.eq)(messages3.type, filter.type));
|
|
9093
|
+
if (filter?.role) conditions.push((0, import_drizzle_orm24.eq)(messages3.role, filter.role));
|
|
8923
9094
|
if (filter?.visibleToUserId) {
|
|
8924
9095
|
conditions.push(
|
|
8925
9096
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, messages3.session_id)
|
|
8926
9097
|
);
|
|
8927
9098
|
}
|
|
8928
9099
|
let query = select(this.db).from(messages3);
|
|
8929
|
-
if (conditions.length > 0) query = query.where((0,
|
|
9100
|
+
if (conditions.length > 0) query = query.where((0, import_drizzle_orm24.and)(...conditions));
|
|
8930
9101
|
const rows = await query.orderBy(messages3.index).all();
|
|
8931
9102
|
return rows.map((r) => this.rowToMessage(r));
|
|
8932
9103
|
}
|
|
@@ -8934,21 +9105,21 @@ var MessagesRepository = class {
|
|
|
8934
9105
|
* Get all messages for a session (ordered by index)
|
|
8935
9106
|
*/
|
|
8936
9107
|
async findBySessionId(sessionId) {
|
|
8937
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
9108
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm24.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
8938
9109
|
return rows.map((r) => this.rowToMessage(r));
|
|
8939
9110
|
}
|
|
8940
9111
|
/**
|
|
8941
9112
|
* Get all messages for a session filtered by type (ordered by index)
|
|
8942
9113
|
*/
|
|
8943
9114
|
async findBySessionIdAndType(sessionId, type) {
|
|
8944
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
9115
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm24.and)((0, import_drizzle_orm24.eq)(messages3.session_id, sessionId), (0, import_drizzle_orm24.eq)(messages3.type, type))).orderBy(messages3.index).all();
|
|
8945
9116
|
return rows.map((r) => this.rowToMessage(r));
|
|
8946
9117
|
}
|
|
8947
9118
|
/**
|
|
8948
9119
|
* Get all messages for a task (ordered by index)
|
|
8949
9120
|
*/
|
|
8950
9121
|
async findByTaskId(taskId) {
|
|
8951
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
9122
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm24.eq)(messages3.task_id, taskId)).orderBy(messages3.index).all();
|
|
8952
9123
|
return rows.map((r) => this.rowToMessage(r));
|
|
8953
9124
|
}
|
|
8954
9125
|
/**
|
|
@@ -8956,7 +9127,7 @@ var MessagesRepository = class {
|
|
|
8956
9127
|
* Used for task message_range queries
|
|
8957
9128
|
*/
|
|
8958
9129
|
async findByRange(sessionId, startIndex, endIndex) {
|
|
8959
|
-
const rows = await select(this.db).from(messages3).where((0,
|
|
9130
|
+
const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm24.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
8960
9131
|
return rows.filter((r) => r.index >= startIndex && r.index <= endIndex).map((r) => this.rowToMessage(r));
|
|
8961
9132
|
}
|
|
8962
9133
|
/**
|
|
@@ -8969,33 +9140,33 @@ var MessagesRepository = class {
|
|
|
8969
9140
|
}
|
|
8970
9141
|
const updated = { ...existing, ...updates };
|
|
8971
9142
|
const row = this.messageToRow(updated);
|
|
8972
|
-
const result = await update(this.db, messages3).set(row).where((0,
|
|
9143
|
+
const result = await update(this.db, messages3).set(row).where((0, import_drizzle_orm24.eq)(messages3.message_id, messageId)).returning().one();
|
|
8973
9144
|
return this.rowToMessage(result);
|
|
8974
9145
|
}
|
|
8975
9146
|
/**
|
|
8976
9147
|
* Update message task assignment
|
|
8977
9148
|
*/
|
|
8978
9149
|
async assignToTask(messageId, taskId) {
|
|
8979
|
-
const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0,
|
|
9150
|
+
const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0, import_drizzle_orm24.eq)(messages3.message_id, messageId)).returning().one();
|
|
8980
9151
|
return this.rowToMessage(updated);
|
|
8981
9152
|
}
|
|
8982
9153
|
/**
|
|
8983
9154
|
* Delete all messages for a session (cascades automatically via FK)
|
|
8984
9155
|
*/
|
|
8985
9156
|
async deleteBySessionId(sessionId) {
|
|
8986
|
-
await deleteFrom(this.db, messages3).where((0,
|
|
9157
|
+
await deleteFrom(this.db, messages3).where((0, import_drizzle_orm24.eq)(messages3.session_id, sessionId)).run();
|
|
8987
9158
|
}
|
|
8988
9159
|
/**
|
|
8989
9160
|
* Delete a single message
|
|
8990
9161
|
*/
|
|
8991
9162
|
async delete(messageId) {
|
|
8992
|
-
await deleteFrom(this.db, messages3).where((0,
|
|
9163
|
+
await deleteFrom(this.db, messages3).where((0, import_drizzle_orm24.eq)(messages3.message_id, messageId)).run();
|
|
8993
9164
|
}
|
|
8994
9165
|
};
|
|
8995
9166
|
|
|
8996
9167
|
// src/db/repositories/repos.ts
|
|
8997
9168
|
init_cjs_shims();
|
|
8998
|
-
var
|
|
9169
|
+
var import_drizzle_orm25 = require("drizzle-orm");
|
|
8999
9170
|
|
|
9000
9171
|
// src/config/variant-resolver.ts
|
|
9001
9172
|
init_cjs_shims();
|
|
@@ -9145,7 +9316,7 @@ var RepoRepository = class {
|
|
|
9145
9316
|
*/
|
|
9146
9317
|
async resolveId(id) {
|
|
9147
9318
|
return resolveByShortIdPrefix(id, "Repo", async (pattern) => {
|
|
9148
|
-
const rows = await select(this.db).from(repos3).where((0,
|
|
9319
|
+
const rows = await select(this.db).from(repos3).where((0, import_drizzle_orm25.like)(repos3.repo_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
9149
9320
|
return rows.map((r) => r.repo_id);
|
|
9150
9321
|
});
|
|
9151
9322
|
}
|
|
@@ -9156,7 +9327,7 @@ var RepoRepository = class {
|
|
|
9156
9327
|
try {
|
|
9157
9328
|
const insertData = this.repoToInsert(data);
|
|
9158
9329
|
await insert(this.db, repos3).values(insertData).run();
|
|
9159
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
9330
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, insertData.repo_id)).one();
|
|
9160
9331
|
if (!row) {
|
|
9161
9332
|
throw new RepositoryError("Failed to retrieve created repo");
|
|
9162
9333
|
}
|
|
@@ -9175,7 +9346,7 @@ var RepoRepository = class {
|
|
|
9175
9346
|
async findById(id) {
|
|
9176
9347
|
try {
|
|
9177
9348
|
const fullId = await this.resolveId(id);
|
|
9178
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
9349
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).one();
|
|
9179
9350
|
return row ? this.rowToRepo(row) : null;
|
|
9180
9351
|
} catch (error) {
|
|
9181
9352
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -9191,7 +9362,7 @@ var RepoRepository = class {
|
|
|
9191
9362
|
*/
|
|
9192
9363
|
async findBySlug(slug) {
|
|
9193
9364
|
try {
|
|
9194
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
9365
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.slug, slug)).one();
|
|
9195
9366
|
return row ? this.rowToRepo(row) : null;
|
|
9196
9367
|
} catch (error) {
|
|
9197
9368
|
throw new RepositoryError(
|
|
@@ -9259,8 +9430,8 @@ var RepoRepository = class {
|
|
|
9259
9430
|
let changed = 0;
|
|
9260
9431
|
for (const finding of scan.findings) {
|
|
9261
9432
|
await this.db.transaction(async (tx) => {
|
|
9262
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
9263
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
9433
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm25.eq)(repos3.repo_id, finding.repo_id));
|
|
9434
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, finding.repo_id)).one();
|
|
9264
9435
|
if (!currentRow) return;
|
|
9265
9436
|
const data = currentRow.data;
|
|
9266
9437
|
if (typeof data.remote_url !== "string" || !httpUrlHasUserinfo(data.remote_url)) {
|
|
@@ -9272,7 +9443,7 @@ var RepoRepository = class {
|
|
|
9272
9443
|
...data,
|
|
9273
9444
|
remote_url: stripHttpUrlUserinfo(data.remote_url)
|
|
9274
9445
|
}
|
|
9275
|
-
}).where((0,
|
|
9446
|
+
}).where((0, import_drizzle_orm25.eq)(repos3.repo_id, finding.repo_id)).run();
|
|
9276
9447
|
changed += 1;
|
|
9277
9448
|
});
|
|
9278
9449
|
}
|
|
@@ -9294,8 +9465,8 @@ var RepoRepository = class {
|
|
|
9294
9465
|
try {
|
|
9295
9466
|
const fullId = await this.resolveId(id);
|
|
9296
9467
|
return await this.db.transaction(async (tx) => {
|
|
9297
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
9298
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
9468
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm25.eq)(repos3.repo_id, fullId));
|
|
9469
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).one();
|
|
9299
9470
|
if (!currentRow) {
|
|
9300
9471
|
throw new EntityNotFoundError("Repo", id);
|
|
9301
9472
|
}
|
|
@@ -9309,7 +9480,7 @@ var RepoRepository = class {
|
|
|
9309
9480
|
repo_type: insertData.repo_type,
|
|
9310
9481
|
unix_group: merged.unix_group ?? null,
|
|
9311
9482
|
data: insertData.data
|
|
9312
|
-
}).where((0,
|
|
9483
|
+
}).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).run();
|
|
9313
9484
|
merged.clone_error = insertData.data.clone_error;
|
|
9314
9485
|
merged.remote_url = insertData.data.remote_url;
|
|
9315
9486
|
merged.last_updated = newUpdatedAt.toISOString();
|
|
@@ -9343,8 +9514,8 @@ var RepoRepository = class {
|
|
|
9343
9514
|
try {
|
|
9344
9515
|
const fullId = await this.resolveId(id);
|
|
9345
9516
|
return await this.db.transaction(async (tx) => {
|
|
9346
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
9347
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
9517
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm25.eq)(repos3.repo_id, fullId));
|
|
9518
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).one();
|
|
9348
9519
|
if (!currentRow) {
|
|
9349
9520
|
throw new EntityNotFoundError("Repo", id);
|
|
9350
9521
|
}
|
|
@@ -9358,7 +9529,7 @@ var RepoRepository = class {
|
|
|
9358
9529
|
repo_type: insertData.repo_type,
|
|
9359
9530
|
unix_group: next.unix_group ?? null,
|
|
9360
9531
|
data: insertData.data
|
|
9361
|
-
}).where((0,
|
|
9532
|
+
}).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).run();
|
|
9362
9533
|
next.environment = insertData.data.environment;
|
|
9363
9534
|
next.environment_config = insertData.data.environment_config;
|
|
9364
9535
|
next.remote_url = insertData.data.remote_url;
|
|
@@ -9398,7 +9569,7 @@ var RepoRepository = class {
|
|
|
9398
9569
|
async delete(id) {
|
|
9399
9570
|
try {
|
|
9400
9571
|
const fullId = await this.resolveId(id);
|
|
9401
|
-
const result = await deleteFrom(this.db, repos3).where((0,
|
|
9572
|
+
const result = await deleteFrom(this.db, repos3).where((0, import_drizzle_orm25.eq)(repos3.repo_id, fullId)).run();
|
|
9402
9573
|
if (result.rowsAffected === 0) {
|
|
9403
9574
|
throw new EntityNotFoundError("Repo", id);
|
|
9404
9575
|
}
|
|
@@ -9429,7 +9600,7 @@ var RepoRepository = class {
|
|
|
9429
9600
|
*/
|
|
9430
9601
|
async count() {
|
|
9431
9602
|
try {
|
|
9432
|
-
const result = await select(this.db, { count:
|
|
9603
|
+
const result = await select(this.db, { count: import_drizzle_orm25.sql`count(*)` }).from(repos3).one();
|
|
9433
9604
|
return result?.count ?? 0;
|
|
9434
9605
|
} catch (error) {
|
|
9435
9606
|
throw new RepositoryError(
|
|
@@ -9442,34 +9613,28 @@ var RepoRepository = class {
|
|
|
9442
9613
|
|
|
9443
9614
|
// src/db/repositories/schedules.ts
|
|
9444
9615
|
init_cjs_shims();
|
|
9445
|
-
var
|
|
9616
|
+
var import_drizzle_orm26 = require("drizzle-orm");
|
|
9446
9617
|
init_ids();
|
|
9447
9618
|
init_database_wrapper();
|
|
9448
9619
|
init_schema();
|
|
9449
9620
|
|
|
9450
9621
|
// src/db/repositories/serialized-sessions.ts
|
|
9451
9622
|
init_cjs_shims();
|
|
9452
|
-
var
|
|
9623
|
+
var import_drizzle_orm27 = require("drizzle-orm");
|
|
9453
9624
|
init_ids();
|
|
9454
9625
|
init_database_wrapper();
|
|
9455
9626
|
init_schema();
|
|
9456
9627
|
|
|
9457
|
-
// src/db/repositories/session-env-selections.ts
|
|
9458
|
-
init_cjs_shims();
|
|
9459
|
-
var import_drizzle_orm26 = require("drizzle-orm");
|
|
9460
|
-
init_database_wrapper();
|
|
9461
|
-
init_schema();
|
|
9462
|
-
|
|
9463
9628
|
// src/db/repositories/session-mcp-servers.ts
|
|
9464
9629
|
init_cjs_shims();
|
|
9465
|
-
var
|
|
9630
|
+
var import_drizzle_orm29 = require("drizzle-orm");
|
|
9466
9631
|
init_database_wrapper();
|
|
9467
9632
|
init_schema();
|
|
9468
9633
|
|
|
9469
9634
|
// src/db/repositories/sessions.ts
|
|
9470
9635
|
init_cjs_shims();
|
|
9471
9636
|
init_types();
|
|
9472
|
-
var
|
|
9637
|
+
var import_drizzle_orm28 = require("drizzle-orm");
|
|
9473
9638
|
init_config_manager();
|
|
9474
9639
|
init_ids();
|
|
9475
9640
|
init_database_wrapper();
|
|
@@ -9496,40 +9661,43 @@ var SessionRepository = class {
|
|
|
9496
9661
|
const sessionId = row.session_id;
|
|
9497
9662
|
const boardId = branchBoardId ?? null;
|
|
9498
9663
|
const url = baseUrl && boardId ? getSessionUrl(sessionId, baseUrl) : null;
|
|
9499
|
-
return
|
|
9500
|
-
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9512
|
-
|
|
9513
|
-
|
|
9514
|
-
|
|
9515
|
-
|
|
9516
|
-
|
|
9517
|
-
|
|
9518
|
-
|
|
9519
|
-
|
|
9664
|
+
return attachHiddenTenant(
|
|
9665
|
+
{
|
|
9666
|
+
session_id: sessionId,
|
|
9667
|
+
status: row.status,
|
|
9668
|
+
agentic_tool: row.agentic_tool,
|
|
9669
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
9670
|
+
last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
9671
|
+
created_by: row.created_by,
|
|
9672
|
+
unix_username: row.unix_username || null,
|
|
9673
|
+
branch_id: row.branch_id,
|
|
9674
|
+
branch_board_id: boardId,
|
|
9675
|
+
url,
|
|
9676
|
+
...row.data,
|
|
9677
|
+
tasks: row.data.tasks.map((id) => id),
|
|
9678
|
+
genealogy: {
|
|
9679
|
+
parent_session_id: row.parent_session_id,
|
|
9680
|
+
forked_from_session_id: row.forked_from_session_id,
|
|
9681
|
+
fork_point_task_id: genealogyData.fork_point_task_id,
|
|
9682
|
+
fork_point_message_index: genealogyData.fork_point_message_index,
|
|
9683
|
+
spawn_point_task_id: genealogyData.spawn_point_task_id,
|
|
9684
|
+
spawn_point_message_index: genealogyData.spawn_point_message_index,
|
|
9685
|
+
children: genealogyData.children.map((id) => id)
|
|
9686
|
+
},
|
|
9687
|
+
permission_config: row.data.permission_config,
|
|
9688
|
+
scheduled_run_at: row.scheduled_run_at ?? void 0,
|
|
9689
|
+
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
9690
|
+
schedule_id: row.schedule_id ?? void 0,
|
|
9691
|
+
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
9692
|
+
archived: Boolean(row.archived),
|
|
9693
|
+
// Convert SQLite integer (0/1) to boolean
|
|
9694
|
+
archived_reason: row.archived_reason ?? void 0,
|
|
9695
|
+
current_context_usage: row.data.current_context_usage,
|
|
9696
|
+
context_window_limit: row.data.context_window_limit,
|
|
9697
|
+
last_context_update_at: row.data.last_context_update_at
|
|
9520
9698
|
},
|
|
9521
|
-
|
|
9522
|
-
|
|
9523
|
-
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
9524
|
-
schedule_id: row.schedule_id ?? void 0,
|
|
9525
|
-
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
9526
|
-
archived: Boolean(row.archived),
|
|
9527
|
-
// Convert SQLite integer (0/1) to boolean
|
|
9528
|
-
archived_reason: row.archived_reason ?? void 0,
|
|
9529
|
-
current_context_usage: row.data.current_context_usage,
|
|
9530
|
-
context_window_limit: row.data.context_window_limit,
|
|
9531
|
-
last_context_update_at: row.data.last_context_update_at
|
|
9532
|
-
};
|
|
9699
|
+
row
|
|
9700
|
+
);
|
|
9533
9701
|
}
|
|
9534
9702
|
/**
|
|
9535
9703
|
* Convert Session to database insert format
|
|
@@ -9605,7 +9773,7 @@ var SessionRepository = class {
|
|
|
9605
9773
|
*/
|
|
9606
9774
|
async resolveId(id) {
|
|
9607
9775
|
return resolveByShortIdPrefix(id, "Session", async (pattern) => {
|
|
9608
|
-
const rows = await select(this.db).from(sessions3).where((0,
|
|
9776
|
+
const rows = await select(this.db).from(sessions3).where((0, import_drizzle_orm28.like)(sessions3.session_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
9609
9777
|
return rows.map((r) => r.session_id);
|
|
9610
9778
|
});
|
|
9611
9779
|
}
|
|
@@ -9617,7 +9785,7 @@ var SessionRepository = class {
|
|
|
9617
9785
|
const insertData = this.sessionToInsert(data);
|
|
9618
9786
|
await insert(this.db, sessions3).values(insertData).run();
|
|
9619
9787
|
const baseUrl = await getBaseUrl();
|
|
9620
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9788
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, insertData.session_id)).one();
|
|
9621
9789
|
if (!result) {
|
|
9622
9790
|
throw new RepositoryError("Failed to retrieve created session");
|
|
9623
9791
|
}
|
|
@@ -9642,7 +9810,7 @@ var SessionRepository = class {
|
|
|
9642
9810
|
try {
|
|
9643
9811
|
const fullId = await this.resolveId(id);
|
|
9644
9812
|
const baseUrl = await getBaseUrl();
|
|
9645
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9813
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
|
|
9646
9814
|
if (!result) {
|
|
9647
9815
|
return null;
|
|
9648
9816
|
}
|
|
@@ -9665,7 +9833,7 @@ var SessionRepository = class {
|
|
|
9665
9833
|
async findBranchIdBySessionId(id) {
|
|
9666
9834
|
try {
|
|
9667
9835
|
const fullId = await this.resolveId(id);
|
|
9668
|
-
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0,
|
|
9836
|
+
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
|
|
9669
9837
|
return row?.branch_id ?? null;
|
|
9670
9838
|
} catch (error) {
|
|
9671
9839
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -9676,6 +9844,26 @@ var SessionRepository = class {
|
|
|
9676
9844
|
);
|
|
9677
9845
|
}
|
|
9678
9846
|
}
|
|
9847
|
+
/**
|
|
9848
|
+
* Resolve the owning user id for a session without hydrating the full row.
|
|
9849
|
+
* Used by realtime delivery to offer streaming events to the session
|
|
9850
|
+
* creator's own connections as a fallback, so their open tabs keep updating
|
|
9851
|
+
* even before they subscribe to the per-session stream channel.
|
|
9852
|
+
*/
|
|
9853
|
+
async findCreatedByBySessionId(id) {
|
|
9854
|
+
try {
|
|
9855
|
+
const fullId = await this.resolveId(id);
|
|
9856
|
+
const row = await select(this.db, { created_by: sessions3.created_by }).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
|
|
9857
|
+
return row?.created_by ?? null;
|
|
9858
|
+
} catch (error) {
|
|
9859
|
+
if (error instanceof EntityNotFoundError) return null;
|
|
9860
|
+
if (error instanceof AmbiguousIdError) throw error;
|
|
9861
|
+
throw new RepositoryError(
|
|
9862
|
+
`Failed to find session owner: ${error instanceof Error ? error.message : String(error)}`,
|
|
9863
|
+
error
|
|
9864
|
+
);
|
|
9865
|
+
}
|
|
9866
|
+
}
|
|
9679
9867
|
/**
|
|
9680
9868
|
* Find all sessions
|
|
9681
9869
|
*
|
|
@@ -9688,14 +9876,14 @@ var SessionRepository = class {
|
|
|
9688
9876
|
if (filter?.visibleToUserId) {
|
|
9689
9877
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
9690
9878
|
}
|
|
9691
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9879
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
9692
9880
|
branchOwners3,
|
|
9693
|
-
(0,
|
|
9694
|
-
(0,
|
|
9695
|
-
(0,
|
|
9881
|
+
(0, import_drizzle_orm28.and)(
|
|
9882
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
9883
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.user_id, filter.visibleToUserId)
|
|
9696
9884
|
)
|
|
9697
|
-
) : select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9698
|
-
const results = conditions.length > 0 ? await query.where((0,
|
|
9885
|
+
) : select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
|
|
9886
|
+
const results = conditions.length > 0 ? await query.where((0, import_drizzle_orm28.and)(...conditions)).all() : await query.all();
|
|
9699
9887
|
return results.map(
|
|
9700
9888
|
(result) => {
|
|
9701
9889
|
const sessionRow = result.sessions;
|
|
@@ -9718,7 +9906,7 @@ var SessionRepository = class {
|
|
|
9718
9906
|
async findByStatus(status) {
|
|
9719
9907
|
try {
|
|
9720
9908
|
const baseUrl = await getBaseUrl();
|
|
9721
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9909
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.status, status)).all();
|
|
9722
9910
|
return results.map(
|
|
9723
9911
|
(result) => {
|
|
9724
9912
|
const sessionRow = result.sessions;
|
|
@@ -9746,18 +9934,18 @@ var SessionRepository = class {
|
|
|
9746
9934
|
async findByBoard(boardId, filter) {
|
|
9747
9935
|
try {
|
|
9748
9936
|
const baseUrl = await getBaseUrl();
|
|
9749
|
-
const conditions = [(0,
|
|
9937
|
+
const conditions = [(0, import_drizzle_orm28.eq)(branches3.board_id, boardId)];
|
|
9750
9938
|
if (filter?.visibleToUserId) {
|
|
9751
9939
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
9752
9940
|
}
|
|
9753
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
9941
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
9754
9942
|
branchOwners3,
|
|
9755
|
-
(0,
|
|
9756
|
-
(0,
|
|
9757
|
-
(0,
|
|
9943
|
+
(0, import_drizzle_orm28.and)(
|
|
9944
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
9945
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.user_id, filter.visibleToUserId)
|
|
9758
9946
|
)
|
|
9759
|
-
) : select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
9760
|
-
const results = await query.where((0,
|
|
9947
|
+
) : select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
|
|
9948
|
+
const results = await query.where((0, import_drizzle_orm28.and)(...conditions)).all();
|
|
9761
9949
|
return results.map(
|
|
9762
9950
|
(result) => {
|
|
9763
9951
|
const sessionRow = result.sessions;
|
|
@@ -9793,38 +9981,38 @@ var SessionRepository = class {
|
|
|
9793
9981
|
try {
|
|
9794
9982
|
const baseUrl = await getBaseUrl();
|
|
9795
9983
|
const conditions = [];
|
|
9796
|
-
if (opts.boardId !== void 0) conditions.push((0,
|
|
9797
|
-
if (opts.archived !== void 0) conditions.push((0,
|
|
9984
|
+
if (opts.boardId !== void 0) conditions.push((0, import_drizzle_orm28.eq)(branches3.board_id, opts.boardId));
|
|
9985
|
+
if (opts.archived !== void 0) conditions.push((0, import_drizzle_orm28.eq)(sessions3.archived, opts.archived));
|
|
9798
9986
|
if (opts.visibleToUserId) {
|
|
9799
9987
|
conditions.push(visibleBranchAccessCondition(this.db, opts.visibleToUserId));
|
|
9800
9988
|
}
|
|
9801
|
-
const whereClause = conditions.length > 0 ? (0,
|
|
9802
|
-
let countQuery = select(this.db, { count:
|
|
9989
|
+
const whereClause = conditions.length > 0 ? (0, import_drizzle_orm28.and)(...conditions) : void 0;
|
|
9990
|
+
let countQuery = select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
|
|
9803
9991
|
if (opts.visibleToUserId) {
|
|
9804
9992
|
countQuery = countQuery.leftJoin(
|
|
9805
9993
|
branchOwners3,
|
|
9806
|
-
(0,
|
|
9807
|
-
(0,
|
|
9808
|
-
(0,
|
|
9994
|
+
(0, import_drizzle_orm28.and)(
|
|
9995
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
9996
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.user_id, opts.visibleToUserId)
|
|
9809
9997
|
)
|
|
9810
9998
|
);
|
|
9811
9999
|
}
|
|
9812
10000
|
const countRow = await (whereClause ? countQuery.where(whereClause) : countQuery).one();
|
|
9813
10001
|
const total = Number(countRow?.count ?? 0);
|
|
9814
|
-
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
10002
|
+
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
|
|
9815
10003
|
if (opts.visibleToUserId) {
|
|
9816
10004
|
dataQuery = dataQuery.leftJoin(
|
|
9817
10005
|
branchOwners3,
|
|
9818
|
-
(0,
|
|
9819
|
-
(0,
|
|
9820
|
-
(0,
|
|
10006
|
+
(0, import_drizzle_orm28.and)(
|
|
10007
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
10008
|
+
(0, import_drizzle_orm28.eq)(branchOwners3.user_id, opts.visibleToUserId)
|
|
9821
10009
|
)
|
|
9822
10010
|
);
|
|
9823
10011
|
}
|
|
9824
10012
|
if (whereClause) dataQuery = dataQuery.where(whereClause);
|
|
9825
10013
|
if (opts.sortUpdatedAt !== void 0) {
|
|
9826
10014
|
dataQuery = dataQuery.orderBy(
|
|
9827
|
-
opts.sortUpdatedAt === -1 ? (0,
|
|
10015
|
+
opts.sortUpdatedAt === -1 ? (0, import_drizzle_orm28.desc)(sessions3.updated_at) : sessions3.updated_at
|
|
9828
10016
|
);
|
|
9829
10017
|
}
|
|
9830
10018
|
if (opts.limit !== void 0) dataQuery = dataQuery.limit(opts.limit);
|
|
@@ -9854,10 +10042,10 @@ var SessionRepository = class {
|
|
|
9854
10042
|
const fullId = await this.resolveId(sessionId);
|
|
9855
10043
|
const baseUrl = await getBaseUrl();
|
|
9856
10044
|
const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
|
|
9857
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
9858
|
-
(0,
|
|
9859
|
-
|
|
9860
|
-
|
|
10045
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where(
|
|
10046
|
+
(0, import_drizzle_orm28.or)(
|
|
10047
|
+
import_drizzle_orm28.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
|
|
10048
|
+
import_drizzle_orm28.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
|
|
9861
10049
|
)
|
|
9862
10050
|
).all();
|
|
9863
10051
|
return results.map(
|
|
@@ -9923,8 +10111,8 @@ var SessionRepository = class {
|
|
|
9923
10111
|
const statusInfo = updates.status ? ` (status: ${updates.status}, ready_for_prompt: ${updates.ready_for_prompt})` : "";
|
|
9924
10112
|
console.debug(`\u{1F504} [SessionRepo] Updating session ${shortId(fullId)}${statusInfo}`);
|
|
9925
10113
|
const result = await this.db.transaction(async (tx) => {
|
|
9926
|
-
await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0,
|
|
9927
|
-
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0,
|
|
10114
|
+
await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0, import_drizzle_orm28.eq)(sessions3.session_id, fullId));
|
|
10115
|
+
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
|
|
9928
10116
|
if (!currentResult) {
|
|
9929
10117
|
throw new EntityNotFoundError("Session", id);
|
|
9930
10118
|
}
|
|
@@ -9937,12 +10125,12 @@ var SessionRepository = class {
|
|
|
9937
10125
|
if (shouldRefreshLastUpdated) {
|
|
9938
10126
|
insertData.updated_at = /* @__PURE__ */ new Date();
|
|
9939
10127
|
}
|
|
9940
|
-
await update(txAsDb(tx), sessions3).set(insertData).where((0,
|
|
10128
|
+
await update(txAsDb(tx), sessions3).set(insertData).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).run();
|
|
9941
10129
|
if (!insertData.updated_at) {
|
|
9942
10130
|
throw new RepositoryError("Session update did not produce an updated_at timestamp");
|
|
9943
10131
|
}
|
|
9944
10132
|
merged.last_updated = insertData.updated_at.toISOString();
|
|
9945
|
-
return merged;
|
|
10133
|
+
return attachHiddenTenant(merged, currentRow);
|
|
9946
10134
|
});
|
|
9947
10135
|
return result;
|
|
9948
10136
|
} catch (error) {
|
|
@@ -9960,8 +10148,8 @@ var SessionRepository = class {
|
|
|
9960
10148
|
async countMessages(sessionId) {
|
|
9961
10149
|
const fullId = await this.resolveId(sessionId);
|
|
9962
10150
|
const result = await select(this.db, {
|
|
9963
|
-
count:
|
|
9964
|
-
}).from(messages3).where((0,
|
|
10151
|
+
count: import_drizzle_orm28.sql`count(*)`
|
|
10152
|
+
}).from(messages3).where((0, import_drizzle_orm28.eq)(messages3.session_id, fullId)).one();
|
|
9965
10153
|
return Number(result?.count ?? 0);
|
|
9966
10154
|
}
|
|
9967
10155
|
/**
|
|
@@ -9970,7 +10158,7 @@ var SessionRepository = class {
|
|
|
9970
10158
|
async delete(id) {
|
|
9971
10159
|
try {
|
|
9972
10160
|
const fullId = await this.resolveId(id);
|
|
9973
|
-
const result = await deleteFrom(this.db, sessions3).where((0,
|
|
10161
|
+
const result = await deleteFrom(this.db, sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).run();
|
|
9974
10162
|
if (result.rowsAffected === 0) {
|
|
9975
10163
|
throw new EntityNotFoundError("Session", id);
|
|
9976
10164
|
}
|
|
@@ -9994,7 +10182,7 @@ var SessionRepository = class {
|
|
|
9994
10182
|
*/
|
|
9995
10183
|
async count() {
|
|
9996
10184
|
try {
|
|
9997
|
-
const result = await select(this.db, { count:
|
|
10185
|
+
const result = await select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).one();
|
|
9998
10186
|
return result?.count ?? 0;
|
|
9999
10187
|
} catch (error) {
|
|
10000
10188
|
throw new RepositoryError(
|
|
@@ -10017,8 +10205,8 @@ var SessionRepository = class {
|
|
|
10017
10205
|
async findScheduleRun(scheduleId, scheduledRunAt) {
|
|
10018
10206
|
try {
|
|
10019
10207
|
const baseUrl = await getBaseUrl();
|
|
10020
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
10021
|
-
(0,
|
|
10208
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where(
|
|
10209
|
+
(0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm28.eq)(sessions3.scheduled_run_at, scheduledRunAt))
|
|
10022
10210
|
).one();
|
|
10023
10211
|
if (!result) return null;
|
|
10024
10212
|
const r = result;
|
|
@@ -10041,9 +10229,9 @@ var SessionRepository = class {
|
|
|
10041
10229
|
async findByScheduleId(scheduleId, opts = {}) {
|
|
10042
10230
|
try {
|
|
10043
10231
|
const baseUrl = await getBaseUrl();
|
|
10044
|
-
let query = select(this.db).from(sessions3).leftJoin(branches3, (0,
|
|
10232
|
+
let query = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId));
|
|
10045
10233
|
if (opts.orderByScheduledRunAt === "desc") {
|
|
10046
|
-
query = query.orderBy((0,
|
|
10234
|
+
query = query.orderBy((0, import_drizzle_orm28.desc)(sessions3.scheduled_run_at));
|
|
10047
10235
|
} else if (opts.orderByScheduledRunAt === "asc") {
|
|
10048
10236
|
query = query.orderBy(sessions3.scheduled_run_at);
|
|
10049
10237
|
}
|
|
@@ -10068,7 +10256,7 @@ var SessionRepository = class {
|
|
|
10068
10256
|
*/
|
|
10069
10257
|
async countByScheduleId(scheduleId) {
|
|
10070
10258
|
try {
|
|
10071
|
-
const result = await select(this.db, { count:
|
|
10259
|
+
const result = await select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId)).one();
|
|
10072
10260
|
return Number(result?.count ?? 0);
|
|
10073
10261
|
} catch (error) {
|
|
10074
10262
|
throw new RepositoryError(
|
|
@@ -10090,7 +10278,7 @@ var SessionRepository = class {
|
|
|
10090
10278
|
async existsInBranchWithStatuses(branchId, statuses) {
|
|
10091
10279
|
if (statuses.length === 0) return false;
|
|
10092
10280
|
try {
|
|
10093
|
-
const row = await select(this.db, { one:
|
|
10281
|
+
const row = await select(this.db, { one: import_drizzle_orm28.sql`1` }).from(sessions3).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.branch_id, branchId), (0, import_drizzle_orm28.inArray)(sessions3.status, [...statuses]))).limit(1).one();
|
|
10094
10282
|
return row != null;
|
|
10095
10283
|
} catch (error) {
|
|
10096
10284
|
throw new RepositoryError(
|
|
@@ -10106,7 +10294,7 @@ var SessionRepository = class {
|
|
|
10106
10294
|
async existsInScheduleWithStatuses(scheduleId, statuses) {
|
|
10107
10295
|
if (statuses.length === 0) return false;
|
|
10108
10296
|
try {
|
|
10109
|
-
const row = await select(this.db, { one:
|
|
10297
|
+
const row = await select(this.db, { one: import_drizzle_orm28.sql`1` }).from(sessions3).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm28.inArray)(sessions3.status, [...statuses]))).limit(1).one();
|
|
10110
10298
|
return row != null;
|
|
10111
10299
|
} catch (error) {
|
|
10112
10300
|
throw new RepositoryError(
|
|
@@ -10137,10 +10325,10 @@ var SessionRepository = class {
|
|
|
10137
10325
|
async findAccessibleSessions(userId, boardId) {
|
|
10138
10326
|
const baseUrl = await getBaseUrl();
|
|
10139
10327
|
const accessCondition = visibleBranchAccessCondition(this.db, userId);
|
|
10140
|
-
const whereCondition = boardId ? (0,
|
|
10141
|
-
const results = await select(this.db).from(sessions3).innerJoin(branches3, (0,
|
|
10328
|
+
const whereCondition = boardId ? (0, import_drizzle_orm28.and)(accessCondition, (0, import_drizzle_orm28.eq)(branches3.board_id, boardId)) : accessCondition;
|
|
10329
|
+
const results = await select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
10142
10330
|
branchOwners3,
|
|
10143
|
-
(0,
|
|
10331
|
+
(0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm28.eq)(branchOwners3.user_id, userId))
|
|
10144
10332
|
).where(whereCondition).all();
|
|
10145
10333
|
const seen = /* @__PURE__ */ new Set();
|
|
10146
10334
|
const sessionsOut = [];
|
|
@@ -10183,8 +10371,8 @@ var SessionRepository = class {
|
|
|
10183
10371
|
for (const sessionId of sessionIds) {
|
|
10184
10372
|
const query = select(this.db, {
|
|
10185
10373
|
data: messagesTable.data
|
|
10186
|
-
}).from(messagesTable).where((0,
|
|
10187
|
-
const lastMessage = await query.orderBy((0,
|
|
10374
|
+
}).from(messagesTable).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(messagesTable.session_id, sessionId), (0, import_drizzle_orm28.eq)(messagesTable.role, "assistant")));
|
|
10375
|
+
const lastMessage = await query.orderBy((0, import_drizzle_orm28.desc)(messagesTable.index)).limit(1).one();
|
|
10188
10376
|
if (lastMessage) {
|
|
10189
10377
|
const messageData = lastMessage.data;
|
|
10190
10378
|
let fullText = "";
|
|
@@ -10218,7 +10406,7 @@ var SessionRepository = class {
|
|
|
10218
10406
|
*/
|
|
10219
10407
|
async exists(sessionId) {
|
|
10220
10408
|
try {
|
|
10221
|
-
const row = await select(this.db).from(sessions3).where((0,
|
|
10409
|
+
const row = await select(this.db).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, sessionId)).one();
|
|
10222
10410
|
return row != null;
|
|
10223
10411
|
} catch (error) {
|
|
10224
10412
|
throw new RepositoryError(
|
|
@@ -10231,7 +10419,7 @@ var SessionRepository = class {
|
|
|
10231
10419
|
|
|
10232
10420
|
// src/db/repositories/session-relationships.ts
|
|
10233
10421
|
init_cjs_shims();
|
|
10234
|
-
var
|
|
10422
|
+
var import_drizzle_orm30 = require("drizzle-orm");
|
|
10235
10423
|
init_ids();
|
|
10236
10424
|
init_database_wrapper();
|
|
10237
10425
|
init_schema();
|
|
@@ -10239,7 +10427,7 @@ init_schema();
|
|
|
10239
10427
|
// src/db/repositories/tasks.ts
|
|
10240
10428
|
init_cjs_shims();
|
|
10241
10429
|
init_types();
|
|
10242
|
-
var
|
|
10430
|
+
var import_drizzle_orm31 = require("drizzle-orm");
|
|
10243
10431
|
init_ids();
|
|
10244
10432
|
init_database_wrapper();
|
|
10245
10433
|
init_schema();
|
|
@@ -10327,7 +10515,7 @@ var TaskRepository = class {
|
|
|
10327
10515
|
*/
|
|
10328
10516
|
async resolveId(id) {
|
|
10329
10517
|
return resolveByShortIdPrefix(id, "Task", async (pattern) => {
|
|
10330
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
10518
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.like)(tasks3.task_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
10331
10519
|
return rows.map((r) => r.task_id);
|
|
10332
10520
|
});
|
|
10333
10521
|
}
|
|
@@ -10338,7 +10526,7 @@ var TaskRepository = class {
|
|
|
10338
10526
|
try {
|
|
10339
10527
|
const insertData = this.taskToInsert(data);
|
|
10340
10528
|
await insert(this.db, tasks3).values(insertData).run();
|
|
10341
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
10529
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
10342
10530
|
if (!row) {
|
|
10343
10531
|
throw new RepositoryError("Failed to retrieve created task");
|
|
10344
10532
|
}
|
|
@@ -10362,7 +10550,7 @@ var TaskRepository = class {
|
|
|
10362
10550
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
10363
10551
|
await insert(this.db, tasks3).values(inserts).run();
|
|
10364
10552
|
const taskIds = inserts.map((t3) => t3.task_id);
|
|
10365
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
10553
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.inArray)(tasks3.task_id, taskIds)).all();
|
|
10366
10554
|
const rowsById = new Map(rows.map((r) => [r.task_id, r]));
|
|
10367
10555
|
return taskIds.map((id) => this.rowToTask(rowsById.get(id)));
|
|
10368
10556
|
} catch (error) {
|
|
@@ -10378,7 +10566,7 @@ var TaskRepository = class {
|
|
|
10378
10566
|
async findById(id) {
|
|
10379
10567
|
try {
|
|
10380
10568
|
const fullId = await this.resolveId(id);
|
|
10381
|
-
const row = await select(this.db).from(tasks3).where((0,
|
|
10569
|
+
const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).one();
|
|
10382
10570
|
return row ? this.rowToTask(row) : null;
|
|
10383
10571
|
} catch (error) {
|
|
10384
10572
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -10396,17 +10584,17 @@ var TaskRepository = class {
|
|
|
10396
10584
|
try {
|
|
10397
10585
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
10398
10586
|
const conditions = [];
|
|
10399
|
-
if (filter?.sessionId) conditions.push((0,
|
|
10587
|
+
if (filter?.sessionId) conditions.push((0, import_drizzle_orm31.eq)(tasks3.session_id, filter.sessionId));
|
|
10400
10588
|
if (filter?.sessionIds !== void 0)
|
|
10401
|
-
conditions.push((0,
|
|
10402
|
-
if (filter?.status) conditions.push((0,
|
|
10589
|
+
conditions.push((0, import_drizzle_orm31.inArray)(tasks3.session_id, filter.sessionIds));
|
|
10590
|
+
if (filter?.status) conditions.push((0, import_drizzle_orm31.eq)(tasks3.status, filter.status));
|
|
10403
10591
|
if (filter?.visibleToUserId) {
|
|
10404
10592
|
conditions.push(
|
|
10405
10593
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, tasks3.session_id)
|
|
10406
10594
|
);
|
|
10407
10595
|
}
|
|
10408
10596
|
const query = select(this.db).from(tasks3);
|
|
10409
|
-
const rows = conditions.length > 0 ? await query.where((0,
|
|
10597
|
+
const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm31.and)(...conditions)).all() : await query.all();
|
|
10410
10598
|
return rows.map((row) => this.rowToTask(row));
|
|
10411
10599
|
} catch (error) {
|
|
10412
10600
|
throw new RepositoryError(
|
|
@@ -10420,7 +10608,7 @@ var TaskRepository = class {
|
|
|
10420
10608
|
*/
|
|
10421
10609
|
async findBySession(sessionId) {
|
|
10422
10610
|
try {
|
|
10423
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
10611
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
|
|
10424
10612
|
return rows.map((row) => this.rowToTask(row));
|
|
10425
10613
|
} catch (error) {
|
|
10426
10614
|
throw new RepositoryError(
|
|
@@ -10434,7 +10622,7 @@ var TaskRepository = class {
|
|
|
10434
10622
|
*/
|
|
10435
10623
|
async findRunning() {
|
|
10436
10624
|
try {
|
|
10437
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
10625
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.status, TaskStatus.RUNNING)).all();
|
|
10438
10626
|
return rows.map((row) => this.rowToTask(row));
|
|
10439
10627
|
} catch (error) {
|
|
10440
10628
|
throw new RepositoryError(
|
|
@@ -10455,7 +10643,7 @@ var TaskRepository = class {
|
|
|
10455
10643
|
async findOrphaned() {
|
|
10456
10644
|
try {
|
|
10457
10645
|
const rows = await select(this.db).from(tasks3).where(
|
|
10458
|
-
|
|
10646
|
+
import_drizzle_orm31.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input')`
|
|
10459
10647
|
).all();
|
|
10460
10648
|
return rows.map((row) => this.rowToTask(row));
|
|
10461
10649
|
} catch (error) {
|
|
@@ -10475,7 +10663,7 @@ var TaskRepository = class {
|
|
|
10475
10663
|
async findActiveWithExecutorHeartbeat() {
|
|
10476
10664
|
try {
|
|
10477
10665
|
const rows = await select(this.db).from(tasks3).where(
|
|
10478
|
-
|
|
10666
|
+
import_drizzle_orm31.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input') AND ${tasks3.last_executor_heartbeat_at} IS NOT NULL`
|
|
10479
10667
|
).all();
|
|
10480
10668
|
return rows.map((row) => this.rowToTask(row));
|
|
10481
10669
|
} catch (error) {
|
|
@@ -10490,7 +10678,7 @@ var TaskRepository = class {
|
|
|
10490
10678
|
*/
|
|
10491
10679
|
async findByStatus(status) {
|
|
10492
10680
|
try {
|
|
10493
|
-
const rows = await select(this.db).from(tasks3).where((0,
|
|
10681
|
+
const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.status, status)).all();
|
|
10494
10682
|
return rows.map((row) => this.rowToTask(row));
|
|
10495
10683
|
} catch (error) {
|
|
10496
10684
|
throw new RepositoryError(
|
|
@@ -10512,8 +10700,8 @@ var TaskRepository = class {
|
|
|
10512
10700
|
`\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
|
|
10513
10701
|
);
|
|
10514
10702
|
const result = await this.db.transaction(async (tx) => {
|
|
10515
|
-
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0,
|
|
10516
|
-
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
10703
|
+
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0, import_drizzle_orm31.eq)(tasks3.task_id, fullId));
|
|
10704
|
+
const currentRow = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).one();
|
|
10517
10705
|
if (!currentRow) {
|
|
10518
10706
|
throw new EntityNotFoundError("Task", id);
|
|
10519
10707
|
}
|
|
@@ -10527,7 +10715,7 @@ var TaskRepository = class {
|
|
|
10527
10715
|
last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
|
|
10528
10716
|
session_md5: insertData.session_md5,
|
|
10529
10717
|
data: insertData.data
|
|
10530
|
-
}).where((0,
|
|
10718
|
+
}).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).run();
|
|
10531
10719
|
return merged;
|
|
10532
10720
|
});
|
|
10533
10721
|
return result;
|
|
@@ -10546,7 +10734,7 @@ var TaskRepository = class {
|
|
|
10546
10734
|
async delete(id) {
|
|
10547
10735
|
try {
|
|
10548
10736
|
const fullId = await this.resolveId(id);
|
|
10549
|
-
const result = await deleteFrom(this.db, tasks3).where((0,
|
|
10737
|
+
const result = await deleteFrom(this.db, tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).run();
|
|
10550
10738
|
if (result.rowsAffected === 0) {
|
|
10551
10739
|
throw new EntityNotFoundError("Task", id);
|
|
10552
10740
|
}
|
|
@@ -10600,15 +10788,15 @@ var TaskRepository = class {
|
|
|
10600
10788
|
}
|
|
10601
10789
|
return this.db.transaction(async (tx) => {
|
|
10602
10790
|
const positionRow = await select(txAsDb(tx), {
|
|
10603
|
-
maxPos:
|
|
10604
|
-
}).from(tasks3).where(
|
|
10791
|
+
maxPos: import_drizzle_orm31.sql`max(${tasks3.queue_position})`
|
|
10792
|
+
}).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${input.session_id} AND ${tasks3.status} = 'queued'`).one();
|
|
10605
10793
|
const nextPosition = (positionRow?.maxPos ?? 0) + 1;
|
|
10606
10794
|
const insertData = this.taskToInsert({
|
|
10607
10795
|
...taskBase,
|
|
10608
10796
|
queue_position: nextPosition
|
|
10609
10797
|
});
|
|
10610
10798
|
await insert(txAsDb(tx), tasks3).values(insertData).run();
|
|
10611
|
-
const row = await select(txAsDb(tx)).from(tasks3).where((0,
|
|
10799
|
+
const row = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, insertData.task_id)).one();
|
|
10612
10800
|
if (!row) {
|
|
10613
10801
|
throw new RepositoryError("Failed to retrieve created queued task");
|
|
10614
10802
|
}
|
|
@@ -10620,7 +10808,7 @@ var TaskRepository = class {
|
|
|
10620
10808
|
*/
|
|
10621
10809
|
async findQueued(sessionId) {
|
|
10622
10810
|
try {
|
|
10623
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
10811
|
+
const rows = await select(this.db).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).all();
|
|
10624
10812
|
return rows.map((row) => this.rowToTask(row));
|
|
10625
10813
|
} catch (error) {
|
|
10626
10814
|
throw new RepositoryError(
|
|
@@ -10635,7 +10823,7 @@ var TaskRepository = class {
|
|
|
10635
10823
|
*/
|
|
10636
10824
|
async getNextQueued(sessionId) {
|
|
10637
10825
|
try {
|
|
10638
|
-
const row = await select(this.db).from(tasks3).where(
|
|
10826
|
+
const row = await select(this.db).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).limit(1).one();
|
|
10639
10827
|
return row ? this.rowToTask(row) : null;
|
|
10640
10828
|
} catch (error) {
|
|
10641
10829
|
throw new RepositoryError(
|
|
@@ -10649,7 +10837,7 @@ var TaskRepository = class {
|
|
|
10649
10837
|
*/
|
|
10650
10838
|
async countBySession(sessionId) {
|
|
10651
10839
|
try {
|
|
10652
|
-
const result = await select(this.db, { count:
|
|
10840
|
+
const result = await select(this.db, { count: import_drizzle_orm31.sql`count(*)` }).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.session_id, sessionId)).one();
|
|
10653
10841
|
return result?.count ?? 0;
|
|
10654
10842
|
} catch (error) {
|
|
10655
10843
|
throw new RepositoryError(
|
|
@@ -10663,7 +10851,7 @@ var TaskRepository = class {
|
|
|
10663
10851
|
// src/db/repositories/thread-session-map.ts
|
|
10664
10852
|
init_cjs_shims();
|
|
10665
10853
|
init_types();
|
|
10666
|
-
var
|
|
10854
|
+
var import_drizzle_orm32 = require("drizzle-orm");
|
|
10667
10855
|
init_ids();
|
|
10668
10856
|
init_database_wrapper();
|
|
10669
10857
|
init_schema();
|
|
@@ -10672,7 +10860,7 @@ init_schema();
|
|
|
10672
10860
|
init_cjs_shims();
|
|
10673
10861
|
var import_node_crypto5 = require("crypto");
|
|
10674
10862
|
var import_bcryptjs2 = __toESM(require("bcryptjs"), 1);
|
|
10675
|
-
var
|
|
10863
|
+
var import_drizzle_orm33 = require("drizzle-orm");
|
|
10676
10864
|
init_ids();
|
|
10677
10865
|
init_database_wrapper();
|
|
10678
10866
|
init_schema();
|
|
@@ -10680,44 +10868,14 @@ init_tenant_context();
|
|
|
10680
10868
|
|
|
10681
10869
|
// src/db/repositories/user-mcp-oauth-tokens.ts
|
|
10682
10870
|
init_cjs_shims();
|
|
10683
|
-
var
|
|
10871
|
+
var import_drizzle_orm34 = require("drizzle-orm");
|
|
10684
10872
|
init_database_wrapper();
|
|
10685
10873
|
init_schema();
|
|
10686
10874
|
|
|
10687
10875
|
// src/db/repositories/users.ts
|
|
10688
10876
|
init_cjs_shims();
|
|
10689
10877
|
init_types();
|
|
10690
|
-
var
|
|
10691
|
-
|
|
10692
|
-
// src/config/env-vars.ts
|
|
10693
|
-
init_cjs_shims();
|
|
10694
|
-
var V05_SCOPES = ["global", "session"];
|
|
10695
|
-
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
10696
|
-
function normalizeStoredEnvVar(raw) {
|
|
10697
|
-
if (typeof raw === "string") {
|
|
10698
|
-
return { value_encrypted: raw, scope: "global" };
|
|
10699
|
-
}
|
|
10700
|
-
return {
|
|
10701
|
-
value_encrypted: raw.value_encrypted,
|
|
10702
|
-
scope: raw.scope,
|
|
10703
|
-
resource_id: raw.resource_id ?? null,
|
|
10704
|
-
extra_config: raw.extra_config ?? null
|
|
10705
|
-
};
|
|
10706
|
-
}
|
|
10707
|
-
function normalizeStoredEnvMap(raw) {
|
|
10708
|
-
const out = {};
|
|
10709
|
-
if (!raw) return out;
|
|
10710
|
-
for (const [key, value] of Object.entries(raw)) {
|
|
10711
|
-
try {
|
|
10712
|
-
out[key] = normalizeStoredEnvVar(value);
|
|
10713
|
-
} catch (err) {
|
|
10714
|
-
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
10715
|
-
}
|
|
10716
|
-
}
|
|
10717
|
-
return out;
|
|
10718
|
-
}
|
|
10719
|
-
|
|
10720
|
-
// src/db/repositories/users.ts
|
|
10878
|
+
var import_drizzle_orm35 = require("drizzle-orm");
|
|
10721
10879
|
init_ids();
|
|
10722
10880
|
init_database_wrapper();
|
|
10723
10881
|
init_schema();
|
|
@@ -10820,7 +10978,7 @@ var UsersRepository = class {
|
|
|
10820
10978
|
*/
|
|
10821
10979
|
async resolveId(id) {
|
|
10822
10980
|
return resolveByShortIdPrefix(id, "User", async (pattern) => {
|
|
10823
|
-
const rows = await select(this.db).from(users3).where((0,
|
|
10981
|
+
const rows = await select(this.db).from(users3).where((0, import_drizzle_orm35.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
10824
10982
|
return rows.map((r) => r.user_id);
|
|
10825
10983
|
});
|
|
10826
10984
|
}
|
|
@@ -10828,7 +10986,7 @@ var UsersRepository = class {
|
|
|
10828
10986
|
* Check if unix_username is already taken by another user
|
|
10829
10987
|
*/
|
|
10830
10988
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
10831
|
-
const result = await select(this.db).from(users3).where((0,
|
|
10989
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.unix_username, unixUsername)).one();
|
|
10832
10990
|
if (!result) {
|
|
10833
10991
|
return false;
|
|
10834
10992
|
}
|
|
@@ -10851,7 +11009,7 @@ var UsersRepository = class {
|
|
|
10851
11009
|
}
|
|
10852
11010
|
const insertData = this.userToInsert(data);
|
|
10853
11011
|
await insert(this.db, users3).values(insertData).run();
|
|
10854
|
-
const row = await select(this.db).from(users3).where((0,
|
|
11012
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, insertData.user_id)).one();
|
|
10855
11013
|
if (!row) {
|
|
10856
11014
|
throw new RepositoryError("Failed to retrieve created user");
|
|
10857
11015
|
}
|
|
@@ -10863,7 +11021,7 @@ var UsersRepository = class {
|
|
|
10863
11021
|
async findById(id) {
|
|
10864
11022
|
try {
|
|
10865
11023
|
const fullId = await this.resolveId(id);
|
|
10866
|
-
const result = await select(this.db).from(users3).where((0,
|
|
11024
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
|
|
10867
11025
|
if (!result) {
|
|
10868
11026
|
return null;
|
|
10869
11027
|
}
|
|
@@ -10879,7 +11037,7 @@ var UsersRepository = class {
|
|
|
10879
11037
|
* Find user by email
|
|
10880
11038
|
*/
|
|
10881
11039
|
async findByEmail(email) {
|
|
10882
|
-
const result = await select(this.db).from(users3).where((0,
|
|
11040
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.email, email)).one();
|
|
10883
11041
|
if (!result) {
|
|
10884
11042
|
return null;
|
|
10885
11043
|
}
|
|
@@ -10900,7 +11058,7 @@ var UsersRepository = class {
|
|
|
10900
11058
|
if (!normalizedEmail) return null;
|
|
10901
11059
|
const exact = await this.findByEmail(normalizedEmail);
|
|
10902
11060
|
if (exact) return exact;
|
|
10903
|
-
const results = await select(this.db).from(users3).where(
|
|
11061
|
+
const results = await select(this.db).from(users3).where(import_drizzle_orm35.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
|
|
10904
11062
|
if (results.length !== 1) {
|
|
10905
11063
|
if (results.length > 1) {
|
|
10906
11064
|
console.warn(
|
|
@@ -10950,8 +11108,8 @@ var UsersRepository = class {
|
|
|
10950
11108
|
await update(this.db, users3).set({
|
|
10951
11109
|
...insertData,
|
|
10952
11110
|
updated_at: /* @__PURE__ */ new Date()
|
|
10953
|
-
}).where((0,
|
|
10954
|
-
const row = await select(this.db).from(users3).where((0,
|
|
11111
|
+
}).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
|
|
11112
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
|
|
10955
11113
|
if (!row) {
|
|
10956
11114
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
10957
11115
|
}
|
|
@@ -10962,7 +11120,7 @@ var UsersRepository = class {
|
|
|
10962
11120
|
*/
|
|
10963
11121
|
async delete(id) {
|
|
10964
11122
|
const fullId = await this.resolveId(id);
|
|
10965
|
-
await deleteFrom(this.db, users3).where((0,
|
|
11123
|
+
await deleteFrom(this.db, users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
|
|
10966
11124
|
}
|
|
10967
11125
|
/**
|
|
10968
11126
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -10970,7 +11128,7 @@ var UsersRepository = class {
|
|
|
10970
11128
|
async getRawRow(id) {
|
|
10971
11129
|
try {
|
|
10972
11130
|
const fullId = await this.resolveId(id);
|
|
10973
|
-
const result = await select(this.db).from(users3).where((0,
|
|
11131
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
|
|
10974
11132
|
return result;
|
|
10975
11133
|
} catch (error) {
|
|
10976
11134
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -11052,7 +11210,7 @@ var UsersRepository = class {
|
|
|
11052
11210
|
await update(this.db, users3).set({
|
|
11053
11211
|
data: { ...row.data, agentic_tools: next },
|
|
11054
11212
|
updated_at: /* @__PURE__ */ new Date()
|
|
11055
|
-
}).where((0,
|
|
11213
|
+
}).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
|
|
11056
11214
|
}
|
|
11057
11215
|
/**
|
|
11058
11216
|
* Delete a single credential field for a tool.
|
|
@@ -11078,7 +11236,7 @@ var UsersRepository = class {
|
|
|
11078
11236
|
await update(this.db, users3).set({
|
|
11079
11237
|
data: { ...row.data, agentic_tools: next },
|
|
11080
11238
|
updated_at: /* @__PURE__ */ new Date()
|
|
11081
|
-
}).where((0,
|
|
11239
|
+
}).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
|
|
11082
11240
|
}
|
|
11083
11241
|
};
|
|
11084
11242
|
|
|
@@ -11794,23 +11952,9 @@ var import_node_fs2 = __toESM(require("fs"), 1);
|
|
|
11794
11952
|
init_config_manager();
|
|
11795
11953
|
init_constants();
|
|
11796
11954
|
|
|
11797
|
-
// src/config/env-blocklist.ts
|
|
11798
|
-
init_cjs_shims();
|
|
11799
|
-
var BLOCKED_ENV_PATTERNS = Object.freeze([
|
|
11800
|
-
/^LD_/i,
|
|
11801
|
-
/^DYLD_/i,
|
|
11802
|
-
/^PYTHON(?!_AGOR_)/i
|
|
11803
|
-
]);
|
|
11804
|
-
|
|
11805
11955
|
// src/config/env-locking.ts
|
|
11806
11956
|
init_cjs_shims();
|
|
11807
11957
|
|
|
11808
|
-
// src/config/env-resolver.ts
|
|
11809
|
-
init_cjs_shims();
|
|
11810
|
-
var import_drizzle_orm35 = require("drizzle-orm");
|
|
11811
|
-
init_database_wrapper();
|
|
11812
|
-
init_schema();
|
|
11813
|
-
|
|
11814
11958
|
// src/config/env-validation.ts
|
|
11815
11959
|
init_cjs_shims();
|
|
11816
11960
|
var ENV_VAR_CONSTRAINTS = {
|