@hotmeshio/long-tail 0.1.16 → 0.1.17

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 (359) hide show
  1. package/build/api/escalations/resolve.js +1 -0
  2. package/build/api/files.d.ts +4 -0
  3. package/build/api/files.js +14 -0
  4. package/build/api/workflows/config.js +5 -0
  5. package/build/index.d.ts +0 -1
  6. package/build/index.js +1 -4
  7. package/build/lib/db/schemas/002_seed.sql +3 -81
  8. package/build/lib/storage/mime.js +20 -0
  9. package/build/routes/file-browser.js +30 -0
  10. package/build/routes/files.js +20 -18
  11. package/build/services/config/sql.d.ts +3 -0
  12. package/build/services/config/sql.js +15 -1
  13. package/build/services/config/write.d.ts +6 -0
  14. package/build/services/config/write.js +64 -0
  15. package/build/services/cron/index.d.ts +5 -0
  16. package/build/services/cron/index.js +30 -0
  17. package/build/services/insight/index.js +3 -0
  18. package/build/services/interceptor/activities/task.d.ts +1 -0
  19. package/build/services/interceptor/activities/task.js +2 -1
  20. package/build/services/interceptor/activities/workflow.js +1 -0
  21. package/build/services/interceptor/index.js +4 -4
  22. package/build/services/interceptor/lifecycle.js +1 -1
  23. package/build/services/mcp/db.d.ts +17 -0
  24. package/build/services/mcp/db.js +50 -0
  25. package/build/services/mcp/sql.d.ts +4 -1
  26. package/build/services/mcp/sql.js +9 -2
  27. package/build/services/oauth/index.js +4 -1
  28. package/build/services/oauth/providers/google.js +7 -2
  29. package/build/services/orchestrator/index.js +5 -0
  30. package/build/services/task/crud.js +1 -0
  31. package/build/services/task/sql.d.ts +1 -1
  32. package/build/services/task/sql.js +2 -2
  33. package/build/services/task/types.d.ts +2 -0
  34. package/build/services/workers/registry.js +3 -1
  35. package/build/services/workflow-invocation.js +8 -1
  36. package/build/start/workers.d.ts +2 -1
  37. package/build/start/workers.js +66 -6
  38. package/build/system/index.d.ts +12 -10
  39. package/build/system/index.js +240 -67
  40. package/build/system/mcp-servers/playwright/schemas.d.ts +12 -12
  41. package/build/system/seed/index.d.ts +0 -7
  42. package/build/system/seed/index.js +5 -46
  43. package/build/tsconfig.tsbuildinfo +1 -1
  44. package/build/types/index.d.ts +1 -1
  45. package/build/types/startup.d.ts +59 -2
  46. package/dashboard/dist/assets/AdminDashboard-CsTOErp1.js +2 -0
  47. package/dashboard/dist/assets/{AdminDashboard-Bprul9Eb.js.map → AdminDashboard-CsTOErp1.js.map} +1 -1
  48. package/dashboard/dist/assets/AvailableEscalationsPage-BqQA3IJp.js +2 -0
  49. package/dashboard/dist/assets/{AvailableEscalationsPage-H_z5mC10.js.map → AvailableEscalationsPage-BqQA3IJp.js.map} +1 -1
  50. package/dashboard/dist/assets/BotPicker-C2xR1xay.js +2 -0
  51. package/dashboard/dist/assets/{BotPicker-DcvILNUf.js.map → BotPicker-C2xR1xay.js.map} +1 -1
  52. package/dashboard/dist/assets/CollapsibleSection-CRtHQsAv.js +2 -0
  53. package/dashboard/dist/assets/{CollapsibleSection-BWPbzgEe.js.map → CollapsibleSection-CRtHQsAv.js.map} +1 -1
  54. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
  55. package/dashboard/dist/assets/{ConfirmDeleteModal-Cy6KVLfC.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
  56. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
  57. package/dashboard/dist/assets/{CopyableId-CRED8hvk.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
  58. package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js +2 -0
  59. package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js.map +1 -0
  60. package/dashboard/dist/assets/CustomDurationPicker-BABUv1V2.js +2 -0
  61. package/dashboard/dist/assets/{CustomDurationPicker-eOk2EqQ5.js.map → CustomDurationPicker-BABUv1V2.js.map} +1 -1
  62. package/dashboard/dist/assets/DataTable-D3-wSEf0.js +2 -0
  63. package/dashboard/dist/assets/{DataTable-bd2PTBJd.js.map → DataTable-D3-wSEf0.js.map} +1 -1
  64. package/dashboard/dist/assets/DropZone-DHKmMqRA.js +2 -0
  65. package/dashboard/dist/assets/DropZone-DHKmMqRA.js.map +1 -0
  66. package/dashboard/dist/assets/ElapsedCell-DrJif03B.js +2 -0
  67. package/dashboard/dist/assets/{ElapsedCell-BGo8vyus.js.map → ElapsedCell-DrJif03B.js.map} +1 -1
  68. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
  69. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js.map +1 -0
  70. package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js +2 -0
  71. package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js.map +1 -0
  72. package/dashboard/dist/assets/EventTable-Dh3_9DAY.js +2 -0
  73. package/dashboard/dist/assets/{EventTable-CmFhswLW.js.map → EventTable-Dh3_9DAY.js.map} +1 -1
  74. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
  75. package/dashboard/dist/assets/{FilterBar-BQNzsd3A.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
  76. package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +2 -0
  77. package/dashboard/dist/assets/{ListToolbar-OWOn-HiC.js.map → ListToolbar-CyEkulVR.js.map} +1 -1
  78. package/dashboard/dist/assets/McpOverview-ChLa6Gl7.js +2 -0
  79. package/dashboard/dist/assets/{McpOverview-OkEzvClD.js.map → McpOverview-ChLa6Gl7.js.map} +1 -1
  80. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +5 -0
  81. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +1 -0
  82. package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js +2 -0
  83. package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js.map +1 -0
  84. package/dashboard/dist/assets/McpRunDetailPage-ERVuNEEK.js +2 -0
  85. package/dashboard/dist/assets/{McpRunDetailPage-DMeiG4i_.js.map → McpRunDetailPage-ERVuNEEK.js.map} +1 -1
  86. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +2 -0
  87. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +1 -0
  88. package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
  89. package/dashboard/dist/assets/{Modal-Dir9Rlnx.js.map → Modal-DEODGeqx.js.map} +1 -1
  90. package/dashboard/dist/assets/OperatorDashboard-CJm_BTPU.js +2 -0
  91. package/dashboard/dist/assets/{OperatorDashboard-OqWC6Azy.js.map → OperatorDashboard-CJm_BTPU.js.map} +1 -1
  92. package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js +2 -0
  93. package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js.map +1 -0
  94. package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js +2 -0
  95. package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js.map +1 -0
  96. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
  97. package/dashboard/dist/assets/{PriorityBadge-C7D5d_HY.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
  98. package/dashboard/dist/assets/ProcessDetailPage-vfnCDyQK.js +2 -0
  99. package/dashboard/dist/assets/{ProcessDetailPage-DZIP6grw.js.map → ProcessDetailPage-vfnCDyQK.js.map} +1 -1
  100. package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js +2 -0
  101. package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js.map +1 -0
  102. package/dashboard/dist/assets/RolePill-BhVC0cc3.js +2 -0
  103. package/dashboard/dist/assets/{RolePill-D6nMxMvp.js.map → RolePill-BhVC0cc3.js.map} +1 -1
  104. package/dashboard/dist/assets/RolesPage-DYSt2aAr.js +2 -0
  105. package/dashboard/dist/assets/RolesPage-DYSt2aAr.js.map +1 -0
  106. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
  107. package/dashboard/dist/assets/{RowActions-JqgAB0p3.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
  108. package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +2 -0
  109. package/dashboard/dist/assets/{RunAsSelector-KAlKtitB.js.map → RunAsSelector-CD7_Dmb0.js.map} +1 -1
  110. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
  111. package/dashboard/dist/assets/{StatCard-B-WLhOaH.js.map → StatCard-DlgF0CJC.js.map} +1 -1
  112. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
  113. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js.map +1 -0
  114. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
  115. package/dashboard/dist/assets/{StepIndicator-D9Xvdf18.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
  116. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
  117. package/dashboard/dist/assets/{StickyPagination-CJHMzYJj.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
  118. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +2 -0
  119. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +1 -0
  120. package/dashboard/dist/assets/TagInput-DftaRHDV.js +2 -0
  121. package/dashboard/dist/assets/{TagInput-DcPnUnSJ.js.map → TagInput-DftaRHDV.js.map} +1 -1
  122. package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js +2 -0
  123. package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js.map +1 -0
  124. package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js +2 -0
  125. package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js.map +1 -0
  126. package/dashboard/dist/assets/TasksListPage-g6XIbhju.js +2 -0
  127. package/dashboard/dist/assets/{TasksListPage-DeewV4Gp.js.map → TasksListPage-g6XIbhju.js.map} +1 -1
  128. package/dashboard/dist/assets/TimeAgo-BihIwEbB.js +2 -0
  129. package/dashboard/dist/assets/{TimeAgo-DJZq-e4R.js.map → TimeAgo-BihIwEbB.js.map} +1 -1
  130. package/dashboard/dist/assets/TimestampCell-GOFcvE-i.js +2 -0
  131. package/dashboard/dist/assets/{TimestampCell-Dx5uwGfS.js.map → TimestampCell-GOFcvE-i.js.map} +1 -1
  132. package/dashboard/dist/assets/UserName-CmMVt4vS.js +2 -0
  133. package/dashboard/dist/assets/{UserName-CnGk7MgL.js.map → UserName-CmMVt4vS.js.map} +1 -1
  134. package/dashboard/dist/assets/WorkflowExecutionPage-soRFz_30.js +2 -0
  135. package/dashboard/dist/assets/{WorkflowExecutionPage-CPQ0fIwf.js.map → WorkflowExecutionPage-soRFz_30.js.map} +1 -1
  136. package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js +2 -0
  137. package/dashboard/dist/assets/{WorkflowPill-BrD5d1AG.js.map → WorkflowPill-DUDDyBsj.js.map} +1 -1
  138. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +2 -0
  139. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +1 -0
  140. package/dashboard/dist/assets/WorkflowsOverview-z3Ztiz1y.js +2 -0
  141. package/dashboard/dist/assets/{WorkflowsOverview-lBp2E6rN.js.map → WorkflowsOverview-z3Ztiz1y.js.map} +1 -1
  142. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +2 -0
  143. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +1 -0
  144. package/dashboard/dist/assets/{bots-fc_O_YIq.js → bots-BZPXDh_y.js} +2 -2
  145. package/dashboard/dist/assets/{bots-fc_O_YIq.js.map → bots-BZPXDh_y.js.map} +1 -1
  146. package/dashboard/dist/assets/escalation-DBUIq1Z4.js +2 -0
  147. package/dashboard/dist/assets/{escalation-BYhLYHBz.js.map → escalation-DBUIq1Z4.js.map} +1 -1
  148. package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +2 -0
  149. package/dashboard/dist/assets/{escalation-columns-DjJyuC1g.js.map → escalation-columns-DL4zsR8Y.js.map} +1 -1
  150. package/dashboard/dist/assets/helpers-D50KFFkI.js +2 -0
  151. package/dashboard/dist/assets/{helpers-CQG3Rh2y.js.map → helpers-D50KFFkI.js.map} +1 -1
  152. package/dashboard/dist/assets/index-B-ioA6yv.js +2 -0
  153. package/dashboard/dist/assets/index-B-ioA6yv.js.map +1 -0
  154. package/dashboard/dist/assets/index-B-jzKfuv.js +2 -0
  155. package/dashboard/dist/assets/index-B-jzKfuv.js.map +1 -0
  156. package/dashboard/dist/assets/index-BMpoMc4A.js +2 -0
  157. package/dashboard/dist/assets/{index-D51PaQZY.js.map → index-BMpoMc4A.js.map} +1 -1
  158. package/dashboard/dist/assets/index-BU04qgJt.js +15 -0
  159. package/dashboard/dist/assets/index-BU04qgJt.js.map +1 -0
  160. package/dashboard/dist/assets/index-BUjxYyxc.js +63 -0
  161. package/dashboard/dist/assets/index-BUjxYyxc.js.map +1 -0
  162. package/dashboard/dist/assets/index-BpoHVMV7.js +2 -0
  163. package/dashboard/dist/assets/index-BpoHVMV7.js.map +1 -0
  164. package/dashboard/dist/assets/index-CEnDYJOO.js +2 -0
  165. package/dashboard/dist/assets/index-CEnDYJOO.js.map +1 -0
  166. package/dashboard/dist/assets/index-CbuH92vk.js +6 -0
  167. package/dashboard/dist/assets/index-CbuH92vk.js.map +1 -0
  168. package/dashboard/dist/assets/index-D9_hZmsW.js +5 -0
  169. package/dashboard/dist/assets/{index-KYpLvJKB.js.map → index-D9_hZmsW.js.map} +1 -1
  170. package/dashboard/dist/assets/index-DrouIN-M.js +2 -0
  171. package/dashboard/dist/assets/{index-DR4qQvlW.js.map → index-DrouIN-M.js.map} +1 -1
  172. package/dashboard/dist/assets/index-DzICLMI7.js +2 -0
  173. package/dashboard/dist/assets/{index-DNtXXy1o.js.map → index-DzICLMI7.js.map} +1 -1
  174. package/dashboard/dist/assets/index-efS5gKpv.css +1 -0
  175. package/dashboard/dist/assets/index-qT78AZDq.js +2 -0
  176. package/dashboard/dist/assets/index-qT78AZDq.js.map +1 -0
  177. package/dashboard/dist/assets/mcp-D0GrHRFe.js +2 -0
  178. package/dashboard/dist/assets/{mcp-D2XfRh8v.js.map → mcp-D0GrHRFe.js.map} +1 -1
  179. package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js → mcp-query-DC5woQn5.js} +2 -2
  180. package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js.map → mcp-query-DC5woQn5.js.map} +1 -1
  181. package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js → mcp-runs-CsoVQoPB.js} +2 -2
  182. package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js.map → mcp-runs-CsoVQoPB.js.map} +1 -1
  183. package/dashboard/dist/assets/namespaces-unpIb4gX.js +2 -0
  184. package/dashboard/dist/assets/{namespaces-BwMljx6f.js.map → namespaces-unpIb4gX.js.map} +1 -1
  185. package/dashboard/dist/assets/{roles-Bd_sTV6I.js → roles--kBaFljg.js} +2 -2
  186. package/dashboard/dist/assets/{roles-Bd_sTV6I.js.map → roles--kBaFljg.js.map} +1 -1
  187. package/dashboard/dist/assets/settings-B96YkawY.js +2 -0
  188. package/dashboard/dist/assets/{settings-BCb8eFyA.js.map → settings-B96YkawY.js.map} +1 -1
  189. package/dashboard/dist/assets/{tasks-Bq54qGGq.js → tasks-D_1NCfOZ.js} +2 -2
  190. package/dashboard/dist/assets/{tasks-Bq54qGGq.js.map → tasks-D_1NCfOZ.js.map} +1 -1
  191. package/dashboard/dist/assets/{useEventHooks-BTbGf536.js → useEventHooks-BPjEkCpD.js} +2 -2
  192. package/dashboard/dist/assets/{useEventHooks-BTbGf536.js.map → useEventHooks-BPjEkCpD.js.map} +1 -1
  193. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
  194. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
  195. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
  196. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
  197. package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js → useYamlActivityEvents-D3RQjfzo.js} +2 -2
  198. package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js.map → useYamlActivityEvents-D3RQjfzo.js.map} +1 -1
  199. package/dashboard/dist/assets/{users-BTBhafGc.js → users-e2oatvoj.js} +2 -2
  200. package/dashboard/dist/assets/{users-BTBhafGc.js.map → users-e2oatvoj.js.map} +1 -1
  201. package/dashboard/dist/assets/{vendor-icons-CWl44VA6.js → vendor-icons-BkK55L-1.js} +103 -88
  202. package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +1 -0
  203. package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
  204. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
  205. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
  206. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
  207. package/dashboard/dist/assets/{workflows-BkzA4ahe.js → workflows-D6diL54s.js} +2 -2
  208. package/dashboard/dist/assets/{workflows-BkzA4ahe.js.map → workflows-D6diL54s.js.map} +1 -1
  209. package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js → yaml-workflows-CAKU7LUu.js} +2 -2
  210. package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js.map → yaml-workflows-CAKU7LUu.js.map} +1 -1
  211. package/dashboard/dist/index.html +5 -5
  212. package/docs/dashboard.md +233 -65
  213. package/package.json +3 -2
  214. package/build/examples/external-mcp-server/server.d.ts +0 -17
  215. package/build/examples/external-mcp-server/server.js +0 -116
  216. package/build/examples/index.d.ts +0 -2
  217. package/build/examples/index.js +0 -7
  218. package/build/examples/seed-data.d.ts +0 -55
  219. package/build/examples/seed-data.js +0 -161
  220. package/build/examples/seed.d.ts +0 -5
  221. package/build/examples/seed.js +0 -132
  222. package/build/examples/types/envelopes.d.ts +0 -69
  223. package/build/examples/types/envelopes.js +0 -8
  224. package/build/examples/types/index.d.ts +0 -10
  225. package/build/examples/types/index.js +0 -9
  226. package/build/examples/types/resolvers.d.ts +0 -27
  227. package/build/examples/types/resolvers.js +0 -9
  228. package/build/examples/workers.d.ts +0 -10
  229. package/build/examples/workers.js +0 -59
  230. package/build/examples/workflows/assembly-line/activities.d.ts +0 -28
  231. package/build/examples/workflows/assembly-line/activities.js +0 -53
  232. package/build/examples/workflows/assembly-line/index.d.ts +0 -17
  233. package/build/examples/workflows/assembly-line/index.js +0 -60
  234. package/build/examples/workflows/assembly-line/iterator.d.ts +0 -12
  235. package/build/examples/workflows/assembly-line/iterator.js +0 -54
  236. package/build/examples/workflows/assembly-line/reverter.d.ts +0 -18
  237. package/build/examples/workflows/assembly-line/reverter.js +0 -89
  238. package/build/examples/workflows/assembly-line/types.d.ts +0 -25
  239. package/build/examples/workflows/assembly-line/types.js +0 -8
  240. package/build/examples/workflows/assembly-line/worker.d.ts +0 -13
  241. package/build/examples/workflows/assembly-line/worker.js +0 -81
  242. package/build/examples/workflows/basic-echo/activities.d.ts +0 -20
  243. package/build/examples/workflows/basic-echo/activities.js +0 -55
  244. package/build/examples/workflows/basic-echo/index.d.ts +0 -14
  245. package/build/examples/workflows/basic-echo/index.js +0 -66
  246. package/build/examples/workflows/basic-signal/activities.d.ts +0 -17
  247. package/build/examples/workflows/basic-signal/activities.js +0 -18
  248. package/build/examples/workflows/basic-signal/index.d.ts +0 -17
  249. package/build/examples/workflows/basic-signal/index.js +0 -116
  250. package/build/examples/workflows/kitchen-sink/activities.d.ts +0 -40
  251. package/build/examples/workflows/kitchen-sink/activities.js +0 -46
  252. package/build/examples/workflows/kitchen-sink/index.d.ts +0 -22
  253. package/build/examples/workflows/kitchen-sink/index.js +0 -123
  254. package/build/examples/workflows/review-content/activities.d.ts +0 -10
  255. package/build/examples/workflows/review-content/activities.js +0 -44
  256. package/build/examples/workflows/review-content/index.d.ts +0 -10
  257. package/build/examples/workflows/review-content/index.js +0 -95
  258. package/build/examples/workflows/review-content/types.d.ts +0 -28
  259. package/build/examples/workflows/review-content/types.js +0 -2
  260. package/build/lib/db/schemas/schemas/001_schema.sql +0 -485
  261. package/build/lib/db/schemas/schemas/002_seed.sql +0 -92
  262. package/build/system/seed/server-definitions.d.ts +0 -3210
  263. package/build/system/seed/server-definitions.js +0 -232
  264. package/dashboard/dist/assets/AdminDashboard-Bprul9Eb.js +0 -2
  265. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +0 -2
  266. package/dashboard/dist/assets/BotPicker-DcvILNUf.js +0 -2
  267. package/dashboard/dist/assets/CollapsibleSection-BWPbzgEe.js +0 -2
  268. package/dashboard/dist/assets/ConfirmDeleteModal-Cy6KVLfC.js +0 -2
  269. package/dashboard/dist/assets/CopyableId-CRED8hvk.js +0 -2
  270. package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js +0 -2
  271. package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js.map +0 -1
  272. package/dashboard/dist/assets/CustomDurationPicker-eOk2EqQ5.js +0 -2
  273. package/dashboard/dist/assets/DataTable-bd2PTBJd.js +0 -2
  274. package/dashboard/dist/assets/ElapsedCell-BGo8vyus.js +0 -2
  275. package/dashboard/dist/assets/EmptyState-BygtU-Rh.js +0 -2
  276. package/dashboard/dist/assets/EmptyState-BygtU-Rh.js.map +0 -1
  277. package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js +0 -2
  278. package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js.map +0 -1
  279. package/dashboard/dist/assets/EventTable-CmFhswLW.js +0 -2
  280. package/dashboard/dist/assets/FilterBar-BQNzsd3A.js +0 -2
  281. package/dashboard/dist/assets/ListToolbar-OWOn-HiC.js +0 -2
  282. package/dashboard/dist/assets/McpOverview-OkEzvClD.js +0 -2
  283. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +0 -5
  284. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +0 -1
  285. package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js +0 -2
  286. package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js.map +0 -1
  287. package/dashboard/dist/assets/McpRunDetailPage-DMeiG4i_.js +0 -2
  288. package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js +0 -2
  289. package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js.map +0 -1
  290. package/dashboard/dist/assets/Modal-Dir9Rlnx.js +0 -2
  291. package/dashboard/dist/assets/OperatorDashboard-OqWC6Azy.js +0 -2
  292. package/dashboard/dist/assets/PageHeader-FJIemmrC.js +0 -2
  293. package/dashboard/dist/assets/PageHeader-FJIemmrC.js.map +0 -1
  294. package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js +0 -2
  295. package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js.map +0 -1
  296. package/dashboard/dist/assets/PriorityBadge-C7D5d_HY.js +0 -2
  297. package/dashboard/dist/assets/ProcessDetailPage-DZIP6grw.js +0 -2
  298. package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js +0 -2
  299. package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js.map +0 -1
  300. package/dashboard/dist/assets/RolePill-D6nMxMvp.js +0 -2
  301. package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +0 -2
  302. package/dashboard/dist/assets/RolesPage-CwLnJFhy.js.map +0 -1
  303. package/dashboard/dist/assets/RowActions-JqgAB0p3.js +0 -2
  304. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +0 -2
  305. package/dashboard/dist/assets/StatCard-B-WLhOaH.js +0 -2
  306. package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js +0 -2
  307. package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js.map +0 -1
  308. package/dashboard/dist/assets/StepIndicator-D9Xvdf18.js +0 -2
  309. package/dashboard/dist/assets/StickyPagination-CJHMzYJj.js +0 -2
  310. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +0 -2
  311. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +0 -1
  312. package/dashboard/dist/assets/TagInput-DcPnUnSJ.js +0 -2
  313. package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js +0 -2
  314. package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js.map +0 -1
  315. package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js +0 -2
  316. package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js.map +0 -1
  317. package/dashboard/dist/assets/TasksListPage-DeewV4Gp.js +0 -2
  318. package/dashboard/dist/assets/TimeAgo-DJZq-e4R.js +0 -2
  319. package/dashboard/dist/assets/TimestampCell-Dx5uwGfS.js +0 -2
  320. package/dashboard/dist/assets/UserName-CnGk7MgL.js +0 -2
  321. package/dashboard/dist/assets/WorkflowExecutionPage-CPQ0fIwf.js +0 -2
  322. package/dashboard/dist/assets/WorkflowPill-BrD5d1AG.js +0 -2
  323. package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js +0 -2
  324. package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js.map +0 -1
  325. package/dashboard/dist/assets/WorkflowsOverview-lBp2E6rN.js +0 -2
  326. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +0 -2
  327. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +0 -1
  328. package/dashboard/dist/assets/escalation-BYhLYHBz.js +0 -2
  329. package/dashboard/dist/assets/escalation-columns-DjJyuC1g.js +0 -2
  330. package/dashboard/dist/assets/helpers-CQG3Rh2y.js +0 -2
  331. package/dashboard/dist/assets/index-2nBhR7Dg.js +0 -2
  332. package/dashboard/dist/assets/index-2nBhR7Dg.js.map +0 -1
  333. package/dashboard/dist/assets/index-4IUoh_hd.js +0 -2
  334. package/dashboard/dist/assets/index-4IUoh_hd.js.map +0 -1
  335. package/dashboard/dist/assets/index-B2CqPzLK.js +0 -2
  336. package/dashboard/dist/assets/index-B2CqPzLK.js.map +0 -1
  337. package/dashboard/dist/assets/index-B78xalb4.js +0 -2
  338. package/dashboard/dist/assets/index-B78xalb4.js.map +0 -1
  339. package/dashboard/dist/assets/index-BI8r69O_.js +0 -2
  340. package/dashboard/dist/assets/index-BI8r69O_.js.map +0 -1
  341. package/dashboard/dist/assets/index-C5TUqJu0.css +0 -1
  342. package/dashboard/dist/assets/index-CUqCBBZG.js +0 -6
  343. package/dashboard/dist/assets/index-CUqCBBZG.js.map +0 -1
  344. package/dashboard/dist/assets/index-D51PaQZY.js +0 -2
  345. package/dashboard/dist/assets/index-DNtXXy1o.js +0 -2
  346. package/dashboard/dist/assets/index-DR4qQvlW.js +0 -2
  347. package/dashboard/dist/assets/index-Dh0PCbR-.js +0 -15
  348. package/dashboard/dist/assets/index-Dh0PCbR-.js.map +0 -1
  349. package/dashboard/dist/assets/index-KYpLvJKB.js +0 -5
  350. package/dashboard/dist/assets/index-sNrqYt0Q.js +0 -281
  351. package/dashboard/dist/assets/index-sNrqYt0Q.js.map +0 -1
  352. package/dashboard/dist/assets/mcp-D2XfRh8v.js +0 -2
  353. package/dashboard/dist/assets/namespaces-BwMljx6f.js +0 -2
  354. package/dashboard/dist/assets/settings-BCb8eFyA.js +0 -2
  355. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +0 -1
  356. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
  357. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
  358. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
  359. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
