@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
@@ -1,5 +1,5 @@
1
1
  -- Long Tail Workflows: Schema
2
- -- Tasks track workflow executions; escalations track human interventions.
2
+ -- All tables, indexes, triggers, and functions.
3
3
 
4
4
  -- ─── updated_at trigger ─────────────────────────────────────────────────────
5
5
 
@@ -28,28 +28,31 @@ ON CONFLICT DO NOTHING;
28
28
  -- ─── lt_tasks ────────────────────────────────────────────────────────────────
29
29
 
30
30
  CREATE TABLE IF NOT EXISTS lt_tasks (
31
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
32
- workflow_id TEXT NOT NULL,
33
- workflow_type TEXT NOT NULL,
34
- lt_type TEXT NOT NULL,
35
- task_queue TEXT,
36
- status TEXT NOT NULL DEFAULT 'pending',
37
- priority INTEGER NOT NULL DEFAULT 2,
38
- signal_id TEXT NOT NULL,
31
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
32
+ workflow_id TEXT NOT NULL,
33
+ workflow_type TEXT NOT NULL,
34
+ lt_type TEXT NOT NULL,
35
+ task_queue TEXT,
36
+ status TEXT NOT NULL DEFAULT 'pending',
37
+ priority INTEGER NOT NULL DEFAULT 2,
38
+ signal_id TEXT NOT NULL,
39
39
  parent_workflow_id TEXT NOT NULL,
40
- origin_id TEXT,
41
- parent_id TEXT,
42
- started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
43
- completed_at TIMESTAMPTZ,
44
- envelope TEXT NOT NULL,
45
- metadata JSONB,
46
- error TEXT,
47
- milestones JSONB NOT NULL DEFAULT '[]'::JSONB,
48
- data TEXT,
49
- trace_id TEXT,
50
- span_id TEXT,
51
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
52
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
40
+ origin_id TEXT,
41
+ parent_id TEXT,
42
+ started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
43
+ completed_at TIMESTAMPTZ,
44
+ envelope TEXT NOT NULL,
45
+ metadata JSONB,
46
+ error TEXT,
47
+ milestones JSONB NOT NULL DEFAULT '[]'::JSONB,
48
+ data TEXT,
49
+ trace_id TEXT,
50
+ span_id TEXT,
51
+ initiated_by UUID,
52
+ principal_type TEXT DEFAULT 'user',
53
+ executing_as TEXT,
54
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
55
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
53
56
  );
54
57
 
55
58
  CREATE INDEX IF NOT EXISTS idx_lt_tasks_status_type ON lt_tasks (status, workflow_type, created_at DESC);
