@hotmeshio/long-tail 0.1.13 → 0.1.15
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 +16 -0
- package/build/api/files.js +61 -0
- 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/mcp-runs.d.ts +2 -0
- package/build/api/mcp-runs.js +2 -0
- package/build/api/settings.js +9 -1
- package/build/api/workflow-sets.d.ts +11 -0
- package/build/api/workflow-sets.js +62 -0
- 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 -137
- package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
- 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/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/logger/index.d.ts +0 -9
- package/build/lib/logger/index.js +9 -4
- package/build/lib/storage/index.js +2 -2
- package/build/lib/storage/local.d.ts +15 -0
- package/build/lib/storage/local.js +63 -0
- package/build/lib/storage/mime.d.ts +4 -0
- package/build/lib/storage/mime.js +31 -0
- package/build/lib/storage/s3.d.ts +16 -0
- package/build/lib/storage/s3.js +70 -0
- package/build/lib/storage/types.d.ts +18 -0
- package/build/modules/utils.d.ts +73 -0
- package/build/modules/utils.js +84 -0
- package/build/routes/file-browser.d.ts +2 -0
- package/build/routes/file-browser.js +126 -0
- package/build/routes/files.js +25 -17
- 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/mcp-runs.js +2 -0
- package/build/routes/workflow-sets.js +9 -0
- package/build/routes/yaml-workflows/crud.js +9 -0
- package/build/routes/yaml-workflows/deployment.js +8 -0
- package/build/sdk/index.d.ts +17 -0
- package/build/sdk/index.js +19 -0
- package/build/services/insight/index.d.ts +13 -0
- package/build/services/insight/index.js +4 -7
- package/build/services/insight/prompts.d.ts +1 -1
- package/build/services/insight/prompts.js +1 -1
- 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/mcp-runs/queries.d.ts +2 -0
- package/build/services/mcp-runs/queries.js +11 -1
- package/build/services/mcp-runs/sql.d.ts +1 -1
- package/build/services/mcp-runs/sql.js +2 -2
- package/build/services/workflow-sets/db.d.ts +1 -0
- package/build/services/workflow-sets/db.js +6 -0
- package/build/services/workflow-sets/index.d.ts +1 -1
- package/build/services/workflow-sets/index.js +2 -1
- package/build/services/workflow-sets/sql.d.ts +1 -0
- package/build/services/workflow-sets/sql.js +6 -1
- 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 +14 -12
- package/build/services/yaml-workflow/db.js +32 -70
- 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/generator.js +4 -4
- 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/build/index.d.ts +2 -1
- package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
- package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
- package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
- 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/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +10 -3
- 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/schema-exchange.d.ts +50 -0
- package/build/system/activities/schema-exchange.js +210 -0
- package/build/system/activities/sql.d.ts +4 -1
- package/build/system/activities/sql.js +37 -2
- package/build/system/index.js +1 -0
- 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 +69 -6
- package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
- package/build/system/mcp-servers/schema-exchange.js +93 -0
- package/build/system/mcp-servers/workflow-compiler.js +54 -0
- package/build/system/seed/server-definitions.d.ts +112 -1
- package/build/system/seed/server-definitions.js +37 -0
- package/build/system/seed/tool-manifests-data.d.ts +87 -0
- package/build/system/seed/tool-manifests-data.js +37 -1
- package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
- package/build/system/seed/tool-manifests-knowledge.js +6 -5
- 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-builder/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
- package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DurFwIwe.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
- package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
- package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-CmznCuAx.js.map} +1 -1
- package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
- package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
- package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
- package/dashboard/dist/assets/index-C8-UaN4N.js +2 -0
- package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-C8-UaN4N.js.map} +1 -1
- package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
- package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
- package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
- package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-CjxHCVxl.js.map} +1 -1
- package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
- package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
- package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
- package/dashboard/dist/assets/{index-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
- package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
- package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
- package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
- package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-XGOmZ117.js.map} +1 -1
- package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
- package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
- package/dashboard/dist/assets/{index-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
- package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
- package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
- package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
- package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
- package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
- package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
- package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
- package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
- package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
- package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
- package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
- package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
- package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
- 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/schema-exchange.md +173 -0
- package/docs/self-test.md +106 -0
- package/docs/workflows.md +19 -0
- package/package.json +15 -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-Dbd1qUK_.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
- package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
- package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
- package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
- package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
- package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
- package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
- package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
- package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
- package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
- package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
- package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
- package/dashboard/dist/assets/index-Di12t56M.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* System prompt for the durable-to-YAML compiler.
|
|
4
|
+
*
|
|
5
|
+
* Teaches the LLM how to convert procedural durable TypeScript workflows
|
|
6
|
+
* (Temporal-like API via HotMesh Durable) into equivalent YAML DAGs.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DURABLE_COMPILER_SYSTEM_PROMPT = DURABLE_COMPILER_SYSTEM_PROMPT;
|
|
10
|
+
exports.buildUserMessage = buildUserMessage;
|
|
11
|
+
/**
|
|
12
|
+
* Build the system prompt for durable→YAML compilation.
|
|
13
|
+
*
|
|
14
|
+
* @param activityTypesRef - Full activity-types.md reference content
|
|
15
|
+
* @param metadata - Parsed metadata from the source workflow
|
|
16
|
+
*/
|
|
17
|
+
function DURABLE_COMPILER_SYSTEM_PROMPT(activityTypesRef, metadata) {
|
|
18
|
+
const primitivesUsed = metadata.durablePrimitives.length
|
|
19
|
+
? `Detected primitives: ${metadata.durablePrimitives.join(', ')}`
|
|
20
|
+
: 'No Durable primitives detected (simple activity-only workflow)';
|
|
21
|
+
return `You are a HotMesh YAML compiler. Your job is to convert procedural durable TypeScript workflows into equivalent HotMesh YAML DAGs that produce the same behavior without the replay overhead.
|
|
22
|
+
|
|
23
|
+
The input is a TypeScript workflow that uses HotMesh's Durable API (Temporal-like). The output is a deterministic YAML DAG that achieves the same orchestration using HotMesh's native activity types.
|
|
24
|
+
|
|
25
|
+
${primitivesUsed}
|
|
26
|
+
|
|
27
|
+
## HotMesh YAML Structure
|
|
28
|
+
|
|
29
|
+
A workflow is a YAML document with this shape:
|
|
30
|
+
|
|
31
|
+
\`\`\`yaml
|
|
32
|
+
app:
|
|
33
|
+
id: longtail
|
|
34
|
+
version: '1'
|
|
35
|
+
graphs:
|
|
36
|
+
- subscribes: <workflow-topic>
|
|
37
|
+
expire: 432000
|
|
38
|
+
input:
|
|
39
|
+
schema:
|
|
40
|
+
type: object
|
|
41
|
+
properties:
|
|
42
|
+
<trigger inputs the user provides at runtime>
|
|
43
|
+
required: [<required input keys>]
|
|
44
|
+
output:
|
|
45
|
+
schema:
|
|
46
|
+
type: object
|
|
47
|
+
activities:
|
|
48
|
+
<activity definitions>
|
|
49
|
+
transitions:
|
|
50
|
+
<activity-id>:
|
|
51
|
+
- to: <next-activity-id>
|
|
52
|
+
hooks:
|
|
53
|
+
<signal-topic>:
|
|
54
|
+
- to: <hook-activity-id>
|
|
55
|
+
conditions:
|
|
56
|
+
match:
|
|
57
|
+
- expected: '{$job.metadata.jid}'
|
|
58
|
+
actual: '{$self.hook.data.job_id}'
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
## HotMesh Activity Types
|
|
62
|
+
|
|
63
|
+
${activityTypesRef}
|
|
64
|
+
|
|
65
|
+
## Data Mapping Rules
|
|
66
|
+
|
|
67
|
+
### Simple reference (wire one activity's output to another's input):
|
|
68
|
+
\`\`\`yaml
|
|
69
|
+
field_name: '{sourceActivity.output.data.fieldName}'
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
### Trigger data reference:
|
|
73
|
+
\`\`\`yaml
|
|
74
|
+
field_name: '{trigger_xxxx.output.data.fieldName}'
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
### @pipe — Reverse Polish Notation (operands THEN operator)
|
|
78
|
+
|
|
79
|
+
@pipe uses stack-machine / RPN evaluation. ALL operands for a function must appear on the single row ABOVE the function row.
|
|
80
|
+
|
|
81
|
+
\`\`\`yaml
|
|
82
|
+
field_name:
|
|
83
|
+
'@pipe':
|
|
84
|
+
- ['{source.output.data.value}', '-suffix'] # operands
|
|
85
|
+
- ['{@string.concat}'] # operator
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
### Three mapping directions per activity:
|
|
89
|
+
- **input.maps**: Wire data INTO this activity from trigger or upstream activities
|
|
90
|
+
- **output.maps**: Transform this activity's own output before downstream consumption
|
|
91
|
+
- **job.maps**: Promote data to shared workflow state (use on LAST activity for workflow result)
|
|
92
|
+
|
|
93
|
+
## Construction Rules
|
|
94
|
+
|
|
95
|
+
1. **Trigger first**: Every workflow starts with a trigger activity
|
|
96
|
+
2. **Collision-proof activity IDs**: Use a descriptive name with a shared 4-char random suffix: \`trigger_x8kf\`, \`greet_x8kf\`, \`fetch_x8kf\`. Same suffix for all activities in one workflow.
|
|
97
|
+
3. **workflowName**: Every worker MUST have \`workflowName: '<activity_function_name>'\` in its input.maps — this routes to the correct handler
|
|
98
|
+
4. **_scope threading**: Every worker MUST have \`_scope: '{trigger_xxxx.output.data._scope}'\` for IAM context
|
|
99
|
+
5. **Wire outputs forward**: Use \`{prevActivity.output.data.fieldName}\` to pass data between steps
|
|
100
|
+
6. **job.maps on last activity**: The final activity should have job.maps to promote output fields to the workflow result
|
|
101
|
+
7. **Linear transitions**: Chain activities with transitions unless branching or iteration is needed
|
|
102
|
+
|
|
103
|
+
## Durable Primitive → YAML Mapping
|
|
104
|
+
|
|
105
|
+
Convert each durable primitive to its YAML equivalent:
|
|
106
|
+
|
|
107
|
+
### proxyActivities + activity call → worker
|
|
108
|
+
Each proxied activity call becomes a worker activity:
|
|
109
|
+
\`\`\`yaml
|
|
110
|
+
greet_x8kf:
|
|
111
|
+
type: worker
|
|
112
|
+
topic: <subscribes-topic>
|
|
113
|
+
input:
|
|
114
|
+
schema:
|
|
115
|
+
type: object
|
|
116
|
+
maps:
|
|
117
|
+
_scope: '{trigger_x8kf.output.data._scope}'
|
|
118
|
+
workflowName: greet
|
|
119
|
+
name: '{trigger_x8kf.output.data.name}'
|
|
120
|
+
output:
|
|
121
|
+
schema:
|
|
122
|
+
type: object
|
|
123
|
+
\`\`\`
|
|
124
|
+
|
|
125
|
+
### Durable.workflow.sleep('N seconds') → hook with sleep
|
|
126
|
+
\`\`\`yaml
|
|
127
|
+
delay_x8kf:
|
|
128
|
+
type: hook
|
|
129
|
+
sleep: <N>
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
### Durable.workflow.condition(signalId) → hook (web hook mode)
|
|
133
|
+
\`\`\`yaml
|
|
134
|
+
wait_signal_x8kf:
|
|
135
|
+
type: hook
|
|
136
|
+
hook:
|
|
137
|
+
type: object
|
|
138
|
+
properties:
|
|
139
|
+
job_id: { type: string }
|
|
140
|
+
<payload fields>: { type: <type> }
|
|
141
|
+
output:
|
|
142
|
+
schema:
|
|
143
|
+
type: object
|
|
144
|
+
job:
|
|
145
|
+
maps:
|
|
146
|
+
<field>: '{$self.hook.data.<field>}'
|
|
147
|
+
\`\`\`
|
|
148
|
+
Plus a hooks section entry:
|
|
149
|
+
\`\`\`yaml
|
|
150
|
+
hooks:
|
|
151
|
+
<signal-topic>:
|
|
152
|
+
- to: wait_signal_x8kf
|
|
153
|
+
conditions:
|
|
154
|
+
match:
|
|
155
|
+
- expected: '{$job.metadata.jid}'
|
|
156
|
+
actual: '{$self.hook.data.job_id}'
|
|
157
|
+
\`\`\`
|
|
158
|
+
|
|
159
|
+
### Escalation pattern (return { type: 'escalation' }) → 3-step pattern
|
|
160
|
+
When a workflow creates an escalation and waits for human resolution:
|
|
161
|
+
\`\`\`yaml
|
|
162
|
+
# Step 1: Create escalation
|
|
163
|
+
esc_x8kf:
|
|
164
|
+
type: worker
|
|
165
|
+
topic: <subscribes-topic>
|
|
166
|
+
input:
|
|
167
|
+
maps:
|
|
168
|
+
_scope: '{trigger_x8kf.output.data._scope}'
|
|
169
|
+
workflowName: escalate_and_wait
|
|
170
|
+
title: '<escalation title>'
|
|
171
|
+
message: '<escalation message>'
|
|
172
|
+
role: '<role>'
|
|
173
|
+
data:
|
|
174
|
+
<context fields>: '{trigger_x8kf.output.data.<field>}'
|
|
175
|
+
|
|
176
|
+
# Step 2: Wait for signal
|
|
177
|
+
wait_x8kf:
|
|
178
|
+
type: hook
|
|
179
|
+
hook:
|
|
180
|
+
type: object
|
|
181
|
+
properties:
|
|
182
|
+
job_id: { type: string }
|
|
183
|
+
escalationId: { type: string }
|
|
184
|
+
approved: { type: boolean }
|
|
185
|
+
output:
|
|
186
|
+
schema:
|
|
187
|
+
type: object
|
|
188
|
+
|
|
189
|
+
# Step 3: Resolve escalation
|
|
190
|
+
resolve_x8kf:
|
|
191
|
+
type: worker
|
|
192
|
+
topic: <subscribes-topic>
|
|
193
|
+
input:
|
|
194
|
+
maps:
|
|
195
|
+
_scope: '{trigger_x8kf.output.data._scope}'
|
|
196
|
+
workflowName: claim_and_resolve
|
|
197
|
+
escalation_id: '{wait_x8kf.hook.data.escalationId}'
|
|
198
|
+
resolver_id: workflow
|
|
199
|
+
payload:
|
|
200
|
+
approved: '{wait_x8kf.hook.data.approved}'
|
|
201
|
+
\`\`\`
|
|
202
|
+
Transitions: esc → wait, wait → [resolve, next_step]
|
|
203
|
+
Hook routing: signal topic → wait activity with job_id matching
|
|
204
|
+
|
|
205
|
+
### Durable.workflow.startChild (fire-and-forget) + condition → await
|
|
206
|
+
When parent spawns a child and waits for completion:
|
|
207
|
+
\`\`\`yaml
|
|
208
|
+
child_x8kf:
|
|
209
|
+
type: await
|
|
210
|
+
topic: <child-workflow-subscribes-topic>
|
|
211
|
+
await: true
|
|
212
|
+
input:
|
|
213
|
+
schema:
|
|
214
|
+
type: object
|
|
215
|
+
maps:
|
|
216
|
+
<child inputs>: '{trigger_x8kf.output.data.<field>}'
|
|
217
|
+
output:
|
|
218
|
+
schema:
|
|
219
|
+
type: object
|
|
220
|
+
job:
|
|
221
|
+
maps:
|
|
222
|
+
<result field>: '{$self.output.data.<field>}'
|
|
223
|
+
\`\`\`
|
|
224
|
+
If fire-and-forget (no wait): use \`await: false\`.
|
|
225
|
+
|
|
226
|
+
### Promise.all([a(), b()]) → parallel transitions
|
|
227
|
+
One activity transitions to multiple workers simultaneously:
|
|
228
|
+
\`\`\`yaml
|
|
229
|
+
transitions:
|
|
230
|
+
prior_step_x8kf:
|
|
231
|
+
- to: fetch_a_x8kf
|
|
232
|
+
- to: fetch_b_x8kf
|
|
233
|
+
\`\`\`
|
|
234
|
+
|
|
235
|
+
### for loop over dynamic array → 4-activity cycle pattern
|
|
236
|
+
|
|
237
|
+
For loops over arrays that are determined at runtime, use the four-activity cycle pattern: **pivot → worker → cycle → done**.
|
|
238
|
+
|
|
239
|
+
IMPORTANT: Do NOT use bracket notation for array access. Use \`@pipe\` with \`@array.get\`.
|
|
240
|
+
|
|
241
|
+
\`\`\`yaml
|
|
242
|
+
# 1. PIVOT — initializes the iteration (hook with cycle: true)
|
|
243
|
+
pivot_x8kf:
|
|
244
|
+
type: hook
|
|
245
|
+
cycle: true
|
|
246
|
+
output:
|
|
247
|
+
maps:
|
|
248
|
+
index: 0
|
|
249
|
+
items: '{prior_step_x8kf.output.data.list}'
|
|
250
|
+
|
|
251
|
+
# 2. WORKER — processes one item per iteration
|
|
252
|
+
do_work_x8kf:
|
|
253
|
+
type: worker
|
|
254
|
+
topic: <subscribes-topic>
|
|
255
|
+
input:
|
|
256
|
+
schema:
|
|
257
|
+
type: object
|
|
258
|
+
maps:
|
|
259
|
+
_scope: '{trigger_x8kf.output.data._scope}'
|
|
260
|
+
workflowName: <activity-function-name>
|
|
261
|
+
# Extract current item from array using @pipe + @array.get
|
|
262
|
+
item:
|
|
263
|
+
'@pipe':
|
|
264
|
+
- ['{pivot_x8kf.output.data.items}', '{pivot_x8kf.output.data.index}']
|
|
265
|
+
- ['{@array.get}']
|
|
266
|
+
# To extract a specific field from the current item:
|
|
267
|
+
# fieldName:
|
|
268
|
+
# '@pipe':
|
|
269
|
+
# - ['{pivot_x8kf.output.data.items}', '{pivot_x8kf.output.data.index}']
|
|
270
|
+
# - ['{@array.get}']
|
|
271
|
+
# - ['{@object.get}', 'fieldName']
|
|
272
|
+
output:
|
|
273
|
+
schema:
|
|
274
|
+
type: object
|
|
275
|
+
job:
|
|
276
|
+
maps:
|
|
277
|
+
lastResult: '{$self.output.data.result}'
|
|
278
|
+
|
|
279
|
+
# 3. CYCLE — increments index and loops back to pivot
|
|
280
|
+
next_x8kf:
|
|
281
|
+
type: cycle
|
|
282
|
+
ancestor: pivot_x8kf
|
|
283
|
+
input:
|
|
284
|
+
maps:
|
|
285
|
+
index:
|
|
286
|
+
'@pipe':
|
|
287
|
+
- ['{pivot_x8kf.output.data.index}', 1]
|
|
288
|
+
- ['{@math.add}']
|
|
289
|
+
|
|
290
|
+
# 4. DONE — exit point after iteration completes
|
|
291
|
+
done_x8kf:
|
|
292
|
+
type: hook
|
|
293
|
+
\`\`\`
|
|
294
|
+
|
|
295
|
+
Transitions with exit condition (loop while next index < array length):
|
|
296
|
+
\`\`\`yaml
|
|
297
|
+
transitions:
|
|
298
|
+
pivot_x8kf:
|
|
299
|
+
- to: do_work_x8kf
|
|
300
|
+
do_work_x8kf:
|
|
301
|
+
- to: next_x8kf
|
|
302
|
+
conditions:
|
|
303
|
+
match:
|
|
304
|
+
- expected: true
|
|
305
|
+
actual:
|
|
306
|
+
'@pipe':
|
|
307
|
+
- ['{pivot_x8kf.output.data.index}', 1]
|
|
308
|
+
- ['{@math.add}']
|
|
309
|
+
- ['{pivot_x8kf.output.data.items}']
|
|
310
|
+
- ['{@array.length}']
|
|
311
|
+
- ['{@conditional.less_than}']
|
|
312
|
+
- to: done_x8kf
|
|
313
|
+
\`\`\`
|
|
314
|
+
|
|
315
|
+
Key rules for cycles:
|
|
316
|
+
- The pivot MUST be \`type: hook\` with \`cycle: true\`
|
|
317
|
+
- The cycle activity's \`ancestor\` MUST reference the pivot
|
|
318
|
+
- Each iteration runs in an isolated dimension — activity output resets per loop
|
|
319
|
+
- Only \`job.maps\` accumulates across iterations (use for collecting results)
|
|
320
|
+
- NEVER use bracket syntax \`items[index]\` — always use \`@pipe\` with \`@array.get\`
|
|
321
|
+
- The exit condition compares \`(index + 1) < items.length\` using \`@conditional.less_than\`
|
|
322
|
+
- The done hook is required as the exit target
|
|
323
|
+
|
|
324
|
+
### for loop (bounded/small) → unrolled workers
|
|
325
|
+
For static, small loops (2-3 iterations known at compile time), unroll each iteration as a separate worker activity. Simpler and more explicit.
|
|
326
|
+
|
|
327
|
+
### if/else → conditional transitions
|
|
328
|
+
\`\`\`yaml
|
|
329
|
+
transitions:
|
|
330
|
+
check_x8kf:
|
|
331
|
+
- to: branch_a_x8kf
|
|
332
|
+
conditions:
|
|
333
|
+
match:
|
|
334
|
+
- expected: true
|
|
335
|
+
actual: '{check_x8kf.output.data.shouldBranch}'
|
|
336
|
+
- to: branch_b_x8kf
|
|
337
|
+
\`\`\`
|
|
338
|
+
|
|
339
|
+
## Few-Shot Example
|
|
340
|
+
|
|
341
|
+
### Input: basicEcho durable workflow
|
|
342
|
+
\`\`\`typescript
|
|
343
|
+
export async function basicEcho(envelope: LTEnvelope): Promise<any> {
|
|
344
|
+
const { message = 'Hello', sleepSeconds = 1 } = envelope.data;
|
|
345
|
+
await Durable.workflow.sleep(\`\${sleepSeconds} seconds\`);
|
|
346
|
+
const echoResult = await echo({ message });
|
|
347
|
+
return {
|
|
348
|
+
type: 'return' as const,
|
|
349
|
+
data: { ...echoResult, userId: envelope.lt?.userId }
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
\`\`\`
|
|
353
|
+
|
|
354
|
+
### Output: equivalent YAML
|
|
355
|
+
\`\`\`yaml
|
|
356
|
+
app:
|
|
357
|
+
id: longtail
|
|
358
|
+
version: '1'
|
|
359
|
+
graphs:
|
|
360
|
+
- subscribes: basic.echo
|
|
361
|
+
expire: 300
|
|
362
|
+
input:
|
|
363
|
+
schema:
|
|
364
|
+
type: object
|
|
365
|
+
properties:
|
|
366
|
+
message:
|
|
367
|
+
type: string
|
|
368
|
+
sleepSeconds:
|
|
369
|
+
type: number
|
|
370
|
+
output:
|
|
371
|
+
schema:
|
|
372
|
+
type: object
|
|
373
|
+
activities:
|
|
374
|
+
trigger_e4rk:
|
|
375
|
+
type: trigger
|
|
376
|
+
output:
|
|
377
|
+
schema:
|
|
378
|
+
type: object
|
|
379
|
+
delay_e4rk:
|
|
380
|
+
type: hook
|
|
381
|
+
sleep: '{trigger_e4rk.output.data.sleepSeconds}'
|
|
382
|
+
echo_e4rk:
|
|
383
|
+
type: worker
|
|
384
|
+
topic: basic.echo
|
|
385
|
+
input:
|
|
386
|
+
schema:
|
|
387
|
+
type: object
|
|
388
|
+
maps:
|
|
389
|
+
_scope: '{trigger_e4rk.output.data._scope}'
|
|
390
|
+
workflowName: echo
|
|
391
|
+
message: '{trigger_e4rk.output.data.message}'
|
|
392
|
+
output:
|
|
393
|
+
schema:
|
|
394
|
+
type: object
|
|
395
|
+
job:
|
|
396
|
+
maps:
|
|
397
|
+
message: '{$self.output.data.message}'
|
|
398
|
+
echoedAt: '{$self.output.data.echoedAt}'
|
|
399
|
+
transitions:
|
|
400
|
+
trigger_e4rk:
|
|
401
|
+
- to: delay_e4rk
|
|
402
|
+
delay_e4rk:
|
|
403
|
+
- to: echo_e4rk
|
|
404
|
+
\`\`\`
|
|
405
|
+
|
|
406
|
+
### Input: iteration durable workflow (for loop over array)
|
|
407
|
+
\`\`\`typescript
|
|
408
|
+
export async function batchProcess(envelope: LTEnvelope): Promise<any> {
|
|
409
|
+
const { items } = envelope.data;
|
|
410
|
+
const results = [];
|
|
411
|
+
for (const item of items) {
|
|
412
|
+
const result = await processItem({ name: item.name, value: item.value });
|
|
413
|
+
results.push(result);
|
|
414
|
+
}
|
|
415
|
+
return { type: 'return' as const, data: { results, count: results.length } };
|
|
416
|
+
}
|
|
417
|
+
\`\`\`
|
|
418
|
+
|
|
419
|
+
### Output: equivalent YAML with cycle pattern
|
|
420
|
+
\`\`\`yaml
|
|
421
|
+
app:
|
|
422
|
+
id: longtail
|
|
423
|
+
version: '1'
|
|
424
|
+
graphs:
|
|
425
|
+
- subscribes: batch.process
|
|
426
|
+
expire: 432000
|
|
427
|
+
input:
|
|
428
|
+
schema:
|
|
429
|
+
type: object
|
|
430
|
+
properties:
|
|
431
|
+
items:
|
|
432
|
+
type: array
|
|
433
|
+
items:
|
|
434
|
+
type: object
|
|
435
|
+
required: [items]
|
|
436
|
+
output:
|
|
437
|
+
schema:
|
|
438
|
+
type: object
|
|
439
|
+
activities:
|
|
440
|
+
trigger_k9pm:
|
|
441
|
+
type: trigger
|
|
442
|
+
output:
|
|
443
|
+
schema:
|
|
444
|
+
type: object
|
|
445
|
+
pivot_k9pm:
|
|
446
|
+
type: hook
|
|
447
|
+
cycle: true
|
|
448
|
+
output:
|
|
449
|
+
maps:
|
|
450
|
+
index: 0
|
|
451
|
+
items: '{trigger_k9pm.output.data.items}'
|
|
452
|
+
process_k9pm:
|
|
453
|
+
type: worker
|
|
454
|
+
topic: batch.process
|
|
455
|
+
input:
|
|
456
|
+
schema:
|
|
457
|
+
type: object
|
|
458
|
+
maps:
|
|
459
|
+
_scope: '{trigger_k9pm.output.data._scope}'
|
|
460
|
+
workflowName: processItem
|
|
461
|
+
name:
|
|
462
|
+
'@pipe':
|
|
463
|
+
- ['{pivot_k9pm.output.data.items}', '{pivot_k9pm.output.data.index}']
|
|
464
|
+
- ['{@array.get}']
|
|
465
|
+
- ['{@object.get}', 'name']
|
|
466
|
+
value:
|
|
467
|
+
'@pipe':
|
|
468
|
+
- ['{pivot_k9pm.output.data.items}', '{pivot_k9pm.output.data.index}']
|
|
469
|
+
- ['{@array.get}']
|
|
470
|
+
- ['{@object.get}', 'value']
|
|
471
|
+
output:
|
|
472
|
+
schema:
|
|
473
|
+
type: object
|
|
474
|
+
job:
|
|
475
|
+
maps:
|
|
476
|
+
lastResult: '{$self.output.data}'
|
|
477
|
+
cycle_k9pm:
|
|
478
|
+
type: cycle
|
|
479
|
+
ancestor: pivot_k9pm
|
|
480
|
+
input:
|
|
481
|
+
maps:
|
|
482
|
+
index:
|
|
483
|
+
'@pipe':
|
|
484
|
+
- ['{pivot_k9pm.output.data.index}', 1]
|
|
485
|
+
- ['{@math.add}']
|
|
486
|
+
done_k9pm:
|
|
487
|
+
type: hook
|
|
488
|
+
job:
|
|
489
|
+
maps:
|
|
490
|
+
count: '{pivot_k9pm.output.data.items}'
|
|
491
|
+
transitions:
|
|
492
|
+
trigger_k9pm:
|
|
493
|
+
- to: pivot_k9pm
|
|
494
|
+
pivot_k9pm:
|
|
495
|
+
- to: process_k9pm
|
|
496
|
+
process_k9pm:
|
|
497
|
+
- to: cycle_k9pm
|
|
498
|
+
conditions:
|
|
499
|
+
match:
|
|
500
|
+
- expected: true
|
|
501
|
+
actual:
|
|
502
|
+
'@pipe':
|
|
503
|
+
- ['{pivot_k9pm.output.data.index}', 1]
|
|
504
|
+
- ['{@math.add}']
|
|
505
|
+
- ['{pivot_k9pm.output.data.items}']
|
|
506
|
+
- ['{@array.length}']
|
|
507
|
+
- ['{@conditional.less_than}']
|
|
508
|
+
- to: done_k9pm
|
|
509
|
+
\`\`\`
|
|
510
|
+
|
|
511
|
+
## Output Format
|
|
512
|
+
|
|
513
|
+
Return a JSON object (no markdown fences, no commentary):
|
|
514
|
+
{
|
|
515
|
+
"name": "<workflow-topic matching subscribes>",
|
|
516
|
+
"description": "<what this workflow does>",
|
|
517
|
+
"yaml": "<the complete YAML string>",
|
|
518
|
+
"input_schema": { <JSON Schema for trigger inputs> },
|
|
519
|
+
"output_schema": { <JSON Schema for workflow output> },
|
|
520
|
+
"activity_manifest": [
|
|
521
|
+
{
|
|
522
|
+
"activity_id": "<id>",
|
|
523
|
+
"title": "<human-readable title>",
|
|
524
|
+
"type": "trigger|worker|hook|await|cycle|signal|interrupt",
|
|
525
|
+
"tool_source": "trigger|durable|signal",
|
|
526
|
+
"topic": "<subscribes-topic>",
|
|
527
|
+
"workflow_name": "<activity function name if worker>",
|
|
528
|
+
"input_mappings": {},
|
|
529
|
+
"output_fields": []
|
|
530
|
+
}
|
|
531
|
+
],
|
|
532
|
+
"tags": ["durable", "<relevant-tags>"],
|
|
533
|
+
"sample_inputs": { <example trigger values for testing> }
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
CRITICAL RULES:
|
|
537
|
+
- The "name" field MUST match the "subscribes" topic in the YAML exactly
|
|
538
|
+
- Every worker MUST have workflowName and _scope in input.maps
|
|
539
|
+
- Activity IDs all share the same 4-char random suffix
|
|
540
|
+
- Use the exact activity function names from the source as workflowName values
|
|
541
|
+
- Map envelope.data fields to trigger input schema properties
|
|
542
|
+
- Preserve the data flow: if activity A's result is used as input to activity B, wire it via maps
|
|
543
|
+
- NEVER use bracket notation for array access — always use @pipe with @array.get
|
|
544
|
+
- For loops over arrays MUST use the 4-activity cycle pattern: pivot (hook+cycle:true) → worker → cycle → done (hook)
|
|
545
|
+
- The cycle's ancestor MUST reference the pivot hook, never a worker
|
|
546
|
+
- Only job.maps accumulates across iterations — activity output is isolated per iteration`;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Build the user message containing the source code and context.
|
|
550
|
+
*/
|
|
551
|
+
function buildUserMessage(source, metadata, activitiesSource) {
|
|
552
|
+
const parts = [
|
|
553
|
+
`Compile the following durable workflow function \`${metadata.workflowFunctionName}\` into a HotMesh YAML DAG.`,
|
|
554
|
+
'',
|
|
555
|
+
'## Workflow Source',
|
|
556
|
+
'```typescript',
|
|
557
|
+
source,
|
|
558
|
+
'```',
|
|
559
|
+
];
|
|
560
|
+
if (activitiesSource) {
|
|
561
|
+
parts.push('', '## Activities Module (side-effect functions called by the workflow)', '```typescript', activitiesSource, '```');
|
|
562
|
+
}
|
|
563
|
+
if (metadata.activityNames.length) {
|
|
564
|
+
parts.push('', `## Detected Activities: ${metadata.activityNames.join(', ')}`);
|
|
565
|
+
}
|
|
566
|
+
if (metadata.envelopeFields.length) {
|
|
567
|
+
parts.push('', `## Envelope Input Fields: ${metadata.envelopeFields.join(', ')}`);
|
|
568
|
+
}
|
|
569
|
+
return parts.join('\n');
|
|
570
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the durable-to-YAML compiler.
|
|
3
|
+
*/
|
|
4
|
+
import type { ActivityManifestEntry, InputFieldMeta } from '../../../types/yaml-workflow';
|
|
5
|
+
/** Options for compiling a durable TypeScript workflow to YAML. */
|
|
6
|
+
export interface CompileDurableOptions {
|
|
7
|
+
/** TypeScript source code or absolute file path */
|
|
8
|
+
source: string;
|
|
9
|
+
/** When true, `source` is treated as a file path to read from disk */
|
|
10
|
+
isFilePath?: boolean;
|
|
11
|
+
/** Name of the exported workflow function to compile (e.g., "assemblyLine") */
|
|
12
|
+
workflowName: string;
|
|
13
|
+
/** Name for the generated YAML workflow (becomes graph topic) */
|
|
14
|
+
name: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
/** HotMesh app namespace. Defaults to 'longtail'. */
|
|
17
|
+
appId?: string;
|
|
18
|
+
/** Override graph subscribes topic. Defaults to sanitized name. */
|
|
19
|
+
subscribes?: string;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
}
|
|
22
|
+
/** Result from durable-to-YAML compilation. */
|
|
23
|
+
export interface CompileDurableResult {
|
|
24
|
+
yaml: string;
|
|
25
|
+
inputSchema: Record<string, unknown>;
|
|
26
|
+
outputSchema: Record<string, unknown>;
|
|
27
|
+
activityManifest: ActivityManifestEntry[];
|
|
28
|
+
graphTopic: string;
|
|
29
|
+
appId: string;
|
|
30
|
+
tags: string[];
|
|
31
|
+
inputFieldMeta: InputFieldMeta[];
|
|
32
|
+
category: string;
|
|
33
|
+
}
|
|
34
|
+
/** Metadata extracted from durable workflow source code by the parser. */
|
|
35
|
+
export interface DurableSourceMetadata {
|
|
36
|
+
/** Exported workflow function name */
|
|
37
|
+
workflowFunctionName: string;
|
|
38
|
+
/** Activity function names from proxyActivities destructuring */
|
|
39
|
+
activityNames: string[];
|
|
40
|
+
/** Durable primitive calls detected (sleep, condition, startChild, etc.) */
|
|
41
|
+
durablePrimitives: string[];
|
|
42
|
+
/** Envelope data destructuring shape (field names extracted) */
|
|
43
|
+
envelopeFields: string[];
|
|
44
|
+
/** Import paths for activity modules */
|
|
45
|
+
activityImports: string[];
|
|
46
|
+
/** Control flow markers */
|
|
47
|
+
hasForLoop: boolean;
|
|
48
|
+
hasPromiseAll: boolean;
|
|
49
|
+
hasConditionalBranch: boolean;
|
|
50
|
+
hasEscalation: boolean;
|
|
51
|
+
}
|
|
@@ -50,10 +50,10 @@ const analyze_1 = require("./pipeline/analyze");
|
|
|
50
50
|
const compile_1 = require("./pipeline/compile");
|
|
51
51
|
const build_1 = require("./pipeline/build");
|
|
52
52
|
const validate_1 = require("./pipeline/validate");
|
|
53
|
-
const
|
|
53
|
+
const utils_1 = require("../../modules/utils");
|
|
54
54
|
// Re-exports for backward compatibility
|
|
55
|
-
var
|
|
56
|
-
Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return
|
|
55
|
+
var build_2 = require("./pipeline/build");
|
|
56
|
+
Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return build_2.capToolArguments; } });
|
|
57
57
|
/**
|
|
58
58
|
* Generate a HotMesh YAML workflow from a completed execution's tool call sequence.
|
|
59
59
|
*
|
|
@@ -63,7 +63,7 @@ Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: func
|
|
|
63
63
|
*/
|
|
64
64
|
async function generateYamlFromExecution(options) {
|
|
65
65
|
const appId = options.appId || 'longtail';
|
|
66
|
-
const graphTopic =
|
|
66
|
+
const graphTopic = (0, utils_1.sanitizeToolName)(options.subscribes || options.name);
|
|
67
67
|
// 1. Export the execution to get events
|
|
68
68
|
const execution = await (0, index_1.exportWorkflowExecution)(options.workflowId, options.taskQueue, options.workflowName);
|
|
69
69
|
// 2. Initialize pipeline context
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG step-appender functions for building iteration, normal, and signal
|
|
3
|
+
* activities. Extracted from dag.ts to keep each file under 300 lines.
|
|
4
|
+
*/
|
|
5
|
+
import type { ExtractedStep, EnhancedCompilationPlan, IterationSpec, DagBuilder } from '../../types';
|
|
6
|
+
/** Append an iteration pattern (hook -> worker -> cycle -> done) to the DAG. */
|
|
7
|
+
export declare function appendIterationStep(dag: DagBuilder, iterSpec: IterationSpec, prefix: string, graphTopic: string, idx: number, step: ExtractedStep, triggerInputKeys: Set<string>, steps: ExtractedStep[], sessionFields: string[], plan: EnhancedCompilationPlan | null): void;
|
|
8
|
+
/** Append a normal (non-iteration) step activity to the DAG. */
|
|
9
|
+
export declare function appendNormalStep(dag: DagBuilder, idx: number, step: ExtractedStep, prefix: string, graphTopic: string, plan: EnhancedCompilationPlan | null, steps: ExtractedStep[], triggerInputKeys: Set<string>, collapsedToCoreIndex: Map<number, number>): void;
|
|
10
|
+
/**
|
|
11
|
+
* Append a signal step pair (escalation worker + hook) to the DAG.
|
|
12
|
+
*
|
|
13
|
+
* The escalation worker creates the escalation via the human-queue MCP tool.
|
|
14
|
+
* The hook pauses until the escalation is resolved and a signal arrives.
|
|
15
|
+
* A hooks section entry routes the external signal to the waiting hook.
|
|
16
|
+
*/
|
|
17
|
+
export declare function appendSignalStep(dag: DagBuilder, idx: number, step: ExtractedStep, prefix: string, graphTopic: string, plan: EnhancedCompilationPlan | null, steps: ExtractedStep[], triggerInputKeys: Set<string>, collapsedToCoreIndex: Map<number, number>): void;
|