@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
@@ -9,7 +9,10 @@ exports.updateMcpServerStatus = updateMcpServerStatus;
9
9
  exports.listMcpServers = listMcpServers;
10
10
  exports.getAutoConnectServers = getAutoConnectServers;
11
11
  exports.findServersByTags = findServersByTags;
12
+ exports.seedMcpServer = seedMcpServer;
13
+ exports.cleanStaleBuiltinServers = cleanStaleBuiltinServers;
12
14
  const db_1 = require("../../lib/db");
15
+ const logger_1 = require("../../lib/logger");
13
16
  const sql_1 = require("./sql");
14
17
  async function createMcpServer(input) {
15
18
  const pool = (0, db_1.getPool)();
@@ -149,3 +152,50 @@ async function findServersByTags(tags, match = 'any') {
149
152
  const { rows } = await pool.query(`SELECT * FROM lt_mcp_servers WHERE tags ${operator} $1::text[] ORDER BY name`, [tags]);
150
153
  return rows;
151
154
  }
155
+ /**
156
+ * Seed an MCP server at startup (insert-if-absent).
157
+ * DB is the source of truth — if the row already exists, log drift warnings
158
+ * but do not overwrite. Returns true if inserted, false if already existed.
159
+ */
160
+ async function seedMcpServer(input) {
161
+ const pool = (0, db_1.getPool)();
162
+ const { rowCount } = await pool.query(sql_1.SEED_MCP_SERVER, [
163
+ input.name,
164
+ input.description || null,
165
+ 'stdio',
166
+ JSON.stringify({ builtin: true, process: 'in-memory' }),
167
+ JSON.stringify(input.toolManifest || []),
168
+ JSON.stringify({ builtin: true }),
169
+ input.tags || [],
170
+ input.compileHints || null,
171
+ input.credentialProviders || [],
172
+ ]);
173
+ const inserted = (rowCount ?? 0) > 0;
174
+ if (!inserted) {
175
+ // Drift detection
176
+ const existing = await getMcpServerByName(input.name);
177
+ if (existing) {
178
+ const drifts = [];
179
+ if (input.description && existing.description !== input.description)
180
+ drifts.push('description');
181
+ if (input.compileHints && existing.compile_hints !== input.compileHints)
182
+ drifts.push('compile_hints');
183
+ if (JSON.stringify(input.tags || []) !== JSON.stringify(existing.tags || []))
184
+ drifts.push('tags');
185
+ if (drifts.length) {
186
+ logger_1.loggerRegistry.warn(`[long-tail] MCP server drift: ${input.name} — ${drifts.join(', ')} differ between code and DB`);
187
+ }
188
+ }
189
+ }
190
+ return inserted;
191
+ }
192
+ /**
193
+ * Remove builtin MCP servers that are no longer declared in factory config.
194
+ */
195
+ async function cleanStaleBuiltinServers(activeNames) {
196
+ const pool = (0, db_1.getPool)();
197
+ const { rows } = await pool.query(sql_1.DELETE_STALE_BUILTIN_SERVERS, [activeNames]);
198
+ for (const row of rows) {
199
+ logger_1.loggerRegistry.info(`[long-tail] removed stale builtin MCP server: ${row.name}`);
200
+ }
201
+ }
@@ -15,4 +15,7 @@ export declare const HEALTH_COMPILED_WORKFLOWS = "\n SELECT\n COUNT(*)::int
15
15
  export declare const HEALTH_WORKFLOW_CONFIGS = "\n SELECT workflow_type, task_queue, description\n FROM lt_config_workflows ORDER BY workflow_type";
16
16
  export declare const HEALTH_DURABLE_WORKFLOWS = "\n SELECT\n COALESCE(entity, '_internal') AS entity,\n COUNT(*)::int AS total,\n COUNT(*) FILTER (WHERE status = 0)::int AS active,\n COUNT(*) FILTER (WHERE status = 1)::int AS completed\n FROM durable.jobs\n WHERE entity IS NOT NULL AND entity != ''\n GROUP BY entity\n ORDER BY entity";
17
17
  export declare const DELETE_STALE_BUILTIN_SERVERS = "\n DELETE FROM lt_mcp_servers\n WHERE (metadata->>'builtin')::boolean = true\n AND name != ALL($1)\n RETURNING name";
18
- export declare const SEED_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)\n VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())\n ON CONFLICT (name) DO UPDATE SET\n tool_manifest = EXCLUDED.tool_manifest,\n metadata = EXCLUDED.metadata,\n description = EXCLUDED.description,\n tags = EXCLUDED.tags,\n compile_hints = EXCLUDED.compile_hints,\n credential_providers = EXCLUDED.credential_providers,\n status = 'connected',\n last_connected_at = NOW()";
18
+ /** Upsert used by dashboard/API writes (overwrites intentionally). */
19
+ export declare const UPSERT_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)\n VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())\n ON CONFLICT (name) DO UPDATE SET\n tool_manifest = EXCLUDED.tool_manifest,\n metadata = EXCLUDED.metadata,\n description = EXCLUDED.description,\n tags = EXCLUDED.tags,\n compile_hints = EXCLUDED.compile_hints,\n credential_providers = EXCLUDED.credential_providers,\n status = 'connected',\n last_connected_at = NOW()";
20
+ /** Seed — insert-if-absent. DB is source of truth after first boot. */
21
+ export declare const SEED_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)\n VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())\n ON CONFLICT (name) DO NOTHING";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // ─── MCP server CRUD ────────────────────────────────────────────────────────
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.SEED_MCP_SERVER = exports.DELETE_STALE_BUILTIN_SERVERS = exports.HEALTH_DURABLE_WORKFLOWS = exports.HEALTH_WORKFLOW_CONFIGS = exports.HEALTH_COMPILED_WORKFLOWS = exports.HEALTH_MCP_SERVER_LIST = exports.HEALTH_MCP_SERVERS = exports.HEALTH_RECENT_ACTIVITY = exports.HEALTH_ACTIVE_WORKFLOW_TYPES = exports.HEALTH_ESCALATION_COUNTS = exports.HEALTH_TASK_COUNTS = exports.GET_AUTO_CONNECT_SERVERS = exports.UPDATE_STATUS = exports.UPDATE_STATUS_CONNECTED = exports.DELETE_MCP_SERVER = exports.GET_MCP_SERVER_BY_NAME = exports.GET_MCP_SERVER = exports.CREATE_MCP_SERVER = void 0;
4
+ exports.SEED_MCP_SERVER = exports.UPSERT_MCP_SERVER = exports.DELETE_STALE_BUILTIN_SERVERS = exports.HEALTH_DURABLE_WORKFLOWS = exports.HEALTH_WORKFLOW_CONFIGS = exports.HEALTH_COMPILED_WORKFLOWS = exports.HEALTH_MCP_SERVER_LIST = exports.HEALTH_MCP_SERVERS = exports.HEALTH_RECENT_ACTIVITY = exports.HEALTH_ACTIVE_WORKFLOW_TYPES = exports.HEALTH_ESCALATION_COUNTS = exports.HEALTH_TASK_COUNTS = exports.GET_AUTO_CONNECT_SERVERS = exports.UPDATE_STATUS = exports.UPDATE_STATUS_CONNECTED = exports.DELETE_MCP_SERVER = exports.GET_MCP_SERVER_BY_NAME = exports.GET_MCP_SERVER = exports.CREATE_MCP_SERVER = void 0;
5
5
  exports.CREATE_MCP_SERVER = `
6
6
  INSERT INTO lt_mcp_servers
7
7
  (name, description, transport_type, transport_config, auto_connect, metadata, tags, compile_hints, credential_providers)
@@ -77,7 +77,8 @@ exports.DELETE_STALE_BUILTIN_SERVERS = `
77
77
  WHERE (metadata->>'builtin')::boolean = true
