@hotmeshio/long-tail 0.1.6 → 0.1.8
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 +47 -5
- package/build/api/auth.d.ts +16 -0
- package/build/api/auth.js +53 -0
- package/build/api/bot-accounts.d.ts +137 -0
- package/build/api/bot-accounts.js +302 -0
- package/build/api/controlplane.d.ts +68 -0
- package/build/api/controlplane.js +158 -0
- package/build/api/dba.d.ts +42 -0
- package/build/api/dba.js +95 -0
- package/build/api/escalations.d.ts +271 -0
- package/build/api/escalations.js +892 -0
- package/build/api/exports.d.ts +90 -0
- package/build/api/exports.js +204 -0
- package/build/api/index.d.ts +18 -0
- package/build/api/index.js +54 -0
- package/build/api/insight.d.ts +86 -0
- package/build/api/insight.js +147 -0
- package/build/api/maintenance.d.ts +22 -0
- package/build/api/maintenance.js +43 -0
- package/build/api/mcp-runs.d.ts +43 -0
- package/build/api/mcp-runs.js +89 -0
- package/build/api/mcp.d.ts +160 -0
- package/build/api/mcp.js +320 -0
- package/build/api/namespaces.d.ts +20 -0
- package/build/{routes/escalations/helpers.js → api/namespaces.js} +35 -10
- package/build/api/roles.d.ts +88 -0
- package/build/api/roles.js +217 -0
- package/build/api/settings.d.ts +10 -0
- package/build/api/settings.js +43 -0
- package/build/api/tasks.d.ts +70 -0
- package/build/api/tasks.js +139 -0
- package/build/api/users.d.ts +115 -0
- package/build/api/users.js +228 -0
- package/build/api/workflow-sets.d.ts +77 -0
- package/build/api/workflow-sets.js +170 -0
- package/build/api/workflows.d.ts +158 -0
- package/build/api/workflows.js +407 -0
- package/build/api/yaml-workflows.d.ts +282 -0
- package/build/api/yaml-workflows.js +751 -0
- package/build/examples/types/envelopes.d.ts +27 -0
- package/build/examples/types/index.d.ts +1 -1
- package/build/examples/workers.js +8 -0
- package/build/examples/workflows/assembly-line/activities.d.ts +28 -0
- package/build/examples/workflows/assembly-line/activities.js +53 -0
- package/build/examples/workflows/assembly-line/index.d.ts +17 -0
- package/build/examples/workflows/assembly-line/index.js +60 -0
- package/build/examples/workflows/assembly-line/iterator.d.ts +12 -0
- package/build/examples/workflows/assembly-line/iterator.js +54 -0
- package/build/examples/workflows/assembly-line/reverter.d.ts +18 -0
- package/build/examples/workflows/assembly-line/reverter.js +89 -0
- package/build/examples/workflows/assembly-line/types.d.ts +25 -0
- package/build/examples/workflows/assembly-line/types.js +8 -0
- package/build/examples/workflows/assembly-line/worker.d.ts +13 -0
- package/build/examples/workflows/assembly-line/worker.js +81 -0
- package/build/index.d.ts +4 -0
- package/build/index.js +6 -1
- package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
- package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
- package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
- package/build/lib/events/callback.d.ts +41 -0
- package/build/lib/events/callback.js +98 -0
- package/build/modules/config.js +1 -1
- package/build/routes/auth.js +37 -36
- package/build/routes/bot-accounts.js +34 -164
- package/build/routes/controlplane.js +20 -60
- package/build/routes/dba.js +18 -28
- package/build/routes/escalations/bulk.js +17 -192
- package/build/routes/escalations/list.js +51 -75
- package/build/routes/escalations/resolve.js +3 -193
- package/build/routes/escalations/single.js +13 -122
- package/build/routes/exports.js +44 -95
- package/build/routes/index.js +2 -0
- package/build/routes/insight.js +46 -88
- package/build/routes/maintenance.js +41 -17
- package/build/routes/mcp-runs.js +52 -60
- package/build/routes/mcp.js +49 -177
- package/build/routes/namespaces.js +9 -20
- package/build/routes/roles.js +23 -97
- package/build/routes/settings.js +37 -25
- package/build/routes/tasks.js +28 -64
- package/build/routes/users.js +24 -113
- package/build/routes/workflow-sets.d.ts +2 -0
- package/build/routes/workflow-sets.js +98 -0
- package/build/routes/workflows/config.js +23 -57
- package/build/routes/workflows/discovery.js +11 -85
- package/build/routes/workflows/invocation.js +28 -90
- package/build/routes/yaml-workflows/cron.js +12 -61
- package/build/routes/yaml-workflows/crud.js +30 -223
- package/build/routes/yaml-workflows/deployment.js +15 -115
- package/build/routes/yaml-workflows/versions.js +20 -58
- package/build/sdk/index.d.ts +338 -0
- package/build/sdk/index.js +299 -0
- package/build/services/controlplane/index.d.ts +1 -2
- package/build/services/controlplane/index.js +3 -3
- package/build/services/controlplane/sql.d.ts +2 -2
- package/build/services/controlplane/sql.js +4 -5
- package/build/services/controlplane/types.d.ts +1 -0
- package/build/services/export/index.js +6 -1
- package/build/services/hotmesh-utils.js +2 -4
- package/build/services/insight/index.d.ts +7 -0
- package/build/services/insight/index.js +30 -0
- package/build/services/mcp/client/tools.js +13 -1
- package/build/services/mcp-runs/sql.js +1 -1
- package/build/services/workflow-invocation.d.ts +15 -2
- package/build/services/workflow-invocation.js +11 -6
- package/build/services/workflow-sets/db.d.ts +16 -0
- package/build/services/workflow-sets/db.js +78 -0
- package/build/services/workflow-sets/index.d.ts +1 -0
- package/build/services/workflow-sets/index.js +11 -0
- package/build/services/workflow-sets/sql.d.ts +6 -0
- package/build/services/workflow-sets/sql.js +24 -0
- package/build/services/yaml-workflow/db-utils.d.ts +1 -0
- package/build/services/yaml-workflow/db-utils.js +4 -0
- package/build/services/yaml-workflow/db.d.ts +5 -0
- package/build/services/yaml-workflow/db.js +17 -0
- package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
- package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
- package/build/services/yaml-workflow/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +8 -3
- package/build/services/yaml-workflow/types.d.ts +3 -0
- package/build/services/yaml-workflow/workers/callbacks.js +7 -1
- package/build/services/yaml-workflow/workers/register.js +7 -0
- package/build/start/adapters.js +4 -0
- package/build/system/index.js +6 -0
- package/build/system/mcp-servers/knowledge.js +1 -1
- package/build/system/seed/server-definitions.js +2 -1
- package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
- package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
- package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
- package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
- package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
- package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
- package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
- package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
- package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
- package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
- package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
- package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/sdk.d.ts +27 -0
- package/build/types/sdk.js +2 -0
- package/build/types/workflow-set.d.ts +44 -0
- package/build/types/workflow-set.js +5 -0
- package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-B15jSEV2.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-B15jSEV2.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-0V2yvKak.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-0V2yvKak.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-B4UxHcek.js +2 -0
- package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-B4UxHcek.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-BBexNWVd.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-BBexNWVd.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-DlPDJSq_.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-DlPDJSq_.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-BxHW1ahb.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-BxHW1ahb.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-Bp_Y1Szk.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-Bp_Y1Szk.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-ByBFqXSO.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-ByBFqXSO.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DyIXg-tQ.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DyIXg-tQ.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-BgnA0qpS.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-BgnA0qpS.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-DlMImvgm.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-DlMImvgm.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-D90kdfw1.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-D90kdfw1.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-BNxtlgNz.js} +2 -2
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-BNxtlgNz.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-BTiaAhCx.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-BTiaAhCx.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-BUcagSCn.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-BUcagSCn.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-B-tCvz8C.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-B-tCvz8C.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js.map +1 -0
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-Di_qpL2V.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-Di_qpL2V.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-BBgybBEa.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-BBgybBEa.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-CaJ0gTEa.js} +2 -2
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-CaJ0gTEa.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-DDfMmrmR.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-DDfMmrmR.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-C5D-G5rp.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-C5D-G5rp.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-DCa2eZh2.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-DCa2eZh2.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-DTHq6OUZ.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-DTHq6OUZ.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-fC4dhrd0.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-fC4dhrd0.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-CL2MY8uD.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-CL2MY8uD.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-kgKPANly.js} +2 -2
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-kgKPANly.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Be2lXTHD.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Be2lXTHD.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-DIzJCwqR.js} +2 -2
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-DIzJCwqR.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-CRi2Jy6t.js} +2 -2
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-CRi2Jy6t.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-BETI_8Mr.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-BETI_8Mr.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-DjpMqCjz.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-DjpMqCjz.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-BZbExQ9t.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-BZbExQ9t.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-DZthQyhR.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-DZthQyhR.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-CukbOfYn.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-CukbOfYn.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-CIZHIKo9.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-CIZHIKo9.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-Q7DGoysj.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-Q7DGoysj.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-CsC9wjb0.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-CsC9wjb0.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-BcOOnJeH.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-BcOOnJeH.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-CEMapYDQ.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-CEMapYDQ.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-BHoN7iRL.js} +2 -2
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-BHoN7iRL.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-DawKl1LT.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-DawKl1LT.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-CP84Vqeg.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-CP84Vqeg.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-QrvVFxtQ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-QrvVFxtQ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-DuhAi_OY.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-DuhAi_OY.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js.map +1 -0
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-Dny-rmmI.js} +2 -2
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-Dny-rmmI.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-CV0sKNH5.js} +2 -2
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-CV0sKNH5.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-30CKyoWI.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-30CKyoWI.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-C1-30CzH.js} +2 -2
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-C1-30CzH.js.map} +1 -1
- package/dashboard/dist/assets/helpers-C1jaRD-d.js +2 -0
- package/dashboard/dist/assets/helpers-C1jaRD-d.js.map +1 -0
- package/dashboard/dist/assets/{index-FuohTtaM.js → index-BUVQ6wmy.js} +3 -3
- package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-BUVQ6wmy.js.map} +1 -1
- package/dashboard/dist/assets/index-CxVB7F4X.js +2 -0
- package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-CxVB7F4X.js.map} +1 -1
- package/dashboard/dist/assets/{index-BEtLIsML.js → index-D-oCWCAS.js} +2 -2
- package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-D-oCWCAS.js.map} +1 -1
- package/dashboard/dist/assets/index-D0wPM3Ck.js +2 -0
- package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-D0wPM3Ck.js.map} +1 -1
- package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DHgnkykj.js} +3 -3
- package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DHgnkykj.js.map} +1 -1
- package/dashboard/dist/assets/{index-D3NyVADW.js → index-D_aJBEAG.js} +2 -2
- package/dashboard/dist/assets/index-D_aJBEAG.js.map +1 -0
- package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
- package/dashboard/dist/assets/{index-CZrJ09p-.js → index-Dd_U4mLm.js} +2 -2
- package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-Dd_U4mLm.js.map} +1 -1
- package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-DnmZbNxk.js} +8 -8
- package/dashboard/dist/assets/index-DnmZbNxk.js.map +1 -0
- package/dashboard/dist/assets/index-_RBvi7s6.js +2 -0
- package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-_RBvi7s6.js.map} +1 -1
- package/dashboard/dist/assets/index-n7td8zgX.js +17 -0
- package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-n7td8zgX.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-CRFr4L9W.js} +2 -2
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-CRFr4L9W.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js +2 -0
- package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BqPHqwAO.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BqPHqwAO.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-TG1aIpo_.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-TG1aIpo_.js.map} +1 -1
- package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-DhhLTvXg.js} +2 -2
- package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-DhhLTvXg.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-D9MBzEeB.js} +2 -2
- package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-D9MBzEeB.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-BxmcZoev.js} +2 -2
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-BxmcZoev.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-BylecvvI.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-BylecvvI.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-ocmj11e_.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-ocmj11e_.js.map} +1 -1
- package/dashboard/dist/assets/{users-tA5-K0wA.js → users-Ce5r-JAv.js} +2 -2
- package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-Ce5r-JAv.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
- package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-ykIeVbRJ.js} +2 -2
- package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-ykIeVbRJ.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-WypmKYht.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-WypmKYht.js.map +1 -0
- package/dashboard/dist/index.html +3 -3
- package/docs/api/sdk/auth.md +27 -0
- package/docs/api/sdk/bot-accounts.md +243 -0
- package/docs/api/sdk/controlplane.md +103 -0
- package/docs/api/sdk/dba.md +52 -0
- package/docs/api/sdk/escalations.md +374 -0
- package/docs/api/sdk/events.md +68 -0
- package/docs/api/sdk/exports.md +124 -0
- package/docs/api/sdk/insight.md +112 -0
- package/docs/api/sdk/maintenance.md +54 -0
- package/docs/api/sdk/mcp-runs.md +71 -0
- package/docs/api/sdk/mcp.md +250 -0
- package/docs/api/sdk/namespaces.md +43 -0
- package/docs/api/sdk/roles.md +183 -0
- package/docs/api/sdk/settings.md +24 -0
- package/docs/api/sdk/tasks.md +120 -0
- package/docs/api/sdk/users.md +196 -0
- package/docs/api/sdk/workflow-sets.md +135 -0
- package/docs/api/sdk/workflows.md +271 -0
- package/docs/api/sdk/yaml-workflows.md +408 -0
- package/docs/events.md +28 -0
- package/docs/sdk.md +177 -0
- package/docs/story.md +157 -0
- package/package.json +3 -2
- package/build/routes/escalations/helpers.d.ts +0 -5
- package/build/routes/resolve.d.ts +0 -9
- package/build/routes/resolve.js +0 -19
- package/build/routes/yaml-workflows/helpers.d.ts +0 -2
- package/build/routes/yaml-workflows/helpers.js +0 -8
- package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
- package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
- package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
- package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
- package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
- package/dashboard/dist/assets/index-DYyLF-Qb.js.map +0 -1
- package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
- 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/api/{dba.md → http/dba.md} +0 -0
- /package/docs/api/{escalations.md → http/escalations.md} +0 -0
- /package/docs/api/{exports.md → http/exports.md} +0 -0
- /package/docs/api/{maintenance.md → http/maintenance.md} +0 -0
- /package/docs/api/{mcp-runs.md → http/mcp-runs.md} +0 -0
- /package/docs/api/{mcp-servers.md → http/mcp-servers.md} +0 -0
- /package/docs/api/{namespaces.md → http/namespaces.md} +0 -0
- /package/docs/api/{roles.md → http/roles.md} +0 -0
- /package/docs/api/{service-accounts.md → http/service-accounts.md} +0 -0
- /package/docs/api/{settings.md → http/settings.md} +0 -0
- /package/docs/api/{tasks.md → http/tasks.md} +0 -0
- /package/docs/api/{users.md → http/users.md} +0 -0
- /package/docs/api/{workflows.md → http/workflows.md} +0 -0
- /package/docs/api/{yaml-workflows.md → http/yaml-workflows.md} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { LTApiResult } from '../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* List distinct entity types for an app (HotMesh namespace).
|
|
4
|
+
*
|
|
5
|
+
* @param input.app_id — HotMesh app ID (e.g. `"durable"`)
|
|
6
|
+
* @returns `{ status: 200, data: { entities: string[] } }`
|
|
7
|
+
*/
|
|
8
|
+
export declare function listEntities(input: {
|
|
9
|
+
app_id: string;
|
|
10
|
+
}): Promise<LTApiResult>;
|
|
11
|
+
/**
|
|
12
|
+
* List jobs (workflow executions) for an app, with optional filters.
|
|
13
|
+
*
|
|
14
|
+
* @param input.app_id — HotMesh app ID
|
|
15
|
+
* @param input.limit — max results
|
|
16
|
+
* @param input.offset — pagination offset
|
|
17
|
+
* @param input.entity — filter by entity type
|
|
18
|
+
* @param input.search — full-text search
|
|
19
|
+
* @param input.status — filter by job status
|
|
20
|
+
* @returns `{ status: 200, data: { jobs, total } }`
|
|
21
|
+
*/
|
|
22
|
+
export declare function listJobs(input: {
|
|
23
|
+
app_id: string;
|
|
24
|
+
limit?: number;
|
|
25
|
+
offset?: number;
|
|
26
|
+
entity?: string;
|
|
27
|
+
search?: string;
|
|
28
|
+
status?: string;
|
|
29
|
+
}): Promise<LTApiResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the full execution history for a single job.
|
|
32
|
+
*
|
|
33
|
+
* Reconstructs the execution timeline from the HotMesh stream,
|
|
34
|
+
* including activity calls, signals, and state transitions.
|
|
35
|
+
*
|
|
36
|
+
* @param input.jobId — HotMesh job (workflow) ID
|
|
37
|
+
* @param input.app_id — HotMesh app ID
|
|
38
|
+
* @returns `{ status: 200, data: <execution timeline> }` or 404
|
|
39
|
+
*/
|
|
40
|
+
export declare function getJobExecution(input: {
|
|
41
|
+
jobId: string;
|
|
42
|
+
app_id: string;
|
|
43
|
+
}): Promise<LTApiResult>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listEntities = listEntities;
|
|
4
|
+
exports.listJobs = listJobs;
|
|
5
|
+
exports.getJobExecution = getJobExecution;
|
|
6
|
+
const hotmesh_utils_1 = require("../services/hotmesh-utils");
|
|
7
|
+
const mcp_runs_1 = require("../services/mcp-runs");
|
|
8
|
+
/**
|
|
9
|
+
* List distinct entity types for an app (HotMesh namespace).
|
|
10
|
+
*
|
|
11
|
+
* @param input.app_id — HotMesh app ID (e.g. `"durable"`)
|
|
12
|
+
* @returns `{ status: 200, data: { entities: string[] } }`
|
|
13
|
+
*/
|
|
14
|
+
async function listEntities(input) {
|
|
15
|
+
try {
|
|
16
|
+
if (!input.app_id) {
|
|
17
|
+
return { status: 400, error: 'app_id query parameter is required' };
|
|
18
|
+
}
|
|
19
|
+
const entities = await (0, mcp_runs_1.listEntities)(input.app_id);
|
|
20
|
+
return { status: 200, data: { entities } };
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err.message?.includes('does not exist')) {
|
|
24
|
+
return { status: 200, data: { entities: [] } };
|
|
25
|
+
}
|
|
26
|
+
return { status: 500, error: err.message };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* List jobs (workflow executions) for an app, with optional filters.
|
|
31
|
+
*
|
|
32
|
+
* @param input.app_id — HotMesh app ID
|
|
33
|
+
* @param input.limit — max results
|
|
34
|
+
* @param input.offset — pagination offset
|
|
35
|
+
* @param input.entity — filter by entity type
|
|
36
|
+
* @param input.search — full-text search
|
|
37
|
+
* @param input.status — filter by job status
|
|
38
|
+
* @returns `{ status: 200, data: { jobs, total } }`
|
|
39
|
+
*/
|
|
40
|
+
async function listJobs(input) {
|
|
41
|
+
try {
|
|
42
|
+
if (!input.app_id) {
|
|
43
|
+
return { status: 400, error: 'app_id query parameter is required' };
|
|
44
|
+
}
|
|
45
|
+
const result = await (0, mcp_runs_1.listJobs)({
|
|
46
|
+
rawAppId: input.app_id,
|
|
47
|
+
limit: input.limit,
|
|
48
|
+
offset: input.offset,
|
|
49
|
+
entity: input.entity,
|
|
50
|
+
search: input.search,
|
|
51
|
+
status: input.status,
|
|
52
|
+
});
|
|
53
|
+
return { status: 200, data: result };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err.message?.includes('does not exist')) {
|
|
57
|
+
return { status: 200, data: { jobs: [], total: 0 } };
|
|
58
|
+
}
|
|
59
|
+
return { status: 500, error: err.message };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the full execution history for a single job.
|
|
64
|
+
*
|
|
65
|
+
* Reconstructs the execution timeline from the HotMesh stream,
|
|
66
|
+
* including activity calls, signals, and state transitions.
|
|
67
|
+
*
|
|
68
|
+
* @param input.jobId — HotMesh job (workflow) ID
|
|
69
|
+
* @param input.app_id — HotMesh app ID
|
|
70
|
+
* @returns `{ status: 200, data: <execution timeline> }` or 404
|
|
71
|
+
*/
|
|
72
|
+
async function getJobExecution(input) {
|
|
73
|
+
try {
|
|
74
|
+
if (!input.app_id) {
|
|
75
|
+
return { status: 400, error: 'app_id query parameter is required' };
|
|
76
|
+
}
|
|
77
|
+
const appId = (0, hotmesh_utils_1.sanitizeAppId)(input.app_id);
|
|
78
|
+
const schema = (0, hotmesh_utils_1.quoteSchema)(appId);
|
|
79
|
+
const execution = await (0, mcp_runs_1.buildExecution)(input.jobId, appId, schema);
|
|
80
|
+
return { status: 200, data: execution };
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const msg = err.message ?? '';
|
|
84
|
+
if (err.status === 404 || msg.includes('not found') || msg.includes('does not exist')) {
|
|
85
|
+
return { status: 404, error: msg };
|
|
86
|
+
}
|
|
87
|
+
return { status: 500, error: msg };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* List registered MCP servers with optional filtering and pagination.
|
|
4
|
+
*
|
|
5
|
+
* @param input.status — filter by server status (e.g. 'active', 'inactive')
|
|
6
|
+
* @param input.auto_connect — filter by auto-connect setting
|
|
7
|
+
* @param input.search — free-text search across server names and descriptions
|
|
8
|
+
* @param input.tags — filter to servers matching any of these tags
|
|
9
|
+
* @param input.limit — maximum number of results to return
|
|
10
|
+
* @param input.offset — pagination offset
|
|
11
|
+
* @returns `{ status: 200, data: { ... } }` paginated list of MCP server records
|
|
12
|
+
*/
|
|
13
|
+
export declare function listMcpServers(input: {
|
|
14
|
+
status?: string;
|
|
15
|
+
auto_connect?: boolean;
|
|
16
|
+
search?: string;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
limit?: number;
|
|
19
|
+
offset?: number;
|
|
20
|
+
}): Promise<LTApiResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Register a new MCP server.
|
|
23
|
+
*
|
|
24
|
+
* Returns 409 if a server with the same name already exists.
|
|
25
|
+
*
|
|
26
|
+
* @param input.name — unique display name for the server (required)
|
|
27
|
+
* @param input.description — optional human-readable description
|
|
28
|
+
* @param input.transport_type — transport protocol, e.g. 'sse', 'stdio' (required)
|
|
29
|
+
* @param input.transport_config — transport-specific connection settings (required)
|
|
30
|
+
* @param input.auto_connect — whether to connect automatically on startup
|
|
31
|
+
* @param input.metadata — arbitrary key-value metadata
|
|
32
|
+
* @param input.tags — tags for categorization and filtering
|
|
33
|
+
* @param input.compile_hints — optional hints used during tool compilation
|
|
34
|
+
* @param input.credential_providers — OAuth/credential provider identifiers required by this server
|
|
35
|
+
* @returns `{ status: 201, data: { ... } }` the created MCP server record
|
|
36
|
+
*/
|
|
37
|
+
export declare function createMcpServer(input: {
|
|
38
|
+
name: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
transport_type: string;
|
|
41
|
+
transport_config: Record<string, any>;
|
|
42
|
+
auto_connect?: boolean;
|
|
43
|
+
metadata?: Record<string, any>;
|
|
44
|
+
tags?: string[];
|
|
45
|
+
compile_hints?: any;
|
|
46
|
+
credential_providers?: string[];
|
|
47
|
+
}): Promise<LTApiResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Test connectivity to an MCP server without persisting it.
|
|
50
|
+
*
|
|
51
|
+
* Attempts to establish a connection using the provided transport
|
|
52
|
+
* configuration and returns the result. On failure, returns a
|
|
53
|
+
* successful (200) response with `success: false` and the error message.
|
|
54
|
+
*
|
|
55
|
+
* @param input.transport_type — transport protocol to test (required)
|
|
56
|
+
* @param input.transport_config — transport-specific connection settings (required)
|
|
57
|
+
* @returns `{ status: 200, data: { success, error?, tools } }` connection test result
|
|
58
|
+
*/
|
|
59
|
+
export declare function testConnection(input: {
|
|
60
|
+
transport_type: string;
|
|
61
|
+
transport_config: Record<string, any>;
|
|
62
|
+
}): Promise<LTApiResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Retrieve a single MCP server by ID.
|
|
65
|
+
*
|
|
66
|
+
* @param input.id — the MCP server identifier
|
|
67
|
+
* @returns `{ status: 200, data: { ... } }` the MCP server record, or 404 if not found
|
|
68
|
+
*/
|
|
69
|
+
export declare function getMcpServer(input: {
|
|
70
|
+
id: string;
|
|
71
|
+
}): Promise<LTApiResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Update fields on an existing MCP server.
|
|
74
|
+
*
|
|
75
|
+
* Accepts any subset of mutable server fields alongside the required ID.
|
|
76
|
+
*
|
|
77
|
+
* @param input.id — the MCP server identifier (required)
|
|
78
|
+
* @param input.[key] — any mutable server field to update (name, description, transport_config, etc.)
|
|
79
|
+
* @returns `{ status: 200, data: { ... } }` the updated server record, or 404 if not found
|
|
80
|
+
*/
|
|
81
|
+
export declare function updateMcpServer(input: {
|
|
82
|
+
id: string;
|
|
83
|
+
[key: string]: any;
|
|
84
|
+
}): Promise<LTApiResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete an MCP server by ID.
|
|
87
|
+
*
|
|
88
|
+
* @param input.id — the MCP server identifier
|
|
89
|
+
* @returns `{ status: 200, data: { deleted: true } }` on success, or 404 if not found
|
|
90
|
+
*/
|
|
91
|
+
export declare function deleteMcpServer(input: {
|
|
92
|
+
id: string;
|
|
93
|
+
}): Promise<LTApiResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Establish a live connection to a registered MCP server.
|
|
96
|
+
*
|
|
97
|
+
* Requires the MCP adapter to be registered in the registry.
|
|
98
|
+
*
|
|
99
|
+
* @param input.id — the MCP server identifier to connect
|
|
100
|
+
* @returns `{ status: 200, data: { connected, serverId } }` confirmation of the connection
|
|
101
|
+
*/
|
|
102
|
+
export declare function connectMcpServer(input: {
|
|
103
|
+
id: string;
|
|
104
|
+
}): Promise<LTApiResult>;
|
|
105
|
+
/**
|
|
106
|
+
* Disconnect a live MCP server connection.
|
|
107
|
+
*
|
|
108
|
+
* Requires the MCP adapter to be registered in the registry.
|
|
109
|
+
*
|
|
110
|
+
* @param input.id — the MCP server identifier to disconnect
|
|
111
|
+
* @returns `{ status: 200, data: { disconnected, serverId } }` confirmation of the disconnection
|
|
112
|
+
*/
|
|
113
|
+
export declare function disconnectMcpServer(input: {
|
|
114
|
+
id: string;
|
|
115
|
+
}): Promise<LTApiResult>;
|
|
116
|
+
/**
|
|
117
|
+
* Check which credential providers are registered vs missing for an MCP server.
|
|
118
|
+
*
|
|
119
|
+
* Resolves each credential provider required by the server against the
|
|
120
|
+
* authenticated user's stored credentials.
|
|
121
|
+
*
|
|
122
|
+
* @param input.id — the MCP server identifier
|
|
123
|
+
* @param auth — authenticated user context used to resolve credentials
|
|
124
|
+
* @returns `{ status: 200, data: { required, registered, missing } }` credential status arrays
|
|
125
|
+
*/
|
|
126
|
+
export declare function getCredentialStatus(input: {
|
|
127
|
+
id: string;
|
|
128
|
+
}, auth?: LTApiAuth): Promise<LTApiResult>;
|
|
129
|
+
/**
|
|
130
|
+
* List all tools exposed by a connected MCP server.
|
|
131
|
+
*
|
|
132
|
+
* Requires the MCP adapter to be registered and the server to be connected.
|
|
133
|
+
*
|
|
134
|
+
* @param input.id — the MCP server identifier
|
|
135
|
+
* @returns `{ status: 200, data: { tools } }` array of tool descriptors
|
|
136
|
+
*/
|
|
137
|
+
export declare function listMcpServerTools(input: {
|
|
138
|
+
id: string;
|
|
139
|
+
}): Promise<LTApiResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Invoke a specific tool on a connected MCP server.
|
|
142
|
+
*
|
|
143
|
+
* Passes the tool arguments and an optional auth context (derived from
|
|
144
|
+
* `execute_as` or the authenticated user) to the MCP adapter. Returns
|
|
145
|
+
* 422 with `missing_credential` if the tool requires a credential the
|
|
146
|
+
* user has not registered.
|
|
147
|
+
*
|
|
148
|
+
* @param input.id — the MCP server identifier
|
|
149
|
+
* @param input.toolName — name of the tool to invoke
|
|
150
|
+
* @param input.arguments — key-value arguments to pass to the tool
|
|
151
|
+
* @param input.execute_as — optional user ID to impersonate for the tool call
|
|
152
|
+
* @param auth — authenticated user context
|
|
153
|
+
* @returns `{ status: 200, data: { result } }` the tool execution result
|
|
154
|
+
*/
|
|
155
|
+
export declare function callMcpTool(input: {
|
|
156
|
+
id: string;
|
|
157
|
+
toolName: string;
|
|
158
|
+
arguments?: Record<string, any>;
|
|
159
|
+
execute_as?: string;
|
|
160
|
+
}, auth?: LTApiAuth): Promise<LTApiResult>;
|
package/build/api/mcp.js
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listMcpServers = listMcpServers;
|
|
37
|
+
exports.createMcpServer = createMcpServer;
|
|
38
|
+
exports.testConnection = testConnection;
|
|
39
|
+
exports.getMcpServer = getMcpServer;
|
|
40
|
+
exports.updateMcpServer = updateMcpServer;
|
|
41
|
+
exports.deleteMcpServer = deleteMcpServer;
|
|
42
|
+
exports.connectMcpServer = connectMcpServer;
|
|
43
|
+
exports.disconnectMcpServer = disconnectMcpServer;
|
|
44
|
+
exports.getCredentialStatus = getCredentialStatus;
|
|
45
|
+
exports.listMcpServerTools = listMcpServerTools;
|
|
46
|
+
exports.callMcpTool = callMcpTool;
|
|
47
|
+
const mcpDbService = __importStar(require("../services/mcp/db"));
|
|
48
|
+
const mcp_1 = require("../services/mcp");
|
|
49
|
+
/**
|
|
50
|
+
* List registered MCP servers with optional filtering and pagination.
|
|
51
|
+
*
|
|
52
|
+
* @param input.status — filter by server status (e.g. 'active', 'inactive')
|
|
53
|
+
* @param input.auto_connect — filter by auto-connect setting
|
|
54
|
+
* @param input.search — free-text search across server names and descriptions
|
|
55
|
+
* @param input.tags — filter to servers matching any of these tags
|
|
56
|
+
* @param input.limit — maximum number of results to return
|
|
57
|
+
* @param input.offset — pagination offset
|
|
58
|
+
* @returns `{ status: 200, data: { ... } }` paginated list of MCP server records
|
|
59
|
+
*/
|
|
60
|
+
async function listMcpServers(input) {
|
|
61
|
+
try {
|
|
62
|
+
const result = await mcpDbService.listMcpServers(input);
|
|
63
|
+
return { status: 200, data: result };
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return { status: 500, error: err.message };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Register a new MCP server.
|
|
71
|
+
*
|
|
72
|
+
* Returns 409 if a server with the same name already exists.
|
|
73
|
+
*
|
|
74
|
+
* @param input.name — unique display name for the server (required)
|
|
75
|
+
* @param input.description — optional human-readable description
|
|
76
|
+
* @param input.transport_type — transport protocol, e.g. 'sse', 'stdio' (required)
|
|
77
|
+
* @param input.transport_config — transport-specific connection settings (required)
|
|
78
|
+
* @param input.auto_connect — whether to connect automatically on startup
|
|
79
|
+
* @param input.metadata — arbitrary key-value metadata
|
|
80
|
+
* @param input.tags — tags for categorization and filtering
|
|
81
|
+
* @param input.compile_hints — optional hints used during tool compilation
|
|
82
|
+
* @param input.credential_providers — OAuth/credential provider identifiers required by this server
|
|
83
|
+
* @returns `{ status: 201, data: { ... } }` the created MCP server record
|
|
84
|
+
*/
|
|
85
|
+
async function createMcpServer(input) {
|
|
86
|
+
try {
|
|
87
|
+
if (!input.name || !input.transport_type || !input.transport_config) {
|
|
88
|
+
return { status: 400, error: 'name, transport_type, and transport_config are required' };
|
|
89
|
+
}
|
|
90
|
+
const server = await mcpDbService.createMcpServer(input);
|
|
91
|
+
return { status: 201, data: server };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err.message?.includes('duplicate key') || err.code === '23505') {
|
|
95
|
+
return { status: 409, error: 'MCP server with that name already exists' };
|
|
96
|
+
}
|
|
97
|
+
return { status: 500, error: err.message };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Test connectivity to an MCP server without persisting it.
|
|
102
|
+
*
|
|
103
|
+
* Attempts to establish a connection using the provided transport
|
|
104
|
+
* configuration and returns the result. On failure, returns a
|
|
105
|
+
* successful (200) response with `success: false` and the error message.
|
|
106
|
+
*
|
|
107
|
+
* @param input.transport_type — transport protocol to test (required)
|
|
108
|
+
* @param input.transport_config — transport-specific connection settings (required)
|
|
109
|
+
* @returns `{ status: 200, data: { success, error?, tools } }` connection test result
|
|
110
|
+
*/
|
|
111
|
+
async function testConnection(input) {
|
|
112
|
+
try {
|
|
113
|
+
if (!input.transport_type || !input.transport_config) {
|
|
114
|
+
return { status: 400, error: 'transport_type and transport_config are required' };
|
|
115
|
+
}
|
|
116
|
+
const { testConnection: testConn } = await Promise.resolve().then(() => __importStar(require('../services/mcp/client/connection')));
|
|
117
|
+
const result = await testConn(input.transport_type, input.transport_config);
|
|
118
|
+
return { status: 200, data: result };
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
return { status: 200, data: { success: false, error: err.message, tools: [] } };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Retrieve a single MCP server by ID.
|
|
126
|
+
*
|
|
127
|
+
* @param input.id — the MCP server identifier
|
|
128
|
+
* @returns `{ status: 200, data: { ... } }` the MCP server record, or 404 if not found
|
|
129
|
+
*/
|
|
130
|
+
async function getMcpServer(input) {
|
|
131
|
+
try {
|
|
132
|
+
const server = await mcpDbService.getMcpServer(input.id);
|
|
133
|
+
if (!server) {
|
|
134
|
+
return { status: 404, error: 'MCP server not found' };
|
|
135
|
+
}
|
|
136
|
+
return { status: 200, data: server };
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return { status: 500, error: err.message };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Update fields on an existing MCP server.
|
|
144
|
+
*
|
|
145
|
+
* Accepts any subset of mutable server fields alongside the required ID.
|
|
146
|
+
*
|
|
147
|
+
* @param input.id — the MCP server identifier (required)
|
|
148
|
+
* @param input.[key] — any mutable server field to update (name, description, transport_config, etc.)
|
|
149
|
+
* @returns `{ status: 200, data: { ... } }` the updated server record, or 404 if not found
|
|
150
|
+
*/
|
|
151
|
+
async function updateMcpServer(input) {
|
|
152
|
+
try {
|
|
153
|
+
const { id, ...fields } = input;
|
|
154
|
+
const server = await mcpDbService.updateMcpServer(id, fields);
|
|
155
|
+
if (!server) {
|
|
156
|
+
return { status: 404, error: 'MCP server not found' };
|
|
157
|
+
}
|
|
158
|
+
return { status: 200, data: server };
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
return { status: 500, error: err.message };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Delete an MCP server by ID.
|
|
166
|
+
*
|
|
167
|
+
* @param input.id — the MCP server identifier
|
|
168
|
+
* @returns `{ status: 200, data: { deleted: true } }` on success, or 404 if not found
|
|
169
|
+
*/
|
|
170
|
+
async function deleteMcpServer(input) {
|
|
171
|
+
try {
|
|
172
|
+
const deleted = await mcpDbService.deleteMcpServer(input.id);
|
|
173
|
+
if (!deleted) {
|
|
174
|
+
return { status: 404, error: 'MCP server not found' };
|
|
175
|
+
}
|
|
176
|
+
return { status: 200, data: { deleted: true } };
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
return { status: 500, error: err.message };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Establish a live connection to a registered MCP server.
|
|
184
|
+
*
|
|
185
|
+
* Requires the MCP adapter to be registered in the registry.
|
|
186
|
+
*
|
|
187
|
+
* @param input.id — the MCP server identifier to connect
|
|
188
|
+
* @returns `{ status: 200, data: { connected, serverId } }` confirmation of the connection
|
|
189
|
+
*/
|
|
190
|
+
async function connectMcpServer(input) {
|
|
191
|
+
try {
|
|
192
|
+
const adapter = mcp_1.mcpRegistry.current;
|
|
193
|
+
if (!adapter) {
|
|
194
|
+
return { status: 400, error: 'MCP adapter not registered' };
|
|
195
|
+
}
|
|
196
|
+
await adapter.connectClient(input.id);
|
|
197
|
+
return { status: 200, data: { connected: true, serverId: input.id } };
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
return { status: 500, error: err.message };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Disconnect a live MCP server connection.
|
|
205
|
+
*
|
|
206
|
+
* Requires the MCP adapter to be registered in the registry.
|
|
207
|
+
*
|
|
208
|
+
* @param input.id — the MCP server identifier to disconnect
|
|
209
|
+
* @returns `{ status: 200, data: { disconnected, serverId } }` confirmation of the disconnection
|
|
210
|
+
*/
|
|
211
|
+
async function disconnectMcpServer(input) {
|
|
212
|
+
try {
|
|
213
|
+
const adapter = mcp_1.mcpRegistry.current;
|
|
214
|
+
if (!adapter) {
|
|
215
|
+
return { status: 400, error: 'MCP adapter not registered' };
|
|
216
|
+
}
|
|
217
|
+
await adapter.disconnectClient(input.id);
|
|
218
|
+
return { status: 200, data: { disconnected: true, serverId: input.id } };
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
return { status: 500, error: err.message };
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check which credential providers are registered vs missing for an MCP server.
|
|
226
|
+
*
|
|
227
|
+
* Resolves each credential provider required by the server against the
|
|
228
|
+
* authenticated user's stored credentials.
|
|
229
|
+
*
|
|
230
|
+
* @param input.id — the MCP server identifier
|
|
231
|
+
* @param auth — authenticated user context used to resolve credentials
|
|
232
|
+
* @returns `{ status: 200, data: { required, registered, missing } }` credential status arrays
|
|
233
|
+
*/
|
|
234
|
+
async function getCredentialStatus(input, auth) {
|
|
235
|
+
try {
|
|
236
|
+
const server = await mcpDbService.getMcpServer(input.id);
|
|
237
|
+
if (!server) {
|
|
238
|
+
return { status: 404, error: 'MCP server not found' };
|
|
239
|
+
}
|
|
240
|
+
const required = server.credential_providers ?? [];
|
|
241
|
+
const registered = [];
|
|
242
|
+
const missing = [];
|
|
243
|
+
if (auth?.userId && required.length > 0) {
|
|
244
|
+
const { resolveCredential } = await Promise.resolve().then(() => __importStar(require('../services/iam/credentials')));
|
|
245
|
+
for (const provider of required) {
|
|
246
|
+
const cred = await resolveCredential({ id: auth.userId, type: 'user', roles: [] }, provider);
|
|
247
|
+
if (cred)
|
|
248
|
+
registered.push(provider);
|
|
249
|
+
else
|
|
250
|
+
missing.push(provider);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
missing.push(...required);
|
|
255
|
+
}
|
|
256
|
+
return { status: 200, data: { required, registered, missing } };
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
return { status: 500, error: err.message };
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* List all tools exposed by a connected MCP server.
|
|
264
|
+
*
|
|
265
|
+
* Requires the MCP adapter to be registered and the server to be connected.
|
|
266
|
+
*
|
|
267
|
+
* @param input.id — the MCP server identifier
|
|
268
|
+
* @returns `{ status: 200, data: { tools } }` array of tool descriptors
|
|
269
|
+
*/
|
|
270
|
+
async function listMcpServerTools(input) {
|
|
271
|
+
try {
|
|
272
|
+
const adapter = mcp_1.mcpRegistry.current;
|
|
273
|
+
if (!adapter) {
|
|
274
|
+
return { status: 400, error: 'MCP adapter not registered' };
|
|
275
|
+
}
|
|
276
|
+
const tools = await adapter.listTools(input.id);
|
|
277
|
+
return { status: 200, data: { tools } };
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
return { status: 500, error: err.message };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Invoke a specific tool on a connected MCP server.
|
|
285
|
+
*
|
|
286
|
+
* Passes the tool arguments and an optional auth context (derived from
|
|
287
|
+
* `execute_as` or the authenticated user) to the MCP adapter. Returns
|
|
288
|
+
* 422 with `missing_credential` if the tool requires a credential the
|
|
289
|
+
* user has not registered.
|
|
290
|
+
*
|
|
291
|
+
* @param input.id — the MCP server identifier
|
|
292
|
+
* @param input.toolName — name of the tool to invoke
|
|
293
|
+
* @param input.arguments — key-value arguments to pass to the tool
|
|
294
|
+
* @param input.execute_as — optional user ID to impersonate for the tool call
|
|
295
|
+
* @param auth — authenticated user context
|
|
296
|
+
* @returns `{ status: 200, data: { result } }` the tool execution result
|
|
297
|
+
*/
|
|
298
|
+
async function callMcpTool(input, auth) {
|
|
299
|
+
try {
|
|
300
|
+
const adapter = mcp_1.mcpRegistry.current;
|
|
301
|
+
if (!adapter) {
|
|
302
|
+
return { status: 400, error: 'MCP adapter not registered' };
|
|
303
|
+
}
|
|
304
|
+
const authContext = (input.execute_as || auth?.userId)
|
|
305
|
+
? { userId: input.execute_as || auth?.userId }
|
|
306
|
+
: undefined;
|
|
307
|
+
const result = await adapter.callTool(input.id, input.toolName, input.arguments || {}, authContext);
|
|
308
|
+
return { status: 200, data: { result } };
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
if (err.name === 'MissingCredentialError') {
|
|
312
|
+
return {
|
|
313
|
+
status: 422,
|
|
314
|
+
error: 'missing_credential',
|
|
315
|
+
...{ provider: err.provider, message: err.message },
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
return { status: 500, error: err.message };
|
|
319
|
+
}
|
|
320
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LTApiResult } from '../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* List all registered namespaces.
|
|
4
|
+
*
|
|
5
|
+
* @returns `{ status: 200, data: { namespaces: LTNamespace[] } }`
|
|
6
|
+
*/
|
|
7
|
+
export declare function listNamespaces(): Promise<LTApiResult>;
|
|
8
|
+
/**
|
|
9
|
+
* Register a new namespace.
|
|
10
|
+
*
|
|
11
|
+
* @param input.name — unique namespace identifier
|
|
12
|
+
* @param input.description — human-readable description
|
|
13
|
+
* @param input.metadata — arbitrary key-value metadata
|
|
14
|
+
* @returns `{ status: 200, data: <namespace record> }`
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerNamespace(input: {
|
|
17
|
+
name: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
metadata?: Record<string, unknown>;
|
|
20
|
+
}): Promise<LTApiResult>;
|
|
@@ -33,16 +33,41 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
37
|
-
|
|
36
|
+
exports.listNamespaces = listNamespaces;
|
|
37
|
+
exports.registerNamespace = registerNamespace;
|
|
38
|
+
const namespaceService = __importStar(require("../services/namespace"));
|
|
38
39
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* List all registered namespaces.
|
|
41
|
+
*
|
|
42
|
+
* @returns `{ status: 200, data: { namespaces: LTNamespace[] } }`
|
|
41
43
|
*/
|
|
42
|
-
async function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
async function listNamespaces() {
|
|
45
|
+
try {
|
|
46
|
+
const namespaces = await namespaceService.listNamespaces();
|
|
47
|
+
return { status: 200, data: { namespaces } };
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return { status: 500, error: err.message };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register a new namespace.
|
|
55
|
+
*
|
|
56
|
+
* @param input.name — unique namespace identifier
|
|
57
|
+
* @param input.description — human-readable description
|
|
58
|
+
* @param input.metadata — arbitrary key-value metadata
|
|
59
|
+
* @returns `{ status: 200, data: <namespace record> }`
|
|
60
|
+
*/
|
|
61
|
+
async function registerNamespace(input) {
|
|
62
|
+
try {
|
|
63
|
+
const { name, description, metadata } = input;
|
|
64
|
+
if (!name || typeof name !== 'string') {
|
|
65
|
+
return { status: 400, error: 'name is required' };
|
|
66
|
+
}
|
|
67
|
+
const namespace = await namespaceService.registerNamespace(name, description, metadata);
|
|
68
|
+
return { status: 200, data: namespace };
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
return { status: 500, error: err.message };
|
|
72
|
+
}
|
|
48
73
|
}
|