@hotmeshio/long-tail 0.1.3 → 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 +118 -173
- 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 +12 -10
- package/build/index.js +15 -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/register-tool.d.ts +11 -0
- package/build/services/mcp/register-tool.js +15 -0
- 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
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)();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.upsertWorkflowConfig = upsertWorkflowConfig;
|
|
4
4
|
exports.deleteWorkflowConfig = deleteWorkflowConfig;
|
|
5
|
-
const db_1 = require("
|
|
5
|
+
const db_1 = require("../../lib/db");
|
|
6
6
|
const read_1 = require("./read");
|
|
7
7
|
const sql_1 = require("./sql");
|
|
8
8
|
async function upsertWorkflowConfig(config) {
|
|
@@ -8,9 +8,7 @@ exports.getStreamStats = getStreamStats;
|
|
|
8
8
|
exports.subscribeMesh = subscribeMesh;
|
|
9
9
|
exports.isBridgeActive = isBridgeActive;
|
|
10
10
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
11
|
-
const
|
|
12
|
-
const config_1 = require("../../modules/config");
|
|
13
|
-
const db_1 = require("../db");
|
|
11
|
+
const db_1 = require("../../lib/db");
|
|
14
12
|
const sql_1 = require("./sql");
|
|
15
13
|
const quorum_bridge_1 = require("./quorum-bridge");
|
|
16
14
|
// ─── Engine cache ───────────────────────────────────────────────────────────
|
|
@@ -27,8 +25,9 @@ async function getEngine(appId) {
|
|
|
27
25
|
return cached;
|
|
28
26
|
const engine = await hotmesh_1.HotMesh.init({
|
|
29
27
|
appId,
|
|
28
|
+
guid: `controlplane::${appId}-${hotmesh_1.HotMesh.guid()}`,
|
|
30
29
|
engine: {
|
|
31
|
-
connection:
|
|
30
|
+
connection: (0, db_1.getConnection)(),
|
|
32
31
|
},
|
|
33
32
|
});
|
|
34
33
|
engines.set(appId, engine);
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createQuorumBridgeCallback = createQuorumBridgeCallback;
|
|
4
4
|
exports.getActiveCallback = getActiveCallback;
|
|
5
5
|
exports.startQuorumBridge = startQuorumBridge;
|
|
6
|
-
const events_1 = require("
|
|
7
|
-
const logger_1 = require("
|
|
6
|
+
const events_1 = require("../../lib/events");
|
|
7
|
+
const logger_1 = require("../../lib/logger");
|
|
8
8
|
/**
|
|
9
9
|
* Bridge HotMesh quorum messages to the NATS event system.
|
|
10
10
|
*
|
|
@@ -35,10 +35,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.cronRegistry = void 0;
|
|
37
37
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
38
|
-
const
|
|
39
|
-
const config_1 = require("../../modules/config");
|
|
38
|
+
const db_1 = require("../../lib/db");
|
|
40
39
|
const defaults_1 = require("../../modules/defaults");
|
|
41
|
-
const logger_1 = require("
|
|
40
|
+
const logger_1 = require("../../lib/logger");
|
|
42
41
|
const configService = __importStar(require("../config"));
|
|
43
42
|
const principal_1 = require("../iam/principal");
|
|
44
43
|
const CRON_TOPIC_PREFIX = 'lt.cron';
|
|
@@ -83,7 +82,7 @@ class LTCronRegistry {
|
|
|
83
82
|
async startCron(config) {
|
|
84
83
|
if (!config.cron_schedule || !config.task_queue)
|
|
85
84
|
return;
|
|
86
|
-
const connection =
|
|
85
|
+
const connection = (0, db_1.getConnection)();
|
|
87
86
|
const topic = `${CRON_TOPIC_PREFIX}.${config.workflow_type}`;
|
|
88
87
|
const cronId = `${CRON_ID_PREFIX}-${config.workflow_type}`;
|
|
89
88
|
const defaultEnvelope = config.envelope_schema
|
|
@@ -147,7 +146,7 @@ class LTCronRegistry {
|
|
|
147
146
|
const cronId = this.activeCrons.get(workflowType);
|
|
148
147
|
if (!cronId)
|
|
149
148
|
return;
|
|
150
|
-
const connection =
|
|
149
|
+
const connection = (0, db_1.getConnection)();
|
|
151
150
|
const topic = `${CRON_TOPIC_PREFIX}.${workflowType}`;
|
|
152
151
|
try {
|
|
153
152
|
await hotmesh_1.Virtual.interrupt({
|
package/build/services/dba.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export declare function prune(options: {
|
|
|
20
20
|
expire?: string;
|
|
21
21
|
jobs?: boolean;
|
|
22
22
|
streams?: boolean;
|
|
23
|
+
engineStreams?: boolean;
|
|
24
|
+
engineStreamsExpire?: string;
|
|
25
|
+
workerStreams?: boolean;
|
|
26
|
+
workerStreamsExpire?: string;
|
|
23
27
|
attributes?: boolean;
|
|
24
28
|
entities?: string[];
|
|
25
29
|
pruneTransient?: boolean;
|
package/build/services/dba.js
CHANGED
|
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.deploy = deploy;
|
|
4
4
|
exports.prune = prune;
|
|
5
5
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
6
|
-
const
|
|
7
|
-
const config_1 = require("../modules/config");
|
|
6
|
+
const db_1 = require("../lib/db");
|
|
8
7
|
const APP_ID = 'durable';
|
|
9
8
|
/**
|
|
10
9
|
* Deploy the server-side prune() Postgres function and run
|
|
@@ -12,8 +11,7 @@ const APP_ID = 'durable';
|
|
|
12
11
|
* Idempotent — safe to call on every startup.
|
|
13
12
|
*/
|
|
14
13
|
async function deploy() {
|
|
15
|
-
|
|
16
|
-
await hotmesh_1.DBA.deploy(connection, APP_ID);
|
|
14
|
+
await hotmesh_1.DBA.deploy((0, db_1.getConnection)(), APP_ID);
|
|
17
15
|
}
|
|
18
16
|
/**
|
|
19
17
|
* Prune expired jobs, streams, and/or execution artifacts.
|
|
@@ -27,6 +25,5 @@ async function deploy() {
|
|
|
27
25
|
* - `keepHmark` — preserve hmark rows during stripping
|
|
28
26
|
*/
|
|
29
27
|
async function prune(options) {
|
|
30
|
-
|
|
31
|
-
return hotmesh_1.DBA.prune({ appId: APP_ID, connection, ...options });
|
|
28
|
+
return hotmesh_1.DBA.prune({ appId: APP_ID, connection: (0, db_1.getConnection)(), ...options });
|
|
32
29
|
}
|
|
@@ -4,7 +4,7 @@ exports.bulkClaimEscalations = bulkClaimEscalations;
|
|
|
4
4
|
exports.bulkAssignEscalations = bulkAssignEscalations;
|
|
5
5
|
exports.bulkEscalateToRole = bulkEscalateToRole;
|
|
6
6
|
exports.bulkResolveForTriage = bulkResolveForTriage;
|
|
7
|
-
const db_1 = require("
|
|
7
|
+
const db_1 = require("../../lib/db");
|
|
8
8
|
const sql_1 = require("./sql");
|
|
9
9
|
/**
|
|
10
10
|
* Bulk claim escalations for a user.
|
|
@@ -14,7 +14,7 @@ exports.getEscalationsByWorkflowId = getEscalationsByWorkflowId;
|
|
|
14
14
|
exports.updateEscalationMetadata = updateEscalationMetadata;
|
|
15
15
|
exports.enrichEscalationRouting = enrichEscalationRouting;
|
|
16
16
|
exports.getEscalationsByOriginId = getEscalationsByOriginId;
|
|
17
|
-
const db_1 = require("
|
|
17
|
+
const db_1 = require("../../lib/db");
|
|
18
18
|
const sql_1 = require("./sql");
|
|
19
19
|
async function createEscalation(input) {
|
|
20
20
|
const pool = (0, db_1.getPool)();
|
|
@@ -4,7 +4,7 @@ exports.getEscalationStats = getEscalationStats;
|
|
|
4
4
|
exports.listDistinctTypes = listDistinctTypes;
|
|
5
5
|
exports.listEscalations = listEscalations;
|
|
6
6
|
exports.listAvailableEscalations = listAvailableEscalations;
|
|
7
|
-
const db_1 = require("
|
|
7
|
+
const db_1 = require("../../lib/db");
|
|
8
8
|
const types_1 = require("./types");
|
|
9
9
|
const sql_1 = require("./sql");
|
|
10
10
|
function buildOrderBy(sortBy, order, fallback = 'priority ASC, created_at ASC') {
|
|
@@ -3,12 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createClient = createClient;
|
|
4
4
|
exports.getHandle = getHandle;
|
|
5
5
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
6
|
-
const
|
|
7
|
-
const config_1 = require("../../modules/config");
|
|
6
|
+
const db_1 = require("../../lib/db");
|
|
8
7
|
function createClient() {
|
|
9
|
-
return new hotmesh_1.Durable.Client({
|
|
10
|
-
connection: { class: pg_1.Client, options: config_1.postgres_options },
|
|
11
|
-
});
|
|
8
|
+
return new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
|
|
12
9
|
}
|
|
13
10
|
async function getHandle(taskQueue, workflowName, workflowId) {
|
|
14
11
|
const client = createClient();
|
|
@@ -5,7 +5,7 @@ exports.getWorkflowStatus = getWorkflowStatus;
|
|
|
5
5
|
exports.exportWorkflowExecution = exportWorkflowExecution;
|
|
6
6
|
exports.getWorkflowState = getWorkflowState;
|
|
7
7
|
exports.listJobs = listJobs;
|
|
8
|
-
const db_1 = require("
|
|
8
|
+
const db_1 = require("../../lib/db");
|
|
9
9
|
const client_1 = require("./client");
|
|
10
10
|
const post_process_1 = require("./post-process");
|
|
11
11
|
/** Error thrown when a workflow job is not found (expired or never existed). */
|
|
@@ -140,8 +140,20 @@ async function listJobs(params) {
|
|
|
140
140
|
const where = conditions.join(' AND ');
|
|
141
141
|
const [countResult, dataResult] = await Promise.all([
|
|
142
142
|
pool.query(`SELECT COUNT(*) FROM durable.jobs j WHERE ${where}`, values),
|
|
143
|
-
pool.query(`
|
|
143
|
+
pool.query(`WITH ju_symbols AS (
|
|
144
|
+
SELECT value FROM durable.symbols
|
|
145
|
+
WHERE key LIKE 'hmsh:durable:sym:keys:%' AND field = 'metadata/ju'
|
|
146
|
+
)
|
|
147
|
+
SELECT j.key, j.entity, j.status, j.is_live, j.created_at,
|
|
148
|
+
CASE WHEN j.updated_at != j.created_at THEN j.updated_at
|
|
149
|
+
WHEN ju.value IS NOT NULL THEN to_timestamp(ju.value, 'YYYYMMDDHH24MISS.MS')
|
|
150
|
+
ELSE j.updated_at
|
|
151
|
+
END as updated_at
|
|
144
152
|
FROM durable.jobs j
|
|
153
|
+
LEFT JOIN durable.jobs_attributes ju
|
|
154
|
+
ON ju.job_id = j.id
|
|
155
|
+
AND ju.symbol IN (SELECT value FROM ju_symbols)
|
|
156
|
+
AND (ju.dimension IS NULL OR ju.dimension = '')
|
|
145
157
|
WHERE ${where}
|
|
146
158
|
ORDER BY ${buildJobOrderBy(params.sort_by, params.order)}
|
|
147
159
|
LIMIT $${idx++} OFFSET $${idx++}`, [...values, limit, offset]),
|
|
@@ -10,7 +10,7 @@ exports.loadSymbolMap = loadSymbolMap;
|
|
|
10
10
|
exports.inflateAttributes = inflateAttributes;
|
|
11
11
|
exports.restoreHierarchy = restoreHierarchy;
|
|
12
12
|
exports.extractActivities = extractActivities;
|
|
13
|
-
const db_1 = require("
|
|
13
|
+
const db_1 = require("../lib/db");
|
|
14
14
|
// ── HotMesh timestamp helpers ───────────────────────────────────────────────
|
|
15
15
|
/**
|
|
16
16
|
* Convert HotMesh's compact timestamp (YYYYMMDDHHmmss.SSS) to ISO 8601.
|
|
@@ -16,7 +16,7 @@ exports.ensureSystemBot = ensureSystemBot;
|
|
|
16
16
|
* They share the same RBAC, OAuth credentials, and delegation tokens
|
|
17
17
|
* as human users — no separate infrastructure needed.
|
|
18
18
|
*/
|
|
19
|
-
const db_1 = require("
|
|
19
|
+
const db_1 = require("../../lib/db");
|
|
20
20
|
const user_1 = require("../user");
|
|
21
21
|
const user_2 = require("../user");
|
|
22
22
|
Object.defineProperty(exports, "addBotRole", { enumerable: true, get: function () { return user_2.addUserRole; } });
|
|
@@ -25,13 +25,7 @@ Object.defineProperty(exports, "getBotRoles", { enumerable: true, get: function
|
|
|
25
25
|
const bot_api_key_1 = require("../auth/bot-api-key");
|
|
26
26
|
Object.defineProperty(exports, "listBotKeys", { enumerable: true, get: function () { return bot_api_key_1.listBotApiKeys; } });
|
|
27
27
|
Object.defineProperty(exports, "revokeBotKey", { enumerable: true, get: function () { return bot_api_key_1.revokeBotApiKey; } });
|
|
28
|
-
const
|
|
29
|
-
SELECT * FROM lt_users
|
|
30
|
-
WHERE account_type = 'bot'
|
|
31
|
-
ORDER BY created_at DESC
|
|
32
|
-
LIMIT $1 OFFSET $2`;
|
|
33
|
-
const COUNT_BOTS = `
|
|
34
|
-
SELECT COUNT(*)::int AS total FROM lt_users WHERE account_type = 'bot'`;
|
|
28
|
+
const sql_1 = require("./sql");
|
|
35
29
|
/**
|
|
36
30
|
* Create a new bot account.
|
|
37
31
|
*/
|
|
@@ -49,7 +43,7 @@ async function createBot(input) {
|
|
|
49
43
|
// Create the user row, then set account_type column
|
|
50
44
|
const user = await (0, user_1.createUser)(userInput);
|
|
51
45
|
const pool = await (0, db_1.getPool)();
|
|
52
|
-
await pool.query(
|
|
46
|
+
await pool.query(sql_1.SET_ACCOUNT_TYPE_BOT, ['bot', user.id]);
|
|
53
47
|
return toBotRecord(user, input.description, input.created_by);
|
|
54
48
|
}
|
|
55
49
|
/**
|
|
@@ -67,8 +61,8 @@ async function getBot(id) {
|
|
|
67
61
|
async function listBots(limit = 50, offset = 0) {
|
|
68
62
|
const pool = await (0, db_1.getPool)();
|
|
69
63
|
const [{ rows }, countResult] = await Promise.all([
|
|
70
|
-
pool.query(LIST_BOTS, [limit, offset]),
|
|
71
|
-
pool.query(COUNT_BOTS),
|
|
64
|
+
pool.query(sql_1.LIST_BOTS, [limit, offset]),
|
|
65
|
+
pool.query(sql_1.COUNT_BOTS),
|
|
72
66
|
]);
|
|
73
67
|
// Attach roles to each bot
|
|
74
68
|
const bots = await Promise.all(rows.map(async (row) => {
|
|
@@ -135,7 +129,7 @@ const SYSTEM_BOT_NAME = 'lt-system';
|
|
|
135
129
|
*/
|
|
136
130
|
async function ensureSystemBot() {
|
|
137
131
|
const pool = await (0, db_1.getPool)();
|
|
138
|
-
const { rows } = await pool.query(
|
|
132
|
+
const { rows } = await pool.query(sql_1.GET_USER_BY_EXTERNAL_ID, [SYSTEM_BOT_NAME]);
|
|
139
133
|
if (rows.length > 0)
|
|
140
134
|
return rows[0].id;
|
|
141
135
|
const bot = await createBot({
|
|
@@ -7,7 +7,7 @@ export declare function runWithToolContext<T>(ctx: ToolContext, fn: () => Promis
|
|
|
7
7
|
/**
|
|
8
8
|
* Retrieve the ToolContext for the current execution scope.
|
|
9
9
|
*
|
|
10
|
-
* Activities: reads from
|
|
10
|
+
* Activities: reads from headers (injected by activity interceptor).
|
|
11
11
|
* Workflow scope: reads from AsyncLocalStorage (set by workflow interceptor).
|
|
12
12
|
* Returns undefined when no identity is available.
|
|
13
13
|
*/
|
|
@@ -7,9 +7,9 @@ exports.getToolContext = getToolContext;
|
|
|
7
7
|
*
|
|
8
8
|
* Two paths, checked in order:
|
|
9
9
|
*
|
|
10
|
-
* 1. **
|
|
10
|
+
* 1. **headers** (production-safe, distributed):
|
|
11
11
|
* The activity interceptor injects `principal` + `scopes` into
|
|
12
|
-
* `
|
|
12
|
+
* `headers`, which HotMesh delivers to the activity worker
|
|
13
13
|
* via `Durable.activity.getContext()`. Works across process boundaries.
|
|
14
14
|
*
|
|
15
15
|
* 2. **AsyncLocalStorage** (workflow-local, single-process):
|
|
@@ -30,15 +30,15 @@ function runWithToolContext(ctx, fn) {
|
|
|
30
30
|
/**
|
|
31
31
|
* Retrieve the ToolContext for the current execution scope.
|
|
32
32
|
*
|
|
33
|
-
* Activities: reads from
|
|
33
|
+
* Activities: reads from headers (injected by activity interceptor).
|
|
34
34
|
* Workflow scope: reads from AsyncLocalStorage (set by workflow interceptor).
|
|
35
35
|
* Returns undefined when no identity is available.
|
|
36
36
|
*/
|
|
37
37
|
function getToolContext() {
|
|
38
|
-
// 1. Try
|
|
38
|
+
// 1. Try headers (activity worker — works distributed)
|
|
39
39
|
try {
|
|
40
40
|
const actCtx = hotmesh_1.Durable.activity.getContext();
|
|
41
|
-
const meta = actCtx?.
|
|
41
|
+
const meta = actCtx?.headers;
|
|
42
42
|
if (meta?.principal) {
|
|
43
43
|
const principal = meta.principal;
|
|
44
44
|
return {
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MissingCredentialError = void 0;
|
|
4
4
|
exports.resolveCredential = resolveCredential;
|
|
5
5
|
const oauth_1 = require("../oauth");
|
|
6
|
-
const logger_1 = require("
|
|
6
|
+
const logger_1 = require("../../lib/logger");
|
|
7
7
|
/**
|
|
8
8
|
* Thrown when credential resolution finds no credential for a provider.
|
|
9
9
|
* Caught by route handlers to return structured 422 responses.
|
|
@@ -9,9 +9,10 @@ exports.storeEphemeral = storeEphemeral;
|
|
|
9
9
|
exports.exchangeEphemeral = exchangeEphemeral;
|
|
10
10
|
exports.revokeEphemeral = revokeEphemeral;
|
|
11
11
|
exports.cleanupExpired = cleanupExpired;
|
|
12
|
-
const db_1 = require("
|
|
12
|
+
const db_1 = require("../../lib/db");
|
|
13
13
|
const crypto_1 = require("../oauth/crypto");
|
|
14
|
-
const logger_1 = require("
|
|
14
|
+
const logger_1 = require("../../lib/logger");
|
|
15
|
+
const sql_1 = require("./sql");
|
|
15
16
|
// ── Token format ────────────────────────────────────────────────────────────
|
|
16
17
|
// Opaque string: eph:v1:<label>:<uuid>
|
|
17
18
|
// The LLM passes these through as-is. Exchange happens inside activity bodies.
|
|
@@ -80,9 +81,7 @@ async function storeEphemeral(value, opts = {}) {
|
|
|
80
81
|
const expiresAt = opts.ttlSeconds
|
|
81
82
|
? `NOW() + ${opts.ttlSeconds} * INTERVAL '1 second'`
|
|
82
83
|
: 'NULL';
|
|
83
|
-
const { rows } = await pool.query(
|
|
84
|
-
VALUES ($1, $2, $3, ${expiresAt})
|
|
85
|
-
RETURNING token`, [Buffer.from(encrypted, 'base64'), opts.label || null, maxUses]);
|
|
84
|
+
const { rows } = await pool.query((0, sql_1.INSERT_EPHEMERAL)(expiresAt), [Buffer.from(encrypted, 'base64'), opts.label || null, maxUses]);
|
|
86
85
|
return rows[0].token;
|
|
87
86
|
}
|
|
88
87
|
/**
|
|
@@ -97,18 +96,13 @@ async function exchangeEphemeral(token) {
|
|
|
97
96
|
const pool = (0, db_1.getPool)();
|
|
98
97
|
// Atomic increment + check in one query.
|
|
99
98
|
// Returns the row if the exchange is valid, nothing if expired/exhausted.
|
|
100
|
-
const { rows } = await pool.query(
|
|
101
|
-
SET use_count = use_count + 1
|
|
102
|
-
WHERE token = $1
|
|
103
|
-
AND (expires_at IS NULL OR expires_at > NOW())
|
|
104
|
-
AND (max_uses = 0 OR use_count < max_uses)
|
|
105
|
-
RETURNING value, use_count, max_uses`, [token]);
|
|
99
|
+
const { rows } = await pool.query(sql_1.EXCHANGE_EPHEMERAL, [token]);
|
|
106
100
|
if (rows.length === 0)
|
|
107
101
|
return null;
|
|
108
102
|
const { value: buf, use_count, max_uses } = rows[0];
|
|
109
103
|
// Auto-delete when max_uses is reached (if bounded)
|
|
110
104
|
if (max_uses > 0 && use_count >= max_uses) {
|
|
111
|
-
await pool.query(
|
|
105
|
+
await pool.query(sql_1.DELETE_EPHEMERAL, [token]);
|
|
112
106
|
}
|
|
113
107
|
return (0, crypto_1.decrypt)(buf.toString('base64'));
|
|
114
108
|
}
|
|
@@ -117,7 +111,7 @@ async function exchangeEphemeral(token) {
|
|
|
117
111
|
*/
|
|
118
112
|
async function revokeEphemeral(token) {
|
|
119
113
|
const pool = (0, db_1.getPool)();
|
|
120
|
-
const { rowCount } = await pool.query(
|
|
114
|
+
const { rowCount } = await pool.query(sql_1.DELETE_EPHEMERAL, [token]);
|
|
121
115
|
return (rowCount ?? 0) > 0;
|
|
122
116
|
}
|
|
123
117
|
/**
|
|
@@ -125,7 +119,6 @@ async function revokeEphemeral(token) {
|
|
|
125
119
|
*/
|
|
126
120
|
async function cleanupExpired() {
|
|
127
121
|
const pool = (0, db_1.getPool)();
|
|
128
|
-
const { rowCount } = await pool.query(
|
|
129
|
-
WHERE expires_at IS NOT NULL AND expires_at < NOW()`);
|
|
122
|
+
const { rowCount } = await pool.query(sql_1.CLEANUP_EXPIRED_EPHEMERAL);
|
|
130
123
|
return rowCount ?? 0;
|
|
131
124
|
}
|
|
@@ -11,21 +11,14 @@
|
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.resolvePrincipal = resolvePrincipal;
|
|
14
|
-
const db_1 = require("
|
|
14
|
+
const db_1 = require("../../lib/db");
|
|
15
|
+
const sql_1 = require("./sql");
|
|
15
16
|
/** UUID v4 pattern for distinguishing UUIDs from external_ids. */
|
|
16
17
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
17
|
-
/** Fetch user + roles by external_id OR id in one query. */
|
|
18
|
-
const GET_USER_WITH_ROLES_FLEXIBLE = `
|
|
19
|
-
SELECT u.id, u.external_id, u.display_name, u.status, u.metadata,
|
|
20
|
-
r.role, r.type AS role_type
|
|
21
|
-
FROM lt_users u
|
|
22
|
-
LEFT JOIN lt_user_roles r ON r.user_id = u.id
|
|
23
|
-
WHERE u.external_id = $1 OR u.id::text = $1
|
|
24
|
-
ORDER BY r.created_at`;
|
|
25
18
|
const ROLE_TYPE_PRIORITY = { superadmin: 3, admin: 2, member: 1 };
|
|
26
19
|
async function resolvePrincipal(identifier) {
|
|
27
20
|
const pool = (0, db_1.getPool)();
|
|
28
|
-
const { rows } = await pool.query(GET_USER_WITH_ROLES_FLEXIBLE, [identifier]);
|
|
21
|
+
const { rows } = await pool.query(sql_1.GET_USER_WITH_ROLES_FLEXIBLE, [identifier]);
|
|
29
22
|
if (rows.length === 0)
|
|
30
23
|
return null;
|
|
31
24
|
const user = rows[0];
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.resolveToolContext = resolveToolContext;
|
|
4
4
|
const delegation_1 = require("../auth/delegation");
|
|
5
5
|
const user_1 = require("../user");
|
|
6
|
-
const logger_1 = require("
|
|
6
|
+
const logger_1 = require("../../lib/logger");
|
|
7
7
|
/** Role type priority for determining highest role type. */
|
|
8
8
|
const ROLE_TYPE_PRIORITY = { superadmin: 3, admin: 2, member: 1 };
|
|
9
9
|
/**
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Build INSERT for ephemeral credentials. expiresExpr is a SQL expression like 'NULL' or "NOW() + N * INTERVAL '1 second'". */
|
|
2
|
+
export declare const INSERT_EPHEMERAL: (expiresExpr: string) => string;
|
|
3
|
+
export declare const EXCHANGE_EPHEMERAL = "\n UPDATE lt_ephemeral_credentials\n SET use_count = use_count + 1\n WHERE token = $1\n AND (expires_at IS NULL OR expires_at > NOW())\n AND (max_uses = 0 OR use_count < max_uses)\n RETURNING value, use_count, max_uses";
|
|
4
|
+
export declare const DELETE_EPHEMERAL = "\n DELETE FROM lt_ephemeral_credentials WHERE token = $1";
|
|
5
|
+
export declare const CLEANUP_EXPIRED_EPHEMERAL = "\n DELETE FROM lt_ephemeral_credentials\n WHERE expires_at IS NOT NULL AND expires_at < NOW()";
|
|
6
|
+
export declare const LIST_BOTS = "\n SELECT * FROM lt_users\n WHERE account_type = 'bot'\n ORDER BY created_at DESC\n LIMIT $1 OFFSET $2";
|
|
7
|
+
export declare const COUNT_BOTS = "\n SELECT COUNT(*)::int AS total FROM lt_users WHERE account_type = 'bot'";
|
|
8
|
+
export declare const SET_ACCOUNT_TYPE_BOT = "\n UPDATE lt_users SET account_type = $1 WHERE id = $2";
|
|
9
|
+
export declare const GET_USER_BY_EXTERNAL_ID = "\n SELECT id FROM lt_users WHERE external_id = $1";
|
|
10
|
+
export declare const GET_USER_WITH_ROLES_FLEXIBLE = "\n SELECT u.id, u.external_id, u.display_name, u.status, u.metadata,\n r.role, r.type AS role_type\n FROM lt_users u\n LEFT JOIN lt_user_roles r ON r.user_id = u.id\n WHERE u.external_id = $1 OR u.id::text = $1\n ORDER BY r.created_at";
|