78
78
  AND name != ALL($1)
79
79
  RETURNING name`;
80
- exports.SEED_MCP_SERVER = `
80
+ /** Upsert — used by dashboard/API writes (overwrites intentionally). */
81
+ exports.UPSERT_MCP_SERVER = `
81
82
  INSERT INTO lt_mcp_servers
82
83
  (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)
83
84
  VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())
@@ -90,3 +91,9 @@ exports.SEED_MCP_SERVER = `
90
91
  credential_providers = EXCLUDED.credential_providers,
91
92
  status = 'connected',
92
93
  last_connected_at = NOW()`;
94
+ /** Seed — insert-if-absent. DB is source of truth after first boot. */
95
+ exports.SEED_MCP_SERVER = `
96
+ INSERT INTO lt_mcp_servers
97
+ (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)
98
+ VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())
99
+ ON CONFLICT (name) DO NOTHING`;
@@ -57,11 +57,14 @@ function initializeOAuth(config) {
57
57
  }
58
58
  }
59
59
  // Auto-detect providers from environment variables
60
+ const port = process.env.PORT || '3000';
61
+ const baseUrl = process.env.BASE_URL || `http://localhost:${port}`;
60
62
  for (const { provider, idVar, secretVar } of ENV_PROVIDERS) {
61
63
  const clientId = process.env[idVar];
62
64
  const clientSecret = process.env[secretVar];
63
65
  if (clientId && clientSecret && !(0, providers_1.getProvider)(provider)) {
64
- (0, providers_1.registerProvider)({ provider, clientId, clientSecret, scopes: [] });
66
+ const redirectUri = `${baseUrl}/api/auth/oauth/${provider}/callback`;
67
+ (0, providers_1.registerProvider)({ provider, clientId, clientSecret, scopes: [], redirectUri });
65
68
  }
66
69
  }
