@hotmeshio/long-tail 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/README.md +15 -0
  2. package/build/api/escalations/bulk.d.ts +78 -0
  3. package/build/api/escalations/bulk.js +279 -0
  4. package/build/api/escalations/claim.d.ts +30 -0
  5. package/build/api/escalations/claim.js +121 -0
  6. package/build/api/escalations/create.d.ts +29 -0
  7. package/build/api/escalations/create.js +101 -0
  8. package/build/api/escalations/helpers.d.ts +10 -0
  9. package/build/api/escalations/helpers.js +80 -0
  10. package/build/api/escalations/index.d.ts +6 -0
  11. package/build/api/escalations/index.js +26 -0
  12. package/build/api/escalations/list.d.ts +75 -0
  13. package/build/api/escalations/list.js +170 -0
  14. package/build/api/escalations/resolve.d.ts +18 -0
  15. package/build/api/escalations/resolve.js +243 -0
  16. package/build/api/escalations/single.d.ts +37 -0
  17. package/build/api/escalations/single.js +123 -0
  18. package/build/api/files.d.ts +16 -0
  19. package/build/api/files.js +61 -0
  20. package/build/api/knowledge.d.ts +36 -0
  21. package/build/api/knowledge.js +112 -0
  22. package/build/api/mcp/index.d.ts +2 -0
  23. package/build/api/mcp/index.js +16 -0
  24. package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
  25. package/build/api/{mcp.js → mcp/servers.js} +4 -65
  26. package/build/api/mcp/tools.d.ts +33 -0
  27. package/build/api/mcp/tools.js +64 -0
  28. package/build/api/mcp-runs.d.ts +2 -0
  29. package/build/api/mcp-runs.js +2 -0
  30. package/build/api/settings.js +9 -1
  31. package/build/api/workflow-sets.d.ts +11 -0
  32. package/build/api/workflow-sets.js +62 -0
  33. package/build/api/workflows/config.d.ts +64 -0
  34. package/build/api/workflows/config.js +142 -0
  35. package/build/api/workflows/discovery.d.ts +29 -0
  36. package/build/api/workflows/discovery.js +153 -0
  37. package/build/api/workflows/index.d.ts +3 -0
  38. package/build/api/workflows/index.js +18 -0
  39. package/build/api/workflows/invocation.d.ts +67 -0
  40. package/build/api/workflows/invocation.js +188 -0
  41. package/build/api/yaml-workflows/cron.d.ts +39 -0
  42. package/build/api/yaml-workflows/cron.js +127 -0
  43. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -137
  44. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
  45. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  46. package/build/api/yaml-workflows/deploy.js +223 -0
  47. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  48. package/build/api/yaml-workflows/helpers.js +8 -0
  49. package/build/api/yaml-workflows/index.d.ts +4 -0
  50. package/build/api/yaml-workflows/index.js +27 -0
  51. package/build/api/yaml-workflows/versions.d.ts +43 -0
  52. package/build/api/yaml-workflows/versions.js +124 -0
  53. package/build/bin/ltc.d.ts +2 -0
  54. package/build/bin/ltc.js +220 -0
  55. package/build/examples/seed-data.d.ts +55 -0
  56. package/build/examples/seed-data.js +161 -0
  57. package/build/examples/seed.js +7 -164
  58. package/build/lib/cli/auth.d.ts +23 -0
  59. package/build/lib/cli/auth.js +167 -0
  60. package/build/lib/cli/client.d.ts +6 -0
  61. package/build/lib/cli/client.js +31 -0
  62. package/build/lib/cli/commands/escalations.d.ts +19 -0
  63. package/build/lib/cli/commands/escalations.js +69 -0
  64. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  65. package/build/lib/cli/commands/knowledge.js +87 -0
  66. package/build/lib/cli/commands/mcp.d.ts +8 -0
  67. package/build/lib/cli/commands/mcp.js +33 -0
  68. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  69. package/build/lib/cli/commands/pipelines.js +67 -0
  70. package/build/lib/cli/commands/status.d.ts +1 -0
  71. package/build/lib/cli/commands/status.js +28 -0
  72. package/build/lib/cli/commands/users.d.ts +7 -0
  73. package/build/lib/cli/commands/users.js +25 -0
  74. package/build/lib/cli/commands/workflows.d.ts +16 -0
  75. package/build/lib/cli/commands/workflows.js +104 -0
  76. package/build/lib/cli/compile.d.ts +2 -0
  77. package/build/lib/cli/compile.js +165 -0
  78. package/build/lib/cli/format.d.ts +23 -0
  79. package/build/lib/cli/format.js +94 -0
  80. package/build/lib/cli/init.d.ts +1 -0
  81. package/build/lib/cli/init.js +61 -0
  82. package/build/lib/cli/output.d.ts +27 -0
  83. package/build/lib/cli/output.js +126 -0
  84. package/build/lib/cli/scanner.d.ts +10 -0
  85. package/build/lib/cli/scanner.js +164 -0
  86. package/build/lib/cli/types.d.ts +16 -0
  87. package/build/lib/cli/types.js +2 -0
  88. package/build/lib/logger/index.d.ts +0 -9
  89. package/build/lib/logger/index.js +9 -4
  90. package/build/lib/storage/index.js +2 -2
  91. package/build/lib/storage/local.d.ts +15 -0
  92. package/build/lib/storage/local.js +63 -0
  93. package/build/lib/storage/mime.d.ts +4 -0
  94. package/build/lib/storage/mime.js +31 -0
  95. package/build/lib/storage/s3.d.ts +16 -0
  96. package/build/lib/storage/s3.js +70 -0
  97. package/build/lib/storage/types.d.ts +18 -0
  98. package/build/modules/utils.d.ts +73 -0
  99. package/build/modules/utils.js +84 -0
  100. package/build/routes/file-browser.d.ts +2 -0
  101. package/build/routes/file-browser.js +126 -0
  102. package/build/routes/files.js +25 -17
  103. package/build/routes/index.js +4 -0
  104. package/build/routes/knowledge.d.ts +2 -0
  105. package/build/routes/knowledge.js +141 -0
  106. package/build/routes/mcp-runs.js +2 -0
  107. package/build/routes/workflow-sets.js +9 -0
  108. package/build/routes/yaml-workflows/crud.js +9 -0
  109. package/build/routes/yaml-workflows/deployment.js +8 -0
  110. package/build/sdk/index.d.ts +17 -0
  111. package/build/sdk/index.js +19 -0
  112. package/build/services/insight/index.d.ts +13 -0
  113. package/build/services/insight/index.js +4 -7
  114. package/build/services/insight/prompts.d.ts +1 -1
  115. package/build/services/insight/prompts.js +1 -1
  116. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  117. package/build/services/mcp/client/connection-dispatch.js +78 -0
  118. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  119. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  120. package/build/services/mcp/client/connection-test.d.ts +10 -0
  121. package/build/services/mcp/client/connection-test.js +49 -0
  122. package/build/services/mcp/client/connection.d.ts +3 -68
  123. package/build/services/mcp/client/connection.js +15 -393
  124. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  125. package/build/services/mcp/server-lifecycle.js +49 -0
  126. package/build/services/mcp/server-tools.d.ts +13 -0
  127. package/build/services/mcp/server-tools.js +287 -0
  128. package/build/services/mcp/server.d.ts +2 -26
  129. package/build/services/mcp/server.js +7 -315
  130. package/build/services/mcp-runs/queries.d.ts +2 -0
  131. package/build/services/mcp-runs/queries.js +11 -1
  132. package/build/services/mcp-runs/sql.d.ts +1 -1
  133. package/build/services/mcp-runs/sql.js +2 -2
  134. package/build/services/workflow-sets/db.d.ts +1 -0
  135. package/build/services/workflow-sets/db.js +6 -0
  136. package/build/services/workflow-sets/index.d.ts +1 -1
  137. package/build/services/workflow-sets/index.js +2 -1
  138. package/build/services/workflow-sets/sql.d.ts +1 -0
  139. package/build/services/workflow-sets/sql.js +6 -1
  140. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  141. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  142. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  143. package/build/services/yaml-workflow/db-versions.js +76 -0
  144. package/build/services/yaml-workflow/db.d.ts +14 -12
  145. package/build/services/yaml-workflow/db.js +32 -70
  146. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  147. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  148. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  149. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  150. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  151. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  152. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  153. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  154. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  155. package/build/services/yaml-workflow/generator.js +4 -4
  156. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  157. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  158. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  159. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  160. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  161. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  162. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  163. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  164. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  165. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  166. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  167. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  168. package/build/services/yaml-workflow/sql.d.ts +2 -1
  169. package/build/services/yaml-workflow/sql.js +10 -3
  170. package/build/start/workers.js +6 -5
  171. package/build/system/activities/file-storage.d.ts +4 -0
  172. package/build/system/activities/file-storage.js +7 -1
  173. package/build/system/activities/knowledge.d.ts +23 -0
  174. package/build/system/activities/knowledge.js +50 -10
  175. package/build/system/activities/schema-exchange.d.ts +50 -0
  176. package/build/system/activities/schema-exchange.js +210 -0
  177. package/build/system/activities/sql.d.ts +4 -1
  178. package/build/system/activities/sql.js +37 -2
  179. package/build/system/index.js +1 -0
  180. package/build/system/mcp-servers/file-storage.js +3 -1
  181. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  182. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  183. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  184. package/build/system/mcp-servers/human-queue.js +9 -51
  185. package/build/system/mcp-servers/knowledge.js +69 -6
  186. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  187. package/build/system/mcp-servers/schema-exchange.js +93 -0
  188. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  189. package/build/system/seed/server-definitions.d.ts +112 -1
  190. package/build/system/seed/server-definitions.js +37 -0
  191. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  192. package/build/system/seed/tool-manifests-data.js +37 -1
  193. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  194. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  195. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  196. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  197. package/build/system/workflows/mcp-triage/index.js +17 -75
  198. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  199. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  200. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
  201. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
  202. package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
  203. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  204. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  205. package/build/tsconfig.tsbuildinfo +1 -1
  206. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
  207. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  208. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  209. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  210. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
  211. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  212. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  213. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  214. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  215. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  216. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
  217. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  218. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
  219. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  220. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  221. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  222. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
  223. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
  224. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
  225. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  226. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
  227. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  228. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  229. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  230. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
  231. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  232. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
  233. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  234. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
  235. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  236. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
  237. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  238. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  239. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  240. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +2 -0
  241. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  242. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
  243. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
  244. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
  245. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
  246. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
  247. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
  248. package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
  249. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  250. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
  251. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  252. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  253. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  254. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
  255. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  256. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  257. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  258. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  259. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  260. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
  261. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  262. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
  263. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  264. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
  265. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DurFwIwe.js.map} +1 -1
  266. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  267. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  268. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
  269. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
  270. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
  271. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  272. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
  273. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  274. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
  275. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  276. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  277. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  278. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
  279. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  280. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
  281. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  282. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  283. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  284. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
  285. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  286. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
  287. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  288. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
  289. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  290. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
  291. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
  292. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  293. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  294. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
  295. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
  296. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  297. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  298. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  299. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  300. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  301. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  302. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
  303. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
  304. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
  305. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
  306. package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
  307. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  308. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
  309. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-CmznCuAx.js.map} +1 -1
  310. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  311. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  312. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  313. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  314. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  315. package/dashboard/dist/assets/index-C8-UaN4N.js +2 -0
  316. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-C8-UaN4N.js.map} +1 -1
  317. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  318. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  319. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  320. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-CjxHCVxl.js.map} +1 -1
  321. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  322. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  323. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  324. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
  325. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
  326. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
  327. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
  328. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-XGOmZ117.js.map} +1 -1
  329. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  330. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  331. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
  332. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  333. package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
  334. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
  335. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
  336. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
  337. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
  338. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
  339. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
  340. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
  341. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
  342. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  343. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
  344. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  345. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
  346. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
  347. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
  348. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
  349. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  350. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  351. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  352. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  353. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  354. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
  355. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
  356. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
  357. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
  358. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  359. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
  360. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
  361. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
  362. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
  363. package/dashboard/dist/index.html +3 -3
  364. package/docs/api/http/file-browser.md +101 -0
  365. package/docs/api/http/knowledge.md +203 -0
  366. package/docs/api/http/settings.md +6 -4
  367. package/docs/api/sdk/files.md +68 -0
  368. package/docs/api/sdk/knowledge.md +126 -0
  369. package/docs/api/sdk/settings.md +3 -2
  370. package/docs/cli.md +171 -0
  371. package/docs/compilation.md +16 -0
  372. package/docs/compiler.md +311 -0
  373. package/docs/events.md +19 -0
  374. package/docs/schema-exchange.md +173 -0
  375. package/docs/self-test.md +106 -0
  376. package/docs/workflows.md +19 -0
  377. package/package.json +15 -2
  378. package/build/api/escalations.d.ts +0 -271
  379. package/build/api/escalations.js +0 -932
  380. package/build/api/workflows.d.ts +0 -158
  381. package/build/api/workflows.js +0 -414
  382. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js +0 -2
  383. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
  384. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  385. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  386. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  387. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  388. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  389. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  390. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  391. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  392. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  393. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
  394. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
  395. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  396. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  397. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  398. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  399. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  400. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  401. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  402. package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
  403. package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
  404. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  405. package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
  406. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  407. package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
  408. package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
  409. package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
  410. package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
  411. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  412. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  413. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  414. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  415. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  416. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  417. package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
  418. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  419. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  420. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  421. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  422. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  423. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  424. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerHumanQueueTools = registerHumanQueueTools;
