@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.
Files changed (424) hide show
  1. package/README.md +15 -0
  2. package/build/api/escalations/bulk.d.ts +78 -0
  3. package/build/api/escalations/bulk.js +279 -0
  4. package/build/api/escalations/claim.d.ts +30 -0
  5. package/build/api/escalations/claim.js +121 -0
  6. package/build/api/escalations/create.d.ts +29 -0
  7. package/build/api/escalations/create.js +101 -0
  8. package/build/api/escalations/helpers.d.ts +10 -0
  9. package/build/api/escalations/helpers.js +80 -0
  10. package/build/api/escalations/index.d.ts +6 -0
  11. package/build/api/escalations/index.js +26 -0
  12. package/build/api/escalations/list.d.ts +75 -0
  13. package/build/api/escalations/list.js +170 -0
  14. package/build/api/escalations/resolve.d.ts +18 -0
  15. package/build/api/escalations/resolve.js +243 -0
  16. package/build/api/escalations/single.d.ts +37 -0
  17. package/build/api/escalations/single.js +123 -0
  18. package/build/api/files.d.ts +16 -0
  19. package/build/api/files.js +61 -0
  20. package/build/api/knowledge.d.ts +36 -0
  21. package/build/api/knowledge.js +112 -0
  22. package/build/api/mcp/index.d.ts +2 -0
  23. package/build/api/mcp/index.js +16 -0
  24. package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
  25. package/build/api/{mcp.js → mcp/servers.js} +4 -65
  26. package/build/api/mcp/tools.d.ts +33 -0
  27. package/build/api/mcp/tools.js +64 -0
  28. package/build/api/mcp-runs.d.ts +2 -0
  29. package/build/api/mcp-runs.js +2 -0
  30. package/build/api/settings.js +9 -1
  31. package/build/api/workflow-sets.d.ts +11 -0
  32. package/build/api/workflow-sets.js +62 -0
  33. package/build/api/workflows/config.d.ts +64 -0
  34. package/build/api/workflows/config.js +142 -0
  35. package/build/api/workflows/discovery.d.ts +29 -0
  36. package/build/api/workflows/discovery.js +153 -0
  37. package/build/api/workflows/index.d.ts +3 -0
  38. package/build/api/workflows/index.js +18 -0
  39. package/build/api/workflows/invocation.d.ts +67 -0
  40. package/build/api/workflows/invocation.js +188 -0
  41. package/build/api/yaml-workflows/cron.d.ts +39 -0
  42. package/build/api/yaml-workflows/cron.js +127 -0
  43. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -137
  44. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
  45. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  46. package/build/api/yaml-workflows/deploy.js +223 -0
  47. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  48. package/build/api/yaml-workflows/helpers.js +8 -0
  49. package/build/api/yaml-workflows/index.d.ts +4 -0
  50. package/build/api/yaml-workflows/index.js +27 -0
  51. package/build/api/yaml-workflows/versions.d.ts +43 -0
  52. package/build/api/yaml-workflows/versions.js +124 -0
  53. package/build/bin/ltc.d.ts +2 -0
  54. package/build/bin/ltc.js +220 -0
  55. package/build/examples/seed-data.d.ts +55 -0
  56. package/build/examples/seed-data.js +161 -0
  57. package/build/examples/seed.js +7 -164
  58. package/build/lib/cli/auth.d.ts +23 -0
  59. package/build/lib/cli/auth.js +167 -0
  60. package/build/lib/cli/client.d.ts +6 -0
  61. package/build/lib/cli/client.js +31 -0
  62. package/build/lib/cli/commands/escalations.d.ts +19 -0
  63. package/build/lib/cli/commands/escalations.js +69 -0
  64. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  65. package/build/lib/cli/commands/knowledge.js +87 -0
  66. package/build/lib/cli/commands/mcp.d.ts +8 -0
  67. package/build/lib/cli/commands/mcp.js +33 -0
  68. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  69. package/build/lib/cli/commands/pipelines.js +67 -0
  70. package/build/lib/cli/commands/status.d.ts +1 -0
  71. package/build/lib/cli/commands/status.js +28 -0
  72. package/build/lib/cli/commands/users.d.ts +7 -0
  73. package/build/lib/cli/commands/users.js +25 -0
  74. package/build/lib/cli/commands/workflows.d.ts +16 -0
  75. package/build/lib/cli/commands/workflows.js +104 -0
  76. package/build/lib/cli/compile.d.ts +2 -0
  77. package/build/lib/cli/compile.js +165 -0
  78. package/build/lib/cli/format.d.ts +23 -0
  79. package/build/lib/cli/format.js +94 -0
  80. package/build/lib/cli/init.d.ts +1 -0
  81. package/build/lib/cli/init.js +61 -0
  82. package/build/lib/cli/output.d.ts +27 -0
  83. package/build/lib/cli/output.js +126 -0
  84. package/build/lib/cli/scanner.d.ts +10 -0
  85. package/build/lib/cli/scanner.js +164 -0
  86. package/build/lib/cli/types.d.ts +16 -0
  87. package/build/lib/cli/types.js +2 -0
  88. package/build/lib/logger/index.d.ts +0 -9
  89. package/build/lib/logger/index.js +9 -4
  90. package/build/lib/storage/index.js +2 -2
  91. package/build/lib/storage/local.d.ts +15 -0
  92. package/build/lib/storage/local.js +63 -0
  93. package/build/lib/storage/mime.d.ts +4 -0
  94. package/build/lib/storage/mime.js +31 -0
  95. package/build/lib/storage/s3.d.ts +16 -0
  96. package/build/lib/storage/s3.js +70 -0
  97. package/build/lib/storage/types.d.ts +18 -0
  98. package/build/modules/utils.d.ts +73 -0
  99. package/build/modules/utils.js +84 -0
  100. package/build/routes/file-browser.d.ts +2 -0
  101. package/build/routes/file-browser.js +126 -0
  102. package/build/routes/files.js +25 -17
  103. package/build/routes/index.js +4 -0
  104. package/build/routes/knowledge.d.ts +2 -0
  105. package/build/routes/knowledge.js +141 -0
  106. package/build/routes/mcp-runs.js +2 -0
  107. package/build/routes/workflow-sets.js +9 -0
  108. package/build/routes/yaml-workflows/crud.js +9 -0
  109. package/build/routes/yaml-workflows/deployment.js +8 -0
  110. package/build/sdk/index.d.ts +17 -0
  111. package/build/sdk/index.js +19 -0
  112. package/build/services/insight/index.d.ts +13 -0
  113. package/build/services/insight/index.js +4 -7
  114. package/build/services/insight/prompts.d.ts +1 -1
  115. package/build/services/insight/prompts.js +1 -1
  116. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  117. package/build/services/mcp/client/connection-dispatch.js +78 -0
  118. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  119. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  120. package/build/services/mcp/client/connection-test.d.ts +10 -0
  121. package/build/services/mcp/client/connection-test.js +49 -0
  122. package/build/services/mcp/client/connection.d.ts +3 -68
  123. package/build/services/mcp/client/connection.js +15 -393
  124. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  125. package/build/services/mcp/server-lifecycle.js +49 -0
  126. package/build/services/mcp/server-tools.d.ts +13 -0
  127. package/build/services/mcp/server-tools.js +287 -0
  128. package/build/services/mcp/server.d.ts +2 -26
  129. package/build/services/mcp/server.js +7 -315
  130. package/build/services/mcp-runs/queries.d.ts +2 -0
  131. package/build/services/mcp-runs/queries.js +11 -1
  132. package/build/services/mcp-runs/sql.d.ts +1 -1
  133. package/build/services/mcp-runs/sql.js +2 -2
  134. package/build/services/workflow-sets/db.d.ts +1 -0
  135. package/build/services/workflow-sets/db.js +6 -0
  136. package/build/services/workflow-sets/index.d.ts +1 -1
  137. package/build/services/workflow-sets/index.js +2 -1
  138. package/build/services/workflow-sets/sql.d.ts +1 -0
  139. package/build/services/workflow-sets/sql.js +6 -1
  140. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  141. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  142. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  143. package/build/services/yaml-workflow/db-versions.js +76 -0
  144. package/build/services/yaml-workflow/db.d.ts +14 -12
  145. package/build/services/yaml-workflow/db.js +32 -70
  146. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  147. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  148. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  149. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  150. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  151. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  152. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  153. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  154. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  155. package/build/services/yaml-workflow/generator.js +4 -4
  156. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  157. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  158. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  159. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  160. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  161. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  162. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  163. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  164. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  165. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  166. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  167. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  168. package/build/services/yaml-workflow/sql.d.ts +2 -1
  169. package/build/services/yaml-workflow/sql.js +10 -3
  170. package/build/start/workers.js +6 -5
  171. package/build/system/activities/file-storage.d.ts +4 -0
  172. package/build/system/activities/file-storage.js +7 -1
  173. package/build/system/activities/knowledge.d.ts +23 -0
  174. package/build/system/activities/knowledge.js +50 -10
  175. package/build/system/activities/schema-exchange.d.ts +50 -0
  176. package/build/system/activities/schema-exchange.js +210 -0
  177. package/build/system/activities/sql.d.ts +4 -1
  178. package/build/system/activities/sql.js +37 -2
  179. package/build/system/index.js +1 -0
  180. package/build/system/mcp-servers/file-storage.js +3 -1
  181. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  182. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  183. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  184. package/build/system/mcp-servers/human-queue.js +9 -51
  185. package/build/system/mcp-servers/knowledge.js +69 -6
  186. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  187. package/build/system/mcp-servers/schema-exchange.js +93 -0
  188. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  189. package/build/system/seed/server-definitions.d.ts +112 -1
  190. package/build/system/seed/server-definitions.js +37 -0
  191. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  192. package/build/system/seed/tool-manifests-data.js +37 -1
  193. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  194. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  195. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  196. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  197. package/build/system/workflows/mcp-triage/index.js +17 -75
  198. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  199. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  200. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
  201. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
  202. package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
  203. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  204. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  205. package/build/tsconfig.tsbuildinfo +1 -1
  206. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
  207. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  208. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  209. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  210. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
  211. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  212. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  213. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  214. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  215. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  216. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
  217. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  218. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
  219. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  220. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  221. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  222. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
  223. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
  224. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
  225. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  226. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
  227. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  228. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  229. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  230. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
  231. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  232. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
  233. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  234. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
  235. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  236. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
  237. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  238. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  239. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  240. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +2 -0
  241. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  242. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
  243. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
  244. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
  245. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
  246. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
  247. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
  248. package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
  249. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  250. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
  251. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  252. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  253. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  254. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
  255. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  256. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  257. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  258. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  259. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  260. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
  261. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  262. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
  263. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  264. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
  265. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DurFwIwe.js.map} +1 -1
  266. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  267. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  268. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
  269. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
  270. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
  271. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  272. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
  273. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  274. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
  275. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  276. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  277. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  278. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
  279. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  280. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
  281. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  282. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  283. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  284. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
  285. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  286. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
  287. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  288. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
  289. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  290. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
  291. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
  292. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  293. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  294. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
  295. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
  296. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  297. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  298. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  299. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  300. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  301. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  302. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
  303. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
  304. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
  305. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
  306. package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
  307. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  308. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
  309. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-CmznCuAx.js.map} +1 -1
  310. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  311. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  312. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  313. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  314. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  315. package/dashboard/dist/assets/index-C8-UaN4N.js +2 -0
  316. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-C8-UaN4N.js.map} +1 -1
  317. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  318. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  319. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  320. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-CjxHCVxl.js.map} +1 -1
  321. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  322. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  323. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  324. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
  325. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
  326. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
  327. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
  328. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-XGOmZ117.js.map} +1 -1
  329. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  330. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  331. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
  332. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  333. package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
  334. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
  335. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
  336. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
  337. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
  338. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
  339. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
  340. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
  341. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
  342. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  343. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
  344. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  345. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
  346. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
  347. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
  348. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
  349. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  350. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  351. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  352. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  353. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  354. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
  355. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
  356. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
  357. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
  358. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  359. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
  360. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
  361. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
  362. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
  363. package/dashboard/dist/index.html +3 -3
  364. package/docs/api/http/file-browser.md +101 -0
  365. package/docs/api/http/knowledge.md +203 -0
  366. package/docs/api/http/settings.md +6 -4
  367. package/docs/api/sdk/files.md +68 -0
  368. package/docs/api/sdk/knowledge.md +126 -0
  369. package/docs/api/sdk/settings.md +3 -2
  370. package/docs/cli.md +171 -0
  371. package/docs/compilation.md +16 -0
  372. package/docs/compiler.md +311 -0
  373. package/docs/events.md +19 -0
  374. package/docs/schema-exchange.md +173 -0
  375. package/docs/self-test.md +106 -0
  376. package/docs/workflows.md +19 -0
  377. package/package.json +15 -2
  378. package/build/api/escalations.d.ts +0 -271
  379. package/build/api/escalations.js +0 -932
  380. package/build/api/workflows.d.ts +0 -158
  381. package/build/api/workflows.js +0 -414
  382. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js +0 -2
  383. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
  384. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  385. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  386. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  387. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  388. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  389. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  390. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  391. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  392. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  393. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
  394. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
  395. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  396. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  397. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  398. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  399. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  400. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  401. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  402. package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
  403. package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
  404. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  405. package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
  406. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  407. package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
  408. package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
  409. package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
  410. package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
  411. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  412. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  413. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  414. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  415. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  416. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  417. package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
  418. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  419. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  420. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  421. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  422. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  423. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  424. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -4,4 +4,4 @@ export declare const ACTIVE_GRAPH_TOPICS = "SELECT DISTINCT graph_topic FROM lt_
