@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
|
@@ -12,10 +12,13 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
12
12
|
type: string;
|
|
13
13
|
description: string;
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
field: {
|
|
16
16
|
type: string;
|
|
17
17
|
description: string;
|
|
18
18
|
};
|
|
19
|
+
data: {
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
19
22
|
tags: {
|
|
20
23
|
type: string;
|
|
21
24
|
items: {
|
|
@@ -45,6 +48,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
45
48
|
type: string;
|
|
46
49
|
description: string;
|
|
47
50
|
};
|
|
51
|
+
field?: undefined;
|
|
48
52
|
data?: undefined;
|
|
49
53
|
tags?: undefined;
|
|
50
54
|
query?: undefined;
|
|
@@ -81,6 +85,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
81
85
|
description: string;
|
|
82
86
|
};
|
|
83
87
|
key?: undefined;
|
|
88
|
+
field?: undefined;
|
|
84
89
|
data?: undefined;
|
|
85
90
|
offset?: undefined;
|
|
86
91
|
path?: undefined;
|
|
@@ -114,6 +119,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
114
119
|
description: string;
|
|
115
120
|
};
|
|
116
121
|
key?: undefined;
|
|
122
|
+
field?: undefined;
|
|
117
123
|
data?: undefined;
|
|
118
124
|
query?: undefined;
|
|
119
125
|
path?: undefined;
|
|
@@ -129,6 +135,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
129
135
|
properties: {
|
|
130
136
|
domain?: undefined;
|
|
131
137
|
key?: undefined;
|
|
138
|
+
field?: undefined;
|
|
132
139
|
data?: undefined;
|
|
133
140
|
tags?: undefined;
|
|
134
141
|
query?: undefined;
|
|
@@ -160,6 +167,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
160
167
|
value: {
|
|
161
168
|
description: string;
|
|
162
169
|
};
|
|
170
|
+
field?: undefined;
|
|
163
171
|
data?: undefined;
|
|
164
172
|
tags?: undefined;
|
|
165
173
|
query?: undefined;
|
|
@@ -5,14 +5,15 @@ exports.KNOWLEDGE_TOOLS = void 0;
|
|
|
5
5
|
exports.KNOWLEDGE_TOOLS = [
|
|
6
6
|
{
|
|
7
7
|
name: 'store_knowledge',
|
|
8
|
-
description: 'Store
|
|
8
|
+
description: 'Store a value in a 3-level additive hierarchy: domain > key > field. Upserts by domain+key — fields accumulate across calls. Same domain+key+field overwrites that field. When field is provided, data can be any type. When omitted, data must be an object.',
|
|
9
9
|
inputSchema: {
|
|
10
10
|
type: 'object',
|
|
11
11
|
properties: {
|
|
12
|
-
domain: { type: 'string', description: '
|
|
13
|
-
key: { type: 'string', description: '
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
domain: { type: 'string', description: 'Top level — groups entries by namespace (e.g. "screenshots", "config")' },
|
|
13
|
+
key: { type: 'string', description: 'Second level — unique identifier within domain (e.g. "homepage")' },
|
|
14
|
+
field: { type: 'string', description: 'Third level (leaf) — names a specific field. Different fields accumulate; same field overwrites.' },
|
|
15
|
+
data: { description: 'The value to store. Any type when field is provided; must be an object when field is omitted.' },
|
|
16
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Categorization tags (unioned on upsert)' },
|
|
16
17
|
},
|
|
17
18
|
required: ['domain', 'key', 'data'],
|
|
18
19
|
},
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TriageResponseDeps } from './types';
|
|
2
|
+
declare const getUpstreamTasks: (originId: string) => Promise<import("../../..").LTTaskRecord[]>, getEscalationHistory: (originId: string) => Promise<import("../../..").LTEscalationRecord[]>, getToolTags: (workflowType: string) => Promise<string[]>, loadTriageTools: (tags?: string[] | undefined) => Promise<{
|
|
3
|
+
toolIds: string[];
|
|
4
|
+
inventory: string;
|
|
5
|
+
strategy: string;
|
|
6
|
+
}>, callTriageTool: (qualifiedName: string, args: Record<string, any>) => Promise<any>, callTriageLLM: (messages: any[], toolIds?: string[] | undefined) => Promise<import("../../../services/llm").LLMResponse>;
|
|
7
|
+
declare const ltEnrichEscalationRouting: (input: {
|
|
8
|
+
escalationId: string;
|
|
9
|
+
signalRouting: {
|
|
10
|
+
taskQueue: string;
|
|
11
|
+
workflowType: string;
|
|
12
|
+
workflowId: string;
|
|
13
|
+
signalId: string;
|
|
14
|
+
};
|
|
15
|
+
taskId?: string;
|
|
16
|
+
claimForUserId?: string;
|
|
17
|
+
}) => Promise<void>;
|
|
18
|
+
export declare const MAX_TOOL_ROUNDS: number;
|
|
19
|
+
/** Proxied activity refs passed to response handlers */
|
|
20
|
+
export declare const responseDeps: TriageResponseDeps;
|
|
21
|
+
export { getUpstreamTasks, getEscalationHistory, getToolTags, loadTriageTools, callTriageTool, callTriageLLM, ltEnrichEscalationRouting, };
|
|
@@ -0,0 +1,70 @@
|
|
|
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.ltEnrichEscalationRouting = exports.callTriageLLM = exports.callTriageTool = exports.loadTriageTools = exports.getToolTags = exports.getEscalationHistory = exports.getUpstreamTasks = exports.responseDeps = exports.MAX_TOOL_ROUNDS = void 0;
|
|
37
|
+
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
38
|
+
const defaults_1 = require("../../../modules/defaults");
|
|
39
|
+
const activities = __importStar(require("../../activities/triage"));
|
|
40
|
+
const interceptorActivities = __importStar(require("../../../services/interceptor/activities"));
|
|
41
|
+
const { getUpstreamTasks, getEscalationHistory, getToolTags, loadTriageTools, callTriageTool, callTriageLLM, notifyEngineering, } = hotmesh_1.Durable.workflow.proxyActivities({
|
|
42
|
+
activities,
|
|
43
|
+
retry: {
|
|
44
|
+
maximumAttempts: 3,
|
|
45
|
+
backoffCoefficient: 2,
|
|
46
|
+
maximumInterval: '10 seconds',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
exports.getUpstreamTasks = getUpstreamTasks;
|
|
50
|
+
exports.getEscalationHistory = getEscalationHistory;
|
|
51
|
+
exports.getToolTags = getToolTags;
|
|
52
|
+
exports.loadTriageTools = loadTriageTools;
|
|
53
|
+
exports.callTriageTool = callTriageTool;
|
|
54
|
+
exports.callTriageLLM = callTriageLLM;
|
|
55
|
+
const { ltCreateEscalation, ltCreateTask, ltGetTask, ltGetWorkflowConfig, ltStartWorkflow, ltEnrichEscalationRouting, } = hotmesh_1.Durable.workflow.proxyActivities({
|
|
56
|
+
activities: interceptorActivities,
|
|
57
|
+
taskQueue: 'lt-interceptor',
|
|
58
|
+
retry: { maximumAttempts: 3 },
|
|
59
|
+
});
|
|
60
|
+
exports.ltEnrichEscalationRouting = ltEnrichEscalationRouting;
|
|
61
|
+
exports.MAX_TOOL_ROUNDS = defaults_1.TOOL_ROUNDS_TRIAGE;
|
|
62
|
+
/** Proxied activity refs passed to response handlers */
|
|
63
|
+
exports.responseDeps = {
|
|
64
|
+
ltCreateEscalation,
|
|
65
|
+
ltCreateTask,
|
|
66
|
+
ltGetTask,
|
|
67
|
+
ltGetWorkflowConfig,
|
|
68
|
+
ltStartWorkflow,
|
|
69
|
+
notifyEngineering,
|
|
70
|
+
};
|
|
@@ -1,69 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.mcpTriage = mcpTriage;
|
|
37
4
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
38
|
-
const defaults_1 = require("../../../modules/defaults");
|
|
39
|
-
const activities = __importStar(require("../../activities/triage"));
|
|
40
|
-
const interceptorActivities = __importStar(require("../../../services/interceptor/activities"));
|
|
41
5
|
const prompts_1 = require("./prompts");
|
|
42
6
|
const response_1 = require("./response");
|
|
43
7
|
const tool_result_guard_1 = require("../tool-result-guard");
|
|
44
|
-
const
|
|
45
|
-
activities,
|
|
46
|
-
retry: {
|
|
47
|
-
maximumAttempts: 3,
|
|
48
|
-
backoffCoefficient: 2,
|
|
49
|
-
maximumInterval: '10 seconds',
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
const { ltCreateEscalation, ltCreateTask, ltGetTask, ltGetWorkflowConfig, ltStartWorkflow, ltEnrichEscalationRouting, } = hotmesh_1.Durable.workflow.proxyActivities({
|
|
53
|
-
activities: interceptorActivities,
|
|
54
|
-
taskQueue: 'lt-interceptor',
|
|
55
|
-
retry: { maximumAttempts: 3 },
|
|
56
|
-
});
|
|
57
|
-
const MAX_TOOL_ROUNDS = defaults_1.TOOL_ROUNDS_TRIAGE;
|
|
58
|
-
/** Proxied activity refs passed to response handlers */
|
|
59
|
-
const responseDeps = {
|
|
60
|
-
ltCreateEscalation,
|
|
61
|
-
ltCreateTask,
|
|
62
|
-
ltGetTask,
|
|
63
|
-
ltGetWorkflowConfig,
|
|
64
|
-
ltStartWorkflow,
|
|
65
|
-
notifyEngineering,
|
|
66
|
-
};
|
|
8
|
+
const activities_proxy_1 = require("./activities-proxy");
|
|
67
9
|
// ── Workflow ─────────────────────────────────────────────────
|
|
68
10
|
/**
|
|
69
11
|
* MCP Triage workflow (leaf).
|
|
@@ -95,7 +37,7 @@ const responseDeps = {
|
|
|
95
37
|
* 3. Returns `{ correctedData }` or re-escalates
|
|
96
38
|
*/
|
|
97
39
|
async function mcpTriage(envelope) {
|
|
98
|
-
const { originId,
|
|
40
|
+
const { originId, } = envelope.data;
|
|
99
41
|
// ── Re-entry: engineer responded to our escalation ──
|
|
100
42
|
if (envelope.resolver) {
|
|
101
43
|
const resolver = envelope.resolver;
|
|
@@ -104,8 +46,8 @@ async function mcpTriage(envelope) {
|
|
|
104
46
|
});
|
|
105
47
|
}
|
|
106
48
|
// ── First entry: gather context and let LLM diagnose + fix ──
|
|
107
|
-
const upstreamTasks = await getUpstreamTasks(originId);
|
|
108
|
-
const escalationHistory = await getEscalationHistory(originId);
|
|
49
|
+
const upstreamTasks = await (0, activities_proxy_1.getUpstreamTasks)(originId);
|
|
50
|
+
const escalationHistory = await (0, activities_proxy_1.getEscalationHistory)(originId);
|
|
109
51
|
const context = buildTriageContext(envelope.data, upstreamTasks, escalationHistory);
|
|
110
52
|
return runTriageLLM(envelope, { additionalContext: context });
|
|
111
53
|
}
|
|
@@ -113,11 +55,11 @@ async function mcpTriage(envelope) {
|
|
|
113
55
|
async function runTriageLLM(envelope, opts) {
|
|
114
56
|
const { originalWorkflowType } = envelope.data;
|
|
115
57
|
// 1. Infer tool tags from the original workflow type (from config cache, no DB hit)
|
|
116
|
-
const workflowTags = await getToolTags(originalWorkflowType);
|
|
58
|
+
const workflowTags = await (0, activities_proxy_1.getToolTags)(originalWorkflowType);
|
|
117
59
|
// 2. Load scoped tools with strategy advisor
|
|
118
60
|
// (Compiled workflow discovery happens in mcpTriageRouter, not here —
|
|
119
61
|
// this leaf only runs when no compiled match was found.)
|
|
120
|
-
const raw = await loadTriageTools(workflowTags.length > 0 ? workflowTags : undefined);
|
|
62
|
+
const raw = await (0, activities_proxy_1.loadTriageTools)(workflowTags.length > 0 ? workflowTags : undefined);
|
|
121
63
|
// 3. Build system prompt with tool inventory
|
|
122
64
|
const toolIds = raw.toolIds;
|
|
123
65
|
const inventoryParts = [
|
|
@@ -138,20 +80,20 @@ async function runTriageLLM(envelope, opts) {
|
|
|
138
80
|
let lastErrorKey = '';
|
|
139
81
|
let repeatedErrorCount = 0;
|
|
140
82
|
const BUDGET_WARNING_THRESHOLD = 3;
|
|
141
|
-
for (let round = 0; round < MAX_TOOL_ROUNDS; round++) {
|
|
142
|
-
const remaining = MAX_TOOL_ROUNDS - round;
|
|
83
|
+
for (let round = 0; round < activities_proxy_1.MAX_TOOL_ROUNDS; round++) {
|
|
84
|
+
const remaining = activities_proxy_1.MAX_TOOL_ROUNDS - round;
|
|
143
85
|
// Inject budget warning when approaching the limit
|
|
144
|
-
if (remaining <= BUDGET_WARNING_THRESHOLD && remaining < MAX_TOOL_ROUNDS) {
|
|
86
|
+
if (remaining <= BUDGET_WARNING_THRESHOLD && remaining < activities_proxy_1.MAX_TOOL_ROUNDS) {
|
|
145
87
|
messages.push({
|
|
146
88
|
role: 'user',
|
|
147
89
|
content: `[Rounds: ${remaining} remaining] Wrap up: consolidate your diagnosis and return your final JSON response.`,
|
|
148
90
|
});
|
|
149
91
|
}
|
|
150
92
|
// Only lightweight toolIds (string[]) flow through the durable pipe
|
|
151
|
-
const response = await callTriageLLM(messages, toolIds);
|
|
93
|
+
const response = await (0, activities_proxy_1.callTriageLLM)(messages, toolIds);
|
|
152
94
|
// No tool calls — LLM has produced its final answer
|
|
153
95
|
if (!response.tool_calls?.length) {
|
|
154
|
-
return (0, response_1.handleFinalResponse)(response.content || '', envelope, toolCallCount, responseDeps);
|
|
96
|
+
return (0, response_1.handleFinalResponse)(response.content || '', envelope, toolCallCount, activities_proxy_1.responseDeps);
|
|
155
97
|
}
|
|
156
98
|
// Execute each tool call
|
|
157
99
|
const fnCalls = response.tool_calls.filter((tc) => tc.type === 'function');
|
|
@@ -171,12 +113,12 @@ async function runTriageLLM(envelope, opts) {
|
|
|
171
113
|
args = {};
|
|
172
114
|
}
|
|
173
115
|
// callTool returns errors as data so the LLM can adapt
|
|
174
|
-
const result = await callTriageTool(toolCall.function.name, args);
|
|
116
|
+
const result = await (0, activities_proxy_1.callTriageTool)(toolCall.function.name, args);
|
|
175
117
|
// Durable waitFor: if the tool returns a signal, pause until human responds
|
|
176
118
|
if (result?.type === 'waitFor' && result?.signalId) {
|
|
177
119
|
const ctx = hotmesh_1.Durable.workflow.workflowInfo();
|
|
178
120
|
const workflowType = ctx.workflowTopic.replace(`${ctx.taskQueue}-`, '');
|
|
179
|
-
await ltEnrichEscalationRouting({
|
|
121
|
+
await (0, activities_proxy_1.ltEnrichEscalationRouting)({
|
|
180
122
|
escalationId: result.escalationId,
|
|
181
123
|
signalRouting: {
|
|
182
124
|
taskQueue: ctx.taskQueue,
|
|
@@ -217,8 +159,8 @@ async function runTriageLLM(envelope, opts) {
|
|
|
217
159
|
role: 'user',
|
|
218
160
|
content: `[CIRCUIT BREAKER] The tool "${toolCall.function.name}" has returned the same error ${repeatedErrorCount} times. Stop retrying this tool. Summarize your diagnosis and what failed.`,
|
|
219
161
|
});
|
|
220
|
-
const bailResponse = await callTriageLLM(messages, undefined);
|
|
221
|
-
return (0, response_1.handleFinalResponse)(bailResponse.content || '', envelope, toolCallCount, responseDeps);
|
|
162
|
+
const bailResponse = await (0, activities_proxy_1.callTriageLLM)(messages, undefined);
|
|
163
|
+
return (0, response_1.handleFinalResponse)(bailResponse.content || '', envelope, toolCallCount, activities_proxy_1.responseDeps);
|
|
222
164
|
}
|
|
223
165
|
}
|
|
224
166
|
}
|
|
@@ -232,8 +174,8 @@ async function runTriageLLM(envelope, opts) {
|
|
|
232
174
|
role: 'user',
|
|
233
175
|
content: prompts_1.TRIAGE_EXHAUSTED_ROUNDS,
|
|
234
176
|
});
|
|
235
|
-
const finalResponse = await callTriageLLM(messages, undefined);
|
|
236
|
-
return (0, response_1.handleFinalResponse)(finalResponse.content || '', envelope, toolCallCount, responseDeps);
|
|
177
|
+
const finalResponse = await (0, activities_proxy_1.callTriageLLM)(messages, undefined);
|
|
178
|
+
return (0, response_1.handleFinalResponse)(finalResponse.content || '', envelope, toolCallCount, activities_proxy_1.responseDeps);
|
|
237
179
|
}
|
|
238
180
|
// ── Context builders ─────────────────────────────────────────────
|
|
239
181
|
/** Assemble the triage context string from workflow lineage and history. */
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* The system prompt teaches the LLM how to construct HotMesh YAML DAGs
|
|
5
5
|
* directly from tool schemas — no execution trace needed.
|
|
6
6
|
*/
|
|
7
|
-
export declare function BUILDER_SYSTEM_PROMPT(toolInventory: string): string;
|
|
7
|
+
export declare function BUILDER_SYSTEM_PROMPT(toolInventory: string, activitySuffix?: string): string;
|
|
8
8
|
export declare const REFINE_PROMPT = "The workflow was tested and produced errors or incorrect results. Review the execution trace below and fix the YAML.\n\nCommon issues:\n- Missing .png extension on screenshot paths\n- Field name mismatch between output and input (e.g., producer outputs \"path\" but consumer expects \"image\")\n- Missing _scope or workflowName in input.maps\n- Wrong activity ID references in mappings\n- Missing job.maps on the final activity\n\nReturn the same JSON format as before with corrected yaml, activity_manifest, etc.";
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.REFINE_PROMPT = void 0;
|
|
10
10
|
exports.BUILDER_SYSTEM_PROMPT = BUILDER_SYSTEM_PROMPT;
|
|
11
|
-
function BUILDER_SYSTEM_PROMPT(toolInventory) {
|
|
11
|
+
function BUILDER_SYSTEM_PROMPT(toolInventory, activitySuffix) {
|
|
12
|
+
const suffix = activitySuffix || Math.random().toString(36).slice(2, 6);
|
|
12
13
|
return `You are a HotMesh workflow builder. Given a natural language description and a set of available MCP tools, you construct a deterministic YAML DAG workflow.
|
|
13
14
|
|
|
14
15
|
You do NOT execute tools. You reason about their input/output schemas and build the YAML declaratively.
|
|
@@ -45,7 +46,7 @@ app:
|
|
|
45
46
|
### trigger
|
|
46
47
|
Entry point. Receives user input. Always the first activity.
|
|
47
48
|
\`\`\`yaml
|
|
48
|
-
|
|
49
|
+
trigger_${suffix}:
|
|
49
50
|
title: Trigger
|
|
50
51
|
type: trigger
|
|
51
52
|
output:
|
|
@@ -56,7 +57,7 @@ trigger_x8kf:
|
|
|
56
57
|
### worker
|
|
57
58
|
Executes an MCP tool. Receives data via input.maps, produces output. Same suffix as the trigger.
|
|
58
59
|
\`\`\`yaml
|
|
59
|
-
|
|
60
|
+
capture_${suffix}:
|
|
60
61
|
title: Capture Page
|
|
61
62
|
type: worker
|
|
62
63
|
topic: <same as subscribes>
|
|
@@ -64,10 +65,10 @@ capture_x8kf:
|
|
|
64
65
|
schema:
|
|
65
66
|
type: object
|
|
66
67
|
maps:
|
|
67
|
-
url: '{
|
|
68
|
+
url: '{trigger_${suffix}.output.data.url}'
|
|
68
69
|
screenshot_path:
|
|
69
70
|
'@pipe':
|
|
70
|
-
- ['{
|
|
71
|
+
- ['{trigger_${suffix}.output.data.slug}', '.png']
|
|
71
72
|
- ['{@string.concat}']
|
|
72
73
|
workflowName: capture_page
|
|
73
74
|
output:
|
|
@@ -150,7 +151,7 @@ Sub-pipes must be ROW-LEVEL entries in the parent pipe array — each is a separ
|
|
|
150
151
|
dated_key:
|
|
151
152
|
'@pipe':
|
|
152
153
|
- '@pipe':
|
|
153
|
-
- ['{
|
|
154
|
+
- ['{trigger_${suffix}.output.data.slug}', '-']
|
|
154
155
|
- ['{@string.concat}']
|
|
155
156
|
- '@pipe':
|
|
156
157
|
- ['{@date.now}']
|
|
@@ -168,7 +169,7 @@ CRITICAL RULES for nested @pipe:
|
|
|
168
169
|
path:
|
|
169
170
|
'@pipe':
|
|
170
171
|
- '@pipe':
|
|
171
|
-
- ['{
|
|
172
|
+
- ['{trigger_${suffix}.output.data.domain}', '/', '{trigger_${suffix}.output.data.key}', '/']
|
|
172
173
|
- ['{@string.concat}']
|
|
173
174
|
- '@pipe':
|
|
174
175
|
- ['{@date.now}']
|
|
@@ -203,29 +204,29 @@ IMPORTANT: A bare array like \`['.png']\` as a row after sub-pipes will CRASH
|
|
|
203
204
|
|
|
204
205
|
1. **Trigger first**: Every workflow starts with a trigger activity
|
|
205
206
|
2. **Worker per tool**: Each MCP tool call is a worker activity
|
|
206
|
-
3. **Collision-proof activity IDs**: Multiple workflows share the same app namespace. Activity IDs MUST be globally unique within the app. Use a descriptive name with a shared 4-char random suffix appended to every activity in the flow: \`
|
|
207
|
+
3. **Collision-proof activity IDs**: Multiple workflows share the same app namespace. Activity IDs MUST be globally unique within the app. Use a descriptive name with a shared 4-char random suffix appended to every activity in the flow: \`trigger_${suffix}\`, \`capture_${suffix}\`, \`analyze_${suffix}\`, \`store_${suffix}\`. The suffix is the same for all activities in one workflow but unique across workflows. NEVER use bare names like \`trigger\`, \`capture\`, \`analyze\` — they WILL collide with other workflows in the same app.
|
|
207
208
|
4. **workflowName**: Every worker MUST have \`workflowName: '<tool_name>'\` in its input.maps — this routes to the correct MCP tool handler
|
|
208
209
|
5. **mcp_server_id**: In the activity_manifest, use the exact hyphenated server name from the inventory (e.g., "long-tail-vision"), NOT the underscored tool prefix (e.g., "long_tail_vision")
|
|
209
|
-
6. **_scope threading**: Every worker MUST have \`_scope: '{
|
|
210
|
+
6. **_scope threading**: Every worker MUST have \`_scope: '{trigger_${suffix}.output.data._scope}'\` (using YOUR trigger's ID) for IAM context
|
|
210
211
|
7. **Wire outputs forward**: Use \`{prevActivity.output.data.fieldName}\` to pass data between steps
|
|
211
212
|
8. **Use @pipe for transforms**: When a value needs runtime computation (date stamp, string concat, slugify), use @pipe — never hardcode computed values
|
|
212
|
-
9. **Simple fields stay simple**: If a field just passes a trigger value through (domain, key, url), use a plain reference like \`'{
|
|
213
|
+
9. **Simple fields stay simple**: If a field just passes a trigger value through (domain, key, url), use a plain reference like \`'{trigger_${suffix}.output.data.domain}'\` — NEVER wrap it in @pipe. Only use @pipe when actual transformation is needed.
|
|
213
214
|
10. **File extensions**: Screenshot paths MUST include .png extension. Use @pipe concat if deriving from a slug
|
|
214
215
|
11. **job.maps on last activity**: The final activity should have job.maps to promote output fields to the workflow result
|
|
215
216
|
12. **Linear transitions**: Chain activities with transitions unless branching or iteration is needed
|
|
216
217
|
13. **Conditional transitions**: For branching, use multi-target transitions with conditions:
|
|
217
218
|
\`\`\`yaml
|
|
218
219
|
transitions:
|
|
219
|
-
|
|
220
|
-
- to:
|
|
220
|
+
check_${suffix}:
|
|
221
|
+
- to: handle_error_${suffix}
|
|
221
222
|
conditions:
|
|
222
223
|
code: 500
|
|
223
|
-
- to:
|
|
224
|
+
- to: proceed_${suffix}
|
|
224
225
|
\`\`\`
|
|
225
226
|
Conditions can match on \`code\` (HTTP status) or \`match\` (field comparisons). The first matching condition wins; the last entry (no conditions) is the default.
|
|
226
227
|
14. **Trigger stats for idempotency**: Use \`stats.id\` and \`stats.key\` on the trigger when the workflow needs custom job IDs or indexed lookups:
|
|
227
228
|
\`\`\`yaml
|
|
228
|
-
|
|
229
|
+
trigger_${suffix}:
|
|
229
230
|
type: trigger
|
|
230
231
|
stats:
|
|
231
232
|
id: '{$self.input.data.workflowId}'
|
|
@@ -234,11 +235,11 @@ trigger_x8kf:
|
|
|
234
235
|
|
|
235
236
|
## Activity Manifest
|
|
236
237
|
|
|
237
|
-
Along with the YAML, produce an activity_manifest array describing each activity. Note how all activity IDs share the same random suffix (\`
|
|
238
|
+
Along with the YAML, produce an activity_manifest array describing each activity. Note how all activity IDs share the same random suffix (\`_${suffix}\`) for collision-proofing while remaining human-readable:
|
|
238
239
|
\`\`\`json
|
|
239
240
|
[
|
|
240
241
|
{
|
|
241
|
-
"activity_id": "
|
|
242
|
+
"activity_id": "trigger_${suffix}",
|
|
242
243
|
"title": "Trigger",
|
|
243
244
|
"type": "trigger",
|
|
244
245
|
"tool_source": "trigger",
|
|
@@ -247,7 +248,7 @@ Along with the YAML, produce an activity_manifest array describing each activity
|
|
|
247
248
|
"output_fields": ["url", "slug"]
|
|
248
249
|
},
|
|
249
250
|
{
|
|
250
|
-
"activity_id": "
|
|
251
|
+
"activity_id": "capture_${suffix}",
|
|
251
252
|
"title": "Capture Page",
|
|
252
253
|
"type": "worker",
|
|
253
254
|
"tool_source": "mcp",
|
|
@@ -256,7 +257,7 @@ Along with the YAML, produce an activity_manifest array describing each activity
|
|
|
256
257
|
"mcp_server_id": "long-tail-playwright-cli",
|
|
257
258
|
"mcp_tool_name": "capture_page",
|
|
258
259
|
"tool_arguments": {},
|
|
259
|
-
"input_mappings": { "url": "{
|
|
260
|
+
"input_mappings": { "url": "{trigger_${suffix}.output.data.url}" },
|
|
260
261
|
"output_fields": ["page_id", "path", "url", "title"]
|
|
261
262
|
}
|
|
262
263
|
]
|
|
@@ -290,11 +291,11 @@ When the user provides answers to your questions, build the workflow immediately
|
|
|
290
291
|
|
|
291
292
|
## Output Format
|
|
292
293
|
|
|
293
|
-
CRITICAL: The "name" field MUST match the "subscribes" topic in the YAML exactly. Use
|
|
294
|
+
CRITICAL: The "name" field MUST match the "subscribes" topic in the YAML exactly. Use snake_case (e.g. "screenshot_analyze_store", "capture_page", "daily_report"). Only lowercase letters, digits, and underscores. The name and subscribes topic MUST be identical.
|
|
294
295
|
|
|
295
296
|
Return a JSON object (no markdown fences):
|
|
296
297
|
{
|
|
297
|
-
"name": "
|
|
298
|
+
"name": "screenshot_analyze_store",
|
|
298
299
|
"description": "What this workflow does",
|
|
299
300
|
"yaml": "<the complete YAML string>",
|
|
300
301
|
"input_schema": { <JSON Schema for trigger inputs> },
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* These are side-effect functions that update the database.
|
|
4
4
|
*/
|
|
5
5
|
import type { PlanItem, LTWorkflowSetStatus } from '../../../../types/workflow-set';
|
|
6
|
-
export declare function persistPlan(setId: string, planItems: PlanItem[]): Promise<void>;
|
|
6
|
+
export declare function persistPlan(setId: string, planItems: PlanItem[], namespaces?: string[]): Promise<void>;
|
|
7
7
|
export interface BuiltWorkflowData {
|
|
8
8
|
name: string;
|
|
9
9
|
description: string;
|
|
@@ -13,6 +13,7 @@ export interface BuiltWorkflowData {
|
|
|
13
13
|
activity_manifest: unknown[];
|
|
14
14
|
tags: string[];
|
|
15
15
|
graph_topic: string;
|
|
16
|
+
original_prompt?: string;
|
|
16
17
|
}
|
|
17
18
|
export declare function persistBuiltWorkflow(setId: string, planItem: PlanItem, builderOutput: BuiltWorkflowData): Promise<string>;
|
|
18
19
|
export declare function updateSetStatus(setId: string, status: LTWorkflowSetStatus): Promise<void>;
|
|
@@ -12,9 +12,9 @@ const workflow_sets_1 = require("../../../../services/workflow-sets");
|
|
|
12
12
|
const db_1 = require("../../../../services/yaml-workflow/db");
|
|
13
13
|
const deployer_1 = require("../../../../services/yaml-workflow/deployer");
|
|
14
14
|
const workers_1 = require("../../../../services/yaml-workflow/workers");
|
|
15
|
-
async function persistPlan(setId, planItems) {
|
|
16
|
-
const
|
|
17
|
-
await (0, workflow_sets_1.updateWorkflowSetPlan)(setId, planItems,
|
|
15
|
+
async function persistPlan(setId, planItems, namespaces) {
|
|
16
|
+
const ns = namespaces || [...new Set(planItems.map(w => w.namespace))];
|
|
17
|
+
await (0, workflow_sets_1.updateWorkflowSetPlan)(setId, planItems, ns);
|
|
18
18
|
}
|
|
19
19
|
async function persistBuiltWorkflow(setId, planItem, builderOutput) {
|
|
20
20
|
const input = {
|
|
@@ -28,6 +28,7 @@ async function persistBuiltWorkflow(setId, planItem, builderOutput) {
|
|
|
28
28
|
activity_manifest: builderOutput.activity_manifest,
|
|
29
29
|
tags: builderOutput.tags || [],
|
|
30
30
|
source_workflow_type: 'mcpWorkflowPlanner',
|
|
31
|
+
original_prompt: builderOutput.original_prompt,
|
|
31
32
|
set_id: setId,
|
|
32
33
|
set_role: planItem.role,
|
|
33
34
|
set_build_order: planItem.build_order,
|
|
@@ -51,14 +51,48 @@ const { generatePlan, persistPlan, persistBuiltWorkflow, updateSetStatus, deploy
|
|
|
51
51
|
* and deploys the resulting set.
|
|
52
52
|
*/
|
|
53
53
|
async function mcpWorkflowPlanner(envelope) {
|
|
54
|
-
const { specification, setId } = envelope.data;
|
|
54
|
+
const { specification, setId, existingPlan, existingSchemas, } = envelope.data;
|
|
55
|
+
const isAddition = !!existingPlan?.length;
|
|
55
56
|
// 1. Generate plan from specification
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// When adding to an existing set, tell the planner what already exists
|
|
58
|
+
let planSpec = specification;
|
|
59
|
+
if (isAddition) {
|
|
60
|
+
const existingNames = existingPlan.map(p => `- ${p.name} [${p.namespace}]: ${p.description}`).join('\n');
|
|
61
|
+
const namespaces = [...new Set(existingPlan.map(p => p.namespace))];
|
|
62
|
+
planSpec = `${specification}\n\n## Existing workflows in this set (do NOT recreate these):\n${existingNames}\n\n## Namespace constraint\nNew workflows MUST use namespace "${namespaces[0]}". This set already uses this namespace and all tools must be co-located.`;
|
|
63
|
+
}
|
|
64
|
+
const planResult = await generatePlan(planSpec);
|
|
65
|
+
// 2. Offset build_order for additions so new items sort after existing ones
|
|
66
|
+
const buildOrderOffset = isAddition
|
|
67
|
+
? Math.max(...existingPlan.map((_, i) => i), 0) + 1
|
|
68
|
+
: 0;
|
|
69
|
+
if (isAddition) {
|
|
70
|
+
for (const item of planResult.workflows) {
|
|
71
|
+
item.build_order += buildOrderOffset;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 2b. Persist plan — append to existing plan for additions
|
|
75
|
+
if (isAddition) {
|
|
76
|
+
// Fetch current plan from the set and merge
|
|
77
|
+
const { getWorkflowSet } = await Promise.resolve().then(() => __importStar(require('../../../services/workflow-sets')));
|
|
78
|
+
const currentSet = await getWorkflowSet(setId);
|
|
79
|
+
const mergedPlan = [...(currentSet?.plan || []), ...planResult.workflows];
|
|
80
|
+
const mergedNamespaces = [...new Set([
|
|
81
|
+
...(currentSet?.namespaces || []),
|
|
82
|
+
...planResult.workflows.map(w => w.namespace),
|
|
83
|
+
])];
|
|
84
|
+
await persistPlan(setId, mergedPlan, mergedNamespaces);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
await persistPlan(setId, planResult.workflows);
|
|
88
|
+
}
|
|
59
89
|
// 3. Build each workflow in dependency order (leaf-first)
|
|
60
90
|
await updateSetStatus(setId, 'building');
|
|
61
|
-
|
|
91
|
+
// Seed sibling schemas with existing workflows when adding to a set
|
|
92
|
+
const builtWorkflows = (existingSchemas || []).map(s => ({
|
|
93
|
+
...s,
|
|
94
|
+
id: '',
|
|
95
|
+
}));
|
|
62
96
|
for (const planItem of planResult.workflows) {
|
|
63
97
|
// Build context for the builder: sibling schemas for composition wiring
|
|
64
98
|
const siblingSchemas = builtWorkflows.map(w => ({
|
|
@@ -87,6 +121,7 @@ async function mcpWorkflowPlanner(envelope) {
|
|
|
87
121
|
taskQueue: 'long-tail-system',
|
|
88
122
|
});
|
|
89
123
|
const builderData = builderResult.data;
|
|
124
|
+
const builderPrompt = buildPromptForPlanItem(planItem, siblingSchemas);
|
|
90
125
|
// Persist the built workflow with set membership
|
|
91
126
|
const yamlId = await persistBuiltWorkflow(setId, planItem, {
|
|
92
127
|
name: builderData.name || planItem.name,
|
|
@@ -97,6 +132,7 @@ async function mcpWorkflowPlanner(envelope) {
|
|
|
97
132
|
activity_manifest: builderData.activity_manifest || [],
|
|
98
133
|
tags: builderData.tags || [],
|
|
99
134
|
graph_topic: builderData.name || planItem.name,
|
|
135
|
+
original_prompt: builderPrompt,
|
|
100
136
|
});
|
|
101
137
|
builtWorkflows.push({
|
|
102
138
|
name: planItem.name,
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* The planner prompt teaches the LLM how to decompose a specification
|
|
5
5
|
* into a set of related workflows with dependency ordering.
|
|
6
6
|
*/
|
|
7
|
-
export declare const PLANNER_SYSTEM_PROMPT = "You are a workflow planner. Given a specification (PRD, TDD, or natural language description of a multi-step process), you decompose it into a set of standalone workflows that together implement the complete system.\n\n## Your Task\n\nAnalyze the specification and produce a structured plan: an array of workflow items, each with a name, description, namespace, role, dependencies, and input/output contract.\n\n## Workflow Roles\n\n- **leaf**: A standalone workflow that calls MCP tools directly. No dependencies on other custom workflows in the plan.\n- **composition**: A workflow that orchestrates other workflows in the plan. It calls them using HotMesh await activities (same namespace) or MCP tool calls (different namespace).\n- **router**: A workflow that routes to different workflows based on input conditions.\n\n## Namespace Rules\n\nWorkflows in the **same namespace** are deployed together as one HotMesh application. They can invoke each other using await activities (synchronous composition within the same execution engine).\n\nWorkflows in **different namespaces** are independent. They invoke each other as MCP tools (discovered by tag, invoked through the tool protocol).\n\n**Same namespace when:** tightly coupled, shared data context, always deployed together, phases of the same process.\n**Different namespace when:** independently reusable, different versioning cycles, different teams/domains.\n\n## Build Order\n\nLeaf workflows are built first (build_order = 0). Composition workflows that depend on leaves come next (build_order = 1). Workflows that compose those compositions come after (build_order = 2). The tree builds from leaves up.\n\n## Input/Output Contracts\n\nEach workflow has a typed input and output contract (JSON Schema). Composition workflows wire their inputs to child workflow inputs, and child outputs back to their own outputs. These contracts are how the builder knows what to wire.\n\n## Output Format\n\nReturn a JSON object (no markdown fences):\n{\n \"plan_name\": \"
|
|
7
|
+
export declare const PLANNER_SYSTEM_PROMPT = "You are a workflow planner. Given a specification (PRD, TDD, or natural language description of a multi-step process), you decompose it into a set of standalone workflows that together implement the complete system.\n\n## Your Task\n\nAnalyze the specification and produce a structured plan: an array of workflow items, each with a name, description, namespace, role, dependencies, and input/output contract.\n\n## Workflow Roles\n\n- **leaf**: A standalone workflow that calls MCP tools directly. No dependencies on other custom workflows in the plan.\n- **composition**: A workflow that orchestrates other workflows in the plan. It calls them using HotMesh await activities (same namespace) or MCP tool calls (different namespace).\n- **router**: A workflow that routes to different workflows based on input conditions.\n\n## Namespace Rules\n\nWorkflows in the **same namespace** are deployed together as one HotMesh application. They can invoke each other using await activities (synchronous composition within the same execution engine).\n\nWorkflows in **different namespaces** are independent. They invoke each other as MCP tools (discovered by tag, invoked through the tool protocol).\n\n**Same namespace when:** tightly coupled, shared data context, always deployed together, phases of the same process.\n**Different namespace when:** independently reusable, different versioning cycles, different teams/domains.\n\n## Build Order\n\nLeaf workflows are built first (build_order = 0). Composition workflows that depend on leaves come next (build_order = 1). Workflows that compose those compositions come after (build_order = 2). The tree builds from leaves up.\n\n## Input/Output Contracts\n\nEach workflow has a typed input and output contract (JSON Schema). Composition workflows wire their inputs to child workflow inputs, and child outputs back to their own outputs. These contracts are how the builder knows what to wire.\n\n## Output Format\n\nReturn a JSON object (no markdown fences):\n{\n \"plan_name\": \"snake_case_plan_name\",\n \"plan_description\": \"What this set of workflows accomplishes\",\n \"workflows\": [\n {\n \"name\": \"snake_case_workflow_name\",\n \"description\": \"What this workflow does \u2014 specific enough to build from\",\n \"namespace\": \"appnamespace\",\n \"role\": \"leaf\" | \"composition\" | \"router\",\n \"dependencies\": [\"name-of-workflow-this-depends-on\"],\n \"build_order\": 0,\n \"io_contract\": {\n \"input_schema\": {\n \"type\": \"object\",\n \"properties\": { ... },\n \"required\": [...]\n },\n \"output_schema\": {\n \"type\": \"object\",\n \"properties\": { ... }\n }\n }\n }\n ]\n}\n\n## Rules\n\n1. Every workflow must be independently testable with sample inputs\n2. Leaf workflows should be fine-grained: one responsibility per workflow\n3. Composition workflows encode sequencing, branching, and escalation gates\n4. Do not create a workflow for something a single MCP tool call can handle \u2014 use a leaf workflow only when there are multiple steps or conditional logic\n5. Keep the number of workflows minimal \u2014 prefer fewer, well-scoped workflows over many trivial ones\n6. Names must be globally unique within the plan\n7. Dependencies reference other workflow names in the plan (not external tools)\n8. If the specification mentions human review, approval, or escalation, the relevant workflow should include a signal/hook step (describe this in the workflow description)";
|
|
@@ -40,13 +40,13 @@ Each workflow has a typed input and output contract (JSON Schema). Composition w
|
|
|
40
40
|
|
|
41
41
|
Return a JSON object (no markdown fences):
|
|
42
42
|
{
|
|
43
|
-
"plan_name": "
|
|
43
|
+
"plan_name": "snake_case_plan_name",
|
|
44
44
|
"plan_description": "What this set of workflows accomplishes",
|
|
45
45
|
"workflows": [
|
|
46
46
|
{
|
|
47
|
-
"name": "
|
|
47
|
+
"name": "snake_case_workflow_name",
|
|
48
48
|
"description": "What this workflow does — specific enough to build from",
|
|
49
|
-
"namespace": "
|
|
49
|
+
"namespace": "appnamespace",
|
|
50
50
|
"role": "leaf" | "composition" | "router",
|
|
51
51
|
"dependencies": ["name-of-workflow-this-depends-on"],
|
|
52
52
|
"build_order": 0,
|