37
+ const crypto = __importStar(require("crypto"));
38
+ const zod_1 = require("zod");
39
+ const escalationService = __importStar(require("../escalation"));
40
+ // ── Schemas (extracted to break TS2589 deep-instantiation in registerTool generics) ──
41
+ const escalateSchema = zod_1.z.object({
42
+ role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
43
+ message: zod_1.z.string().describe('Description of what needs human review'),
44
+ data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
45
+ type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
46
+ subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
47
+ priority: zod_1.z.number().min(1).max(4).optional().default(2)
48
+ .describe('Priority: 1 (highest) to 4 (lowest)'),
49
+ });
50
+ const checkResolutionSchema = zod_1.z.object({
51
+ escalation_id: zod_1.z.string().describe('The escalation ID to check'),
52
+ });
53
+ const getAvailableWorkSchema = zod_1.z.object({
54
+ role: zod_1.z.string().describe('Role to filter by'),
55
+ limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
56
+ });
57
+ const claimAndResolveSchema = zod_1.z.object({
58
+ escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
59
+ resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
60
+ payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
61
+ });
62
+ const resolveEscalationSchema = zod_1.z.object({
63
+ escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
64
+ payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
65
+ });
66
+ const escalateAndWaitSchema = zod_1.z.object({
67
+ role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
68
+ message: zod_1.z.string().describe('Description of what input is needed from the human'),
69
+ form_schema: zod_1.z.record(zod_1.z.any()).optional()
70
+ .describe('JSON Schema for the resolver form. Use format:"password" for sensitive fields.'),
71
+ data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
72
+ assigned_to: zod_1.z.string().optional().describe('Auto-assign to a specific user'),
73
+ type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
74
+ subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
75
+ priority: zod_1.z.number().min(1).max(4).optional().default(1)
76
+ .describe('Priority: 1 (highest) to 4 (lowest)'),
77
+ }).passthrough();
78
+ /**
79
+ * Register all human queue tools on the given MCP server.
80
+ *
81
+ * Tools registered:
82
+ * - escalate_to_human -- create a new escalation (fire-and-forget)
83
+ * - check_resolution -- check escalation status
84
+ * - get_available_work -- list available escalations by role
85
+ * - claim_and_resolve -- claim + resolve in one step
86
+ * - resolve_escalation -- resolve an already-claimed escalation
87
+ * - escalate_and_wait -- create escalation and return signal for durable wait
88
+ */
89
+ function registerHumanQueueTools(server) {
90
+ // ── escalate_to_human ───────────────────────────────────────────────
91
+ server.registerTool('escalate_to_human', {
92
+ title: 'Escalate to Human',
93
+ description: 'Create a new escalation for human review. Returns the escalation ID.',
94
+ inputSchema: escalateSchema,
95
+ }, async (args) => {
96
+ const escalation = await escalationService.createEscalation({
97
+ type: args.type || 'mcp',
98
+ subtype: args.subtype || 'tool_call',
99
+ description: args.message,
100
+ priority: args.priority,
101
+ role: args.role,
102
+ envelope: JSON.stringify(args.data || {}),
103
+ metadata: { source: 'mcp_server' },
104
+ });
105
+ return {
106
+ content: [{
107
+ type: 'text',
108
+ text: JSON.stringify({
109
+ escalation_id: escalation.id,
110
+ status: escalation.status,
111
+ role: escalation.role,
112
+ created_at: escalation.created_at,
113
+ }),
114
+ }],
115
+ };
116
+ });
117
+ // ── check_resolution ────────────────────────────────────────────────
118
+ server.registerTool('check_resolution', {
119
+ title: 'Check Escalation Resolution',
120
+ description: 'Check the status of an escalation. Returns status and resolver payload if resolved.',
121
+ inputSchema: checkResolutionSchema,
122
+ }, async (args) => {
123
+ const escalation = await escalationService.getEscalation(args.escalation_id);
124
+ if (!escalation) {
125
+ return {
126
+ content: [{
127
+ type: 'text',
128
+ text: JSON.stringify({ error: 'Escalation not found' }),
129
+ }],
130
+ isError: true,
131
+ };
132
+ }
133
+ const result = {
134
+ escalation_id: escalation.id,
135
+ status: escalation.status,
136
+ };
137
+ if (escalation.status === 'resolved' && escalation.resolver_payload) {
138
+ try {
139
+ result.resolver_payload = JSON.parse(escalation.resolver_payload);
140
+ }
141
+ catch {
142
+ result.resolver_payload = escalation.resolver_payload;
143
+ }
144
+ result.resolved_at = escalation.resolved_at;
145
+ }
146
+ return {
147
+ content: [{ type: 'text', text: JSON.stringify(result) }],
148
+ };
149
+ });
150
+ // ── get_available_work ──────────────────────────────────────────────
151
+ server.registerTool('get_available_work', {
152
+ title: 'Get Available Work',
153
+ description: 'List available escalations for a role. Returns pending, unassigned escalations.',
154
+ inputSchema: getAvailableWorkSchema,
155
+ }, async (args) => {
156
+ const { escalations } = await escalationService.listAvailableEscalations({
157
+ role: args.role,
158
+ limit: args.limit,
159
+ });
160
+ const items = escalations.map((e) => ({
161
+ escalation_id: e.id,
162
+ type: e.type,
163
+ subtype: e.subtype,
164
+ description: e.description,
165
+ priority: e.priority,
166
+ role: e.role,
167
+ created_at: e.created_at,
168
+ }));
169
+ return {
170
+ content: [{
171
+ type: 'text',
172
+ text: JSON.stringify({ count: items.length, escalations: items }),
173
+ }],
174
+ };
175
+ });
176
+ // ── claim_and_resolve ───────────────────────────────────────────────
177
+ server.registerTool('claim_and_resolve', {
178
+ title: 'Claim and Resolve',
179
+ description: 'Claim an escalation and immediately resolve it with a payload. Atomic operation.',
180
+ inputSchema: claimAndResolveSchema,
181
+ }, async (args) => {
182
+ const claimed = await escalationService.claimEscalation(args.escalation_id, args.resolver_id, 5);
183
+ if (!claimed) {
184
+ return {
185
+ content: [{
186
+ type: 'text',
187
+ text: JSON.stringify({ error: 'Escalation not available for claim' }),
188
+ }],
189
+ isError: true,
190
+ };
191
+ }
192
+ const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
193
+ if (!resolved) {
194
+ return {
195
+ content: [{
196
+ type: 'text',
197
+ text: JSON.stringify({ error: 'Failed to resolve escalation' }),
198
+ }],
199
+ isError: true,
200
+ };
201
+ }
202
+ return {
203
+ content: [{
204
+ type: 'text',
205
+ text: JSON.stringify({
206
+ escalation_id: resolved.id,
207
+ status: resolved.status,
208
+ resolved_at: resolved.resolved_at,
209
+ }),
210
+ }],
211
+ };
212
+ });
213
+ // ── resolve_escalation ──────────────────────────────────────────────
214
+ server.registerTool('resolve_escalation', {
215
+ title: 'Resolve Escalation',
216
+ description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
217
+ inputSchema: resolveEscalationSchema,
218
+ }, async (args) => {
219
+ const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
220
+ if (!resolved) {
221
+ return {
222
+ content: [{
223
+ type: 'text',
224
+ text: JSON.stringify({ error: 'Failed to resolve escalation' }),
225
+ }],
226
+ isError: true,
227
+ };
228
+ }
229
+ return {
230
+ content: [{
231
+ type: 'text',
232
+ text: JSON.stringify({
233
+ escalation_id: resolved.id,
234
+ status: resolved.status,
235
+ resolved_at: resolved.resolved_at,
236
+ }),
237
+ }],
238
+ };
239
+ });
240
+ // ── escalate_and_wait ──────────────────────────────────────────────
241
+ server.registerTool('escalate_and_wait', {
242
+ title: 'Escalate and Wait',
243
+ description: 'Create an escalation and pause the workflow until a human responds. ' +
244
+ 'Returns a signal ID that the workflow uses to wait. ' +
245
+ 'Preferred over escalate_to_human + check_resolution polling.',
246
+ inputSchema: escalateAndWaitSchema,
247
+ }, async (args) => {
248
+ const signalId = `wait-for-human-${crypto.randomUUID()}`;
249
+ // YAML workflows inject _yaml_signal_routing to override Durable's signalId-based routing
250
+ const yamlRouting = args._yaml_signal_routing;
251
+ const signalRouting = yamlRouting
252
+ ? { ...yamlRouting, signalId }
253
+ : { signalId };
254
+ const metadata = {
255
+ source: 'mcp_server',
256
+ signal_routing: signalRouting,
257
+ };
258
+ if (args.form_schema) {
259
+ metadata.form_schema = args.form_schema;
260
+ }
261
+ const escalation = await escalationService.createEscalation({
262
+ type: args.type || 'mcp',
263
+ subtype: args.subtype || 'wait_for_human',
264
+ description: args.message,
265
+ priority: args.priority,
266
+ role: args.role,
267
+ envelope: JSON.stringify(args.data || {}),
268
+ metadata,
269
+ workflow_type: yamlRouting?.workflowType,
270
+ workflow_id: yamlRouting?.workflowId,
271
+ task_queue: yamlRouting?.taskQueue,
272
+ });
273
+ if (args.assigned_to) {
274
+ await escalationService.claimEscalation(escalation.id, args.assigned_to, 240);
275
+ }
276
+ return {
277
+ content: [{
278
+ type: 'text',
279
+ text: JSON.stringify({
280
+ type: 'waitFor',
281
+ signalId,
282
+ escalationId: escalation.id,
283
+ }),
284
+ }],
285
+ };
286
+ });
287
+ }
@@ -1,26 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- /**
3
- * Create the Long Tail Human Queue MCP server.
4
- *
5
- * Registers five tools that expose the escalation API:
6
- * - escalate_to_human — create a new escalation (fire-and-forget)
7
- * - check_resolution — check escalation status
8
- * - get_available_work — list available escalations by role
9
- * - claim_and_resolve — claim + resolve in one step
10
- * - escalate_and_wait — create escalation and return signal for durable wait
11
- *
12
- * The server is created with tools registered but no transport
13
- * auto-connected. Callers connect a transport programmatically
14
- * or via the Streamable HTTP endpoint.
15
- */
16
- export declare function createHumanQueueServer(options?: {
17
- name?: string;
18
- }): Promise<McpServer>;
19
- /**
20
- * Get the current MCP server instance.
21
- */
22
- export declare function getServer(): McpServer | null;
23
- /**
24
- * Stop the MCP server and release resources.
25
- */
26
- export declare function stopServer(): Promise<void>;
1
+ export { registerHumanQueueTools } from './server-tools';
2
+ export { createHumanQueueServer, getServer, stopServer } from './server-lifecycle';
@@ -1,317 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.createHumanQueueServer = createHumanQueueServer;
37
- exports.getServer = getServer;
38
- exports.stopServer = stopServer;
39
- const crypto = __importStar(require("crypto"));
40
- const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
41
- const zod_1 = require("zod");
42
- const logger_1 = require("../../lib/logger");
43
- const escalationService = __importStar(require("../escalation"));
44
- let server = null;
45
- // ── Schemas (extracted to break TS2589 deep-instantiation in registerTool generics) ──
46
- const escalateSchema = zod_1.z.object({
47
- role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
48
- message: zod_1.z.string().describe('Description of what needs human review'),
49
- data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
50
- type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
51
- subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
52
- priority: zod_1.z.number().min(1).max(4).optional().default(2)
53
- .describe('Priority: 1 (highest) to 4 (lowest)'),
54
- });
55
- const checkResolutionSchema = zod_1.z.object({
56
- escalation_id: zod_1.z.string().describe('The escalation ID to check'),
57
- });
58
- const getAvailableWorkSchema = zod_1.z.object({
59
- role: zod_1.z.string().describe('Role to filter by'),
60
- limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
61
- });
62
- const claimAndResolveSchema = zod_1.z.object({
63
- escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
64
- resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
65
- payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
66
- });
67
- const resolveEscalationSchema = zod_1.z.object({
68
- escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
69
- payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
70
- });
71
- const escalateAndWaitSchema = zod_1.z.object({
72
- role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
73
- message: zod_1.z.string().describe('Description of what input is needed from the human'),
74
- form_schema: zod_1.z.record(zod_1.z.any()).optional()
75
- .describe('JSON Schema for the resolver form. Use format:"password" for sensitive fields.'),
76
- data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
77
- assigned_to: zod_1.z.string().optional().describe('Auto-assign to a specific user'),
78
- type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
79
- subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
80
- priority: zod_1.z.number().min(1).max(4).optional().default(1)
81
- .describe('Priority: 1 (highest) to 4 (lowest)'),
82
- }).passthrough();
83
- /**
84
- * Create the Long Tail Human Queue MCP server.
85
- *
86
- * Registers five tools that expose the escalation API:
87
- * - escalate_to_human — create a new escalation (fire-and-forget)
88
- * - check_resolution — check escalation status
89
- * - get_available_work — list available escalations by role
90
- * - claim_and_resolve — claim + resolve in one step
91
- * - escalate_and_wait — create escalation and return signal for durable wait
92
- *
93
- * The server is created with tools registered but no transport
94
- * auto-connected. Callers connect a transport programmatically
95
- * or via the Streamable HTTP endpoint.
96
- */
97
- async function createHumanQueueServer(options) {
98
- if (server)
99
- return server;
100
- const name = options?.name || 'long-tail-human-queue';
101
- server = new mcp_js_1.McpServer({ name, version: '1.0.0' });
102
- // ── escalate_to_human ───────────────────────────────────────────────
103
- server.registerTool('escalate_to_human', {
104
- title: 'Escalate to Human',
105
- description: 'Create a new escalation for human review. Returns the escalation ID.',
106
- inputSchema: escalateSchema,
107
- }, async (args) => {
108
- const escalation = await escalationService.createEscalation({
109
- type: args.type || 'mcp',
110
- subtype: args.subtype || 'tool_call',
111
- description: args.message,
112
- priority: args.priority,
113
- role: args.role,
114
- envelope: JSON.stringify(args.data || {}),
115
- metadata: { source: 'mcp_server' },
116
- });
117
- return {
118
- content: [{
119
- type: 'text',
120
- text: JSON.stringify({
121
- escalation_id: escalation.id,
122
- status: escalation.status,
123
- role: escalation.role,
124
- created_at: escalation.created_at,
125
- }),
126
- }],
127
- };
128
- });
129
- // ── check_resolution ────────────────────────────────────────────────
130
- server.registerTool('check_resolution', {
131
- title: 'Check Escalation Resolution',
132
- description: 'Check the status of an escalation. Returns status and resolver payload if resolved.',
133
- inputSchema: checkResolutionSchema,
134
- }, async (args) => {
135
- const escalation = await escalationService.getEscalation(args.escalation_id);
136
- if (!escalation) {
137
- return {
138
- content: [{
139
- type: 'text',
140
- text: JSON.stringify({ error: 'Escalation not found' }),
141
- }],
142
- isError: true,
143
- };
144
- }
145
- const result = {
146
- escalation_id: escalation.id,
147
- status: escalation.status,
148
- };
149
- if (escalation.status === 'resolved' && escalation.resolver_payload) {
150
- try {
151
- result.resolver_payload = JSON.parse(escalation.resolver_payload);
152
- }
153
- catch {
154
- result.resolver_payload = escalation.resolver_payload;
155
- }
156
- result.resolved_at = escalation.resolved_at;
157
- }
158
- return {
159
- content: [{ type: 'text', text: JSON.stringify(result) }],
160
- };
161
- });
162
- // ── get_available_work ──────────────────────────────────────────────
163
- server.registerTool('get_available_work', {
164
- title: 'Get Available Work',
165
- description: 'List available escalations for a role. Returns pending, unassigned escalations.',
166
- inputSchema: getAvailableWorkSchema,
167
- }, async (args) => {
168
- const { escalations } = await escalationService.listAvailableEscalations({
169
- role: args.role,
170
- limit: args.limit,
171
- });
172
- const items = escalations.map((e) => ({
173
- escalation_id: e.id,
174
- type: e.type,
175
- subtype: e.subtype,
176
- description: e.description,
177
- priority: e.priority,
178
- role: e.role,
179
- created_at: e.created_at,
180
- }));
181
- return {
182
- content: [{
183
- type: 'text',
184
- text: JSON.stringify({ count: items.length, escalations: items }),
185
- }],
186
- };
187
- });
188
- // ── claim_and_resolve ───────────────────────────────────────────────
189
- server.registerTool('claim_and_resolve', {
190
- title: 'Claim and Resolve',
191
- description: 'Claim an escalation and immediately resolve it with a payload. Atomic operation.',
192
- inputSchema: claimAndResolveSchema,
193
- }, async (args) => {
194
- const claimed = await escalationService.claimEscalation(args.escalation_id, args.resolver_id, 5);
195
- if (!claimed) {
196
- return {
197
- content: [{
198
- type: 'text',
199
- text: JSON.stringify({ error: 'Escalation not available for claim' }),
200
- }],
201
- isError: true,
202
- };
203
- }
204
- const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
205
- if (!resolved) {
206
- return {
207
- content: [{
208
- type: 'text',
209
- text: JSON.stringify({ error: 'Failed to resolve escalation' }),
210
- }],
211
- isError: true,
212
- };
213
- }
214
- return {
215
- content: [{
216
- type: 'text',
217
- text: JSON.stringify({
218
- escalation_id: resolved.id,
219
- status: resolved.status,
220
- resolved_at: resolved.resolved_at,
221
- }),
222
- }],
223
- };
224
- });
225
- // ── resolve_escalation ──────────────────────────────────────────────
226
- server.registerTool('resolve_escalation', {
227
- title: 'Resolve Escalation',
228
- description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
229
- inputSchema: resolveEscalationSchema,
230
- }, async (args) => {
231
- const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
232
- if (!resolved) {
233
- return {
234
- content: [{
235
- type: 'text',
236
- text: JSON.stringify({ error: 'Failed to resolve escalation' }),
237
- }],
238
- isError: true,
239
- };
240
- }
241
- return {
242
- content: [{
243
- type: 'text',
244
- text: JSON.stringify({
245
- escalation_id: resolved.id,
246
- status: resolved.status,
247
- resolved_at: resolved.resolved_at,
248
- }),
249
- }],
250
- };
251
- });
252
- // ── escalate_and_wait ──────────────────────────────────────────────
253
- server.registerTool('escalate_and_wait', {
254
- title: 'Escalate and Wait',
255
- description: 'Create an escalation and pause the workflow until a human responds. ' +
256
- 'Returns a signal ID that the workflow uses to wait. ' +
257
- 'Preferred over escalate_to_human + check_resolution polling.',
258
- inputSchema: escalateAndWaitSchema,
259
- }, async (args) => {
260
- const signalId = `wait-for-human-${crypto.randomUUID()}`;
261
- // YAML workflows inject _yaml_signal_routing to override Durable's signalId-based routing
262
- const yamlRouting = args._yaml_signal_routing;
263
- const signalRouting = yamlRouting
264
- ? { ...yamlRouting, signalId }
265
- : { signalId };
266
- const metadata = {
267
- source: 'mcp_server',
268
- signal_routing: signalRouting,
269
- };
270
- if (args.form_schema) {
271
- metadata.form_schema = args.form_schema;
272
- }
273
- const escalation = await escalationService.createEscalation({
274
- type: args.type || 'mcp',
275
- subtype: args.subtype || 'wait_for_human',
276
- description: args.message,
277
- priority: args.priority,
278
- role: args.role,
279
- envelope: JSON.stringify(args.data || {}),
280
- metadata,
281
- workflow_type: yamlRouting?.workflowType,
282
- workflow_id: yamlRouting?.workflowId,
283
- task_queue: yamlRouting?.taskQueue,
284
- });
285
- if (args.assigned_to) {
286
- await escalationService.claimEscalation(escalation.id, args.assigned_to, 240);
287
- }
288
- return {
289
- content: [{
290
- type: 'text',
291
- text: JSON.stringify({
292
- type: 'waitFor',
293
- signalId,
294
- escalationId: escalation.id,
295
- }),
296
- }],
297
- };
298
- });
299
- logger_1.loggerRegistry.info(`[lt-mcp:server] ${name} ready (5 tools registered)`);
300
- return server;
301
- }
302
- /**
303
- * Get the current MCP server instance.
304
- */
305
- function getServer() {
306
- return server;
307
- }
308
- /**
309
- * Stop the MCP server and release resources.
310
- */
311
- async function stopServer() {
312
- if (server) {
313
- await server.close();
314
- server = null;
315
- logger_1.loggerRegistry.info('[lt-mcp:server] stopped');
316
- }
317
- }
3
+ exports.stopServer = exports.getServer = exports.createHumanQueueServer = exports.registerHumanQueueTools = void 0;
4
+ var server_tools_1 = require("./server-tools");
5
+ Object.defineProperty(exports, "registerHumanQueueTools", { enumerable: true, get: function () { return server_tools_1.registerHumanQueueTools; } });
6
+ var server_lifecycle_1 = require("./server-lifecycle");
7
+ Object.defineProperty(exports, "createHumanQueueServer", { enumerable: true, get: function () { return server_lifecycle_1.createHumanQueueServer; } });
8
+ Object.defineProperty(exports, "getServer", { enumerable: true, get: function () { return server_lifecycle_1.getServer; } });
9
+ Object.defineProperty(exports, "stopServer", { enumerable: true, get: function () { return server_lifecycle_1.stopServer; } });
@@ -5,6 +5,8 @@ export interface ListJobsParams {
5
5
  entity?: string;
6
6
  search?: string;
7
7
  status?: string;
8
+ sort_by?: string;
9
+ order?: 'asc' | 'desc';
8
10
  }
