@hotmeshio/long-tail 0.23.1 → 0.24.0
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/build/adapters/express.d.ts +9 -1
- package/build/adapters/express.js +32 -41
- package/build/api/auth-sso.d.ts +1 -1
- package/build/api/bot-accounts.d.ts +2 -0
- package/build/api/bot-accounts.js +4 -0
- package/build/api/capabilities.d.ts +7 -2
- package/build/api/capabilities.js +13 -2
- package/build/api/escalations/analytics.js +5 -0
- package/build/api/escalations/bulk.d.ts +2 -0
- package/build/api/escalations/bulk.js +9 -4
- package/build/api/escalations/helpers.d.ts +5 -0
- package/build/api/escalations/helpers.js +7 -0
- package/build/api/escalations/index.d.ts +1 -0
- package/build/api/escalations/index.js +4 -1
- package/build/api/escalations/list.d.ts +5 -0
- package/build/api/escalations/list.js +19 -5
- package/build/api/escalations/metadata.js +3 -0
- package/build/api/escalations/related.d.ts +18 -0
- package/build/api/escalations/related.js +205 -0
- package/build/api/escalations/single.d.ts +3 -2
- package/build/api/escalations/single.js +8 -3
- package/build/api/mcp/tools.d.ts +12 -0
- package/build/api/mcp/tools.js +113 -9
- package/build/api/roles.js +4 -0
- package/build/api/scan-codes/choice.js +31 -7
- package/build/api/scan-codes/present.js +5 -1
- package/build/api/settings.d.ts +1 -1
- package/build/api/settings.js +12 -1
- package/build/api/tasks.d.ts +3 -3
- package/build/api/tasks.js +30 -7
- package/build/api/workflows/input-lookups.js +1 -1
- package/build/api/workflows/invocable.js +2 -2
- package/build/api/workflows/invocation.js +1 -1
- package/build/api/yaml-workflows/deploy.d.ts +10 -2
- package/build/api/yaml-workflows/deploy.js +42 -2
- package/build/lib/db/schemas/038_oauth_server.sql +46 -0
- package/build/lib/events/browser-view.d.ts +15 -0
- package/build/lib/events/browser-view.js +101 -0
- package/build/lib/events/nats-ws-filter.d.ts +29 -0
- package/build/lib/events/nats-ws-filter.js +94 -0
- package/build/lib/events/nats-ws-proxy.d.ts +2 -0
- package/build/lib/events/nats-ws-proxy.js +39 -5
- package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
- package/build/lib/events/nats-ws-server-filter.js +56 -0
- package/build/lib/events/nats-ws-ticket.d.ts +10 -0
- package/build/lib/events/nats-ws-ticket.js +42 -0
- package/build/lib/events/socketio.d.ts +10 -1
- package/build/lib/events/socketio.js +10 -3
- package/build/lib/http/index.d.ts +27 -0
- package/build/lib/http/index.js +55 -0
- package/build/modules/auth.d.ts +15 -24
- package/build/modules/auth.js +43 -126
- package/build/modules/capabilities.d.ts +62 -0
- package/build/modules/capabilities.js +188 -0
- package/build/modules/config.d.ts +14 -0
- package/build/modules/config.js +20 -0
- package/build/modules/defaults.d.ts +10 -0
- package/build/modules/defaults.js +12 -1
- package/build/modules/display.d.ts +15 -0
- package/build/modules/display.js +27 -0
- package/build/modules/mcp-auth.d.ts +11 -0
- package/build/modules/mcp-auth.js +56 -0
- package/build/modules/oauth-server.d.ts +18 -0
- package/build/modules/oauth-server.js +40 -0
- package/build/routes/agents.js +46 -14
- package/build/routes/announcements.js +2 -2
- package/build/routes/auth-sso.js +2 -2
- package/build/routes/auth.js +2 -2
- package/build/routes/bot-accounts.js +26 -3
- package/build/routes/capabilities.js +4 -4
- package/build/routes/controlplane.js +2 -2
- package/build/routes/dba.js +2 -2
- package/build/routes/delegation.js +2 -2
- package/build/routes/diagnostics.js +2 -2
- package/build/routes/docs.js +2 -2
- package/build/routes/domain.js +2 -2
- package/build/routes/escalations/accumulate.d.ts +1 -1
- package/build/routes/escalations/acting.d.ts +1 -1
- package/build/routes/escalations/analytics.d.ts +1 -1
- package/build/routes/escalations/bulk.d.ts +1 -1
- package/build/routes/escalations/facets.d.ts +1 -1
- package/build/routes/escalations/index.js +5 -2
- package/build/routes/escalations/list.d.ts +1 -1
- package/build/routes/escalations/list.js +2 -0
- package/build/routes/escalations/metadata.d.ts +1 -1
- package/build/routes/escalations/related.d.ts +7 -0
- package/build/routes/escalations/related.js +60 -0
- package/build/routes/escalations/resolve.d.ts +1 -1
- package/build/routes/escalations/single.d.ts +1 -1
- package/build/routes/escalations/single.js +1 -1
- package/build/routes/exports.js +14 -13
- package/build/routes/file-browser.js +9 -8
- package/build/routes/files.js +2 -2
- package/build/routes/index.js +4 -2
- package/build/routes/insight.js +5 -4
- package/build/routes/knowledge.js +2 -2
- package/build/routes/maintenance.js +2 -2
- package/build/routes/mcp-endpoint.d.ts +3 -1
- package/build/routes/mcp-endpoint.js +18 -8
- package/build/routes/mcp.js +35 -15
- package/build/routes/me.js +2 -2
- package/build/routes/namespaces.js +4 -3
- package/build/routes/nats-credentials.js +27 -3
- package/build/routes/oauth-server/authorize.d.ts +2 -0
- package/build/routes/oauth-server/authorize.js +108 -0
- package/build/routes/oauth-server/grants.d.ts +2 -0
- package/build/routes/oauth-server/grants.js +35 -0
- package/build/routes/oauth-server/index.d.ts +8 -0
- package/build/routes/oauth-server/index.js +52 -0
- package/build/routes/oauth-server/registration.d.ts +2 -0
- package/build/routes/oauth-server/registration.js +38 -0
- package/build/routes/oauth-server/token.d.ts +2 -0
- package/build/routes/oauth-server/token.js +100 -0
- package/build/routes/oauth-well-known.d.ts +8 -0
- package/build/routes/oauth-well-known.js +31 -0
- package/build/routes/oauth.js +2 -2
- package/build/routes/overview.js +2 -2
- package/build/routes/personas.js +2 -2
- package/build/routes/pipelines.js +6 -5
- package/build/routes/roles.js +2 -2
- package/build/routes/scan-codes.js +2 -2
- package/build/routes/settings.js +2 -2
- package/build/routes/tasks.js +5 -5
- package/build/routes/topics.js +21 -9
- package/build/routes/users.js +25 -22
- package/build/routes/workflow-sets.js +13 -12
- package/build/routes/workflows/config.js +15 -2
- package/build/routes/workflows/discovery.js +2 -2
- package/build/routes/workflows/index.js +2 -2
- package/build/routes/workflows/invocation.js +11 -10
- package/build/routes/yaml-workflows/cron.js +19 -6
- package/build/routes/yaml-workflows/crud.js +13 -12
- package/build/routes/yaml-workflows/deployment.js +11 -10
- package/build/routes/yaml-workflows/index.js +2 -2
- package/build/routes/yaml-workflows/versions.js +2 -2
- package/build/scripts/consolidation-sim.d.ts +25 -0
- package/build/scripts/consolidation-sim.js +141 -0
- package/build/sdk/index.d.ts +12 -0
- package/build/sdk/index.js +2 -0
- package/build/services/agent/authority.d.ts +14 -0
- package/build/services/agent/authority.js +53 -0
- package/build/services/auth/bot-api-key.d.ts +2 -0
- package/build/services/auth/bot-api-key.js +10 -0
- package/build/services/auth/oauth-server/access-token.d.ts +36 -0
- package/build/services/auth/oauth-server/access-token.js +80 -0
- package/build/services/auth/oauth-server/authorization.d.ts +47 -0
- package/build/services/auth/oauth-server/authorization.js +54 -0
- package/build/services/auth/oauth-server/constants.d.ts +11 -0
- package/build/services/auth/oauth-server/constants.js +16 -0
- package/build/services/auth/oauth-server/index.d.ts +3 -0
- package/build/services/auth/oauth-server/index.js +26 -0
- package/build/services/auth/oauth-server/metadata.d.ts +21 -0
- package/build/services/auth/oauth-server/metadata.js +53 -0
- package/build/services/auth/oauth-server/registration.d.ts +42 -0
- package/build/services/auth/oauth-server/registration.js +134 -0
- package/build/services/auth/oauth-server/sql.d.ts +34 -0
- package/build/services/auth/oauth-server/sql.js +123 -0
- package/build/services/auth/oauth-server/store.d.ts +74 -0
- package/build/services/auth/oauth-server/store.js +151 -0
- package/build/services/auth/sql.d.ts +1 -0
- package/build/services/auth/sql.js +3 -1
- package/build/services/escalation/grouped-list.d.ts +19 -0
- package/build/services/escalation/grouped-list.js +54 -0
- package/build/services/escalation/index.d.ts +4 -0
- package/build/services/escalation/index.js +9 -1
- package/build/services/escalation/queries.d.ts +17 -13
- package/build/services/escalation/queries.js +38 -42
- package/build/services/escalation/read-scope-sql.d.ts +13 -0
- package/build/services/escalation/read-scope-sql.js +19 -0
- package/build/services/escalation/related.d.ts +58 -0
- package/build/services/escalation/related.js +196 -0
- package/build/services/export/index.d.ts +10 -0
- package/build/services/export/index.js +27 -0
- package/build/services/invocation-access.d.ts +25 -4
- package/build/services/invocation-access.js +39 -7
- package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
- package/build/services/mcp/client/connection-dispatch.js +3 -2
- package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
- package/build/services/mcp/client/connection-lifecycle.js +45 -7
- package/build/services/mcp/client/connection-test.js +2 -6
- package/build/services/mcp/client/connection.d.ts +1 -1
- package/build/services/mcp/client/connection.js +3 -1
- package/build/services/mcp/client/index.d.ts +2 -2
- package/build/services/mcp/client/index.js +4 -1
- package/build/services/mcp/client/network-transport.d.ts +12 -0
- package/build/services/mcp/client/network-transport.js +20 -0
- package/build/services/mcp/client/tools.d.ts +13 -0
- package/build/services/mcp/client/tools.js +18 -0
- package/build/services/mcp/db-server/index.js +2 -1
- package/build/services/mcp/external-server.d.ts +9 -4
- package/build/services/mcp/external-server.js +34 -11
- package/build/services/mcp/playwright-server/index.js +2 -1
- package/build/services/mcp/registered-tools.d.ts +3 -0
- package/build/services/mcp/registered-tools.js +7 -0
- package/build/services/mcp/server-lifecycle.js +2 -1
- package/build/services/role/index.js +6 -0
- package/build/services/role/seed.js +4 -0
- package/build/services/scan-code/validate-facts.d.ts +1 -1
- package/build/services/scan-code/validate-facts.js +12 -1
- package/build/services/workflow-invocation.d.ts +16 -3
- package/build/services/workflow-invocation.js +42 -10
- package/build/services/yaml-workflow/deployer.d.ts +10 -2
- package/build/services/yaml-workflow/deployer.js +17 -5
- package/build/services/yaml-workflow/invoke.js +27 -26
- package/build/shared/form-validation/x-lt-scan.d.ts +8 -0
- package/build/shared/form-validation/x-lt-scan.js +20 -1
- package/build/shared/list-schema/index.d.ts +3 -0
- package/build/shared/list-schema/index.js +27 -0
- package/build/shared/list-schema/template.d.ts +14 -0
- package/build/shared/list-schema/template.js +85 -0
- package/build/shared/list-schema/types.d.ts +154 -0
- package/build/shared/list-schema/types.js +55 -0
- package/build/shared/list-schema/validate.d.ts +12 -0
- package/build/shared/list-schema/validate.js +204 -0
- package/build/shared/roles/segment.d.ts +22 -0
- package/build/shared/roles/segment.js +42 -0
- package/build/start/adapters.js +2 -0
- package/build/start/config.js +7 -0
- package/build/start/index.js +4 -22
- package/build/start/server.d.ts +6 -4
- package/build/start/server.js +11 -35
- package/build/start/socket-auth.js +2 -1
- package/build/start/workers.js +1 -1
- package/build/system/mcp-servers/admin/agent-subscriptions.js +24 -1
- package/build/system/mcp-servers/admin/agents.js +25 -2
- package/build/system/mcp-servers/admin/announcements.js +3 -2
- package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
- package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
- package/build/system/mcp-servers/admin/escalations.js +74 -70
- package/build/system/mcp-servers/admin/exports.js +7 -1
- package/build/system/mcp-servers/admin/index.js +24 -25
- package/build/system/mcp-servers/admin/overview.d.ts +2 -2
- package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
- package/build/system/mcp-servers/admin/run-read.js +5 -0
- package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
- package/build/system/mcp-servers/admin/scan-codes.js +5 -11
- package/build/system/mcp-servers/admin/schemas.d.ts +20 -20
- package/build/system/mcp-servers/admin/tasks.js +7 -2
- package/build/system/mcp-servers/admin/users.js +39 -4
- package/build/system/mcp-servers/admin/workflow-config.js +12 -1
- package/build/system/mcp-servers/admin/workflows.js +27 -5
- package/build/system/mcp-servers/admin/yaml-workflows.js +7 -1
- package/build/system/mcp-servers/caller-auth.d.ts +18 -0
- package/build/system/mcp-servers/caller-auth.js +29 -0
- package/build/system/mcp-servers/claude-code.js +2 -1
- package/build/system/mcp-servers/db-query/index.js +2 -1
- package/build/system/mcp-servers/file-storage.js +2 -1
- package/build/system/mcp-servers/http-fetch.js +2 -1
- package/build/system/mcp-servers/human-queue.js +7 -3
- package/build/system/mcp-servers/oauth.js +31 -4
- package/build/system/mcp-servers/schema-exchange.js +2 -1
- package/build/system/mcp-servers/vision.d.ts +1 -0
- package/build/system/mcp-servers/vision.js +17 -7
- package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
- package/build/system/seed/tool-manifests-admin.js +121 -121
- package/build/system/seed/tool-manifests-data.d.ts +8 -374
- package/build/system/seed/tool-manifests-data.js +22 -4
- package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
- package/build/system/seed/tool-manifests-escalation.js +11 -1
- package/build/system/seed/tool-manifests-events.d.ts +2 -116
- package/build/system/seed/tool-manifests-events.js +6 -2
- package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
- package/build/system/seed/tool-manifests-knowledge.js +41 -1
- package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
- package/build/system/seed/tool-manifests-workflows.js +3 -1
- package/build/system/workflows/shared/principal-tools.d.ts +20 -0
- package/build/system/workflows/shared/principal-tools.js +64 -0
- package/build/system/workflows/shared/tool-executor.js +21 -11
- package/build/system/workflows/shared/tool-loader.js +8 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/auth.d.ts +1 -1
- package/build/types/capability.d.ts +14 -0
- package/build/types/capability.js +2 -0
- package/build/types/events.d.ts +1 -1
- package/build/types/index.d.ts +5 -3
- package/build/types/index.js +2 -1
- package/build/types/mcp.d.ts +3 -1
- package/build/types/oauth-server.d.ts +52 -0
- package/build/types/oauth-server.js +2 -0
- package/build/types/scan-code/constants.d.ts +7 -0
- package/build/types/scan-code/constants.js +7 -1
- package/build/types/scan-code/response.d.ts +3 -2
- package/build/types/scan-code/rule.d.ts +6 -1
- package/build/types/startup.d.ts +23 -7
- package/build/vitest.config.js +2 -1
- package/build/vitest.fast.config.d.ts +2 -0
- package/build/vitest.fast.config.js +20 -0
- package/build/vitest.llm.config.d.ts +2 -0
- package/build/vitest.llm.config.js +16 -0
- package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js → AdminDashboard-B3mkMIOT.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js → AgentConfigPage-CQj2B678.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js → AgentDetailPage-CzrD8JJI.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js → AgentsPage-jg2OFwyW.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js → BotPicker-DvEJFpwS.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js → BulkAssignModal-BoQCi-YC.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-kwlrcb_t.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-DKxLvOfB.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js → CollapsibleSection-UMIV4KIj.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
- package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
- package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
- package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
- package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js +2 -0
- package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js.map +1 -0
- package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js → CredentialsPage-CaFQ6vLb.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-C9SkawB-.js → CronLabel-Co5j7tzW.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-C9SkawB-.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-FjFhx0SE.js +2 -0
- package/dashboard/dist/assets/DataTable-FjFhx0SE.js.map +1 -0
- package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js → ElapsedCell-WJyE9G0T.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js → EscalationSchemaPage-Dx2Lyfrz.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
- package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js +2 -0
- package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js.map +1 -0
- package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
- package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-C97m6IZv.js → EventTable-D1-ITVXS.js} +2 -2
- package/dashboard/dist/assets/{EventTable-C97m6IZv.js.map → EventTable-D1-ITVXS.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js → FilterBar-ABC9ctin.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js.map → FilterBar-ABC9ctin.js.map} +1 -1
- package/dashboard/dist/assets/FormattedValue-k27T4bG7.js +2 -0
- package/dashboard/dist/assets/FormattedValue-k27T4bG7.js.map +1 -0
- package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js → GraphInvokePage-DKUErxWc.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js → HomePage-C6u9dIpR.js} +2 -2
- package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js.map → HomePage-C6u9dIpR.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js → ListToolbar-gA5rFzkz.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js → McpOverview-BOPo3J_i.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js → McpQueryPage-Dmbb6SAc.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js → McpRunsPage-Bi9AMWja.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-B2DA7n9m.js → OperationsPage-CvR74ZUJ.js} +3 -3
- package/dashboard/dist/assets/OperationsPage-CvR74ZUJ.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js.map +1 -0
- package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js → PersonasPage-BpFL2rpo.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
- package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js +2 -0
- package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js.map +1 -0
- package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-D7EYwW-j.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
- package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
- package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
- package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js → RoleDetailPage-CrlYCh-R.js} +2 -2
- package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js → RolesPage-BaazL_pt.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js.map → RolesPage-BaazL_pt.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js → RunAsSelector-DxuV0fa1.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
- package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js → ScanCodesPage-C0mvmYTq.js} +2 -2
- package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
- package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js +2 -0
- package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js.map +1 -0
- package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js → StickyPagination-CqbjVY6T.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js → TasksListPage-CDWnm_d9.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js → TimeAgo-BLjqlfoX.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js → TimestampCell-CnW0ENb5.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js → ToolTestPanel-DkMgCB-k.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js → TopicDetailPage-g3pljKKX.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js → TopicsPage-CVcCYdy-.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BDBDA-LR.js → UserName-D6zGIK2i.js} +2 -2
- package/dashboard/dist/assets/{UserName-BDBDA-LR.js.map → UserName-D6zGIK2i.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js → WorkflowsOverview-grI-KAI2.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
- package/dashboard/dist/assets/{agents-BT-sEk81.js → agents-Dphpdi8l.js} +2 -2
- package/dashboard/dist/assets/{agents-BT-sEk81.js.map → agents-Dphpdi8l.js.map} +1 -1
- package/dashboard/dist/assets/{bots-DRoAdLek.js → bots-DIFE298x.js} +2 -2
- package/dashboard/dist/assets/{bots-DRoAdLek.js.map → bots-DIFE298x.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js → capabilities-D7Y7LClY.js} +2 -2
- package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js.map → capabilities-D7Y7LClY.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-aXceSIRf.js → controlplane-D1TGcYsS.js} +2 -2
- package/dashboard/dist/assets/{controlplane-aXceSIRf.js.map → controlplane-D1TGcYsS.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js +2 -0
- package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js.map +1 -0
- package/dashboard/dist/assets/{index-CuBGGwXf.js → index-BzYcUPdD.js} +2 -2
- package/dashboard/dist/assets/{index-CuBGGwXf.js.map → index-BzYcUPdD.js.map} +1 -1
- package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
- package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
- package/dashboard/dist/assets/{index-h2gX31B2.js → index-ChV7pBjM.js} +2 -2
- package/dashboard/dist/assets/{index-h2gX31B2.js.map → index-ChV7pBjM.js.map} +1 -1
- package/dashboard/dist/assets/index-CniRa65p.js +3 -0
- package/dashboard/dist/assets/index-CniRa65p.js.map +1 -0
- package/dashboard/dist/assets/index-CxdjT1Yk.js +2 -0
- package/dashboard/dist/assets/{index-BCFEQEMC.js.map → index-CxdjT1Yk.js.map} +1 -1
- package/dashboard/dist/assets/{index-CZyO9hRb.js → index-DAvi5_2T.js} +2 -2
- package/dashboard/dist/assets/{index-CZyO9hRb.js.map → index-DAvi5_2T.js.map} +1 -1
- package/dashboard/dist/assets/{index-Djsoi8DI.js → index-DN-kX7hL.js} +2 -2
- package/dashboard/dist/assets/{index-Djsoi8DI.js.map → index-DN-kX7hL.js.map} +1 -1
- package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
- package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
- package/dashboard/dist/assets/{index-DBxpyIw5.js → index-DpKOr311.js} +2 -2
- package/dashboard/dist/assets/{index-DBxpyIw5.js.map → index-DpKOr311.js.map} +1 -1
- package/dashboard/dist/assets/{index-Ba-s5Yb5.js → index-Dy1wWu2e.js} +2 -2
- package/dashboard/dist/assets/{index-Ba-s5Yb5.js.map → index-Dy1wWu2e.js.map} +1 -1
- package/dashboard/dist/assets/{index-DH03y-UT.js → index-HLu98Sqh.js} +2 -2
- package/dashboard/dist/assets/{index-DH03y-UT.js.map → index-HLu98Sqh.js.map} +1 -1
- package/dashboard/dist/assets/{index-C3VTJcrp.js → index-ag2pCAPu.js} +2 -2
- package/dashboard/dist/assets/{index-C3VTJcrp.js.map → index-ag2pCAPu.js.map} +1 -1
- package/dashboard/dist/assets/index-gkxPN7Vx.js +13 -0
- package/dashboard/dist/assets/{index-BEPKAjna.js.map → index-gkxPN7Vx.js.map} +1 -1
- package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
- package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js → knowledge-DnMs-SOJ.js} +2 -2
- package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BYfSMQzh.js → mcp-CwW-K3r4.js} +2 -2
- package/dashboard/dist/assets/{mcp-BYfSMQzh.js.map → mcp-CwW-K3r4.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js → mcp-query-BZt5e8_Q.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
- package/dashboard/dist/assets/{personas-jT1O_SB4.js → personas-UA-Xn60f.js} +2 -2
- package/dashboard/dist/assets/{personas-jT1O_SB4.js.map → personas-UA-Xn60f.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js → pipelines-Cu3PARum.js} +2 -2
- package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js.map → pipelines-Cu3PARum.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CCrvnXbz.js → tasks-BO6h8GJE.js} +2 -2
- package/dashboard/dist/assets/{tasks-CCrvnXbz.js.map → tasks-BO6h8GJE.js.map} +1 -1
- package/dashboard/dist/assets/{topics-Blft0I1L.js → topics-CWjCR-17.js} +2 -2
- package/dashboard/dist/assets/{topics-Blft0I1L.js.map → topics-CWjCR-17.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js → useDebouncedValue-6t0jx1RB.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js → useNamespace-CqpoQx6D.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
- package/dashboard/dist/assets/validate-BIRn4a6d.js +2 -0
- package/dashboard/dist/assets/validate-BIRn4a6d.js.map +1 -0
- package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js → yaml-workflows-ziUdZhKY.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/docs/agents.md +3 -1
- package/docs/api/http/agents.md +15 -1
- package/docs/api/http/escalations.md +49 -3
- package/docs/api/http/exports.md +3 -1
- package/docs/api/http/file-browser.md +3 -1
- package/docs/api/http/mcp-endpoint.md +5 -2
- package/docs/api/http/mcp-servers.md +34 -4
- package/docs/api/http/namespaces.md +2 -0
- package/docs/api/http/pipelines.md +2 -0
- package/docs/api/http/roles.md +11 -8
- package/docs/api/http/service-accounts.md +8 -2
- package/docs/api/http/settings.md +29 -2
- package/docs/api/http/tasks.md +3 -1
- package/docs/api/http/topics.md +7 -1
- package/docs/api/http/users.md +8 -2
- package/docs/api/http/workflows.md +25 -10
- package/docs/api/http/yaml-workflows.md +21 -0
- package/docs/api/mcp/admin.md +409 -49
- package/docs/api/mcp/file-storage.md +4 -0
- package/docs/api/mcp/http-fetch.md +6 -2
- package/docs/api/mcp/human-queue.md +53 -0
- package/docs/api/mcp/index.md +13 -10
- package/docs/api/mcp/knowledge.md +34 -0
- package/docs/api/mcp/oauth.md +1 -1
- package/docs/api/mcp/ortho.md +113 -0
- package/docs/api/mcp/vision.md +1 -1
- package/docs/api/sdk/bot-accounts.md +1 -0
- package/docs/api/sdk/escalations.md +18 -2
- package/docs/api/sdk/mcp.md +2 -2
- package/docs/api/sdk/settings.md +1 -1
- package/docs/api/sdk/tasks.md +2 -2
- package/docs/api/sdk/workflows.md +2 -2
- package/docs/api/sdk/yaml-workflows.md +1 -1
- package/docs/architecture.md +3 -1
- package/docs/auth.md +3 -2
- package/docs/cloud.md +7 -2
- package/docs/code-owned-configuration.md +12 -0
- package/docs/dashboard.md +16 -7
- package/docs/data.md +1 -1
- package/docs/escalation-strategies.md +9 -20
- package/docs/events.md +6 -0
- package/docs/hitl/portal.md +2 -0
- package/docs/hitl/x-lt-list-schema.md +88 -1
- package/docs/hitl/x-lt-scan.md +4 -1
- package/docs/iam.md +7 -5
- package/docs/mcp.md +159 -210
- package/docs/oauth-and-delegation.md +32 -21
- package/docs/scan-codes.md +7 -1
- package/docs/topics.md +2 -0
- package/docs/workflows.md +14 -112
- package/package.json +6 -3
- package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js.map +0 -1
- package/dashboard/dist/assets/CapabilitiesPage-DKxLvOfB.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js.map +0 -1
- package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js.map +0 -1
- package/dashboard/dist/assets/DataTable-spX1dFyb.js +0 -2
- package/dashboard/dist/assets/DataTable-spX1dFyb.js.map +0 -1
- package/dashboard/dist/assets/EscalationListView-DTIVuym4.js +0 -2
- package/dashboard/dist/assets/EscalationListView-DTIVuym4.js.map +0 -1
- package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js +0 -2
- package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js.map +0 -1
- package/dashboard/dist/assets/OperationsPage-B2DA7n9m.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js.map +0 -1
- package/dashboard/dist/assets/PortalPage-Xk1zVneM.js +0 -2
- package/dashboard/dist/assets/PortalPage-Xk1zVneM.js.map +0 -1
- package/dashboard/dist/assets/ProcessDetailPage-D7EYwW-j.js +0 -2
- package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js +0 -8
- package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js.map +0 -1
- package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js +0 -2
- package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js +0 -2
- package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js.map +0 -1
- package/dashboard/dist/assets/index-BCFEQEMC.js +0 -2
- package/dashboard/dist/assets/index-BEPKAjna.js +0 -13
- package/dashboard/dist/assets/index-BUYokcrl.js +0 -67
- package/dashboard/dist/assets/index-BUYokcrl.js.map +0 -1
- package/dashboard/dist/assets/index-CcgmR-7-.js +0 -2
- package/dashboard/dist/assets/index-CcgmR-7-.js.map +0 -1
- package/dashboard/dist/assets/index-D1mKf_qz.js +0 -3
- package/dashboard/dist/assets/index-D1mKf_qz.js.map +0 -1
- package/dashboard/dist/assets/index-DcppjzP5.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Router } from '
|
|
1
|
+
import { Router } from '../lib/http';
|
|
2
2
|
import type { Server as HttpServer } from 'http';
|
|
3
3
|
/**
|
|
4
4
|
* Express adapter for mounting the Long Tail dashboard at an arbitrary subpath
|
|
@@ -65,5 +65,13 @@ export declare class LTExpressAdapter {
|
|
|
65
65
|
* - SPA fallback with injected `<base href>` and `window.__LT_BASE__`
|
|
66
66
|
*/
|
|
67
67
|
getRouter(): Router;
|
|
68
|
+
/**
|
|
69
|
+
* The OAuth well-known documents. Mount at the host's root, not under the
|
|
70
|
+
* base path: clients look for them at the origin. It answers only its two
|
|
71
|
+
* paths and passes everything else on.
|
|
72
|
+
*/
|
|
73
|
+
getWellKnownRouter(): Router;
|
|
74
|
+
/** Whether a built dashboard was found to serve. */
|
|
75
|
+
hasDashboard(): boolean;
|
|
68
76
|
private resolveDashboardDist;
|
|
69
77
|
}
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -39,9 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
6
|
exports.LTExpressAdapter = void 0;
|
|
40
7
|
const fs_1 = require("fs");
|
|
41
8
|
const path_1 = __importDefault(require("path"));
|
|
42
|
-
const
|
|
9
|
+
const http_1 = require("../lib/http");
|
|
10
|
+
const CONSENT_PAGE_PATH = '/oauth/consent';
|
|
43
11
|
const routes_1 = __importDefault(require("../routes"));
|
|
44
12
|
const mcp_endpoint_1 = __importDefault(require("../routes/mcp-endpoint"));
|
|
13
|
+
const oauth_well_known_1 = require("../routes/oauth-well-known");
|
|
45
14
|
const events_1 = require("../lib/events");
|
|
46
15
|
const socketio_1 = require("../lib/events/socketio");
|
|
47
16
|
const nats_1 = require("../lib/events/nats");
|
|
@@ -124,6 +93,7 @@ class LTExpressAdapter {
|
|
|
124
93
|
}
|
|
125
94
|
(0, nats_ws_proxy_1.attachNatsWsProxy)(server, natsAdapter.wsProxyTarget, {
|
|
126
95
|
basePath: this.basePath,
|
|
96
|
+
authToken: natsAdapter.authToken,
|
|
127
97
|
onWsUrlDerived: (url) => {
|
|
128
98
|
if (!natsAdapter.wsUrl) {
|
|
129
99
|
natsAdapter.setWsUrl(url);
|
|
@@ -141,8 +111,8 @@ class LTExpressAdapter {
|
|
|
141
111
|
* - SPA fallback with injected `<base href>` and `window.__LT_BASE__`
|
|
142
112
|
*/
|
|
143
113
|
getRouter() {
|
|
144
|
-
const router = (0,
|
|
145
|
-
router.use(
|
|
114
|
+
const router = (0, http_1.Router)();
|
|
115
|
+
router.use((0, http_1.jsonBody)());
|
|
146
116
|
// Health check
|
|
147
117
|
router.get('/health', (_req, res) => {
|
|
148
118
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
@@ -154,16 +124,25 @@ class LTExpressAdapter {
|
|
|
154
124
|
// Dashboard static assets
|
|
155
125
|
const dashboardDist = this.resolveDashboardDist();
|
|
156
126
|
if (dashboardDist) {
|
|
157
|
-
router.use(
|
|
158
|
-
// SPA fallback — inject base path into index.html
|
|
159
|
-
|
|
127
|
+
router.use((0, http_1.serveStatic)(dashboardDist, { index: false }));
|
|
128
|
+
// SPA fallback — inject base path into index.html. Outside production
|
|
129
|
+
// the file is re-read per request so dashboard rebuilds show without a restart.
|
|
130
|
+
const indexPath = path_1.default.join(dashboardDist, 'index.html');
|
|
131
|
+
const cachedIndex = process.env.NODE_ENV === 'production' ? (0, fs_1.readFileSync)(indexPath, 'utf-8') : null;
|
|
160
132
|
const basePath = this.basePath;
|
|
161
133
|
// Serve __LT_BASE__ as external script (CSP-safe, no inline scripts)
|
|
162
134
|
router.get('/config.js', (_req, res) => {
|
|
163
135
|
res.type('application/javascript').send(`window.__LT_BASE__="${basePath}";`);
|
|
164
136
|
});
|
|
165
|
-
router.get('/{*splat}', (
|
|
166
|
-
|
|
137
|
+
router.get('/{*splat}', (req, res) => {
|
|
138
|
+
// The consent page grants access to a person's account: never inside
|
|
139
|
+
// a frame. Browsers enforce every CSP header, so appending a second
|
|
140
|
+
// policy keeps the host's and still refuses framing.
|
|
141
|
+
if (req.path.startsWith(CONSENT_PAGE_PATH)) {
|
|
142
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
143
|
+
res.append('Content-Security-Policy', "frame-ancestors 'none'");
|
|
144
|
+
}
|
|
145
|
+
const html = (cachedIndex ?? (0, fs_1.readFileSync)(indexPath, 'utf-8')).replace('<head>', '<head>' +
|
|
167
146
|
`<base href="${basePath}/">` +
|
|
168
147
|
`<script src="./config.js"></script>`);
|
|
169
148
|
res.type('html').send(html);
|
|
@@ -171,6 +150,18 @@ class LTExpressAdapter {
|
|
|
171
150
|
}
|
|
172
151
|
return router;
|
|
173
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* The OAuth well-known documents. Mount at the host's root, not under the
|
|
155
|
+
* base path: clients look for them at the origin. It answers only its two
|
|
156
|
+
* paths and passes everything else on.
|
|
157
|
+
*/
|
|
158
|
+
getWellKnownRouter() {
|
|
159
|
+
return (0, oauth_well_known_1.createWellKnownRouter)();
|
|
160
|
+
}
|
|
161
|
+
/** Whether a built dashboard was found to serve. */
|
|
162
|
+
hasDashboard() {
|
|
163
|
+
return this.resolveDashboardDist() !== null;
|
|
164
|
+
}
|
|
174
165
|
resolveDashboardDist() {
|
|
175
166
|
// Check multiple paths relative to the compiled output location:
|
|
176
167
|
// - Dev (ts-node from repo root): adapters/ -> dashboard/dist
|
package/build/api/auth-sso.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ exports.removeBotRole = removeBotRole;
|
|
|
44
44
|
exports.listBotKeys = listBotKeys;
|
|
45
45
|
exports.createBotKey = createBotKey;
|
|
46
46
|
exports.revokeBotKey = revokeBotKey;
|
|
47
|
+
const bot_api_key_1 = require("../services/auth/bot-api-key");
|
|
47
48
|
const iam = __importStar(require("../services/iam"));
|
|
48
49
|
const user_1 = require("../services/user");
|
|
49
50
|
/**
|
|
@@ -292,6 +293,9 @@ async function createBotKey(input) {
|
|
|
292
293
|
*/
|
|
293
294
|
async function revokeBotKey(input) {
|
|
294
295
|
try {
|
|
296
|
+
if (input.botId !== undefined && (await (0, bot_api_key_1.getBotApiKeyOwner)(input.keyId)) !== input.botId) {
|
|
297
|
+
return { status: 404, error: 'API key not found' };
|
|
298
|
+
}
|
|
295
299
|
const revoked = await iam.revokeBotKey(input.keyId);
|
|
296
300
|
if (!revoked) {
|
|
297
301
|
return { status: 404, error: 'API key not found' };
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import type { LTApiResult } from '../types/sdk';
|
|
2
|
-
|
|
1
|
+
import type { LTApiAuth, LTApiResult } from '../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Every tool the caller may run, by category. A built-in server's tool is
|
|
4
|
+
* listed only when its manifest gate admits the caller, the same rule the
|
|
5
|
+
* tool-call route applies; an external server's tools are listed as before.
|
|
6
|
+
*/
|
|
7
|
+
export declare function listCapabilities(auth?: LTApiAuth): Promise<LTApiResult>;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.listCapabilities = listCapabilities;
|
|
4
4
|
const db_1 = require("../lib/db");
|
|
5
|
+
const capabilities_1 = require("../modules/capabilities");
|
|
6
|
+
const tools_1 = require("./mcp/tools");
|
|
5
7
|
const LIST_SERVERS_WITH_TOOLS = `
|
|
6
8
|
SELECT id, name, description, tags, tool_manifest, compile_hints, category
|
|
7
9
|
FROM lt_mcp_servers
|
|
@@ -40,18 +42,27 @@ function resolveCategory(server) {
|
|
|
40
42
|
}
|
|
41
43
|
return 'Other';
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Every tool the caller may run, by category. A built-in server's tool is
|
|
47
|
+
* listed only when its manifest gate admits the caller, the same rule the
|
|
48
|
+
* tool-call route applies; an external server's tools are listed as before.
|
|
49
|
+
*/
|
|
50
|
+
async function listCapabilities(auth) {
|
|
44
51
|
try {
|
|
45
52
|
const pool = (0, db_1.getPool)();
|
|
46
53
|
const { rows } = await pool.query(LIST_SERVERS_WITH_TOOLS);
|
|
47
54
|
const categoryMap = new Map();
|
|
55
|
+
const access = (0, capabilities_1.capabilityAccess)(auth?.userId ? { userId: auth.userId } : undefined);
|
|
48
56
|
for (const server of rows) {
|
|
49
57
|
const category = resolveCategory(server);
|
|
50
58
|
const tools = (server.tool_manifest || []);
|
|
51
59
|
if (!categoryMap.has(category)) {
|
|
52
60
|
categoryMap.set(category, []);
|
|
53
61
|
}
|
|
62
|
+
const builtin = await (0, tools_1.builtinServerFor)(server.name);
|
|
54
63
|
for (const tool of tools) {
|
|
64
|
+
if (builtin && !(await access((0, tools_1.builtinToolGate)(builtin, tool.name))))
|
|
65
|
+
continue;
|
|
55
66
|
categoryMap.get(category).push({
|
|
56
67
|
name: tool.name,
|
|
57
68
|
description: tool.description || '',
|
|
@@ -62,7 +73,7 @@ async function listCapabilities() {
|
|
|
62
73
|
}
|
|
63
74
|
}
|
|
64
75
|
const categories = CATEGORY_ORDER
|
|
65
|
-
.filter((name) => categoryMap.
|
|
76
|
+
.filter((name) => (categoryMap.get(name)?.length ?? 0) > 0)
|
|
66
77
|
.map((name) => ({
|
|
67
78
|
name,
|
|
68
79
|
tools: categoryMap.get(name).sort((a, b) => a.name.localeCompare(b.name)),
|
|
@@ -73,6 +73,11 @@ async function effectiveRoles(query) {
|
|
|
73
73
|
// query will actually touch. Resolution throws AnalyticsInputError (→ 400)
|
|
74
74
|
// for unknown keys, before any scope decision.
|
|
75
75
|
if (query?.entity) {
|
|
76
|
+
// The gate covers the entity's roles only, so a role filter beside it is
|
|
77
|
+
// refused here, before the gate, rather than reaching the query unchecked.
|
|
78
|
+
if (query.role !== undefined || query.roles !== undefined) {
|
|
79
|
+
throw new escalation_1.AnalyticsInputError('query.entity and query.role/roles are two scoping mechanisms: use one');
|
|
80
|
+
}
|
|
76
81
|
return (await escalationService.resolveEntitySystem(query.entity)).map((s) => s.role);
|
|
77
82
|
}
|
|
78
83
|
if (query?.role)
|
|
@@ -43,6 +43,8 @@ export declare function bulkClaim(input: {
|
|
|
43
43
|
*
|
|
44
44
|
* Non-superadmin callers must verify the target user holds each
|
|
45
45
|
* escalation's role (the query form requires exactly the declared role).
|
|
46
|
+
* The query form also requires the caller to manage that role's queue
|
|
47
|
+
* (write_scope all); read-only and self-scope members may not assign.
|
|
46
48
|
* Publishes claim events for assigned items.
|
|
47
49
|
*
|
|
48
50
|
* @param input.ids — array of escalation UUIDs (ids form)
|
|
@@ -128,6 +128,8 @@ async function bulkClaim(input, auth) {
|
|
|
128
128
|
*
|
|
129
129
|
* Non-superadmin callers must verify the target user holds each
|
|
130
130
|
* escalation's role (the query form requires exactly the declared role).
|
|
131
|
+
* The query form also requires the caller to manage that role's queue
|
|
132
|
+
* (write_scope all); read-only and self-scope members may not assign.
|
|
131
133
|
* Publishes claim events for assigned items.
|
|
132
134
|
*
|
|
133
135
|
* @param input.ids — array of escalation UUIDs (ids form)
|
|
@@ -163,14 +165,17 @@ async function bulkAssign(input, auth) {
|
|
|
163
165
|
if (!query.role || typeof query.role !== 'string') {
|
|
164
166
|
return { status: 400, error: 'query.role is required' };
|
|
165
167
|
}
|
|
166
|
-
// RBAC, query form: the caller must
|
|
167
|
-
// and the target user must hold
|
|
168
|
+
// RBAC, query form: the caller must manage the queried role's queue
|
|
169
|
+
// (write_scope all, or global), and the target user must hold the role.
|
|
168
170
|
const hasGlobal = await (0, helpers_1.hasGlobalEscalationAccess)(auth.userId);
|
|
169
171
|
if (!hasGlobal) {
|
|
170
|
-
const
|
|
171
|
-
if (!
|
|
172
|
+
const callerScope = await userService.getRoleScope(auth.userId, query.role);
|
|
173
|
+
if (!callerScope) {
|
|
172
174
|
return { status: 404, error: 'One or more escalations not found' };
|
|
173
175
|
}
|
|
176
|
+
if (callerScope.write !== 'all') {
|
|
177
|
+
return { status: 403, error: `You do not have permission to manage the "${query.role}" queue` };
|
|
178
|
+
}
|
|
174
179
|
const targetHasRole = await userService.hasRole(targetUserId, query.role);
|
|
175
180
|
if (!targetHasRole) {
|
|
176
181
|
return { status: 400, error: `Target user does not hold the "${query.role}" role` };
|
|
@@ -15,6 +15,11 @@ export interface EscalationReadScope {
|
|
|
15
15
|
selfRoles: string[];
|
|
16
16
|
}
|
|
17
17
|
export declare function getEscalationReadScope(userId: string): Promise<EscalationReadScope>;
|
|
18
|
+
/** Whether a read scope admits one escalation: the same rule as assertReadAccess, with no lookup. */
|
|
19
|
+
export declare function scopeAdmits(scope: EscalationReadScope, userId: string, escalation: {
|
|
20
|
+
role: string;
|
|
21
|
+
assigned_to?: string | null;
|
|
22
|
+
}): boolean;
|
|
18
23
|
export declare function validateIds(ids: unknown): ids is string[];
|
|
19
24
|
/**
|
|
20
25
|
* Write-scope partition for metadata-driven resolve. Splits the user's roles by
|
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.hasGlobalEscalationAccess = void 0;
|
|
37
37
|
exports.getEscalationReadScope = getEscalationReadScope;
|
|
38
|
+
exports.scopeAdmits = scopeAdmits;
|
|
38
39
|
exports.validateIds = validateIds;
|
|
39
40
|
exports.getEscalationWriteScope = getEscalationWriteScope;
|
|
40
41
|
exports.assertReadAccess = assertReadAccess;
|
|
@@ -70,6 +71,12 @@ async function getEscalationReadScope(userId) {
|
|
|
70
71
|
}
|
|
71
72
|
return { global: false, allRoles, selfRoles };
|
|
72
73
|
}
|
|
74
|
+
/** Whether a read scope admits one escalation: the same rule as assertReadAccess, with no lookup. */
|
|
75
|
+
function scopeAdmits(scope, userId, escalation) {
|
|
76
|
+
if (scope.global || scope.allRoles.includes(escalation.role))
|
|
77
|
+
return true;
|
|
78
|
+
return scope.selfRoles.includes(escalation.role) && escalation.assigned_to === userId;
|
|
79
|
+
}
|
|
73
80
|
function validateIds(ids) {
|
|
74
81
|
return Array.isArray(ids) && ids.length > 0;
|
|
75
82
|
}
|
|
@@ -11,3 +11,4 @@ export { findByMetadata, claimByMetadata, resolveByMetadata } from './metadata';
|
|
|
11
11
|
export { cancelSingleEscalation, bulkCancel } from './cancel';
|
|
12
12
|
export { searchByFacets, claimGroups, claimByFacets } from './facets';
|
|
13
13
|
export { aggregateByFacets, timelineByFacet } from './analytics';
|
|
14
|
+
export { getRelatedAggregates, getRelatedRows } from './related';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.timelineByFacet = exports.aggregateByFacets = exports.claimByFacets = exports.claimGroups = exports.searchByFacets = exports.bulkCancel = exports.cancelSingleEscalation = exports.resolveByMetadata = exports.claimByMetadata = exports.findByMetadata = exports.itemsView = exports.getEscalationItemsBySignalKey = exports.getEscalationItems = exports.removeItemByMetadata = exports.removeItemBySignalKey = exports.removeItem = exports.accumulateItemByMetadata = exports.accumulateItemBySignalKey = exports.accumulateItem = exports.resolveBatchItemByMetadata = exports.resolveBatchItemBySignalKey = exports.resolveBatchItem = exports.resolveAllOrNone = exports.resolveByIds = exports.resolveBySignalKey = exports.resolveEscalation = exports.bulkTriage = exports.bulkEscalate = exports.bulkUnassign = exports.bulkAssign = exports.bulkClaim = exports.updatePriority = exports.releaseExpiredClaims = exports.releaseEscalation = exports.claimEscalation = exports.getEscalationLookups = exports.escalateToRole = exports.getEscalationsByWorkflowId = exports.getEscalation = exports.getStationMetrics = exports.getEscalationStats = exports.listFacetValues = exports.listFacetKeys = exports.listDistinctTypes = exports.listAvailableEscalations = exports.listEscalations = exports.createEscalation = void 0;
|
|
3
|
+
exports.getRelatedRows = exports.getRelatedAggregates = exports.timelineByFacet = exports.aggregateByFacets = exports.claimByFacets = exports.claimGroups = exports.searchByFacets = exports.bulkCancel = exports.cancelSingleEscalation = exports.resolveByMetadata = exports.claimByMetadata = exports.findByMetadata = exports.itemsView = exports.getEscalationItemsBySignalKey = exports.getEscalationItems = exports.removeItemByMetadata = exports.removeItemBySignalKey = exports.removeItem = exports.accumulateItemByMetadata = exports.accumulateItemBySignalKey = exports.accumulateItem = exports.resolveBatchItemByMetadata = exports.resolveBatchItemBySignalKey = exports.resolveBatchItem = exports.resolveAllOrNone = exports.resolveByIds = exports.resolveBySignalKey = exports.resolveEscalation = exports.bulkTriage = exports.bulkEscalate = exports.bulkUnassign = exports.bulkAssign = exports.bulkClaim = exports.updatePriority = exports.releaseExpiredClaims = exports.releaseEscalation = exports.claimEscalation = exports.getEscalationLookups = exports.escalateToRole = exports.getEscalationsByWorkflowId = exports.getEscalation = exports.getStationMetrics = exports.getEscalationStats = exports.listFacetValues = exports.listFacetKeys = exports.listDistinctTypes = exports.listAvailableEscalations = exports.listEscalations = exports.createEscalation = void 0;
|
|
4
4
|
var create_1 = require("./create");
|
|
5
5
|
Object.defineProperty(exports, "createEscalation", { enumerable: true, get: function () { return create_1.createEscalation; } });
|
|
6
6
|
var list_1 = require("./list");
|
|
@@ -61,3 +61,6 @@ Object.defineProperty(exports, "claimByFacets", { enumerable: true, get: functio
|
|
|
61
61
|
var analytics_1 = require("./analytics");
|
|
62
62
|
Object.defineProperty(exports, "aggregateByFacets", { enumerable: true, get: function () { return analytics_1.aggregateByFacets; } });
|
|
63
63
|
Object.defineProperty(exports, "timelineByFacet", { enumerable: true, get: function () { return analytics_1.timelineByFacet; } });
|
|
64
|
+
var related_1 = require("./related");
|
|
65
|
+
Object.defineProperty(exports, "getRelatedAggregates", { enumerable: true, get: function () { return related_1.getRelatedAggregates; } });
|
|
66
|
+
Object.defineProperty(exports, "getRelatedRows", { enumerable: true, get: function () { return related_1.getRelatedRows; } });
|
|
@@ -19,6 +19,11 @@ export interface FacetInput {
|
|
|
19
19
|
* carries the full record.
|
|
20
20
|
*/
|
|
21
21
|
include?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Page by groups of this metadata key: a page holds whole groups and
|
|
24
|
+
* `total` counts groups. The response adds `groups: [{ key, ids }]`.
|
|
25
|
+
*/
|
|
26
|
+
groupBy?: string;
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
24
29
|
* List escalations with optional filters.
|
|
@@ -43,6 +43,7 @@ exports.getStationMetrics = getStationMetrics;
|
|
|
43
43
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
44
44
|
const features_1 = require("../../modules/features");
|
|
45
45
|
const helpers_1 = require("./helpers");
|
|
46
|
+
const facet_sql_1 = require("../../services/escalation/facet-sql");
|
|
46
47
|
/** Strip the heavyweight JSON columns from list rows unless asked back. */
|
|
47
48
|
function projectListRows(rows, include) {
|
|
48
49
|
if (include === 'envelope')
|
|
@@ -53,6 +54,12 @@ function projectListRows(rows, include) {
|
|
|
53
54
|
function projectListResult(result, include) {
|
|
54
55
|
return { ...result, escalations: projectListRows(result.escalations, include) };
|
|
55
56
|
}
|
|
57
|
+
/** Run a scoped faceted search, paged by groups when the caller asked. */
|
|
58
|
+
async function runFacetedSearch(search, groupBy) {
|
|
59
|
+
return groupBy
|
|
60
|
+
? escalationService.searchEscalationsGrouped({ ...search, groupKey: groupBy })
|
|
61
|
+
: escalationService.searchEscalationsFaceted(search);
|
|
62
|
+
}
|
|
56
63
|
/** True when the caller asked for anything the plain list path can't express. */
|
|
57
64
|
function hasFacetQuery(i) {
|
|
58
65
|
return !!(i.facets ||
|
|
@@ -62,7 +69,8 @@ function hasFacetQuery(i) {
|
|
|
62
69
|
i.orderBy?.length ||
|
|
63
70
|
i.roles?.length ||
|
|
64
71
|
i.available != null ||
|
|
65
|
-
i.jeopardy === true
|
|
72
|
+
i.jeopardy === true ||
|
|
73
|
+
!!i.groupBy);
|
|
66
74
|
}
|
|
67
75
|
/**
|
|
68
76
|
* List escalations with optional filters.
|
|
@@ -86,6 +94,9 @@ function hasFacetQuery(i) {
|
|
|
86
94
|
async function listEscalations(input, auth) {
|
|
87
95
|
try {
|
|
88
96
|
const scope = await (0, helpers_1.getEscalationReadScope)(auth.userId);
|
|
97
|
+
if (input.groupBy != null && !facet_sql_1.FACET_KEY.test(input.groupBy)) {
|
|
98
|
+
return { status: 400, error: 'groupBy must be a metadata key (letters, numbers, underscores)' };
|
|
99
|
+
}
|
|
89
100
|
if (!scope.global && scope.allRoles.length === 0 && scope.selfRoles.length === 0) {
|
|
90
101
|
return { status: 200, data: { escalations: [], total: 0 } };
|
|
91
102
|
}
|
|
@@ -93,7 +104,7 @@ async function listEscalations(input, auth) {
|
|
|
93
104
|
// language (facets/block/range/exists/metadata-sort) IN SQL — the caller's
|
|
94
105
|
// role(s) can only NARROW within their scope, never widen past it.
|
|
95
106
|
if (hasFacetQuery(input)) {
|
|
96
|
-
const result = await
|
|
107
|
+
const result = await runFacetedSearch({
|
|
97
108
|
global: scope.global,
|
|
98
109
|
visibleRoles: scope.global ? undefined : scope.allRoles,
|
|
99
110
|
selfRoles: scope.global ? undefined : scope.selfRoles,
|
|
@@ -117,7 +128,7 @@ async function listEscalations(input, auth) {
|
|
|
117
128
|
search: input.search,
|
|
118
129
|
limit: input.limit ?? 50,
|
|
119
130
|
offset: input.offset ?? 0,
|
|
120
|
-
});
|
|
131
|
+
}, input.groupBy);
|
|
121
132
|
return { status: 200, data: projectListResult(result, input.include) };
|
|
122
133
|
}
|
|
123
134
|
const result = await escalationService.listEscalations({
|
|
@@ -164,12 +175,15 @@ async function listEscalations(input, auth) {
|
|
|
164
175
|
async function listAvailableEscalations(input, auth) {
|
|
165
176
|
try {
|
|
166
177
|
const scope = await (0, helpers_1.getEscalationReadScope)(auth.userId);
|
|
178
|
+
if (input.groupBy != null && !facet_sql_1.FACET_KEY.test(input.groupBy)) {
|
|
179
|
+
return { status: 400, error: 'groupBy must be a metadata key (letters, numbers, underscores)' };
|
|
180
|
+
}
|
|
167
181
|
if (!scope.global && scope.allRoles.length === 0 && scope.selfRoles.length === 0) {
|
|
168
182
|
return { status: 200, data: { escalations: [], total: 0 } };
|
|
169
183
|
}
|
|
170
184
|
// Faceted path — same as listEscalations but pinned to the available pool.
|
|
171
185
|
if (hasFacetQuery(input)) {
|
|
172
|
-
const result = await
|
|
186
|
+
const result = await runFacetedSearch({
|
|
173
187
|
global: scope.global,
|
|
174
188
|
visibleRoles: scope.global ? undefined : scope.allRoles,
|
|
175
189
|
selfRoles: scope.global ? undefined : scope.selfRoles,
|
|
@@ -192,7 +206,7 @@ async function listAvailableEscalations(input, auth) {
|
|
|
192
206
|
search: input.search,
|
|
193
207
|
limit: input.limit ?? 50,
|
|
194
208
|
offset: input.offset ?? 0,
|
|
195
|
-
});
|
|
209
|
+
}, input.groupBy);
|
|
196
210
|
return { status: 200, data: projectListResult(result, input.include) };
|
|
197
211
|
}
|
|
198
212
|
const result = await escalationService.listAvailableEscalations({
|
|
@@ -73,6 +73,9 @@ async function findByMetadata(input, auth) {
|
|
|
73
73
|
// WHERE and COUNT. Global access → no filter. Never filter a fetched page
|
|
74
74
|
// controller-side — that shrinks the page and reports a wrong total.
|
|
75
75
|
const scope = await (0, helpers_1.getEscalationReadScope)(auth.userId);
|
|
76
|
+
if (!scope.global && scope.allRoles.length === 0 && scope.selfRoles.length === 0) {
|
|
77
|
+
return { status: 200, data: { escalations: [], total: 0 } };
|
|
78
|
+
}
|
|
76
79
|
const result = await escalationService.findByMetadata(input.key, input.value, input.status, input.limit, input.offset, scope.global
|
|
77
80
|
? undefined
|
|
78
81
|
: { allRoles: scope.allRoles, selfRoles: scope.selfRoles, meUserId: auth.userId });
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LTApiAuth, LTApiResult } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Aggregate every related set the role's list schema declares, for one page
|
|
4
|
+
* of host rows. One statement per (set, split) pair, whatever the page size.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getRelatedAggregates(input: {
|
|
7
|
+
role: string;
|
|
8
|
+
ids: string[];
|
|
9
|
+
version?: number;
|
|
10
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
11
|
+
/** One host's rows in one related set, for a row detail section. */
|
|
12
|
+
export declare function getRelatedRows(input: {
|
|
13
|
+
role: string;
|
|
14
|
+
id: string;
|
|
15
|
+
set: string;
|
|
16
|
+
version?: number;
|
|
17
|
+
limit?: number;
|
|
18
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|