4
4
  export declare const COUNT_JOBS: (schema: string, where: string) => string;
5
5
  export declare const GET_JOB: (schema: string) => string;
6
6
  export declare const GET_JOB_ATTRIBUTES: (schema: string) => string;
7
- export declare const LIST_JOBS: (schema: string, appId: string, where: string, limitIdx: number, offsetIdx: number) => string;
7
+ export declare const LIST_JOBS: (schema: string, appId: string, where: string, limitIdx: number, offsetIdx: number, orderBy?: string) => string;
@@ -18,7 +18,7 @@ exports.GET_JOB = GET_JOB;
18
18
  const GET_JOB_ATTRIBUTES = (schema) => `SELECT symbol, dimension, value FROM ${schema}.jobs_attributes WHERE job_id = $1 ORDER BY symbol, dimension`;
19
19
  exports.GET_JOB_ATTRIBUTES = GET_JOB_ATTRIBUTES;
20
20
  // ─── Queries (queries.ts) ───────────────────────────────────────────────────
21
- const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbols AS (
21
+ const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx, orderBy) => `WITH ju_symbols AS (
22
22
  SELECT value FROM ${schema}.symbols
23
23
  WHERE key LIKE 'keys:%' AND field = 'metadata/ju'
24
24
  )
@@ -33,6 +33,6 @@ const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbol
33
33
  AND ju.symbol IN (SELECT value FROM ju_symbols)
34
34
  AND (ju.dimension IS NULL OR ju.dimension = '')
35
35
  ${where}
36
- ORDER BY (CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC
36
+ ORDER BY ${orderBy || '(CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC'}
37
37
  LIMIT $${limitIdx} OFFSET $${offsetIdx}`;
