@hotmeshio/long-tail 0.1.4 → 0.1.5
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/README.md +1 -1
- package/build/examples/seed.js +1 -1
- package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
- package/build/examples/workflows/basic-echo/activities.js +7 -7
- package/build/examples/workflows/basic-echo/index.js +1 -1
- package/build/examples/workflows/kitchen-sink/index.js +2 -2
- package/build/index.d.ts +11 -10
- package/build/index.js +13 -12
- package/build/lib/db/index.d.ts +18 -0
- package/build/{services → lib}/db/index.js +9 -0
- package/build/{services → lib}/db/migrate.js +3 -3
- package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
- package/build/{services → lib}/telemetry/honeycomb.js +2 -2
- package/build/modules/defaults.d.ts +2 -0
- package/build/modules/defaults.js +3 -1
- package/build/routes/controlplane.js +1 -1
- package/build/routes/dba.js +4 -0
- package/build/routes/docs.d.ts +2 -0
- package/build/routes/docs.js +87 -0
- package/build/routes/escalations/bulk.js +120 -202
- package/build/routes/escalations/resolve.js +1 -1
- package/build/routes/escalations/single.js +1 -1
- package/build/routes/files.js +1 -1
- package/build/routes/index.js +2 -0
- package/build/routes/insight.js +2 -1
- package/build/routes/mcp.js +3 -2
- package/build/routes/oauth.js +1 -1
- package/build/routes/settings.js +4 -4
- package/build/routes/workflows/discovery.js +3 -3
- package/build/routes/workflows/invocation.js +1 -1
- package/build/routes/yaml-workflows/crud.js +1 -1
- package/build/routes/yaml-workflows/deployment.js +25 -0
- package/build/services/auth/bot-api-key.js +1 -1
- package/build/services/auth/index.d.ts +4 -0
- package/build/services/auth/index.js +17 -0
- package/build/services/auth/service-token.js +1 -1
- package/build/services/config/provider.js +1 -1
- package/build/services/config/read.js +1 -1
- package/build/services/config/write.js +1 -1
- package/build/services/controlplane/index.js +3 -4
- package/build/services/controlplane/quorum-bridge.js +2 -2
- package/build/services/cron/index.js +4 -5
- package/build/services/dba.d.ts +4 -0
- package/build/services/dba.js +3 -6
- package/build/services/escalation/bulk.js +1 -1
- package/build/services/escalation/crud.js +1 -1
- package/build/services/escalation/queries.js +1 -1
- package/build/services/export/client.js +2 -5
- package/build/services/export/index.js +14 -2
- package/build/services/hotmesh-utils.js +1 -1
- package/build/services/iam/bots.js +6 -12
- package/build/services/iam/context.d.ts +1 -1
- package/build/services/iam/context.js +5 -5
- package/build/services/iam/credentials.js +1 -1
- package/build/services/iam/ephemeral.js +8 -15
- package/build/services/iam/principal.js +3 -10
- package/build/services/iam/resolve.js +1 -1
- package/build/services/iam/sql.d.ts +10 -0
- package/build/services/iam/sql.js +42 -0
- package/build/services/insight/index.d.ts +1 -0
- package/build/services/insight/index.js +4 -6
- package/build/services/interceptor/activities/escalation.js +1 -1
- package/build/services/interceptor/activities/task.js +9 -6
- package/build/services/interceptor/activities/workflow.js +4 -5
- package/build/services/interceptor/activity-interceptor.d.ts +1 -1
- package/build/services/interceptor/activity-interceptor.js +5 -5
- package/build/services/interceptor/completion.js +1 -1
- package/build/services/interceptor/escalation.js +1 -1
- package/build/services/interceptor/index.js +4 -4
- package/build/services/interceptor/lifecycle.js +1 -1
- package/build/services/maintenance/index.js +4 -5
- package/build/services/mcp/adapter.js +1 -16
- package/build/services/mcp/client/connection.d.ts +1 -1
- package/build/services/mcp/client/connection.js +2 -2
- package/build/services/mcp/client/tools.js +1 -1
- package/build/services/mcp/db-server/index.js +1 -1
- package/build/services/mcp/db-server/tools.js +17 -4
- package/build/services/mcp/db.js +1 -1
- package/build/services/mcp/playwright-server/index.js +1 -1
- package/build/services/mcp/playwright-server/lifecycle.js +1 -1
- package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
- package/build/services/mcp/playwright-server/tools.js +1 -1
- package/build/services/mcp/server.js +1 -1
- package/build/services/mcp/sql.d.ts +6 -0
- package/build/services/mcp/sql.js +34 -1
- package/build/services/mcp/workflow-compiler-server.js +1 -1
- package/build/services/mcp/workflow-server.js +1 -1
- package/build/services/mcp-runs/execution-builder.js +8 -6
- package/build/services/mcp-runs/queries.js +2 -2
- package/build/services/mcp-runs/sql.d.ts +4 -1
- package/build/services/mcp-runs/sql.js +23 -2
- package/build/services/namespace/index.js +1 -1
- package/build/services/oauth/db.js +9 -37
- package/build/services/oauth/index.js +1 -1
- package/build/services/oauth/providers/registry.js +1 -1
- package/build/services/oauth/sql.d.ts +7 -0
- package/build/services/oauth/sql.js +32 -0
- package/build/services/orchestrator/index.js +3 -3
- package/build/services/role/index.js +1 -1
- package/build/services/task/crud.js +1 -1
- package/build/services/task/process.js +1 -1
- package/build/services/task/resolve.js +1 -1
- package/build/services/user/auth.js +1 -1
- package/build/services/user/crud.js +1 -1
- package/build/services/user/rbac.js +1 -1
- package/build/services/user/roles.js +1 -1
- package/build/services/user/sql.d.ts +2 -0
- package/build/services/user/sql.js +3 -1
- package/build/services/yaml-workflow/db-utils.js +1 -1
- package/build/services/yaml-workflow/db.js +1 -1
- package/build/services/yaml-workflow/deployer-helpers.js +1 -1
- package/build/services/yaml-workflow/deployer.js +4 -4
- package/build/services/yaml-workflow/generator.js +1 -1
- package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
- package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
- package/build/services/yaml-workflow/input-analyzer.js +16 -3
- package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
- package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
- package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
- package/build/services/yaml-workflow/pipeline/extract.js +5 -3
- package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
- package/build/services/yaml-workflow/pipeline/index.js +22 -0
- package/build/services/yaml-workflow/pipeline/validate.js +2 -2
- package/build/services/yaml-workflow/workers/callbacks.js +1 -1
- package/build/services/yaml-workflow/workers/events.js +2 -2
- package/build/services/yaml-workflow/workers/register.js +8 -8
- package/build/start/adapters.js +7 -7
- package/build/start/index.js +4 -4
- package/build/start/server.js +1 -1
- package/build/start/workers.d.ts +1 -2
- package/build/start/workers.js +8 -7
- package/build/system/activities/claude-code.js +1 -1
- package/build/system/activities/file-storage.js +1 -1
- package/build/system/activities/knowledge.d.ts +58 -0
- package/build/system/activities/knowledge.js +128 -0
- package/build/system/activities/sql.d.ts +9 -0
- package/build/system/activities/sql.js +41 -0
- package/build/system/activities/triage/context.js +1 -1
- package/build/system/activities/triage/discovery.d.ts +2 -14
- package/build/system/activities/triage/discovery.js +5 -161
- package/build/system/activities/triage/llm.d.ts +1 -8
- package/build/system/activities/triage/llm.js +2 -28
- package/build/system/activities/triage/tools.d.ts +1 -17
- package/build/system/activities/triage/tools.js +8 -167
- package/build/system/index.js +5 -4
- package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
- package/build/system/mcp-servers/admin/escalations.js +149 -0
- package/build/system/mcp-servers/admin/index.d.ts +31 -0
- package/build/system/mcp-servers/admin/index.js +80 -0
- package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
- package/build/system/mcp-servers/admin/maintenance.js +58 -0
- package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
- package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
- package/build/system/mcp-servers/admin/schemas.js +177 -0
- package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
- package/build/system/mcp-servers/admin/tasks.js +112 -0
- package/build/system/mcp-servers/admin/users.d.ts +5 -0
- package/build/system/mcp-servers/admin/users.js +167 -0
- package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
- package/build/system/mcp-servers/admin/workflow-config.js +118 -0
- package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
- package/build/system/mcp-servers/admin/workflows.js +138 -0
- package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
- package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
- package/build/system/mcp-servers/claude-code.js +1 -1
- package/build/system/mcp-servers/db-query/index.js +1 -1
- package/build/system/mcp-servers/db-query/tools.js +17 -4
- package/build/system/mcp-servers/docs.d.ts +5 -0
- package/build/system/mcp-servers/docs.js +147 -0
- package/build/system/mcp-servers/file-storage.js +1 -1
- package/build/system/mcp-servers/http-fetch.js +1 -1
- package/build/system/mcp-servers/human-queue.js +1 -1
- package/build/system/mcp-servers/knowledge.d.ts +4 -0
- package/build/system/mcp-servers/knowledge.js +137 -0
- package/build/system/mcp-servers/oauth.js +1 -1
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
- package/build/system/mcp-servers/playwright/index.js +1 -1
- package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
- package/build/system/mcp-servers/playwright/schemas.js +3 -0
- package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
- package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
- package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
- package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
- package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
- package/build/system/mcp-servers/playwright-cli/index.js +1 -1
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
- package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
- package/build/system/mcp-servers/translation.d.ts +14 -0
- package/build/system/mcp-servers/translation.js +130 -0
- package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
- package/build/system/mcp-servers/vision-prompts.js +9 -0
- package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
- package/build/system/mcp-servers/vision.js +221 -0
- package/build/system/mcp-servers/workflow-compiler.js +1 -1
- package/build/system/mcp-servers/workflow.js +1 -1
- package/build/system/seed/index.js +13 -2
- package/build/system/seed/server-definitions.d.ts +1954 -322
- package/build/system/seed/server-definitions.js +65 -34
- package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
- package/build/system/seed/tool-manifests-admin.js +45 -0
- package/build/system/seed/tool-manifests-browser.d.ts +1 -1
- package/build/system/seed/tool-manifests-browser.js +3 -3
- package/build/system/seed/tool-manifests-data.d.ts +62 -21
- package/build/system/seed/tool-manifests-data.js +55 -17
- package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
- package/build/system/seed/tool-manifests-knowledge.js +94 -0
- package/build/system/workflows/mcp-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
- package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
- package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
- package/build/system/workflows/mcp-query/activities/llm.js +2 -27
- package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
- package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
- package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
- package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
- package/build/system/workflows/mcp-query/index.js +55 -5
- package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
- package/build/system/workflows/mcp-query/prompts.js +5 -32
- package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
- package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
- package/build/system/workflows/mcp-query/types.d.ts +2 -10
- package/build/system/workflows/mcp-query/types.js +0 -1
- package/build/system/workflows/mcp-query-router/index.js +1 -1
- package/build/system/workflows/mcp-triage/index.d.ts +2 -2
- package/build/system/workflows/mcp-triage/index.js +39 -7
- package/build/system/workflows/mcp-triage/prompts.js +7 -14
- package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-triage-router/index.js +1 -1
- package/build/system/workflows/shared/discovery.d.ts +35 -0
- package/build/system/workflows/shared/discovery.js +175 -0
- package/build/system/workflows/shared/index.d.ts +7 -0
- package/build/system/workflows/shared/index.js +18 -0
- package/build/system/workflows/shared/llm-caller.d.ts +8 -0
- package/build/system/workflows/shared/llm-caller.js +31 -0
- package/build/system/workflows/shared/prompts.d.ts +2 -0
- package/build/system/workflows/shared/prompts.js +32 -0
- package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
- package/build/system/workflows/shared/strategy-advisors.js +109 -0
- package/build/system/workflows/shared/tool-executor.d.ts +11 -0
- package/build/system/workflows/shared/tool-executor.js +111 -0
- package/build/system/workflows/shared/tool-loader.d.ts +19 -0
- package/build/system/workflows/shared/tool-loader.js +94 -0
- package/build/system/workflows/shared/types.d.ts +9 -0
- package/build/system/workflows/shared/types.js +2 -0
- package/build/system/workflows/tool-result-guard.d.ts +14 -0
- package/build/system/workflows/tool-result-guard.js +78 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/user.d.ts +2 -0
- package/build/vitest.config.d.ts +1 -1
- package/build/vitest.integration.config.d.ts +1 -1
- package/build/workers/index.js +2 -8
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
- package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
- package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
- package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
- package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
- package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
- package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
- package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
- package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
- package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
- package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
- package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
- package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
- package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
- package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
- package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
- package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
- package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
- package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
- package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
- package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
- package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
- package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
- package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
- package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
- package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
- package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
- package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
- package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
- package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
- package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
- package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
- package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
- package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
- package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
- package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
- package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
- package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
- package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
- package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
- package/dashboard/dist/index.html +5 -5
- package/docs/api/dba.md +81 -0
- package/docs/api/escalations.md +575 -0
- package/docs/api/exports.md +170 -0
- package/docs/api/maintenance.md +93 -0
- package/docs/api/mcp-runs.md +128 -0
- package/docs/api/mcp-servers.md +195 -0
- package/docs/api/namespaces.md +48 -0
- package/docs/api/roles.md +390 -0
- package/docs/api/service-accounts.md +188 -0
- package/docs/api/settings.md +33 -0
- package/docs/api/tasks.md +167 -0
- package/docs/api/users.md +180 -0
- package/docs/api/workflows.md +616 -0
- package/docs/api/yaml-workflows.md +312 -0
- package/docs/architecture.md +221 -0
- package/docs/auth.md +181 -0
- package/docs/cloud.md +272 -0
- package/docs/compilation.md +136 -0
- package/docs/contributing.md +56 -0
- package/docs/dashboard.md +145 -0
- package/docs/data.md +478 -0
- package/docs/escalation-strategies.md +264 -0
- package/docs/events.md +251 -0
- package/docs/iam.md +222 -0
- package/docs/img/01-login.png +0 -0
- package/docs/img/02-dashboard-home.png +0 -0
- package/docs/img/03-processes-list.png +0 -0
- package/docs/img/04-escalations-list.png +0 -0
- package/docs/img/05-mcp-servers.png +0 -0
- package/docs/img/06-mcp-pipelines.png +0 -0
- package/docs/img/07-workflows-list.png +0 -0
- package/docs/img/compilation/01-query-submit.png +0 -0
- package/docs/img/compilation/02-mcp-servers.png +0 -0
- package/docs/img/compilation/03-query-completed.png +0 -0
- package/docs/img/compilation/04-wizard-original.png +0 -0
- package/docs/img/compilation/05-wizard-timeline.png +0 -0
- package/docs/img/compilation/06-wizard-profile.png +0 -0
- package/docs/img/compilation/07-wizard-deploy.png +0 -0
- package/docs/img/compilation/08-wizard-test-modal.png +0 -0
- package/docs/img/compilation/09-wizard-test-compare.png +0 -0
- package/docs/img/compilation/10-wizard-verify.png +0 -0
- package/docs/logging.md +110 -0
- package/docs/maintenance.md +221 -0
- package/docs/mcp.md +715 -0
- package/docs/oauth-and-delegation.md +469 -0
- package/docs/telemetry.md +144 -0
- package/docs/workflows.md +695 -0
- package/lib/db/schemas/015_knowledge.sql +23 -0
- package/package.json +8 -9
- package/build/services/db/index.d.ts +0 -3
- package/build/services/mcp/vision-server.d.ts +0 -15
- package/build/services/mcp/vision-server.js +0 -214
- package/build/system/mcp-servers/document-vision.js +0 -228
- package/build/system/mcp-servers/prompts.d.ts +0 -4
- package/build/system/mcp-servers/prompts.js +0 -10
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
- package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
- package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
- package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
- package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
- package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
- package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
- package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
- package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
- package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
- package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
- package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
- package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
- package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
- package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
- package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
- package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
- package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
- package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
- package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
- package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
- package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
- package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
- package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
- package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
- package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
- package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
- package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
- package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
- package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
- package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
- package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
- package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
- /package/build/{services → lib}/db/migrate.d.ts +0 -0
- /package/build/{services → lib}/events/index.d.ts +0 -0
- /package/build/{services → lib}/events/index.js +0 -0
- /package/build/{services → lib}/events/memory.d.ts +0 -0
- /package/build/{services → lib}/events/memory.js +0 -0
- /package/build/{services → lib}/events/nats.d.ts +0 -0
- /package/build/{services → lib}/events/nats.js +0 -0
- /package/build/{services → lib}/events/publish.d.ts +0 -0
- /package/build/{services → lib}/events/publish.js +0 -0
- /package/build/{services → lib}/events/socketio.d.ts +0 -0
- /package/build/{services → lib}/events/socketio.js +0 -0
- /package/build/{services → lib}/logger/index.d.ts +0 -0
- /package/build/{services → lib}/logger/index.js +0 -0
- /package/build/{services → lib}/logger/pino.d.ts +0 -0
- /package/build/{services → lib}/logger/pino.js +0 -0
- /package/build/{services → lib}/storage/index.d.ts +0 -0
- /package/build/{services → lib}/storage/index.js +0 -0
- /package/build/{services → lib}/storage/local.d.ts +0 -0
- /package/build/{services → lib}/storage/local.js +0 -0
- /package/build/{services → lib}/storage/s3.d.ts +0 -0
- /package/build/{services → lib}/storage/s3.js +0 -0
- /package/build/{services → lib}/storage/types.d.ts +0 -0
- /package/build/{services → lib}/storage/types.js +0 -0
- /package/build/{services → lib}/telemetry/index.d.ts +0 -0
- /package/build/{services → lib}/telemetry/index.js +0 -0
- /package/{services → lib}/db/README.md +0 -0
- /package/{services → lib}/db/schemas/001_schema.sql +0 -0
- /package/{services → lib}/db/schemas/002_seed.sql +0 -0
- /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
- /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
- /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
- /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
- /package/{services → lib}/db/schemas/007_security.sql +0 -0
- /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
- /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
- /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
- /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
- /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
- /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
- /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
|
@@ -39,12 +39,41 @@ const taskService = __importStar(require("../../services/task"));
|
|
|
39
39
|
const userService = __importStar(require("../../services/user"));
|
|
40
40
|
const workers_1 = require("../../workers");
|
|
41
41
|
const defaults_1 = require("../../modules/defaults");
|
|
42
|
-
const publish_1 = require("../../
|
|
42
|
+
const publish_1 = require("../../lib/events/publish");
|
|
43
|
+
// ── Shared helpers ──────────────────────────────────────────────────────────
|
|
44
|
+
function validateIds(ids) {
|
|
45
|
+
return Array.isArray(ids) && ids.length > 0;
|
|
46
|
+
}
|
|
47
|
+
async function requireBulkPermission(userId, ids, res) {
|
|
48
|
+
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
49
|
+
if (isSuperAdminUser)
|
|
50
|
+
return true;
|
|
51
|
+
const roles = await escalationService.getEscalationRoles(ids);
|
|
52
|
+
for (const role of roles) {
|
|
53
|
+
const canManage = await userService.isGroupAdmin(userId, role);
|
|
54
|
+
if (!canManage) {
|
|
55
|
+
res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
function publishBulkClaimEvents(ids, assignedTo) {
|
|
62
|
+
for (const id of ids) {
|
|
63
|
+
(0, publish_1.publishEscalationEvent)({
|
|
64
|
+
type: 'escalation.claimed',
|
|
65
|
+
source: 'api',
|
|
66
|
+
workflowId: '',
|
|
67
|
+
workflowName: '',
|
|
68
|
+
taskQueue: '',
|
|
69
|
+
escalationId: id,
|
|
70
|
+
status: 'claimed',
|
|
71
|
+
data: { assigned_to: assignedTo, bulk: true },
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ── Routes ──────────────────────────────────────────────────────────────────
|
|
43
76
|
function registerBulkRoutes(router) {
|
|
44
|
-
/**
|
|
45
|
-
* POST /api/escalations/release-expired
|
|
46
|
-
* Optional cleanup of stale assignment data.
|
|
47
|
-
*/
|
|
48
77
|
router.post('/release-expired', async (_req, res) => {
|
|
49
78
|
try {
|
|
50
79
|
const released = await escalationService.releaseExpiredClaims();
|
|
@@ -54,38 +83,15 @@ function registerBulkRoutes(router) {
|
|
|
54
83
|
res.status(500).json({ error: err.message });
|
|
55
84
|
}
|
|
56
85
|
});
|
|
57
|
-
/**
|
|
58
|
-
* PATCH /api/escalations/priority
|
|
59
|
-
* Bulk update priority for selected escalations.
|
|
60
|
-
* Body: { ids: string[], priority: 1|2|3|4 }
|
|
61
|
-
* Requires admin/superadmin permission for the escalation roles.
|
|
62
|
-
*/
|
|
63
86
|
router.patch('/priority', async (req, res) => {
|
|
64
87
|
try {
|
|
65
|
-
const userId = req.auth.userId;
|
|
66
88
|
const { ids, priority } = req.body || {};
|
|
67
|
-
if (!
|
|
68
|
-
res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (!
|
|
72
|
-
res.status(400).json({ error: 'priority must be 1, 2, 3, or 4' });
|
|
89
|
+
if (!validateIds(ids))
|
|
90
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
91
|
+
if (![1, 2, 3, 4].includes(priority))
|
|
92
|
+
return res.status(400).json({ error: 'priority must be 1, 2, 3, or 4' });
|
|
93
|
+
if (!await requireBulkPermission(req.auth.userId, ids, res))
|
|
73
94
|
return;
|
|
74
|
-
}
|
|
75
|
-
// Permission check: superadmin can update any; admin only for their roles
|
|
76
|
-
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
77
|
-
if (!isSuperAdminUser) {
|
|
78
|
-
const roles = await escalationService.getEscalationRoles(ids);
|
|
79
|
-
for (const role of roles) {
|
|
80
|
-
const canManage = await userService.isGroupAdmin(userId, role);
|
|
81
|
-
if (!canManage) {
|
|
82
|
-
res.status(403).json({
|
|
83
|
-
error: `Insufficient permissions for role "${role}"`,
|
|
84
|
-
});
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
95
|
const updated = await escalationService.updateEscalationsPriority(ids, priority);
|
|
90
96
|
res.json({ updated });
|
|
91
97
|
}
|
|
@@ -93,138 +99,62 @@ function registerBulkRoutes(router) {
|
|
|
93
99
|
res.status(500).json({ error: err.message });
|
|
94
100
|
}
|
|
95
101
|
});
|
|
96
|
-
/**
|
|
97
|
-
* POST /api/escalations/bulk-claim
|
|
98
|
-
* Bulk claim selected escalations for the authenticated user.
|
|
99
|
-
* Body: { ids: string[], durationMinutes?: number }
|
|
100
|
-
*/
|
|
101
102
|
router.post('/bulk-claim', async (req, res) => {
|
|
102
103
|
try {
|
|
103
104
|
const userId = req.auth.userId;
|
|
104
105
|
const { ids, durationMinutes } = req.body || {};
|
|
105
|
-
if (!
|
|
106
|
-
res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
106
|
+
if (!validateIds(ids))
|
|
107
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
108
|
+
if (!await requireBulkPermission(userId, ids, res))
|
|
107
109
|
return;
|
|
108
|
-
}
|
|
109
|
-
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
110
|
-
if (!isSuperAdminUser) {
|
|
111
|
-
const roles = await escalationService.getEscalationRoles(ids);
|
|
112
|
-
for (const role of roles) {
|
|
113
|
-
const canManage = await userService.isGroupAdmin(userId, role);
|
|
114
|
-
if (!canManage) {
|
|
115
|
-
res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
110
|
const result = await escalationService.bulkClaimEscalations(ids, userId, durationMinutes ?? 30);
|
|
121
111
|
res.json(result);
|
|
122
|
-
if (result.claimed > 0)
|
|
123
|
-
|
|
124
|
-
(0, publish_1.publishEscalationEvent)({
|
|
125
|
-
type: 'escalation.claimed',
|
|
126
|
-
source: 'api',
|
|
127
|
-
workflowId: '',
|
|
128
|
-
workflowName: '',
|
|
129
|
-
taskQueue: '',
|
|
130
|
-
escalationId: id,
|
|
131
|
-
status: 'claimed',
|
|
132
|
-
data: { assigned_to: userId, bulk: true },
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
112
|
+
if (result.claimed > 0)
|
|
113
|
+
publishBulkClaimEvents(ids, userId);
|
|
136
114
|
}
|
|
137
115
|
catch (err) {
|
|
138
116
|
res.status(500).json({ error: err.message });
|
|
139
117
|
}
|
|
140
118
|
});
|
|
141
|
-
/**
|
|
142
|
-
* POST /api/escalations/bulk-assign
|
|
143
|
-
* Bulk assign selected escalations to a specific user.
|
|
144
|
-
* Body: { ids: string[], targetUserId: string, durationMinutes?: number }
|
|
145
|
-
* Superadmin: can assign anyone. Admin: target must hold escalation role.
|
|
146
|
-
*/
|
|
147
119
|
router.post('/bulk-assign', async (req, res) => {
|
|
148
120
|
try {
|
|
149
121
|
const userId = req.auth.userId;
|
|
150
122
|
const { ids, targetUserId, durationMinutes } = req.body || {};
|
|
151
|
-
if (!
|
|
152
|
-
res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
123
|
+
if (!validateIds(ids))
|
|
124
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
125
|
+
if (!targetUserId || typeof targetUserId !== 'string')
|
|
126
|
+
return res.status(400).json({ error: 'targetUserId is required' });
|
|
127
|
+
if (!await requireBulkPermission(userId, ids, res))
|
|
153
128
|
return;
|
|
154
|
-
|
|
155
|
-
if (!targetUserId || typeof targetUserId !== 'string') {
|
|
156
|
-
res.status(400).json({ error: 'targetUserId is required' });
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
129
|
+
// Non-superadmin: target user must hold each escalation's role
|
|
159
130
|
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
160
|
-
const roles = await escalationService.getEscalationRoles(ids);
|
|
161
131
|
if (!isSuperAdminUser) {
|
|
162
|
-
|
|
163
|
-
for (const role of roles) {
|
|
164
|
-
const canManage = await userService.isGroupAdmin(userId, role);
|
|
165
|
-
if (!canManage) {
|
|
166
|
-
res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Target user must hold each escalation's role
|
|
132
|
+
const roles = await escalationService.getEscalationRoles(ids);
|
|
171
133
|
for (const role of roles) {
|
|
172
134
|
const targetHasRole = await userService.hasRole(targetUserId, role);
|
|
173
135
|
if (!targetHasRole) {
|
|
174
|
-
res.status(400).json({ error: `Target user does not hold the "${role}" role` });
|
|
175
|
-
return;
|
|
136
|
+
return res.status(400).json({ error: `Target user does not hold the "${role}" role` });
|
|
176
137
|
}
|
|
177
138
|
}
|
|
178
139
|
}
|
|
179
140
|
const result = await escalationService.bulkAssignEscalations(ids, targetUserId, durationMinutes ?? 30);
|
|
180
141
|
res.json(result);
|
|
181
|
-
if (result.assigned > 0)
|
|
182
|
-
|
|
183
|
-
(0, publish_1.publishEscalationEvent)({
|
|
184
|
-
type: 'escalation.claimed',
|
|
185
|
-
source: 'api',
|
|
186
|
-
workflowId: '',
|
|
187
|
-
workflowName: '',
|
|
188
|
-
taskQueue: '',
|
|
189
|
-
escalationId: id,
|
|
190
|
-
status: 'claimed',
|
|
191
|
-
data: { assigned_to: targetUserId, bulk: true },
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
142
|
+
if (result.assigned > 0)
|
|
143
|
+
publishBulkClaimEvents(ids, targetUserId);
|
|
195
144
|
}
|
|
196
145
|
catch (err) {
|
|
197
146
|
res.status(500).json({ error: err.message });
|
|
198
147
|
}
|
|
199
148
|
});
|
|
200
|
-
/**
|
|
201
|
-
* PATCH /api/escalations/bulk-escalate
|
|
202
|
-
* Bulk reassign selected escalations to a different role.
|
|
203
|
-
* Body: { ids: string[], targetRole: string }
|
|
204
|
-
*/
|
|
205
149
|
router.patch('/bulk-escalate', async (req, res) => {
|
|
206
150
|
try {
|
|
207
|
-
const userId = req.auth.userId;
|
|
208
151
|
const { ids, targetRole } = req.body || {};
|
|
209
|
-
if (!
|
|
210
|
-
res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
152
|
+
if (!validateIds(ids))
|
|
153
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
154
|
+
if (!targetRole || typeof targetRole !== 'string')
|
|
155
|
+
return res.status(400).json({ error: 'targetRole is required' });
|
|
156
|
+
if (!await requireBulkPermission(req.auth.userId, ids, res))
|
|
211
157
|
return;
|
|
212
|
-
}
|
|
213
|
-
if (!targetRole || typeof targetRole !== 'string') {
|
|
214
|
-
res.status(400).json({ error: 'targetRole is required' });
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
218
|
-
if (!isSuperAdminUser) {
|
|
219
|
-
const roles = await escalationService.getEscalationRoles(ids);
|
|
220
|
-
for (const role of roles) {
|
|
221
|
-
const canManage = await userService.isGroupAdmin(userId, role);
|
|
222
|
-
if (!canManage) {
|
|
223
|
-
res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
158
|
const updated = await escalationService.bulkEscalateToRole(ids, targetRole);
|
|
229
159
|
res.json({ updated });
|
|
230
160
|
}
|
|
@@ -232,87 +162,18 @@ function registerBulkRoutes(router) {
|
|
|
232
162
|
res.status(500).json({ error: err.message });
|
|
233
163
|
}
|
|
234
164
|
});
|
|
235
|
-
/**
|
|
236
|
-
* POST /api/escalations/bulk-triage
|
|
237
|
-
* Bulk resolve selected escalations and start AI triage workflows.
|
|
238
|
-
* Body: { ids: string[], hint?: string }
|
|
239
|
-
*/
|
|
240
165
|
router.post('/bulk-triage', async (req, res) => {
|
|
241
166
|
try {
|
|
242
|
-
const userId = req.auth.userId;
|
|
243
167
|
const { ids, hint } = req.body || {};
|
|
244
|
-
if (!
|
|
245
|
-
res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
168
|
+
if (!validateIds(ids))
|
|
169
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
170
|
+
if (!await requireBulkPermission(req.auth.userId, ids, res))
|
|
246
171
|
return;
|
|
247
|
-
}
|
|
248
|
-
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
249
|
-
if (!isSuperAdminUser) {
|
|
250
|
-
const roles = await escalationService.getEscalationRoles(ids);
|
|
251
|
-
for (const role of roles) {
|
|
252
|
-
const canManage = await userService.isGroupAdmin(userId, role);
|
|
253
|
-
if (!canManage) {
|
|
254
|
-
res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
172
|
const resolved = await escalationService.bulkResolveForTriage(ids, hint);
|
|
260
173
|
const client = (0, workers_1.createClient)();
|
|
261
174
|
const workflowIds = [];
|
|
262
175
|
for (const escalation of resolved) {
|
|
263
|
-
|
|
264
|
-
if (escalation.escalation_payload) {
|
|
265
|
-
try {
|
|
266
|
-
escalationPayload = JSON.parse(escalation.escalation_payload);
|
|
267
|
-
}
|
|
268
|
-
catch { }
|
|
269
|
-
}
|
|
270
|
-
let envelope = {};
|
|
271
|
-
if (escalation.envelope) {
|
|
272
|
-
try {
|
|
273
|
-
envelope = JSON.parse(escalation.envelope);
|
|
274
|
-
}
|
|
275
|
-
catch { }
|
|
276
|
-
}
|
|
277
|
-
const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
|
|
278
|
-
const triageEnvelope = {
|
|
279
|
-
data: {
|
|
280
|
-
escalationId: escalation.id,
|
|
281
|
-
originId: escalation.origin_id ?? undefined,
|
|
282
|
-
originalWorkflowType: escalation.workflow_type,
|
|
283
|
-
originalTaskQueue: escalation.task_queue,
|
|
284
|
-
originalTaskId: escalation.task_id,
|
|
285
|
-
escalationPayload,
|
|
286
|
-
resolverPayload: {
|
|
287
|
-
_lt: { needsTriage: true, ...(hint ? { hint } : {}) },
|
|
288
|
-
},
|
|
289
|
-
},
|
|
290
|
-
metadata: envelope.metadata || {},
|
|
291
|
-
lt: { ...(envelope.lt || {}), userId: req.auth?.userId },
|
|
292
|
-
};
|
|
293
|
-
const routing = escalation.task_id
|
|
294
|
-
? (await taskService.getTask(escalation.task_id))?.metadata
|
|
295
|
-
: null;
|
|
296
|
-
await taskService.createTask({
|
|
297
|
-
workflow_id: triageWorkflowId,
|
|
298
|
-
workflow_type: 'mcpTriage',
|
|
299
|
-
lt_type: 'mcpTriage',
|
|
300
|
-
task_queue: 'long-tail-system',
|
|
301
|
-
signal_id: `lt-triage-${triageWorkflowId}`,
|
|
302
|
-
parent_workflow_id: routing?.parentWorkflowId || triageWorkflowId,
|
|
303
|
-
origin_id: escalation.origin_id || triageWorkflowId,
|
|
304
|
-
parent_id: escalation.parent_id ?? undefined,
|
|
305
|
-
envelope: JSON.stringify(triageEnvelope),
|
|
306
|
-
metadata: routing || undefined,
|
|
307
|
-
});
|
|
308
|
-
await client.workflow.start({
|
|
309
|
-
workflowName: 'mcpTriage',
|
|
310
|
-
args: [triageEnvelope],
|
|
311
|
-
taskQueue: 'long-tail-system',
|
|
312
|
-
workflowId: triageWorkflowId,
|
|
313
|
-
expire: defaults_1.JOB_EXPIRE_SECS,
|
|
314
|
-
entity: 'mcpTriage',
|
|
315
|
-
});
|
|
176
|
+
const triageWorkflowId = await startTriageWorkflow(escalation, hint, req.auth?.userId, client);
|
|
316
177
|
workflowIds.push(triageWorkflowId);
|
|
317
178
|
}
|
|
318
179
|
res.json({ triaged: resolved.length, workflows: workflowIds });
|
|
@@ -322,3 +183,60 @@ function registerBulkRoutes(router) {
|
|
|
322
183
|
}
|
|
323
184
|
});
|
|
324
185
|
}
|
|
186
|
+
// ── Triage workflow launcher ────────────────────────────────────────────────
|
|
187
|
+
async function startTriageWorkflow(escalation, hint, userId, client) {
|
|
188
|
+
let escalationPayload = {};
|
|
189
|
+
if (escalation.escalation_payload) {
|
|
190
|
+
try {
|
|
191
|
+
escalationPayload = JSON.parse(escalation.escalation_payload);
|
|
192
|
+
}
|
|
193
|
+
catch { }
|
|
194
|
+
}
|
|
195
|
+
let envelope = {};
|
|
196
|
+
if (escalation.envelope) {
|
|
197
|
+
try {
|
|
198
|
+
envelope = JSON.parse(escalation.envelope);
|
|
199
|
+
}
|
|
200
|
+
catch { }
|
|
201
|
+
}
|
|
202
|
+
const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
|
|
203
|
+
const triageEnvelope = {
|
|
204
|
+
data: {
|
|
205
|
+
escalationId: escalation.id,
|
|
206
|
+
originId: escalation.origin_id ?? undefined,
|
|
207
|
+
originalWorkflowType: escalation.workflow_type,
|
|
208
|
+
originalTaskQueue: escalation.task_queue,
|
|
209
|
+
originalTaskId: escalation.task_id,
|
|
210
|
+
escalationPayload,
|
|
211
|
+
resolverPayload: {
|
|
212
|
+
_lt: { needsTriage: true, ...(hint ? { hint } : {}) },
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
metadata: envelope.metadata || {},
|
|
216
|
+
lt: { ...(envelope.lt || {}), userId },
|
|
217
|
+
};
|
|
218
|
+
const routing = escalation.task_id
|
|
219
|
+
? (await taskService.getTask(escalation.task_id))?.metadata
|
|
220
|
+
: null;
|
|
221
|
+
await taskService.createTask({
|
|
222
|
+
workflow_id: triageWorkflowId,
|
|
223
|
+
workflow_type: 'mcpTriage',
|
|
224
|
+
lt_type: 'mcpTriage',
|
|
225
|
+
task_queue: 'long-tail-system',
|
|
226
|
+
signal_id: `lt-triage-${triageWorkflowId}`,
|
|
227
|
+
parent_workflow_id: routing?.parentWorkflowId || triageWorkflowId,
|
|
228
|
+
origin_id: escalation.origin_id || triageWorkflowId,
|
|
229
|
+
parent_id: escalation.parent_id ?? undefined,
|
|
230
|
+
envelope: JSON.stringify(triageEnvelope),
|
|
231
|
+
metadata: routing || undefined,
|
|
232
|
+
});
|
|
233
|
+
await client.workflow.start({
|
|
234
|
+
workflowName: 'mcpTriage',
|
|
235
|
+
args: [triageEnvelope],
|
|
236
|
+
taskQueue: 'long-tail-system',
|
|
237
|
+
workflowId: triageWorkflowId,
|
|
238
|
+
expire: defaults_1.JOB_EXPIRE_SECS,
|
|
239
|
+
entity: 'mcpTriage',
|
|
240
|
+
});
|
|
241
|
+
return triageWorkflowId;
|
|
242
|
+
}
|
|
@@ -37,7 +37,7 @@ exports.registerResolveRoutes = registerResolveRoutes;
|
|
|
37
37
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
38
38
|
const taskService = __importStar(require("../../services/task"));
|
|
39
39
|
const escalation_strategy_1 = require("../../services/escalation-strategy");
|
|
40
|
-
const publish_1 = require("../../
|
|
40
|
+
const publish_1 = require("../../lib/events/publish");
|
|
41
41
|
const ephemeral_1 = require("../../services/iam/ephemeral");
|
|
42
42
|
const deployer_1 = require("../../services/yaml-workflow/deployer");
|
|
43
43
|
const workers_1 = require("../../workers");
|
|
@@ -37,7 +37,7 @@ exports.registerSingleRoutes = registerSingleRoutes;
|
|
|
37
37
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
38
38
|
const userService = __importStar(require("../../services/user"));
|
|
39
39
|
const roleService = __importStar(require("../../services/role"));
|
|
40
|
-
const publish_1 = require("../../
|
|
40
|
+
const publish_1 = require("../../lib/events/publish");
|
|
41
41
|
function registerSingleRoutes(router) {
|
|
42
42
|
/**
|
|
43
43
|
* PATCH /api/escalations/:id/escalate
|
package/build/routes/files.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = require("express");
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const storage_1 = require("../
|
|
8
|
+
const storage_1 = require("../lib/storage");
|
|
9
9
|
const router = (0, express_1.Router)();
|
|
10
10
|
const MIME_TYPES = {
|
|
11
11
|
'.png': 'image/png',
|
package/build/routes/index.js
CHANGED
|
@@ -25,6 +25,7 @@ const namespaces_1 = __importDefault(require("./namespaces"));
|
|
|
25
25
|
const files_1 = __importDefault(require("./files"));
|
|
26
26
|
const controlplane_1 = __importDefault(require("./controlplane"));
|
|
27
27
|
const bot_accounts_1 = __importDefault(require("./bot-accounts"));
|
|
28
|
+
const docs_1 = __importDefault(require("./docs"));
|
|
28
29
|
const router = (0, express_1.Router)();
|
|
29
30
|
// Public routes (no auth required — they handle their own auth)
|
|
30
31
|
router.use('/auth', auth_2.default);
|
|
@@ -49,4 +50,5 @@ router.use('/mcp-runs', mcp_runs_1.default);
|
|
|
49
50
|
router.use('/namespaces', namespaces_1.default);
|
|
50
51
|
router.use('/controlplane', controlplane_1.default);
|
|
51
52
|
router.use('/bot-accounts', bot_accounts_1.default);
|
|
53
|
+
router.use('/docs', docs_1.default);
|
|
52
54
|
exports.default = router;
|
package/build/routes/insight.js
CHANGED
|
@@ -10,7 +10,7 @@ const router = (0, express_1.Router)();
|
|
|
10
10
|
*/
|
|
11
11
|
router.post('/mcp-query', async (req, res) => {
|
|
12
12
|
try {
|
|
13
|
-
const { prompt, tags, wait, direct } = req.body;
|
|
13
|
+
const { prompt, tags, wait, direct, context } = req.body;
|
|
14
14
|
if (!prompt || typeof prompt !== 'string') {
|
|
15
15
|
res.status(400).json({ error: 'prompt is required' });
|
|
16
16
|
return;
|
|
@@ -24,6 +24,7 @@ router.post('/mcp-query', async (req, res) => {
|
|
|
24
24
|
tags,
|
|
25
25
|
wait,
|
|
26
26
|
direct,
|
|
27
|
+
context,
|
|
27
28
|
userId: req.auth?.userId,
|
|
28
29
|
});
|
|
29
30
|
res.json(result);
|
package/build/routes/mcp.js
CHANGED
|
@@ -243,8 +243,9 @@ router.post('/servers/:id/tools/:toolName/call', async (req, res) => {
|
|
|
243
243
|
res.status(400).json({ error: 'MCP adapter not registered' });
|
|
244
244
|
return;
|
|
245
245
|
}
|
|
246
|
-
const
|
|
247
|
-
|
|
246
|
+
const executeAs = req.body.execute_as;
|
|
247
|
+
const authContext = (executeAs || req.auth?.userId)
|
|
248
|
+
? { userId: executeAs || req.auth?.userId }
|
|
248
249
|
: undefined;
|
|
249
250
|
const result = await adapter.callTool(req.params.id, req.params.toolName, req.body.arguments || {}, authContext);
|
|
250
251
|
res.json({ result });
|
package/build/routes/oauth.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.setOAuthConfig = setOAuthConfig;
|
|
4
4
|
const express_1 = require("express");
|
|
5
5
|
const auth_1 = require("../modules/auth");
|
|
6
|
-
const logger_1 = require("../
|
|
6
|
+
const logger_1 = require("../lib/logger");
|
|
7
7
|
const oauth_1 = require("../services/oauth");
|
|
8
8
|
const user_1 = require("../services/user");
|
|
9
9
|
const router = (0, express_1.Router)();
|
package/build/routes/settings.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const express_1 = require("express");
|
|
4
|
-
const telemetry_1 = require("../
|
|
5
|
-
const events_1 = require("../
|
|
6
|
-
const nats_1 = require("../
|
|
7
|
-
const socketio_1 = require("../
|
|
4
|
+
const telemetry_1 = require("../lib/telemetry");
|
|
5
|
+
const events_1 = require("../lib/events");
|
|
6
|
+
const nats_1 = require("../lib/events/nats");
|
|
7
|
+
const socketio_1 = require("../lib/events/socketio");
|
|
8
8
|
const defaults_1 = require("../modules/defaults");
|
|
9
9
|
const router = (0, express_1.Router)();
|
|
10
10
|
/**
|
|
@@ -36,8 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const express_1 = require("express");
|
|
37
37
|
const configService = __importStar(require("../../services/config"));
|
|
38
38
|
const cron_1 = require("../../services/cron");
|
|
39
|
-
const db_1 = require("../../
|
|
39
|
+
const db_1 = require("../../lib/db");
|
|
40
40
|
const registry_1 = require("../../services/workers/registry");
|
|
41
|
+
const sql_1 = require("../../services/mcp-runs/sql");
|
|
41
42
|
const router = (0, express_1.Router)();
|
|
42
43
|
// ── Active workers ───────────────────────────────────────────────────────────
|
|
43
44
|
/**
|
|
@@ -78,9 +79,8 @@ router.get('/discovered', async (req, res) => {
|
|
|
78
79
|
// 1. Active workers from in-memory registry
|
|
79
80
|
const activeWorkers = (0, registry_1.getRegisteredWorkers)();
|
|
80
81
|
// 2. Historical entities from durable.jobs
|
|
81
|
-
const DISTINCT_ENTITIES = `SELECT DISTINCT entity FROM durable.jobs WHERE entity IS NOT NULL AND entity != '' ORDER BY entity`;
|
|
82
82
|
const pool = (0, db_1.getPool)();
|
|
83
|
-
const { rows: entityRows } = await pool.query(
|
|
83
|
+
const { rows: entityRows } = await pool.query(sql_1.DISTINCT_ENTITIES_DURABLE);
|
|
84
84
|
const historicalEntities = new Set(entityRows.map((r) => r.entity));
|
|
85
85
|
// 3. Registered configs
|
|
86
86
|
const configs = await configService.listWorkflowConfigs();
|
|
@@ -136,7 +136,7 @@ router.post('/:workflowId/terminate', async (req, res) => {
|
|
|
136
136
|
return;
|
|
137
137
|
const client = (0, workers_1.createClient)();
|
|
138
138
|
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, req.params.workflowId);
|
|
139
|
-
await handle.
|
|
139
|
+
await handle.terminate();
|
|
140
140
|
res.json({ terminated: true, workflowId: req.params.workflowId });
|
|
141
141
|
}
|
|
142
142
|
catch (err) {
|
|
@@ -128,7 +128,7 @@ router.post('/', async (req, res) => {
|
|
|
128
128
|
}
|
|
129
129
|
catch (err) {
|
|
130
130
|
if (err.message?.includes('duplicate key') || err.code === '23505') {
|
|
131
|
-
res.status(409).json({ error: 'A
|
|
131
|
+
res.status(409).json({ error: 'A tool with that name already exists' });
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
134
|
res.status(500).json({ error: err.message });
|
|
@@ -134,6 +134,31 @@ router.post('/:id/invoke', async (req, res) => {
|
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
136
|
const data = req.body.data || {};
|
|
137
|
+
// Inject _scope so compiled workflow activities have identity context
|
|
138
|
+
const executeAs = req.body.execute_as;
|
|
139
|
+
const userId = req.auth?.userId;
|
|
140
|
+
if (!data._scope) {
|
|
141
|
+
const { resolvePrincipal } = await Promise.resolve().then(() => __importStar(require('../../services/iam/principal')));
|
|
142
|
+
if (executeAs) {
|
|
143
|
+
const [botPrincipal, invokerPrincipal] = await Promise.all([
|
|
144
|
+
resolvePrincipal(executeAs),
|
|
145
|
+
userId ? resolvePrincipal(userId) : Promise.resolve(null),
|
|
146
|
+
]);
|
|
147
|
+
if (botPrincipal) {
|
|
148
|
+
data._scope = {
|
|
149
|
+
principal: botPrincipal,
|
|
150
|
+
scopes: ['mcp:tool:call'],
|
|
151
|
+
...(invokerPrincipal ? { initiatedBy: userId, initiatingPrincipal: invokerPrincipal } : {}),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (userId) {
|
|
156
|
+
const principal = await resolvePrincipal(userId);
|
|
157
|
+
if (principal) {
|
|
158
|
+
data._scope = { principal, scopes: ['mcp:tool:call'] };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
137
162
|
if (req.body.sync) {
|
|
138
163
|
const { job_id, result } = await yamlDeployer.invokeYamlWorkflowSync(wf.app_id, wf.graph_topic, data, req.body.timeout, wf.graph_topic);
|
|
139
164
|
res.json({ job_id, result });
|
|
@@ -42,7 +42,7 @@ exports.revokeBotApiKey = revokeBotApiKey;
|
|
|
42
42
|
exports.listBotApiKeys = listBotApiKeys;
|
|
43
43
|
const crypto = __importStar(require("crypto"));
|
|
44
44
|
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
45
|
-
const db_1 = require("
|
|
45
|
+
const db_1 = require("../../lib/db");
|
|
46
46
|
const TOKEN_PREFIX = 'lt_bot_';
|
|
47
47
|
const INSERT_KEY = `
|
|
48
48
|
INSERT INTO lt_bot_api_keys (name, user_id, key_hash, scopes, expires_at)
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { generateBotApiKey, validateBotApiKey, revokeBotApiKey, listBotApiKeys, } from './bot-api-key';
|
|
2
|
+
export type { BotApiKeyRecord } from './bot-api-key';
|
|
3
|
+
export { createDelegationToken, validateDelegationToken, requireScope, } from './delegation';
|
|
4
|
+
export { generateServiceToken, validateServiceToken, revokeServiceToken, listServiceTokens, } from './service-token';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listServiceTokens = exports.revokeServiceToken = exports.validateServiceToken = exports.generateServiceToken = exports.requireScope = exports.validateDelegationToken = exports.createDelegationToken = exports.listBotApiKeys = exports.revokeBotApiKey = exports.validateBotApiKey = exports.generateBotApiKey = void 0;
|
|
4
|
+
var bot_api_key_1 = require("./bot-api-key");
|
|
5
|
+
Object.defineProperty(exports, "generateBotApiKey", { enumerable: true, get: function () { return bot_api_key_1.generateBotApiKey; } });
|
|
6
|
+
Object.defineProperty(exports, "validateBotApiKey", { enumerable: true, get: function () { return bot_api_key_1.validateBotApiKey; } });
|
|
7
|
+
Object.defineProperty(exports, "revokeBotApiKey", { enumerable: true, get: function () { return bot_api_key_1.revokeBotApiKey; } });
|
|
8
|
+
Object.defineProperty(exports, "listBotApiKeys", { enumerable: true, get: function () { return bot_api_key_1.listBotApiKeys; } });
|
|
9
|
+
var delegation_1 = require("./delegation");
|
|
10
|
+
Object.defineProperty(exports, "createDelegationToken", { enumerable: true, get: function () { return delegation_1.createDelegationToken; } });
|
|
11
|
+
Object.defineProperty(exports, "validateDelegationToken", { enumerable: true, get: function () { return delegation_1.validateDelegationToken; } });
|
|
12
|
+
Object.defineProperty(exports, "requireScope", { enumerable: true, get: function () { return delegation_1.requireScope; } });
|
|
13
|
+
var service_token_1 = require("./service-token");
|
|
14
|
+
Object.defineProperty(exports, "generateServiceToken", { enumerable: true, get: function () { return service_token_1.generateServiceToken; } });
|
|
15
|
+
Object.defineProperty(exports, "validateServiceToken", { enumerable: true, get: function () { return service_token_1.validateServiceToken; } });
|
|
16
|
+
Object.defineProperty(exports, "revokeServiceToken", { enumerable: true, get: function () { return service_token_1.revokeServiceToken; } });
|
|
17
|
+
Object.defineProperty(exports, "listServiceTokens", { enumerable: true, get: function () { return service_token_1.listServiceTokens; } });
|
|
@@ -42,7 +42,7 @@ exports.revokeServiceToken = revokeServiceToken;
|
|
|
42
42
|
exports.listServiceTokens = listServiceTokens;
|
|
43
43
|
const crypto = __importStar(require("crypto"));
|
|
44
44
|
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
45
|
-
const db_1 = require("
|
|
45
|
+
const db_1 = require("../../lib/db");
|
|
46
46
|
const TOKEN_PREFIX = 'lt_svc_';
|
|
47
47
|
const INSERT_TOKEN = `
|
|
48
48
|
INSERT INTO lt_service_tokens (name, token_hash, server_id, scopes, expires_at)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getProviderData = getProviderData;
|
|
4
|
-
const db_1 = require("
|
|
4
|
+
const db_1 = require("../../lib/db");
|
|
5
5
|
const sql_1 = require("./sql");
|
|
6
6
|
async function getProviderData(consumes, originId) {
|
|
7
7
|
if (!consumes.length || !originId)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getWorkflowConfig = getWorkflowConfig;
|
|
4
4
|
exports.listWorkflowConfigs = listWorkflowConfigs;
|
|
5
|
-
const db_1 = require("
|
|
5
|
+
const db_1 = require("../../lib/db");
|
|
6
6
|
const sql_1 = require("./sql");
|
|
7
7
|
async function getWorkflowConfig(workflowType) {
|
|
8
8
|
const pool = (0, db_1.getPool)();
|