@hotmeshio/long-tail 0.1.12 → 0.1.14

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 (282) hide show
  1. package/README.md +1 -1
  2. package/build/api/files.d.ts +13 -0
  3. package/build/api/files.js +44 -0
  4. package/build/api/mcp-runs.d.ts +2 -0
  5. package/build/api/mcp-runs.js +2 -0
  6. package/build/api/workflow-sets.d.ts +11 -0
  7. package/build/api/workflow-sets.js +62 -0
  8. package/build/api/yaml-workflows.d.ts +9 -0
  9. package/build/api/yaml-workflows.js +40 -11
  10. package/build/examples/seed.js +50 -0
  11. package/build/lib/db/schemas/001_schema.sql +281 -106
  12. package/build/lib/db/schemas/002_seed.sql +56 -39
  13. package/build/lib/storage/local.d.ts +15 -0
  14. package/build/lib/storage/local.js +63 -0
  15. package/build/lib/storage/mime.d.ts +4 -0
  16. package/build/lib/storage/mime.js +31 -0
  17. package/build/lib/storage/s3.d.ts +16 -0
  18. package/build/lib/storage/s3.js +70 -0
  19. package/build/lib/storage/types.d.ts +18 -0
  20. package/build/modules/utils.d.ts +73 -0
  21. package/build/modules/utils.js +84 -0
  22. package/build/routes/file-browser.d.ts +2 -0
  23. package/build/routes/file-browser.js +112 -0
  24. package/build/routes/files.js +25 -17
  25. package/build/routes/index.js +2 -0
  26. package/build/routes/mcp-runs.js +2 -0
  27. package/build/routes/workflow-sets.js +9 -0
  28. package/build/routes/yaml-workflows/deployment.js +8 -0
  29. package/build/services/insight/index.d.ts +13 -0
  30. package/build/services/insight/index.js +4 -7
  31. package/build/services/insight/prompts.d.ts +1 -1
  32. package/build/services/insight/prompts.js +1 -1
  33. package/build/services/mcp/server.js +31 -0
  34. package/build/services/mcp-runs/queries.d.ts +2 -0
  35. package/build/services/mcp-runs/queries.js +11 -1
  36. package/build/services/mcp-runs/sql.d.ts +1 -1
  37. package/build/services/mcp-runs/sql.js +2 -2
  38. package/build/services/workflow-sets/db.d.ts +1 -0
  39. package/build/services/workflow-sets/db.js +6 -0
  40. package/build/services/workflow-sets/index.d.ts +1 -1
  41. package/build/services/workflow-sets/index.js +2 -1
  42. package/build/services/workflow-sets/sql.d.ts +1 -0
  43. package/build/services/workflow-sets/sql.js +6 -1
  44. package/build/services/yaml-workflow/db.d.ts +12 -0
  45. package/build/services/yaml-workflow/db.js +18 -0
  46. package/build/services/yaml-workflow/generator.js +4 -4
  47. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  48. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  49. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  50. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  51. package/build/services/yaml-workflow/sql.d.ts +2 -1
  52. package/build/services/yaml-workflow/sql.js +10 -3
  53. package/build/system/activities/schema-exchange.d.ts +50 -0
  54. package/build/system/activities/schema-exchange.js +210 -0
  55. package/build/system/activities/sql.d.ts +1 -1
  56. package/build/system/activities/sql.js +12 -1
  57. package/build/system/index.js +1 -0
  58. package/build/system/mcp-servers/human-queue.js +31 -0
  59. package/build/system/mcp-servers/knowledge.js +35 -6
  60. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  61. package/build/system/mcp-servers/schema-exchange.js +93 -0
  62. package/build/system/seed/server-definitions.d.ts +112 -1
  63. package/build/system/seed/server-definitions.js +37 -0
  64. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  65. package/build/system/seed/tool-manifests-data.js +37 -1
  66. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  67. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  68. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  69. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  70. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -1
  71. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +3 -3
  72. package/build/system/workflows/mcp-workflow-planner/index.js +39 -5
  73. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  74. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  75. package/build/tsconfig.tsbuildinfo +1 -1
  76. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-Cngijp4Q.js} +2 -2
  77. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-Cngijp4Q.js.map} +1 -1
  78. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js → AvailableEscalationsPage-CpBfGV1h.js} +2 -2
  79. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js.map → AvailableEscalationsPage-CpBfGV1h.js.map} +1 -1
  80. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-B8Uvw9Si.js} +2 -2
  81. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-B8Uvw9Si.js.map} +1 -1
  82. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-DiFPuWOY.js} +2 -2
  83. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-DiFPuWOY.js.map} +1 -1
  84. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-CpXG9uyu.js} +2 -2
  85. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-CpXG9uyu.js.map} +1 -1
  86. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DKsTR9lK.js} +2 -2
  87. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DKsTR9lK.js.map} +1 -1
  88. package/dashboard/dist/assets/CredentialsPage-DlS7Kf40.js +2 -0
  89. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-DlS7Kf40.js.map} +1 -1
  90. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-B-9eW3pm.js} +2 -2
  91. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-B-9eW3pm.js.map} +1 -1
  92. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DkOokbtL.js} +2 -2
  93. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DkOokbtL.js.map} +1 -1
  94. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-DVtHqM-5.js} +2 -2
  95. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-DVtHqM-5.js.map} +1 -1
  96. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-C7KIMIbE.js} +2 -2
  97. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-C7KIMIbE.js.map} +1 -1
  98. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-BMKBlkPx.js} +2 -2
  99. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-BMKBlkPx.js.map} +1 -1
  100. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BYZ5OVdQ.js} +2 -2
  101. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BYZ5OVdQ.js.map} +1 -1
  102. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-C5r3n6YO.js} +2 -2
  103. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-C5r3n6YO.js.map} +1 -1
  104. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-BGUajIsW.js} +2 -2
  105. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-BGUajIsW.js.map} +1 -1
  106. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-B_kJYHea.js} +2 -2
  107. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-B_kJYHea.js.map} +1 -1
  108. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +5 -0
  109. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +1 -0
  110. package/dashboard/dist/assets/McpQueryPage-BgAq_bQg.js +2 -0
  111. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-BgAq_bQg.js.map} +1 -1
  112. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js +2 -0
  113. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js.map +1 -0
  114. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js +2 -0
  115. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js.map +1 -0
  116. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-E1yRnCeW.js} +2 -2
  117. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-E1yRnCeW.js.map} +1 -1
  118. package/dashboard/dist/assets/OperatorDashboard-C8MSTzey.js +2 -0
  119. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-C8MSTzey.js.map} +1 -1
  120. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-Cm5HBQF_.js} +2 -2
  121. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-Cm5HBQF_.js.map} +1 -1
  122. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-CNmWJFSN.js} +2 -2
  123. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-CNmWJFSN.js.map} +1 -1
  124. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-HSI4RVhs.js} +2 -2
  125. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-HSI4RVhs.js.map} +1 -1
  126. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-Dln8622H.js} +2 -2
  127. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-Dln8622H.js.map} +1 -1
  128. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-bIsd9N_h.js} +2 -2
  129. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-bIsd9N_h.js.map} +1 -1
  130. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-BVUp2bF0.js} +2 -2
  131. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-BVUp2bF0.js.map} +1 -1
  132. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +2 -0
  133. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-kH-Njt25.js.map} +1 -1
  134. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DbUJPfaW.js} +2 -2
  135. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DbUJPfaW.js.map} +1 -1
  136. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-Bs3JbyAz.js} +2 -2
  137. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-Bs3JbyAz.js.map} +1 -1
  138. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-CakDdsCw.js} +2 -2
  139. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-CakDdsCw.js.map} +1 -1
  140. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Cd_SG_yA.js} +2 -2
  141. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Cd_SG_yA.js.map} +1 -1
  142. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-Bz0C18nC.js} +2 -2
  143. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-Bz0C18nC.js.map} +1 -1
  144. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js → SwimlaneTimeline-Cfe-xQRX.js} +2 -2
  145. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js.map → SwimlaneTimeline-Cfe-xQRX.js.map} +1 -1
  146. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-ClFhXG-U.js} +2 -2
  147. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-ClFhXG-U.js.map} +1 -1
  148. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-SuMBdARt.js} +2 -2
  149. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-SuMBdARt.js.map} +1 -1
  150. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-lJR1JW_W.js} +2 -2
  151. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-lJR1JW_W.js.map} +1 -1
  152. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-Dkq1Vtbt.js} +2 -2
  153. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-Dkq1Vtbt.js.map} +1 -1
  154. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-DgfDZ1pl.js} +2 -2
  155. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-DgfDZ1pl.js.map} +1 -1
  156. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-MpHZ1hMD.js} +2 -2
  157. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-MpHZ1hMD.js.map} +1 -1
  158. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-DqsosA4B.js} +2 -2
  159. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-DqsosA4B.js.map} +1 -1
  160. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CVlg38C3.js} +2 -2
  161. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CVlg38C3.js.map} +1 -1
  162. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js +2 -0
  163. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js.map +1 -0
  164. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-Ugzbs8mV.js} +2 -2
  165. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-Ugzbs8mV.js.map} +1 -1
  166. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-CIp_lTNl.js} +2 -2
  167. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-CIp_lTNl.js.map} +1 -1
  168. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +2 -0
  169. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +1 -0
  170. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-DPfUpVqI.js} +2 -2
  171. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-DPfUpVqI.js.map} +1 -1
  172. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-RrCDbMC3.js} +2 -2
  173. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-RrCDbMC3.js.map} +1 -1
  174. package/dashboard/dist/assets/escalation-columns-CDGa9wsD.js +2 -0
  175. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-CDGa9wsD.js.map} +1 -1
  176. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-ZSKqdkdS.js} +2 -2
  177. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-ZSKqdkdS.js.map} +1 -1
  178. package/dashboard/dist/assets/helpers-rMEcLwKs.js +2 -0
  179. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +1 -0
  180. package/dashboard/dist/assets/{index-DDYFpi4l.js → index-ABcJHHlN.js} +2 -2
  181. package/dashboard/dist/assets/{index-DDYFpi4l.js.map → index-ABcJHHlN.js.map} +1 -1
  182. package/dashboard/dist/assets/{index-D1wVX50Z.js → index-B91h_jZ0.js} +2 -2
  183. package/dashboard/dist/assets/{index-D1wVX50Z.js.map → index-B91h_jZ0.js.map} +1 -1
  184. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-BbI2dzhJ.js} +2 -2
  185. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-BbI2dzhJ.js.map} +1 -1
  186. package/dashboard/dist/assets/{index-BizfauqT.js → index-BmVCyB6C.js} +4 -4
  187. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-BmVCyB6C.js.map} +1 -1
  188. package/dashboard/dist/assets/index-C1E5GTs9.js +2 -0
  189. package/dashboard/dist/assets/index-C1E5GTs9.js.map +1 -0
  190. package/dashboard/dist/assets/{index-Cf60K3x9.js → index-C90ZPzXk.js} +2 -2
  191. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-C90ZPzXk.js.map} +1 -1
  192. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-Cmgrk7PQ.js} +58 -58
  193. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +1 -0
  194. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-DNytWfSZ.js} +2 -2
  195. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-DNytWfSZ.js.map} +1 -1
  196. package/dashboard/dist/assets/index-DX6zxr6t.js +2 -0
  197. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-DX6zxr6t.js.map} +1 -1
  198. package/dashboard/dist/assets/index-DeX-ezqf.css +1 -0
  199. package/dashboard/dist/assets/index-K40Qw1tk.js +2 -0
  200. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-K40Qw1tk.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-BUK3qR-1.js → index-lCyNr5Xk.js} +2 -2
  202. package/dashboard/dist/assets/{index-BUK3qR-1.js.map → index-lCyNr5Xk.js.map} +1 -1
  203. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-CNE44TSp.js} +2 -2
  204. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-CNE44TSp.js.map} +1 -1
  205. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js +2 -0
  206. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js.map +1 -0
  207. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js +2 -0
  208. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js.map +1 -0
  209. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-BbmdXuPp.js} +2 -2
  210. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-BbmdXuPp.js.map} +1 -1
  211. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-DoHYlhWH.js} +2 -2
  212. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-DoHYlhWH.js.map} +1 -1
  213. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-BAiJiCHS.js} +2 -2
  214. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-BAiJiCHS.js.map} +1 -1
  215. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CvroqHtm.js} +2 -2
  216. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CvroqHtm.js.map} +1 -1
  217. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js → useEventHooks-BHMbzR_y.js} +2 -2
  218. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BHMbzR_y.js.map} +1 -1
  219. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  220. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  221. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +2 -0
  222. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js.map +1 -0
  223. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-CxIMy_xw.js} +2 -2
  224. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-CxIMy_xw.js.map} +1 -1
  225. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-AFGxSeQS.js} +132 -82
  226. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +1 -0
  227. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-yR9yais7.js} +2 -2
  228. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-yR9yais7.js.map} +1 -1
  229. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js +2 -0
  230. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js.map +1 -0
  231. package/dashboard/dist/index.html +3 -3
  232. package/docs/schema-exchange.md +173 -0
  233. package/docs/self-test.md +106 -0
  234. package/package.json +4 -2
  235. package/build/lib/db/schemas/003_workflow_discovery.sql +0 -39
  236. package/build/lib/db/schemas/004_query_router.sql +0 -38
  237. package/build/lib/db/schemas/004_workflow_sets.sql +0 -29
  238. package/build/lib/db/schemas/005_triage_router.sql +0 -37
  239. package/build/lib/db/schemas/005_unique_graph_topic.sql +0 -7
  240. package/build/lib/db/schemas/006_oauth.sql +0 -50
  241. package/build/lib/db/schemas/007_security.sql +0 -27
  242. package/build/lib/db/schemas/008_bot_accounts.sql +0 -30
  243. package/build/lib/db/schemas/009_audit_trail.sql +0 -7
  244. package/build/lib/db/schemas/010_credential_providers.sql +0 -4
  245. package/build/lib/db/schemas/011_system_workflow_configs.sql +0 -37
  246. package/build/lib/db/schemas/012_drop_modality.sql +0 -6
  247. package/build/lib/db/schemas/013_execute_as.sql +0 -9
  248. package/build/lib/db/schemas/014_ephemeral_credentials.sql +0 -16
  249. package/build/lib/db/schemas/015_knowledge.sql +0 -23
  250. package/build/lib/db/schemas/016_streamable_http.sql +0 -7
  251. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  252. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  253. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  254. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  255. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  256. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  257. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  258. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  259. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  260. package/dashboard/dist/assets/RolesPage-SMedMuqa.js +0 -2
  261. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  262. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  263. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  264. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  265. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  266. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  267. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  268. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  269. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  270. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  271. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  272. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  273. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  274. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  275. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  276. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  277. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  278. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  279. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  280. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  281. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  282. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -44,6 +44,19 @@ export interface WorkflowPlannerInput {
44
44
  setId: string;
45
45
  wait?: boolean;
46
46
  userId?: string;
47
+ /** When adding to an existing set, pass the current plan items so the planner avoids duplicates. */
48
+ existingPlan?: Array<{
49
+ name: string;
50
+ description: string;
51
+ namespace: string;
52
+ }>;
53
+ /** Sibling schemas from already-built workflows for composition context. */
54
+ existingSchemas?: Array<{
55
+ name: string;
56
+ input_schema: Record<string, unknown>;
57
+ output_schema: Record<string, unknown>;
58
+ graph_topic: string;
59
+ }>;
47
60
  }