9
11
  interface JobRow {
10
12
  workflow_id: string;
@@ -5,6 +5,15 @@ exports.listJobs = listJobs;
5
5
  const db_1 = require("../../lib/db");
6
6
  const hotmesh_utils_1 = require("../hotmesh-utils");
7
7
  const sql_1 = require("./sql");
8
+ const SORTABLE_COLUMNS = new Set(['created_at', 'updated_at', 'entity', 'status']);
9
+ function buildOrderBy(sortBy, order) {
10
+ if (!sortBy || !SORTABLE_COLUMNS.has(sortBy)) {
11
+ return '(CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC';
12
+ }
13
+ const dir = order === 'asc' ? 'ASC' : 'DESC';
14
+ const col = sortBy === 'status' ? '(CASE WHEN j.status > 0 THEN 0 WHEN j.status = 0 THEN 1 ELSE 2 END)' : `j.${sortBy}`;
15
+ return `${col} ${dir}`;
16
+ }
8
17
  /**
9
18
  * Return distinct entity names from job runs + yaml workflow graph_topics.
10
19
  */
@@ -55,9 +64,10 @@ async function listJobs(params) {
55
64
  }
56
65
  const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
57
66
  const keyPrefix = `hmsh:${appId}:j:`;
67
+ const orderBy = buildOrderBy(params.sort_by, params.order);
58
68
  const [countResult, dataResult] = await Promise.all([
59
69
  pool.query((0, sql_1.COUNT_JOBS)(schema, where), values),
60
- pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx++), [...values, limit, offset]),
70
+ pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx++, orderBy), [...values, limit, offset]),
61
71
  ]);
62
72
  const jobs = dataResult.rows.map((row) => ({
63
73
  workflow_id: row.key.startsWith(keyPrefix) ? row.key.slice(keyPrefix.length) : row.key,