@hotmeshio/long-tail 0.1.14 → 0.1.16
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 +15 -0
- package/build/api/escalations/bulk.d.ts +78 -0
- package/build/api/escalations/bulk.js +279 -0
- package/build/api/escalations/claim.d.ts +30 -0
- package/build/api/escalations/claim.js +121 -0
- package/build/api/escalations/create.d.ts +29 -0
- package/build/api/escalations/create.js +101 -0
- package/build/api/escalations/helpers.d.ts +10 -0
- package/build/api/escalations/helpers.js +80 -0
- package/build/api/escalations/index.d.ts +6 -0
- package/build/api/escalations/index.js +26 -0
- package/build/api/escalations/list.d.ts +75 -0
- package/build/api/escalations/list.js +170 -0
- package/build/api/escalations/resolve.d.ts +18 -0
- package/build/api/escalations/resolve.js +243 -0
- package/build/api/escalations/single.d.ts +37 -0
- package/build/api/escalations/single.js +123 -0
- package/build/api/files.d.ts +3 -0
- package/build/api/files.js +18 -1
- package/build/api/knowledge.d.ts +36 -0
- package/build/api/knowledge.js +112 -0
- package/build/api/mcp/index.d.ts +2 -0
- package/build/api/mcp/index.js +16 -0
- package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
- package/build/api/{mcp.js → mcp/servers.js} +4 -65
- package/build/api/mcp/tools.d.ts +33 -0
- package/build/api/mcp/tools.js +64 -0
- package/build/api/settings.js +6 -1
- package/build/api/workflows/config.d.ts +64 -0
- package/build/api/workflows/config.js +142 -0
- package/build/api/workflows/discovery.d.ts +29 -0
- package/build/api/workflows/discovery.js +153 -0
- package/build/api/workflows/index.d.ts +3 -0
- package/build/api/workflows/index.js +18 -0
- package/build/api/workflows/invocation.d.ts +67 -0
- package/build/api/workflows/invocation.js +188 -0
- package/build/api/yaml-workflows/cron.d.ts +39 -0
- package/build/api/yaml-workflows/cron.js +127 -0
- package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
- package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +99 -380
- package/build/api/yaml-workflows/deploy.d.ts +71 -0
- package/build/api/yaml-workflows/deploy.js +223 -0
- package/build/api/yaml-workflows/helpers.d.ts +2 -0
- package/build/api/yaml-workflows/helpers.js +8 -0
- package/build/api/yaml-workflows/index.d.ts +4 -0
- package/build/api/yaml-workflows/index.js +27 -0
- package/build/api/yaml-workflows/versions.d.ts +43 -0
- package/build/api/yaml-workflows/versions.js +124 -0
- package/build/bin/ltc.d.ts +2 -0
- package/build/bin/ltc.js +220 -0
- package/build/examples/seed-data.d.ts +55 -0
- package/build/examples/seed-data.js +161 -0
- package/build/examples/seed.js +7 -164
- package/build/index.d.ts +1 -1
- package/build/lib/cli/auth.d.ts +23 -0
- package/build/lib/cli/auth.js +167 -0
- package/build/lib/cli/client.d.ts +6 -0
- package/build/lib/cli/client.js +31 -0
- package/build/lib/cli/commands/escalations.d.ts +19 -0
- package/build/lib/cli/commands/escalations.js +69 -0
- package/build/lib/cli/commands/knowledge.d.ts +18 -0
- package/build/lib/cli/commands/knowledge.js +87 -0
- package/build/lib/cli/commands/mcp.d.ts +8 -0
- package/build/lib/cli/commands/mcp.js +33 -0
- package/build/lib/cli/commands/pipelines.d.ts +16 -0
- package/build/lib/cli/commands/pipelines.js +67 -0
- package/build/lib/cli/commands/status.d.ts +1 -0
- package/build/lib/cli/commands/status.js +28 -0
- package/build/lib/cli/commands/users.d.ts +7 -0
- package/build/lib/cli/commands/users.js +25 -0
- package/build/lib/cli/commands/workflows.d.ts +16 -0
- package/build/lib/cli/commands/workflows.js +104 -0
- package/build/lib/cli/compile.d.ts +2 -0
- package/build/lib/cli/compile.js +165 -0
- package/build/lib/cli/format.d.ts +23 -0
- package/build/lib/cli/format.js +94 -0
- package/build/lib/cli/init.d.ts +1 -0
- package/build/lib/cli/init.js +61 -0
- package/build/lib/cli/output.d.ts +27 -0
- package/build/lib/cli/output.js +126 -0
- package/build/lib/cli/scanner.d.ts +10 -0
- package/build/lib/cli/scanner.js +164 -0
- package/build/lib/cli/types.d.ts +16 -0
- package/build/lib/cli/types.js +2 -0
- package/build/lib/db/schemas/schemas/001_schema.sql +485 -0
- package/build/lib/db/schemas/schemas/002_seed.sql +92 -0
- package/build/lib/events/socketio.d.ts +12 -0
- package/build/lib/events/socketio.js +24 -1
- package/build/lib/logger/index.d.ts +0 -9
- package/build/lib/logger/index.js +9 -4
- package/build/lib/storage/index.js +2 -2
- package/build/routes/file-browser.js +14 -0
- package/build/routes/index.js +4 -0
- package/build/routes/knowledge.d.ts +2 -0
- package/build/routes/knowledge.js +141 -0
- package/build/routes/nats-credentials.d.ts +2 -0
- package/build/routes/nats-credentials.js +22 -0
- package/build/routes/yaml-workflows/crud.js +9 -0
- package/build/sdk/index.d.ts +17 -0
- package/build/sdk/index.js +19 -0
- package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
- package/build/services/mcp/client/connection-dispatch.js +78 -0
- package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
- package/build/services/mcp/client/connection-lifecycle.js +296 -0
- package/build/services/mcp/client/connection-test.d.ts +10 -0
- package/build/services/mcp/client/connection-test.js +49 -0
- package/build/services/mcp/client/connection.d.ts +3 -68
- package/build/services/mcp/client/connection.js +15 -393
- package/build/services/mcp/server-lifecycle.d.ts +27 -0
- package/build/services/mcp/server-lifecycle.js +49 -0
- package/build/services/mcp/server-tools.d.ts +13 -0
- package/build/services/mcp/server-tools.js +287 -0
- package/build/services/mcp/server.d.ts +2 -26
- package/build/services/mcp/server.js +7 -315
- package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
- package/build/services/yaml-workflow/builder-regenerate.js +111 -0
- package/build/services/yaml-workflow/db-versions.d.ts +17 -0
- package/build/services/yaml-workflow/db-versions.js +76 -0
- package/build/services/yaml-workflow/db.d.ts +3 -13
- package/build/services/yaml-workflow/db.js +15 -71
- package/build/services/yaml-workflow/deployer-helpers.js +48 -17
- package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
- package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
- package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
- package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
- package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
- package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
- package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
- package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
- package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
- package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
- package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
- package/build/services/yaml-workflow/workers/register.js +4 -2
- package/build/start/adapters.js +4 -1
- package/build/start/socket-auth.d.ts +13 -0
- package/build/start/socket-auth.js +32 -0
- package/build/start/workers.js +6 -5
- package/build/system/activities/file-storage.d.ts +4 -0
- package/build/system/activities/file-storage.js +7 -1
- package/build/system/activities/knowledge.d.ts +23 -0
- package/build/system/activities/knowledge.js +50 -10
- package/build/system/activities/sql.d.ts +3 -0
- package/build/system/activities/sql.js +25 -1
- package/build/system/mcp-servers/file-storage.js +3 -1
- package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
- package/build/system/mcp-servers/human-queue-schemas.js +42 -0
- package/build/system/mcp-servers/human-queue.d.ts +2 -6
- package/build/system/mcp-servers/human-queue.js +9 -51
- package/build/system/mcp-servers/knowledge.js +43 -9
- package/build/system/mcp-servers/workflow-compiler.js +54 -0
- package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
- package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
- package/build/system/workflows/mcp-triage/index.js +17 -75
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
- package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-Bprul9Eb.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-Bprul9Eb.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DcvILNUf.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DcvILNUf.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-BWPbzgEe.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-BWPbzgEe.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-Cy6KVLfC.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-Cy6KVLfC.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-CRED8hvk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-CRED8hvk.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-BUdvxiE3.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-BUdvxiE3.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-eOk2EqQ5.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-eOk2EqQ5.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-bd2PTBJd.js} +2 -2
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-bd2PTBJd.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-BGo8vyus.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-BGo8vyus.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-BygtU-Rh.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-BygtU-Rh.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DUEcN5MP.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DUEcN5MP.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-CmFhswLW.js} +2 -2
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-CmFhswLW.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-BQNzsd3A.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-BQNzsd3A.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-OWOn-HiC.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-OWOn-HiC.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-OkEzvClD.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-OkEzvClD.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +1 -0
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-BAuOf5TL.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-BAuOf5TL.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-DMeiG4i_.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-DMeiG4i_.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-CG3cNJh8.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-CG3cNJh8.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-Dir9Rlnx.js} +2 -2
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-Dir9Rlnx.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-OqWC6Azy.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-OqWC6Azy.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-FJIemmrC.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-FJIemmrC.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-Br5y9qNO.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-Br5y9qNO.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-C7D5d_HY.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-C7D5d_HY.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-DZIP6grw.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-DZIP6grw.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-BQoPYkeB.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-BQoPYkeB.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-D6nMxMvp.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-D6nMxMvp.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +2 -0
- package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CwLnJFhy.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-JqgAB0p3.js} +2 -2
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-JqgAB0p3.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js.map +1 -0
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-B-WLhOaH.js} +2 -2
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-B-WLhOaH.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-DVCf2ncM.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-DVCf2ncM.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-D9Xvdf18.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-D9Xvdf18.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-CJHMzYJj.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-CJHMzYJj.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-DcPnUnSJ.js} +2 -2
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-DcPnUnSJ.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DftmYWD7.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DftmYWD7.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-BzduBqwy.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-BzduBqwy.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-DeewV4Gp.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-DeewV4Gp.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-DJZq-e4R.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-DJZq-e4R.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Dx5uwGfS.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Dx5uwGfS.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-CnGk7MgL.js} +2 -2
- package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-CnGk7MgL.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CPQ0fIwf.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CPQ0fIwf.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-BrD5d1AG.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-BrD5d1AG.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-BzjhABZP.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-BzjhABZP.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-lBp2E6rN.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-lBp2E6rN.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +1 -0
- package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-fc_O_YIq.js} +2 -2
- package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-fc_O_YIq.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-BYhLYHBz.js} +2 -2
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-BYhLYHBz.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-DjJyuC1g.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-DjJyuC1g.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CQG3Rh2y.js} +2 -2
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CQG3Rh2y.js.map} +1 -1
- package/dashboard/dist/assets/{index-DX6zxr6t.js → index-2nBhR7Dg.js} +2 -2
- package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-2nBhR7Dg.js.map} +1 -1
- package/dashboard/dist/assets/index-4IUoh_hd.js +2 -0
- package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-4IUoh_hd.js.map} +1 -1
- package/dashboard/dist/assets/index-B2CqPzLK.js +2 -0
- package/dashboard/dist/assets/index-B2CqPzLK.js.map +1 -0
- package/dashboard/dist/assets/index-B78xalb4.js +2 -0
- package/dashboard/dist/assets/index-B78xalb4.js.map +1 -0
- package/dashboard/dist/assets/index-BI8r69O_.js +2 -0
- package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-BI8r69O_.js.map} +1 -1
- package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
- package/dashboard/dist/assets/{index-BmVCyB6C.js → index-CUqCBBZG.js} +2 -2
- package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-CUqCBBZG.js.map} +1 -1
- package/dashboard/dist/assets/index-D51PaQZY.js +2 -0
- package/dashboard/dist/assets/index-D51PaQZY.js.map +1 -0
- package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-DNtXXy1o.js} +2 -2
- package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-DNtXXy1o.js.map} +1 -1
- package/dashboard/dist/assets/{index-DNytWfSZ.js → index-DR4qQvlW.js} +2 -2
- package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-DR4qQvlW.js.map} +1 -1
- package/dashboard/dist/assets/index-Dh0PCbR-.js +15 -0
- package/dashboard/dist/assets/index-Dh0PCbR-.js.map +1 -0
- package/dashboard/dist/assets/index-KYpLvJKB.js +5 -0
- package/dashboard/dist/assets/index-KYpLvJKB.js.map +1 -0
- package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-sNrqYt0Q.js} +73 -73
- package/dashboard/dist/assets/index-sNrqYt0Q.js.map +1 -0
- package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-D2XfRh8v.js} +2 -2
- package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-D2XfRh8v.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-CIx_mIC7.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-CIx_mIC7.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-C9_J4LIH.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-C9_J4LIH.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-BwMljx6f.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-BwMljx6f.js.map} +1 -1
- package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-Bd_sTV6I.js} +2 -2
- package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-Bd_sTV6I.js.map} +1 -1
- package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-BCb8eFyA.js} +2 -2
- package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-BCb8eFyA.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-Bq54qGGq.js} +2 -2
- package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-Bq54qGGq.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-BTbGf536.js +2 -0
- package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BTbGf536.js.map} +1 -1
- package/dashboard/dist/assets/useYamlActivityEvents-CsYP09W5.js +2 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-CsYP09W5.js.map} +1 -1
- package/dashboard/dist/assets/{users-CxIMy_xw.js → users-BTBhafGc.js} +2 -2
- package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-BTBhafGc.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-BkzA4ahe.js} +2 -2
- package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-BkzA4ahe.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-Cs0EYp0F.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-Cs0EYp0F.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/file-browser.md +101 -0
- package/docs/api/http/knowledge.md +203 -0
- package/docs/api/http/settings.md +6 -4
- package/docs/api/sdk/files.md +68 -0
- package/docs/api/sdk/knowledge.md +126 -0
- package/docs/api/sdk/settings.md +3 -2
- package/docs/cli.md +171 -0
- package/docs/compilation.md +16 -0
- package/docs/compiler.md +311 -0
- package/docs/events.md +19 -0
- package/docs/workflows.md +19 -0
- package/package.json +13 -2
- package/build/api/escalations.d.ts +0 -271
- package/build/api/escalations.js +0 -932
- package/build/api/workflows.d.ts +0 -158
- package/build/api/workflows.js +0 -414
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
- package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
- package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
- package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
- package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
- package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
- package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
- package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
- package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
- package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
- package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
- package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
- package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
- package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
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.listWorkflowConfigs = listWorkflowConfigs;
|
|
37
|
+
exports.getWorkflowConfig = getWorkflowConfig;
|
|
38
|
+
exports.upsertWorkflowConfig = upsertWorkflowConfig;
|
|
39
|
+
exports.deleteWorkflowConfig = deleteWorkflowConfig;
|
|
40
|
+
const configService = __importStar(require("../../services/config"));
|
|
41
|
+
const cron_1 = require("../../services/cron");
|
|
42
|
+
const ltconfig_1 = require("../../modules/ltconfig");
|
|
43
|
+
/**
|
|
44
|
+
* List all registered workflow configurations.
|
|
45
|
+
*
|
|
46
|
+
* @returns `{ status: 200, data: { workflows: LTWorkflowConfig[] } }`
|
|
47
|
+
*/
|
|
48
|
+
async function listWorkflowConfigs() {
|
|
49
|
+
try {
|
|
50
|
+
const configs = await configService.listWorkflowConfigs();
|
|
51
|
+
return { status: 200, data: { workflows: configs } };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return { status: 500, error: err.message };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a single workflow configuration by type.
|
|
59
|
+
*
|
|
60
|
+
* @param input.type — workflow type name (e.g. `"reviewContent"`)
|
|
61
|
+
* @returns `{ status: 200, data: <config> }` or 404
|
|
62
|
+
*/
|
|
63
|
+
async function getWorkflowConfig(input) {
|
|
64
|
+
try {
|
|
65
|
+
const config = await configService.getWorkflowConfig(input.type);
|
|
66
|
+
if (!config) {
|
|
67
|
+
return { status: 404, error: 'Workflow config not found' };
|
|
68
|
+
}
|
|
69
|
+
return { status: 200, data: config };
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return { status: 500, error: err.message };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create or replace a workflow configuration.
|
|
77
|
+
*
|
|
78
|
+
* Invalidates the config cache and restarts the cron schedule if one
|
|
79
|
+
* is defined. Idempotent — safe to call repeatedly with the same input.
|
|
80
|
+
*
|
|
81
|
+
* @param input.type — workflow type name
|
|
82
|
+
* @param input.invocable — whether the workflow can be started via the API
|
|
83
|
+
* @param input.task_queue — HotMesh task queue
|
|
84
|
+
* @param input.default_role — default escalation role
|
|
85
|
+
* @param input.description — human-readable description
|
|
86
|
+
* @param input.execute_as — service account for proxy invocation
|
|
87
|
+
* @param input.roles — roles that can resolve escalations
|
|
88
|
+
* @param input.invocation_roles — roles that can invoke this workflow
|
|
89
|
+
* @param input.consumes — workflow types whose data this workflow consumes
|
|
90
|
+
* @param input.tool_tags — MCP tool tags for discovery
|
|
91
|
+
* @param input.envelope_schema — JSON Schema for envelope.data validation
|
|
92
|
+
* @param input.resolver_schema — JSON Schema for resolver payload validation
|
|
93
|
+
* @param input.cron_schedule — cron expression for scheduled execution
|
|
94
|
+
* @returns `{ status: 200, data: <saved config> }`
|
|
95
|
+
*/
|
|
96
|
+
async function upsertWorkflowConfig(input) {
|
|
97
|
+
try {
|
|
98
|
+
const config = await configService.upsertWorkflowConfig({
|
|
99
|
+
workflow_type: input.type,
|
|
100
|
+
invocable: input.invocable ?? false,
|
|
101
|
+
task_queue: input.task_queue ?? null,
|
|
102
|
+
default_role: input.default_role ?? 'reviewer',
|
|
103
|
+
description: input.description ?? null,
|
|
104
|
+
execute_as: input.execute_as ?? null,
|
|
105
|
+
roles: input.roles ?? [],
|
|
106
|
+
invocation_roles: input.invocation_roles ?? [],
|
|
107
|
+
consumes: input.consumes ?? [],
|
|
108
|
+
tool_tags: input.tool_tags ?? [],
|
|
109
|
+
envelope_schema: input.envelope_schema ?? null,
|
|
110
|
+
resolver_schema: input.resolver_schema ?? null,
|
|
111
|
+
cron_schedule: input.cron_schedule ?? null,
|
|
112
|
+
});
|
|
113
|
+
ltconfig_1.ltConfig.invalidate();
|
|
114
|
+
await cron_1.cronRegistry.restartCron(config);
|
|
115
|
+
return { status: 200, data: config };
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
return { status: 500, error: err.message };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Delete a workflow configuration.
|
|
123
|
+
*
|
|
124
|
+
* Removes the config record and invalidates the cache. Active workers
|
|
125
|
+
* continue running — this only removes the config/interceptor binding.
|
|
126
|
+
*
|
|
127
|
+
* @param input.type — workflow type name
|
|
128
|
+
* @returns `{ status: 200, data: { deleted: true, workflow_type } }` or 404
|
|
129
|
+
*/
|
|
130
|
+
async function deleteWorkflowConfig(input) {
|
|
131
|
+
try {
|
|
132
|
+
const deleted = await configService.deleteWorkflowConfig(input.type);
|
|
133
|
+
if (!deleted) {
|
|
134
|
+
return { status: 404, error: 'Workflow config not found' };
|
|
135
|
+
}
|
|
136
|
+
ltconfig_1.ltConfig.invalidate();
|
|
137
|
+
return { status: 200, data: { deleted: true, workflow_type: input.type } };
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return { status: 500, error: err.message };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { LTApiResult } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* List active workflow workers with their registration status.
|
|
4
|
+
*
|
|
5
|
+
* @param input.include_system — include system workflows (default: false)
|
|
6
|
+
* @returns `{ status: 200, data: { workers: [{ name, task_queue, registered, system }] } }`
|
|
7
|
+
*/
|
|
8
|
+
export declare function listWorkers(input: {
|
|
9
|
+
include_system?: boolean;
|
|
10
|
+
}): Promise<LTApiResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Discover all known workflow types from workers, history, and config.
|
|
13
|
+
*
|
|
14
|
+
* Merges three sources: active in-memory workers, historical entities
|
|
15
|
+
* from the durable jobs table, and registered workflow configs. Returns
|
|
16
|
+
* a unified list with status flags for each type.
|
|
17
|
+
*
|
|
18
|
+
* @param input.include_system — include system workflows (default: false)
|
|
19
|
+
* @returns `{ status: 200, data: { workflows: [{ workflow_type, task_queue, registered, active, invocable, ... }] } }`
|
|
20
|
+
*/
|
|
21
|
+
export declare function listDiscoveredWorkflows(input: {
|
|
22
|
+
include_system?: boolean;
|
|
23
|
+
}): Promise<LTApiResult>;
|
|
24
|
+
/**
|
|
25
|
+
* List all cron-scheduled workflows and their active state.
|
|
26
|
+
*
|
|
27
|
+
* @returns `{ status: 200, data: { schedules: [{ workflow_type, cron_schedule, active, ... }] } }`
|
|
28
|
+
*/
|
|
29
|
+
export declare function getCronStatus(): Promise<LTApiResult>;
|
|
@@ -0,0 +1,153 @@
|
|
|
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.listWorkers = listWorkers;
|
|
37
|
+
exports.listDiscoveredWorkflows = listDiscoveredWorkflows;
|
|
38
|
+
exports.getCronStatus = getCronStatus;
|
|
39
|
+
const configService = __importStar(require("../../services/config"));
|
|
40
|
+
const cron_1 = require("../../services/cron");
|
|
41
|
+
const db_1 = require("../../lib/db");
|
|
42
|
+
const registry_1 = require("../../services/workers/registry");
|
|
43
|
+
const sql_1 = require("../../services/mcp-runs/sql");
|
|
44
|
+
/**
|
|
45
|
+
* List active workflow workers with their registration status.
|
|
46
|
+
*
|
|
47
|
+
* @param input.include_system — include system workflows (default: false)
|
|
48
|
+
* @returns `{ status: 200, data: { workers: [{ name, task_queue, registered, system }] } }`
|
|
49
|
+
*/
|
|
50
|
+
async function listWorkers(input) {
|
|
51
|
+
try {
|
|
52
|
+
const activeWorkers = (0, registry_1.getRegisteredWorkers)();
|
|
53
|
+
const configs = await configService.listWorkflowConfigs();
|
|
54
|
+
const registeredTypes = new Set(configs.map((c) => c.workflow_type));
|
|
55
|
+
const workers = [...activeWorkers.entries()]
|
|
56
|
+
.filter(([name]) => input.include_system || !registry_1.SYSTEM_WORKFLOWS.has(name))
|
|
57
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
58
|
+
.map(([name, { taskQueue }]) => ({
|
|
59
|
+
name,
|
|
60
|
+
task_queue: taskQueue,
|
|
61
|
+
registered: registeredTypes.has(name),
|
|
62
|
+
system: registry_1.SYSTEM_WORKFLOWS.has(name),
|
|
63
|
+
}));
|
|
64
|
+
return { status: 200, data: { workers } };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return { status: 500, error: err.message };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Discover all known workflow types from workers, history, and config.
|
|
72
|
+
*
|
|
73
|
+
* Merges three sources: active in-memory workers, historical entities
|
|
74
|
+
* from the durable jobs table, and registered workflow configs. Returns
|
|
75
|
+
* a unified list with status flags for each type.
|
|
76
|
+
*
|
|
77
|
+
* @param input.include_system — include system workflows (default: false)
|
|
78
|
+
* @returns `{ status: 200, data: { workflows: [{ workflow_type, task_queue, registered, active, invocable, ... }] } }`
|
|
79
|
+
*/
|
|
80
|
+
async function listDiscoveredWorkflows(input) {
|
|
81
|
+
try {
|
|
82
|
+
// 1. Active workers from in-memory registry
|
|
83
|
+
const activeWorkers = (0, registry_1.getRegisteredWorkers)();
|
|
84
|
+
// 2. Historical entities from durable.jobs
|
|
85
|
+
const pool = (0, db_1.getPool)();
|
|
86
|
+
const { rows: entityRows } = await pool.query(sql_1.DISTINCT_ENTITIES_DURABLE);
|
|
87
|
+
const historicalEntities = new Set(entityRows.map((r) => r.entity));
|
|
88
|
+
// 3. Registered configs
|
|
89
|
+
const configs = await configService.listWorkflowConfigs();
|
|
90
|
+
const configMap = new Map(configs.map((c) => [c.workflow_type, c]));
|
|
91
|
+
// Build unified set of all workflow types
|
|
92
|
+
const allTypes = new Set();
|
|
93
|
+
for (const [name] of activeWorkers)
|
|
94
|
+
allTypes.add(name);
|
|
95
|
+
for (const entity of historicalEntities)
|
|
96
|
+
allTypes.add(entity);
|
|
97
|
+
for (const c of configs)
|
|
98
|
+
allTypes.add(c.workflow_type);
|
|
99
|
+
const workflows = [...allTypes]
|
|
100
|
+
.filter((t) => input.include_system || !registry_1.SYSTEM_WORKFLOWS.has(t))
|
|
101
|
+
.sort()
|
|
102
|
+
.map((workflowType) => {
|
|
103
|
+
const config = configMap.get(workflowType);
|
|
104
|
+
const worker = activeWorkers.get(workflowType);
|
|
105
|
+
const hasCertification = !!(config &&
|
|
106
|
+
((config.roles?.length ?? 0) > 0 ||
|
|
107
|
+
(config.consumes?.length ?? 0) > 0));
|
|
108
|
+
const tier = !config ? 'durable' : hasCertification ? 'certified' : 'configured';
|
|
109
|
+
return {
|
|
110
|
+
workflow_type: workflowType,
|
|
111
|
+
task_queue: config?.task_queue ?? worker?.taskQueue ?? null,
|
|
112
|
+
tier,
|
|
113
|
+
registered: !!config,
|
|
114
|
+
active: !!worker,
|
|
115
|
+
invocable: config?.invocable ?? !!worker,
|
|
116
|
+
system: registry_1.SYSTEM_WORKFLOWS.has(workflowType),
|
|
117
|
+
description: config?.description ?? null,
|
|
118
|
+
roles: config?.roles ?? [],
|
|
119
|
+
invocation_roles: config?.invocation_roles ?? [],
|
|
120
|
+
execute_as: config?.execute_as ?? null,
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
return { status: 200, data: { workflows } };
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
return { status: 500, error: err.message };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* List all cron-scheduled workflows and their active state.
|
|
131
|
+
*
|
|
132
|
+
* @returns `{ status: 200, data: { schedules: [{ workflow_type, cron_schedule, active, ... }] } }`
|
|
133
|
+
*/
|
|
134
|
+
async function getCronStatus() {
|
|
135
|
+
try {
|
|
136
|
+
const configs = await configService.listWorkflowConfigs();
|
|
137
|
+
const cronConfigs = configs.filter((c) => c.cron_schedule);
|
|
138
|
+
const activeTypes = cron_1.cronRegistry.activeWorkflowTypes;
|
|
139
|
+
const schedules = cronConfigs.map((c) => ({
|
|
140
|
+
workflow_type: c.workflow_type,
|
|
141
|
+
cron_schedule: c.cron_schedule,
|
|
142
|
+
description: c.description,
|
|
143
|
+
task_queue: c.task_queue,
|
|
144
|
+
invocable: c.invocable,
|
|
145
|
+
active: activeTypes.includes(c.workflow_type),
|
|
146
|
+
envelope_schema: c.envelope_schema,
|
|
147
|
+
}));
|
|
148
|
+
return { status: 200, data: { schedules } };
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
return { status: 500, error: err.message };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { invokeWorkflow, getWorkflowStatus, getWorkflowResult, terminateWorkflow, exportWorkflow, } from './invocation';
|
|
2
|
+
export { listWorkers, listDiscoveredWorkflows, getCronStatus, } from './discovery';
|
|
3
|
+
export { listWorkflowConfigs, getWorkflowConfig, upsertWorkflowConfig, deleteWorkflowConfig, } from './config';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteWorkflowConfig = exports.upsertWorkflowConfig = exports.getWorkflowConfig = exports.listWorkflowConfigs = exports.getCronStatus = exports.listDiscoveredWorkflows = exports.listWorkers = exports.exportWorkflow = exports.terminateWorkflow = exports.getWorkflowResult = exports.getWorkflowStatus = exports.invokeWorkflow = void 0;
|
|
4
|
+
var invocation_1 = require("./invocation");
|
|
5
|
+
Object.defineProperty(exports, "invokeWorkflow", { enumerable: true, get: function () { return invocation_1.invokeWorkflow; } });
|
|
6
|
+
Object.defineProperty(exports, "getWorkflowStatus", { enumerable: true, get: function () { return invocation_1.getWorkflowStatus; } });
|
|
7
|
+
Object.defineProperty(exports, "getWorkflowResult", { enumerable: true, get: function () { return invocation_1.getWorkflowResult; } });
|
|
8
|
+
Object.defineProperty(exports, "terminateWorkflow", { enumerable: true, get: function () { return invocation_1.terminateWorkflow; } });
|
|
9
|
+
Object.defineProperty(exports, "exportWorkflow", { enumerable: true, get: function () { return invocation_1.exportWorkflow; } });
|
|
10
|
+
var discovery_1 = require("./discovery");
|
|
11
|
+
Object.defineProperty(exports, "listWorkers", { enumerable: true, get: function () { return discovery_1.listWorkers; } });
|
|
12
|
+
Object.defineProperty(exports, "listDiscoveredWorkflows", { enumerable: true, get: function () { return discovery_1.listDiscoveredWorkflows; } });
|
|
13
|
+
Object.defineProperty(exports, "getCronStatus", { enumerable: true, get: function () { return discovery_1.getCronStatus; } });
|
|
14
|
+
var config_1 = require("./config");
|
|
15
|
+
Object.defineProperty(exports, "listWorkflowConfigs", { enumerable: true, get: function () { return config_1.listWorkflowConfigs; } });
|
|
16
|
+
Object.defineProperty(exports, "getWorkflowConfig", { enumerable: true, get: function () { return config_1.getWorkflowConfig; } });
|
|
17
|
+
Object.defineProperty(exports, "upsertWorkflowConfig", { enumerable: true, get: function () { return config_1.upsertWorkflowConfig; } });
|
|
18
|
+
Object.defineProperty(exports, "deleteWorkflowConfig", { enumerable: true, get: function () { return config_1.deleteWorkflowConfig; } });
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Start a workflow — proxy for `Durable.Client.workflow.start()`.
|
|
4
|
+
*
|
|
5
|
+
* Resolves the task queue, enforces auth/role constraints, builds the
|
|
6
|
+
* LTEnvelope with IAM context, and delegates to the Durable client.
|
|
7
|
+
* Any WorkflowOptions field (workflowId, expire, entity, namespace,
|
|
8
|
+
* search, signalIn, pending, etc.) can be passed via `options` and
|
|
9
|
+
* flows through to the Durable client unchanged.
|
|
10
|
+
*
|
|
11
|
+
* @see https://docs.hotmesh.io/types/types_durable.WorkflowOptions.html
|
|
12
|
+
*/
|
|
13
|
+
export declare function invokeWorkflow(input: {
|
|
14
|
+
type: string;
|
|
15
|
+
data?: Record<string, any>;
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
execute_as?: string;
|
|
18
|
+
/** Passthrough to Durable WorkflowOptions. */
|
|
19
|
+
options?: Record<string, any>;
|
|
20
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Get the execution status of a workflow.
|
|
23
|
+
*
|
|
24
|
+
* Returns the HotMesh status code (0 = completed, 1 = running).
|
|
25
|
+
* Resolves the workflow handle via task record or worker registry.
|
|
26
|
+
*
|
|
27
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
28
|
+
* @returns `{ status: 200, data: { workflowId, status } }` or 404
|
|
29
|
+
*/
|
|
30
|
+
export declare function getWorkflowStatus(input: {
|
|
31
|
+
workflowId: string;
|
|
32
|
+
}): Promise<LTApiResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Get the result of a completed workflow.
|
|
35
|
+
*
|
|
36
|
+
* Returns 202 if the workflow is still running, 200 with the result
|
|
37
|
+
* payload when complete. Never blocks — always returns immediately.
|
|
38
|
+
*
|
|
39
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
40
|
+
* @returns `{ status: 200, data: { workflowId, result } }` or 202 if running
|
|
41
|
+
*/
|
|
42
|
+
export declare function getWorkflowResult(input: {
|
|
43
|
+
workflowId: string;
|
|
44
|
+
}): Promise<LTApiResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Terminate a running workflow.
|
|
47
|
+
*
|
|
48
|
+
* Interrupts the workflow execution immediately via HotMesh.
|
|
49
|
+
*
|
|
50
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
51
|
+
* @returns `{ status: 200, data: { terminated: true, workflowId } }` or 404
|
|
52
|
+
*/
|
|
53
|
+
export declare function terminateWorkflow(input: {
|
|
54
|
+
workflowId: string;
|
|
55
|
+
}): Promise<LTApiResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Export the full state of a workflow.
|
|
58
|
+
*
|
|
59
|
+
* Returns the serialized workflow state including all activity
|
|
60
|
+
* results, signals, and metadata.
|
|
61
|
+
*
|
|
62
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
63
|
+
* @returns `{ status: 200, data: <exported state> }` or 404
|
|
64
|
+
*/
|
|
65
|
+
export declare function exportWorkflow(input: {
|
|
66
|
+
workflowId: string;
|
|
67
|
+
}): Promise<LTApiResult>;
|
|
@@ -0,0 +1,188 @@
|
|
|
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.invokeWorkflow = invokeWorkflow;
|
|
37
|
+
exports.getWorkflowStatus = getWorkflowStatus;
|
|
38
|
+
exports.getWorkflowResult = getWorkflowResult;
|
|
39
|
+
exports.terminateWorkflow = terminateWorkflow;
|
|
40
|
+
exports.exportWorkflow = exportWorkflow;
|
|
41
|
+
const workers_1 = require("../../workers");
|
|
42
|
+
const exportService = __importStar(require("../../services/export"));
|
|
43
|
+
const task_1 = require("../../services/task");
|
|
44
|
+
const workflow_invocation_1 = require("../../services/workflow-invocation");
|
|
45
|
+
function isResolveError(err) {
|
|
46
|
+
return err?.message?.includes('Cannot resolve workflow');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start a workflow — proxy for `Durable.Client.workflow.start()`.
|
|
50
|
+
*
|
|
51
|
+
* Resolves the task queue, enforces auth/role constraints, builds the
|
|
52
|
+
* LTEnvelope with IAM context, and delegates to the Durable client.
|
|
53
|
+
* Any WorkflowOptions field (workflowId, expire, entity, namespace,
|
|
54
|
+
* search, signalIn, pending, etc.) can be passed via `options` and
|
|
55
|
+
* flows through to the Durable client unchanged.
|
|
56
|
+
*
|
|
57
|
+
* @see https://docs.hotmesh.io/types/types_durable.WorkflowOptions.html
|
|
58
|
+
*/
|
|
59
|
+
async function invokeWorkflow(input, auth) {
|
|
60
|
+
try {
|
|
61
|
+
await (0, workflow_invocation_1.checkInvocationRoles)(input.type, auth.userId, auth.role);
|
|
62
|
+
const result = await (0, workflow_invocation_1.invokeWorkflow)({
|
|
63
|
+
workflowType: input.type,
|
|
64
|
+
data: input.data || {},
|
|
65
|
+
metadata: input.metadata,
|
|
66
|
+
executeAs: input.execute_as,
|
|
67
|
+
options: input.options,
|
|
68
|
+
auth: {
|
|
69
|
+
userId: auth.userId,
|
|
70
|
+
role: auth.role,
|
|
71
|
+
scopes: auth.scopes,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
status: 202,
|
|
76
|
+
data: { workflowId: result.workflowId, message: 'Workflow started' },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const status = err instanceof workflow_invocation_1.InvocationError ? err.statusCode : 500;
|
|
81
|
+
return { status, error: err.message };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the execution status of a workflow.
|
|
86
|
+
*
|
|
87
|
+
* Returns the HotMesh status code (0 = completed, 1 = running).
|
|
88
|
+
* Resolves the workflow handle via task record or worker registry.
|
|
89
|
+
*
|
|
90
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
91
|
+
* @returns `{ status: 200, data: { workflowId, status } }` or 404
|
|
92
|
+
*/
|
|
93
|
+
async function getWorkflowStatus(input) {
|
|
94
|
+
try {
|
|
95
|
+
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
96
|
+
const client = (0, workers_1.createClient)();
|
|
97
|
+
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
98
|
+
const status = await handle.status();
|
|
99
|
+
return {
|
|
100
|
+
status: 200,
|
|
101
|
+
data: { workflowId: input.workflowId, status },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (isResolveError(err))
|
|
106
|
+
return { status: 404, error: err.message };
|
|
107
|
+
return { status: 500, error: err.message };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the result of a completed workflow.
|
|
112
|
+
*
|
|
113
|
+
* Returns 202 if the workflow is still running, 200 with the result
|
|
114
|
+
* payload when complete. Never blocks — always returns immediately.
|
|
115
|
+
*
|
|
116
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
117
|
+
* @returns `{ status: 200, data: { workflowId, result } }` or 202 if running
|
|
118
|
+
*/
|
|
119
|
+
async function getWorkflowResult(input) {
|
|
120
|
+
try {
|
|
121
|
+
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
122
|
+
const client = (0, workers_1.createClient)();
|
|
123
|
+
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
124
|
+
const status = await handle.status();
|
|
125
|
+
if (status !== 0) {
|
|
126
|
+
return {
|
|
127
|
+
status: 202,
|
|
128
|
+
data: { workflowId: input.workflowId, status: 'running' },
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const result = await handle.result();
|
|
132
|
+
return {
|
|
133
|
+
status: 200,
|
|
134
|
+
data: { workflowId: input.workflowId, result },
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
if (isResolveError(err))
|
|
139
|
+
return { status: 404, error: err.message };
|
|
140
|
+
return { status: 500, error: err.message };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Terminate a running workflow.
|
|
145
|
+
*
|
|
146
|
+
* Interrupts the workflow execution immediately via HotMesh.
|
|
147
|
+
*
|
|
148
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
149
|
+
* @returns `{ status: 200, data: { terminated: true, workflowId } }` or 404
|
|
150
|
+
*/
|
|
151
|
+
async function terminateWorkflow(input) {
|
|
152
|
+
try {
|
|
153
|
+
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
154
|
+
const client = (0, workers_1.createClient)();
|
|
155
|
+
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
156
|
+
await handle.terminate();
|
|
157
|
+
return {
|
|
158
|
+
status: 200,
|
|
159
|
+
data: { terminated: true, workflowId: input.workflowId },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
if (isResolveError(err))
|
|
164
|
+
return { status: 404, error: err.message };
|
|
165
|
+
return { status: 500, error: err.message };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Export the full state of a workflow.
|
|
170
|
+
*
|
|
171
|
+
* Returns the serialized workflow state including all activity
|
|
172
|
+
* results, signals, and metadata.
|
|
173
|
+
*
|
|
174
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
175
|
+
* @returns `{ status: 200, data: <exported state> }` or 404
|
|
176
|
+
*/
|
|
177
|
+
async function exportWorkflow(input) {
|
|
178
|
+
try {
|
|
179
|
+
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
180
|
+
const exported = await exportService.exportWorkflow(input.workflowId, resolved.taskQueue, resolved.workflowName);
|
|
181
|
+
return { status: 200, data: exported };
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
if (isResolveError(err))
|
|
185
|
+
return { status: 404, error: err.message };
|
|
186
|
+
return { status: 500, error: err.message };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { LTApiResult } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Set or update the cron schedule for a YAML workflow.
|
|
4
|
+
*
|
|
5
|
+
* Persists the schedule in the DB and restarts the in-process cron timer via the
|
|
6
|
+
* cron registry so the change takes effect immediately.
|
|
7
|
+
*
|
|
8
|
+
* @param input.id — UUID of the workflow to schedule
|
|
9
|
+
* @param input.cron_schedule — cron expression (e.g. "0 * * * *")
|
|
10
|
+
* @param input.cron_envelope — optional payload passed to each scheduled invocation
|
|
11
|
+
* @param input.execute_as — optional identity override for scheduled executions
|
|
12
|
+
* @returns `{ status: 200, data: YamlWorkflow }` the updated workflow record with cron fields set
|
|
13
|
+
*/
|
|
14
|
+
export declare function setCronSchedule(input: {
|
|
15
|
+
id: string;
|
|
16
|
+
cron_schedule: string;
|
|
17
|
+
cron_envelope?: any;
|
|
18
|
+
execute_as?: string;
|
|
19
|
+
}): Promise<LTApiResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Remove the cron schedule from a YAML workflow.
|
|
22
|
+
*
|
|
23
|
+
* Stops the in-process cron timer first, then clears the schedule fields in the DB.
|
|
24
|
+
*
|
|
25
|
+
* @param input.id — UUID of the workflow to unschedule
|
|
26
|
+
* @returns `{ status: 200, data: YamlWorkflow }` the updated workflow record with cron fields cleared
|
|
27
|
+
*/
|
|
28
|
+
export declare function clearCronSchedule(input: {
|
|
29
|
+
id: string;
|
|
30
|
+
}): Promise<LTApiResult>;
|
|
31
|
+
/**
|
|
32
|
+
* List all YAML workflows that have a cron schedule, with their live timer status.
|
|
33
|
+
*
|
|
34
|
+
* Fetches all cron-scheduled workflows from the DB and cross-references with the
|
|
35
|
+
* in-process cron registry to determine which timers are actually running.
|
|
36
|
+
*
|
|
37
|
+
* @returns `{ status: 200, data: { schedules: Array<{ id, name, graph_topic, app_id, cron_schedule, execute_as, active }> } }`
|
|
38
|
+
*/
|
|
39
|
+
export declare function getCronStatus(): Promise<LTApiResult>;
|