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
|
@@ -65,7 +65,7 @@ var init_executor_read_impersonation = __esm({
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
// src/mcp/tools/users.ts
|
|
68
|
-
import { ROLES as
|
|
68
|
+
import { ROLES as ROLES6 } from "@agor/core/types";
|
|
69
69
|
|
|
70
70
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
71
71
|
var external_exports = {};
|
|
@@ -14750,11 +14750,15 @@ import {
|
|
|
14750
14750
|
ThreadSessionMapRepository
|
|
14751
14751
|
} from "@agor/core/db";
|
|
14752
14752
|
import {
|
|
14753
|
-
|
|
14753
|
+
buildSlackManifest,
|
|
14754
|
+
getConnector,
|
|
14755
|
+
requiredBotEvents,
|
|
14756
|
+
requiredBotScopes
|
|
14754
14757
|
} from "@agor/core/gateway";
|
|
14755
14758
|
import {
|
|
14756
14759
|
GATEWAY_REDACTED_SENTINEL,
|
|
14757
14760
|
GATEWAY_SENSITIVE_CONFIG_FIELDS,
|
|
14761
|
+
getRequiredSecretFields,
|
|
14758
14762
|
hasMinimumRole as hasMinimumRole2,
|
|
14759
14763
|
ROLES as ROLES2
|
|
14760
14764
|
} from "@agor/core/types";
|
|
@@ -14814,44 +14818,48 @@ var gatewayChannelCreateSchema = external_exports.strictObject({
|
|
|
14814
14818
|
agenticConfig: agenticConfigSchema.optional()
|
|
14815
14819
|
}).superRefine((value, issue2) => {
|
|
14816
14820
|
const config2 = value.config ?? {};
|
|
14817
|
-
if (value.
|
|
14818
|
-
|
|
14819
|
-
|
|
14820
|
-
|
|
14821
|
-
|
|
14822
|
-
|
|
14823
|
-
|
|
14824
|
-
|
|
14825
|
-
if (config2.connection_mode === "socket" && !config2.app_token) {
|
|
14826
|
-
issue2.addIssue({
|
|
14827
|
-
code: "custom",
|
|
14828
|
-
path: ["config", "app_token"],
|
|
14829
|
-
message: "config.app_token is required for Slack Socket Mode."
|
|
14830
|
-
});
|
|
14831
|
-
}
|
|
14832
|
-
}
|
|
14833
|
-
if (value.channelType === "github") {
|
|
14834
|
-
for (const field of ["app_id", "private_key", "installation_id", "watch_repos"]) {
|
|
14821
|
+
if (value.enabled !== false) {
|
|
14822
|
+
const requiredSecretMessages = {
|
|
14823
|
+
bot_token: "config.bot_token is required for Slack. Prefer a bot token stored outside the transcript when possible.",
|
|
14824
|
+
app_token: "config.app_token is required for Slack Socket Mode.",
|
|
14825
|
+
private_key: "config.private_key is required for GitHub gateway channels.",
|
|
14826
|
+
app_password: "config.app_password is required for Teams gateway channels."
|
|
14827
|
+
};
|
|
14828
|
+
for (const field of getRequiredSecretFields(value.channelType, config2)) {
|
|
14835
14829
|
if (!config2[field]) {
|
|
14836
14830
|
issue2.addIssue({
|
|
14837
14831
|
code: "custom",
|
|
14838
14832
|
path: ["config", field],
|
|
14839
|
-
message: `config.${field} is required for
|
|
14833
|
+
message: requiredSecretMessages[field] ?? `config.${field} is required for ${value.channelType} gateway channels.`
|
|
14840
14834
|
});
|
|
14841
14835
|
}
|
|
14842
14836
|
}
|
|
14843
14837
|
}
|
|
14844
|
-
if (value.channelType === "
|
|
14845
|
-
for (const field of ["app_id", "
|
|
14838
|
+
if (value.channelType === "github") {
|
|
14839
|
+
for (const field of ["app_id", "installation_id", "watch_repos"]) {
|
|
14846
14840
|
if (!config2[field]) {
|
|
14847
14841
|
issue2.addIssue({
|
|
14848
14842
|
code: "custom",
|
|
14849
14843
|
path: ["config", field],
|
|
14850
|
-
message: `config.${field} is required for
|
|
14844
|
+
message: `config.${field} is required for GitHub gateway channels.`
|
|
14851
14845
|
});
|
|
14852
14846
|
}
|
|
14853
14847
|
}
|
|
14854
14848
|
}
|
|
14849
|
+
if (value.channelType === "teams" && !config2.app_id) {
|
|
14850
|
+
issue2.addIssue({
|
|
14851
|
+
code: "custom",
|
|
14852
|
+
path: ["config", "app_id"],
|
|
14853
|
+
message: "config.app_id is required for Teams gateway channels."
|
|
14854
|
+
});
|
|
14855
|
+
}
|
|
14856
|
+
if (value.channelType === "slack" && config2.align_slack_users !== true && !value.agorUserId) {
|
|
14857
|
+
issue2.addIssue({
|
|
14858
|
+
code: "custom",
|
|
14859
|
+
path: ["agorUserId"],
|
|
14860
|
+
message: "Run-as-selected-user needs agorUserId \u2014 set config.align_slack_users:true to align by email, or pass agorUserId."
|
|
14861
|
+
});
|
|
14862
|
+
}
|
|
14855
14863
|
});
|
|
14856
14864
|
var slackThreadHistorySchema = external_exports.strictObject({
|
|
14857
14865
|
sessionId: mcpOptionalId(
|
|
@@ -14915,6 +14923,23 @@ var gatewayChannelUpdateSchema = external_exports.strictObject({
|
|
|
14915
14923
|
),
|
|
14916
14924
|
agenticConfig: agenticConfigSchema.nullable().optional().describe("Replace agent/session defaults. null clears the gateway agentic config.")
|
|
14917
14925
|
});
|
|
14926
|
+
var slackManifestGenerateSchema = external_exports.strictObject({
|
|
14927
|
+
appName: mcpRequiredString("appName", 'Slack app display name, e.g. "Agor".'),
|
|
14928
|
+
botDisplayName: mcpOptionalNonEmptyString(
|
|
14929
|
+
"botDisplayName",
|
|
14930
|
+
"Bot user display name. Defaults to appName."
|
|
14931
|
+
),
|
|
14932
|
+
publicChannels: external_exports.boolean().default(false).describe("Listen in public channels (#channel) via @mention."),
|
|
14933
|
+
privateChannels: external_exports.boolean().default(false).describe("Listen in private channels (groups) via @mention."),
|
|
14934
|
+
groupDms: external_exports.boolean().default(false).describe("Listen in group DMs (multi-person IMs) via @mention."),
|
|
14935
|
+
alignUsers: external_exports.boolean().default(true).describe(
|
|
14936
|
+
"Resolve Slack user email \u2192 Agor user (adds the users:read.email scope). Defaults to true: each Slack user runs as their matched Agor account and unmatched users are rejected, so no fixed run-as user is needed. Set false to run every message as one fixed Agor user (then pass agorUserId to agor_gateway_channels_create)."
|
|
14937
|
+
),
|
|
14938
|
+
outbound: external_exports.boolean().default(false).describe("Proactive outbound: post to channels by name and DM users by email."),
|
|
14939
|
+
restrictToChannelIds: external_exports.array(external_exports.string().min(1)).optional().describe(
|
|
14940
|
+
"Slack channel ID whitelist. Maps to config.allowed_channel_ids when you call agor_gateway_channels_create; it does NOT change the manifest scopes or events."
|
|
14941
|
+
)
|
|
14942
|
+
});
|
|
14918
14943
|
|
|
14919
14944
|
// src/mcp/tools/knowledge.ts
|
|
14920
14945
|
import { createHash, randomUUID } from "crypto";
|
|
@@ -15450,7 +15475,7 @@ var modelConfigInputSchema = external_exports.union([
|
|
|
15450
15475
|
);
|
|
15451
15476
|
|
|
15452
15477
|
// src/mcp/tools/widgets.ts
|
|
15453
|
-
import { MessageRole as MessageRole2 } from "@agor/core/types";
|
|
15478
|
+
import { getRequiredSecretFields as getRequiredSecretFields2, hasMinimumRole as hasMinimumRole5, MessageRole as MessageRole2, ROLES as ROLES5 } from "@agor/core/types";
|
|
15454
15479
|
|
|
15455
15480
|
// src/utils/append-system-message.ts
|
|
15456
15481
|
import { generateId as generateId2, SessionRepository as SessionRepository3 } from "@agor/core/db";
|
|
@@ -15533,6 +15558,30 @@ var envVarsSubmitSchema = external_exports.object({
|
|
|
15533
15558
|
}
|
|
15534
15559
|
});
|
|
15535
15560
|
|
|
15561
|
+
// src/widgets/gateway-token/index.ts
|
|
15562
|
+
import { Forbidden as Forbidden2 } from "@agor/core/feathers";
|
|
15563
|
+
import {
|
|
15564
|
+
GATEWAY_SENSITIVE_CONFIG_FIELDS as GATEWAY_SENSITIVE_CONFIG_FIELDS2,
|
|
15565
|
+
hasMinimumRole as hasMinimumRole4,
|
|
15566
|
+
ROLES as ROLES4
|
|
15567
|
+
} from "@agor/core/types";
|
|
15568
|
+
var MAX_TOKEN_LENGTH = 8192;
|
|
15569
|
+
var gatewayTokenParamsSchema = external_exports.object({
|
|
15570
|
+
gatewayChannelId: external_exports.string().min(1).describe("Gateway channel whose credentials are being set."),
|
|
15571
|
+
channelType: external_exports.enum(["slack", "discord", "whatsapp", "telegram", "github", "teams"]).describe("Platform type of the channel; drives per-field placeholders."),
|
|
15572
|
+
channelName: external_exports.string().min(1).max(200).describe("Human-readable channel name for the form heading and prompts."),
|
|
15573
|
+
fields: external_exports.array(external_exports.enum(GATEWAY_SENSITIVE_CONFIG_FIELDS2)).min(1).max(GATEWAY_SENSITIVE_CONFIG_FIELDS2.length).refine((fields) => new Set(fields).size === fields.length, {
|
|
15574
|
+
message: "Token field names must be unique"
|
|
15575
|
+
}).describe("Secret config field names to collect (subset of the sensitive fields)."),
|
|
15576
|
+
reason: external_exports.string().min(1).max(200).describe("One sentence explaining why the tokens are needed. Renders as a muted line.")
|
|
15577
|
+
}).strict();
|
|
15578
|
+
var gatewayTokenSubmitSchema = external_exports.object({
|
|
15579
|
+
tokens: external_exports.partialRecord(
|
|
15580
|
+
external_exports.enum(GATEWAY_SENSITIVE_CONFIG_FIELDS2),
|
|
15581
|
+
external_exports.string().min(1).max(MAX_TOKEN_LENGTH)
|
|
15582
|
+
).describe("Map of sensitive field name \u2192 credential value.")
|
|
15583
|
+
}).strict();
|
|
15584
|
+
|
|
15536
15585
|
// src/mcp/server.ts
|
|
15537
15586
|
var DEBUG_MCP_REQUESTS = process.env.AGOR_DEBUG_MCP_REQUESTS === "1" || process.env.DEBUG?.includes("mcp-requests");
|
|
15538
15587
|
function textResult(data) {
|
|
@@ -15745,7 +15794,7 @@ function registerUserTools(server, ctx) {
|
|
|
15745
15794
|
email: mcpOptionalString("email", "New email address (optional)"),
|
|
15746
15795
|
name: mcpOptionalString("name", "New display name (optional)"),
|
|
15747
15796
|
password: mcpOptionalString("password", "New password (optional, will be hashed)"),
|
|
15748
|
-
role: external_exports.enum([
|
|
15797
|
+
role: external_exports.enum([ROLES6.SUPERADMIN, ROLES6.ADMIN, ROLES6.MEMBER, ROLES6.VIEWER]).optional().describe(
|
|
15749
15798
|
"New user role (optional). superadmin=full system access + branch RBAC bypass, admin=manage resources, member=standard user, viewer=read-only"
|
|
15750
15799
|
),
|
|
15751
15800
|
unix_username: mcpOptionalString(
|
|
@@ -15798,7 +15847,7 @@ function registerUserTools(server, ctx) {
|
|
|
15798
15847
|
"Unix username for shell access (optional, defaults to email prefix if not specified)"
|
|
15799
15848
|
),
|
|
15800
15849
|
must_change_password: external_exports.boolean().optional().describe("Force user to change password on first login (optional, defaults to false)"),
|
|
15801
|
-
role: external_exports.enum([
|
|
15850
|
+
role: external_exports.enum([ROLES6.SUPERADMIN, ROLES6.ADMIN, ROLES6.MEMBER, ROLES6.VIEWER]).optional().describe(
|
|
15802
15851
|
'User role (optional, defaults to "member"). Roles: superadmin=full system access + branch RBAC bypass, admin=manage resources, member=standard user, viewer=read-only'
|
|
15803
15852
|
)
|
|
15804
15853
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/widgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/widgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAuC/C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAqR5E"}
|
|
@@ -65,75 +65,7 @@ var init_executor_read_impersonation = __esm({
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
// src/mcp/tools/widgets.ts
|
|
68
|
-
import { MessageRole as MessageRole2 } from "@agor/core/types";
|
|
69
|
-
|
|
70
|
-
// src/utils/append-system-message.ts
|
|
71
|
-
import { generateId, SessionRepository } from "@agor/core/db";
|
|
72
|
-
import { MessageRole } from "@agor/core/types";
|
|
73
|
-
async function appendSystemMessage(opts) {
|
|
74
|
-
const {
|
|
75
|
-
app,
|
|
76
|
-
db,
|
|
77
|
-
sessionId,
|
|
78
|
-
taskId,
|
|
79
|
-
content,
|
|
80
|
-
contentPreview,
|
|
81
|
-
type = "system",
|
|
82
|
-
role = MessageRole.SYSTEM,
|
|
83
|
-
metadata,
|
|
84
|
-
params
|
|
85
|
-
} = opts;
|
|
86
|
-
const index = await new SessionRepository(db).countMessages(sessionId);
|
|
87
|
-
const preview = contentPreview ?? (typeof content === "string" ? content.substring(0, 200) : "");
|
|
88
|
-
const message = {
|
|
89
|
-
message_id: generateId(),
|
|
90
|
-
session_id: sessionId,
|
|
91
|
-
task_id: taskId,
|
|
92
|
-
type,
|
|
93
|
-
role,
|
|
94
|
-
index,
|
|
95
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
96
|
-
content_preview: preview,
|
|
97
|
-
content,
|
|
98
|
-
...metadata ? { metadata } : {}
|
|
99
|
-
};
|
|
100
|
-
const created = await app.service("messages").create(message, params ?? {});
|
|
101
|
-
return created;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// src/utils/session-tasks.ts
|
|
105
|
-
import { EXECUTING_TASK_STATUSES, isTaskExecuting } from "@agor/core/types";
|
|
106
|
-
function recencyKey(t) {
|
|
107
|
-
return new Date(t.started_at || t.created_at).getTime();
|
|
108
|
-
}
|
|
109
|
-
async function findTasksForSession(app, sessionId, params) {
|
|
110
|
-
const result = await app.service("tasks").find({
|
|
111
|
-
...params ?? {},
|
|
112
|
-
// Merge defensively: spread params first, then force session_id so a
|
|
113
|
-
// caller-supplied params.query can never silently overwrite the filter.
|
|
114
|
-
query: {
|
|
115
|
-
...params?.query,
|
|
116
|
-
session_id: sessionId,
|
|
117
|
-
$limit: params?.query?.$limit ?? 1e3
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const tasks = Array.isArray(result) ? result : result.data;
|
|
121
|
-
return [...tasks].sort((a, b) => recencyKey(b) - recencyKey(a));
|
|
122
|
-
}
|
|
123
|
-
async function findHostTaskForSession(app, sessionId, params) {
|
|
124
|
-
const all = await findTasksForSession(app, sessionId, params);
|
|
125
|
-
if (all.length === 0) return void 0;
|
|
126
|
-
return all.find((t) => isTaskExecuting(t)) ?? all[0];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// src/widgets/env-vars/index.ts
|
|
130
|
-
import {
|
|
131
|
-
ENV_VAR_CONSTRAINTS,
|
|
132
|
-
isEnvVarAllowed,
|
|
133
|
-
validateEnvVar
|
|
134
|
-
} from "@agor/core/config";
|
|
135
|
-
import { SessionEnvSelectionRepository } from "@agor/core/db";
|
|
136
|
-
import { BadRequest } from "@agor/core/feathers";
|
|
68
|
+
import { getRequiredSecretFields as getRequiredSecretFields2, hasMinimumRole as hasMinimumRole5, MessageRole as MessageRole2, ROLES as ROLES6 } from "@agor/core/types";
|
|
137
69
|
|
|
138
70
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
139
71
|
var external_exports = {};
|
|
@@ -14649,7 +14581,73 @@ function date4(params) {
|
|
|
14649
14581
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
14650
14582
|
config(en_default());
|
|
14651
14583
|
|
|
14584
|
+
// src/utils/append-system-message.ts
|
|
14585
|
+
import { generateId, SessionRepository } from "@agor/core/db";
|
|
14586
|
+
import { MessageRole } from "@agor/core/types";
|
|
14587
|
+
async function appendSystemMessage(opts) {
|
|
14588
|
+
const {
|
|
14589
|
+
app,
|
|
14590
|
+
db,
|
|
14591
|
+
sessionId,
|
|
14592
|
+
taskId,
|
|
14593
|
+
content,
|
|
14594
|
+
contentPreview,
|
|
14595
|
+
type = "system",
|
|
14596
|
+
role = MessageRole.SYSTEM,
|
|
14597
|
+
metadata,
|
|
14598
|
+
params
|
|
14599
|
+
} = opts;
|
|
14600
|
+
const index = await new SessionRepository(db).countMessages(sessionId);
|
|
14601
|
+
const preview = contentPreview ?? (typeof content === "string" ? content.substring(0, 200) : "");
|
|
14602
|
+
const message = {
|
|
14603
|
+
message_id: generateId(),
|
|
14604
|
+
session_id: sessionId,
|
|
14605
|
+
task_id: taskId,
|
|
14606
|
+
type,
|
|
14607
|
+
role,
|
|
14608
|
+
index,
|
|
14609
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
14610
|
+
content_preview: preview,
|
|
14611
|
+
content,
|
|
14612
|
+
...metadata ? { metadata } : {}
|
|
14613
|
+
};
|
|
14614
|
+
const created = await app.service("messages").create(message, params ?? {});
|
|
14615
|
+
return created;
|
|
14616
|
+
}
|
|
14617
|
+
|
|
14618
|
+
// src/utils/session-tasks.ts
|
|
14619
|
+
import { EXECUTING_TASK_STATUSES, isTaskExecuting } from "@agor/core/types";
|
|
14620
|
+
function recencyKey(t) {
|
|
14621
|
+
return new Date(t.started_at || t.created_at).getTime();
|
|
14622
|
+
}
|
|
14623
|
+
async function findTasksForSession(app, sessionId, params) {
|
|
14624
|
+
const result = await app.service("tasks").find({
|
|
14625
|
+
...params ?? {},
|
|
14626
|
+
// Merge defensively: spread params first, then force session_id so a
|
|
14627
|
+
// caller-supplied params.query can never silently overwrite the filter.
|
|
14628
|
+
query: {
|
|
14629
|
+
...params?.query,
|
|
14630
|
+
session_id: sessionId,
|
|
14631
|
+
$limit: params?.query?.$limit ?? 1e3
|
|
14632
|
+
}
|
|
14633
|
+
});
|
|
14634
|
+
const tasks = Array.isArray(result) ? result : result.data;
|
|
14635
|
+
return [...tasks].sort((a, b) => recencyKey(b) - recencyKey(a));
|
|
14636
|
+
}
|
|
14637
|
+
async function findHostTaskForSession(app, sessionId, params) {
|
|
14638
|
+
const all = await findTasksForSession(app, sessionId, params);
|
|
14639
|
+
if (all.length === 0) return void 0;
|
|
14640
|
+
return all.find((t) => isTaskExecuting(t)) ?? all[0];
|
|
14641
|
+
}
|
|
14642
|
+
|
|
14652
14643
|
// src/widgets/env-vars/index.ts
|
|
14644
|
+
import {
|
|
14645
|
+
ENV_VAR_CONSTRAINTS,
|
|
14646
|
+
isEnvVarAllowed,
|
|
14647
|
+
validateEnvVar
|
|
14648
|
+
} from "@agor/core/config";
|
|
14649
|
+
import { SessionEnvSelectionRepository } from "@agor/core/db";
|
|
14650
|
+
import { BadRequest } from "@agor/core/feathers";
|
|
14653
14651
|
var ENV_VAR_NAME_REGEX = ENV_VAR_CONSTRAINTS.NAME_PATTERN;
|
|
14654
14652
|
function orderedEnvVarNames(names) {
|
|
14655
14653
|
return [...names].sort();
|
|
@@ -14734,6 +14732,38 @@ var envVarsSubmitSchema = external_exports.object({
|
|
|
14734
14732
|
}
|
|
14735
14733
|
});
|
|
14736
14734
|
|
|
14735
|
+
// src/widgets/gateway-token/index.ts
|
|
14736
|
+
import { Forbidden } from "@agor/core/feathers";
|
|
14737
|
+
import {
|
|
14738
|
+
GATEWAY_SENSITIVE_CONFIG_FIELDS,
|
|
14739
|
+
hasMinimumRole,
|
|
14740
|
+
ROLES
|
|
14741
|
+
} from "@agor/core/types";
|
|
14742
|
+
var SUPPORTED_CHANNEL_TYPES = [
|
|
14743
|
+
"slack",
|
|
14744
|
+
"github",
|
|
14745
|
+
"teams"
|
|
14746
|
+
];
|
|
14747
|
+
function isSupportedGatewayTokenChannelType(channelType) {
|
|
14748
|
+
return SUPPORTED_CHANNEL_TYPES.includes(channelType);
|
|
14749
|
+
}
|
|
14750
|
+
var MAX_TOKEN_LENGTH = 8192;
|
|
14751
|
+
var gatewayTokenParamsSchema = external_exports.object({
|
|
14752
|
+
gatewayChannelId: external_exports.string().min(1).describe("Gateway channel whose credentials are being set."),
|
|
14753
|
+
channelType: external_exports.enum(["slack", "discord", "whatsapp", "telegram", "github", "teams"]).describe("Platform type of the channel; drives per-field placeholders."),
|
|
14754
|
+
channelName: external_exports.string().min(1).max(200).describe("Human-readable channel name for the form heading and prompts."),
|
|
14755
|
+
fields: external_exports.array(external_exports.enum(GATEWAY_SENSITIVE_CONFIG_FIELDS)).min(1).max(GATEWAY_SENSITIVE_CONFIG_FIELDS.length).refine((fields) => new Set(fields).size === fields.length, {
|
|
14756
|
+
message: "Token field names must be unique"
|
|
14757
|
+
}).describe("Secret config field names to collect (subset of the sensitive fields)."),
|
|
14758
|
+
reason: external_exports.string().min(1).max(200).describe("One sentence explaining why the tokens are needed. Renders as a muted line.")
|
|
14759
|
+
}).strict();
|
|
14760
|
+
var gatewayTokenSubmitSchema = external_exports.object({
|
|
14761
|
+
tokens: external_exports.partialRecord(
|
|
14762
|
+
external_exports.enum(GATEWAY_SENSITIVE_CONFIG_FIELDS),
|
|
14763
|
+
external_exports.string().min(1).max(MAX_TOKEN_LENGTH)
|
|
14764
|
+
).describe("Map of sensitive field name \u2192 credential value.")
|
|
14765
|
+
}).strict();
|
|
14766
|
+
|
|
14737
14767
|
// src/mcp/server.ts
|
|
14738
14768
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
14739
14769
|
import { shortId as shortId6, UserApiKeysRepository } from "@agor/core/db";
|
|
@@ -14835,8 +14865,8 @@ import { NotFoundError } from "@agor/core/utils/errors";
|
|
|
14835
14865
|
|
|
14836
14866
|
// src/utils/branch-authorization.ts
|
|
14837
14867
|
import { shortId as shortId2 } from "@agor/core/db";
|
|
14838
|
-
import { Forbidden, NotAuthenticated, NotFound } from "@agor/core/feathers";
|
|
14839
|
-
import { BRANCH_PERMISSION_LEVELS, hasMinimumRole, ROLES } from "@agor/core/types";
|
|
14868
|
+
import { Forbidden as Forbidden2, NotAuthenticated, NotFound } from "@agor/core/feathers";
|
|
14869
|
+
import { BRANCH_PERMISSION_LEVELS, hasMinimumRole as hasMinimumRole2, ROLES as ROLES2 } from "@agor/core/types";
|
|
14840
14870
|
var PERMISSION_RANK = Object.fromEntries(
|
|
14841
14871
|
BRANCH_PERMISSION_LEVELS.map((level, i) => [level, i - 1])
|
|
14842
14872
|
);
|
|
@@ -14903,13 +14933,17 @@ import {
|
|
|
14903
14933
|
ThreadSessionMapRepository
|
|
14904
14934
|
} from "@agor/core/db";
|
|
14905
14935
|
import {
|
|
14906
|
-
|
|
14936
|
+
buildSlackManifest,
|
|
14937
|
+
getConnector,
|
|
14938
|
+
requiredBotEvents,
|
|
14939
|
+
requiredBotScopes
|
|
14907
14940
|
} from "@agor/core/gateway";
|
|
14908
14941
|
import {
|
|
14909
14942
|
GATEWAY_REDACTED_SENTINEL,
|
|
14910
|
-
GATEWAY_SENSITIVE_CONFIG_FIELDS,
|
|
14911
|
-
|
|
14912
|
-
|
|
14943
|
+
GATEWAY_SENSITIVE_CONFIG_FIELDS as GATEWAY_SENSITIVE_CONFIG_FIELDS2,
|
|
14944
|
+
getRequiredSecretFields,
|
|
14945
|
+
hasMinimumRole as hasMinimumRole3,
|
|
14946
|
+
ROLES as ROLES3
|
|
14913
14947
|
} from "@agor/core/types";
|
|
14914
14948
|
var configSchema = external_exports.record(external_exports.string(), external_exports.unknown()).describe(
|
|
14915
14949
|
"Platform-specific gateway configuration. Secrets are stored encrypted and returned redacted. Prefer env/template references for shared credentials where the connector supports them."
|
|
@@ -14967,44 +15001,48 @@ var gatewayChannelCreateSchema = external_exports.strictObject({
|
|
|
14967
15001
|
agenticConfig: agenticConfigSchema.optional()
|
|
14968
15002
|
}).superRefine((value, issue2) => {
|
|
14969
15003
|
const config2 = value.config ?? {};
|
|
14970
|
-
if (value.
|
|
14971
|
-
|
|
14972
|
-
|
|
14973
|
-
|
|
14974
|
-
|
|
14975
|
-
|
|
14976
|
-
|
|
14977
|
-
|
|
14978
|
-
if (config2.connection_mode === "socket" && !config2.app_token) {
|
|
14979
|
-
issue2.addIssue({
|
|
14980
|
-
code: "custom",
|
|
14981
|
-
path: ["config", "app_token"],
|
|
14982
|
-
message: "config.app_token is required for Slack Socket Mode."
|
|
14983
|
-
});
|
|
14984
|
-
}
|
|
14985
|
-
}
|
|
14986
|
-
if (value.channelType === "github") {
|
|
14987
|
-
for (const field of ["app_id", "private_key", "installation_id", "watch_repos"]) {
|
|
15004
|
+
if (value.enabled !== false) {
|
|
15005
|
+
const requiredSecretMessages = {
|
|
15006
|
+
bot_token: "config.bot_token is required for Slack. Prefer a bot token stored outside the transcript when possible.",
|
|
15007
|
+
app_token: "config.app_token is required for Slack Socket Mode.",
|
|
15008
|
+
private_key: "config.private_key is required for GitHub gateway channels.",
|
|
15009
|
+
app_password: "config.app_password is required for Teams gateway channels."
|
|
15010
|
+
};
|
|
15011
|
+
for (const field of getRequiredSecretFields(value.channelType, config2)) {
|
|
14988
15012
|
if (!config2[field]) {
|
|
14989
15013
|
issue2.addIssue({
|
|
14990
15014
|
code: "custom",
|
|
14991
15015
|
path: ["config", field],
|
|
14992
|
-
message: `config.${field} is required for
|
|
15016
|
+
message: requiredSecretMessages[field] ?? `config.${field} is required for ${value.channelType} gateway channels.`
|
|
14993
15017
|
});
|
|
14994
15018
|
}
|
|
14995
15019
|
}
|
|
14996
15020
|
}
|
|
14997
|
-
if (value.channelType === "
|
|
14998
|
-
for (const field of ["app_id", "
|
|
15021
|
+
if (value.channelType === "github") {
|
|
15022
|
+
for (const field of ["app_id", "installation_id", "watch_repos"]) {
|
|
14999
15023
|
if (!config2[field]) {
|
|
15000
15024
|
issue2.addIssue({
|
|
15001
15025
|
code: "custom",
|
|
15002
15026
|
path: ["config", field],
|
|
15003
|
-
message: `config.${field} is required for
|
|
15027
|
+
message: `config.${field} is required for GitHub gateway channels.`
|
|
15004
15028
|
});
|
|
15005
15029
|
}
|
|
15006
15030
|
}
|
|
15007
15031
|
}
|
|
15032
|
+
if (value.channelType === "teams" && !config2.app_id) {
|
|
15033
|
+
issue2.addIssue({
|
|
15034
|
+
code: "custom",
|
|
15035
|
+
path: ["config", "app_id"],
|
|
15036
|
+
message: "config.app_id is required for Teams gateway channels."
|
|
15037
|
+
});
|
|
15038
|
+
}
|
|
15039
|
+
if (value.channelType === "slack" && config2.align_slack_users !== true && !value.agorUserId) {
|
|
15040
|
+
issue2.addIssue({
|
|
15041
|
+
code: "custom",
|
|
15042
|
+
path: ["agorUserId"],
|
|
15043
|
+
message: "Run-as-selected-user needs agorUserId \u2014 set config.align_slack_users:true to align by email, or pass agorUserId."
|
|
15044
|
+
});
|
|
15045
|
+
}
|
|
15008
15046
|
});
|
|
15009
15047
|
var slackThreadHistorySchema = external_exports.strictObject({
|
|
15010
15048
|
sessionId: mcpOptionalId(
|
|
@@ -15068,6 +15106,23 @@ var gatewayChannelUpdateSchema = external_exports.strictObject({
|
|
|
15068
15106
|
),
|
|
15069
15107
|
agenticConfig: agenticConfigSchema.nullable().optional().describe("Replace agent/session defaults. null clears the gateway agentic config.")
|
|
15070
15108
|
});
|
|
15109
|
+
var slackManifestGenerateSchema = external_exports.strictObject({
|
|
15110
|
+
appName: mcpRequiredString("appName", 'Slack app display name, e.g. "Agor".'),
|
|
15111
|
+
botDisplayName: mcpOptionalNonEmptyString(
|
|
15112
|
+
"botDisplayName",
|
|
15113
|
+
"Bot user display name. Defaults to appName."
|
|
15114
|
+
),
|
|
15115
|
+
publicChannels: external_exports.boolean().default(false).describe("Listen in public channels (#channel) via @mention."),
|
|
15116
|
+
privateChannels: external_exports.boolean().default(false).describe("Listen in private channels (groups) via @mention."),
|
|
15117
|
+
groupDms: external_exports.boolean().default(false).describe("Listen in group DMs (multi-person IMs) via @mention."),
|
|
15118
|
+
alignUsers: external_exports.boolean().default(true).describe(
|
|
15119
|
+
"Resolve Slack user email \u2192 Agor user (adds the users:read.email scope). Defaults to true: each Slack user runs as their matched Agor account and unmatched users are rejected, so no fixed run-as user is needed. Set false to run every message as one fixed Agor user (then pass agorUserId to agor_gateway_channels_create)."
|
|
15120
|
+
),
|
|
15121
|
+
outbound: external_exports.boolean().default(false).describe("Proactive outbound: post to channels by name and DM users by email."),
|
|
15122
|
+
restrictToChannelIds: external_exports.array(external_exports.string().min(1)).optional().describe(
|
|
15123
|
+
"Slack channel ID whitelist. Maps to config.allowed_channel_ids when you call agor_gateway_channels_create; it does NOT change the manifest scopes or events."
|
|
15124
|
+
)
|
|
15125
|
+
});
|
|
15071
15126
|
|
|
15072
15127
|
// src/mcp/tools/knowledge.ts
|
|
15073
15128
|
import { createHash, randomUUID } from "crypto";
|
|
@@ -15107,7 +15162,7 @@ import {
|
|
|
15107
15162
|
import { getAssistantConfig as getAssistantConfig2, isAssistant as isAssistant2 } from "@agor/core/types";
|
|
15108
15163
|
|
|
15109
15164
|
// src/services/knowledge-access.ts
|
|
15110
|
-
import { hasMinimumRole as
|
|
15165
|
+
import { hasMinimumRole as hasMinimumRole4, ROLES as ROLES4 } from "@agor/core/types";
|
|
15111
15166
|
|
|
15112
15167
|
// src/utils/branch-workspace-path.ts
|
|
15113
15168
|
import fs from "fs";
|
|
@@ -15603,7 +15658,7 @@ var modelConfigInputSchema = external_exports.union([
|
|
|
15603
15658
|
);
|
|
15604
15659
|
|
|
15605
15660
|
// src/mcp/tools/users.ts
|
|
15606
|
-
import { ROLES as
|
|
15661
|
+
import { ROLES as ROLES5 } from "@agor/core/types";
|
|
15607
15662
|
|
|
15608
15663
|
// src/mcp/server.ts
|
|
15609
15664
|
var DEBUG_MCP_REQUESTS = process.env.AGOR_DEBUG_MCP_REQUESTS === "1" || process.env.DEBUG?.includes("mcp-requests");
|
|
@@ -15650,6 +15705,11 @@ Continue or fork an existing session:
|
|
|
15650
15705
|
Discover tools: search domains/summaries \u2192 get details for one tool \u2192 execute`;
|
|
15651
15706
|
|
|
15652
15707
|
// src/mcp/tools/widgets.ts
|
|
15708
|
+
function requireAdmin(ctx, action) {
|
|
15709
|
+
if (!hasMinimumRole5(ctx.authenticatedUser?.role, ROLES6.ADMIN)) {
|
|
15710
|
+
throw new Error(`Access denied: admin role required to ${action}`);
|
|
15711
|
+
}
|
|
15712
|
+
}
|
|
15653
15713
|
function widgetContentPreview(params) {
|
|
15654
15714
|
const list = params.names.join(", ");
|
|
15655
15715
|
return params.names.length === 1 ? `Please provide ${list}: ${params.reason}` : `Please provide ${list}: ${params.reason}`;
|
|
@@ -15768,6 +15828,104 @@ function registerWidgetTools(server, ctx) {
|
|
|
15768
15828
|
return textResult({ widget_id: widgetId, status: "requested" });
|
|
15769
15829
|
}
|
|
15770
15830
|
);
|
|
15831
|
+
server.registerTool(
|
|
15832
|
+
"agor_widgets_request_gateway_token",
|
|
15833
|
+
{
|
|
15834
|
+
description: "Ask an admin to securely provide a gateway channel's platform tokens (Slack bot/app tokens, GitHub private key, Teams app password) via a compact form that appears at the end of your message, so setup finishes without anyone pasting xoxb-/xapp- tokens into chat. FIRE-AND-FORGET: the widget renders inline at the end of your turn; end your turn after calling. You will receive a user-role message when it is resolved. Token values never enter your context \u2014 only the channel identity and field NAMES do. Admin-only: a non-admin agent cannot mint this widget. Keep `reason` to ONE short sentence (\u2264200 chars).",
|
|
15835
|
+
annotations: { destructiveHint: false, openWorldHint: false },
|
|
15836
|
+
inputSchema: external_exports.object({
|
|
15837
|
+
gatewayChannelId: external_exports.string().min(1).describe("Gateway channel ID (UUIDv7 or short ID) whose tokens are being set."),
|
|
15838
|
+
reason: external_exports.string().max(200).optional().describe("One short sentence explaining why the tokens are needed.")
|
|
15839
|
+
})
|
|
15840
|
+
},
|
|
15841
|
+
async (args) => {
|
|
15842
|
+
if (!ctx.sessionId) return sessionContextRequiredResult();
|
|
15843
|
+
const currentSessionId = ctx.sessionId;
|
|
15844
|
+
requireAdmin(ctx, "set gateway channel tokens");
|
|
15845
|
+
const channel = await ctx.app.service("gateway-channels").get(args.gatewayChannelId, ctx.baseServiceParams);
|
|
15846
|
+
const channelType = channel.channel_type;
|
|
15847
|
+
if (!isSupportedGatewayTokenChannelType(channelType)) {
|
|
15848
|
+
throw new Error(
|
|
15849
|
+
`Gateway channel type "${channelType}" does not support token entry via this widget.`
|
|
15850
|
+
);
|
|
15851
|
+
}
|
|
15852
|
+
const fields = getRequiredSecretFields2(channelType, channel.config);
|
|
15853
|
+
if (fields.length === 0) {
|
|
15854
|
+
throw new Error(
|
|
15855
|
+
`Gateway channel "${channel.name}" has no required secret fields to collect.`
|
|
15856
|
+
);
|
|
15857
|
+
}
|
|
15858
|
+
const params = gatewayTokenParamsSchema.parse({
|
|
15859
|
+
gatewayChannelId: channel.id,
|
|
15860
|
+
channelType,
|
|
15861
|
+
channelName: channel.name,
|
|
15862
|
+
fields,
|
|
15863
|
+
reason: args.reason ?? `Provide the ${channelType} credentials to finish connecting "${channel.name}".`
|
|
15864
|
+
});
|
|
15865
|
+
const requestedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
15866
|
+
const baseWidgetMeta = {
|
|
15867
|
+
widget_type: "gateway_token",
|
|
15868
|
+
schema_version: 1,
|
|
15869
|
+
params,
|
|
15870
|
+
status: "pending",
|
|
15871
|
+
requested_at: requestedAt,
|
|
15872
|
+
auto_resume: true
|
|
15873
|
+
};
|
|
15874
|
+
const hostTask = await findHostTaskForSession(
|
|
15875
|
+
ctx.app,
|
|
15876
|
+
currentSessionId,
|
|
15877
|
+
ctx.baseServiceParams
|
|
15878
|
+
);
|
|
15879
|
+
const hostTaskId = hostTask?.task_id;
|
|
15880
|
+
const created = await appendSystemMessage({
|
|
15881
|
+
app: ctx.app,
|
|
15882
|
+
db: ctx.db,
|
|
15883
|
+
sessionId: currentSessionId,
|
|
15884
|
+
taskId: hostTaskId,
|
|
15885
|
+
content: `Please provide the ${channelType} tokens for "${channel.name}": ${params.reason}`,
|
|
15886
|
+
contentPreview: `Widget: gateway_token (${channel.name})`,
|
|
15887
|
+
type: "widget_request",
|
|
15888
|
+
role: MessageRole2.SYSTEM,
|
|
15889
|
+
metadata: {
|
|
15890
|
+
widget: {
|
|
15891
|
+
...baseWidgetMeta,
|
|
15892
|
+
widget_id: "pending"
|
|
15893
|
+
}
|
|
15894
|
+
}
|
|
15895
|
+
});
|
|
15896
|
+
const widgetId = created.message_id;
|
|
15897
|
+
if (hostTask?.message_range) {
|
|
15898
|
+
try {
|
|
15899
|
+
await ctx.app.service("tasks").patch(
|
|
15900
|
+
hostTask.task_id,
|
|
15901
|
+
{
|
|
15902
|
+
message_range: {
|
|
15903
|
+
start_index: hostTask.message_range.start_index,
|
|
15904
|
+
end_index: created.index
|
|
15905
|
+
}
|
|
15906
|
+
},
|
|
15907
|
+
ctx.baseServiceParams
|
|
15908
|
+
);
|
|
15909
|
+
} catch (err) {
|
|
15910
|
+
console.warn(
|
|
15911
|
+
`[widgets] failed to extend task.message_range for widget ${widgetId}:`,
|
|
15912
|
+
err
|
|
15913
|
+
);
|
|
15914
|
+
}
|
|
15915
|
+
}
|
|
15916
|
+
await ctx.app.service("messages").patch(
|
|
15917
|
+
widgetId,
|
|
15918
|
+
{
|
|
15919
|
+
metadata: {
|
|
15920
|
+
...created.metadata ?? {},
|
|
15921
|
+
widget: { ...baseWidgetMeta, widget_id: widgetId }
|
|
15922
|
+
}
|
|
15923
|
+
},
|
|
15924
|
+
ctx.baseServiceParams
|
|
15925
|
+
);
|
|
15926
|
+
return textResult({ widget_id: widgetId, status: "requested" });
|
|
15927
|
+
}
|
|
15928
|
+
);
|
|
15771
15929
|
}
|
|
15772
15930
|
export {
|
|
15773
15931
|
registerWidgetTools
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared OAuth authorization helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from register-services.ts and register-hooks.ts so both the
|
|
5
|
+
* tenant-scope wrapping and the forUserId authorization gate can be unit-tested
|
|
6
|
+
* without spinning up the full daemon.
|
|
7
|
+
*/
|
|
8
|
+
import type { TenantScopeAwareDatabase } from '@agor/core/db';
|
|
9
|
+
/**
|
|
10
|
+
* Runs `work` inside a tenant database scope when `tenantId` is provided.
|
|
11
|
+
* When `tenantId` is undefined the work is executed directly (no scope change).
|
|
12
|
+
*
|
|
13
|
+
* Used by the OAuth callback and oauth-complete handlers to ensure token
|
|
14
|
+
* persistence writes to the correct tenant's DB partition in multi-tenant
|
|
15
|
+
* deployments.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runInOAuthTenantScope<T>(db: TenantScopeAwareDatabase, tenantId: string | undefined, work: () => Promise<T>): Promise<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Resolves the effective user ID for per-user OAuth token injection.
|
|
20
|
+
*
|
|
21
|
+
* Service-account callers (`_isServiceAccount === true`) may request another
|
|
22
|
+
* user's token. Executor-session token holders
|
|
23
|
+
* (`authPayloadType === 'executor-session'`) may only preserve an explicit
|
|
24
|
+
* `forUserId` that matches their authenticated token subject. Arbitrary
|
|
25
|
+
* cross-user lookup stays reserved for service-account callers.
|
|
26
|
+
* All other callers — including regular authenticated members — are silently
|
|
27
|
+
* redirected to their own user ID to prevent privilege escalation.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveForUserIdWithGate(opts: {
|
|
30
|
+
queryForUserId: string | undefined;
|
|
31
|
+
isServiceAccount: boolean | undefined;
|
|
32
|
+
authPayloadType: unknown;
|
|
33
|
+
callerUserId: string | undefined;
|
|
34
|
+
}): string | undefined;
|
|
35
|
+
//# sourceMappingURL=oauth-auth-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-auth-helpers.d.ts","sourceRoot":"","sources":["../src/oauth-auth-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAG9D;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,EAAE,EAAE,wBAAwB,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,GAAG,MAAM,GAAG,SAAS,CAKrB"}
|