38
38
  exports.LIST_JOBS = LIST_JOBS;
@@ -2,6 +2,7 @@ import type { LTWorkflowSetRecord, LTWorkflowSetStatus, CreateWorkflowSetInput,
2
2
  export declare function createWorkflowSet(input: CreateWorkflowSetInput): Promise<LTWorkflowSetRecord>;
3
3
  export declare function getWorkflowSet(id: string): Promise<LTWorkflowSetRecord | null>;
4
4
  export declare function updateWorkflowSetPlan(id: string, plan: PlanItem[], namespaces: string[]): Promise<LTWorkflowSetRecord | null>;
5
+ export declare function appendWorkflowSetSpecification(id: string, specification: string): Promise<LTWorkflowSetRecord | null>;
5
6
  export declare function updateWorkflowSetStatus(id: string, status: LTWorkflowSetStatus): Promise<LTWorkflowSetRecord | null>;
6
7
  export declare function updateWorkflowSetSourceWorkflow(id: string, sourceWorkflowId: string): Promise<void>;
7
8
  export declare function deleteWorkflowSet(id: string): Promise<boolean>;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createWorkflowSet = createWorkflowSet;
4
4
  exports.getWorkflowSet = getWorkflowSet;
5
5
  exports.updateWorkflowSetPlan = updateWorkflowSetPlan;
6
+ exports.appendWorkflowSetSpecification = appendWorkflowSetSpecification;
6
7
  exports.updateWorkflowSetStatus = updateWorkflowSetStatus;
7
8
  exports.updateWorkflowSetSourceWorkflow = updateWorkflowSetSourceWorkflow;
8
9
  exports.deleteWorkflowSet = deleteWorkflowSet;
@@ -36,6 +37,11 @@ async function updateWorkflowSetPlan(id, plan, namespaces) {
36
37
  ]);
37
38
  return rows[0] || null;
38
39
  }