67
70
  // Register built-in credential providers (API key paste flow, no real OAuth)
@@ -48,8 +48,13 @@ function createGoogleHandler(cfg) {
48
48
  config: cfg,
49
49
  async createAuthorizationURL(state, codeVerifier) {
50
50
  const google = await getClient();
51
- const scopes = cfg.scopes.length > 0 ? cfg.scopes : ['openid', 'email', 'profile'];
52
- return google.createAuthorizationURL(state, codeVerifier, scopes);
51
+ const scopes = cfg.scopes.length > 0
52
+ ? cfg.scopes
53
+ : ['openid', 'email', 'profile', 'https://www.googleapis.com/auth/gmail.readonly'];
54
+ const url = google.createAuthorizationURL(state, codeVerifier, scopes);
55
+ url.searchParams.set('access_type', 'offline');
56
+ url.searchParams.set('prompt', 'consent');
57
+ return url;
53
58
  },
54
59
  async validateAuthorizationCode(code, codeVerifier) {
55
60
  const google = await getClient();
@@ -131,6 +131,10 @@ async function executeLT(options) {
131
131
  if (envelope) {
132
132
  const userId = envelope.lt?.userId || orchCtx?.userId;
133
133
  envelope.lt = { ...envelope.lt, taskId, originId, parentId, userId };
134
+ // Propagate certified flag from parent to child
135
+ if (envelope0?.metadata?.certified === true && envelope.metadata) {
136
+ envelope.metadata.certified = true;
137
+ }
134
138
  }
135
139
  // 5. Start child workflow (fire-and-forget — only the start is awaited)
136
140
  await hotmesh_1.Durable.workflow.startChild({
@@ -140,6 +144,7 @@ async function executeLT(options) {
140
144
  workflowId: childWorkflowId,
141
145
  expire: expire || defaults_1.JOB_EXPIRE_SECS,
142
146
  entity: workflowName,
147
+ signalIn: false,
143
148
  });
144
149
  // 6. Wait for the child's interceptor to signal back with the result
145
150
  const result = await hotmesh_1.Durable.workflow.condition(signalId);
@@ -28,6 +28,7 @@ async function createTask(input) {
28
28
  input.initiated_by || null,
29
29
  input.principal_type || null,
30
30
  input.executing_as || null,
31
+ input.status || null,
31
32
  ]);
32
33
  return rows[0];
33
34
  }
@@ -1,4 +1,4 @@
1
- export declare const CREATE_TASK = "\n INSERT INTO lt_tasks\n (workflow_id, workflow_type, lt_type, task_queue, signal_id,\n parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,\n trace_id, span_id, initiated_by, principal_type, executing_as)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)\n RETURNING *";
1
+ export declare const CREATE_TASK = "\n INSERT INTO lt_tasks\n (workflow_id, workflow_type, lt_type, task_queue, signal_id,\n parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,\n trace_id, span_id, initiated_by, principal_type, executing_as, status)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, COALESCE($17, 'pending'))\n RETURNING *";
2
2
  export declare const APPEND_MILESTONES = "\n UPDATE lt_tasks\n SET milestones = milestones || $1::jsonb\n WHERE id = $2\n RETURNING *";
3
3
  export declare const GET_TASK = "SELECT * FROM lt_tasks WHERE id = $1";
4
4
  export declare const GET_TASK_BY_SIGNAL_ID = "SELECT * FROM lt_tasks WHERE signal_id = $1";
@@ -11,8 +11,8 @@ exports.CREATE_TASK = `
11
11
  INSERT INTO lt_tasks
12
12
  (workflow_id, workflow_type, lt_type, task_queue, signal_id,
13
13
  parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,
14
- trace_id, span_id, initiated_by, principal_type, executing_as)
15
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
14
+ trace_id, span_id, initiated_by, principal_type, executing_as, status)
15
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, COALESCE($17, 'pending'))
16
16
  RETURNING *`;
17
17
  exports.APPEND_MILESTONES = `
18
18
  UPDATE lt_tasks
@@ -23,6 +23,8 @@ export interface CreateTaskInput {
23
23
  principal_type?: string;
24
24
  /** Executing principal (bot external_id) when proxy invocation is used. */
25
25
  executing_as?: string;
26
+ /** Initial status. Default: 'pending'. */
27
+ status?: string;
26
28
  }
27
29
  export interface UpdateTaskInput {
28
30
  status?: LTTaskStatus;
@@ -17,10 +17,12 @@ function getRegisteredWorkers() {
17
17
  /** System workflows excluded from the overview by default. */
18
18
  exports.SYSTEM_WORKFLOWS = new Set([
19
19
  'mcpQuery',
20
- 'mcpDeterministic',
21
20
  'mcpQueryRouter',
21
+ 'mcpDeterministic',
22
22
  'mcpTriage',
23
23
  'mcpTriageRouter',
24
24
  'mcpTriageDeterministic',
25
+ 'mcpWorkflowBuilder',
26
+ 'mcpWorkflowPlanner',
25
27
  'insightQuery',
26
28
  ]);
@@ -91,7 +91,13 @@ async function invokeWorkflow(input) {
91
91
  }
92
92
  // 4. Resolve principals and build envelope
93
93
  const wfConfig = await configService.getWorkflowConfig(workflowType);
94
- const envelope = await buildEnvelope(data, metadata ?? {}, auth.userId, executeAsOverride, wfConfig?.execute_as ?? undefined);
94
+ const isCertified = !!(wfConfig &&
95
+ ((wfConfig.roles?.length ?? 0) > 0 || (wfConfig.consumes?.length ?? 0) > 0));
96
+ const resolvedMetadata = { ...(metadata ?? {}) };
97
+ if (isCertified && resolvedMetadata.certified !== false) {
98
+ resolvedMetadata.certified = true;
99
+ }
100
+ const envelope = await buildEnvelope(data, resolvedMetadata, auth.userId, executeAsOverride, wfConfig?.execute_as ?? undefined);
95
101
  // 5. Start workflow — caller options pass through to Durable client
96
102
  const client = (0, workers_1.createClient)();
97
103
  const callerOpts = input.options ?? {};
@@ -104,6 +110,7 @@ async function invokeWorkflow(input) {
104
110
  workflowId,
105
111
  expire: callerOpts.expire ?? defaults_1.JOB_EXPIRE_SECS,
106
112
  entity: callerOpts.entity ?? workflowType,
113
+ signalIn: false,
107
114
  });
108
115
  return { workflowId };
109
116
  }
@@ -1,4 +1,4 @@
1
- import type { LTStartConfig } from '../types/startup';
1
+ import type { LTStartConfig, LTWorkerConfig } from '../types/startup';
2
2
  type WorkerEntry = {
3
3
  taskQueue: string;
4
4
  workflow: (...args: any[]) => any;
@@ -6,6 +6,7 @@ type WorkerEntry = {
6
6
  readonly?: boolean;
7
7
  retry?: Record<string, unknown>;
8
8
  };
9
+ config?: LTWorkerConfig;
9
10
  };
10
11
  /**
11
12
  * Build the connection descriptor used by HotMesh / Durable.
@@ -132,6 +132,39 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
132
132
  (0, registry_1.registerWorker)(w.workflow.name, w.taskQueue);
133
133
  }
134
134
  logger_1.loggerRegistry.info(`[long-tail] workers started on queues: ${workers.map((w) => w.taskQueue).join(', ')}`);
135
+ // Seed workflow configs (insert-if-absent — DB is source of truth)
136
+ const workersWithConfig = workers.filter((w) => w.config);
137
+ if (workersWithConfig.length) {
138
+ const { seedWorkflowConfig } = await Promise.resolve().then(() => __importStar(require('../services/config/write')));
139
+ const { ltConfig } = await Promise.resolve().then(() => __importStar(require('../modules/ltconfig')));
140
+ for (const w of workersWithConfig) {
141
+ const workflowType = w.workflow.name;
142
+ const c = w.config;
143
+ try {
144
+ const inserted = await seedWorkflowConfig({
145
+ workflow_type: workflowType,
146
+ task_queue: w.taskQueue,
147
+ invocable: c.invocable ?? false,
148
+ default_role: c.defaultRole ?? 'reviewer',
149
+ description: c.description ?? null,
150
+ roles: c.roles ?? [],
151
+ invocation_roles: c.invocationRoles ?? [],
152
+ consumes: c.consumes ?? [],
153
+ tool_tags: c.toolTags ?? [],
154
+ envelope_schema: c.envelopeSchema ?? null,
155
+ resolver_schema: c.resolverSchema ?? null,
156
+ cron_schedule: c.cronSchedule ?? null,
157
+ execute_as: c.executeAs ?? null,
158
+ });
159
+ if (inserted)
160
+ logger_1.loggerRegistry.info(`[long-tail] config seeded: ${workflowType}`);
161
+ }
162
+ catch (err) {
163
+ logger_1.loggerRegistry.warn(`[long-tail] config seed failed for ${workflowType}: ${err.message}`);
164
+ }
165
+ }
166
+ ltConfig.invalidate();
167
+ }
135
168
  // Start maintenance cron
136
169
  if (maintenance_1.maintenanceRegistry.hasConfig) {
137
170
  await maintenance_1.maintenanceRegistry.connect();
@@ -145,15 +178,45 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
145
178
  logger_1.loggerRegistry.info('[long-tail] MCP adapter connected');
146
179
  }
147
180
  // Register MCP server factories: built-in (from system/) + user-provided
181
+ // Both system and user factories can carry inline config for DB seeding.
148
182
  const { registerBuiltinServer } = await Promise.resolve().then(() => __importStar(require('../services/mcp/client')));
183
+ const { seedMcpServer, cleanStaleBuiltinServers } = await Promise.resolve().then(() => __importStar(require('../services/mcp/db')));
184
+ const userFactories = startConfig.mcp?.serverFactories ?? {};
185
+ // Resolve user factories — plain function or { factory, config }
186
+ const resolvedUserFactories = {};
187
+ for (const [name, entry] of Object.entries(userFactories)) {
188
+ if (typeof entry === 'function') {
189
+ resolvedUserFactories[name] = { factory: entry };
190
+ }
191
+ else {
192
+ resolvedUserFactories[name] = entry;
193
+ }
194
+ }
195
+ // Merge system (always have config) + user factories
149
196
  const allFactories = {
150
197
  ...builtinMcpServerFactories,
151
- ...(startConfig.mcp?.serverFactories ?? {}),
198
+ ...resolvedUserFactories,
152
199
  };
153
- for (const [name, factory] of Object.entries(allFactories)) {
154
- registerBuiltinServer(name, factory);
200
+ // 1. Register all factories (runtime — always applied)
201
+ for (const [name, entry] of Object.entries(allFactories)) {
202
+ registerBuiltinServer(name, entry.factory);
155
203
  }
156
204
  logger_1.loggerRegistry.info(`[long-tail] ${Object.keys(allFactories).length} MCP server factories registered`);
205
+ // 2. Seed MCP server configs (insert-if-absent + drift log)
206
+ for (const [name, entry] of Object.entries(allFactories)) {
207
+ if (entry.config) {
208
+ try {
209
+ const inserted = await seedMcpServer({ name, ...entry.config });
210
+ if (inserted)
211
+ logger_1.loggerRegistry.info(`[long-tail] MCP server seeded: ${name}`);
212
+ }
213
+ catch (err) {
214
+ logger_1.loggerRegistry.warn(`[long-tail] MCP server seed failed for ${name}: ${err.message}`);
215
+ }
216
+ }
217
+ }
218
+ // 3. Clean stale builtin servers no longer in factory list
219
+ await cleanStaleBuiltinServers(Object.keys(allFactories));
157
220
  // Register workers for active YAML (deterministic) workflows
158
221
  await yamlWorkflowWorkers.registerAllActiveWorkers();
159
222
  }
@@ -163,9 +226,6 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
163
226
  await events_1.eventRegistry.connect();
164
227
  logger_1.loggerRegistry.info('[long-tail] event adapters connected');
165
228
  }
166
- // Seed system MCP servers (always)
167
- const { seedSystemMcpServers } = await Promise.resolve().then(() => __importStar(require('../system/seed')));
168
- await seedSystemMcpServers();
169
229
  // Ensure system bot account exists for cron/system-initiated workflows
170
230
  const { ensureSystemBot } = await Promise.resolve().then(() => __importStar(require('../services/iam/bots')));
171
231
  await ensureSystemBot().catch((err) => logger_1.loggerRegistry.warn(`[long-tail] system bot seed error: ${err.message}`));
@@ -1,16 +1,18 @@
1
1
  /**
2
2
  * System workers and built-in MCP server factories.
3
3
  *
4
- * All MCP-powered workflows (triage, query, their routers and deterministic
5
- * counterparts) require an LLM API key. They load conditionally.
4
+ * All declarations carry inline `config` that seeds the DB on first boot.
5
+ * DB is the source of truth after seeding — startup never overwrites.
6
6
  */
7
- export declare function getSystemWorkers(): Array<{
7
+ import type { LTWorkerConfig, LTMcpServerConfig } from '../types/startup';
8
+ export type SystemWorkerEntry = {
8
9
  taskQueue: string;
9
10
  workflow: (...args: any[]) => any;
10
- }>;
11
- /**
12
- * Built-in MCP server factories.
13
- * Each entry maps a server name to a lazy factory that creates the McpServer instance.
14
- * Registered via `registerBuiltinServer()` in `services/mcp/client.ts`.
15
- */
16
- export declare const builtinMcpServerFactories: Record<string, () => Promise<any>>;
11
+ config?: LTWorkerConfig;
12
+ };
13
+ export declare function getSystemWorkers(): SystemWorkerEntry[];
14
+ export type McpServerFactoryEntry = {
15
+ factory: () => Promise<any>;
16
+ config: LTMcpServerConfig;
17
+ };
18
+ export declare const builtinMcpServerFactories: Record<string, McpServerFactoryEntry>;