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
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/oauth-auth-helpers.ts
|
|
2
|
+
import { runWithTenantDatabaseScope } from "@agor/core/db";
|
|
3
|
+
async function runInOAuthTenantScope(db, tenantId, work) {
|
|
4
|
+
if (!tenantId) return work();
|
|
5
|
+
return runWithTenantDatabaseScope(db, tenantId, work);
|
|
6
|
+
}
|
|
7
|
+
function resolveForUserIdWithGate(opts) {
|
|
8
|
+
const canUseExplicitUser = opts.isServiceAccount === true || opts.authPayloadType === "executor-session" && opts.queryForUserId === opts.callerUserId;
|
|
9
|
+
return opts.queryForUserId && canUseExplicitUser ? opts.queryForUserId : opts.callerUserId;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
resolveForUserIdWithGate,
|
|
13
|
+
runInOAuthTenantScope
|
|
14
|
+
};
|
|
@@ -44,6 +44,7 @@ export declare const PROMPT_FLOW_PATCH_FIELDS: readonly string[];
|
|
|
44
44
|
export declare function isPromptFlowPatchOnly(data: unknown): boolean;
|
|
45
45
|
export declare function shouldRunSessionPostTurnHooks(session: Pick<Session, 'status' | 'ready_for_prompt'>): boolean;
|
|
46
46
|
export declare function shouldDrainQueueAfterSessionPostTurnPatch(session: Pick<Session, 'status' | 'ready_for_prompt'>, params?: Params): boolean;
|
|
47
|
+
export declare function getTrustedSessionTenantId(session: unknown): string | undefined;
|
|
47
48
|
export declare function enrichSessionFindResultWithRemoteRelationships(result: Paginated<Session> | Session[], sessionsService: Pick<SessionsServiceImpl, 'enrichRemoteRelationships'>): Promise<Paginated<Session> | Session[]>;
|
|
48
49
|
/**
|
|
49
50
|
* Interface for dependencies needed by hook registration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-hooks.d.ts","sourceRoot":"","sources":["../src/register-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,UAAU,EAWhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAE7B,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAcvD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"register-hooks.d.ts","sourceRoot":"","sources":["../src/register-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,UAAU,EAWhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAE7B,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAcvD,OAAO,KAAK,EAOV,WAAW,EAEX,SAAS,EACT,MAAM,EACN,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAoG3B,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE5E;AAwFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAQrD,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAK5D;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,kBAAkB,CAAC,GACpD,OAAO,CAET;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,kBAAkB,CAAC,EACrD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAMT;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAsB,8CAA8C,CAClE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,EACtC,eAAe,EAAE,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,GACtE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC,CAazC;AAeD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,wBAAwB,CAAC;IAC7B,GAAG,EAAE,WAAW,GAAG;QAAE,EAAE,CAAC,EAAE,OAAO,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,cAAc,EAAE;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,CAAC;IAG7C,eAAe,EAAE,mBAAmB,CAAC;IACrC,eAAe,EAAE,mBAAmB,CAAC;IACrC,aAAa,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,iBAAiB,CAAC;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAiDtC,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,CA6xF7D"}
|
|
@@ -672,7 +672,7 @@ import {
|
|
|
672
672
|
MCP_TOKEN_AUDIENCE,
|
|
673
673
|
MCP_TOKEN_ISSUER
|
|
674
674
|
} from "@agor/core/types";
|
|
675
|
-
import
|
|
675
|
+
import jwt4 from "jsonwebtoken";
|
|
676
676
|
import { MCP_TOKEN_AUDIENCE as MCP_TOKEN_AUDIENCE2, MCP_TOKEN_ISSUER as MCP_TOKEN_ISSUER2 } from "@agor/core/types";
|
|
677
677
|
function mcpTokenDebug(...args) {
|
|
678
678
|
if (DEBUG_MCP_TOKENS) {
|
|
@@ -744,7 +744,7 @@ async function generateSessionToken2(app, sessionId, userId) {
|
|
|
744
744
|
exp: expSec,
|
|
745
745
|
jti
|
|
746
746
|
};
|
|
747
|
-
const token =
|
|
747
|
+
const token = jwt4.sign(payload, jwtSecret, { algorithm: "HS256" });
|
|
748
748
|
s.tokenCache.set(cacheKey, { token, expiresAtMs });
|
|
749
749
|
mcpTokenDebug(
|
|
750
750
|
`\u{1F3AB} MCP token issued: session=${shortId3(sessionId)} jti=${jti.substring(0, 8)} exp=+${Math.floor(s.expirationMs / 1e3)}s`
|
|
@@ -760,15 +760,15 @@ async function validateSessionToken(app, token) {
|
|
|
760
760
|
}
|
|
761
761
|
let payload;
|
|
762
762
|
try {
|
|
763
|
-
payload =
|
|
763
|
+
payload = jwt4.verify(token, jwtSecret, {
|
|
764
764
|
audience: MCP_TOKEN_AUDIENCE,
|
|
765
765
|
issuer: MCP_TOKEN_ISSUER,
|
|
766
766
|
algorithms: ["HS256"]
|
|
767
767
|
});
|
|
768
768
|
} catch (err) {
|
|
769
|
-
if (err instanceof
|
|
769
|
+
if (err instanceof jwt4.TokenExpiredError) {
|
|
770
770
|
console.warn("[mcp-tokens] token rejected: expired");
|
|
771
|
-
} else if (err instanceof
|
|
771
|
+
} else if (err instanceof jwt4.JsonWebTokenError) {
|
|
772
772
|
console.warn(`[mcp-tokens] token rejected: ${err.message}`);
|
|
773
773
|
} else {
|
|
774
774
|
console.error("[mcp-tokens] token verify error:", err);
|
|
@@ -1237,12 +1237,12 @@ import {
|
|
|
1237
1237
|
permissionModeForCli,
|
|
1238
1238
|
slugForCwd
|
|
1239
1239
|
} from "@agor/core/claude-cli";
|
|
1240
|
-
import { resolveMultiTenancyConfig as
|
|
1240
|
+
import { resolveMultiTenancyConfig as resolveMultiTenancyConfig3 } from "@agor/core/config";
|
|
1241
1241
|
import {
|
|
1242
1242
|
generateId as generateId4,
|
|
1243
1243
|
getCurrentTenantId as getCurrentTenantId3,
|
|
1244
1244
|
runWithoutTenantDatabaseScope as runWithoutTenantDatabaseScope2,
|
|
1245
|
-
runWithTenantDatabaseScope as
|
|
1245
|
+
runWithTenantDatabaseScope as runWithTenantDatabaseScope4,
|
|
1246
1246
|
SessionRepository as SessionRepository3,
|
|
1247
1247
|
shortId as shortId4,
|
|
1248
1248
|
TaskRepository
|
|
@@ -1262,7 +1262,7 @@ function getDb(app) {
|
|
|
1262
1262
|
}
|
|
1263
1263
|
function getCliFallbackTenantId(app) {
|
|
1264
1264
|
const config = app.get("config");
|
|
1265
|
-
return
|
|
1265
|
+
return resolveMultiTenancyConfig3(config ?? {}).static_tenant_id;
|
|
1266
1266
|
}
|
|
1267
1267
|
function captureCliWatcherTenantId(app) {
|
|
1268
1268
|
return getCurrentTenantId3() ?? getCliFallbackTenantId(app);
|
|
@@ -1274,7 +1274,7 @@ async function runCliCallbackDatabaseScope(app, sessionId, work) {
|
|
|
1274
1274
|
const db = getDb(app);
|
|
1275
1275
|
if (!db) return work();
|
|
1276
1276
|
const tenantId = cliWatcherTenantBySession.get(sessionId) ?? captureCliWatcherTenantId(app);
|
|
1277
|
-
return
|
|
1277
|
+
return runWithTenantDatabaseScope4(db, tenantId, work);
|
|
1278
1278
|
}
|
|
1279
1279
|
async function persistActiveTurnSnapshot(app, sessionId, turn) {
|
|
1280
1280
|
const db = getDb(app);
|
|
@@ -2120,7 +2120,7 @@ import {
|
|
|
2120
2120
|
isUnixImpersonationEnabled,
|
|
2121
2121
|
loadConfig,
|
|
2122
2122
|
resolveExecutionSecurityMode,
|
|
2123
|
-
resolveMultiTenancyConfig as
|
|
2123
|
+
resolveMultiTenancyConfig as resolveMultiTenancyConfig4,
|
|
2124
2124
|
resolveMultiTenancyDatabaseDialect,
|
|
2125
2125
|
resolveTenantContext as resolveTenantContext3,
|
|
2126
2126
|
TenantResolutionError as TenantResolutionError3,
|
|
@@ -2162,19 +2162,33 @@ import {
|
|
|
2162
2162
|
|
|
2163
2163
|
// src/auth/executor-runtime-scope.ts
|
|
2164
2164
|
import { Forbidden } from "@agor/core/feathers";
|
|
2165
|
+
|
|
2166
|
+
// src/auth/executor-session-token.ts
|
|
2167
|
+
var EXECUTOR_SESSION_TOKEN_TYPE = "executor-session";
|
|
2168
|
+
var EXECUTOR_SESSION_TOKEN_PURPOSE = "executor-task";
|
|
2169
|
+
function isExecutorSessionTokenPayload(payload) {
|
|
2170
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return false;
|
|
2171
|
+
const record = payload;
|
|
2172
|
+
return record.type === EXECUTOR_SESSION_TOKEN_TYPE && record.purpose === EXECUTOR_SESSION_TOKEN_PURPOSE;
|
|
2173
|
+
}
|
|
2174
|
+
function getExecutorSessionTokenSessionId(payload) {
|
|
2175
|
+
return payload.session_id ?? payload.sessionId;
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2178
|
+
// src/auth/executor-runtime-scope.ts
|
|
2165
2179
|
function scopedPayload(context) {
|
|
2166
2180
|
const params = context.params;
|
|
2167
2181
|
const payload = params.authentication?.payload;
|
|
2168
|
-
if (payload?.type ===
|
|
2169
|
-
if (payload
|
|
2182
|
+
if (payload?.type === EXECUTOR_SESSION_TOKEN_TYPE) {
|
|
2183
|
+
if (!isExecutorSessionTokenPayload(payload)) {
|
|
2170
2184
|
throw new Forbidden("Executor token is not valid for this request");
|
|
2171
2185
|
}
|
|
2172
2186
|
return payload;
|
|
2173
2187
|
}
|
|
2174
2188
|
if (params.authentication?.strategy === "jwt" && params.task_id) {
|
|
2175
2189
|
return {
|
|
2176
|
-
type:
|
|
2177
|
-
purpose:
|
|
2190
|
+
type: EXECUTOR_SESSION_TOKEN_TYPE,
|
|
2191
|
+
purpose: EXECUTOR_SESSION_TOKEN_PURPOSE,
|
|
2178
2192
|
task_id: params.task_id,
|
|
2179
2193
|
session_id: params.session_id,
|
|
2180
2194
|
sessionId: params.sessionId,
|
|
@@ -2284,7 +2298,7 @@ function executorRuntimeScopeGuard() {
|
|
|
2284
2298
|
const payload = scopedPayload(context);
|
|
2285
2299
|
if (!payload) return context;
|
|
2286
2300
|
const scope = {
|
|
2287
|
-
sessionId: payload
|
|
2301
|
+
sessionId: getExecutorSessionTokenSessionId(payload),
|
|
2288
2302
|
taskId: payload.task_id,
|
|
2289
2303
|
branchId: payload.branch_id
|
|
2290
2304
|
};
|
|
@@ -2534,6 +2548,13 @@ var gatewayRouteHook = async (context) => {
|
|
|
2534
2548
|
return context;
|
|
2535
2549
|
};
|
|
2536
2550
|
|
|
2551
|
+
// src/oauth-auth-helpers.ts
|
|
2552
|
+
import { runWithTenantDatabaseScope } from "@agor/core/db";
|
|
2553
|
+
function resolveForUserIdWithGate(opts) {
|
|
2554
|
+
const canUseExplicitUser = opts.isServiceAccount === true || opts.authPayloadType === "executor-session" && opts.queryForUserId === opts.callerUserId;
|
|
2555
|
+
return opts.queryForUserId && canUseExplicitUser ? opts.queryForUserId : opts.callerUserId;
|
|
2556
|
+
}
|
|
2557
|
+
|
|
2537
2558
|
// src/services/groups.ts
|
|
2538
2559
|
import { BoardRepository, GroupRepository } from "@agor/core/db";
|
|
2539
2560
|
import { BadRequest, Forbidden as Forbidden3, NotAuthenticated as NotAuthenticated2 } from "@agor/core/feathers";
|
|
@@ -3528,11 +3549,26 @@ function injectCreatedBy() {
|
|
|
3528
3549
|
// src/utils/mcp-header-secrets.ts
|
|
3529
3550
|
import { redactMCPAuthSecrets } from "@agor/core/tools/mcp/auth-secrets";
|
|
3530
3551
|
import { redactMCPCustomHeaders } from "@agor/core/tools/mcp/http-headers";
|
|
3552
|
+
import jwt2 from "jsonwebtoken";
|
|
3531
3553
|
function shouldExposeMCPServerSecretsForSessionToken(params, options = {}) {
|
|
3532
|
-
const payload = params?.authentication?.payload;
|
|
3533
|
-
const sessionId = params?.session_id ?? payload
|
|
3554
|
+
const payload = params?.authentication?.payload ?? decodeExecutorSessionPayload(params);
|
|
3555
|
+
const sessionId = params?.session_id ?? getPayloadSessionId(payload);
|
|
3534
3556
|
return !!params?.provider && (params.authentication?.strategy === "session-token" || payload?.type === "executor-session") && !!sessionId && (!options.sessionId || sessionId === options.sessionId);
|
|
3535
3557
|
}
|
|
3558
|
+
function decodeExecutorSessionPayload(params) {
|
|
3559
|
+
if (params?.authentication?.strategy !== "jwt" || !params.authentication.accessToken) {
|
|
3560
|
+
return void 0;
|
|
3561
|
+
}
|
|
3562
|
+
const decoded = jwt2.decode(params.authentication.accessToken);
|
|
3563
|
+
if (!decoded || typeof decoded !== "object" || Array.isArray(decoded)) {
|
|
3564
|
+
return void 0;
|
|
3565
|
+
}
|
|
3566
|
+
if (!isExecutorSessionTokenPayload(decoded)) return void 0;
|
|
3567
|
+
return decoded;
|
|
3568
|
+
}
|
|
3569
|
+
function getPayloadSessionId(payload) {
|
|
3570
|
+
return payload ? getExecutorSessionTokenSessionId(payload) : void 0;
|
|
3571
|
+
}
|
|
3536
3572
|
function shouldExposeMCPServerSecrets(params, options = {}) {
|
|
3537
3573
|
if (!params?.provider) return true;
|
|
3538
3574
|
if (params.user?._isServiceAccount || params.user?.role === "service") return true;
|
|
@@ -3618,6 +3654,7 @@ var RealtimeAccessCache = class {
|
|
|
3618
3654
|
}
|
|
3619
3655
|
branchVisibility = /* @__PURE__ */ new Map();
|
|
3620
3656
|
sessionBranches = /* @__PURE__ */ new Map();
|
|
3657
|
+
sessionOwners = /* @__PURE__ */ new Map();
|
|
3621
3658
|
branchVisibilityTtlMs;
|
|
3622
3659
|
sessionBranchTtlMs;
|
|
3623
3660
|
now;
|
|
@@ -3634,6 +3671,27 @@ var RealtimeAccessCache = class {
|
|
|
3634
3671
|
});
|
|
3635
3672
|
return branchId;
|
|
3636
3673
|
}
|
|
3674
|
+
/**
|
|
3675
|
+
* Owning user id for a session, cached on the same cadence as the
|
|
3676
|
+
* session→branch map. Used only to offer streaming events to the session
|
|
3677
|
+
* creator's own connections as a fallback when they haven't subscribed to
|
|
3678
|
+
* the per-session stream channel yet.
|
|
3679
|
+
*/
|
|
3680
|
+
async getSessionOwnerId(sessionId) {
|
|
3681
|
+
const cached = this.sessionOwners.get(sessionId);
|
|
3682
|
+
const now = this.now();
|
|
3683
|
+
if (cached && cached.expiresAt > now) {
|
|
3684
|
+
return cached.ownerId;
|
|
3685
|
+
}
|
|
3686
|
+
const ownerId = await this.options.sessionsRepository.findCreatedByBySessionId(
|
|
3687
|
+
sessionId
|
|
3688
|
+
) ?? null;
|
|
3689
|
+
this.sessionOwners.set(sessionId, {
|
|
3690
|
+
ownerId,
|
|
3691
|
+
expiresAt: now + this.sessionBranchTtlMs
|
|
3692
|
+
});
|
|
3693
|
+
return ownerId;
|
|
3694
|
+
}
|
|
3637
3695
|
async getBranchVisibility(branchId) {
|
|
3638
3696
|
const cached = this.branchVisibility.get(branchId);
|
|
3639
3697
|
const now = this.now();
|
|
@@ -3669,6 +3727,7 @@ var RealtimeAccessCache = class {
|
|
|
3669
3727
|
}
|
|
3670
3728
|
invalidateSession(sessionId) {
|
|
3671
3729
|
this.sessionBranches.delete(sessionId);
|
|
3730
|
+
this.sessionOwners.delete(sessionId);
|
|
3672
3731
|
}
|
|
3673
3732
|
clearVisibility() {
|
|
3674
3733
|
this.branchVisibility.clear();
|
|
@@ -3676,6 +3735,7 @@ var RealtimeAccessCache = class {
|
|
|
3676
3735
|
clearAll() {
|
|
3677
3736
|
this.branchVisibility.clear();
|
|
3678
3737
|
this.sessionBranches.clear();
|
|
3738
|
+
this.sessionOwners.clear();
|
|
3679
3739
|
}
|
|
3680
3740
|
visibilityFromEntry(entry) {
|
|
3681
3741
|
return entry.mode === "allAuthenticated" ? { mode: "allAuthenticated" } : { mode: "explicitUsers", userIds: entry.userIds };
|
|
@@ -3692,6 +3752,13 @@ import { hasMinimumRole as hasMinimumRole7, ROLES as ROLES8 } from "@agor/core/t
|
|
|
3692
3752
|
function tenantChannelName(tenantId) {
|
|
3693
3753
|
return `tenant:${tenantId}`;
|
|
3694
3754
|
}
|
|
3755
|
+
var SESSION_STREAM_CHANNEL_PREFIX = "session-stream:";
|
|
3756
|
+
function sessionStreamChannelName(sessionId) {
|
|
3757
|
+
return `${SESSION_STREAM_CHANNEL_PREFIX}${sessionId}`;
|
|
3758
|
+
}
|
|
3759
|
+
function existingChannel(app, name) {
|
|
3760
|
+
return (app.channels ?? []).includes(name) ? app.channel(name) : null;
|
|
3761
|
+
}
|
|
3695
3762
|
var DEBUG_REALTIME_PUBLISH = process.env.AGOR_DEBUG_REALTIME_PUBLISH === "1" || process.env.DEBUG?.includes("realtime-publish");
|
|
3696
3763
|
function realtimePublishDebug(...args) {
|
|
3697
3764
|
if (DEBUG_REALTIME_PUBLISH) {
|
|
@@ -3707,8 +3774,27 @@ var SESSION_ID_SCOPED_PATHS = /* @__PURE__ */ new Set([
|
|
|
3707
3774
|
"session-env-selections"
|
|
3708
3775
|
]);
|
|
3709
3776
|
var OPTIONAL_BRANCH_OR_SESSION_SCOPED_PATHS = /* @__PURE__ */ new Set(["board-objects", "board-comments"]);
|
|
3777
|
+
var MESSAGE_STREAMING_EVENTS = /* @__PURE__ */ new Set([
|
|
3778
|
+
"streaming:start",
|
|
3779
|
+
"streaming:chunk",
|
|
3780
|
+
"streaming:end",
|
|
3781
|
+
"streaming:error",
|
|
3782
|
+
"thinking:start",
|
|
3783
|
+
"thinking:chunk",
|
|
3784
|
+
"thinking:end"
|
|
3785
|
+
]);
|
|
3786
|
+
var TASK_STREAMING_EVENTS = /* @__PURE__ */ new Set(["thinking:chunk", "tool:start", "tool:complete"]);
|
|
3710
3787
|
function isStreamingEvent(context) {
|
|
3711
|
-
|
|
3788
|
+
if (context.path === "messages/streaming") return true;
|
|
3789
|
+
const event = context.event;
|
|
3790
|
+
if (!event) return false;
|
|
3791
|
+
if (context.path === "messages") {
|
|
3792
|
+
return event.startsWith("streaming:") || MESSAGE_STREAMING_EVENTS.has(event);
|
|
3793
|
+
}
|
|
3794
|
+
if (context.path === "tasks") {
|
|
3795
|
+
return TASK_STREAMING_EVENTS.has(event);
|
|
3796
|
+
}
|
|
3797
|
+
return false;
|
|
3712
3798
|
}
|
|
3713
3799
|
function asRecord2(value) {
|
|
3714
3800
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
@@ -3844,6 +3930,47 @@ async function resolvePublishScope(data, context, accessCache) {
|
|
|
3844
3930
|
function filterToServiceConnections(authenticated) {
|
|
3845
3931
|
return authenticated.filter((connection) => isServiceConnection(connection));
|
|
3846
3932
|
}
|
|
3933
|
+
async function resolveStreamingDelivery(app, data, tenantScoped, accessCache, branchRbacEnabled, allowSuperadmin) {
|
|
3934
|
+
const serviceConnections = filterToServiceConnections(tenantScoped);
|
|
3935
|
+
const sessionId = extractSessionId(data);
|
|
3936
|
+
if (!sessionId) return serviceConnections;
|
|
3937
|
+
const tenantConnections = new Set(
|
|
3938
|
+
tenantScoped.connections
|
|
3939
|
+
);
|
|
3940
|
+
const existingRoom = existingChannel(app, sessionStreamChannelName(sessionId));
|
|
3941
|
+
const room = existingRoom ? existingRoom.filter((connection) => tenantConnections.has(connection)) : null;
|
|
3942
|
+
let ownerId = null;
|
|
3943
|
+
try {
|
|
3944
|
+
ownerId = await accessCache.getSessionOwnerId(sessionId);
|
|
3945
|
+
} catch {
|
|
3946
|
+
}
|
|
3947
|
+
const ownerChannel = () => tenantScoped.filter(
|
|
3948
|
+
(connection) => userFromConnection(connection)?.user_id === ownerId
|
|
3949
|
+
);
|
|
3950
|
+
if (!branchRbacEnabled) {
|
|
3951
|
+
const channels2 = [serviceConnections];
|
|
3952
|
+
if (room) channels2.push(room);
|
|
3953
|
+
if (ownerId) channels2.push(ownerChannel());
|
|
3954
|
+
return channels2;
|
|
3955
|
+
}
|
|
3956
|
+
const branchId = await accessCache.getBranchIdForSession(sessionId);
|
|
3957
|
+
const visibility = branchId ? await accessCache.getBranchVisibility(branchId) : null;
|
|
3958
|
+
if (!visibility) return serviceConnections;
|
|
3959
|
+
if (visibility.mode === "allAuthenticated") {
|
|
3960
|
+
const channels2 = [serviceConnections];
|
|
3961
|
+
if (room) channels2.push(room);
|
|
3962
|
+
if (ownerId) channels2.push(ownerChannel());
|
|
3963
|
+
return channels2;
|
|
3964
|
+
}
|
|
3965
|
+
const channels = [serviceConnections];
|
|
3966
|
+
if (room) {
|
|
3967
|
+
channels.push(filterToUserIdsOrSuperadmins(room, visibility.userIds, allowSuperadmin));
|
|
3968
|
+
}
|
|
3969
|
+
if (ownerId && visibility.userIds.has(ownerId)) {
|
|
3970
|
+
channels.push(ownerChannel());
|
|
3971
|
+
}
|
|
3972
|
+
return channels;
|
|
3973
|
+
}
|
|
3847
3974
|
function filterToUserIdsOrAdmins(authenticated, userIds, allowSuperadmin) {
|
|
3848
3975
|
return authenticated.filter((connection) => {
|
|
3849
3976
|
if (isServiceConnection(connection) || isAdminConnection(connection, allowSuperadmin)) {
|
|
@@ -3917,6 +4044,16 @@ function configureRealtimePublish(options) {
|
|
|
3917
4044
|
throw error;
|
|
3918
4045
|
}
|
|
3919
4046
|
}
|
|
4047
|
+
if (isStreamingEvent(context)) {
|
|
4048
|
+
return resolveStreamingDelivery(
|
|
4049
|
+
app,
|
|
4050
|
+
data,
|
|
4051
|
+
tenantScoped,
|
|
4052
|
+
accessCache,
|
|
4053
|
+
branchRbacEnabled,
|
|
4054
|
+
allowSuperadmin
|
|
4055
|
+
);
|
|
4056
|
+
}
|
|
3920
4057
|
if (!branchRbacEnabled) return tenantScoped;
|
|
3921
4058
|
const scope = await resolvePublishScope(data, context, accessCache);
|
|
3922
4059
|
if (scope.kind === "global") return tenantScoped;
|
|
@@ -4049,19 +4186,9 @@ function recomputeNextRunAt() {
|
|
|
4049
4186
|
};
|
|
4050
4187
|
}
|
|
4051
4188
|
|
|
4052
|
-
// src/utils/session-
|
|
4053
|
-
import {
|
|
4054
|
-
|
|
4055
|
-
SessionStatus as SessionStatus2,
|
|
4056
|
-
sessionCanStartTask,
|
|
4057
|
-
TaskStatus
|
|
4058
|
-
} from "@agor/core/types";
|
|
4059
|
-
function isTerminalQueueProcessingSuppressed(params) {
|
|
4060
|
-
return params?.suppressTerminalQueueProcessing === true;
|
|
4061
|
-
}
|
|
4062
|
-
|
|
4063
|
-
// src/register-hooks.ts
|
|
4064
|
-
init_spawn_executor();
|
|
4189
|
+
// src/utils/session-queue-tenant-scope.ts
|
|
4190
|
+
import { resolveMultiTenancyConfig as resolveMultiTenancyConfig2 } from "@agor/core/config";
|
|
4191
|
+
import { runWithTenantDatabaseScope as runWithTenantDatabaseScope3 } from "@agor/core/db";
|
|
4065
4192
|
|
|
4066
4193
|
// src/utils/tenant-db-scope.ts
|
|
4067
4194
|
init_runtime_tokens();
|
|
@@ -4074,10 +4201,10 @@ import {
|
|
|
4074
4201
|
enqueueTenantDatabasePostCommitCallback,
|
|
4075
4202
|
getCurrentTenantId as getCurrentTenantId2,
|
|
4076
4203
|
runWithoutTenantDatabaseScope,
|
|
4077
|
-
runWithTenantDatabaseScope
|
|
4204
|
+
runWithTenantDatabaseScope as runWithTenantDatabaseScope2
|
|
4078
4205
|
} from "@agor/core/db";
|
|
4079
4206
|
import { NotAuthenticated as NotAuthenticated7 } from "@agor/core/feathers";
|
|
4080
|
-
import
|
|
4207
|
+
import jwt3 from "jsonwebtoken";
|
|
4081
4208
|
function readHeaderValue(headers, name) {
|
|
4082
4209
|
if (!headers) return null;
|
|
4083
4210
|
const wanted = name.toLowerCase();
|
|
@@ -4106,7 +4233,7 @@ function deferWithTenantDatabaseScope(db, params, work, onError) {
|
|
|
4106
4233
|
const schedule = () => {
|
|
4107
4234
|
runWithoutTenantDatabaseScope(() => {
|
|
4108
4235
|
setImmediate(() => {
|
|
4109
|
-
void
|
|
4236
|
+
void runWithTenantDatabaseScope2(db, tenantId, work).catch((error) => {
|
|
4110
4237
|
if (onError) {
|
|
4111
4238
|
onError(error);
|
|
4112
4239
|
return;
|
|
@@ -4128,7 +4255,7 @@ function createTenantDatabaseScopeAroundHook(options) {
|
|
|
4128
4255
|
const match = authorization?.match(/^Bearer\s+(.+)$/i);
|
|
4129
4256
|
if (!match || !options.jwtSecret) return void 0;
|
|
4130
4257
|
try {
|
|
4131
|
-
return
|
|
4258
|
+
return jwt3.verify(match[1], options.jwtSecret, {
|
|
4132
4259
|
issuer: RUNTIME_JWT_ISSUER,
|
|
4133
4260
|
audience: RUNTIME_JWT_AUDIENCE
|
|
4134
4261
|
});
|
|
@@ -4163,11 +4290,74 @@ function createTenantDatabaseScopeAroundHook(options) {
|
|
|
4163
4290
|
}
|
|
4164
4291
|
throw error;
|
|
4165
4292
|
}
|
|
4166
|
-
await
|
|
4293
|
+
await runWithTenantDatabaseScope2(options.db, context.params.tenant?.tenant_id, next);
|
|
4167
4294
|
};
|
|
4168
4295
|
}
|
|
4169
4296
|
|
|
4297
|
+
// src/utils/session-queue-tenant-scope.ts
|
|
4298
|
+
function staticTenantId(config) {
|
|
4299
|
+
const multiTenancy = resolveMultiTenancyConfig2(config);
|
|
4300
|
+
return multiTenancy.mode === "static" ? multiTenancy.static_tenant_id : void 0;
|
|
4301
|
+
}
|
|
4302
|
+
function trustedTenantIdHint(options) {
|
|
4303
|
+
const hint = options.tenantIdHint?.trim();
|
|
4304
|
+
return hint || void 0;
|
|
4305
|
+
}
|
|
4306
|
+
function queueTenantParams(params, tenantId, source = "explicit") {
|
|
4307
|
+
const currentTenant = params?.tenant;
|
|
4308
|
+
return {
|
|
4309
|
+
...params ?? {},
|
|
4310
|
+
tenant: {
|
|
4311
|
+
...currentTenant,
|
|
4312
|
+
tenant_id: tenantId,
|
|
4313
|
+
source: currentTenant?.source ?? source
|
|
4314
|
+
}
|
|
4315
|
+
};
|
|
4316
|
+
}
|
|
4317
|
+
function deferWithSessionQueueTenantScope(options, work, onError) {
|
|
4318
|
+
const handleError = (error) => {
|
|
4319
|
+
if (onError) {
|
|
4320
|
+
onError(error);
|
|
4321
|
+
return;
|
|
4322
|
+
}
|
|
4323
|
+
console.error(`\u274C [Queue] ${options.label} failed:`, error);
|
|
4324
|
+
};
|
|
4325
|
+
const capturedTenantId = resolveTenantIdForDeferredScope(options.params);
|
|
4326
|
+
if (capturedTenantId) {
|
|
4327
|
+
const scopedParams2 = queueTenantParams(options.params, capturedTenantId, "explicit");
|
|
4328
|
+
deferWithTenantDatabaseScope(options.db, scopedParams2, () => work(scopedParams2), handleError);
|
|
4329
|
+
return;
|
|
4330
|
+
}
|
|
4331
|
+
const tenantIdHint = trustedTenantIdHint(options);
|
|
4332
|
+
if (tenantIdHint) {
|
|
4333
|
+
const scopedParams2 = queueTenantParams(options.params, tenantIdHint, "explicit");
|
|
4334
|
+
deferWithTenantDatabaseScope(options.db, scopedParams2, () => work(scopedParams2), handleError);
|
|
4335
|
+
return;
|
|
4336
|
+
}
|
|
4337
|
+
const configuredStaticTenantId = staticTenantId(options.config);
|
|
4338
|
+
if (!configuredStaticTenantId) {
|
|
4339
|
+
handleError(
|
|
4340
|
+
new Error(`${options.label} skipped for session ${options.sessionId}: missing tenant context`)
|
|
4341
|
+
);
|
|
4342
|
+
return;
|
|
4343
|
+
}
|
|
4344
|
+
const scopedParams = queueTenantParams(options.params, configuredStaticTenantId, "static");
|
|
4345
|
+
deferWithTenantDatabaseScope(options.db, scopedParams, () => work(scopedParams), handleError);
|
|
4346
|
+
}
|
|
4347
|
+
|
|
4348
|
+
// src/utils/session-task-state.ts
|
|
4349
|
+
import {
|
|
4350
|
+
isTerminalTaskStatus,
|
|
4351
|
+
SessionStatus as SessionStatus2,
|
|
4352
|
+
sessionCanStartTask,
|
|
4353
|
+
TaskStatus
|
|
4354
|
+
} from "@agor/core/types";
|
|
4355
|
+
function isTerminalQueueProcessingSuppressed(params) {
|
|
4356
|
+
return params?.suppressTerminalQueueProcessing === true;
|
|
4357
|
+
}
|
|
4358
|
+
|
|
4170
4359
|
// src/register-hooks.ts
|
|
4360
|
+
init_spawn_executor();
|
|
4171
4361
|
var DEBUG_MCP_TOKENS2 = process.env.AGOR_DEBUG_MCP_TOKENS === "1" || process.env.DEBUG?.includes("mcp-tokens");
|
|
4172
4362
|
function mcpTokenDebug2(...args) {
|
|
4173
4363
|
if (DEBUG_MCP_TOKENS2) {
|
|
@@ -4279,6 +4469,10 @@ function shouldRunSessionPostTurnHooks(session) {
|
|
|
4279
4469
|
function shouldDrainQueueAfterSessionPostTurnPatch(session, params) {
|
|
4280
4470
|
return shouldRunSessionPostTurnHooks(session) && session.ready_for_prompt === true && !isTerminalQueueProcessingSuppressed(params);
|
|
4281
4471
|
}
|
|
4472
|
+
function getTrustedSessionTenantId(session) {
|
|
4473
|
+
const tenantId = session?.tenant_id;
|
|
4474
|
+
return typeof tenantId === "string" && tenantId.length > 0 ? tenantId : void 0;
|
|
4475
|
+
}
|
|
4282
4476
|
async function enrichSessionFindResultWithRemoteRelationships(result, sessionsService) {
|
|
4283
4477
|
if (isRemoteRelationshipsEnrichedResult(result)) return result;
|
|
4284
4478
|
if (Array.isArray(result)) {
|
|
@@ -4293,6 +4487,7 @@ async function enrichSessionFindResultWithRemoteRelationships(result, sessionsSe
|
|
|
4293
4487
|
}
|
|
4294
4488
|
var TENANT_OWNED_SERVICE_PATHS = [
|
|
4295
4489
|
"sessions",
|
|
4490
|
+
"sessions/:id/mcp-servers",
|
|
4296
4491
|
"session-relationships",
|
|
4297
4492
|
"tasks",
|
|
4298
4493
|
"messages",
|
|
@@ -4309,6 +4504,14 @@ var TENANT_OWNED_SERVICE_PATHS = [
|
|
|
4309
4504
|
"boards/:id/group-grants",
|
|
4310
4505
|
"app-variables",
|
|
4311
4506
|
"mcp-servers",
|
|
4507
|
+
"mcp-servers/discover",
|
|
4508
|
+
"mcp-servers/oauth-auth-headers",
|
|
4509
|
+
"mcp-servers/oauth-complete",
|
|
4510
|
+
"mcp-servers/oauth-disconnect",
|
|
4511
|
+
"mcp-servers/oauth-refresh",
|
|
4512
|
+
"mcp-servers/oauth-start",
|
|
4513
|
+
"mcp-servers/oauth-status",
|
|
4514
|
+
"mcp-servers/test-oauth",
|
|
4312
4515
|
"card-types",
|
|
4313
4516
|
"cards",
|
|
4314
4517
|
"artifacts",
|
|
@@ -4355,7 +4558,7 @@ function registerHooks(ctx) {
|
|
|
4355
4558
|
return void 0;
|
|
4356
4559
|
}
|
|
4357
4560
|
};
|
|
4358
|
-
const multiTenancy =
|
|
4561
|
+
const multiTenancy = resolveMultiTenancyConfig4(config);
|
|
4359
4562
|
const tenantColumnsEnabled = resolveMultiTenancyDatabaseDialect(config) === "postgresql";
|
|
4360
4563
|
const executionMode = resolveExecutionSecurityMode(config);
|
|
4361
4564
|
const tenantOwnedServicePaths = TENANT_OWNED_SERVICE_PATHS;
|
|
@@ -4513,16 +4716,36 @@ function registerHooks(ctx) {
|
|
|
4513
4716
|
);
|
|
4514
4717
|
return context;
|
|
4515
4718
|
};
|
|
4516
|
-
const
|
|
4719
|
+
const membershipGroupIdFromContext = (context) => {
|
|
4720
|
+
const resultGroupId = context.result?.group_id;
|
|
4721
|
+
if (typeof resultGroupId === "string" && resultGroupId.length > 0) {
|
|
4722
|
+
return resultGroupId;
|
|
4723
|
+
}
|
|
4724
|
+
const dataGroupId = context.data?.group_id;
|
|
4725
|
+
if (typeof dataGroupId === "string" && dataGroupId.length > 0) return dataGroupId;
|
|
4726
|
+
const queryGroupId = context.params.query?.group_id;
|
|
4727
|
+
if (typeof queryGroupId === "string" && queryGroupId.length > 0) return queryGroupId;
|
|
4728
|
+
const routeGroupId = context.params.route?.groupId;
|
|
4729
|
+
if (typeof routeGroupId === "string" && routeGroupId.length > 0) return routeGroupId;
|
|
4730
|
+
return void 0;
|
|
4731
|
+
};
|
|
4732
|
+
const syncUnixAccessForGroupGrantedBranches = async (context, logPrefix) => {
|
|
4517
4733
|
if (!executionMode.unixFsIsolationEnabled) return context;
|
|
4518
|
-
const
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
logPrefix,
|
|
4523
|
-
context.params
|
|
4734
|
+
const groupId = membershipGroupIdFromContext(context);
|
|
4735
|
+
if (!groupId) {
|
|
4736
|
+
console.warn(
|
|
4737
|
+
`[Unix Integration] Could not resolve group_id for ${context.path}.${context.method}; skipping group membership permission sync`
|
|
4524
4738
|
);
|
|
4525
|
-
|
|
4739
|
+
return context;
|
|
4740
|
+
}
|
|
4741
|
+
const branchIds = await branchRepository.findExplicitFsAccessBranchIdsForGroup(groupId);
|
|
4742
|
+
if (branchIds.length === 0) return context;
|
|
4743
|
+
console.log(
|
|
4744
|
+
`[Unix Integration] Queueing group membership permission sync for ${branchIds.length} branch(es) granted to group ${shortId5(groupId)}`
|
|
4745
|
+
);
|
|
4746
|
+
for (const branchId of branchIds) {
|
|
4747
|
+
syncBranchUnixAccess(branchId, logPrefix, context.params);
|
|
4748
|
+
await invalidateRealtimeBranchAccess(branchId);
|
|
4526
4749
|
}
|
|
4527
4750
|
return context;
|
|
4528
4751
|
};
|
|
@@ -5066,7 +5289,13 @@ function registerHooks(ctx) {
|
|
|
5066
5289
|
});
|
|
5067
5290
|
const injectPerUserOAuthTokens = async (context) => {
|
|
5068
5291
|
const queryForUserId = context.params?.query?.forUserId;
|
|
5069
|
-
const
|
|
5292
|
+
const authPayloadType = context.params?.authentication?.payload?.type;
|
|
5293
|
+
const userId = resolveForUserIdWithGate({
|
|
5294
|
+
queryForUserId,
|
|
5295
|
+
isServiceAccount: context.params?.user?._isServiceAccount,
|
|
5296
|
+
authPayloadType,
|
|
5297
|
+
callerUserId: context.params?.user?.user_id
|
|
5298
|
+
});
|
|
5070
5299
|
if (!userId) {
|
|
5071
5300
|
return context;
|
|
5072
5301
|
}
|
|
@@ -5423,11 +5652,11 @@ function registerHooks(ctx) {
|
|
|
5423
5652
|
after: {
|
|
5424
5653
|
create: [
|
|
5425
5654
|
clearRealtimeBranchVisibility,
|
|
5426
|
-
(context) =>
|
|
5655
|
+
(context) => syncUnixAccessForGroupGrantedBranches(context, "[Executor/group-memberships.create]")
|
|
5427
5656
|
],
|
|
5428
5657
|
remove: [
|
|
5429
5658
|
clearRealtimeBranchVisibility,
|
|
5430
|
-
(context) =>
|
|
5659
|
+
(context) => syncUnixAccessForGroupGrantedBranches(context, "[Executor/group-memberships.remove]")
|
|
5431
5660
|
]
|
|
5432
5661
|
}
|
|
5433
5662
|
});
|
|
@@ -6073,19 +6302,29 @@ function registerHooks(ctx) {
|
|
|
6073
6302
|
}
|
|
6074
6303
|
});
|
|
6075
6304
|
if (shouldDrainQueueAfterSessionPostTurnPatch(session, context.params)) {
|
|
6076
|
-
|
|
6077
|
-
|
|
6305
|
+
const sessionTenantId = getTrustedSessionTenantId(session);
|
|
6306
|
+
deferWithSessionQueueTenantScope(
|
|
6307
|
+
{
|
|
6308
|
+
db,
|
|
6309
|
+
config,
|
|
6310
|
+
sessionId: session.session_id,
|
|
6311
|
+
params: context.params,
|
|
6312
|
+
tenantIdHint: sessionTenantId,
|
|
6313
|
+
label: "SessionsService.after.patch queue drain"
|
|
6314
|
+
},
|
|
6315
|
+
async (queueParams) => {
|
|
6078
6316
|
console.log(
|
|
6079
6317
|
`\u{1F504} [SessionsService.after.patch] Session ${shortId5(session.session_id)} became promptable (${session.status}), checking for queued tasks...`
|
|
6080
6318
|
);
|
|
6081
|
-
await sessionsService.triggerQueueProcessing(session.session_id,
|
|
6082
|
-
}
|
|
6319
|
+
await sessionsService.triggerQueueProcessing(session.session_id, queueParams);
|
|
6320
|
+
},
|
|
6321
|
+
(error) => {
|
|
6083
6322
|
console.error(
|
|
6084
6323
|
`\u274C [SessionsService.after.patch] Failed to process queue for session ${shortId5(session.session_id)}:`,
|
|
6085
6324
|
error
|
|
6086
6325
|
);
|
|
6087
6326
|
}
|
|
6088
|
-
|
|
6327
|
+
);
|
|
6089
6328
|
} else {
|
|
6090
6329
|
console.log(
|
|
6091
6330
|
`\u23ED\uFE0F [SessionsService.after.patch] Queue drain suppressed for session ${shortId5(session.session_id)} (suppressTerminalQueueProcessing or not ready)`
|
|
@@ -6294,6 +6533,17 @@ function registerHooks(ctx) {
|
|
|
6294
6533
|
context.dispatch = result;
|
|
6295
6534
|
return context;
|
|
6296
6535
|
}
|
|
6536
|
+
if (_action === "mergeObjectFields" && objects) {
|
|
6537
|
+
if (!context.id) throw new Error("Board ID required");
|
|
6538
|
+
const result = await boardsService.mergeBoardObjectFields(
|
|
6539
|
+
context.id,
|
|
6540
|
+
objects
|
|
6541
|
+
);
|
|
6542
|
+
context.result = result;
|
|
6543
|
+
app.service("boards").emit("patched", result);
|
|
6544
|
+
context.dispatch = result;
|
|
6545
|
+
return context;
|
|
6546
|
+
}
|
|
6297
6547
|
if (_action === "deleteZone" && objectId) {
|
|
6298
6548
|
if (!context.id) throw new Error("Board ID required");
|
|
6299
6549
|
const result = await boardsService.deleteZone(
|
|
@@ -6505,6 +6755,7 @@ export {
|
|
|
6505
6755
|
PROMPT_FLOW_PATCH_FIELDS,
|
|
6506
6756
|
TENANT_OWNED_SERVICE_PATHS,
|
|
6507
6757
|
enrichSessionFindResultWithRemoteRelationships,
|
|
6758
|
+
getTrustedSessionTenantId,
|
|
6508
6759
|
isPromptFlowPatchOnly,
|
|
6509
6760
|
registerHooks,
|
|
6510
6761
|
shouldDrainQueueAfterSessionPostTurnPatch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../src/register-routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAOhB,iBAAiB,EAGjB,KAAK,wBAAwB,EAC7B,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAML,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAEV,oBAAoB,EACpB,WAAW,EAIX,MAAM,EAIN,WAAW,EASZ,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../src/register-routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAOhB,iBAAiB,EAGjB,KAAK,wBAAwB,EAC7B,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAML,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAEV,oBAAoB,EACpB,WAAW,EAIX,MAAM,EAIN,WAAW,EASZ,MAAM,kBAAkB,CAAC;AAsB1B,OAAO,KAAK,EACV,iBAAiB,EAEjB,mBAAmB,EAEnB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAoEhE,qBAAa,iBAAkB,SAAQ,aAAa;IAC5C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK3C,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CAOhD;AA0BD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,wBAAwB,CAAC;IAC7B,GAAG,EAAE,WAAW,GAAG;QAAE,EAAE,CAAC,EAAE,OAAO,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,qBAAqB,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACtE,cAAc,EAAE;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,uBAAuB,EAAE,SAAS,CAAC;IAC7D,cAAc,EAAE,oBAAoB,CAAC;IACrC;;;OAGG;IACH,gBAAgB,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,CAAC;IAG/D,eAAe,EAAE,mBAAmB,CAAC;IACrC,eAAe,EAAE,mBAAmB,CAAC;IACrC,aAAa,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,wBAAwB,EAAE,UAAU,CAClC,cAAc,mCAAmC,EAAE,8BAA8B,CAClF,CAAC;IACF,2BAA2B,EAAE,UAAU,CACrC,cAAc,sCAAsC,EAAE,iCAAiC,CACxF,CAAC;IACF,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6kH9E"}
|