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.js
CHANGED
|
@@ -7191,6 +7191,63 @@ var BranchRepository = class {
|
|
|
7191
7191
|
}
|
|
7192
7192
|
return Array.from(userIds);
|
|
7193
7193
|
}
|
|
7194
|
+
/**
|
|
7195
|
+
* Find non-archived branches whose explicit filesystem access set can change
|
|
7196
|
+
* when membership in the given group changes.
|
|
7197
|
+
*
|
|
7198
|
+
* Keep this inverse lookup in lockstep with findExplicitFsAccessUserIds():
|
|
7199
|
+
* both encode which group grants materialize into branch-folder access.
|
|
7200
|
+
* App-only grants (`fs_access = 'none'`) are intentionally excluded because
|
|
7201
|
+
* membership changes for those grants do not require branch-folder mutation.
|
|
7202
|
+
*/
|
|
7203
|
+
async findExplicitFsAccessBranchIdsForGroup(groupId) {
|
|
7204
|
+
const directRows = await select(this.db, { branch_id: branchGroupGrants3.branch_id }).from(branchGroupGrants3).innerJoin(branches3, eq8(branches3.branch_id, branchGroupGrants3.branch_id)).innerJoin(
|
|
7205
|
+
groups3,
|
|
7206
|
+
and8(eq8(groups3.group_id, branchGroupGrants3.group_id), eq8(groups3.archived, false))
|
|
7207
|
+
).where(
|
|
7208
|
+
and8(
|
|
7209
|
+
eq8(branchGroupGrants3.group_id, groupId),
|
|
7210
|
+
eq8(branches3.archived, false),
|
|
7211
|
+
inArray3(
|
|
7212
|
+
sql7`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
7213
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7214
|
+
)
|
|
7215
|
+
)
|
|
7216
|
+
).all();
|
|
7217
|
+
const boardRows = await select(this.db, { branch_id: branches3.branch_id }).from(boardGroupGrants3).innerJoin(
|
|
7218
|
+
groups3,
|
|
7219
|
+
and8(eq8(groups3.group_id, boardGroupGrants3.group_id), eq8(groups3.archived, false))
|
|
7220
|
+
).innerJoin(
|
|
7221
|
+
boards3,
|
|
7222
|
+
and8(
|
|
7223
|
+
eq8(boards3.board_id, boardGroupGrants3.board_id),
|
|
7224
|
+
eq8(sql7`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`, "shared")
|
|
7225
|
+
)
|
|
7226
|
+
).innerJoin(
|
|
7227
|
+
branches3,
|
|
7228
|
+
and8(
|
|
7229
|
+
eq8(branches3.board_id, boardGroupGrants3.board_id),
|
|
7230
|
+
eq8(branches3.permission_source, "board"),
|
|
7231
|
+
eq8(branches3.archived, false)
|
|
7232
|
+
)
|
|
7233
|
+
).where(
|
|
7234
|
+
and8(
|
|
7235
|
+
eq8(boardGroupGrants3.group_id, groupId),
|
|
7236
|
+
inArray3(
|
|
7237
|
+
sql7`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
7238
|
+
FS_ACCESS_BRANCH_PERMISSIONS
|
|
7239
|
+
)
|
|
7240
|
+
)
|
|
7241
|
+
).all();
|
|
7242
|
+
const branchIds = /* @__PURE__ */ new Set();
|
|
7243
|
+
for (const row of directRows) {
|
|
7244
|
+
branchIds.add(row.branch_id);
|
|
7245
|
+
}
|
|
7246
|
+
for (const row of boardRows) {
|
|
7247
|
+
branchIds.add(row.branch_id);
|
|
7248
|
+
}
|
|
7249
|
+
return Array.from(branchIds);
|
|
7250
|
+
}
|
|
7194
7251
|
async findBoardAlignedBranches(boardId) {
|
|
7195
7252
|
const rows = await select(this.db).from(branches3).where(
|
|
7196
7253
|
and8(
|
|
@@ -8198,6 +8255,60 @@ var BoardRepository = class {
|
|
|
8198
8255
|
);
|
|
8199
8256
|
}
|
|
8200
8257
|
}
|
|
8258
|
+
/**
|
|
8259
|
+
* Shallow-merge field patches into existing board objects in a single
|
|
8260
|
+
* read-modify-write.
|
|
8261
|
+
*
|
|
8262
|
+
* Unlike upsertBoardObject (which fully replaces the object value, dropping
|
|
8263
|
+
* omitted fields), this overwrites ONLY the provided keys and leaves the rest
|
|
8264
|
+
* of each object intact — so a narrow change (e.g. a zIndex reorder) has a
|
|
8265
|
+
* smaller blast radius and won't clobber a field edited via a different patch
|
|
8266
|
+
* call. Multiple objects in one call are merged before a single write, so a
|
|
8267
|
+
* forward/backward swap touches both neighbors in one update.
|
|
8268
|
+
*
|
|
8269
|
+
* Objects that no longer exist are SKIPPED, never re-created — so a swap can't
|
|
8270
|
+
* resurrect a neighbor deleted between the client's read and this write.
|
|
8271
|
+
*
|
|
8272
|
+
* Only an explicit allowlist of fields can be merged (currently just `zIndex`,
|
|
8273
|
+
* which is also clamped into the board-object band [1, 499] so it can never be
|
|
8274
|
+
* pushed onto the card (500) / comment (1000) layers). Any other key in a
|
|
8275
|
+
* patch is ignored, so this narrow action cannot reshape an object (e.g. flip
|
|
8276
|
+
* its `type`) the way a full upsert could.
|
|
8277
|
+
*
|
|
8278
|
+
* NOTE: this is NOT atomic against concurrent writers. Like every other board
|
|
8279
|
+
* writer, the findById → update sequence has a lost-update window: a write
|
|
8280
|
+
* that lands between the read and the update can be overwritten (last-write-
|
|
8281
|
+
* wins). Merging only the patched keys narrows that window's blast radius
|
|
8282
|
+
* versus a full-object upsert, but does not close it.
|
|
8283
|
+
*/
|
|
8284
|
+
async mergeBoardObjectFields(boardId, patches) {
|
|
8285
|
+
const Z_MIN = 1;
|
|
8286
|
+
const Z_MAX = 499;
|
|
8287
|
+
try {
|
|
8288
|
+
const fullId = await this.resolveId(boardId);
|
|
8289
|
+
const current = await this.findById(fullId);
|
|
8290
|
+
if (!current) {
|
|
8291
|
+
throw new EntityNotFoundError("Board", boardId);
|
|
8292
|
+
}
|
|
8293
|
+
const updatedObjects = { ...current.objects || {} };
|
|
8294
|
+
for (const [objectId, fields] of Object.entries(patches)) {
|
|
8295
|
+
const existing = updatedObjects[objectId];
|
|
8296
|
+
if (!existing) continue;
|
|
8297
|
+
const { zIndex } = fields;
|
|
8298
|
+
if (typeof zIndex !== "number" || !Number.isFinite(zIndex)) continue;
|
|
8299
|
+
const safeZIndex = Math.min(Z_MAX, Math.max(Z_MIN, zIndex));
|
|
8300
|
+
updatedObjects[objectId] = { ...existing, zIndex: safeZIndex };
|
|
8301
|
+
}
|
|
8302
|
+
return this.update(fullId, { objects: updatedObjects });
|
|
8303
|
+
} catch (error) {
|
|
8304
|
+
if (error instanceof RepositoryError) throw error;
|
|
8305
|
+
if (error instanceof EntityNotFoundError) throw error;
|
|
8306
|
+
throw new RepositoryError(
|
|
8307
|
+
`Failed to merge board object fields: ${error instanceof Error ? error.message : String(error)}`,
|
|
8308
|
+
error
|
|
8309
|
+
);
|
|
8310
|
+
}
|
|
8311
|
+
}
|
|
8201
8312
|
/**
|
|
8202
8313
|
* DEPRECATED: Delete a zone and handle associated sessions
|
|
8203
8314
|
* TODO: Reimplement using board-objects table
|
|
@@ -8819,11 +8930,71 @@ init_schema();
|
|
|
8819
8930
|
// src/db/repositories/mcp-servers.ts
|
|
8820
8931
|
init_esm_shims();
|
|
8821
8932
|
init_ids();
|
|
8822
|
-
import { and as
|
|
8933
|
+
import { and as and16, eq as eq19, like as like10 } from "drizzle-orm";
|
|
8823
8934
|
|
|
8824
8935
|
// src/tools/mcp/auth-secrets.ts
|
|
8825
8936
|
init_esm_shims();
|
|
8826
8937
|
|
|
8938
|
+
// src/mcp/template-resolver.ts
|
|
8939
|
+
init_esm_shims();
|
|
8940
|
+
|
|
8941
|
+
// src/config/env-resolver.ts
|
|
8942
|
+
init_esm_shims();
|
|
8943
|
+
init_database_wrapper();
|
|
8944
|
+
import { eq as eq18 } from "drizzle-orm";
|
|
8945
|
+
|
|
8946
|
+
// src/db/repositories/session-env-selections.ts
|
|
8947
|
+
init_esm_shims();
|
|
8948
|
+
init_database_wrapper();
|
|
8949
|
+
init_schema();
|
|
8950
|
+
import { and as and15, eq as eq17 } from "drizzle-orm";
|
|
8951
|
+
|
|
8952
|
+
// src/config/env-resolver.ts
|
|
8953
|
+
init_schema();
|
|
8954
|
+
|
|
8955
|
+
// src/config/env-blocklist.ts
|
|
8956
|
+
init_esm_shims();
|
|
8957
|
+
var BLOCKED_ENV_PATTERNS = Object.freeze([
|
|
8958
|
+
/^LD_/i,
|
|
8959
|
+
/^DYLD_/i,
|
|
8960
|
+
/^PYTHON(?!_AGOR_)/i
|
|
8961
|
+
]);
|
|
8962
|
+
|
|
8963
|
+
// src/config/env-vars.ts
|
|
8964
|
+
init_esm_shims();
|
|
8965
|
+
var V05_SCOPES = ["global", "session"];
|
|
8966
|
+
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
8967
|
+
function normalizeStoredEnvVar(raw) {
|
|
8968
|
+
if (typeof raw === "string") {
|
|
8969
|
+
return { value_encrypted: raw, scope: "global" };
|
|
8970
|
+
}
|
|
8971
|
+
return {
|
|
8972
|
+
value_encrypted: raw.value_encrypted,
|
|
8973
|
+
scope: raw.scope,
|
|
8974
|
+
resource_id: raw.resource_id ?? null,
|
|
8975
|
+
extra_config: raw.extra_config ?? null
|
|
8976
|
+
};
|
|
8977
|
+
}
|
|
8978
|
+
function normalizeStoredEnvMap(raw) {
|
|
8979
|
+
const out = {};
|
|
8980
|
+
if (!raw) return out;
|
|
8981
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
8982
|
+
try {
|
|
8983
|
+
out[key] = normalizeStoredEnvVar(value);
|
|
8984
|
+
} catch (err) {
|
|
8985
|
+
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
8986
|
+
}
|
|
8987
|
+
}
|
|
8988
|
+
return out;
|
|
8989
|
+
}
|
|
8990
|
+
|
|
8991
|
+
// src/templates/handlebars-helpers.ts
|
|
8992
|
+
init_esm_shims();
|
|
8993
|
+
import Handlebars from "handlebars";
|
|
8994
|
+
|
|
8995
|
+
// src/mcp/template-patterns.ts
|
|
8996
|
+
init_esm_shims();
|
|
8997
|
+
|
|
8827
8998
|
// src/tools/mcp/http-headers.ts
|
|
8828
8999
|
init_esm_shims();
|
|
8829
9000
|
|
|
@@ -8835,7 +9006,7 @@ init_schema();
|
|
|
8835
9006
|
init_esm_shims();
|
|
8836
9007
|
init_database_wrapper();
|
|
8837
9008
|
init_schema();
|
|
8838
|
-
import { and as
|
|
9009
|
+
import { and as and17, eq as eq20, inArray as inArray7 } from "drizzle-orm";
|
|
8839
9010
|
var MessagesRepository = class {
|
|
8840
9011
|
constructor(db) {
|
|
8841
9012
|
this.db = db;
|
|
@@ -8901,7 +9072,7 @@ var MessagesRepository = class {
|
|
|
8901
9072
|
* Get message by ID
|
|
8902
9073
|
*/
|
|
8903
9074
|
async findById(messageId) {
|
|
8904
|
-
const row = await select(this.db).from(messages3).where(
|
|
9075
|
+
const row = await select(this.db).from(messages3).where(eq20(messages3.message_id, messageId)).one();
|
|
8905
9076
|
return row ? this.rowToMessage(row) : null;
|
|
8906
9077
|
}
|
|
8907
9078
|
/**
|
|
@@ -8910,19 +9081,19 @@ var MessagesRepository = class {
|
|
|
8910
9081
|
async findAll(filter) {
|
|
8911
9082
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
8912
9083
|
const conditions = [];
|
|
8913
|
-
if (filter?.sessionId) conditions.push(
|
|
9084
|
+
if (filter?.sessionId) conditions.push(eq20(messages3.session_id, filter.sessionId));
|
|
8914
9085
|
if (filter?.sessionIds !== void 0)
|
|
8915
9086
|
conditions.push(inArray7(messages3.session_id, filter.sessionIds));
|
|
8916
|
-
if (filter?.taskId) conditions.push(
|
|
8917
|
-
if (filter?.type) conditions.push(
|
|
8918
|
-
if (filter?.role) conditions.push(
|
|
9087
|
+
if (filter?.taskId) conditions.push(eq20(messages3.task_id, filter.taskId));
|
|
9088
|
+
if (filter?.type) conditions.push(eq20(messages3.type, filter.type));
|
|
9089
|
+
if (filter?.role) conditions.push(eq20(messages3.role, filter.role));
|
|
8919
9090
|
if (filter?.visibleToUserId) {
|
|
8920
9091
|
conditions.push(
|
|
8921
9092
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, messages3.session_id)
|
|
8922
9093
|
);
|
|
8923
9094
|
}
|
|
8924
9095
|
let query = select(this.db).from(messages3);
|
|
8925
|
-
if (conditions.length > 0) query = query.where(
|
|
9096
|
+
if (conditions.length > 0) query = query.where(and17(...conditions));
|
|
8926
9097
|
const rows = await query.orderBy(messages3.index).all();
|
|
8927
9098
|
return rows.map((r) => this.rowToMessage(r));
|
|
8928
9099
|
}
|
|
@@ -8930,21 +9101,21 @@ var MessagesRepository = class {
|
|
|
8930
9101
|
* Get all messages for a session (ordered by index)
|
|
8931
9102
|
*/
|
|
8932
9103
|
async findBySessionId(sessionId) {
|
|
8933
|
-
const rows = await select(this.db).from(messages3).where(
|
|
9104
|
+
const rows = await select(this.db).from(messages3).where(eq20(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
8934
9105
|
return rows.map((r) => this.rowToMessage(r));
|
|
8935
9106
|
}
|
|
8936
9107
|
/**
|
|
8937
9108
|
* Get all messages for a session filtered by type (ordered by index)
|
|
8938
9109
|
*/
|
|
8939
9110
|
async findBySessionIdAndType(sessionId, type) {
|
|
8940
|
-
const rows = await select(this.db).from(messages3).where(
|
|
9111
|
+
const rows = await select(this.db).from(messages3).where(and17(eq20(messages3.session_id, sessionId), eq20(messages3.type, type))).orderBy(messages3.index).all();
|
|
8941
9112
|
return rows.map((r) => this.rowToMessage(r));
|
|
8942
9113
|
}
|
|
8943
9114
|
/**
|
|
8944
9115
|
* Get all messages for a task (ordered by index)
|
|
8945
9116
|
*/
|
|
8946
9117
|
async findByTaskId(taskId) {
|
|
8947
|
-
const rows = await select(this.db).from(messages3).where(
|
|
9118
|
+
const rows = await select(this.db).from(messages3).where(eq20(messages3.task_id, taskId)).orderBy(messages3.index).all();
|
|
8948
9119
|
return rows.map((r) => this.rowToMessage(r));
|
|
8949
9120
|
}
|
|
8950
9121
|
/**
|
|
@@ -8952,7 +9123,7 @@ var MessagesRepository = class {
|
|
|
8952
9123
|
* Used for task message_range queries
|
|
8953
9124
|
*/
|
|
8954
9125
|
async findByRange(sessionId, startIndex, endIndex) {
|
|
8955
|
-
const rows = await select(this.db).from(messages3).where(
|
|
9126
|
+
const rows = await select(this.db).from(messages3).where(eq20(messages3.session_id, sessionId)).orderBy(messages3.index).all();
|
|
8956
9127
|
return rows.filter((r) => r.index >= startIndex && r.index <= endIndex).map((r) => this.rowToMessage(r));
|
|
8957
9128
|
}
|
|
8958
9129
|
/**
|
|
@@ -8965,33 +9136,33 @@ var MessagesRepository = class {
|
|
|
8965
9136
|
}
|
|
8966
9137
|
const updated = { ...existing, ...updates };
|
|
8967
9138
|
const row = this.messageToRow(updated);
|
|
8968
|
-
const result = await update(this.db, messages3).set(row).where(
|
|
9139
|
+
const result = await update(this.db, messages3).set(row).where(eq20(messages3.message_id, messageId)).returning().one();
|
|
8969
9140
|
return this.rowToMessage(result);
|
|
8970
9141
|
}
|
|
8971
9142
|
/**
|
|
8972
9143
|
* Update message task assignment
|
|
8973
9144
|
*/
|
|
8974
9145
|
async assignToTask(messageId, taskId) {
|
|
8975
|
-
const updated = await update(this.db, messages3).set({ task_id: taskId }).where(
|
|
9146
|
+
const updated = await update(this.db, messages3).set({ task_id: taskId }).where(eq20(messages3.message_id, messageId)).returning().one();
|
|
8976
9147
|
return this.rowToMessage(updated);
|
|
8977
9148
|
}
|
|
8978
9149
|
/**
|
|
8979
9150
|
* Delete all messages for a session (cascades automatically via FK)
|
|
8980
9151
|
*/
|
|
8981
9152
|
async deleteBySessionId(sessionId) {
|
|
8982
|
-
await deleteFrom(this.db, messages3).where(
|
|
9153
|
+
await deleteFrom(this.db, messages3).where(eq20(messages3.session_id, sessionId)).run();
|
|
8983
9154
|
}
|
|
8984
9155
|
/**
|
|
8985
9156
|
* Delete a single message
|
|
8986
9157
|
*/
|
|
8987
9158
|
async delete(messageId) {
|
|
8988
|
-
await deleteFrom(this.db, messages3).where(
|
|
9159
|
+
await deleteFrom(this.db, messages3).where(eq20(messages3.message_id, messageId)).run();
|
|
8989
9160
|
}
|
|
8990
9161
|
};
|
|
8991
9162
|
|
|
8992
9163
|
// src/db/repositories/repos.ts
|
|
8993
9164
|
init_esm_shims();
|
|
8994
|
-
import { eq as
|
|
9165
|
+
import { eq as eq21, like as like11, sql as sql10 } from "drizzle-orm";
|
|
8995
9166
|
|
|
8996
9167
|
// src/config/variant-resolver.ts
|
|
8997
9168
|
init_esm_shims();
|
|
@@ -9152,7 +9323,7 @@ var RepoRepository = class {
|
|
|
9152
9323
|
try {
|
|
9153
9324
|
const insertData = this.repoToInsert(data);
|
|
9154
9325
|
await insert(this.db, repos3).values(insertData).run();
|
|
9155
|
-
const row = await select(this.db).from(repos3).where(
|
|
9326
|
+
const row = await select(this.db).from(repos3).where(eq21(repos3.repo_id, insertData.repo_id)).one();
|
|
9156
9327
|
if (!row) {
|
|
9157
9328
|
throw new RepositoryError("Failed to retrieve created repo");
|
|
9158
9329
|
}
|
|
@@ -9171,7 +9342,7 @@ var RepoRepository = class {
|
|
|
9171
9342
|
async findById(id) {
|
|
9172
9343
|
try {
|
|
9173
9344
|
const fullId = await this.resolveId(id);
|
|
9174
|
-
const row = await select(this.db).from(repos3).where(
|
|
9345
|
+
const row = await select(this.db).from(repos3).where(eq21(repos3.repo_id, fullId)).one();
|
|
9175
9346
|
return row ? this.rowToRepo(row) : null;
|
|
9176
9347
|
} catch (error) {
|
|
9177
9348
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -9187,7 +9358,7 @@ var RepoRepository = class {
|
|
|
9187
9358
|
*/
|
|
9188
9359
|
async findBySlug(slug) {
|
|
9189
9360
|
try {
|
|
9190
|
-
const row = await select(this.db).from(repos3).where(
|
|
9361
|
+
const row = await select(this.db).from(repos3).where(eq21(repos3.slug, slug)).one();
|
|
9191
9362
|
return row ? this.rowToRepo(row) : null;
|
|
9192
9363
|
} catch (error) {
|
|
9193
9364
|
throw new RepositoryError(
|
|
@@ -9255,8 +9426,8 @@ var RepoRepository = class {
|
|
|
9255
9426
|
let changed = 0;
|
|
9256
9427
|
for (const finding of scan.findings) {
|
|
9257
9428
|
await this.db.transaction(async (tx) => {
|
|
9258
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3,
|
|
9259
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where(
|
|
9429
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, eq21(repos3.repo_id, finding.repo_id));
|
|
9430
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where(eq21(repos3.repo_id, finding.repo_id)).one();
|
|
9260
9431
|
if (!currentRow) return;
|
|
9261
9432
|
const data = currentRow.data;
|
|
9262
9433
|
if (typeof data.remote_url !== "string" || !httpUrlHasUserinfo(data.remote_url)) {
|
|
@@ -9268,7 +9439,7 @@ var RepoRepository = class {
|
|
|
9268
9439
|
...data,
|
|
9269
9440
|
remote_url: stripHttpUrlUserinfo(data.remote_url)
|
|
9270
9441
|
}
|
|
9271
|
-
}).where(
|
|
9442
|
+
}).where(eq21(repos3.repo_id, finding.repo_id)).run();
|
|
9272
9443
|
changed += 1;
|
|
9273
9444
|
});
|
|
9274
9445
|
}
|
|
@@ -9290,8 +9461,8 @@ var RepoRepository = class {
|
|
|
9290
9461
|
try {
|
|
9291
9462
|
const fullId = await this.resolveId(id);
|
|
9292
9463
|
return await this.db.transaction(async (tx) => {
|
|
9293
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3,
|
|
9294
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where(
|
|
9464
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, eq21(repos3.repo_id, fullId));
|
|
9465
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where(eq21(repos3.repo_id, fullId)).one();
|
|
9295
9466
|
if (!currentRow) {
|
|
9296
9467
|
throw new EntityNotFoundError("Repo", id);
|
|
9297
9468
|
}
|
|
@@ -9305,7 +9476,7 @@ var RepoRepository = class {
|
|
|
9305
9476
|
repo_type: insertData.repo_type,
|
|
9306
9477
|
unix_group: merged.unix_group ?? null,
|
|
9307
9478
|
data: insertData.data
|
|
9308
|
-
}).where(
|
|
9479
|
+
}).where(eq21(repos3.repo_id, fullId)).run();
|
|
9309
9480
|
merged.clone_error = insertData.data.clone_error;
|
|
9310
9481
|
merged.remote_url = insertData.data.remote_url;
|
|
9311
9482
|
merged.last_updated = newUpdatedAt.toISOString();
|
|
@@ -9339,8 +9510,8 @@ var RepoRepository = class {
|
|
|
9339
9510
|
try {
|
|
9340
9511
|
const fullId = await this.resolveId(id);
|
|
9341
9512
|
return await this.db.transaction(async (tx) => {
|
|
9342
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3,
|
|
9343
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where(
|
|
9513
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, eq21(repos3.repo_id, fullId));
|
|
9514
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where(eq21(repos3.repo_id, fullId)).one();
|
|
9344
9515
|
if (!currentRow) {
|
|
9345
9516
|
throw new EntityNotFoundError("Repo", id);
|
|
9346
9517
|
}
|
|
@@ -9354,7 +9525,7 @@ var RepoRepository = class {
|
|
|
9354
9525
|
repo_type: insertData.repo_type,
|
|
9355
9526
|
unix_group: next.unix_group ?? null,
|
|
9356
9527
|
data: insertData.data
|
|
9357
|
-
}).where(
|
|
9528
|
+
}).where(eq21(repos3.repo_id, fullId)).run();
|
|
9358
9529
|
next.environment = insertData.data.environment;
|
|
9359
9530
|
next.environment_config = insertData.data.environment_config;
|
|
9360
9531
|
next.remote_url = insertData.data.remote_url;
|
|
@@ -9394,7 +9565,7 @@ var RepoRepository = class {
|
|
|
9394
9565
|
async delete(id) {
|
|
9395
9566
|
try {
|
|
9396
9567
|
const fullId = await this.resolveId(id);
|
|
9397
|
-
const result = await deleteFrom(this.db, repos3).where(
|
|
9568
|
+
const result = await deleteFrom(this.db, repos3).where(eq21(repos3.repo_id, fullId)).run();
|
|
9398
9569
|
if (result.rowsAffected === 0) {
|
|
9399
9570
|
throw new EntityNotFoundError("Repo", id);
|
|
9400
9571
|
}
|
|
@@ -9441,33 +9612,27 @@ init_esm_shims();
|
|
|
9441
9612
|
init_ids();
|
|
9442
9613
|
init_database_wrapper();
|
|
9443
9614
|
init_schema();
|
|
9444
|
-
import { and as
|
|
9615
|
+
import { and as and18, asc as asc2, desc as desc3, eq as eq22, isNull as isNull6, like as like12, lte, or as or7, sql as sql11 } from "drizzle-orm";
|
|
9445
9616
|
|
|
9446
9617
|
// src/db/repositories/serialized-sessions.ts
|
|
9447
9618
|
init_esm_shims();
|
|
9448
9619
|
init_ids();
|
|
9449
9620
|
init_database_wrapper();
|
|
9450
9621
|
init_schema();
|
|
9451
|
-
import { and as
|
|
9452
|
-
|
|
9453
|
-
// src/db/repositories/session-env-selections.ts
|
|
9454
|
-
init_esm_shims();
|
|
9455
|
-
init_database_wrapper();
|
|
9456
|
-
init_schema();
|
|
9457
|
-
import { and as and19, eq as eq22 } from "drizzle-orm";
|
|
9622
|
+
import { and as and19, desc as desc4, eq as eq23, lt } from "drizzle-orm";
|
|
9458
9623
|
|
|
9459
9624
|
// src/db/repositories/session-mcp-servers.ts
|
|
9460
9625
|
init_esm_shims();
|
|
9461
9626
|
init_database_wrapper();
|
|
9462
9627
|
init_schema();
|
|
9463
|
-
import { and as and21, eq as
|
|
9628
|
+
import { and as and21, eq as eq25 } from "drizzle-orm";
|
|
9464
9629
|
|
|
9465
9630
|
// src/db/repositories/sessions.ts
|
|
9466
9631
|
init_esm_shims();
|
|
9467
9632
|
init_types();
|
|
9468
9633
|
init_config_manager();
|
|
9469
9634
|
init_ids();
|
|
9470
|
-
import { and as and20, desc as desc5, eq as
|
|
9635
|
+
import { and as and20, desc as desc5, eq as eq24, inArray as inArray8, like as like13, or as or8, sql as sql12 } from "drizzle-orm";
|
|
9471
9636
|
init_database_wrapper();
|
|
9472
9637
|
init_schema();
|
|
9473
9638
|
function isSessionTimestampNeutralPatch(updates) {
|
|
@@ -9492,40 +9657,43 @@ var SessionRepository = class {
|
|
|
9492
9657
|
const sessionId = row.session_id;
|
|
9493
9658
|
const boardId = branchBoardId ?? null;
|
|
9494
9659
|
const url = baseUrl && boardId ? getSessionUrl(sessionId, baseUrl) : null;
|
|
9495
|
-
return
|
|
9496
|
-
|
|
9497
|
-
|
|
9498
|
-
|
|
9499
|
-
|
|
9500
|
-
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9512
|
-
|
|
9513
|
-
|
|
9514
|
-
|
|
9515
|
-
|
|
9660
|
+
return attachHiddenTenant(
|
|
9661
|
+
{
|
|
9662
|
+
session_id: sessionId,
|
|
9663
|
+
status: row.status,
|
|
9664
|
+
agentic_tool: row.agentic_tool,
|
|
9665
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
9666
|
+
last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
9667
|
+
created_by: row.created_by,
|
|
9668
|
+
unix_username: row.unix_username || null,
|
|
9669
|
+
branch_id: row.branch_id,
|
|
9670
|
+
branch_board_id: boardId,
|
|
9671
|
+
url,
|
|
9672
|
+
...row.data,
|
|
9673
|
+
tasks: row.data.tasks.map((id) => id),
|
|
9674
|
+
genealogy: {
|
|
9675
|
+
parent_session_id: row.parent_session_id,
|
|
9676
|
+
forked_from_session_id: row.forked_from_session_id,
|
|
9677
|
+
fork_point_task_id: genealogyData.fork_point_task_id,
|
|
9678
|
+
fork_point_message_index: genealogyData.fork_point_message_index,
|
|
9679
|
+
spawn_point_task_id: genealogyData.spawn_point_task_id,
|
|
9680
|
+
spawn_point_message_index: genealogyData.spawn_point_message_index,
|
|
9681
|
+
children: genealogyData.children.map((id) => id)
|
|
9682
|
+
},
|
|
9683
|
+
permission_config: row.data.permission_config,
|
|
9684
|
+
scheduled_run_at: row.scheduled_run_at ?? void 0,
|
|
9685
|
+
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
9686
|
+
schedule_id: row.schedule_id ?? void 0,
|
|
9687
|
+
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
9688
|
+
archived: Boolean(row.archived),
|
|
9689
|
+
// Convert SQLite integer (0/1) to boolean
|
|
9690
|
+
archived_reason: row.archived_reason ?? void 0,
|
|
9691
|
+
current_context_usage: row.data.current_context_usage,
|
|
9692
|
+
context_window_limit: row.data.context_window_limit,
|
|
9693
|
+
last_context_update_at: row.data.last_context_update_at
|
|
9516
9694
|
},
|
|
9517
|
-
|
|
9518
|
-
|
|
9519
|
-
scheduled_from_branch: row.scheduled_from_branch ?? false,
|
|
9520
|
-
schedule_id: row.schedule_id ?? void 0,
|
|
9521
|
-
ready_for_prompt: row.ready_for_prompt ?? false,
|
|
9522
|
-
archived: Boolean(row.archived),
|
|
9523
|
-
// Convert SQLite integer (0/1) to boolean
|
|
9524
|
-
archived_reason: row.archived_reason ?? void 0,
|
|
9525
|
-
current_context_usage: row.data.current_context_usage,
|
|
9526
|
-
context_window_limit: row.data.context_window_limit,
|
|
9527
|
-
last_context_update_at: row.data.last_context_update_at
|
|
9528
|
-
};
|
|
9695
|
+
row
|
|
9696
|
+
);
|
|
9529
9697
|
}
|
|
9530
9698
|
/**
|
|
9531
9699
|
* Convert Session to database insert format
|
|
@@ -9613,7 +9781,7 @@ var SessionRepository = class {
|
|
|
9613
9781
|
const insertData = this.sessionToInsert(data);
|
|
9614
9782
|
await insert(this.db, sessions3).values(insertData).run();
|
|
9615
9783
|
const baseUrl = await getBaseUrl();
|
|
9616
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3,
|
|
9784
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(eq24(sessions3.session_id, insertData.session_id)).one();
|
|
9617
9785
|
if (!result) {
|
|
9618
9786
|
throw new RepositoryError("Failed to retrieve created session");
|
|
9619
9787
|
}
|
|
@@ -9638,7 +9806,7 @@ var SessionRepository = class {
|
|
|
9638
9806
|
try {
|
|
9639
9807
|
const fullId = await this.resolveId(id);
|
|
9640
9808
|
const baseUrl = await getBaseUrl();
|
|
9641
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3,
|
|
9809
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(eq24(sessions3.session_id, fullId)).one();
|
|
9642
9810
|
if (!result) {
|
|
9643
9811
|
return null;
|
|
9644
9812
|
}
|
|
@@ -9661,7 +9829,7 @@ var SessionRepository = class {
|
|
|
9661
9829
|
async findBranchIdBySessionId(id) {
|
|
9662
9830
|
try {
|
|
9663
9831
|
const fullId = await this.resolveId(id);
|
|
9664
|
-
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where(
|
|
9832
|
+
const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where(eq24(sessions3.session_id, fullId)).one();
|
|
9665
9833
|
return row?.branch_id ?? null;
|
|
9666
9834
|
} catch (error) {
|
|
9667
9835
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -9672,6 +9840,26 @@ var SessionRepository = class {
|
|
|
9672
9840
|
);
|
|
9673
9841
|
}
|
|
9674
9842
|
}
|
|
9843
|
+
/**
|
|
9844
|
+
* Resolve the owning user id for a session without hydrating the full row.
|
|
9845
|
+
* Used by realtime delivery to offer streaming events to the session
|
|
9846
|
+
* creator's own connections as a fallback, so their open tabs keep updating
|
|
9847
|
+
* even before they subscribe to the per-session stream channel.
|
|
9848
|
+
*/
|
|
9849
|
+
async findCreatedByBySessionId(id) {
|
|
9850
|
+
try {
|
|
9851
|
+
const fullId = await this.resolveId(id);
|
|
9852
|
+
const row = await select(this.db, { created_by: sessions3.created_by }).from(sessions3).where(eq24(sessions3.session_id, fullId)).one();
|
|
9853
|
+
return row?.created_by ?? null;
|
|
9854
|
+
} catch (error) {
|
|
9855
|
+
if (error instanceof EntityNotFoundError) return null;
|
|
9856
|
+
if (error instanceof AmbiguousIdError) throw error;
|
|
9857
|
+
throw new RepositoryError(
|
|
9858
|
+
`Failed to find session owner: ${error instanceof Error ? error.message : String(error)}`,
|
|
9859
|
+
error
|
|
9860
|
+
);
|
|
9861
|
+
}
|
|
9862
|
+
}
|
|
9675
9863
|
/**
|
|
9676
9864
|
* Find all sessions
|
|
9677
9865
|
*
|
|
@@ -9684,13 +9872,13 @@ var SessionRepository = class {
|
|
|
9684
9872
|
if (filter?.visibleToUserId) {
|
|
9685
9873
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
9686
9874
|
}
|
|
9687
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3,
|
|
9875
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
9688
9876
|
branchOwners3,
|
|
9689
9877
|
and20(
|
|
9690
|
-
|
|
9691
|
-
|
|
9878
|
+
eq24(branchOwners3.branch_id, branches3.branch_id),
|
|
9879
|
+
eq24(branchOwners3.user_id, filter.visibleToUserId)
|
|
9692
9880
|
)
|
|
9693
|
-
) : select(this.db).from(sessions3).leftJoin(branches3,
|
|
9881
|
+
) : select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id));
|
|
9694
9882
|
const results = conditions.length > 0 ? await query.where(and20(...conditions)).all() : await query.all();
|
|
9695
9883
|
return results.map(
|
|
9696
9884
|
(result) => {
|
|
@@ -9714,7 +9902,7 @@ var SessionRepository = class {
|
|
|
9714
9902
|
async findByStatus(status) {
|
|
9715
9903
|
try {
|
|
9716
9904
|
const baseUrl = await getBaseUrl();
|
|
9717
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3,
|
|
9905
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(eq24(sessions3.status, status)).all();
|
|
9718
9906
|
return results.map(
|
|
9719
9907
|
(result) => {
|
|
9720
9908
|
const sessionRow = result.sessions;
|
|
@@ -9742,17 +9930,17 @@ var SessionRepository = class {
|
|
|
9742
9930
|
async findByBoard(boardId, filter) {
|
|
9743
9931
|
try {
|
|
9744
9932
|
const baseUrl = await getBaseUrl();
|
|
9745
|
-
const conditions = [
|
|
9933
|
+
const conditions = [eq24(branches3.board_id, boardId)];
|
|
9746
9934
|
if (filter?.visibleToUserId) {
|
|
9747
9935
|
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
9748
9936
|
}
|
|
9749
|
-
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3,
|
|
9937
|
+
const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
9750
9938
|
branchOwners3,
|
|
9751
9939
|
and20(
|
|
9752
|
-
|
|
9753
|
-
|
|
9940
|
+
eq24(branchOwners3.branch_id, branches3.branch_id),
|
|
9941
|
+
eq24(branchOwners3.user_id, filter.visibleToUserId)
|
|
9754
9942
|
)
|
|
9755
|
-
) : select(this.db).from(sessions3).innerJoin(branches3,
|
|
9943
|
+
) : select(this.db).from(sessions3).innerJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id));
|
|
9756
9944
|
const results = await query.where(and20(...conditions)).all();
|
|
9757
9945
|
return results.map(
|
|
9758
9946
|
(result) => {
|
|
@@ -9789,31 +9977,31 @@ var SessionRepository = class {
|
|
|
9789
9977
|
try {
|
|
9790
9978
|
const baseUrl = await getBaseUrl();
|
|
9791
9979
|
const conditions = [];
|
|
9792
|
-
if (opts.boardId !== void 0) conditions.push(
|
|
9793
|
-
if (opts.archived !== void 0) conditions.push(
|
|
9980
|
+
if (opts.boardId !== void 0) conditions.push(eq24(branches3.board_id, opts.boardId));
|
|
9981
|
+
if (opts.archived !== void 0) conditions.push(eq24(sessions3.archived, opts.archived));
|
|
9794
9982
|
if (opts.visibleToUserId) {
|
|
9795
9983
|
conditions.push(visibleBranchAccessCondition(this.db, opts.visibleToUserId));
|
|
9796
9984
|
}
|
|
9797
9985
|
const whereClause = conditions.length > 0 ? and20(...conditions) : void 0;
|
|
9798
|
-
let countQuery = select(this.db, { count: sql12`count(*)` }).from(sessions3).leftJoin(branches3,
|
|
9986
|
+
let countQuery = select(this.db, { count: sql12`count(*)` }).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id));
|
|
9799
9987
|
if (opts.visibleToUserId) {
|
|
9800
9988
|
countQuery = countQuery.leftJoin(
|
|
9801
9989
|
branchOwners3,
|
|
9802
9990
|
and20(
|
|
9803
|
-
|
|
9804
|
-
|
|
9991
|
+
eq24(branchOwners3.branch_id, branches3.branch_id),
|
|
9992
|
+
eq24(branchOwners3.user_id, opts.visibleToUserId)
|
|
9805
9993
|
)
|
|
9806
9994
|
);
|
|
9807
9995
|
}
|
|
9808
9996
|
const countRow = await (whereClause ? countQuery.where(whereClause) : countQuery).one();
|
|
9809
9997
|
const total = Number(countRow?.count ?? 0);
|
|
9810
|
-
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3,
|
|
9998
|
+
let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id));
|
|
9811
9999
|
if (opts.visibleToUserId) {
|
|
9812
10000
|
dataQuery = dataQuery.leftJoin(
|
|
9813
10001
|
branchOwners3,
|
|
9814
10002
|
and20(
|
|
9815
|
-
|
|
9816
|
-
|
|
10003
|
+
eq24(branchOwners3.branch_id, branches3.branch_id),
|
|
10004
|
+
eq24(branchOwners3.user_id, opts.visibleToUserId)
|
|
9817
10005
|
)
|
|
9818
10006
|
);
|
|
9819
10007
|
}
|
|
@@ -9850,7 +10038,7 @@ var SessionRepository = class {
|
|
|
9850
10038
|
const fullId = await this.resolveId(sessionId);
|
|
9851
10039
|
const baseUrl = await getBaseUrl();
|
|
9852
10040
|
const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
|
|
9853
|
-
const results = await select(this.db).from(sessions3).leftJoin(branches3,
|
|
10041
|
+
const results = await select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(
|
|
9854
10042
|
or8(
|
|
9855
10043
|
sql12`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
|
|
9856
10044
|
sql12`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
|
|
@@ -9919,8 +10107,8 @@ var SessionRepository = class {
|
|
|
9919
10107
|
const statusInfo = updates.status ? ` (status: ${updates.status}, ready_for_prompt: ${updates.ready_for_prompt})` : "";
|
|
9920
10108
|
console.debug(`\u{1F504} [SessionRepo] Updating session ${shortId(fullId)}${statusInfo}`);
|
|
9921
10109
|
const result = await this.db.transaction(async (tx) => {
|
|
9922
|
-
await lockRowForUpdate(txAsDb(tx), this.db, sessions3,
|
|
9923
|
-
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3,
|
|
10110
|
+
await lockRowForUpdate(txAsDb(tx), this.db, sessions3, eq24(sessions3.session_id, fullId));
|
|
10111
|
+
const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(eq24(sessions3.session_id, fullId)).one();
|
|
9924
10112
|
if (!currentResult) {
|
|
9925
10113
|
throw new EntityNotFoundError("Session", id);
|
|
9926
10114
|
}
|
|
@@ -9933,12 +10121,12 @@ var SessionRepository = class {
|
|
|
9933
10121
|
if (shouldRefreshLastUpdated) {
|
|
9934
10122
|
insertData.updated_at = /* @__PURE__ */ new Date();
|
|
9935
10123
|
}
|
|
9936
|
-
await update(txAsDb(tx), sessions3).set(insertData).where(
|
|
10124
|
+
await update(txAsDb(tx), sessions3).set(insertData).where(eq24(sessions3.session_id, fullId)).run();
|
|
9937
10125
|
if (!insertData.updated_at) {
|
|
9938
10126
|
throw new RepositoryError("Session update did not produce an updated_at timestamp");
|
|
9939
10127
|
}
|
|
9940
10128
|
merged.last_updated = insertData.updated_at.toISOString();
|
|
9941
|
-
return merged;
|
|
10129
|
+
return attachHiddenTenant(merged, currentRow);
|
|
9942
10130
|
});
|
|
9943
10131
|
return result;
|
|
9944
10132
|
} catch (error) {
|
|
@@ -9957,7 +10145,7 @@ var SessionRepository = class {
|
|
|
9957
10145
|
const fullId = await this.resolveId(sessionId);
|
|
9958
10146
|
const result = await select(this.db, {
|
|
9959
10147
|
count: sql12`count(*)`
|
|
9960
|
-
}).from(messages3).where(
|
|
10148
|
+
}).from(messages3).where(eq24(messages3.session_id, fullId)).one();
|
|
9961
10149
|
return Number(result?.count ?? 0);
|
|
9962
10150
|
}
|
|
9963
10151
|
/**
|
|
@@ -9966,7 +10154,7 @@ var SessionRepository = class {
|
|
|
9966
10154
|
async delete(id) {
|
|
9967
10155
|
try {
|
|
9968
10156
|
const fullId = await this.resolveId(id);
|
|
9969
|
-
const result = await deleteFrom(this.db, sessions3).where(
|
|
10157
|
+
const result = await deleteFrom(this.db, sessions3).where(eq24(sessions3.session_id, fullId)).run();
|
|
9970
10158
|
if (result.rowsAffected === 0) {
|
|
9971
10159
|
throw new EntityNotFoundError("Session", id);
|
|
9972
10160
|
}
|
|
@@ -10013,8 +10201,8 @@ var SessionRepository = class {
|
|
|
10013
10201
|
async findScheduleRun(scheduleId, scheduledRunAt) {
|
|
10014
10202
|
try {
|
|
10015
10203
|
const baseUrl = await getBaseUrl();
|
|
10016
|
-
const result = await select(this.db).from(sessions3).leftJoin(branches3,
|
|
10017
|
-
and20(
|
|
10204
|
+
const result = await select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(
|
|
10205
|
+
and20(eq24(sessions3.schedule_id, scheduleId), eq24(sessions3.scheduled_run_at, scheduledRunAt))
|
|
10018
10206
|
).one();
|
|
10019
10207
|
if (!result) return null;
|
|
10020
10208
|
const r = result;
|
|
@@ -10037,7 +10225,7 @@ var SessionRepository = class {
|
|
|
10037
10225
|
async findByScheduleId(scheduleId, opts = {}) {
|
|
10038
10226
|
try {
|
|
10039
10227
|
const baseUrl = await getBaseUrl();
|
|
10040
|
-
let query = select(this.db).from(sessions3).leftJoin(branches3,
|
|
10228
|
+
let query = select(this.db).from(sessions3).leftJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).where(eq24(sessions3.schedule_id, scheduleId));
|
|
10041
10229
|
if (opts.orderByScheduledRunAt === "desc") {
|
|
10042
10230
|
query = query.orderBy(desc5(sessions3.scheduled_run_at));
|
|
10043
10231
|
} else if (opts.orderByScheduledRunAt === "asc") {
|
|
@@ -10064,7 +10252,7 @@ var SessionRepository = class {
|
|
|
10064
10252
|
*/
|
|
10065
10253
|
async countByScheduleId(scheduleId) {
|
|
10066
10254
|
try {
|
|
10067
|
-
const result = await select(this.db, { count: sql12`count(*)` }).from(sessions3).where(
|
|
10255
|
+
const result = await select(this.db, { count: sql12`count(*)` }).from(sessions3).where(eq24(sessions3.schedule_id, scheduleId)).one();
|
|
10068
10256
|
return Number(result?.count ?? 0);
|
|
10069
10257
|
} catch (error) {
|
|
10070
10258
|
throw new RepositoryError(
|
|
@@ -10086,7 +10274,7 @@ var SessionRepository = class {
|
|
|
10086
10274
|
async existsInBranchWithStatuses(branchId, statuses) {
|
|
10087
10275
|
if (statuses.length === 0) return false;
|
|
10088
10276
|
try {
|
|
10089
|
-
const row = await select(this.db, { one: sql12`1` }).from(sessions3).where(and20(
|
|
10277
|
+
const row = await select(this.db, { one: sql12`1` }).from(sessions3).where(and20(eq24(sessions3.branch_id, branchId), inArray8(sessions3.status, [...statuses]))).limit(1).one();
|
|
10090
10278
|
return row != null;
|
|
10091
10279
|
} catch (error) {
|
|
10092
10280
|
throw new RepositoryError(
|
|
@@ -10102,7 +10290,7 @@ var SessionRepository = class {
|
|
|
10102
10290
|
async existsInScheduleWithStatuses(scheduleId, statuses) {
|
|
10103
10291
|
if (statuses.length === 0) return false;
|
|
10104
10292
|
try {
|
|
10105
|
-
const row = await select(this.db, { one: sql12`1` }).from(sessions3).where(and20(
|
|
10293
|
+
const row = await select(this.db, { one: sql12`1` }).from(sessions3).where(and20(eq24(sessions3.schedule_id, scheduleId), inArray8(sessions3.status, [...statuses]))).limit(1).one();
|
|
10106
10294
|
return row != null;
|
|
10107
10295
|
} catch (error) {
|
|
10108
10296
|
throw new RepositoryError(
|
|
@@ -10133,10 +10321,10 @@ var SessionRepository = class {
|
|
|
10133
10321
|
async findAccessibleSessions(userId, boardId) {
|
|
10134
10322
|
const baseUrl = await getBaseUrl();
|
|
10135
10323
|
const accessCondition = visibleBranchAccessCondition(this.db, userId);
|
|
10136
|
-
const whereCondition = boardId ? and20(accessCondition,
|
|
10137
|
-
const results = await select(this.db).from(sessions3).innerJoin(branches3,
|
|
10324
|
+
const whereCondition = boardId ? and20(accessCondition, eq24(branches3.board_id, boardId)) : accessCondition;
|
|
10325
|
+
const results = await select(this.db).from(sessions3).innerJoin(branches3, eq24(sessions3.branch_id, branches3.branch_id)).leftJoin(
|
|
10138
10326
|
branchOwners3,
|
|
10139
|
-
and20(
|
|
10327
|
+
and20(eq24(branchOwners3.branch_id, branches3.branch_id), eq24(branchOwners3.user_id, userId))
|
|
10140
10328
|
).where(whereCondition).all();
|
|
10141
10329
|
const seen = /* @__PURE__ */ new Set();
|
|
10142
10330
|
const sessionsOut = [];
|
|
@@ -10179,7 +10367,7 @@ var SessionRepository = class {
|
|
|
10179
10367
|
for (const sessionId of sessionIds) {
|
|
10180
10368
|
const query = select(this.db, {
|
|
10181
10369
|
data: messagesTable.data
|
|
10182
|
-
}).from(messagesTable).where(and20(
|
|
10370
|
+
}).from(messagesTable).where(and20(eq24(messagesTable.session_id, sessionId), eq24(messagesTable.role, "assistant")));
|
|
10183
10371
|
const lastMessage = await query.orderBy(desc5(messagesTable.index)).limit(1).one();
|
|
10184
10372
|
if (lastMessage) {
|
|
10185
10373
|
const messageData = lastMessage.data;
|
|
@@ -10214,7 +10402,7 @@ var SessionRepository = class {
|
|
|
10214
10402
|
*/
|
|
10215
10403
|
async exists(sessionId) {
|
|
10216
10404
|
try {
|
|
10217
|
-
const row = await select(this.db).from(sessions3).where(
|
|
10405
|
+
const row = await select(this.db).from(sessions3).where(eq24(sessions3.session_id, sessionId)).one();
|
|
10218
10406
|
return row != null;
|
|
10219
10407
|
} catch (error) {
|
|
10220
10408
|
throw new RepositoryError(
|
|
@@ -10230,7 +10418,7 @@ init_esm_shims();
|
|
|
10230
10418
|
init_ids();
|
|
10231
10419
|
init_database_wrapper();
|
|
10232
10420
|
init_schema();
|
|
10233
|
-
import { and as and22, eq as
|
|
10421
|
+
import { and as and22, eq as eq26, inArray as inArray9, or as or9 } from "drizzle-orm";
|
|
10234
10422
|
|
|
10235
10423
|
// src/db/repositories/tasks.ts
|
|
10236
10424
|
init_esm_shims();
|
|
@@ -10238,7 +10426,7 @@ init_types();
|
|
|
10238
10426
|
init_ids();
|
|
10239
10427
|
init_database_wrapper();
|
|
10240
10428
|
init_schema();
|
|
10241
|
-
import { and as and23, eq as
|
|
10429
|
+
import { and as and23, eq as eq27, inArray as inArray10, like as like14, sql as sql13 } from "drizzle-orm";
|
|
10242
10430
|
var TaskRepository = class {
|
|
10243
10431
|
constructor(db) {
|
|
10244
10432
|
this.db = db;
|
|
@@ -10334,7 +10522,7 @@ var TaskRepository = class {
|
|
|
10334
10522
|
try {
|
|
10335
10523
|
const insertData = this.taskToInsert(data);
|
|
10336
10524
|
await insert(this.db, tasks3).values(insertData).run();
|
|
10337
|
-
const row = await select(this.db).from(tasks3).where(
|
|
10525
|
+
const row = await select(this.db).from(tasks3).where(eq27(tasks3.task_id, insertData.task_id)).one();
|
|
10338
10526
|
if (!row) {
|
|
10339
10527
|
throw new RepositoryError("Failed to retrieve created task");
|
|
10340
10528
|
}
|
|
@@ -10374,7 +10562,7 @@ var TaskRepository = class {
|
|
|
10374
10562
|
async findById(id) {
|
|
10375
10563
|
try {
|
|
10376
10564
|
const fullId = await this.resolveId(id);
|
|
10377
|
-
const row = await select(this.db).from(tasks3).where(
|
|
10565
|
+
const row = await select(this.db).from(tasks3).where(eq27(tasks3.task_id, fullId)).one();
|
|
10378
10566
|
return row ? this.rowToTask(row) : null;
|
|
10379
10567
|
} catch (error) {
|
|
10380
10568
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -10392,10 +10580,10 @@ var TaskRepository = class {
|
|
|
10392
10580
|
try {
|
|
10393
10581
|
if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
|
|
10394
10582
|
const conditions = [];
|
|
10395
|
-
if (filter?.sessionId) conditions.push(
|
|
10583
|
+
if (filter?.sessionId) conditions.push(eq27(tasks3.session_id, filter.sessionId));
|
|
10396
10584
|
if (filter?.sessionIds !== void 0)
|
|
10397
10585
|
conditions.push(inArray10(tasks3.session_id, filter.sessionIds));
|
|
10398
|
-
if (filter?.status) conditions.push(
|
|
10586
|
+
if (filter?.status) conditions.push(eq27(tasks3.status, filter.status));
|
|
10399
10587
|
if (filter?.visibleToUserId) {
|
|
10400
10588
|
conditions.push(
|
|
10401
10589
|
visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, tasks3.session_id)
|
|
@@ -10416,7 +10604,7 @@ var TaskRepository = class {
|
|
|
10416
10604
|
*/
|
|
10417
10605
|
async findBySession(sessionId) {
|
|
10418
10606
|
try {
|
|
10419
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
10607
|
+
const rows = await select(this.db).from(tasks3).where(eq27(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
|
|
10420
10608
|
return rows.map((row) => this.rowToTask(row));
|
|
10421
10609
|
} catch (error) {
|
|
10422
10610
|
throw new RepositoryError(
|
|
@@ -10430,7 +10618,7 @@ var TaskRepository = class {
|
|
|
10430
10618
|
*/
|
|
10431
10619
|
async findRunning() {
|
|
10432
10620
|
try {
|
|
10433
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
10621
|
+
const rows = await select(this.db).from(tasks3).where(eq27(tasks3.status, TaskStatus.RUNNING)).all();
|
|
10434
10622
|
return rows.map((row) => this.rowToTask(row));
|
|
10435
10623
|
} catch (error) {
|
|
10436
10624
|
throw new RepositoryError(
|
|
@@ -10486,7 +10674,7 @@ var TaskRepository = class {
|
|
|
10486
10674
|
*/
|
|
10487
10675
|
async findByStatus(status) {
|
|
10488
10676
|
try {
|
|
10489
|
-
const rows = await select(this.db).from(tasks3).where(
|
|
10677
|
+
const rows = await select(this.db).from(tasks3).where(eq27(tasks3.status, status)).all();
|
|
10490
10678
|
return rows.map((row) => this.rowToTask(row));
|
|
10491
10679
|
} catch (error) {
|
|
10492
10680
|
throw new RepositoryError(
|
|
@@ -10508,8 +10696,8 @@ var TaskRepository = class {
|
|
|
10508
10696
|
`\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
|
|
10509
10697
|
);
|
|
10510
10698
|
const result = await this.db.transaction(async (tx) => {
|
|
10511
|
-
await lockRowForUpdate(txAsDb(tx), this.db, tasks3,
|
|
10512
|
-
const currentRow = await select(txAsDb(tx)).from(tasks3).where(
|
|
10699
|
+
await lockRowForUpdate(txAsDb(tx), this.db, tasks3, eq27(tasks3.task_id, fullId));
|
|
10700
|
+
const currentRow = await select(txAsDb(tx)).from(tasks3).where(eq27(tasks3.task_id, fullId)).one();
|
|
10513
10701
|
if (!currentRow) {
|
|
10514
10702
|
throw new EntityNotFoundError("Task", id);
|
|
10515
10703
|
}
|
|
@@ -10523,7 +10711,7 @@ var TaskRepository = class {
|
|
|
10523
10711
|
last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
|
|
10524
10712
|
session_md5: insertData.session_md5,
|
|
10525
10713
|
data: insertData.data
|
|
10526
|
-
}).where(
|
|
10714
|
+
}).where(eq27(tasks3.task_id, fullId)).run();
|
|
10527
10715
|
return merged;
|
|
10528
10716
|
});
|
|
10529
10717
|
return result;
|
|
@@ -10542,7 +10730,7 @@ var TaskRepository = class {
|
|
|
10542
10730
|
async delete(id) {
|
|
10543
10731
|
try {
|
|
10544
10732
|
const fullId = await this.resolveId(id);
|
|
10545
|
-
const result = await deleteFrom(this.db, tasks3).where(
|
|
10733
|
+
const result = await deleteFrom(this.db, tasks3).where(eq27(tasks3.task_id, fullId)).run();
|
|
10546
10734
|
if (result.rowsAffected === 0) {
|
|
10547
10735
|
throw new EntityNotFoundError("Task", id);
|
|
10548
10736
|
}
|
|
@@ -10604,7 +10792,7 @@ var TaskRepository = class {
|
|
|
10604
10792
|
queue_position: nextPosition
|
|
10605
10793
|
});
|
|
10606
10794
|
await insert(txAsDb(tx), tasks3).values(insertData).run();
|
|
10607
|
-
const row = await select(txAsDb(tx)).from(tasks3).where(
|
|
10795
|
+
const row = await select(txAsDb(tx)).from(tasks3).where(eq27(tasks3.task_id, insertData.task_id)).one();
|
|
10608
10796
|
if (!row) {
|
|
10609
10797
|
throw new RepositoryError("Failed to retrieve created queued task");
|
|
10610
10798
|
}
|
|
@@ -10645,7 +10833,7 @@ var TaskRepository = class {
|
|
|
10645
10833
|
*/
|
|
10646
10834
|
async countBySession(sessionId) {
|
|
10647
10835
|
try {
|
|
10648
|
-
const result = await select(this.db, { count: sql13`count(*)` }).from(tasks3).where(
|
|
10836
|
+
const result = await select(this.db, { count: sql13`count(*)` }).from(tasks3).where(eq27(tasks3.session_id, sessionId)).one();
|
|
10649
10837
|
return result?.count ?? 0;
|
|
10650
10838
|
} catch (error) {
|
|
10651
10839
|
throw new RepositoryError(
|
|
@@ -10662,7 +10850,7 @@ init_types();
|
|
|
10662
10850
|
init_ids();
|
|
10663
10851
|
init_database_wrapper();
|
|
10664
10852
|
init_schema();
|
|
10665
|
-
import { and as and24, eq as
|
|
10853
|
+
import { and as and24, eq as eq28, like as like15, lt as lt2 } from "drizzle-orm";
|
|
10666
10854
|
|
|
10667
10855
|
// src/db/repositories/user-api-keys.ts
|
|
10668
10856
|
init_esm_shims();
|
|
@@ -10672,48 +10860,18 @@ init_schema();
|
|
|
10672
10860
|
init_tenant_context();
|
|
10673
10861
|
import { randomBytes as randomBytes3 } from "crypto";
|
|
10674
10862
|
import bcrypt2 from "bcryptjs";
|
|
10675
|
-
import { and as and25, eq as
|
|
10863
|
+
import { and as and25, eq as eq29 } from "drizzle-orm";
|
|
10676
10864
|
|
|
10677
10865
|
// src/db/repositories/user-mcp-oauth-tokens.ts
|
|
10678
10866
|
init_esm_shims();
|
|
10679
10867
|
init_database_wrapper();
|
|
10680
10868
|
init_schema();
|
|
10681
|
-
import { and as and26, eq as
|
|
10869
|
+
import { and as and26, eq as eq30, isNull as isNull7 } from "drizzle-orm";
|
|
10682
10870
|
|
|
10683
10871
|
// src/db/repositories/users.ts
|
|
10684
10872
|
init_esm_shims();
|
|
10685
10873
|
init_types();
|
|
10686
|
-
import { eq as
|
|
10687
|
-
|
|
10688
|
-
// src/config/env-vars.ts
|
|
10689
|
-
init_esm_shims();
|
|
10690
|
-
var V05_SCOPES = ["global", "session"];
|
|
10691
|
-
var V05_SCOPE_SET = new Set(V05_SCOPES);
|
|
10692
|
-
function normalizeStoredEnvVar(raw) {
|
|
10693
|
-
if (typeof raw === "string") {
|
|
10694
|
-
return { value_encrypted: raw, scope: "global" };
|
|
10695
|
-
}
|
|
10696
|
-
return {
|
|
10697
|
-
value_encrypted: raw.value_encrypted,
|
|
10698
|
-
scope: raw.scope,
|
|
10699
|
-
resource_id: raw.resource_id ?? null,
|
|
10700
|
-
extra_config: raw.extra_config ?? null
|
|
10701
|
-
};
|
|
10702
|
-
}
|
|
10703
|
-
function normalizeStoredEnvMap(raw) {
|
|
10704
|
-
const out = {};
|
|
10705
|
-
if (!raw) return out;
|
|
10706
|
-
for (const [key, value] of Object.entries(raw)) {
|
|
10707
|
-
try {
|
|
10708
|
-
out[key] = normalizeStoredEnvVar(value);
|
|
10709
|
-
} catch (err) {
|
|
10710
|
-
console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
|
|
10711
|
-
}
|
|
10712
|
-
}
|
|
10713
|
-
return out;
|
|
10714
|
-
}
|
|
10715
|
-
|
|
10716
|
-
// src/db/repositories/users.ts
|
|
10874
|
+
import { eq as eq31, like as like16, sql as sql14 } from "drizzle-orm";
|
|
10717
10875
|
init_ids();
|
|
10718
10876
|
init_database_wrapper();
|
|
10719
10877
|
init_schema();
|
|
@@ -10824,7 +10982,7 @@ var UsersRepository = class {
|
|
|
10824
10982
|
* Check if unix_username is already taken by another user
|
|
10825
10983
|
*/
|
|
10826
10984
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
10827
|
-
const result = await select(this.db).from(users3).where(
|
|
10985
|
+
const result = await select(this.db).from(users3).where(eq31(users3.unix_username, unixUsername)).one();
|
|
10828
10986
|
if (!result) {
|
|
10829
10987
|
return false;
|
|
10830
10988
|
}
|
|
@@ -10847,7 +11005,7 @@ var UsersRepository = class {
|
|
|
10847
11005
|
}
|
|
10848
11006
|
const insertData = this.userToInsert(data);
|
|
10849
11007
|
await insert(this.db, users3).values(insertData).run();
|
|
10850
|
-
const row = await select(this.db).from(users3).where(
|
|
11008
|
+
const row = await select(this.db).from(users3).where(eq31(users3.user_id, insertData.user_id)).one();
|
|
10851
11009
|
if (!row) {
|
|
10852
11010
|
throw new RepositoryError("Failed to retrieve created user");
|
|
10853
11011
|
}
|
|
@@ -10859,7 +11017,7 @@ var UsersRepository = class {
|
|
|
10859
11017
|
async findById(id) {
|
|
10860
11018
|
try {
|
|
10861
11019
|
const fullId = await this.resolveId(id);
|
|
10862
|
-
const result = await select(this.db).from(users3).where(
|
|
11020
|
+
const result = await select(this.db).from(users3).where(eq31(users3.user_id, fullId)).one();
|
|
10863
11021
|
if (!result) {
|
|
10864
11022
|
return null;
|
|
10865
11023
|
}
|
|
@@ -10875,7 +11033,7 @@ var UsersRepository = class {
|
|
|
10875
11033
|
* Find user by email
|
|
10876
11034
|
*/
|
|
10877
11035
|
async findByEmail(email) {
|
|
10878
|
-
const result = await select(this.db).from(users3).where(
|
|
11036
|
+
const result = await select(this.db).from(users3).where(eq31(users3.email, email)).one();
|
|
10879
11037
|
if (!result) {
|
|
10880
11038
|
return null;
|
|
10881
11039
|
}
|
|
@@ -10946,8 +11104,8 @@ var UsersRepository = class {
|
|
|
10946
11104
|
await update(this.db, users3).set({
|
|
10947
11105
|
...insertData,
|
|
10948
11106
|
updated_at: /* @__PURE__ */ new Date()
|
|
10949
|
-
}).where(
|
|
10950
|
-
const row = await select(this.db).from(users3).where(
|
|
11107
|
+
}).where(eq31(users3.user_id, fullId)).run();
|
|
11108
|
+
const row = await select(this.db).from(users3).where(eq31(users3.user_id, fullId)).one();
|
|
10951
11109
|
if (!row) {
|
|
10952
11110
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
10953
11111
|
}
|
|
@@ -10958,7 +11116,7 @@ var UsersRepository = class {
|
|
|
10958
11116
|
*/
|
|
10959
11117
|
async delete(id) {
|
|
10960
11118
|
const fullId = await this.resolveId(id);
|
|
10961
|
-
await deleteFrom(this.db, users3).where(
|
|
11119
|
+
await deleteFrom(this.db, users3).where(eq31(users3.user_id, fullId)).run();
|
|
10962
11120
|
}
|
|
10963
11121
|
/**
|
|
10964
11122
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -10966,7 +11124,7 @@ var UsersRepository = class {
|
|
|
10966
11124
|
async getRawRow(id) {
|
|
10967
11125
|
try {
|
|
10968
11126
|
const fullId = await this.resolveId(id);
|
|
10969
|
-
const result = await select(this.db).from(users3).where(
|
|
11127
|
+
const result = await select(this.db).from(users3).where(eq31(users3.user_id, fullId)).one();
|
|
10970
11128
|
return result;
|
|
10971
11129
|
} catch (error) {
|
|
10972
11130
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -11048,7 +11206,7 @@ var UsersRepository = class {
|
|
|
11048
11206
|
await update(this.db, users3).set({
|
|
11049
11207
|
data: { ...row.data, agentic_tools: next },
|
|
11050
11208
|
updated_at: /* @__PURE__ */ new Date()
|
|
11051
|
-
}).where(
|
|
11209
|
+
}).where(eq31(users3.user_id, fullId)).run();
|
|
11052
11210
|
}
|
|
11053
11211
|
/**
|
|
11054
11212
|
* Delete a single credential field for a tool.
|
|
@@ -11074,7 +11232,7 @@ var UsersRepository = class {
|
|
|
11074
11232
|
await update(this.db, users3).set({
|
|
11075
11233
|
data: { ...row.data, agentic_tools: next },
|
|
11076
11234
|
updated_at: /* @__PURE__ */ new Date()
|
|
11077
|
-
}).where(
|
|
11235
|
+
}).where(eq31(users3.user_id, fullId)).run();
|
|
11078
11236
|
}
|
|
11079
11237
|
};
|
|
11080
11238
|
|
|
@@ -11791,23 +11949,9 @@ import fs2 from "fs";
|
|
|
11791
11949
|
init_config_manager();
|
|
11792
11950
|
init_constants();
|
|
11793
11951
|
|
|
11794
|
-
// src/config/env-blocklist.ts
|
|
11795
|
-
init_esm_shims();
|
|
11796
|
-
var BLOCKED_ENV_PATTERNS = Object.freeze([
|
|
11797
|
-
/^LD_/i,
|
|
11798
|
-
/^DYLD_/i,
|
|
11799
|
-
/^PYTHON(?!_AGOR_)/i
|
|
11800
|
-
]);
|
|
11801
|
-
|
|
11802
11952
|
// src/config/env-locking.ts
|
|
11803
11953
|
init_esm_shims();
|
|
11804
11954
|
|
|
11805
|
-
// src/config/env-resolver.ts
|
|
11806
|
-
init_esm_shims();
|
|
11807
|
-
init_database_wrapper();
|
|
11808
|
-
import { eq as eq31 } from "drizzle-orm";
|
|
11809
|
-
init_schema();
|
|
11810
|
-
|
|
11811
11955
|
// src/config/env-validation.ts
|
|
11812
11956
|
init_esm_shims();
|
|
11813
11957
|
var ENV_VAR_CONSTRAINTS = {
|