@@ -61,39 +64,80 @@ CREATE INDEX IF NOT EXISTS idx_lt_tasks_origin ON lt_tasks (origin_id, created_a
61
64
  CREATE INDEX IF NOT EXISTS idx_lt_tasks_workflow_id ON lt_tasks (workflow_id);
62
65
  CREATE INDEX IF NOT EXISTS idx_lt_tasks_origin_id ON lt_tasks (origin_id) WHERE origin_id IS NOT NULL;
63
66
  CREATE INDEX IF NOT EXISTS idx_lt_tasks_trace ON lt_tasks (trace_id) WHERE trace_id IS NOT NULL;
67
+ CREATE INDEX IF NOT EXISTS idx_lt_tasks_initiated_by ON lt_tasks (initiated_by) WHERE initiated_by IS NOT NULL;
64
68
 
65
69
  CREATE OR REPLACE TRIGGER trg_lt_tasks_updated_at
66
70
  BEFORE UPDATE ON lt_tasks
67
71
  FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
68
72
 
73
+ -- ─── lt_users ────────────────────────────────────────────────────────────────
74
+
75
+ CREATE TABLE IF NOT EXISTS lt_users (
76
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
77
+ external_id TEXT UNIQUE NOT NULL,
78
+ email TEXT,
79
+ display_name TEXT,
80
+ password_hash TEXT,
81
+ status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')),
82
+ account_type TEXT NOT NULL DEFAULT 'user' CHECK (account_type IN ('user', 'bot')),
83
+ oauth_provider TEXT,
84
+ oauth_provider_id TEXT,
85
+ metadata JSONB,
86
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
87
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_lt_users_status ON lt_users (status);
91
+ CREATE INDEX IF NOT EXISTS idx_lt_users_oauth
92
+ ON lt_users (oauth_provider, oauth_provider_id)
93
+ WHERE oauth_provider IS NOT NULL;
94
+
95
+ CREATE TRIGGER lt_users_updated_at
96
+ BEFORE UPDATE ON lt_users
97
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
98
+
99
+ -- ─── lt_user_roles ───────────────────────────────────────────────────────────
100
+
101
+ CREATE TABLE IF NOT EXISTS lt_user_roles (
102
+ user_id UUID NOT NULL REFERENCES lt_users(id) ON DELETE CASCADE,
103
+ role TEXT NOT NULL REFERENCES lt_roles(role),
104
+ type TEXT NOT NULL DEFAULT 'member' CHECK (type IN ('superadmin', 'admin', 'member')),
105
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
106
+ PRIMARY KEY (user_id, role)
107
+ );
108
+
109
+ CREATE INDEX IF NOT EXISTS idx_lt_user_roles_type ON lt_user_roles (type);
110
+ CREATE INDEX IF NOT EXISTS idx_lt_user_roles_user_id ON lt_user_roles (user_id);
111
+
69
112
  -- ─── lt_escalations ─────────────────────────────────────────────────────────
70
113
 
71
114
  CREATE TABLE IF NOT EXISTS lt_escalations (
72
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
73
- type TEXT NOT NULL,
74
- subtype TEXT NOT NULL,
75
- description TEXT,
76
- status TEXT NOT NULL DEFAULT 'pending',
77
- priority INTEGER NOT NULL DEFAULT 2,
78
- task_id UUID REFERENCES lt_tasks(id),
79
- origin_id TEXT,
80
- parent_id TEXT,
81
- workflow_id TEXT,
82
- task_queue TEXT,
83
- workflow_type TEXT,
84
- role TEXT NOT NULL REFERENCES lt_roles(role),
85
- assigned_to TEXT,
86
- assigned_until TIMESTAMPTZ,
87
- resolved_at TIMESTAMPTZ,
88
- claimed_at TIMESTAMPTZ,
89
- envelope TEXT NOT NULL,
90
- metadata JSONB,
115
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
116
+ type TEXT NOT NULL,
117
+ subtype TEXT NOT NULL,
118
+ description TEXT,
119
+ status TEXT NOT NULL DEFAULT 'pending',
120
+ priority INTEGER NOT NULL DEFAULT 2,
121
+ task_id UUID REFERENCES lt_tasks(id),
122
+ origin_id TEXT,
123
+ parent_id TEXT,
124
+ workflow_id TEXT,
125
+ task_queue TEXT,
126
+ workflow_type TEXT,
127
+ role TEXT NOT NULL REFERENCES lt_roles(role),
128
+ assigned_to TEXT,
129
+ assigned_until TIMESTAMPTZ,
130
+ resolved_at TIMESTAMPTZ,
131
+ claimed_at TIMESTAMPTZ,
132
+ created_by UUID,
133
+ envelope TEXT NOT NULL,
134
+ metadata JSONB,
91
135
  escalation_payload TEXT,
92
- resolver_payload TEXT,
93
- trace_id TEXT,
94
- span_id TEXT,
95
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
96
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
136
+ resolver_payload TEXT,
137
+ trace_id TEXT,
138
+ span_id TEXT,
139
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
140
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
97
141
  );
98
142
 
99
143
  CREATE INDEX IF NOT EXISTS idx_lt_escalations_available ON lt_escalations (status, role, assigned_until, created_at DESC);
@@ -113,44 +157,12 @@ CREATE INDEX IF NOT EXISTS idx_lt_escalations_trace ON lt_escalations (trace_id)
113
157
  CREATE INDEX IF NOT EXISTS idx_lt_escalations_created_desc ON lt_escalations (created_at DESC);
114
158
  CREATE INDEX IF NOT EXISTS idx_lt_escalations_updated_desc ON lt_escalations (updated_at DESC);
115
159
  CREATE INDEX IF NOT EXISTS idx_lt_escalations_priority_desc ON lt_escalations (priority DESC, created_at DESC);
160
+ CREATE INDEX IF NOT EXISTS idx_lt_escalations_created_by ON lt_escalations (created_by) WHERE created_by IS NOT NULL;
116
161
 
117
162
  CREATE OR REPLACE TRIGGER trg_lt_escalations_updated_at
118
163
  BEFORE UPDATE ON lt_escalations
119
164
  FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
120
165
 
121
- -- ─── lt_users ────────────────────────────────────────────────────────────────
122
-
123
- CREATE TABLE IF NOT EXISTS lt_users (
124
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
125
- external_id TEXT UNIQUE NOT NULL,
126
- email TEXT,
127
- display_name TEXT,
128
- password_hash TEXT,
129
- status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')),
130
- metadata JSONB,
131
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
132
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
133
- );
134
-
135
- CREATE TRIGGER lt_users_updated_at
136
- BEFORE UPDATE ON lt_users
137
- FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
138
-
139
- CREATE INDEX IF NOT EXISTS idx_lt_users_status ON lt_users (status);
140
-
141
- -- ─── lt_user_roles ───────────────────────────────────────────────────────────
142
-
143
- CREATE TABLE IF NOT EXISTS lt_user_roles (
144
- user_id UUID NOT NULL REFERENCES lt_users(id) ON DELETE CASCADE,
145
- role TEXT NOT NULL REFERENCES lt_roles(role),
146
- type TEXT NOT NULL DEFAULT 'member' CHECK (type IN ('superadmin', 'admin', 'member')),
147
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
148
- PRIMARY KEY (user_id, role)
149
- );
150
-
151
- CREATE INDEX IF NOT EXISTS idx_lt_user_roles_type ON lt_user_roles (type);
152
- CREATE INDEX IF NOT EXISTS idx_lt_user_roles_user_id ON lt_user_roles (user_id);
153
-
154
166
  -- ─── lt_config_workflows ────────────────────────────────────────────────────
155
167
 
156
168
  CREATE TABLE IF NOT EXISTS lt_config_workflows (
@@ -193,24 +205,38 @@ CREATE TABLE IF NOT EXISTS lt_config_invocation_roles (
193
205
  UNIQUE(workflow_type, role)
194
206
  );
195
207
 
208
+ -- ─── lt_config_role_escalations ─────────────────────────────────────────────
209
+
210
+ CREATE TABLE IF NOT EXISTS lt_config_role_escalations (
211
+ source_role TEXT NOT NULL REFERENCES lt_roles(role),
212
+ target_role TEXT NOT NULL REFERENCES lt_roles(role),
213
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
214
+ PRIMARY KEY (source_role, target_role)
215
+ );
216
+
217
+ CREATE INDEX IF NOT EXISTS idx_lt_config_role_escalations_source
218
+ ON lt_config_role_escalations (source_role);
219
+
196
220
  -- ─── lt_mcp_servers ─────────────────────────────────────────────────────────
197
221
 
198
222
  CREATE TABLE IF NOT EXISTS lt_mcp_servers (
199
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
200
- name TEXT UNIQUE NOT NULL,
201
- description TEXT,
202
- transport_type TEXT NOT NULL CHECK (transport_type IN ('stdio', 'sse')),
203
- transport_config JSONB NOT NULL DEFAULT '{}'::JSONB,
204
- auto_connect BOOLEAN NOT NULL DEFAULT false,
205
- tool_manifest JSONB,
206
- status TEXT NOT NULL DEFAULT 'registered'
207
- CHECK (status IN ('registered', 'connected', 'error', 'disconnected')),
208
- last_connected_at TIMESTAMPTZ,
209
- metadata JSONB,
210
- tags TEXT[] NOT NULL DEFAULT '{}',
211
- compile_hints TEXT,
212
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
213
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
223
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
224
+ name TEXT UNIQUE NOT NULL,
225
+ description TEXT,
226
+ transport_type TEXT NOT NULL CHECK (transport_type IN ('stdio', 'sse', 'streamable-http')),
227
+ transport_config JSONB NOT NULL DEFAULT '{}'::JSONB,
228
+ auto_connect BOOLEAN NOT NULL DEFAULT false,
229
+ tool_manifest JSONB,
230
+ status TEXT NOT NULL DEFAULT 'registered'
231
+ CHECK (status IN ('registered', 'connected', 'error', 'disconnected')),
232
+ last_connected_at TIMESTAMPTZ,
233
+ metadata JSONB,
234
+ tags TEXT[] NOT NULL DEFAULT '{}',
235
+ compile_hints TEXT,
236
+ required_scopes TEXT[] NOT NULL DEFAULT '{}',
237
+ credential_providers TEXT[] NOT NULL DEFAULT '{}',
238
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
239
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
214
240
  );
215
241
 
216
242
  CREATE INDEX IF NOT EXISTS idx_lt_mcp_servers_name ON lt_mcp_servers (name);
@@ -222,18 +248,6 @@ CREATE OR REPLACE TRIGGER trg_lt_mcp_servers_updated_at
222
248
  BEFORE UPDATE ON lt_mcp_servers
223
249
  FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
224
250
 
225
- -- ─── lt_config_role_escalations ─────────────────────────────────────────────
226
-
227
- CREATE TABLE IF NOT EXISTS lt_config_role_escalations (
228
- source_role TEXT NOT NULL REFERENCES lt_roles(role),
229
- target_role TEXT NOT NULL REFERENCES lt_roles(role),
230
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
231
- PRIMARY KEY (source_role, target_role)
232
- );
233
-
234
- CREATE INDEX IF NOT EXISTS idx_lt_config_role_escalations_source
235
- ON lt_config_role_escalations (source_role);
236
-
237
251
  -- ─── lt_yaml_workflows ──────────────────────────────────────────────────────
238
252
 
239
253
  CREATE TABLE IF NOT EXISTS lt_yaml_workflows (
@@ -261,6 +275,12 @@ CREATE TABLE IF NOT EXISTS lt_yaml_workflows (
261
275
  cron_schedule TEXT,
262
276
  cron_envelope JSONB,
263
277
  execute_as TEXT,
278
+ original_prompt TEXT,
279
+ category TEXT,
280
+ search_vector TSVECTOR,
281
+ set_id UUID,
282
+ set_role TEXT CHECK (set_role IN ('leaf', 'composition', 'router')),
283
+ set_build_order INTEGER,
264
284
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
265
285
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
266
286
  );
@@ -268,11 +288,36 @@ CREATE TABLE IF NOT EXISTS lt_yaml_workflows (
268
288
  CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_status ON lt_yaml_workflows (status);
269
289
  CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_app_id ON lt_yaml_workflows (app_id);
270
290
  CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_tags ON lt_yaml_workflows USING GIN (tags);
291
+ CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_search ON lt_yaml_workflows USING GIN (search_vector);
292
+ CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_category ON lt_yaml_workflows (category) WHERE category IS NOT NULL;
293
+ CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_set_id ON lt_yaml_workflows (set_id) WHERE set_id IS NOT NULL;
294
+
295
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_lt_yaml_workflows_app_topic_unique
296
+ ON lt_yaml_workflows (app_id, graph_topic)
297
+ WHERE status != 'archived';
271
298
 
272
299
  CREATE OR REPLACE TRIGGER trg_lt_yaml_workflows_updated_at
273
300
  BEFORE UPDATE ON lt_yaml_workflows
274
301
  FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
275
302
 
303
+ -- Full-text search trigger
304
+ CREATE OR REPLACE FUNCTION lt_yaml_workflows_search_vector_update()
305
+ RETURNS TRIGGER AS $$
306
+ BEGIN
307
+ NEW.search_vector :=
308
+ setweight(to_tsvector('english', coalesce(NEW.name, '')), 'A') ||
309
+ setweight(to_tsvector('english', coalesce(NEW.original_prompt, '')), 'A') ||
310
+ setweight(to_tsvector('english', coalesce(NEW.description, '')), 'B') ||
311
+ setweight(to_tsvector('english', coalesce(NEW.category, '')), 'C') ||
312
+ setweight(to_tsvector('english', coalesce(array_to_string(NEW.tags, ' '), '')), 'C');
313
+ RETURN NEW;
314
+ END;
315
+ $$ LANGUAGE plpgsql;
316
+
317
+ CREATE OR REPLACE TRIGGER trg_lt_yaml_workflows_search_vector
318
+ BEFORE INSERT OR UPDATE ON lt_yaml_workflows
319
+ FOR EACH ROW EXECUTE FUNCTION lt_yaml_workflows_search_vector_update();
320
+
276
321
  -- ─── lt_yaml_workflow_versions ──────────────────────────────────────────────
277
322
 
278
323
  CREATE TABLE IF NOT EXISTS lt_yaml_workflow_versions (
@@ -292,6 +337,136 @@ CREATE TABLE IF NOT EXISTS lt_yaml_workflow_versions (
292
337
  CREATE INDEX IF NOT EXISTS idx_lt_yaml_wf_versions_workflow
293
338
  ON lt_yaml_workflow_versions (workflow_id, version DESC);
294
339
 
340
+ -- ─── lt_workflow_sets ───────────────────────────────────────────────────────
341
+
342
+ CREATE TABLE IF NOT EXISTS lt_workflow_sets (
343
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
344
+ name TEXT UNIQUE NOT NULL,
345
+ description TEXT,
346
+ specification TEXT NOT NULL,
347
+ plan JSONB NOT NULL DEFAULT '[]'::JSONB,
348
+ namespaces TEXT[] NOT NULL DEFAULT '{}',
349
+ status TEXT NOT NULL DEFAULT 'planning'
350
+ CHECK (status IN ('planning','planned','building','deploying','completed','failed')),
351
+ source_workflow_id TEXT,
352
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
353
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
354
+ );
355
+
356
+ CREATE OR REPLACE TRIGGER trg_lt_workflow_sets_updated_at
357
+ BEFORE UPDATE ON lt_workflow_sets
358
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
359
+
360
+ -- Add FK for lt_yaml_workflows.set_id (table already exists, add constraint)
361
+ DO $$ BEGIN
362
+ ALTER TABLE lt_yaml_workflows ADD CONSTRAINT fk_lt_yaml_workflows_set_id
363
+ FOREIGN KEY (set_id) REFERENCES lt_workflow_sets(id) ON DELETE SET NULL;
364
+ EXCEPTION
365
+ WHEN duplicate_object THEN NULL;
366
+ END $$;
367
+
368
+ -- ─── lt_oauth_tokens ────────────────────────────────────────────────────────
369
+
370
+ CREATE TABLE IF NOT EXISTS lt_oauth_tokens (
371
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
372
+ user_id UUID NOT NULL REFERENCES lt_users(id) ON DELETE CASCADE,
373
+ provider TEXT NOT NULL,
374
+ label TEXT NOT NULL DEFAULT 'default',
375
+ access_token_enc TEXT NOT NULL,
376
+ refresh_token_enc TEXT,
377
+ token_type TEXT NOT NULL DEFAULT 'bearer',
378
+ scopes TEXT[] NOT NULL DEFAULT '{}',
379
+ expires_at TIMESTAMPTZ,
380
+ provider_user_id TEXT NOT NULL,
381
+ provider_email TEXT,
382
+ metadata JSONB,
383
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
384
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
385
+ UNIQUE (user_id, provider, label)
386
+ );
387
+
388
+ CREATE INDEX IF NOT EXISTS idx_lt_oauth_tokens_provider
389
+ ON lt_oauth_tokens (provider, user_id);
390
+
391
+ CREATE OR REPLACE TRIGGER trg_lt_oauth_tokens_updated_at
392
+ BEFORE UPDATE ON lt_oauth_tokens
393
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
394
+
395
+ -- ─── lt_service_tokens ──────────────────────────────────────────────────────
396
+
397
+ CREATE TABLE IF NOT EXISTS lt_service_tokens (
398
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
399
+ name TEXT UNIQUE NOT NULL,
400
+ token_hash TEXT NOT NULL,
401
+ server_id UUID REFERENCES lt_mcp_servers(id) ON DELETE CASCADE,
402
+ scopes TEXT[] NOT NULL DEFAULT '{}',
403
+ expires_at TIMESTAMPTZ,
404
+ last_used_at TIMESTAMPTZ,
405
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
406
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
407
+ );
408
+
409
+ CREATE INDEX IF NOT EXISTS idx_lt_service_tokens_server
410
+ ON lt_service_tokens (server_id);
411
+
412
+ CREATE OR REPLACE TRIGGER trg_lt_service_tokens_updated_at
413
+ BEFORE UPDATE ON lt_service_tokens
414
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
415
+
416
+ -- ─── lt_bot_api_keys ────────────────────────────────────────────────────────
417
+
418
+ CREATE TABLE IF NOT EXISTS lt_bot_api_keys (
419
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
420
+ name TEXT NOT NULL,
421
+ user_id UUID NOT NULL REFERENCES lt_users(id) ON DELETE CASCADE,
422
+ key_hash TEXT NOT NULL,
423
+ scopes TEXT[] NOT NULL DEFAULT '{}',
424
+ expires_at TIMESTAMPTZ,
425
+ last_used_at TIMESTAMPTZ,
426
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
427
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
428
+ UNIQUE (user_id, name)
429
+ );
430
+
431
+ CREATE INDEX IF NOT EXISTS idx_bot_api_keys_user_id ON lt_bot_api_keys (user_id);
432
+
433
+ -- ─── lt_ephemeral_credentials ───────────────────────────────────────────────
434
+
435
+ CREATE TABLE IF NOT EXISTS lt_ephemeral_credentials (
436
+ token UUID PRIMARY KEY DEFAULT gen_random_uuid(),
437
+ value BYTEA NOT NULL,
438
+ label TEXT,
439
+ max_uses INTEGER NOT NULL DEFAULT 0,
440
+ use_count INTEGER NOT NULL DEFAULT 0,
441
+ expires_at TIMESTAMPTZ,
442
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
443
+ );
444
+
445
+ CREATE INDEX IF NOT EXISTS idx_lt_ephemeral_expiry
446
+ ON lt_ephemeral_credentials (expires_at)
447
+ WHERE expires_at IS NOT NULL;
448
+
449
+ -- ─── lt_knowledge ───────────────────────────────────────────────────────────
450
+
451
+ CREATE TABLE IF NOT EXISTS lt_knowledge (
452
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
453
+ domain TEXT NOT NULL,
454
+ key TEXT NOT NULL,
455
+ data JSONB NOT NULL DEFAULT '{}',
456
+ tags TEXT[] NOT NULL DEFAULT '{}',
457
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
458
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
459
+ UNIQUE(domain, key)
460
+ );
461
+
462
+ CREATE INDEX IF NOT EXISTS idx_lt_knowledge_domain ON lt_knowledge (domain);
463
+ CREATE INDEX IF NOT EXISTS idx_lt_knowledge_tags ON lt_knowledge USING GIN (tags);
464
+ CREATE INDEX IF NOT EXISTS idx_lt_knowledge_data ON lt_knowledge USING GIN (data);
465
+
466
+ CREATE TRIGGER lt_knowledge_updated_at
467
+ BEFORE UPDATE ON lt_knowledge
468
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
469
+
295
470
  -- ─── lt_namespaces ──────────────────────────────────────────────────────────
296
471
 
297
472
  CREATE TABLE IF NOT EXISTS lt_namespaces (
@@ -1,6 +1,7 @@
1
- -- Seed data: workflow configs, MCP servers, escalation chains.
1
+ -- System seed data: built-in MCP server, system workflow configs, escalation chains.
2
+ -- Example workflow configs are seeded at runtime when examples: true.
2
3
 
3
- -- ─── MCP servers ────────────────────────────────────────────────────────────
4
+ -- ─── Built-in MCP server ───────────────────────────────────────────────────
4
5
 
5
6
  INSERT INTO lt_mcp_servers (name, description, transport_type, transport_config, auto_connect, status)
6
7
  VALUES (
@@ -24,52 +25,68 @@ INSERT INTO lt_config_role_escalations (source_role, target_role) VALUES
24
25
  ('admin', 'superadmin')
25
26
  ON CONFLICT DO NOTHING;
26
27
 
27
- -- ─── Example workflows (all directly invocable) ────────────────────────────
28
+ -- ─── System workflow configs ────────────────────────────────────────────────
28
29
 
29
30
  INSERT INTO lt_config_workflows
30
- (workflow_type, task_queue, default_role, invocable, description, tool_tags, envelope_schema, resolver_schema)
31
+ (workflow_type, task_queue, default_role, invocable, description, tool_tags)
31
32
  VALUES
32
- -- Review content
33
- ('reviewContent', 'long-tail-examples', 'reviewer', true,
34
- 'Content review — AI-powered moderation with human escalation for low-confidence results',
35
- ARRAY['document-processing', 'vision', 'ocr', 'translation'],
36
- '{"data": {"contentId": "article-001", "content": "Content to review...", "contentType": "article"}, "metadata": {"source": "dashboard"}}'::jsonb,
37
- '{"approved": true, "analysis": {"confidence": 0.95, "flags": [], "summary": "Manually reviewed and approved."}}'::jsonb),
33
+ ('mcpQuery', 'long-tail-system', 'engineer', false,
34
+ 'Dynamic MCP tool orchestration — LLM agentic loop with raw MCP tools',
35
+ '{}'),
36
+ ('mcpTriage', 'long-tail-system', 'engineer', false,
37
+ 'Dynamic MCP triage LLM agentic loop for escalation remediation',
38
+ '{}'),
39
+ ('mcpWorkflowBuilder', 'long-tail-system', 'engineer', false,
40
+ 'Direct pipeline builder — LLM constructs DAG from tool schemas',
41
+ '{}'),
42
+ ('mcpWorkflowPlanner', 'long-tail-system', 'engineer', false,
43
+ 'Plan mode — decomposes specifications into multi-workflow sets',
44
+ '{}')
45
+ ON CONFLICT (workflow_type) DO NOTHING;
38
46
 
39
- -- Verify document
40
- ('verifyDocument', 'long-tail-examples', 'reviewer', true,
41
- 'Document verification AI Vision analyzes identity documents',
42
- ARRAY['document-processing', 'vision', 'ocr', 'translation'],
43
- '{"data": {"documentId": "doc-001", "documentUrl": "https://example.com/doc.jpg", "documentType": "drivers_license", "memberId": "member-12345"}, "metadata": {"source": "dashboard"}}'::jsonb,
44
- '{"memberId": "", "extractedInfo": {}, "validationResult": "match", "confidence": 1.0}'::jsonb),
47
+ -- Query router (orchestrator entry point)
48
+ INSERT INTO lt_config_workflows
49
+ (workflow_type, task_queue, default_role, invocable, description, tool_tags, envelope_schema)
50
+ VALUES
51
+ ('mcpQueryRouter', 'long-tail-system', 'engineer', true,
52
+ 'Do anything with tools — browser automation, file operations, HTTP requests, database queries, document processing, and more',
53
+ '{}',
54
+ '{"data": {"prompt": "Describe what you want to accomplish using available tools..."}, "metadata": {"source": "dashboard"}}'::jsonb)
55
+ ON CONFLICT (workflow_type) DO NOTHING;
45
56
 
46
- -- Process claim
47
- ('processClaim', 'long-tail-examples', 'reviewer', true,
48
- 'Insurance claim processing — document analysis, validation, and human review',
49
- ARRAY['document-processing', 'vision', 'database', 'query'],
50
- '{"data": {"claimId": "CLM-2024-001", "claimantId": "POL-5551234", "claimType": "auto_collision", "amount": 12500, "documents": ["incident_report.pdf", "photo_evidence.jpg"]}, "metadata": {"source": "dashboard"}}'::jsonb,
51
- '{"approved": true, "analysis": {"confidence": 0.92, "flags": [], "summary": "Documents reviewed and verified."}, "status": "resolved"}'::jsonb),
57
+ -- Deterministic execution (compiled YAML workflows)
58
+ INSERT INTO lt_config_workflows
59
+ (workflow_type, task_queue, default_role, invocable, description, tool_tags)
60
+ VALUES
61
+ ('mcpDeterministic', 'long-tail-system', 'engineer', false,
62
+ 'Deterministic execution invokes matched compiled YAML workflows with extracted inputs',
63
+ '{}')
64
+ ON CONFLICT (workflow_type) DO NOTHING;
52
65
 
53
- -- Kitchen sink
54
- ('kitchenSink', 'long-tail-examples', 'reviewer', true,
55
- 'Kitchen sink — demonstrates sleep, signals, parallel activities, escalation, and every durable primitive',
56
- '{}',
57
- '{"data": {"name": "World", "mode": "full"}, "metadata": {"source": "dashboard"}}'::jsonb,
58
- NULL),
66
+ -- Triage router
67
+ INSERT INTO lt_config_workflows
68
+ (workflow_type, task_queue, default_role, invocable, description, tool_tags)
69
+ VALUES
70
+ ('mcpTriageRouter', 'long-tail-system', 'engineer', false,
71
+ 'Triage router — discovers compiled workflows for remediation, routes to deterministic or dynamic triage',
72
+ '{}')
73
+ ON CONFLICT (workflow_type) DO NOTHING;
59
74
 
60
- -- Basic signal (configured, NOT certified — no escalation roles)
61
- ('basicSignal', 'long-tail-examples', 'reviewer', true,
62
- 'Signal-based escalation workflow stays running while waiting for human input via conditionLT',
63
- '{}',
64
- '{"data": {"message": "Deployment approval needed for v2.1.0", "role": "reviewer"}, "metadata": {"certified": false, "source": "dashboard"}}'::jsonb,
65
- '{"properties": {"approved": {"type": "boolean", "default": false, "description": "Approve this deployment?"}, "notes": {"type": "string", "default": "", "description": "Reviewer notes — visible to the workflow author"}}}'::jsonb)
75
+ -- Triage deterministic
76
+ INSERT INTO lt_config_workflows
77
+ (workflow_type, task_queue, default_role, invocable, description, tool_tags)
78
+ VALUES
79
+ ('mcpTriageDeterministic', 'long-tail-system', 'engineer', false,
80
+ 'Deterministic triage invokes matched compiled workflows for escalation remediation',
81
+ '{}')
66
82
  ON CONFLICT (workflow_type) DO NOTHING;
67
83
 
68
- -- ─── Assign roles to all workflows ──────────────────────────────────────────
84
+ -- ─── Assign roles to all system workflows ──────────────────────────────────
69
85
 
70
86
  INSERT INTO lt_config_roles (workflow_type, role)
71
- SELECT workflow_type, unnest(ARRAY['reviewer', 'engineer', 'admin'])
72
- FROM lt_config_workflows
73
- WHERE workflow_type != 'basicSignal'
87
+ SELECT wt, unnest(ARRAY['reviewer', 'engineer', 'admin'])
88
+ FROM unnest(ARRAY[
89
+ 'mcpQuery', 'mcpTriage', 'mcpWorkflowBuilder', 'mcpWorkflowPlanner',
90
+ 'mcpQueryRouter', 'mcpDeterministic', 'mcpTriageRouter', 'mcpTriageDeterministic'
91
+ ]) AS wt
74
92
  ON CONFLICT (workflow_type, role) DO NOTHING;
75
-
@@ -23,4 +23,19 @@ export declare class LocalStorageBackend implements StorageBackend {
23
23
  size: number;
24
24
  }>;
25
25
  createReadStream(key: string): Promise<NodeJS.ReadableStream>;
26
+ listWithPrefixes(prefix?: string, pageSize?: number, continuationToken?: string): Promise<{
27
+ files: Array<{
28
+ path: string;
29
+ size: number;
30
+ modified_at: string;
31
+ }>;
32
+ directories: string[];
33
+ nextToken?: string;
34
+ }>;
35
+ getMetadata(key: string): Promise<{
36
+ size: number;
37
+ modified_at: string;
38
+ content_type: string;
39
+ }>;
40
+ getSignedUrl(key: string, expiresInSeconds: number): Promise<string>;
26
41
  }