@hotmeshio/long-tail 0.1.6 → 0.1.7
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 +44 -4
- package/build/api/auth.d.ts +5 -0
- package/build/api/auth.js +42 -0
- package/build/api/bot-accounts.d.ts +50 -0
- package/build/api/bot-accounts.js +215 -0
- package/build/api/controlplane.d.ts +20 -0
- package/build/api/controlplane.js +110 -0
- package/build/api/dba.d.ts +15 -0
- package/build/api/dba.js +68 -0
- package/build/api/escalations.d.ts +70 -0
- package/build/api/escalations.js +656 -0
- package/build/api/exports.d.ts +32 -0
- package/build/api/exports.js +146 -0
- package/build/api/index.d.ts +18 -0
- package/build/api/index.js +54 -0
- package/build/api/insight.d.ts +29 -0
- package/build/api/insight.js +90 -0
- package/build/api/maintenance.d.ts +7 -0
- package/build/api/maintenance.js +28 -0
- package/build/api/mcp-runs.d.ts +16 -0
- package/build/api/mcp-runs.js +62 -0
- package/build/api/mcp.d.ts +52 -0
- package/build/api/mcp.js +212 -0
- package/build/api/namespaces.d.ts +7 -0
- package/build/{routes/escalations/helpers.js → api/namespaces.js} +24 -12
- package/build/api/roles.d.ts +25 -0
- package/build/api/roles.js +159 -0
- package/build/api/settings.d.ts +2 -0
- package/build/api/settings.js +35 -0
- package/build/api/tasks.d.ts +27 -0
- package/build/api/tasks.js +96 -0
- package/build/api/users.d.ts +44 -0
- package/build/api/users.js +162 -0
- package/build/api/workflow-sets.d.ts +26 -0
- package/build/api/workflow-sets.js +119 -0
- package/build/api/workflows.d.ts +48 -0
- package/build/api/workflows.js +298 -0
- package/build/api/yaml-workflows.d.ts +87 -0
- package/build/api/yaml-workflows.js +556 -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 +29 -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 +16 -84
- 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 +327 -0
- package/build/sdk/index.js +298 -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-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-DRjkRSjJ.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-CnivX4Tz.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-CnivX4Tz.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
- package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-DQpaVA0M.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-AqoZayBG.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-AqoZayBG.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-qGw1kQzi.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-qGw1kQzi.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DKvSKoVG.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DKvSKoVG.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-B0yrReGQ.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-X0fIzYID.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-X0fIzYID.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-BQAT9W7r.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-CX1KNLhZ.js} +2 -2
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-DMTvuQy-.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-DTOSxoEy.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-DTOSxoEy.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-BaKTIWrG.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-CKs1RWeV.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-CKs1RWeV.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-CcPD_tY1.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-CcPD_tY1.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-_2AbWxJT.js} +2 -2
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-_2AbWxJT.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-BGiRaRDr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-DVr5Qyzm.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-D0KRASML.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-Bx2559OU.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-69I--sry.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-69I--sry.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-BDpUbua2.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-BDpUbua2.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-CcAqEaSt.js} +2 -2
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-CcAqEaSt.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Cl23Hjet.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-B4mqIt3Z.js} +2 -2
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-Cz_2OjAZ.js} +2 -2
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-Wi2FJZsn.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-PW5NRDMb.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-PW5NRDMb.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-Bl2Uzz65.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-BLtf86Ly.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-BLtf86Ly.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-BXJFX74D.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-CWYj3xKe.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-C3cX94Mw.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-B_5yDDHV.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-DRX724uU.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-DRX724uU.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-Ca8FA469.js} +2 -2
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-Ca8FA469.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-BBYWEV2P.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-BBYWEV2P.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-Drl3juz9.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-Drl3juz9.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-03IRrDLg.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-DZEXcgiJ.js} +2 -2
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-DZEXcgiJ.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-Cw48lNaF.js} +2 -2
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-Cw48lNaF.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-NINpo3qf.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
- package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
- package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-fk_qr729.js} +2 -2
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-fk_qr729.js.map} +1 -1
- package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
- package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-B98ipWxE.js.map} +1 -1
- package/dashboard/dist/assets/{index-BEtLIsML.js → index-BIG3KooI.js} +2 -2
- package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-BIG3KooI.js.map} +1 -1
- package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-BwN3KP_L.js} +5 -5
- package/dashboard/dist/assets/{index-DYyLF-Qb.js.map → index-BwN3KP_L.js.map} +1 -1
- package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
- package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-Bxe8h1x4.js.map} +1 -1
- package/dashboard/dist/assets/{index-FuohTtaM.js → index-CNI7k7oB.js} +3 -3
- package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-CNI7k7oB.js.map} +1 -1
- package/dashboard/dist/assets/{index-CZrJ09p-.js → index-CORHB0WC.js} +2 -2
- package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-CORHB0WC.js.map} +1 -1
- package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
- package/dashboard/dist/assets/{index-D3NyVADW.js → index-Dj-z-x8M.js} +2 -2
- package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
- package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DwRytW9O.js} +3 -3
- package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DwRytW9O.js.map} +1 -1
- package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
- package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-aRvL-dXp.js.map} +1 -1
- package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
- package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-b03HlbnH.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-BZoFryNc.js} +2 -2
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-BZoFryNc.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
- package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BaEKnf5v.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-BwnZI4_A.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-BwnZI4_A.js.map} +1 -1
- package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-Bgn1K8zU.js} +2 -2
- package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-Bgn1K8zU.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-CizYiutL.js} +2 -2
- package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-CizYiutL.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-Bmte_hc4.js} +2 -2
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-Bmte_hc4.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-CUCxpiI2.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-CUCxpiI2.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-Cum02Ej9.js.map} +1 -1
- package/dashboard/dist/assets/{users-tA5-K0wA.js → users-NSDgTt-z.js} +2 -2
- package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-NSDgTt-z.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-k0XRdGXx.js} +2 -2
- package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-k0XRdGXx.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
- package/dashboard/dist/index.html +3 -3
- package/docs/epic-integration.md +224 -0
- package/docs/events.md +28 -0
- package/docs/sdk.md +177 -0
- package/docs/story.md +157 -0
- package/docs/workflow-builder.md +371 -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-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
|
@@ -0,0 +1,298 @@
|
|
|
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.createClient = createClient;
|
|
37
|
+
const tasksApi = __importStar(require("../api/tasks"));
|
|
38
|
+
const escalationsApi = __importStar(require("../api/escalations"));
|
|
39
|
+
const workflowsApi = __importStar(require("../api/workflows"));
|
|
40
|
+
const yamlWorkflowsApi = __importStar(require("../api/yaml-workflows"));
|
|
41
|
+
const usersApi = __importStar(require("../api/users"));
|
|
42
|
+
const rolesApi = __importStar(require("../api/roles"));
|
|
43
|
+
const authApi = __importStar(require("../api/auth"));
|
|
44
|
+
const mcpApi = __importStar(require("../api/mcp"));
|
|
45
|
+
const mcpRunsApi = __importStar(require("../api/mcp-runs"));
|
|
46
|
+
const insightApi = __importStar(require("../api/insight"));
|
|
47
|
+
const settingsApi = __importStar(require("../api/settings"));
|
|
48
|
+
const exportsApi = __importStar(require("../api/exports"));
|
|
49
|
+
const controlplaneApi = __importStar(require("../api/controlplane"));
|
|
50
|
+
const botAccountsApi = __importStar(require("../api/bot-accounts"));
|
|
51
|
+
const workflowSetsApi = __importStar(require("../api/workflow-sets"));
|
|
52
|
+
const dbaApi = __importStar(require("../api/dba"));
|
|
53
|
+
const namespacesApi = __importStar(require("../api/namespaces"));
|
|
54
|
+
const maintenanceApi = __importStar(require("../api/maintenance"));
|
|
55
|
+
const events_1 = require("../lib/events");
|
|
56
|
+
const callback_1 = require("../lib/events/callback");
|
|
57
|
+
/** Bind auth context to a function that expects it as the last argument. */
|
|
58
|
+
function bindAuth(fn, defaultAuth) {
|
|
59
|
+
return (input, auth) => {
|
|
60
|
+
const resolvedAuth = auth ?? defaultAuth;
|
|
61
|
+
if (!resolvedAuth) {
|
|
62
|
+
return Promise.resolve({ status: 401, error: 'Auth context required' });
|
|
63
|
+
}
|
|
64
|
+
return fn(input, resolvedAuth);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Bind optional auth context — passes undefined if not available. */
|
|
68
|
+
function bindOptionalAuth(fn, defaultAuth) {
|
|
69
|
+
return (input, auth) => fn(input, auth ?? defaultAuth);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a Long Tail SDK client for direct in-process API calls.
|
|
73
|
+
*
|
|
74
|
+
* All operations go through the same API layer as HTTP routes —
|
|
75
|
+
* same validation, same RBAC, same event publishing — without
|
|
76
|
+
* HTTP transport overhead.
|
|
77
|
+
*
|
|
78
|
+
* ```typescript
|
|
79
|
+
* import { createClient } from '@hotmeshio/long-tail/sdk';
|
|
80
|
+
*
|
|
81
|
+
* const lt = createClient({ auth: { userId: 'system' } });
|
|
82
|
+
*
|
|
83
|
+
* const result = await lt.escalations.claim({ id: 'esc_123', durationMinutes: 30 });
|
|
84
|
+
* // { status: 200, data: { escalation: {...}, isExtension: false } }
|
|
85
|
+
*
|
|
86
|
+
* lt.events.on('escalation.claimed', (event) => {
|
|
87
|
+
* console.log('claimed:', event.escalationId);
|
|
88
|
+
* });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
function createClient(options = {}) {
|
|
92
|
+
const auth = options.auth;
|
|
93
|
+
// Get or create the CallbackEventAdapter singleton
|
|
94
|
+
let callbackAdapter = events_1.eventRegistry.getAdapter(callback_1.CallbackEventAdapter);
|
|
95
|
+
if (!callbackAdapter) {
|
|
96
|
+
callbackAdapter = new callback_1.CallbackEventAdapter();
|
|
97
|
+
events_1.eventRegistry.register(callbackAdapter);
|
|
98
|
+
callbackAdapter.connect();
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
// ── Tasks ──────────────────────────────────────────────────────────────
|
|
102
|
+
tasks: {
|
|
103
|
+
list: tasksApi.listTasks,
|
|
104
|
+
get: tasksApi.getTask,
|
|
105
|
+
listProcesses: tasksApi.listProcesses,
|
|
106
|
+
getProcess: tasksApi.getProcess,
|
|
107
|
+
getProcessStats: tasksApi.getProcessStats,
|
|
108
|
+
},
|
|
109
|
+
// ── Escalations ────────────────────────────────────────────────────────
|
|
110
|
+
escalations: {
|
|
111
|
+
list: bindAuth(escalationsApi.listEscalations, auth),
|
|
112
|
+
listAvailable: bindAuth(escalationsApi.listAvailableEscalations, auth),
|
|
113
|
+
listTypes: escalationsApi.listDistinctTypes,
|
|
114
|
+
getStats: bindAuth(escalationsApi.getEscalationStats, auth),
|
|
115
|
+
get: bindAuth(escalationsApi.getEscalation, auth),
|
|
116
|
+
getByWorkflowId: escalationsApi.getEscalationsByWorkflowId,
|
|
117
|
+
escalate: bindAuth(escalationsApi.escalateToRole, auth),
|
|
118
|
+
claim: bindAuth(escalationsApi.claimEscalation, auth),
|
|
119
|
+
release: bindAuth(escalationsApi.releaseEscalation, auth),
|
|
120
|
+
resolve: bindAuth(escalationsApi.resolveEscalation, auth),
|
|
121
|
+
releaseExpired: escalationsApi.releaseExpiredClaims,
|
|
122
|
+
updatePriority: bindAuth(escalationsApi.updatePriority, auth),
|
|
123
|
+
bulkClaim: bindAuth(escalationsApi.bulkClaim, auth),
|
|
124
|
+
bulkAssign: bindAuth(escalationsApi.bulkAssign, auth),
|
|
125
|
+
bulkEscalate: bindAuth(escalationsApi.bulkEscalate, auth),
|
|
126
|
+
bulkTriage: bindAuth(escalationsApi.bulkTriage, auth),
|
|
127
|
+
},
|
|
128
|
+
// ── Workflows ──────────────────────────────────────────────────────────
|
|
129
|
+
workflows: {
|
|
130
|
+
invoke: bindAuth(workflowsApi.invokeWorkflow, auth),
|
|
131
|
+
getStatus: workflowsApi.getWorkflowStatus,
|
|
132
|
+
getResult: workflowsApi.getWorkflowResult,
|
|
133
|
+
terminate: workflowsApi.terminateWorkflow,
|
|
134
|
+
export: workflowsApi.exportWorkflow,
|
|
135
|
+
listWorkers: workflowsApi.listWorkers,
|
|
136
|
+
listDiscovered: workflowsApi.listDiscoveredWorkflows,
|
|
137
|
+
getCronStatus: workflowsApi.getCronStatus,
|
|
138
|
+
listConfigs: workflowsApi.listWorkflowConfigs,
|
|
139
|
+
getConfig: workflowsApi.getWorkflowConfig,
|
|
140
|
+
upsertConfig: workflowsApi.upsertWorkflowConfig,
|
|
141
|
+
deleteConfig: workflowsApi.deleteWorkflowConfig,
|
|
142
|
+
},
|
|
143
|
+
// ── YAML Workflows ─────────────────────────────────────────────────────
|
|
144
|
+
yamlWorkflows: {
|
|
145
|
+
list: yamlWorkflowsApi.listYamlWorkflows,
|
|
146
|
+
create: yamlWorkflowsApi.createYamlWorkflow,
|
|
147
|
+
createDirect: yamlWorkflowsApi.createYamlWorkflowDirect,
|
|
148
|
+
getAppIds: yamlWorkflowsApi.getAppIds,
|
|
149
|
+
get: yamlWorkflowsApi.getYamlWorkflow,
|
|
150
|
+
update: yamlWorkflowsApi.updateYamlWorkflow,
|
|
151
|
+
regenerate: yamlWorkflowsApi.regenerateYamlWorkflow,
|
|
152
|
+
delete: yamlWorkflowsApi.deleteYamlWorkflow,
|
|
153
|
+
deploy: yamlWorkflowsApi.deployYamlWorkflow,
|
|
154
|
+
activate: yamlWorkflowsApi.activateYamlWorkflow,
|
|
155
|
+
invoke: bindOptionalAuth(yamlWorkflowsApi.invokeYamlWorkflow, auth),
|
|
156
|
+
archive: yamlWorkflowsApi.archiveYamlWorkflow,
|
|
157
|
+
getVersionHistory: yamlWorkflowsApi.getVersionHistory,
|
|
158
|
+
getVersionSnapshot: yamlWorkflowsApi.getVersionSnapshot,
|
|
159
|
+
getYamlContent: yamlWorkflowsApi.getYamlContent,
|
|
160
|
+
setCronSchedule: yamlWorkflowsApi.setCronSchedule,
|
|
161
|
+
clearCronSchedule: yamlWorkflowsApi.clearCronSchedule,
|
|
162
|
+
getCronStatus: yamlWorkflowsApi.getCronStatus,
|
|
163
|
+
},
|
|
164
|
+
// ── Users ──────────────────────────────────────────────────────────────
|
|
165
|
+
users: {
|
|
166
|
+
list: usersApi.listUsers,
|
|
167
|
+
get: usersApi.getUser,
|
|
168
|
+
create: usersApi.createUser,
|
|
169
|
+
update: usersApi.updateUser,
|
|
170
|
+
delete: usersApi.deleteUser,
|
|
171
|
+
getRoles: usersApi.getUserRoles,
|
|
172
|
+
addRole: usersApi.addUserRole,
|
|
173
|
+
removeRole: usersApi.removeUserRole,
|
|
174
|
+
},
|
|
175
|
+
// ── Roles ──────────────────────────────────────────────────────────────
|
|
176
|
+
roles: {
|
|
177
|
+
list: rolesApi.listRoles,
|
|
178
|
+
listWithDetails: rolesApi.listRolesWithDetails,
|
|
179
|
+
create: rolesApi.createRole,
|
|
180
|
+
delete: rolesApi.deleteRole,
|
|
181
|
+
getEscalationChains: rolesApi.getEscalationChains,
|
|
182
|
+
addEscalationChain: rolesApi.addEscalationChain,
|
|
183
|
+
removeEscalationChain: rolesApi.removeEscalationChain,
|
|
184
|
+
getEscalationTargets: rolesApi.getEscalationTargets,
|
|
185
|
+
replaceEscalationTargets: rolesApi.replaceEscalationTargets,
|
|
186
|
+
},
|
|
187
|
+
// ── Auth ───────────────────────────────────────────────────────────────
|
|
188
|
+
auth: {
|
|
189
|
+
login: authApi.login,
|
|
190
|
+
},
|
|
191
|
+
// ── MCP ────────────────────────────────────────────────────────────────
|
|
192
|
+
mcp: {
|
|
193
|
+
listServers: mcpApi.listMcpServers,
|
|
194
|
+
createServer: mcpApi.createMcpServer,
|
|
195
|
+
testConnection: mcpApi.testConnection,
|
|
196
|
+
getServer: mcpApi.getMcpServer,
|
|
197
|
+
updateServer: mcpApi.updateMcpServer,
|
|
198
|
+
deleteServer: mcpApi.deleteMcpServer,
|
|
199
|
+
connectServer: mcpApi.connectMcpServer,
|
|
200
|
+
disconnectServer: mcpApi.disconnectMcpServer,
|
|
201
|
+
getCredentialStatus: bindAuth(mcpApi.getCredentialStatus, auth),
|
|
202
|
+
listTools: mcpApi.listMcpServerTools,
|
|
203
|
+
callTool: bindOptionalAuth(mcpApi.callMcpTool, auth),
|
|
204
|
+
},
|
|
205
|
+
// ── MCP Runs ───────────────────────────────────────────────────────────
|
|
206
|
+
mcpRuns: {
|
|
207
|
+
listEntities: mcpRunsApi.listEntities,
|
|
208
|
+
listJobs: mcpRunsApi.listJobs,
|
|
209
|
+
getExecution: mcpRunsApi.getJobExecution,
|
|
210
|
+
},
|
|
211
|
+
// ── Insight ────────────────────────────────────────────────────────────
|
|
212
|
+
insight: {
|
|
213
|
+
mcpQuery: bindOptionalAuth(insightApi.mcpQuery, auth),
|
|
214
|
+
buildWorkflow: bindOptionalAuth(insightApi.buildWorkflow, auth),
|
|
215
|
+
refineWorkflow: bindOptionalAuth(insightApi.refineWorkflow, auth),
|
|
216
|
+
describeWorkflow: insightApi.describeWorkflow,
|
|
217
|
+
},
|
|
218
|
+
// ── Settings ───────────────────────────────────────────────────────────
|
|
219
|
+
settings: {
|
|
220
|
+
get: settingsApi.getSettings,
|
|
221
|
+
},
|
|
222
|
+
// ── Exports ────────────────────────────────────────────────────────────
|
|
223
|
+
exports: {
|
|
224
|
+
listJobs: exportsApi.listJobs,
|
|
225
|
+
exportState: exportsApi.exportWorkflowState,
|
|
226
|
+
exportExecution: exportsApi.exportWorkflowExecution,
|
|
227
|
+
getStatus: exportsApi.getWorkflowStatus,
|
|
228
|
+
getState: exportsApi.getWorkflowState,
|
|
229
|
+
},
|
|
230
|
+
// ── Control Plane ──────────────────────────────────────────────────────
|
|
231
|
+
controlplane: {
|
|
232
|
+
listApps: controlplaneApi.listApps,
|
|
233
|
+
rollCall: controlplaneApi.rollCall,
|
|
234
|
+
throttle: controlplaneApi.applyThrottle,
|
|
235
|
+
getStreamStats: controlplaneApi.getStreamStats,
|
|
236
|
+
subscribe: controlplaneApi.subscribeMesh,
|
|
237
|
+
},
|
|
238
|
+
// ── Bot Accounts ───────────────────────────────────────────────────────
|
|
239
|
+
botAccounts: {
|
|
240
|
+
list: botAccountsApi.listBots,
|
|
241
|
+
get: botAccountsApi.getBot,
|
|
242
|
+
create: bindOptionalAuth(botAccountsApi.createBot, auth),
|
|
243
|
+
update: botAccountsApi.updateBot,
|
|
244
|
+
delete: botAccountsApi.deleteBot,
|
|
245
|
+
getRoles: botAccountsApi.getBotRoles,
|
|
246
|
+
addRole: botAccountsApi.addBotRole,
|
|
247
|
+
removeRole: botAccountsApi.removeBotRole,
|
|
248
|
+
listKeys: botAccountsApi.listBotKeys,
|
|
249
|
+
createKey: botAccountsApi.createBotKey,
|
|
250
|
+
revokeKey: botAccountsApi.revokeBotKey,
|
|
251
|
+
},
|
|
252
|
+
// ── Workflow Sets ──────────────────────────────────────────────────────
|
|
253
|
+
workflowSets: {
|
|
254
|
+
create: bindOptionalAuth(workflowSetsApi.createWorkflowSet, auth),
|
|
255
|
+
list: workflowSetsApi.listWorkflowSets,
|
|
256
|
+
get: workflowSetsApi.getWorkflowSet,
|
|
257
|
+
updatePlan: workflowSetsApi.updateWorkflowSetPlanApi,
|
|
258
|
+
build: workflowSetsApi.buildWorkflowSet,
|
|
259
|
+
deploy: workflowSetsApi.deployWorkflowSet,
|
|
260
|
+
},
|
|
261
|
+
// ── DBA ────────────────────────────────────────────────────────────────
|
|
262
|
+
dba: {
|
|
263
|
+
prune: dbaApi.prune,
|
|
264
|
+
deploy: dbaApi.deploy,
|
|
265
|
+
},
|
|
266
|
+
// ── Namespaces ─────────────────────────────────────────────────────────
|
|
267
|
+
namespaces: {
|
|
268
|
+
list: namespacesApi.listNamespaces,
|
|
269
|
+
register: namespacesApi.registerNamespace,
|
|
270
|
+
},
|
|
271
|
+
// ── Maintenance ────────────────────────────────────────────────────────
|
|
272
|
+
maintenance: {
|
|
273
|
+
getConfig: maintenanceApi.getMaintenanceConfig,
|
|
274
|
+
updateConfig: maintenanceApi.updateMaintenanceConfig,
|
|
275
|
+
},
|
|
276
|
+
// ── Events ─────────────────────────────────────────────────────────────
|
|
277
|
+
events: {
|
|
278
|
+
/**
|
|
279
|
+
* Subscribe to Long Tail events.
|
|
280
|
+
*
|
|
281
|
+
* Supports exact types (`'task.created'`), category wildcards (`'task.*'`),
|
|
282
|
+
* and global wildcard (`'*'`).
|
|
283
|
+
*
|
|
284
|
+
* Returns an unsubscribe function.
|
|
285
|
+
*
|
|
286
|
+
* ```typescript
|
|
287
|
+
* const unsub = lt.events.on('escalation.claimed', (event) => {
|
|
288
|
+
* console.log('claimed:', event.escalationId);
|
|
289
|
+
* });
|
|
290
|
+
* // Later: unsub();
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
on: (pattern, callback) => {
|
|
294
|
+
return callbackAdapter.on(pattern, callback);
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
@@ -9,8 +9,7 @@ export type { QuorumProfile, ThrottleOptions };
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function getEngine(appId: string): Promise<HotMesh>;
|
|
11
11
|
/**
|
|
12
|
-
* List all HotMesh application IDs from the `
|
|
13
|
-
* Excludes soft-deleted (expired) entries.
|
|
12
|
+
* List all active HotMesh application IDs from the `hmsh_applications` table.
|
|
14
13
|
*/
|
|
15
14
|
export declare function listApps(): Promise<ControlPlaneApp[]>;
|
|
16
15
|
/**
|
|
@@ -35,14 +35,14 @@ async function getEngine(appId) {
|
|
|
35
35
|
}
|
|
36
36
|
// ─── Application discovery ──────────────────────────────────────────────────
|
|
37
37
|
/**
|
|
38
|
-
* List all HotMesh application IDs from the `
|
|
39
|
-
* Excludes soft-deleted (expired) entries.
|
|
38
|
+
* List all active HotMesh application IDs from the `hmsh_applications` table.
|
|
40
39
|
*/
|
|
41
40
|
async function listApps() {
|
|
42
41
|
const pool = (0, db_1.getPool)();
|
|
43
42
|
const { rows } = await pool.query(sql_1.LIST_APPS);
|
|
44
43
|
return rows.map((r) => ({
|
|
45
|
-
appId: r.
|
|
44
|
+
appId: r.app_id,
|
|
45
|
+
version: r.version,
|
|
46
46
|
}));
|
|
47
47
|
}
|
|
48
48
|
// ─── Roll call ──────────────────────────────────────────────────────────────
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List all HotMesh applications from the global registry.
|
|
3
|
-
*
|
|
3
|
+
* Active apps only.
|
|
4
4
|
*/
|
|
5
|
-
export declare const LIST_APPS = "\n SELECT
|
|
5
|
+
export declare const LIST_APPS = "\n SELECT app_id, version FROM hmsh_applications\n WHERE active = TRUE\n ORDER BY app_id";
|
|
6
6
|
/**
|
|
7
7
|
* Count pending (unprocessed) stream messages across both tables.
|
|
8
8
|
* expired_at IS NULL = message has not been consumed yet.
|
|
@@ -4,13 +4,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.VOLUME_BY_STREAM = exports.COUNT_PROCESSED_SINCE = exports.COUNT_PENDING = exports.LIST_APPS = void 0;
|
|
5
5
|
/**
|
|
6
6
|
* List all HotMesh applications from the global registry.
|
|
7
|
-
*
|
|
7
|
+
* Active apps only.
|
|
8
8
|
*/
|
|
9
9
|
exports.LIST_APPS = `
|
|
10
|
-
SELECT
|
|
11
|
-
WHERE
|
|
12
|
-
|
|
13
|
-
ORDER BY key`;
|
|
10
|
+
SELECT app_id, version FROM hmsh_applications
|
|
11
|
+
WHERE active = TRUE
|
|
12
|
+
ORDER BY app_id`;
|
|
14
13
|
// ─── Stream statistics ──────────────────────────────────────────────────────
|
|
15
14
|
//
|
|
16
15
|
// HotMesh v0.11.0 split the single `streams` table into `engine_streams`
|
|
@@ -148,12 +148,16 @@ async function listJobs(params) {
|
|
|
148
148
|
CASE WHEN j.updated_at != j.created_at THEN j.updated_at
|
|
149
149
|
WHEN ju.value IS NOT NULL THEN to_timestamp(ju.value, 'YYYYMMDDHH24MISS.MS')
|
|
150
150
|
ELSE j.updated_at
|
|
151
|
-
END as updated_at
|
|
151
|
+
END as updated_at,
|
|
152
|
+
ws.id as set_id
|
|
152
153
|
FROM durable.jobs j
|
|
153
154
|
LEFT JOIN durable.jobs_attributes ju
|
|
154
155
|
ON ju.job_id = j.id
|
|
155
156
|
AND ju.symbol IN (SELECT value FROM ju_symbols)
|
|
156
157
|
AND (ju.dimension IS NULL OR ju.dimension = '')
|
|
158
|
+
LEFT JOIN lt_workflow_sets ws
|
|
159
|
+
ON ws.source_workflow_id = REPLACE(j.key, 'hmsh:durable:j:', '')
|
|
160
|
+
AND j.entity = 'mcpWorkflowPlanner'
|
|
157
161
|
WHERE ${where}
|
|
158
162
|
ORDER BY ${buildJobOrderBy(params.sort_by, params.order)}
|
|
159
163
|
LIMIT $${idx++} OFFSET $${idx++}`, [...values, limit, offset]),
|
|
@@ -165,6 +169,7 @@ async function listJobs(params) {
|
|
|
165
169
|
is_live: row.is_live,
|
|
166
170
|
created_at: row.created_at,
|
|
167
171
|
updated_at: row.updated_at,
|
|
172
|
+
...(row.set_id ? { set_id: row.set_id } : {}),
|
|
168
173
|
}));
|
|
169
174
|
return { jobs, total: parseInt(countResult.rows[0].count, 10) };
|
|
170
175
|
}
|
|
@@ -81,13 +81,11 @@ exports.LOAD_SYMBOL_MAP = LOAD_SYMBOL_MAP;
|
|
|
81
81
|
*/
|
|
82
82
|
async function loadSymbolMap(schema, appId) {
|
|
83
83
|
const pool = (0, db_1.getPool)();
|
|
84
|
-
const symKeyPrefix = `hmsh:${appId}:sym:keys:`;
|
|
85
84
|
try {
|
|
86
|
-
const result = await pool.query((0, exports.LOAD_SYMBOL_MAP)(schema), [
|
|
85
|
+
const result = await pool.query((0, exports.LOAD_SYMBOL_MAP)(schema), ['keys:%']);
|
|
87
86
|
const reverseMap = {};
|
|
88
87
|
for (const row of result.rows) {
|
|
89
|
-
|
|
90
|
-
if (row.field && row.value && symbolName !== '') {
|
|
88
|
+
if (row.field && row.value) {
|
|
91
89
|
reverseMap[row.value] = row.field;
|
|
92
90
|
}
|
|
93
91
|
}
|
|
@@ -39,4 +39,11 @@ export interface WorkflowBuilderInput {
|
|
|
39
39
|
userId?: string;
|
|
40
40
|
}
|
|
41
41
|
export declare function startWorkflowBuilder(input: WorkflowBuilderInput): Promise<McpQueryResult>;
|
|
42
|
+
export interface WorkflowPlannerInput {
|
|
43
|
+
specification: string;
|
|
44
|
+
setId: string;
|
|
45
|
+
wait?: boolean;
|
|
46
|
+
userId?: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function startWorkflowPlanner(input: WorkflowPlannerInput): Promise<McpQueryResult>;
|
|
42
49
|
export declare function describeWorkflow(input: DescribeInput): Promise<DescribeResult>;
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.startMcpQuery = startMcpQuery;
|
|
8
8
|
exports.startWorkflowBuilder = startWorkflowBuilder;
|
|
9
|
+
exports.startWorkflowPlanner = startWorkflowPlanner;
|
|
9
10
|
exports.describeWorkflow = describeWorkflow;
|
|
10
11
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
11
12
|
const db_1 = require("../../lib/db");
|
|
@@ -74,6 +75,35 @@ async function startWorkflowBuilder(input) {
|
|
|
74
75
|
duration_ms: Date.now() - startTime,
|
|
75
76
|
};
|
|
76
77
|
}
|
|
78
|
+
async function startWorkflowPlanner(input) {
|
|
79
|
+
const { specification, setId, wait = true, userId } = input;
|
|
80
|
+
const startTime = Date.now();
|
|
81
|
+
const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
|
|
82
|
+
const workflowId = `wf-planner-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
83
|
+
const handle = await client.workflow.start({
|
|
84
|
+
args: [{
|
|
85
|
+
data: { specification, setId },
|
|
86
|
+
metadata: { source: 'dashboard' },
|
|
87
|
+
lt: { userId },
|
|
88
|
+
}],
|
|
89
|
+
taskQueue: 'long-tail-system',
|
|
90
|
+
workflowName: 'mcpWorkflowPlanner',
|
|
91
|
+
workflowId,
|
|
92
|
+
expire: defaults_1.JOB_EXPIRE_SECS,
|
|
93
|
+
entity: 'mcpWorkflowPlanner',
|
|
94
|
+
});
|
|
95
|
+
if (wait === false) {
|
|
96
|
+
return { workflow_id: workflowId, status: 'started', prompt: specification.slice(0, 200) };
|
|
97
|
+
}
|
|
98
|
+
const result = await handle.result({ state: true });
|
|
99
|
+
const data = result?.data || result;
|
|
100
|
+
return {
|
|
101
|
+
...data,
|
|
102
|
+
prompt: specification.slice(0, 200),
|
|
103
|
+
workflow_id: workflowId,
|
|
104
|
+
duration_ms: Date.now() - startTime,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
77
107
|
// ── Workflow description generation ──────────────────────────────────────────
|
|
78
108
|
async function describeWorkflow(input) {
|
|
79
109
|
const { prompt, result_title, result_summary } = input;
|
|
@@ -58,6 +58,7 @@ function deriveAuthFromToolContext() {
|
|
|
58
58
|
* Resolves the server by ID or name, auto-connecting built-in servers.
|
|
59
59
|
*/
|
|
60
60
|
async function callServerTool(serverId, toolName, args, authContext) {
|
|
61
|
+
logger_1.loggerRegistry.debug(`[lt-mcp:call] entering ${serverId}/${toolName} argKeys=[${Object.keys(args).join(',')}]`);
|
|
61
62
|
const client = await (0, connection_1.resolveClient)(serverId);
|
|
62
63
|
if (!client) {
|
|
63
64
|
throw new Error(`MCP server ${serverId} is not connected`);
|
|
@@ -79,13 +80,24 @@ async function callServerTool(serverId, toolName, args, authContext) {
|
|
|
79
80
|
const textContent = result.content.find((c) => c.type === 'text');
|
|
80
81
|
if (textContent && 'text' in textContent) {
|
|
81
82
|
try {
|
|
82
|
-
|
|
83
|
+
const parsed = JSON.parse(textContent.text);
|
|
84
|
+
const isError = result.isError || ('error' in parsed);
|
|
85
|
+
logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} ok=${!isError} resultKeys=[${Object.keys(parsed).join(',')}]`);
|
|
86
|
+
return parsed;
|
|
83
87
|
}
|
|
84
88
|
catch {
|
|
89
|
+
// Non-JSON text — wrap as error object when isError flag is set
|
|
90
|
+
// to prevent raw strings from being spread as character indices downstream.
|
|
91
|
+
if (result.isError) {
|
|
92
|
+
logger_1.loggerRegistry.warn(`[lt-mcp:call] leaving ${serverId}/${toolName} error: ${textContent.text.slice(0, 200)}`);
|
|
93
|
+
return { error: textContent.text };
|
|
94
|
+
}
|
|
95
|
+
logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} raw text (${textContent.text.length} chars)`);
|
|
85
96
|
return textContent.text;
|
|
86
97
|
}
|
|
87
98
|
}
|
|
88
99
|
}
|
|
100
|
+
logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} non-text content (${Array.isArray(result.content) ? result.content.length : 0} blocks)`);
|
|
89
101
|
return result.content;
|
|
90
102
|
}
|
|
91
103
|
/**
|
|
@@ -20,7 +20,7 @@ exports.GET_JOB_ATTRIBUTES = GET_JOB_ATTRIBUTES;
|
|
|
20
20
|
// ─── Queries (queries.ts) ───────────────────────────────────────────────────
|
|
21
21
|
const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbols AS (
|
|
22
22
|
SELECT value FROM ${schema}.symbols
|
|
23
|
-
WHERE key LIKE '
|
|
23
|
+
WHERE key LIKE 'keys:%' AND field = 'metadata/ju'
|
|
24
24
|
)
|
|
25
25
|
SELECT j.key, j.entity, j.status, j.is_live, j.created_at,
|
|
26
26
|
CASE WHEN j.updated_at != j.created_at THEN j.updated_at
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LTWorkflowSetRecord, LTWorkflowSetStatus, CreateWorkflowSetInput, PlanItem } from '../../types/workflow-set';
|
|
2
|
+
export declare function createWorkflowSet(input: CreateWorkflowSetInput): Promise<LTWorkflowSetRecord>;
|
|
3
|
+
export declare function getWorkflowSet(id: string): Promise<LTWorkflowSetRecord | null>;
|
|
4
|
+
export declare function updateWorkflowSetPlan(id: string, plan: PlanItem[], namespaces: string[]): Promise<LTWorkflowSetRecord | null>;
|
|
5
|
+
export declare function updateWorkflowSetStatus(id: string, status: LTWorkflowSetStatus): Promise<LTWorkflowSetRecord | null>;
|
|
6
|
+
export declare function updateWorkflowSetSourceWorkflow(id: string, sourceWorkflowId: string): Promise<void>;
|
|
7
|
+
export declare function deleteWorkflowSet(id: string): Promise<boolean>;
|
|
8
|
+
export declare function listWorkflowSets(filters: {
|
|
9
|
+
status?: LTWorkflowSetStatus;
|
|
10
|
+
search?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
sets: LTWorkflowSetRecord[];
|
|
15
|
+
total: number;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWorkflowSet = createWorkflowSet;
|
|
4
|
+
exports.getWorkflowSet = getWorkflowSet;
|
|
5
|
+
exports.updateWorkflowSetPlan = updateWorkflowSetPlan;
|
|
6
|
+
exports.updateWorkflowSetStatus = updateWorkflowSetStatus;
|
|
7
|
+
exports.updateWorkflowSetSourceWorkflow = updateWorkflowSetSourceWorkflow;
|
|
8
|
+
exports.deleteWorkflowSet = deleteWorkflowSet;
|
|
9
|
+
exports.listWorkflowSets = listWorkflowSets;
|
|
10
|
+
const db_1 = require("../../lib/db");
|
|
11
|
+
const sql_1 = require("./sql");
|
|
12
|
+
const DEFAULT_LIMIT = 20;
|
|
13
|
+
async function createWorkflowSet(input) {
|
|
14
|
+
const pool = (0, db_1.getPool)();
|
|
15
|
+
const { rows } = await pool.query(sql_1.CREATE_WORKFLOW_SET, [
|
|
16
|
+
input.name,
|
|
17
|
+
input.description || null,
|
|
18
|
+
input.specification,
|
|
19
|
+
JSON.stringify(input.plan || []),
|
|
20
|
+
input.namespaces || [],
|
|
21
|
+
input.source_workflow_id || null,
|
|
22
|
+
]);
|
|
23
|
+
return rows[0];
|
|
24
|
+
}
|
|
25
|
+
async function getWorkflowSet(id) {
|
|
26
|
+
const pool = (0, db_1.getPool)();
|
|
27
|
+
const { rows } = await pool.query(sql_1.GET_WORKFLOW_SET, [id]);
|
|
28
|
+
return rows[0] || null;
|
|
29
|
+
}
|
|
30
|
+
async function updateWorkflowSetPlan(id, plan, namespaces) {
|
|
31
|
+
const pool = (0, db_1.getPool)();
|
|
32
|
+
const { rows } = await pool.query(sql_1.UPDATE_WORKFLOW_SET_PLAN, [
|
|
33
|
+
id,
|
|
34
|
+
JSON.stringify(plan),
|
|
35
|
+
namespaces,
|
|
36
|
+
]);
|
|
37
|
+
return rows[0] || null;
|
|
38
|
+
}
|
|
39
|
+
async function updateWorkflowSetStatus(id, status) {
|
|
40
|
+
const pool = (0, db_1.getPool)();
|
|
41
|
+
const { rows } = await pool.query(sql_1.UPDATE_WORKFLOW_SET_STATUS, [id, status]);
|
|
42
|
+
return rows[0] || null;
|
|
43
|
+
}
|
|
44
|
+
async function updateWorkflowSetSourceWorkflow(id, sourceWorkflowId) {
|
|
45
|
+
const pool = (0, db_1.getPool)();
|
|
46
|
+
await pool.query('UPDATE lt_workflow_sets SET source_workflow_id = $2 WHERE id = $1', [id, sourceWorkflowId]);
|
|
47
|
+
}
|
|
48
|
+
async function deleteWorkflowSet(id) {
|
|
49
|
+
const pool = (0, db_1.getPool)();
|
|
50
|
+
const { rowCount } = await pool.query(sql_1.DELETE_WORKFLOW_SET, [id]);
|
|
51
|
+
return (rowCount ?? 0) > 0;
|
|
52
|
+
}
|
|
53
|
+
async function listWorkflowSets(filters) {
|
|
54
|
+
const pool = (0, db_1.getPool)();
|
|
55
|
+
const conditions = [];
|
|
56
|
+
const values = [];
|
|
57
|
+
let idx = 1;
|
|
58
|
+
if (filters.status) {
|
|
59
|
+
conditions.push(`status = $${idx++}`);
|
|
60
|
+
values.push(filters.status);
|
|
61
|
+
}
|
|
62
|
+
if (filters.search) {
|
|
63
|
+
conditions.push(`(name ILIKE $${idx} OR description ILIKE $${idx})`);
|
|
64
|
+
values.push(`%${filters.search}%`);
|
|
65
|
+
idx++;
|
|
66
|
+
}
|
|
67
|
+
const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
68
|
+
const limit = filters.limit || DEFAULT_LIMIT;
|
|
69
|
+
const offset = filters.offset || 0;
|
|
70
|
+
const [countResult, dataResult] = await Promise.all([
|
|
71
|
+
pool.query(`SELECT COUNT(*) FROM lt_workflow_sets ${where}`, values),
|
|
72
|
+
pool.query(`${sql_1.LIST_WORKFLOW_SETS_BASE} ${where} ORDER BY created_at DESC LIMIT $${idx++} OFFSET $${idx++}`, [...values, limit, offset]),
|
|
73
|
+
]);
|
|
74
|
+
return {
|
|
75
|
+
sets: dataResult.rows,
|
|
76
|
+
total: parseInt(countResult.rows[0].count, 10),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createWorkflowSet, getWorkflowSet, updateWorkflowSetPlan, updateWorkflowSetStatus, updateWorkflowSetSourceWorkflow, deleteWorkflowSet, listWorkflowSets, } from './db';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listWorkflowSets = exports.deleteWorkflowSet = exports.updateWorkflowSetSourceWorkflow = exports.updateWorkflowSetStatus = exports.updateWorkflowSetPlan = exports.getWorkflowSet = exports.createWorkflowSet = void 0;
|
|
4
|
+
var db_1 = require("./db");
|
|
5
|
+
Object.defineProperty(exports, "createWorkflowSet", { enumerable: true, get: function () { return db_1.createWorkflowSet; } });
|
|
6
|
+
Object.defineProperty(exports, "getWorkflowSet", { enumerable: true, get: function () { return db_1.getWorkflowSet; } });
|
|
7
|
+
Object.defineProperty(exports, "updateWorkflowSetPlan", { enumerable: true, get: function () { return db_1.updateWorkflowSetPlan; } });
|
|
8
|
+
Object.defineProperty(exports, "updateWorkflowSetStatus", { enumerable: true, get: function () { return db_1.updateWorkflowSetStatus; } });
|
|
9
|
+
Object.defineProperty(exports, "updateWorkflowSetSourceWorkflow", { enumerable: true, get: function () { return db_1.updateWorkflowSetSourceWorkflow; } });
|
|
10
|
+
Object.defineProperty(exports, "deleteWorkflowSet", { enumerable: true, get: function () { return db_1.deleteWorkflowSet; } });
|
|
11
|
+
Object.defineProperty(exports, "listWorkflowSets", { enumerable: true, get: function () { return db_1.listWorkflowSets; } });
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const CREATE_WORKFLOW_SET = "\n INSERT INTO lt_workflow_sets (name, description, specification, plan, namespaces, source_workflow_id)\n VALUES ($1, $2, $3, $4, $5, $6)\n RETURNING *";
|
|
2
|
+
export declare const GET_WORKFLOW_SET = "\n SELECT * FROM lt_workflow_sets WHERE id = $1";
|
|
3
|
+
export declare const UPDATE_WORKFLOW_SET_PLAN = "\n UPDATE lt_workflow_sets\n SET plan = $2, namespaces = $3, status = 'planned', updated_at = NOW()\n WHERE id = $1\n RETURNING *";
|
|
4
|
+
export declare const UPDATE_WORKFLOW_SET_STATUS = "\n UPDATE lt_workflow_sets\n SET status = $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *";
|
|
5
|
+
export declare const DELETE_WORKFLOW_SET = "\n DELETE FROM lt_workflow_sets WHERE id = $1";
|
|
6
|
+
export declare const LIST_WORKFLOW_SETS_BASE = "\n SELECT * FROM lt_workflow_sets";
|