48
61
  export declare function startWorkflowPlanner(input: WorkflowPlannerInput): Promise<McpQueryResult>;
49
62
  export declare function describeWorkflow(input: DescribeInput): Promise<DescribeResult>;
@@ -11,6 +11,7 @@ exports.describeWorkflow = describeWorkflow;
11
11
  const hotmesh_1 = require("@hotmeshio/hotmesh");
12
12
  const db_1 = require("../../lib/db");
13
13
  const defaults_1 = require("../../modules/defaults");
14
+ const utils_1 = require("../../modules/utils");
14
15
  const llm_1 = require("../llm");
15
16
  const prompts_1 = require("./prompts");
16
17
  // ── MCP query invocation ─────────────────────────────────────────────────────
@@ -76,13 +77,13 @@ async function startWorkflowBuilder(input) {
76
77
  };
77
78
  }
78
79
  async function startWorkflowPlanner(input) {
79
- const { specification, setId, wait = true, userId } = input;
80
+ const { specification, setId, wait = true, userId, existingPlan, existingSchemas } = input;
80
81
  const startTime = Date.now();
81
82
  const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
82
83
  const workflowId = `wf-planner-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
83
84
  const handle = await client.workflow.start({
84
85
  args: [{
85
- data: { specification, setId },
86
+ data: { specification, setId, existingPlan, existingSchemas },
86
87
  metadata: { source: 'dashboard' },
87
88
  lt: { userId },
88
89
  }],
@@ -126,11 +127,7 @@ async function describeWorkflow(input) {
126
127
  const raw = response.content || '{}';
127
128
  const cleaned = raw.replace(/^```(?:json)?\s*/m, '').replace(/\s*```$/m, '').trim();
128
129
  const parsed = JSON.parse(cleaned);
129
- const toolName = (parsed.tool_name || '')
130
- .toLowerCase()
131
- .replace(/[^a-z0-9]+/g, '-')
132
- .replace(/^-|-$/g, '')
133
- .slice(0, 60);
130
+ const toolName = (0, utils_1.sanitizeToolName)(parsed.tool_name || '').slice(0, 60);
134
131
  return {
135
132
  tool_name: toolName || undefined,
136
133
  description: parsed.description || prompt,
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Externalized LLM prompt constants for the insight service.
3
3
  */
4
- export declare const DESCRIBE_WORKFLOW_SYSTEM_PROMPT = "You generate concise workflow descriptions, tool names, and discovery tags.\n\nGiven a user's original query and the execution result, produce:\n1. A short, descriptive tool name as a lowercase kebab-case slug (e.g. \"screenshot-all-nav-pages\", \"fetch-order-status\", \"translate-content\"). The name should describe what the workflow does, not be generic like \"query-complete\".\n2. A clear, reusable description of what this workflow does (not what the user asked, but what the workflow accomplishes as a reusable tool). Write it as if describing a tool in a catalog. 2-3 sentences max.\n3. Discovery tags \u2014 lowercase keywords that help find this workflow when similar future queries are made.\n\nReturn ONLY a JSON object:\n{ \"tool_name\": \"...\", \"description\": \"...\", \"tags\": [\"tag1\", \"tag2\", ...] }";
4
+ export declare const DESCRIBE_WORKFLOW_SYSTEM_PROMPT = "You generate concise workflow descriptions, tool names, and discovery tags.\n\nGiven a user's original query and the execution result, produce:\n1. A short, descriptive tool name in snake_case (e.g. \"screenshot_all_nav_pages\", \"fetch_order_status\", \"translate_content\"). Only lowercase letters, digits, and underscores. The name should describe what the workflow does, not be generic like \"query_complete\".\n2. A clear, reusable description of what this workflow does (not what the user asked, but what the workflow accomplishes as a reusable tool). Write it as if describing a tool in a catalog. 2-3 sentences max.\n3. Discovery tags \u2014 lowercase keywords that help find this workflow when similar future queries are made.\n\nReturn ONLY a JSON object:\n{ \"tool_name\": \"...\", \"description\": \"...\", \"tags\": [\"tag1\", \"tag2\", ...] }";
@@ -7,7 +7,7 @@ exports.DESCRIBE_WORKFLOW_SYSTEM_PROMPT = void 0;
7
7
  exports.DESCRIBE_WORKFLOW_SYSTEM_PROMPT = `You generate concise workflow descriptions, tool names, and discovery tags.
8
8
 
9
9
  Given a user's original query and the execution result, produce:
10
- 1. A short, descriptive tool name as a lowercase kebab-case slug (e.g. "screenshot-all-nav-pages", "fetch-order-status", "translate-content"). The name should describe what the workflow does, not be generic like "query-complete".
10
+ 1. A short, descriptive tool name in snake_case (e.g. "screenshot_all_nav_pages", "fetch_order_status", "translate_content"). Only lowercase letters, digits, and underscores. The name should describe what the workflow does, not be generic like "query_complete".
11
11
  2. A clear, reusable description of what this workflow does (not what the user asked, but what the workflow accomplishes as a reusable tool). Write it as if describing a tool in a catalog. 2-3 sentences max.
12
12
  3. Discovery tags — lowercase keywords that help find this workflow when similar future queries are made.
13
13
 
@@ -64,6 +64,10 @@ const claimAndResolveSchema = zod_1.z.object({
64
64
  resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
65
65
  payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
66
66
  });
67
+ const resolveEscalationSchema = zod_1.z.object({
68
+ escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
69
+ payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
70
+ });
67
71
  const escalateAndWaitSchema = zod_1.z.object({
68
72
  role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
69
73
  message: zod_1.z.string().describe('Description of what input is needed from the human'),
@@ -218,6 +222,33 @@ async function createHumanQueueServer(options) {
218
222
  }],
219
223
  };
220
224
  });