@@ -1,17 +0,0 @@
1
- /**
2
- * Example External MCP Server
3
- *
4
- * Demonstrates how an external MCP server authenticates to Long Tail,
5
- * receives delegation tokens via tool args, and fetches user-scoped
6
- * OAuth credentials through the delegation API.
7
- *
8
- * This server exposes an SSE-based MCP interface with one tool:
9
- * fetch_external_data — simulates fetching data from an external API
10
- * using the user's OAuth credentials.
11
- *
12
- * Environment:
13
- * LT_API_URL — Long Tail API base URL (e.g., http://long-tail:3000)
14
- * LT_SERVICE_TOKEN — Service token for authenticating back to Long Tail
15
- * PORT — Port to listen on (default: 9090)
16
- */
17
- export {};
@@ -1,116 +0,0 @@
1
- "use strict";
2
- /**
3
- * Example External MCP Server
4
- *
5
- * Demonstrates how an external MCP server authenticates to Long Tail,
6
- * receives delegation tokens via tool args, and fetches user-scoped
7
- * OAuth credentials through the delegation API.
8
- *
9
- * This server exposes an SSE-based MCP interface with one tool:
10
- * fetch_external_data — simulates fetching data from an external API
11
- * using the user's OAuth credentials.
12
- *
13
- * Environment:
14
- * LT_API_URL — Long Tail API base URL (e.g., http://long-tail:3000)
15
- * LT_SERVICE_TOKEN — Service token for authenticating back to Long Tail
16
- * PORT — Port to listen on (default: 9090)
17
- */
18
- var __importDefault = (this && this.__importDefault) || function (mod) {
19
- return (mod && mod.__esModule) ? mod : { "default": mod };
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- const express_1 = __importDefault(require("express"));
23
- const app = (0, express_1.default)();
24
- app.use(express_1.default.json());
25
- const PORT = parseInt(process.env.PORT || '9090', 10);
26
- const LT_API_URL = process.env.LT_API_URL || 'http://localhost:3000';
27
- const LT_SERVICE_TOKEN = process.env.LT_SERVICE_TOKEN || '';
28
- /**
29
- * Validate a delegation token against Long Tail.
30
- */
31
- async function validateDelegation(token) {
32
- const res = await fetch(`${LT_API_URL}/api/delegation/validate`, {
33
- method: 'POST',
34
- headers: {
35
- 'Content-Type': 'application/json',
36
- Authorization: `Bearer ${LT_SERVICE_TOKEN}`,
37
- },
38
- body: JSON.stringify({ token }),
39
- });
40
- return res.json();
41
- }
42
- /**
43
- * Get a user's OAuth access token via the delegation API.
44
- */
45
- async function getUserOAuthToken(delegationToken, provider) {
46
- const res = await fetch(`${LT_API_URL}/api/delegation/oauth/${provider}/token`, {
47
- headers: { Authorization: `Bearer ${delegationToken}` },
48
- });
49
- if (!res.ok) {
50
- const err = await res.json();
51
- throw new Error(err.error || `Failed to get OAuth token: ${res.status}`);
52
- }
53
- return res.json();
54
- }
55
- // ── MCP Tool: fetch_external_data ────────────────────────────────────────────
56
- /**
57
- * Simulates an external MCP tool that needs user-scoped credentials.
58
- *
59
- * In a real server, this would:
60
- * 1. Extract the delegation token from _auth.token
61
- * 2. Call the delegation API to get a fresh OAuth access token
62
- * 3. Use that token to call an external API (Google Calendar, GitHub, etc.)
63
- * 4. Return the results
64
- */
65
- app.post('/tools/fetch_external_data', async (req, res) => {
66
- const { provider, query, _auth } = req.body;
67
- if (!_auth?.token) {
68
- res.status(400).json({
69
- error: 'No delegation token provided. This tool requires user authorization.',
70
- });
71
- return;
72
- }
73
- try {
74
- // 1. Validate the delegation token
75
- const validation = await validateDelegation(_auth.token);
76
- if (!validation.valid) {
77
- res.status(403).json({ error: `Invalid delegation: ${validation.error}` });
78
- return;
79
- }
80
- // 2. Get the user's OAuth token for the requested provider
81
- const oauth = await getUserOAuthToken(_auth.token, provider || 'google');
82
- // 3. Simulate calling an external API with the OAuth token
83
- // In production, this would be a real API call like:
84
- // const data = await fetch('https://api.example.com/data', {
85
- // headers: { Authorization: `Bearer ${oauth.access_token}` }
86
- // });
87
- res.json({
88
- success: true,
89
- userId: validation.userId,
90
- provider: provider || 'google',
91
- query,
92
- result: {
93
- message: `Successfully fetched data for user ${validation.userId} using ${provider || 'google'} OAuth token`,
94
- token_preview: `${oauth.access_token.slice(0, 10)}...`,
95
- expires_at: oauth.expires_at,
96
- },
97
- });
98
- }
99
- catch (err) {
100
- res.status(500).json({ error: err.message });
101
- }
102
- });
103
- // ── Health check ─────────────────────────────────────────────────────────────
104
- app.get('/health', (_req, res) => {
105
- res.json({
106
- status: 'ok',
107
- service: 'external-mcp-server',
108
- lt_api: LT_API_URL,
109
- has_service_token: !!LT_SERVICE_TOKEN,
110
- });
111
- });
112
- app.listen(PORT, () => {
113
- console.log(`[external-mcp] listening on :${PORT}`);
114
- console.log(`[external-mcp] Long Tail API: ${LT_API_URL}`);
115
- console.log(`[external-mcp] Service token: ${LT_SERVICE_TOKEN ? 'configured' : 'NOT SET'}`);
116
- });
@@ -1,2 +0,0 @@
1
- export { exampleWorkers } from './workers';
2
- export { seedExamples } from './seed';
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.seedExamples = exports.exampleWorkers = void 0;
4
- var workers_1 = require("./workers");
5
- Object.defineProperty(exports, "exampleWorkers", { enumerable: true, get: function () { return workers_1.exampleWorkers; } });
6
- var seed_1 = require("./seed");
7
- Object.defineProperty(exports, "seedExamples", { enumerable: true, get: function () { return seed_1.seedExamples; } });
@@ -1,55 +0,0 @@
1
- import type { LTEnvelope } from '../types';
2
- export declare const SEED_USERS: ({
3
- external_id: string;
4
- display_name: string;
5
- email: string;
6
- password: string;
7
- roles: {
8
- role: string;
9
- type: "superadmin";
10
- }[];
11
- oauth_provider?: undefined;
12
- oauth_provider_id?: undefined;
13
- } | {
14
- external_id: string;
15
- display_name: string;
16
- email: string;
17
- password: string;
18
- roles: {
19
- role: string;
20
- type: "admin";
21
- }[];
22
- oauth_provider?: undefined;
23
- oauth_provider_id?: undefined;
24
- } | {
25
- external_id: string;
26
- display_name: string;
27
- email: string;
28
- password: string;
29
- roles: {
30
- role: string;
31
- type: "member";
32
- }[];
33
- oauth_provider?: undefined;
34
- oauth_provider_id?: undefined;
35
- } | {
36
- external_id: string;
37
- display_name: string;
38
- email: string;
39
- password: string;
40
- oauth_provider: string;
41
- oauth_provider_id: string;
42
- roles: {
43
- role: string;
44
- type: "superadmin";
45
- }[];
46
- })[];
47
- export declare const SEED_ROLES: string[];
48
- export type SeedWorkflowName = 'reviewContent' | 'kitchenSink' | 'basicEcho' | 'basicSignal';
49
- export declare const SEED_ENVELOPES: Array<{
50
- workflowName: SeedWorkflowName;
51
- taskQueue: string;
52
- envelope: LTEnvelope;
53
- label: string;
54
- }>;
55
- export declare const SEED_CHAINS: string[][];
@@ -1,161 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SEED_CHAINS = exports.SEED_ENVELOPES = exports.SEED_ROLES = exports.SEED_USERS = void 0;
4
- // ── Seed users ───────────────────────────────────────────────────────────────
5
- exports.SEED_USERS = [
6
- {
7
- external_id: 'superadmin',
8
- display_name: 'Super Admin',
9
- email: 'admin@longtail.local',
10
- password: 'l0ngt@1l',
11
- roles: [{ role: 'superadmin', type: 'superadmin' }],
12
- },
13
- {
14
- external_id: 'admin',
15
- display_name: 'Admin User',
16
- email: 'admin-user@longtail.local',
17
- password: 'l0ngt@1l',
18
- roles: [{ role: 'admin', type: 'admin' }],
19
- },
20
- {
21
- external_id: 'engineer',
22
- display_name: 'Engineer User',
23
- email: 'engineer@longtail.local',
24
- password: 'l0ngt@1l',
25
- roles: [{ role: 'engineer', type: 'member' }],
26
- },
27
- {
28
- external_id: 'reviewer',
29
- display_name: 'Reviewer User',
30
- email: 'reviewer@longtail.local',
31
- password: 'l0ngt@1l',
32
- roles: [{ role: 'reviewer', type: 'member' }],
33
- },
34
- {
35
- external_id: 'mock:test-user-1',
36
- display_name: 'Alice Test',
37
- email: 'alice@test.local',
38
- password: 'l0ngt@1l',
39
- oauth_provider: 'mock',
40
- oauth_provider_id: 'test-user-1',
41
- roles: [{ role: 'superadmin', type: 'superadmin' }],
42
- },
43
- ];
44
- exports.SEED_ROLES = ['reviewer', 'engineer', 'admin', 'superadmin'];
45
- exports.SEED_ENVELOPES = [
46
- // -- Process 1: Clean Review
47
- {
48
- label: 'Process 1 — Clean Review',
49
- workflowName: 'reviewContent',
50
- taskQueue: 'long-tail-examples',
51
- envelope: {
52
- data: {
53
- contentId: 'process-clean-001',
54
- content: 'This is a well-researched article about renewable energy solutions for urban environments. It covers solar panels, wind turbines, and energy storage with thorough citations and balanced analysis.',
55
- contentType: 'article',
56
- },
57
- metadata: {
58
- source: 'seed',
59
- process: 'clean-review',
60
- description: 'Happy path — AI auto-approves high-quality content',
61
- },
62
- },
63
- },
64
- // -- Process 2: Flagged for Review
65
- {
66
- label: 'Process 2 — Flagged for Review',
67
- workflowName: 'reviewContent',
68
- taskQueue: 'long-tail-examples',
69
- envelope: {
70
- data: {
71
- contentId: 'process-flagged-001',
72
- content: 'REVIEW_ME This user-submitted blog post discusses alternative medicine claims without citing peer-reviewed sources. The AI flagged it for human review.',
73
- contentType: 'blog_post',
74
- },
75
- metadata: {
76
- source: 'seed',
77
- process: 'flagged-review',
78
- description: 'AI flags content for human review. Log in as reviewer (reviewer/l0ngt@1l) and approve or reject.',
79
- },
80
- },
81
- },
82
- // -- Process 3: Wrong Language -> Durable MCP
83
- {
84
- label: 'Process 3 — Wrong Language',
85
- workflowName: 'reviewContent',
86
- taskQueue: 'long-tail-examples',
87
- envelope: {
88
- data: {
89
- contentId: 'process-language-001',
90
- content: 'WRONG_LANGUAGE La energía renovable es el futuro de las ciudades sostenibles. Los paneles solares y las turbinas eólicas pueden reducir significativamente la huella de carbono urbana cuando se combinan con sistemas modernos de almacenamiento de energía.',
91
- contentType: 'article',
92
- },
93
- metadata: {
94
- source: 'seed',
95
- process: 'wrong-language',
96
- description: 'Content arrived in the wrong language. Walk the escalation chain: reviewer → admin → engineer. As engineer, check "Request AI Triage" and describe: "Content is in Spanish, needs translation to English."',
97
- },
98
- },
99
- },
100
- // -- Process 4: Kitchen Sink -> Dynamic Triage
101
- {
102
- label: 'Process 4 — Dynamic Triage',
103
- workflowName: 'kitchenSink',
104
- taskQueue: 'long-tail-examples',
105
- envelope: {
106
- data: {
107
- name: 'Triage Demo',
108
- mode: 'full',
109
- },
110
- metadata: {
111
- source: 'seed',
112
- process: 'dynamic-triage',
113
- description: 'As reviewer, check "Request AI Triage" and write: "This looks fine, just approve it."',
114
- },
115
- },
116
- },
117
- // -- Process 5: Basic Echo
118
- {
119
- label: 'Process 5 — Basic Echo',
120
- workflowName: 'basicEcho',
121
- taskQueue: 'long-tail-examples',
122
- envelope: {
123
- data: {
124
- message: 'Hello from the seed!',
125
- sleepSeconds: 2,
126
- },
127
- metadata: {
128
- source: 'seed',
129
- process: 'basic-echo',
130
- description: 'Minimal durable workflow — echoes a message and reveals IAM context.',
131
- },
132
- },
133
- },
134
- // -- Process 6: Basic Signal
135
- {
136
- label: 'Process 6 — Basic Signal',
137
- workflowName: 'basicSignal',
138
- taskQueue: 'long-tail-examples',
139
- envelope: {
140
- data: {
141
- message: 'Seed deployment needs approval before proceeding.',
142
- role: 'reviewer',
143
- },
144
- metadata: {
145
- certified: false,
146
- source: 'seed',
147
- process: 'basic-signal',
148
- description: 'Lightweight signal-based escalation — workflow stays running, no interceptor. Claim the escalation, fill the form, and resolve to resume the workflow.',
149
- },
150
- },
151
- },
152
- ];
153
- // Escalation chains: reviewer -> admin -> engineer (and cross-links)
154
- exports.SEED_CHAINS = [
155
- ['reviewer', 'admin'],
156
- ['reviewer', 'engineer'],
157
- ['admin', 'engineer'],
158
- ['admin', 'superadmin'],
159
- ['engineer', 'admin'],
160
- ['engineer', 'superadmin'],
161
- ];
@@ -1,5 +0,0 @@
1
- /**
2
- * Seed example workflows so the dashboard tells a story immediately.
3
- * Called automatically when `examples: true` is set in the start config.
4
- */
5
- export declare function seedExamples(client: any): Promise<void>;
@@ -1,132 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.seedExamples = seedExamples;
4
- const hotmesh_1 = require("@hotmeshio/hotmesh");
5
- const defaults_1 = require("../modules/defaults");
6
- const logger_1 = require("../lib/logger");
7
- const db_1 = require("../lib/db");
8
- const user_1 = require("../services/user");
9
- const roles_1 = require("../services/user/roles");
10
- const role_1 = require("../services/role");
11
- const seed_data_1 = require("./seed-data");
12
- // ── Seed functions ───────────────────────────────────────────────────────────
13
- async function seedRoles() {
14
- for (const role of seed_data_1.SEED_ROLES) {
15
- try {
16
- await (0, role_1.createRole)(role);
17
- }
18
- catch { /* ON CONFLICT DO NOTHING handles duplicates */ }
19
- }
20
- logger_1.loggerRegistry.info(`[examples] roles verified (${seed_data_1.SEED_ROLES.join(', ')})`);
21
- }
22
- async function seedUsers() {
23
- for (const userDef of seed_data_1.SEED_USERS) {
24
- try {
25
- const existing = await (0, user_1.getUserByExternalId)(userDef.external_id);
26
- if (existing) {
27
- // Ensure existing user has the expected roles
28
- if (userDef.roles?.length) {
29
- const currentRoles = await (0, roles_1.getUserRoles)(existing.id);
30
- for (const expected of userDef.roles) {
31
- const has = currentRoles.some(r => r.role === expected.role && r.type === expected.type);
32
- if (!has) {
33
- await (0, roles_1.addUserRole)(existing.id, expected.role, expected.type);
34
- logger_1.loggerRegistry.info(`[examples] added role ${expected.role} (${expected.type}) to ${userDef.external_id}`);
35
- }
36
- }
37
- }
38
- logger_1.loggerRegistry.info(`[examples] ${userDef.external_id} already exists, skipping`);
39
- continue;
40
- }
41
- await (0, user_1.createUser)(userDef);
42
- logger_1.loggerRegistry.info(`[examples] seeded user (${userDef.external_id} / ${userDef.password})`);
43
- }
44
- catch (err) {
45
- logger_1.loggerRegistry.warn(`[examples] failed to seed ${userDef.external_id}: ${err.message}`);
46
- }
47
- }
48
- }
49
- async function seedEscalationChains() {
50
- for (const [source, target] of seed_data_1.SEED_CHAINS) {
51
- try {
52
- await (0, role_1.addEscalationChain)(source, target);
53
- }
54
- catch { /* ON CONFLICT DO NOTHING handles duplicates */ }
55
- }
56
- logger_1.loggerRegistry.info(`[examples] escalation chains verified (${seed_data_1.SEED_CHAINS.length} entries)`);
57
- }
58
- /**
59
- * Seed example workflow configs into lt_config_workflows.
60
- * Previously done by 002_seed.sql (which ran unconditionally).
61
- * Now only runs when examples: true.
62
- */
63
- async function seedExampleConfigs() {
64
- const pool = (0, db_1.getPool)();
65
- await pool.query(`
66
- INSERT INTO lt_config_workflows
67
- (workflow_type, task_queue, default_role, invocable, description, tool_tags, envelope_schema, resolver_schema)
68
- VALUES
69
- ('reviewContent', 'long-tail-examples', 'reviewer', true,
70
- 'Content review — AI-powered moderation with human escalation for low-confidence results',
71
- ARRAY['document-processing', 'vision', 'ocr', 'translation'],
72
- '{"data": {"contentId": "article-001", "content": "Content to review...", "contentType": "article"}, "metadata": {"source": "dashboard"}}'::jsonb,
73
- '{"approved": true, "analysis": {"confidence": 0.95, "flags": [], "summary": "Manually reviewed and approved."}}'::jsonb),
74
- ('verifyDocument', 'long-tail-examples', 'reviewer', true,
75
- 'Document verification — AI Vision analyzes identity documents',
76
- ARRAY['document-processing', 'vision', 'ocr', 'translation'],
77
- '{"data": {"documentId": "doc-001", "documentUrl": "https://example.com/doc.jpg", "documentType": "drivers_license", "memberId": "member-12345"}, "metadata": {"source": "dashboard"}}'::jsonb,
78
- '{"memberId": "", "extractedInfo": {}, "validationResult": "match", "confidence": 1.0}'::jsonb),
79
- ('processClaim', 'long-tail-examples', 'reviewer', true,
80
- 'Insurance claim processing — document analysis, validation, and human review',
81
- ARRAY['document-processing', 'vision', 'database', 'query'],
82
- '{"data": {"claimId": "CLM-2024-001", "claimantId": "POL-5551234", "claimType": "auto_collision", "amount": 12500, "documents": ["incident_report.pdf", "photo_evidence.jpg"]}, "metadata": {"source": "dashboard"}}'::jsonb,
83
- '{"approved": true, "analysis": {"confidence": 0.92, "flags": [], "summary": "Documents reviewed and verified."}, "status": "resolved"}'::jsonb),
84
- ('kitchenSink', 'long-tail-examples', 'reviewer', true,
85
- 'Kitchen sink — demonstrates sleep, signals, parallel activities, escalation, and every durable primitive',
86
- '{}',
87
- '{"data": {"name": "World", "mode": "full"}, "metadata": {"source": "dashboard"}}'::jsonb,
88
- NULL),
89
- ('basicSignal', 'long-tail-examples', 'reviewer', true,
90
- 'Signal-based escalation — workflow stays running while waiting for human input via conditionLT',
91
- '{}',
92
- '{"data": {"message": "Deployment approval needed for v2.1.0", "role": "reviewer"}, "metadata": {"certified": false, "source": "dashboard"}}'::jsonb,
93
- '{"properties": {"approved": {"type": "boolean", "default": false, "description": "Approve this deployment?"}, "notes": {"type": "string", "default": "", "description": "Reviewer notes — visible to the workflow author"}}}'::jsonb)
94
- ON CONFLICT (workflow_type) DO NOTHING
95
- `);
96
- // Assign roles to example workflows
97
- await pool.query(`
98
- INSERT INTO lt_config_roles (workflow_type, role)
99
- SELECT workflow_type, unnest(ARRAY['reviewer', 'engineer', 'admin'])
100
- FROM lt_config_workflows
101
- WHERE workflow_type IN ('reviewContent', 'verifyDocument', 'processClaim', 'kitchenSink')
102
- ON CONFLICT (workflow_type, role) DO NOTHING
103
- `);
104
- logger_1.loggerRegistry.info('[examples] workflow configs seeded');
105
- }
106
- /**
107
- * Seed example workflows so the dashboard tells a story immediately.
108
- * Called automatically when `examples: true` is set in the start config.
109
- */
110
- async function seedExamples(client) {
111
- await seedExampleConfigs();
112
- await seedRoles();
113
- await seedUsers();
114
- await seedEscalationChains();
115
- for (const { workflowName, taskQueue, envelope, label } of seed_data_1.SEED_ENVELOPES) {
116
- try {
117
- const workflowId = `${workflowName}-seed-${hotmesh_1.Durable.guid().slice(0, 8)}`;
118
- await client.workflow.start({
119
- args: [envelope],
120
- taskQueue,
121
- workflowName,
122
- workflowId,
123
- expire: defaults_1.JOB_EXPIRE_SECS,
124
- entity: workflowName,
125
- });
126
- logger_1.loggerRegistry.info(`[examples] seeded: ${label} (${workflowId})`);
127
- }
128
- catch (err) {
129
- logger_1.loggerRegistry.warn(`[examples] seed failed for ${label}: ${err.message}`);
130
- }
131
- }
132
- }
@@ -1,69 +0,0 @@
1
- /**
2
- * Typed envelope data shapes for each invocable workflow.
3
- *
4
- * These define the API contract — what the Start Workflow page
5
- * and REST callers send as `envelope.data` when invoking a workflow.
6
- */
7
- /** Content to review — article, comment, or other text submission. */
8
- export interface ReviewContentEnvelopeData {
9
- contentId: string;
10
- content: string;
11
- contentType?: string;
12
- }
13
- /** Kitchen sink — showcases every Durable primitive. */
14
- export interface KitchenSinkEnvelopeData {
15
- /** Name used in the greeting activity. */
16
- name?: string;
17
- /** 'full' pauses for human review; 'quick' auto-completes. */
18
- mode?: 'full' | 'quick';
19
- }
20
- /** Basic echo — minimal durable workflow with IAM context. */
21
- export interface BasicEchoEnvelopeData {
22
- /** Message to echo back. */
23
- message?: string;
24
- /** Duration to sleep before echoing (seconds). */
25
- sleepSeconds?: number;
26
- }
27
- /** Basic signal — lightweight escalation via conditionLT. */
28
- export interface BasicSignalEnvelopeData {
29
- /** Message shown to the reviewer in the escalation description. */
30
- message?: string;
31
- /** Role to assign the escalation to. */
32
- role?: string;
33
- }
34
- /** Assembly line — durable orchestrator with sequential human task queues. */
35
- export interface AssemblyLineEnvelopeData {
36
- /** Product name for the assembly run. */
37
- productName: string;
38
- /** Ordered stations the product passes through. */
39
- stations: Array<{
40
- stationName: string;
41
- role: string;
42
- instructions: string;
43
- }>;
44
- }
45
- /** Step iterator — generic loop over data-driven steps with human escalations. */
46
- export interface StepIteratorEnvelopeData {
47
- /** Display name for this run. */
48
- name: string;
49
- /** Dynamic list of steps — each spawns a child workflow with an escalation. */
50
- steps: Array<{
51
- stationName: string;
52
- role: string;
53
- instructions: string;
54
- }>;
55
- }
56
- /** Reverter — step loop with revert support (same shape as stepIterator). */
57
- export type ReverterEnvelopeData = StepIteratorEnvelopeData;
58
- /** Map of invocable workflow type → its typed envelope data shape. */
59
- export type WorkflowEnvelopeMap = {
60
- reviewContent: ReviewContentEnvelopeData;
61
- kitchenSink: KitchenSinkEnvelopeData;
62
- basicEcho: BasicEchoEnvelopeData;
63
- basicSignal: BasicSignalEnvelopeData;
64
- assemblyLine: AssemblyLineEnvelopeData;
65
- stepIterator: StepIteratorEnvelopeData;
66
- reverter: ReverterEnvelopeData;
67
- };
68
- /** All invocable workflow type names. */
69
- export type InvocableWorkflowType = keyof WorkflowEnvelopeMap;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- /**
3
- * Typed envelope data shapes for each invocable workflow.
4
- *
5
- * These define the API contract — what the Start Workflow page
6
- * and REST callers send as `envelope.data` when invoking a workflow.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +0,0 @@
1
- /**
2
- * Shared types for the Long Tail example workflows.
3
- *
4
- * Envelope types define the API contract for starting workflows.
5
- * Resolver types define the payload shape for resolving escalations.
6
- * Per-workflow types are re-exported for convenience.
7
- */
8
- export type { ReviewContentEnvelopeData, KitchenSinkEnvelopeData, BasicEchoEnvelopeData, BasicSignalEnvelopeData, AssemblyLineEnvelopeData, StepIteratorEnvelopeData, ReverterEnvelopeData, WorkflowEnvelopeMap, InvocableWorkflowType, } from './envelopes';
9
- export type { ResolverLTBlock, BaseResolverPayload, ReviewContentResolverPayload, } from './resolvers';
10
- export type { ReviewContentInput, ReviewAnalysis, ReviewContentReturnData, ReviewContentReturn, ReviewContentEscalationData, ReviewContentEscalation, } from '../workflows/review-content/types';
@@ -1,9 +0,0 @@
1
- "use strict";
2
- /**
3
- * Shared types for the Long Tail example workflows.
4
- *
5
- * Envelope types define the API contract for starting workflows.
6
- * Resolver types define the payload shape for resolving escalations.
7
- * Per-workflow types are re-exported for convenience.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,27 +0,0 @@
1
- /**
2
- * Typed resolver payloads — what the operator sends when resolving
3
- * an escalation via POST /api/escalations/:id/resolve.
4
- *
5
- * Every resolver payload may include an `_lt` block for routing
6
- * control (e.g., flagging that the escalation needs AI triage).
7
- */
8
- /** Control block available on all resolver payloads. */
9
- export interface ResolverLTBlock {
10
- /** Flag for AI triage — routes to the mcpTriage orchestrator. */
11
- needsTriage?: boolean;
12
- }
13
- /** Base resolver payload — all resolvers may include _lt and notes. */
14
- export interface BaseResolverPayload {
15
- _lt?: ResolverLTBlock;
16
- /** Human description of the problem — the LLM uses this for diagnosis. */
17
- notes?: string;
18
- }
19
- /** Resolver payload when a reviewer resolves a content escalation. */
20
- export interface ReviewContentResolverPayload extends BaseResolverPayload {
21
- approved: boolean;
22
- analysis?: {
23
- confidence: number;
24
- flags: string[];
25
- summary: string;
26
- };
27
- }
@@ -1,9 +0,0 @@
1
- "use strict";
2
- /**
3
- * Typed resolver payloads — what the operator sends when resolving
4
- * an escalation via POST /api/escalations/:id/resolve.
5
- *
6
- * Every resolver payload may include an `_lt` block for routing
7
- * control (e.g., flagging that the escalation needs AI triage).
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +0,0 @@
1
- import * as kitchenSinkWorkflow from './workflows/kitchen-sink';
2
- /**
3
- * Example workers that ship with Long Tail.
4
- * Pass these to `start({ workers: [...exampleWorkers] })` or enable
5
- * via `examples: true` in the start config.
6
- */
7
- export declare const exampleWorkers: {
8
- taskQueue: string;
9
- workflow: typeof kitchenSinkWorkflow.kitchenSink;
10
- }[];