40
+ async function appendWorkflowSetSpecification(id, specification) {
41
+ const pool = (0, db_1.getPool)();
42
+ const { rows } = await pool.query(sql_1.APPEND_WORKFLOW_SET_SPECIFICATION, [id, specification]);
43
+ return rows[0] || null;
44
+ }
39
45
  async function updateWorkflowSetStatus(id, status) {
40
46
  const pool = (0, db_1.getPool)();
41
47
  const { rows } = await pool.query(sql_1.UPDATE_WORKFLOW_SET_STATUS, [id, status]);
@@ -1 +1 @@
1
- export { createWorkflowSet, getWorkflowSet, updateWorkflowSetPlan, updateWorkflowSetStatus, updateWorkflowSetSourceWorkflow, deleteWorkflowSet, listWorkflowSets, } from './db';
1
+ export { createWorkflowSet, getWorkflowSet, updateWorkflowSetPlan, updateWorkflowSetStatus, updateWorkflowSetSourceWorkflow, appendWorkflowSetSpecification, deleteWorkflowSet, listWorkflowSets, } from './db';
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listWorkflowSets = exports.deleteWorkflowSet = exports.updateWorkflowSetSourceWorkflow = exports.updateWorkflowSetStatus = exports.updateWorkflowSetPlan = exports.getWorkflowSet = exports.createWorkflowSet = void 0;
3
+ exports.listWorkflowSets = exports.deleteWorkflowSet = exports.appendWorkflowSetSpecification = exports.updateWorkflowSetSourceWorkflow = exports.updateWorkflowSetStatus = exports.updateWorkflowSetPlan = exports.getWorkflowSet = exports.createWorkflowSet = void 0;
4
4
  var db_1 = require("./db");
5
5
  Object.defineProperty(exports, "createWorkflowSet", { enumerable: true, get: function () { return db_1.createWorkflowSet; } });
6
6
  Object.defineProperty(exports, "getWorkflowSet", { enumerable: true, get: function () { return db_1.getWorkflowSet; } });
7
7
  Object.defineProperty(exports, "updateWorkflowSetPlan", { enumerable: true, get: function () { return db_1.updateWorkflowSetPlan; } });
8
8
  Object.defineProperty(exports, "updateWorkflowSetStatus", { enumerable: true, get: function () { return db_1.updateWorkflowSetStatus; } });
9
9
  Object.defineProperty(exports, "updateWorkflowSetSourceWorkflow", { enumerable: true, get: function () { return db_1.updateWorkflowSetSourceWorkflow; } });
10
+ Object.defineProperty(exports, "appendWorkflowSetSpecification", { enumerable: true, get: function () { return db_1.appendWorkflowSetSpecification; } });
10
11
  Object.defineProperty(exports, "deleteWorkflowSet", { enumerable: true, get: function () { return db_1.deleteWorkflowSet; } });
11
12
  Object.defineProperty(exports, "listWorkflowSets", { enumerable: true, get: function () { return db_1.listWorkflowSets; } });
@@ -2,5 +2,6 @@ export declare const CREATE_WORKFLOW_SET = "\n INSERT INTO lt_workflow_sets (na
2
2
  export declare const GET_WORKFLOW_SET = "\n SELECT * FROM lt_workflow_sets WHERE id = $1";
3
3
  export declare const UPDATE_WORKFLOW_SET_PLAN = "\n UPDATE lt_workflow_sets\n SET plan = $2, namespaces = $3, status = 'planned', updated_at = NOW()\n WHERE id = $1\n RETURNING *";
4
4
  export declare const UPDATE_WORKFLOW_SET_STATUS = "\n UPDATE lt_workflow_sets\n SET status = $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *";
5
+ export declare const APPEND_WORKFLOW_SET_SPECIFICATION = "\n UPDATE lt_workflow_sets\n SET specification = specification || E'\\n\\n---\\n\\n' || $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *";
5
6
  export declare const DELETE_WORKFLOW_SET = "\n DELETE FROM lt_workflow_sets WHERE id = $1";
6
7
  export declare const LIST_WORKFLOW_SETS_BASE = "\n SELECT * FROM lt_workflow_sets";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // ─── Workflow set CRUD ──────────────────────────────────────────────────────
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.LIST_WORKFLOW_SETS_BASE = exports.DELETE_WORKFLOW_SET = exports.UPDATE_WORKFLOW_SET_STATUS = exports.UPDATE_WORKFLOW_SET_PLAN = exports.GET_WORKFLOW_SET = exports.CREATE_WORKFLOW_SET = void 0;
4
+ exports.LIST_WORKFLOW_SETS_BASE = exports.DELETE_WORKFLOW_SET = exports.APPEND_WORKFLOW_SET_SPECIFICATION = exports.UPDATE_WORKFLOW_SET_STATUS = exports.UPDATE_WORKFLOW_SET_PLAN = exports.GET_WORKFLOW_SET = exports.CREATE_WORKFLOW_SET = void 0;
5
5
  exports.CREATE_WORKFLOW_SET = `
6
6
  INSERT INTO lt_workflow_sets (name, description, specification, plan, namespaces, source_workflow_id)
7
7
  VALUES ($1, $2, $3, $4, $5, $6)
@@ -18,6 +18,11 @@ exports.UPDATE_WORKFLOW_SET_STATUS = `
18
18
  SET status = $2, updated_at = NOW()
19
19
  WHERE id = $1
20
20
  RETURNING *`;
21
+ exports.APPEND_WORKFLOW_SET_SPECIFICATION = `
22
+ UPDATE lt_workflow_sets
23
+ SET specification = specification || E'\\n\\n---\\n\\n' || $2, updated_at = NOW()
24
+ WHERE id = $1
25
+ RETURNING *`;
21
26
  exports.DELETE_WORKFLOW_SET = `
22
27
  DELETE FROM lt_workflow_sets WHERE id = $1`;
23
28
  exports.LIST_WORKFLOW_SETS_BASE = `
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Regenerate a Plan Build workflow from its original prompt + compilation feedback.
3
+ *
4
+ * Reuses the builder's LLM call and prompt structure without spawning a full
5
+ * durable workflow. This is the fast path for "Recompile Pipeline" on Plan Build
6
+ * workflows that don't have an execution trace.
7
+ */
8
+ interface RebuildResult {
9
+ yaml: string;
10
+ inputSchema: Record<string, unknown>;
11
+ outputSchema: Record<string, unknown>;
12
+ activityManifest: unknown[];
13
+ tags: string[];
14
+ }
15
+ /**
16
+ * Rebuild a YAML workflow from a prompt with optional feedback on the prior attempt.
17
+ */
18
+ export declare function rebuildFromPrompt(options: {
19
+ prompt: string;
20
+ feedback?: string;
21
+ priorYaml?: string;
22
+ name: string;
23
+ appId: string;
24
+ }): Promise<RebuildResult>;
25
+ export {};
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Regenerate a Plan Build workflow from its original prompt + compilation feedback.
4
+ *
5
+ * Reuses the builder's LLM call and prompt structure without spawning a full
6
+ * durable workflow. This is the fast path for "Recompile Pipeline" on Plan Build
7
+ * workflows that don't have an execution trace.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.rebuildFromPrompt = rebuildFromPrompt;
44
+ const llm_1 = require("../llm");
45
+ const defaults_1 = require("../../modules/defaults");
46
+ const logger_1 = require("../../lib/logger");
47
+ const BUILDER_MAX_TOKENS = 8192;
48
+ /**
49
+ * Rebuild a YAML workflow from a prompt with optional feedback on the prior attempt.
50
+ */
51
+ async function rebuildFromPrompt(options) {
52
+ // Load the builder's system prompt and tool inventory
53
+ const { loadBuilderTools } = await Promise.resolve().then(() => __importStar(require('../../system/workflows/mcp-workflow-builder/activities')));
54
+ const { BUILDER_SYSTEM_PROMPT, REFINE_PROMPT } = await Promise.resolve().then(() => __importStar(require('../../system/workflows/mcp-workflow-builder/prompts')));
55
+ const raw = await loadBuilderTools();
56
+ const serverSection = [
57
+ raw.strategy ? `${raw.strategy}\n` : '',
58
+ `## Available MCP Servers & Tools\n\n${raw.inventory}`,
59
+ ].filter(Boolean).join('\n');
60
+ const messages = [
61
+ { role: 'system', content: BUILDER_SYSTEM_PROMPT(serverSection) },
62
+ ];
63
+ if (options.feedback && options.priorYaml) {
64
+ messages.push({ role: 'user', content: `Build a workflow for: ${options.prompt}` });
65
+ messages.push({
66
+ role: 'assistant',
67
+ content: `Here is the prior YAML that needs fixing:\n\`\`\`yaml\n${options.priorYaml.slice(0, 3000)}\n\`\`\``,
68
+ });
69
+ messages.push({
70
+ role: 'user',
71
+ content: `${REFINE_PROMPT}\n\nExecution feedback:\n${options.feedback}`,
72
+ });
73
+ }
74
+ else {
75
+ messages.push({ role: 'user', content: `Build a workflow for: ${options.prompt}` });
76
+ }
77
+ // Call LLM with retry
78
+ for (let attempt = 0; attempt < 3; attempt++) {
79
+ const t0 = Date.now();
80
+ const response = await (0, llm_1.callLLM)({
81
+ model: defaults_1.LLM_MODEL_PRIMARY,
82
+ messages,
83
+ temperature: 0,
84
+ max_tokens: BUILDER_MAX_TOKENS,
85
+ });
86
+ logger_1.loggerRegistry.info(`[builder-regenerate] attempt=${attempt + 1} ${Date.now() - t0}ms | in=${response.usage?.prompt_tokens} out=${response.usage?.completion_tokens}`);
87
+ const content = response.content || '';
88
+ const cleaned = content.replace(/^```(?:json)?\s*/m, '').replace(/\s*```\s*$/m, '');
89
+ try {
90
+ const parsed = JSON.parse(cleaned);
91
+ if (!parsed.yaml)
92
+ throw new Error('Missing yaml in response');
93
+ return {
94
+ yaml: parsed.yaml,
95
+ inputSchema: parsed.input_schema || {},
96
+ outputSchema: parsed.output_schema || {},
97
+ activityManifest: parsed.activity_manifest || [],
98
+ tags: parsed.tags || [],
99
+ };
100
+ }
101
+ catch (err) {
102
+ logger_1.loggerRegistry.warn(`[builder-regenerate] parse failed (attempt ${attempt + 1}): ${err.message}`);
103
+ messages.push({ role: 'assistant', content });
104
+ messages.push({
105
+ role: 'user',
106
+ content: `Your response was not valid JSON. Return ONLY a JSON object with "yaml", "input_schema", "output_schema", "activity_manifest", and "tags" fields.`,
107
+ });
108
+ }
109
+ }
110
+ throw new Error('Failed to regenerate YAML after 3 attempts');
111
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Version history and cron scheduling DB operations for yaml-workflows.
3
+ *
4
+ * Extracted from db.ts to keep each file under 300 lines.
5
+ */
6
+ import type { LTYamlWorkflowRecord, LTYamlWorkflowVersionRecord, ActivityManifestEntry } from '../../types/yaml-workflow';
7
+ export declare function createVersionSnapshot(workflowId: string, version: number, yamlContent: string, activityManifest: ActivityManifestEntry[] | unknown, inputSchema: Record<string, unknown> | unknown, outputSchema: Record<string, unknown> | unknown, inputFieldMeta?: unknown, changeSummary?: string): Promise<LTYamlWorkflowVersionRecord>;
8
+ export declare function getVersionHistory(workflowId: string, limit?: number, offset?: number): Promise<{
9
+ versions: LTYamlWorkflowVersionRecord[];
10
+ total: number;
11
+ }>;
12
+ export declare function getVersionSnapshot(workflowId: string, version: number): Promise<LTYamlWorkflowVersionRecord | null>;
13
+ export declare function markContentDeployed(workflowId: string): Promise<void>;
14
+ export declare function markAppIdContentDeployed(appId: string): Promise<void>;
15
+ export declare function updateCronSchedule(id: string, cronSchedule: string, cronEnvelope: Record<string, unknown> | null, executeAs: string | null): Promise<LTYamlWorkflowRecord | null>;
16
+ export declare function clearCronSchedule(id: string): Promise<LTYamlWorkflowRecord | null>;
17
+ export declare function getCronScheduledWorkflows(): Promise<LTYamlWorkflowRecord[]>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * Version history and cron scheduling DB operations for yaml-workflows.
4
+ *
5
+ * Extracted from db.ts to keep each file under 300 lines.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createVersionSnapshot = createVersionSnapshot;
9
+ exports.getVersionHistory = getVersionHistory;
10
+ exports.getVersionSnapshot = getVersionSnapshot;
11
+ exports.markContentDeployed = markContentDeployed;
12
+ exports.markAppIdContentDeployed = markAppIdContentDeployed;
13
+ exports.updateCronSchedule = updateCronSchedule;
14
+ exports.clearCronSchedule = clearCronSchedule;
15
+ exports.getCronScheduledWorkflows = getCronScheduledWorkflows;
16
+ const db_1 = require("../../lib/db");
17
+ const defaults_1 = require("../../modules/defaults");
18
+ const sql_1 = require("./sql");
19
+ // -- Version history ---------------------------------------------------------
20
+ async function createVersionSnapshot(workflowId, version, yamlContent, activityManifest, inputSchema, outputSchema, inputFieldMeta, changeSummary) {
21
+ const pool = (0, db_1.getPool)();
22
+ const { rows } = await pool.query(sql_1.CREATE_VERSION_SNAPSHOT, [
23
+ workflowId, version, yamlContent,
24
+ JSON.stringify(activityManifest),
25
+ JSON.stringify(inputSchema),
26
+ JSON.stringify(outputSchema),
27
+ JSON.stringify(inputFieldMeta || []),
28
+ changeSummary || null,
29
+ ]);
30
+ return rows[0];
31
+ }
32
+ async function getVersionHistory(workflowId, limit = defaults_1.YAML_VERSION_LIMIT, offset = 0) {
33
+ const pool = (0, db_1.getPool)();
34
+ const [countResult, dataResult] = await Promise.all([
35
+ pool.query(sql_1.COUNT_VERSIONS, [workflowId]),
36
+ pool.query(sql_1.LIST_VERSIONS, [workflowId, limit, offset]),
37
+ ]);
38
+ return {
39
+ versions: dataResult.rows,
40
+ total: parseInt(countResult.rows[0].count, 10),
41
+ };
42
+ }
43
+ async function getVersionSnapshot(workflowId, version) {
44
+ const pool = (0, db_1.getPool)();
45
+ const { rows } = await pool.query(sql_1.GET_VERSION_SNAPSHOT, [workflowId, version]);
46
+ return rows[0] || null;
47
+ }
48
+ async function markContentDeployed(workflowId) {
49
+ const pool = (0, db_1.getPool)();
50
+ await pool.query(sql_1.MARK_CONTENT_DEPLOYED, [workflowId]);
51
+ }
52
+ async function markAppIdContentDeployed(appId) {
53
+ const pool = (0, db_1.getPool)();
54
+ await pool.query(sql_1.MARK_APP_ID_CONTENT_DEPLOYED, [appId]);
55
+ }
56
+ // -- Cron scheduling ---------------------------------------------------------
57
+ async function updateCronSchedule(id, cronSchedule, cronEnvelope, executeAs) {
58
+ const pool = (0, db_1.getPool)();
59
+ const { rows } = await pool.query(sql_1.UPDATE_CRON_SCHEDULE, [
60
+ id,
61
+ cronSchedule,
62
+ cronEnvelope ? JSON.stringify(cronEnvelope) : null,
63
+ executeAs,
64
+ ]);
65
+ return rows[0] || null;
66
+ }
67
+ async function clearCronSchedule(id) {
68
+ const pool = (0, db_1.getPool)();
69
+ const { rows } = await pool.query(sql_1.CLEAR_CRON_SCHEDULE, [id]);
70
+ return rows[0] || null;
71
+ }
72
+ async function getCronScheduledWorkflows() {
73
+ const pool = (0, db_1.getPool)();
74
+ const { rows } = await pool.query(sql_1.GET_CRON_SCHEDULED_WORKFLOWS);
75
+ return rows;
76
+ }
@@ -1,6 +1,7 @@
1
- import type { LTYamlWorkflowRecord, LTYamlWorkflowVersionRecord, ActivityManifestEntry } from '../../types/yaml-workflow';
1
+ import type { LTYamlWorkflowRecord } from '../../types/yaml-workflow';
2
2
  import type { CreateYamlWorkflowInput } from './types';
3
3
  export { parseVersionFromYaml, updateYamlWorkflowStatus, listYamlWorkflows, findYamlWorkflowsByTags, } from './db-utils';
4
+ export { createVersionSnapshot, getVersionHistory, getVersionSnapshot, markContentDeployed, markAppIdContentDeployed, updateCronSchedule, clearCronSchedule, getCronScheduledWorkflows, } from './db-versions';
4
5
  /**
5
6
  * Check whether a graph_topic is already in use by a non-archived workflow
6
7
  * in the same namespace. Returns the conflicting workflow name, or null.
@@ -21,15 +22,16 @@ export declare function discoverWorkflows(prompt: string, tags: string[], catego
21
22
  })[]>;
22
23
  export declare function getActiveYamlWorkflows(): Promise<LTYamlWorkflowRecord[]>;
23
24
  export declare function listYamlWorkflowsByAppId(appId: string): Promise<LTYamlWorkflowRecord[]>;
25
+ /**
26
+ * Return the next app-level version for a namespace.
27
+ *
28
+ * Each deploy of an app (namespace) must use a strictly increasing integer
29
+ * version. This queries the current max across all non-archived workflows
30
+ * in the namespace and returns max + 1.
31
+ *
32
+ * A new namespace with no workflows returns '1'.
33
+ * An existing namespace with one active tool at v1 returns '2' when a
34
+ * second tool is added -- even though that second tool is "version 1" of itself.
35
+ */
36
+ export declare function getNextAppVersion(appId: string): Promise<string>;
24
37
  export declare function getDistinctAppIds(): Promise<string[]>;
25
- export declare function createVersionSnapshot(workflowId: string, version: number, yamlContent: string, activityManifest: ActivityManifestEntry[] | unknown, inputSchema: Record<string, unknown> | unknown, outputSchema: Record<string, unknown> | unknown, inputFieldMeta?: unknown, changeSummary?: string): Promise<LTYamlWorkflowVersionRecord>;
26
- export declare function getVersionHistory(workflowId: string, limit?: number, offset?: number): Promise<{
27
- versions: LTYamlWorkflowVersionRecord[];
28
- total: number;
29
- }>;
30
- export declare function getVersionSnapshot(workflowId: string, version: number): Promise<LTYamlWorkflowVersionRecord | null>;
31
- export declare function markContentDeployed(workflowId: string): Promise<void>;
32
- export declare function markAppIdContentDeployed(appId: string): Promise<void>;
33
- export declare function updateCronSchedule(id: string, cronSchedule: string, cronEnvelope: Record<string, unknown> | null, executeAs: string | null): Promise<LTYamlWorkflowRecord | null>;
34
- export declare function clearCronSchedule(id: string): Promise<LTYamlWorkflowRecord | null>;
35
- export declare function getCronScheduledWorkflows(): Promise<LTYamlWorkflowRecord[]>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findYamlWorkflowsByTags = exports.listYamlWorkflows = exports.updateYamlWorkflowStatus = exports.parseVersionFromYaml = void 0;
3
+ exports.getCronScheduledWorkflows = exports.clearCronSchedule = exports.updateCronSchedule = exports.markAppIdContentDeployed = exports.markContentDeployed = exports.getVersionSnapshot = exports.getVersionHistory = exports.createVersionSnapshot = exports.findYamlWorkflowsByTags = exports.listYamlWorkflows = exports.updateYamlWorkflowStatus = exports.parseVersionFromYaml = void 0;
4
4
  exports.checkTopicConflict = checkTopicConflict;
5
5
  exports.createYamlWorkflow = createYamlWorkflow;
6
6
  exports.getYamlWorkflow = getYamlWorkflow;
@@ -11,25 +11,28 @@ exports.deleteYamlWorkflow = deleteYamlWorkflow;
11
11
  exports.discoverWorkflows = discoverWorkflows;
12
12
  exports.getActiveYamlWorkflows = getActiveYamlWorkflows;
13
13
  exports.listYamlWorkflowsByAppId = listYamlWorkflowsByAppId;
14
+ exports.getNextAppVersion = getNextAppVersion;
14
15
  exports.getDistinctAppIds = getDistinctAppIds;
15
- exports.createVersionSnapshot = createVersionSnapshot;
16
- exports.getVersionHistory = getVersionHistory;
17
- exports.getVersionSnapshot = getVersionSnapshot;
18
- exports.markContentDeployed = markContentDeployed;
19
- exports.markAppIdContentDeployed = markAppIdContentDeployed;
20
- exports.updateCronSchedule = updateCronSchedule;
21
- exports.clearCronSchedule = clearCronSchedule;
22
- exports.getCronScheduledWorkflows = getCronScheduledWorkflows;
23
16
  const db_1 = require("../../lib/db");
24
- const defaults_1 = require("../../modules/defaults");
25
17
  const sql_1 = require("./sql");
26
18
  const db_utils_1 = require("./db-utils");
19
+ const db_versions_1 = require("./db-versions");
27
20
  // Re-export functions from db-utils
28
21
  var db_utils_2 = require("./db-utils");
29
22
  Object.defineProperty(exports, "parseVersionFromYaml", { enumerable: true, get: function () { return db_utils_2.parseVersionFromYaml; } });
30
23
  Object.defineProperty(exports, "updateYamlWorkflowStatus", { enumerable: true, get: function () { return db_utils_2.updateYamlWorkflowStatus; } });
31
24
  Object.defineProperty(exports, "listYamlWorkflows", { enumerable: true, get: function () { return db_utils_2.listYamlWorkflows; } });
32
25
  Object.defineProperty(exports, "findYamlWorkflowsByTags", { enumerable: true, get: function () { return db_utils_2.findYamlWorkflowsByTags; } });
26
+ // Re-export version history and cron scheduling from db-versions
27
+ var db_versions_2 = require("./db-versions");
28
+ Object.defineProperty(exports, "createVersionSnapshot", { enumerable: true, get: function () { return db_versions_2.createVersionSnapshot; } });
29
+ Object.defineProperty(exports, "getVersionHistory", { enumerable: true, get: function () { return db_versions_2.getVersionHistory; } });
30
+ Object.defineProperty(exports, "getVersionSnapshot", { enumerable: true, get: function () { return db_versions_2.getVersionSnapshot; } });
31
+ Object.defineProperty(exports, "markContentDeployed", { enumerable: true, get: function () { return db_versions_2.markContentDeployed; } });
32
+ Object.defineProperty(exports, "markAppIdContentDeployed", { enumerable: true, get: function () { return db_versions_2.markAppIdContentDeployed; } });
33
+ Object.defineProperty(exports, "updateCronSchedule", { enumerable: true, get: function () { return db_versions_2.updateCronSchedule; } });
34
+ Object.defineProperty(exports, "clearCronSchedule", { enumerable: true, get: function () { return db_versions_2.clearCronSchedule; } });
35
+ Object.defineProperty(exports, "getCronScheduledWorkflows", { enumerable: true, get: function () { return db_versions_2.getCronScheduledWorkflows; } });
33
36
  /**
34
37
  * Check whether a graph_topic is already in use by a non-archived workflow
35
38
  * in the same namespace. Returns the conflicting workflow name, or null.
@@ -67,7 +70,7 @@ async function createYamlWorkflow(input) {
67
70
  input.set_build_order ?? null,
68
71
  ]);
69
72
  const record = rows[0];
70
- await createVersionSnapshot(record.id, 1, record.yaml_content, input.activity_manifest || [], input.input_schema || {}, input.output_schema || {}, input.input_field_meta || [], 'Initial version');
73
+ await (0, db_versions_1.createVersionSnapshot)(record.id, 1, record.yaml_content, input.activity_manifest || [], input.input_schema || {}, input.output_schema || {}, input.input_field_meta || [], 'Initial version');
71
74
  return record;
72
75
  }
73
76
  async function getYamlWorkflow(id) {
@@ -144,7 +147,7 @@ async function updateYamlWorkflow(id, updates) {
144
147
  const { rows } = await pool.query(`UPDATE lt_yaml_workflows SET ${sets.join(', ')} WHERE id = $${idx} RETURNING *`, values);
145
148
  const record = rows[0] || null;
146
149
  if (record && yamlChanging) {
147
- await createVersionSnapshot(record.id, record.content_version, record.yaml_content, record.activity_manifest, record.input_schema, record.output_schema, record.input_field_meta);
150
+ await (0, db_versions_1.createVersionSnapshot)(record.id, record.content_version, record.yaml_content, record.activity_manifest, record.input_schema, record.output_schema, record.input_field_meta);
148
151
  }
149
152
  return record;
150
153
  }
@@ -172,66 +175,25 @@ async function listYamlWorkflowsByAppId(appId) {
172
175
  const { rows } = await pool.query(sql_1.LIST_BY_APP_ID, [appId]);
173
176
  return rows;
174
177
  }
178
+ /**
179
+ * Return the next app-level version for a namespace.
180
+ *
181
+ * Each deploy of an app (namespace) must use a strictly increasing integer
182
+ * version. This queries the current max across all non-archived workflows
183
+ * in the namespace and returns max + 1.
184
+ *
185
+ * A new namespace with no workflows returns '1'.
186
+ * An existing namespace with one active tool at v1 returns '2' when a
187
+ * second tool is added -- even though that second tool is "version 1" of itself.
188
+ */
189
+ async function getNextAppVersion(appId) {
190
+ const pool = (0, db_1.getPool)();
191
+ const { rows } = await pool.query(sql_1.GET_MAX_APP_VERSION, [appId]);
192
+ const max = parseInt(rows[0]?.max_version ?? '0', 10);
193
+ return String(max + 1);
194
+ }
175
195
  async function getDistinctAppIds() {
176
196
  const pool = (0, db_1.getPool)();
177
197
  const { rows } = await pool.query(sql_1.GET_DISTINCT_APP_IDS);
178
198
  return rows.map((r) => r.app_id);
179
199
  }
180
- // -- Version history ---------------------------------------------------------
181
- async function createVersionSnapshot(workflowId, version, yamlContent, activityManifest, inputSchema, outputSchema, inputFieldMeta, changeSummary) {
182
- const pool = (0, db_1.getPool)();
183
- const { rows } = await pool.query(sql_1.CREATE_VERSION_SNAPSHOT, [
184
- workflowId, version, yamlContent,
185
- JSON.stringify(activityManifest),
186
- JSON.stringify(inputSchema),
187
- JSON.stringify(outputSchema),
188
- JSON.stringify(inputFieldMeta || []),
189
- changeSummary || null,
190
- ]);
191
- return rows[0];
192
- }
193
- async function getVersionHistory(workflowId, limit = defaults_1.YAML_VERSION_LIMIT, offset = 0) {
194
- const pool = (0, db_1.getPool)();
195
- const [countResult, dataResult] = await Promise.all([
196
- pool.query(sql_1.COUNT_VERSIONS, [workflowId]),
197
- pool.query(sql_1.LIST_VERSIONS, [workflowId, limit, offset]),
198
- ]);
199
- return {
200
- versions: dataResult.rows,
201
- total: parseInt(countResult.rows[0].count, 10),
202
- };
203
- }
204
- async function getVersionSnapshot(workflowId, version) {
205
- const pool = (0, db_1.getPool)();
206
- const { rows } = await pool.query(sql_1.GET_VERSION_SNAPSHOT, [workflowId, version]);
207
- return rows[0] || null;
208
- }
209
- async function markContentDeployed(workflowId) {
210
- const pool = (0, db_1.getPool)();
211
- await pool.query(sql_1.MARK_CONTENT_DEPLOYED, [workflowId]);
212
- }
213
- async function markAppIdContentDeployed(appId) {
214
- const pool = (0, db_1.getPool)();
215
- await pool.query(sql_1.MARK_APP_ID_CONTENT_DEPLOYED, [appId]);
216
- }
217
- // -- Cron scheduling ---------------------------------------------------------
218
- async function updateCronSchedule(id, cronSchedule, cronEnvelope, executeAs) {
219
- const pool = (0, db_1.getPool)();
220
- const { rows } = await pool.query(sql_1.UPDATE_CRON_SCHEDULE, [
221
- id,
222
- cronSchedule,
223
- cronEnvelope ? JSON.stringify(cronEnvelope) : null,
224
- executeAs,
225
- ]);
226
- return rows[0] || null;
227
- }
228
- async function clearCronSchedule(id) {
229
- const pool = (0, db_1.getPool)();
230
- const { rows } = await pool.query(sql_1.CLEAR_CRON_SCHEDULE, [id]);
231
- return rows[0] || null;
232
- }
233
- async function getCronScheduledWorkflows() {
234
- const pool = (0, db_1.getPool)();
235
- const { rows } = await pool.query(sql_1.GET_CRON_SCHEDULED_WORKFLOWS);
236
- return rows;
237
- }
@@ -56,27 +56,28 @@ async function buildMergedYaml(appId, version) {
56
56
  allGraphs.push(...parsed.app.graphs);
57
57
  }
58
58
  }
59
- // Pre-validate: check for duplicate activity IDs across all graphs
60
- const activityIds = new Map(); // id -> graph subscribes topic
61
- const duplicates = [];
59
+ // Resolve duplicate activity IDs across graphs by rewriting suffixes
60
+ const activityIds = new Set();
62
61
  for (const graph of allGraphs) {
63
62
  const g = graph;
64
- const topic = g.subscribes || 'unknown';
65
- if (g.activities) {
66
- for (const id of Object.keys(g.activities)) {
67
- if (activityIds.has(id)) {
68
- duplicates.push(`"${id}" in both "${activityIds.get(id)}" and "${topic}"`);
69
- }
70
- else {
71
- activityIds.set(id, topic);
72
- }
63
+ if (!g.activities)
64
+ continue;
65
+ // Check if any activity IDs collide with previously seen IDs
66
+ const ids = Object.keys(g.activities);
67
+ const hasCollision = ids.some((id) => activityIds.has(id));
68
+ if (hasCollision) {
69
+ // Rewrite all activity IDs in this graph with a unique suffix
70
+ const newSuffix = Math.random().toString(36).slice(2, 6);
71
+ const oldSuffix = extractSuffix(ids[0]);
72
+ if (oldSuffix) {
73
+ rewriteGraphSuffix(g, oldSuffix, newSuffix);
74
+ logger_1.loggerRegistry.info(`[yaml-workflow] rewrote activity suffix ${oldSuffix}→${newSuffix} in "${g.subscribes}" to resolve collision`);
73
75
  }
74
76
  }
75
- }
76
- if (duplicates.length > 0) {
77
- const msg = `Duplicate activity IDs across graphs in app "${appId}": ${duplicates.join('; ')}`;
78
- logger_1.loggerRegistry.error(`[yaml-workflow] ${msg}`);
79
- throw new Error(msg);
77
+ // Register all (possibly rewritten) activity IDs
78
+ for (const id of Object.keys(g.activities)) {
79
+ activityIds.add(id);
80
+ }
80
81
  }
81
82
  const merged = {
82
83
  app: {
@@ -87,6 +88,36 @@ async function buildMergedYaml(appId, version) {
87
88
  };
88
89
  return yaml.dump(merged, { lineWidth: defaults_1.YAML_LINE_WIDTH, noRefs: true, sortKeys: false });
89
90
  }
91
+ /** Extract the 4-char suffix from an activity ID like "trigger_x8kf" */
92
+ function extractSuffix(activityId) {
93
+ const match = activityId.match(/_([a-z0-9]{4})$/);
94
+ return match ? match[1] : null;
95
+ }
96
+ /** Rewrite all activity ID suffixes in a graph definition */
97
+ function rewriteGraphSuffix(graph, oldSuffix, newSuffix) {
98
+ const suffixPattern = new RegExp(`_${oldSuffix}\\b`, 'g');
99
+ const replace = (obj) => {
100
+ if (typeof obj === 'string')
101
+ return obj.replace(suffixPattern, `_${newSuffix}`);
102
+ if (Array.isArray(obj))
103
+ return obj.map(replace);
104
+ if (obj && typeof obj === 'object') {
105
+ const result = {};
106
+ for (const [k, v] of Object.entries(obj)) {
107
+ const newKey = k.replace(suffixPattern, `_${newSuffix}`);
108
+ result[newKey] = replace(v);
109
+ }
110
+ return result;
111
+ }
112
+ return obj;
113
+ };
114
+ if (graph.activities)
115
+ graph.activities = replace(graph.activities);
116
+ if (graph.transitions)
117
+ graph.transitions = replace(graph.transitions);
118
+ if (graph.hooks)
119
+ graph.hooks = replace(graph.hooks);
120
+ }
90
121
  /**
91
122
  * Re-run the compilation pipeline for the most recently compiled workflow
92
123
  * in the app, feeding the deployment error as context so the LLM can
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Durable-to-YAML compiler — converts procedural TypeScript workflows to YAML DAGs.
3
+ *
4
+ * This is "Path 3" for YAML DAG creation: static compilation from durable source
5
+ * code without executing the workflow. The LLM translates the procedural orchestration
6
+ * into an equivalent HotMesh YAML DAG that runs without replay overhead.
7
+ *
8
+ * Pipeline:
9
+ * 1. Read source (file or inline string)
10
+ * 2. Optionally resolve and read the activities module
11
+ * 3. Extract metadata (activity names, primitives, control flow)
12
+ * 4. Build LLM messages (system prompt + source + metadata)
13
+ * 5. Call LLM (temperature 0, retry on parse failure)
14
+ * 6. Fix known @pipe anti-patterns
15
+ * 7. Return result compatible with existing YAML workflow CRUD
16
+ */
17
+ import type { CompileDurableOptions, CompileDurableResult } from './types';
18
+ export type { CompileDurableOptions, CompileDurableResult } from './types';
19
+ /**
20
+ * Compile a durable TypeScript workflow into a HotMesh YAML DAG.
21
+ */
22
+ export declare function compileDurableToYaml(options: CompileDurableOptions): Promise<CompileDurableResult>;