225
+ // ── resolve_escalation ──────────────────────────────────────────────
226
+ server.registerTool('resolve_escalation', {
227
+ title: 'Resolve Escalation',
228
+ description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
229
+ inputSchema: resolveEscalationSchema,
230
+ }, async (args) => {
231
+ const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
232
+ if (!resolved) {
233
+ return {
234
+ content: [{
235
+ type: 'text',
236
+ text: JSON.stringify({ error: 'Failed to resolve escalation' }),
237
+ }],
238
+ isError: true,
239
+ };
240
+ }
241
+ return {
242
+ content: [{
243
+ type: 'text',
244
+ text: JSON.stringify({
245
+ escalation_id: resolved.id,
246
+ status: resolved.status,
247
+ resolved_at: resolved.resolved_at,
248
+ }),
249
+ }],
250
+ };
251
+ });
221
252
  // ── escalate_and_wait ──────────────────────────────────────────────
222
253
  server.registerTool('escalate_and_wait', {
223
254
  title: 'Escalate and Wait',
@@ -5,6 +5,8 @@ export interface ListJobsParams {
5
5
  entity?: string;
6
6
  search?: string;
7
7
  status?: string;
8
+ sort_by?: string;
9
+ order?: 'asc' | 'desc';
8
10
  }
9
11
  interface JobRow {
10
12
  workflow_id: string;
@@ -5,6 +5,15 @@ exports.listJobs = listJobs;
5
5
  const db_1 = require("../../lib/db");
6
6
  const hotmesh_utils_1 = require("../hotmesh-utils");
7
7
  const sql_1 = require("./sql");
8
+ const SORTABLE_COLUMNS = new Set(['created_at', 'updated_at', 'entity', 'status']);
9
+ function buildOrderBy(sortBy, order) {
10
+ if (!sortBy || !SORTABLE_COLUMNS.has(sortBy)) {
11
+ return '(CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC';
12
+ }
13
+ const dir = order === 'asc' ? 'ASC' : 'DESC';
14
+ const col = sortBy === 'status' ? '(CASE WHEN j.status > 0 THEN 0 WHEN j.status = 0 THEN 1 ELSE 2 END)' : `j.${sortBy}`;
15
+ return `${col} ${dir}`;
16
+ }
8
17
  /**
9
18
  * Return distinct entity names from job runs + yaml workflow graph_topics.
10
19
  */
@@ -55,9 +64,10 @@ async function listJobs(params) {
55
64
  }
56
65
  const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
57
66
  const keyPrefix = `hmsh:${appId}:j:`;
67
+ const orderBy = buildOrderBy(params.sort_by, params.order);
58
68
  const [countResult, dataResult] = await Promise.all([
59
69
  pool.query((0, sql_1.COUNT_JOBS)(schema, where), values),
60
- pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx++), [...values, limit, offset]),
70
+ pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx++, orderBy), [...values, limit, offset]),
61
71
  ]);
62
72
  const jobs = dataResult.rows.map((row) => ({
63
73
  workflow_id: row.key.startsWith(keyPrefix) ? row.key.slice(keyPrefix.length) : row.key,
@@ -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 = `
@@ -21,6 +21,18 @@ export declare function discoverWorkflows(prompt: string, tags: string[], catego
21
21
  })[]>;
22
22
  export declare function getActiveYamlWorkflows(): Promise<LTYamlWorkflowRecord[]>;
23
23
  export declare function listYamlWorkflowsByAppId(appId: string): Promise<LTYamlWorkflowRecord[]>;
24
+ /**
25
+ * Return the next app-level version for a namespace.
26
+ *
27
+ * Each deploy of an app (namespace) must use a strictly increasing integer
28
+ * version. This queries the current max across all non-archived workflows
29
+ * in the namespace and returns max + 1.
30
+ *
31
+ * A new namespace with no workflows returns '1'.
32
+ * An existing namespace with one active tool at v1 returns '2' when a
33
+ * second tool is added — even though that second tool is "version 1" of itself.
34
+ */
35
+ export declare function getNextAppVersion(appId: string): Promise<string>;
24
36
  export declare function getDistinctAppIds(): Promise<string[]>;
25
37
  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
38
  export declare function getVersionHistory(workflowId: string, limit?: number, offset?: number): Promise<{
@@ -11,6 +11,7 @@ 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
16
  exports.createVersionSnapshot = createVersionSnapshot;
16
17
  exports.getVersionHistory = getVersionHistory;
@@ -172,6 +173,23 @@ async function listYamlWorkflowsByAppId(appId) {
172
173
  const { rows } = await pool.query(sql_1.LIST_BY_APP_ID, [appId]);
173
174
  return rows;
174
175
  }
176
+ /**
177
+ * Return the next app-level version for a namespace.
178
+ *
179
+ * Each deploy of an app (namespace) must use a strictly increasing integer
180
+ * version. This queries the current max across all non-archived workflows
181
+ * in the namespace and returns max + 1.
182
+ *
183
+ * A new namespace with no workflows returns '1'.
184
+ * An existing namespace with one active tool at v1 returns '2' when a
185
+ * second tool is added — even though that second tool is "version 1" of itself.
186
+ */
187
+ async function getNextAppVersion(appId) {
188
+ const pool = (0, db_1.getPool)();
189
+ const { rows } = await pool.query(sql_1.GET_MAX_APP_VERSION, [appId]);
190
+ const max = parseInt(rows[0]?.max_version ?? '0', 10);
191
+ return String(max + 1);
192
+ }
175
193
  async function getDistinctAppIds() {
176
194
  const pool = (0, db_1.getPool)();
177
195
  const { rows } = await pool.query(sql_1.GET_DISTINCT_APP_IDS);
@@ -50,10 +50,10 @@ const analyze_1 = require("./pipeline/analyze");
50
50
  const compile_1 = require("./pipeline/compile");
51
51
  const build_1 = require("./pipeline/build");
52
52
  const validate_1 = require("./pipeline/validate");
53
- const build_2 = require("./pipeline/build");
53
+ const utils_1 = require("../../modules/utils");
54
54
  // Re-exports for backward compatibility
55
- var build_3 = require("./pipeline/build");
56
- Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return build_3.capToolArguments; } });
55
+ var build_2 = require("./pipeline/build");
56
+ Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return build_2.capToolArguments; } });
57
57
  /**
58
58
  * Generate a HotMesh YAML workflow from a completed execution's tool call sequence.
59
59
  *
@@ -63,7 +63,7 @@ Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: func
63
63
  */
64
64
  async function generateYamlFromExecution(options) {
65
65
  const appId = options.appId || 'longtail';
66
- const graphTopic = options.subscribes || (0, build_2.sanitizeName)(options.name);
66
+ const graphTopic = (0, utils_1.sanitizeToolName)(options.subscribes || options.name);
67
67
  // 1. Export the execution to get events
68
68
  const execution = await (0, index_1.exportWorkflowExecution)(options.workflowId, options.taskQueue, options.workflowName);
69
69
  // 2. Initialize pipeline context
@@ -6,7 +6,8 @@
6
6
  * Falls back to mechanical heuristics when no plan is available.
7
7
  */
8
8
  import type { PipelineContext } from '../../types';
9
- export { capToolArguments, sanitizeName } from './utils';
9
+ export { capToolArguments } from './utils';
10
+ export { sanitizeToolName } from '../../../../modules/utils';
10
11
  /**
11
12
  * Build pipeline stage: construct the HotMesh YAML DAG.
12
13
  *
@@ -7,7 +7,7 @@
7
7
  * Falls back to mechanical heuristics when no plan is available.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.sanitizeName = exports.capToolArguments = void 0;
10
+ exports.sanitizeToolName = exports.capToolArguments = void 0;
11
11
  exports.build = build;
12
12
  const input_analyzer_1 = require("../../input-analyzer");
13
13
  const utils_1 = require("./utils");
@@ -17,7 +17,8 @@ const dag_1 = require("./dag");
17
17
  // Re-export public utilities used by other modules
18
18
  var utils_2 = require("./utils");
19
19
  Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return utils_2.capToolArguments; } });
20
- Object.defineProperty(exports, "sanitizeName", { enumerable: true, get: function () { return utils_2.sanitizeName; } });
20
+ var utils_3 = require("../../../../modules/utils");
21
+ Object.defineProperty(exports, "sanitizeToolName", { enumerable: true, get: function () { return utils_3.sanitizeToolName; } });
21
22
  /**
22
23
  * Build pipeline stage: construct the HotMesh YAML DAG.
23
24
  *
@@ -8,8 +8,6 @@
8
8
  export declare function keysRelated(a: string, b: string): boolean;
9
9
  /** Cap `limit` in tool arguments to avoid sending huge payloads to downstream LLM steps. */
10
10
  export declare function capToolArguments(args: Record<string, unknown>): Record<string, unknown>;
11
- /** Sanitize a name for use in HotMesh app IDs and topics. */
12
- export declare function sanitizeName(name: string): string;
13
11
  /** Convert a snake_case/camelCase field name to a readable label. */
14
12
  export declare function humanize(name: string): string;
15
13
  /**
@@ -5,7 +5,6 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.keysRelated = keysRelated;
7
7
  exports.capToolArguments = capToolArguments;
8
- exports.sanitizeName = sanitizeName;
9
8
  exports.humanize = humanize;
10
9
  exports.inferSchema = inferSchema;
11
10
  exports.buildInputMappings = buildInputMappings;
@@ -35,13 +34,6 @@ function capToolArguments(args) {
35
34
  }
36
35
  return capped;
37
36
  }
38
- /** Sanitize a name for use in HotMesh app IDs and topics. */
39
- function sanitizeName(name) {
40
- return name
41
- .toLowerCase()
42
- .replace(/[^a-z0-9]+/g, '-')
43
- .replace(/^-|-$/g, '');
44
- }
45
37
  /** Convert a snake_case/camelCase field name to a readable label. */
46
38
  function humanize(name) {
47
39
  return name
@@ -6,7 +6,8 @@ export declare const UPDATE_YAML_WORKFLOW_VERSION = "\n UPDATE lt_yaml_workflow
6
6
  export declare const DELETE_YAML_WORKFLOW = "\n DELETE FROM lt_yaml_workflows WHERE id = $1";
7
7
  export declare const GET_ACTIVE_YAML_WORKFLOWS = "\n SELECT * FROM lt_yaml_workflows\n WHERE status = 'active'\n ORDER BY name";
8
8
  export declare const LIST_BY_APP_ID = "\n SELECT * FROM lt_yaml_workflows\n WHERE app_id = $1 AND status != 'archived'\n ORDER BY name";
9
- export declare const GET_DISTINCT_APP_IDS = "\n SELECT DISTINCT app_id FROM lt_yaml_workflows\n WHERE status != 'archived'\n ORDER BY app_id";
9
+ export declare const GET_MAX_APP_VERSION = "\n SELECT COALESCE(MAX(CAST(app_version AS INTEGER)), 0) AS max_version\n FROM lt_yaml_workflows\n WHERE app_id = $1 AND status != 'archived'";
10
+ export declare const GET_DISTINCT_APP_IDS = "\n SELECT DISTINCT app_id FROM (\n SELECT app_id FROM lt_yaml_workflows WHERE status != 'archived'\n UNION\n SELECT app_id FROM hmsh_applications WHERE active = true\n ) all_apps\n ORDER BY app_id";
10
11
  export declare const MARK_CONTENT_DEPLOYED = "\n UPDATE lt_yaml_workflows\n SET deployed_content_version = content_version\n WHERE id = $1";
11
12
  export declare const MARK_APP_ID_CONTENT_DEPLOYED = "\n UPDATE lt_yaml_workflows\n SET deployed_content_version = content_version\n WHERE app_id = $1 AND status != 'archived'";
12
13
  export declare const CREATE_VERSION_SNAPSHOT = "\n INSERT INTO lt_yaml_workflow_versions\n (workflow_id, version, yaml_content, activity_manifest, input_schema, output_schema, input_field_meta, change_summary)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (workflow_id, version) DO NOTHING\n RETURNING *";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // ─── YAML workflow CRUD ─────────────────────────────────────────────────────
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.FIND_BY_TAGS_ALL = exports.FIND_BY_TAGS_ANY = exports.GET_CRON_SCHEDULED_WORKFLOWS = exports.CLEAR_CRON_SCHEDULE = exports.UPDATE_CRON_SCHEDULE = exports.UPDATE_STATUS_SUFFIX = exports.UPDATE_STATUS_BASE = exports.GET_VERSION_SNAPSHOT = exports.DISCOVER_WORKFLOWS = exports.LIST_VERSIONS = exports.COUNT_VERSIONS = exports.CREATE_VERSION_SNAPSHOT = exports.MARK_APP_ID_CONTENT_DEPLOYED = exports.MARK_CONTENT_DEPLOYED = exports.GET_DISTINCT_APP_IDS = exports.LIST_BY_APP_ID = exports.GET_ACTIVE_YAML_WORKFLOWS = exports.DELETE_YAML_WORKFLOW = exports.UPDATE_YAML_WORKFLOW_VERSION = exports.GET_YAML_WORKFLOW_BY_NAME = exports.GET_YAML_WORKFLOW = exports.CHECK_TOPIC_UNIQUE = exports.CREATE_YAML_WORKFLOW = void 0;
4
+ exports.FIND_BY_TAGS_ALL = exports.FIND_BY_TAGS_ANY = exports.GET_CRON_SCHEDULED_WORKFLOWS = exports.CLEAR_CRON_SCHEDULE = exports.UPDATE_CRON_SCHEDULE = exports.UPDATE_STATUS_SUFFIX = exports.UPDATE_STATUS_BASE = exports.GET_VERSION_SNAPSHOT = exports.DISCOVER_WORKFLOWS = exports.LIST_VERSIONS = exports.COUNT_VERSIONS = exports.CREATE_VERSION_SNAPSHOT = exports.MARK_APP_ID_CONTENT_DEPLOYED = exports.MARK_CONTENT_DEPLOYED = exports.GET_DISTINCT_APP_IDS = exports.GET_MAX_APP_VERSION = exports.LIST_BY_APP_ID = exports.GET_ACTIVE_YAML_WORKFLOWS = exports.DELETE_YAML_WORKFLOW = exports.UPDATE_YAML_WORKFLOW_VERSION = exports.GET_YAML_WORKFLOW_BY_NAME = exports.GET_YAML_WORKFLOW = exports.CHECK_TOPIC_UNIQUE = exports.CREATE_YAML_WORKFLOW = void 0;
5
5
  exports.CREATE_YAML_WORKFLOW = `
6
6
  INSERT INTO lt_yaml_workflows
7
7
  (name, description, app_id, app_version, source_workflow_id,
@@ -32,9 +32,16 @@ exports.LIST_BY_APP_ID = `
32
32
  SELECT * FROM lt_yaml_workflows
33
33
  WHERE app_id = $1 AND status != 'archived'
34
34
  ORDER BY name`;
35
+ exports.GET_MAX_APP_VERSION = `
36
+ SELECT COALESCE(MAX(CAST(app_version AS INTEGER)), 0) AS max_version
37
+ FROM lt_yaml_workflows
38
+ WHERE app_id = $1 AND status != 'archived'`;
35
39
  exports.GET_DISTINCT_APP_IDS = `
36
- SELECT DISTINCT app_id FROM lt_yaml_workflows
37
- WHERE status != 'archived'
40
+ SELECT DISTINCT app_id FROM (
41
+ SELECT app_id FROM lt_yaml_workflows WHERE status != 'archived'
42
+ UNION
43
+ SELECT app_id FROM hmsh_applications WHERE active = true
44
+ ) all_apps
38
45
  ORDER BY app_id`;
39
46
  exports.MARK_CONTENT_DEPLOYED = `
40
47
  UPDATE lt_yaml_workflows
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Schema-driven data exchange with external service endpoints.
3
+ *
4
+ * Three pillars: endpoint + schema + identity.
5
+ * Transport (fetch, Playwright, gRPC) is an implementation detail.
6
+ * The value is schema enforcement and credential resolution —
7
+ * validating both sides of the exchange and resolving auth from
8
+ * the connection store at the last mile.
9
+ */
10
+ /**
11
+ * Validate data against a JSON Schema.
12
+ *
13
+ * Returns a list of human-readable error strings (empty when valid).
14
+ */
15
+ export declare function validateSchema(data: unknown, schema: Record<string, unknown>): {
16
+ valid: boolean;
17
+ errors: string[];
18
+ };
19
+ /**
20
+ * Exchange data with an external service endpoint under schema enforcement.
21
+ *
22
+ * 1. If request_schema provided, validate body before sending.
23
+ * On failure: return immediately (never send the request).
24
+ * 2. Make the HTTP call (transport layer — currently Node.js fetch).
25
+ * 3. Parse response body (JSON auto-detect).
26
+ * 4. If response_schema provided, validate response after receiving.
27
+ * 5. Return result with validated flag and any validation_errors.
28
+ */
29
+ export declare function exchange(args: {
30
+ endpoint?: string;
31
+ url?: string;
32
+ method: string;
33
+ headers?: Record<string, string>;
34
+ query?: Record<string, string>;
35
+ body?: unknown;
36
+ request_schema?: Record<string, unknown>;
37
+ response_schema?: Record<string, unknown>;
38
+ timeout_ms?: number;
39
+ credential_provider?: string;
40
+ credential_label?: string;
41
+ auth_scheme?: string;
42
+ auth_header?: string;
43
+ }): Promise<{
44
+ status: number;
45
+ data: unknown;
46
+ headers: Record<string, string>;
47
+ elapsed_ms: number;
48
+ validated: boolean;
49
+ validation_errors: string[];
50
+ }>;