@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,210 @@
1
+ "use strict";
2
+ /**
3
+ * Schema-driven data exchange with external service endpoints.
4
+ *
5
+ * Three pillars: endpoint + schema + identity.
6
+ * Transport (fetch, Playwright, gRPC) is an implementation detail.
7
+ * The value is schema enforcement and credential resolution —
8
+ * validating both sides of the exchange and resolving auth from
9
+ * the connection store at the last mile.
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.validateSchema = validateSchema;
16
+ exports.exchange = exchange;
17
+ const ajv_1 = __importDefault(require("ajv"));
18
+ const context_1 = require("../../services/iam/context");
19
+ const credentials_1 = require("../../services/iam/credentials");
20
+ const DEFAULT_TIMEOUT = parseInt(process.env.LT_SCHEMA_EXCHANGE_TIMEOUT_MS || '30000', 10);
21
+ const ajv = new ajv_1.default({ allErrors: true, strict: false });
22
+ /**
23
+ * Normalize a JSON Schema object before validation.
24
+ *
25
+ * HotMesh YAML maps serialize JSON arrays as indexed objects
26
+ * (e.g. `required: {"0":"username","1":"password"}` instead of
27
+ * `required: ["username","password"]`). This recursively converts
28
+ * any indexed-object `required` fields back to arrays so Ajv
29
+ * validates correctly.
30
+ */
31
+ function normalizeSchema(obj) {
32
+ if (obj === null || obj === undefined || typeof obj !== 'object')
33
+ return obj;
34
+ if (Array.isArray(obj))
35
+ return obj.map(normalizeSchema);
36
+ const result = {};
37
+ for (const [key, value] of Object.entries(obj)) {
38
+ if (key === 'required' && value && typeof value === 'object' && !Array.isArray(value)) {
39
+ // Convert indexed object {"0":"a","1":"b"} to array ["a","b"]
40
+ const keys = Object.keys(value);
41
+ if (keys.every(k => /^\d+$/.test(k))) {
42
+ result[key] = keys.sort((a, b) => Number(a) - Number(b)).map(k => value[k]);
43
+ continue;
44
+ }
45
+ }
46
+ result[key] = normalizeSchema(value);
47
+ }
48
+ return result;
49
+ }
50
+ /**
51
+ * Validate data against a JSON Schema.
52
+ *
53
+ * Returns a list of human-readable error strings (empty when valid).
54
+ */
55
+ function validateSchema(data, schema) {
56
+ const normalized = normalizeSchema(schema);
57
+ const validate = ajv.compile(normalized);
58
+ const valid = validate(data);
59
+ if (valid)
60
+ return { valid: true, errors: [] };
61
+ const errors = (validate.errors || []).map((e) => {
62
+ const path = e.instancePath || '(root)';
63
+ return `${path}: ${e.message}${e.params ? ` (${JSON.stringify(e.params)})` : ''}`;
64
+ });
65
+ return { valid: false, errors };
66
+ }
67
+ /**
68
+ * Exchange data with an external service endpoint under schema enforcement.
69
+ *
70
+ * 1. If request_schema provided, validate body before sending.
71
+ * On failure: return immediately (never send the request).
72
+ * 2. Make the HTTP call (transport layer — currently Node.js fetch).
73
+ * 3. Parse response body (JSON auto-detect).
74
+ * 4. If response_schema provided, validate response after receiving.
75
+ * 5. Return result with validated flag and any validation_errors.
76
+ */
77
+ async function exchange(args) {
78
+ // 1. Validate request body against schema (if provided)
79
+ if (args.request_schema && args.body !== undefined) {
80
+ const result = validateSchema(args.body, args.request_schema);
81
+ if (!result.valid) {
82
+ return {
83
+ status: 0,
84
+ data: null,
85
+ headers: {},
86
+ elapsed_ms: 0,
87
+ validated: false,
88
+ validation_errors: result.errors.map((e) => `request: ${e}`),
89
+ };
90
+ }
91
+ }
92
+ // 2. Resolve credential from connection store (if credential_provider set)
93
+ if (args.credential_provider) {
94
+ const ctx = (0, context_1.getToolContext)();
95
+ if (!ctx?.principal) {
96
+ return {
97
+ status: 0, data: null, headers: {}, elapsed_ms: 0,
98
+ validated: false,
99
+ validation_errors: ['credential: no identity context — cannot resolve credential_provider without a principal'],
100
+ };
101
+ }
102
+ const cred = await (0, credentials_1.resolveCredential)(ctx.principal, args.credential_provider, args.credential_label, ctx.initiatingPrincipal ? { fallbackPrincipal: ctx.initiatingPrincipal } : undefined);
103
+ if (!cred) {
104
+ return {
105
+ status: 0, data: null, headers: {}, elapsed_ms: 0,
106
+ validated: false,
107
+ validation_errors: [`credential: no credential found for provider "${args.credential_provider}" — register one at Settings > Connections`],
108
+ };
109
+ }
110
+ const scheme = args.auth_scheme || 'Bearer';
111
+ const headerName = args.auth_header || 'Authorization';
112
+ args.headers = { ...args.headers, [headerName]: `${scheme} ${cred.value}` };
113
+ }
114
+ // 3. Build URL with query parameters (accept endpoint or url)
115
+ let url = args.endpoint || args.url;
116
+ if (!url) {
117
+ return {
118
+ status: 0, data: null, headers: {}, elapsed_ms: 0,
119
+ validated: false, validation_errors: ['endpoint or url is required'],
120
+ };
121
+ }
122
+ if (args.query && Object.keys(args.query).length > 0) {
123
+ const params = new URLSearchParams(args.query);
124
+ url += (url.includes('?') ? '&' : '?') + params.toString();
125
+ }
126
+ // 3. Make the HTTP call
127
+ const start = performance.now();
128
+ const controller = new AbortController();
129
+ const timeout = setTimeout(() => controller.abort(), args.timeout_ms || DEFAULT_TIMEOUT);
130
+ let status;
131
+ let responseHeaders = {};
132
+ let rawBody;
133
+ try {
134
+ const fetchOpts = {
135
+ method: args.method,
136
+ headers: args.headers,
137
+ signal: controller.signal,
138
+ };
139
+ if (args.body !== undefined && args.method !== 'GET' && args.method !== 'HEAD') {
140
+ fetchOpts.body = typeof args.body === 'string' ? args.body : JSON.stringify(args.body);
141
+ if (!args.headers?.['Content-Type'] && !args.headers?.['content-type']) {
142
+ fetchOpts.headers = { ...fetchOpts.headers, 'Content-Type': 'application/json' };
143
+ }
144
+ }
145
+ const response = await fetch(url, fetchOpts);
146
+ status = response.status;
147
+ response.headers.forEach((value, key) => { responseHeaders[key] = value; });
148
+ rawBody = await response.text();
149
+ }
150
+ catch (err) {
151
+ const elapsed = performance.now() - start;
152
+ return {
153
+ status: 0,
154
+ data: null,
155
+ headers: {},
156
+ elapsed_ms: Math.round(elapsed),
157
+ validated: false,
158
+ validation_errors: [`transport: ${err.name === 'AbortError' ? 'request timed out' : err.message}`],
159
+ };
160
+ }
161
+ finally {
162
+ clearTimeout(timeout);
163
+ }
164
+ const elapsed = performance.now() - start;
165
+ // 3b. Fail fast on auth errors — don't silently return a 401 as a "result"
166
+ if (status === 401 || status === 403) {
167
+ return {
168
+ status,
169
+ data: null,
170
+ headers: responseHeaders,
171
+ elapsed_ms: Math.round(elapsed),
172
+ validated: false,
173
+ validation_errors: [
174
+ status === 401
175
+ ? 'authentication: token expired or invalid — refresh credentials and retry'
176
+ : 'authorization: insufficient permissions for this endpoint',
177
+ ],
178
+ };
179
+ }
180
+ // 4. Parse response body
181
+ let data;
182
+ const contentType = responseHeaders['content-type'] || '';
183
+ if (contentType.includes('json') || (rawBody.startsWith('{') || rawBody.startsWith('['))) {
184
+ try {
185
+ data = JSON.parse(rawBody);
186
+ }
187
+ catch {
188
+ data = rawBody;
189
+ }
190
+ }
191
+ else {
192
+ data = rawBody;
193
+ }
194
+ // 5. Validate response against schema (if provided)
195
+ let validated = true;
196
+ let validationErrors = [];
197
+ if (args.response_schema) {
198
+ const result = validateSchema(data, args.response_schema);
199
+ validated = result.valid;
200
+ validationErrors = result.errors.map((e) => `response: ${e}`);
201
+ }
202
+ return {
203
+ status,
204
+ data,
205
+ headers: responseHeaders,
206
+ elapsed_ms: Math.round(elapsed),
207
+ validated,
208
+ validation_errors: validationErrors,
209
+ };
210
+ }
@@ -1,4 +1,5 @@
1
- export declare const UPSERT_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = lt_knowledge.data || EXCLUDED.data,\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
1
+ export declare const UPSERT_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = CASE\n WHEN jsonb_typeof(lt_knowledge.data) = 'object'\n THEN lt_knowledge.data || EXCLUDED.data\n ELSE EXCLUDED.data\n END,\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
2
+ export declare const REPLACE_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = EXCLUDED.data,\n tags = EXCLUDED.tags\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
2
3
  export declare const GET_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, created_at, updated_at\n FROM lt_knowledge WHERE domain = $1 AND key = $2";
3
4
  export declare const SEARCH_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, created_at, updated_at\n FROM lt_knowledge\n WHERE domain = $1 AND data @> $2::jsonb";
4
5
  export declare const COUNT_KNOWLEDGE_SEARCH = "\n SELECT COUNT(*)::int AS total FROM lt_knowledge\n WHERE domain = $1 AND data @> $2::jsonb";
@@ -6,4 +7,6 @@ export declare const LIST_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, c
6
7
  export declare const COUNT_KNOWLEDGE_LIST = "\n SELECT COUNT(*)::int AS total FROM lt_knowledge WHERE domain = $1";
7
8
  export declare const DELETE_KNOWLEDGE = "\n DELETE FROM lt_knowledge WHERE domain = $1 AND key = $2";
8
9
  export declare const LIST_DOMAINS = "\n SELECT domain, COUNT(*)::int AS count, MAX(updated_at) AS latest\n FROM lt_knowledge GROUP BY domain ORDER BY latest DESC";
10
+ export declare const SET_KNOWLEDGE_FIELD = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3::jsonb, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = jsonb_set(lt_knowledge.data, $5::text[], $6::jsonb, true),\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
11
+ export declare const REMOVE_KNOWLEDGE_FIELD = "\n UPDATE lt_knowledge\n SET data = data #- $3::text[]\n WHERE domain = $1 AND key = $2\n RETURNING id, domain, key, updated_at";
9
12
  export declare const APPEND_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data)\n VALUES ($1, $2, $3::jsonb)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = CASE\n WHEN lt_knowledge.data #> $4::text[] IS NULL\n THEN jsonb_set(lt_knowledge.data, $4::text[], jsonb_build_array($5::jsonb))\n ELSE jsonb_set(lt_knowledge.data, $4::text[], (lt_knowledge.data #> $4::text[]) || jsonb_build_array($5::jsonb))\n END\n RETURNING id, domain, key, updated_at";
@@ -1,14 +1,34 @@
1
1
  "use strict";
2
2
  // ─── Knowledge CRUD ─────────────────────────────────────────────────────────
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.APPEND_KNOWLEDGE = exports.LIST_DOMAINS = exports.DELETE_KNOWLEDGE = exports.COUNT_KNOWLEDGE_LIST = exports.LIST_KNOWLEDGE = exports.COUNT_KNOWLEDGE_SEARCH = exports.SEARCH_KNOWLEDGE = exports.GET_KNOWLEDGE = exports.UPSERT_KNOWLEDGE = void 0;
4
+ exports.APPEND_KNOWLEDGE = exports.REMOVE_KNOWLEDGE_FIELD = exports.SET_KNOWLEDGE_FIELD = exports.LIST_DOMAINS = exports.DELETE_KNOWLEDGE = exports.COUNT_KNOWLEDGE_LIST = exports.LIST_KNOWLEDGE = exports.COUNT_KNOWLEDGE_SEARCH = exports.SEARCH_KNOWLEDGE = exports.GET_KNOWLEDGE = exports.REPLACE_KNOWLEDGE = exports.UPSERT_KNOWLEDGE = void 0;
5
+ // Upsert knowledge entry. On conflict (domain+key), merges JSONB data at
6
+ // the top level — new keys are added, existing keys are overwritten.
7
+ //
8
+ // Guard: if the existing `data` column is not a JSON object (e.g. it was
9
+ // corrupted into an array by a prior string merge), replace it entirely
10
+ // rather than appending to the array. The CASE expression ensures the
11
+ // `||` operator always receives object || object, which produces a merge.
5
12
  exports.UPSERT_KNOWLEDGE = `
6
13
  INSERT INTO lt_knowledge (domain, key, data, tags)
7
14
  VALUES ($1, $2, $3, $4)
8
15
  ON CONFLICT (domain, key) DO UPDATE SET
9
- data = lt_knowledge.data || EXCLUDED.data,
16
+ data = CASE
17
+ WHEN jsonb_typeof(lt_knowledge.data) = 'object'
18
+ THEN lt_knowledge.data || EXCLUDED.data
19
+ ELSE EXCLUDED.data
20
+ END,
10
21
  tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))
11
22
  RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
23
+ // Full replacement — overwrites data and tags entirely (no merge).
24
+ // Used when removing fields or tags.
25
+ exports.REPLACE_KNOWLEDGE = `
26
+ INSERT INTO lt_knowledge (domain, key, data, tags)
27
+ VALUES ($1, $2, $3, $4)
28
+ ON CONFLICT (domain, key) DO UPDATE SET
29
+ data = EXCLUDED.data,
30
+ tags = EXCLUDED.tags
31
+ RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
12
32
  exports.GET_KNOWLEDGE = `
13
33
  SELECT id, domain, key, data, tags, created_at, updated_at
14
34
  FROM lt_knowledge WHERE domain = $1 AND key = $2`;
@@ -29,6 +49,21 @@ exports.DELETE_KNOWLEDGE = `
29
49
  exports.LIST_DOMAINS = `
30
50
  SELECT domain, COUNT(*)::int AS count, MAX(updated_at) AS latest
31
51
  FROM lt_knowledge GROUP BY domain ORDER BY latest DESC`;
52
+ // Set a value at a specific JSONB path without clobbering siblings.
53
+ // Creates the entry if it doesn't exist. Uses jsonb_set for surgical updates.
54
+ exports.SET_KNOWLEDGE_FIELD = `
55
+ INSERT INTO lt_knowledge (domain, key, data, tags)
56
+ VALUES ($1, $2, $3::jsonb, $4)
57
+ ON CONFLICT (domain, key) DO UPDATE SET
58
+ data = jsonb_set(lt_knowledge.data, $5::text[], $6::jsonb, true),
59
+ tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))
60
+ RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
61
+ // Remove a field at a specific JSONB path. Entry survives; only the targeted path is removed.
62
+ exports.REMOVE_KNOWLEDGE_FIELD = `
63
+ UPDATE lt_knowledge
64
+ SET data = data #- $3::text[]
65
+ WHERE domain = $1 AND key = $2
66
+ RETURNING id, domain, key, updated_at`;
32
67
  exports.APPEND_KNOWLEDGE = `
33
68
  INSERT INTO lt_knowledge (domain, key, data)
34
69
  VALUES ($1, $2, $3::jsonb)
@@ -110,4 +110,5 @@ exports.builtinMcpServerFactories = {
110
110
  'long-tail-claude-code': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/claude-code'))).then((m) => m.createClaudeCodeServer()),
111
111
  'long-tail-admin': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/admin'))).then((m) => m.createAdminServer()),
112
112
  'long-tail-knowledge': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/knowledge'))).then((m) => m.createKnowledgeServer()),
113
+ 'long-tail-schema-exchange': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/schema-exchange'))).then((m) => m.createSchemaExchangeServer()),
113
114
  };
@@ -52,6 +52,8 @@ const readFileSchema = zod_1.z.object({
52
52
  const listFilesSchema = zod_1.z.object({
53
53
  directory: zod_1.z.string().optional().describe('Subdirectory to list (default: root)'),
54
54
  pattern: zod_1.z.string().optional().describe('Glob-like filter pattern (e.g., "*.json")'),
55
+ page_size: zod_1.z.number().optional().describe('Max results per page (default 100)'),
56
+ continuation_token: zod_1.z.string().optional().describe('Pagination token from a previous response'),
55
57
  });
56
58
  const deleteFileSchema = zod_1.z.object({
57
59
  path: zod_1.z.string().describe('File path relative to storage root'),
@@ -82,7 +84,7 @@ async function createFileStorageServer(options) {
82
84
  });
83
85
  instance.registerTool('list_files', {
84
86
  title: 'List Files',
85
- description: 'List files in a storage directory. Returns file paths, sizes, and modification timestamps.',
87
+ description: 'List files and directories at a storage prefix. Supports cursor-based pagination via continuation tokens. Returns file paths, sizes, timestamps, subdirectories, and a nextToken for the next page.',
86
88
  inputSchema: listFilesSchema,
87
89
  }, async (args) => {
88
90
  const result = await fileStorage.listFiles(args);
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ export declare const escalateSchema: z.ZodObject<{
3
+ role: z.ZodString;
4
+ message: z.ZodString;
5
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
6
+ type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
7
+ subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ role: string;
11
+ type: string;
12
+ message: string;
13
+ priority: number;
14
+ subtype: string;
15
+ data?: Record<string, any> | undefined;
16
+ }, {
17
+ role: string;
18
+ message: string;
19
+ data?: Record<string, any> | undefined;
20
+ type?: string | undefined;
21
+ priority?: number | undefined;
22
+ subtype?: string | undefined;
23
+ }>;
24
+ export declare const checkResolutionSchema: z.ZodObject<{
25
+ escalation_id: z.ZodString;
26
+ }, "strip", z.ZodTypeAny, {
27
+ escalation_id: string;
28
+ }, {
29
+ escalation_id: string;
30
+ }>;
31
+ export declare const getAvailableWorkSchema: z.ZodObject<{
32
+ role: z.ZodString;
33
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ role: string;
36
+ limit: number;
37
+ }, {
38
+ role: string;
39
+ limit?: number | undefined;
40
+ }>;
41
+ export declare const claimAndResolveSchema: z.ZodObject<{
42
+ escalation_id: z.ZodString;
43
+ resolver_id: z.ZodString;
44
+ payload: z.ZodRecord<z.ZodString, z.ZodAny>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ escalation_id: string;
47
+ resolver_id: string;
48
+ payload: Record<string, any>;
49
+ }, {
50
+ escalation_id: string;
51
+ resolver_id: string;
52
+ payload: Record<string, any>;
53
+ }>;
54
+ export declare const resolveEscalationSchema: z.ZodObject<{
55
+ escalation_id: z.ZodString;
56
+ payload: z.ZodRecord<z.ZodString, z.ZodAny>;
57
+ }, "strip", z.ZodTypeAny, {
58
+ escalation_id: string;
59
+ payload: Record<string, any>;
60
+ }, {
61
+ escalation_id: string;
62
+ payload: Record<string, any>;
63
+ }>;
64
+ export declare const escalateAndWaitSchema: z.ZodObject<{
65
+ role: z.ZodString;
66
+ message: z.ZodString;
67
+ form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
68
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
69
+ assigned_to: z.ZodOptional<z.ZodString>;
70
+ type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
71
+ subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
72
+ priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
73
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
74
+ role: z.ZodString;
75
+ message: z.ZodString;
76
+ form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
77
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
78
+ assigned_to: z.ZodOptional<z.ZodString>;
79
+ type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
80
+ subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
81
+ priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
82
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
83
+ role: z.ZodString;
84
+ message: z.ZodString;
85
+ form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
86
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
87
+ assigned_to: z.ZodOptional<z.ZodString>;
88
+ type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
89
+ subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
90
+ priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
91
+ }, z.ZodTypeAny, "passthrough">>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escalateAndWaitSchema = exports.resolveEscalationSchema = exports.claimAndResolveSchema = exports.getAvailableWorkSchema = exports.checkResolutionSchema = exports.escalateSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ // ── Schemas (extracted to break TS2589 deep-instantiation in registerTool generics) ──
6
+ exports.escalateSchema = zod_1.z.object({
7
+ role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
8
+ message: zod_1.z.string().describe('Description of what needs human review'),
9
+ data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
10
+ type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
11
+ subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
12
+ priority: zod_1.z.number().min(1).max(4).optional().default(2)
13
+ .describe('Priority: 1 (highest) to 4 (lowest)'),
14
+ });
15
+ exports.checkResolutionSchema = zod_1.z.object({
16
+ escalation_id: zod_1.z.string().describe('The escalation ID to check'),
17
+ });
18
+ exports.getAvailableWorkSchema = zod_1.z.object({
19
+ role: zod_1.z.string().describe('Role to filter by'),
20
+ limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
21
+ });
22
+ exports.claimAndResolveSchema = zod_1.z.object({
23
+ escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
24
+ resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
25
+ payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
26
+ });
27
+ exports.resolveEscalationSchema = zod_1.z.object({
28
+ escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
29
+ payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
30
+ });
31
+ exports.escalateAndWaitSchema = zod_1.z.object({
32
+ role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
33
+ message: zod_1.z.string().describe('Description of what input is needed from the human'),
34
+ form_schema: zod_1.z.record(zod_1.z.any()).optional()
35
+ .describe('JSON Schema for the resolver form. Use format:"password" for sensitive fields.'),
36
+ data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
37
+ assigned_to: zod_1.z.string().optional().describe('Auto-assign to a specific user'),
38
+ type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
39
+ subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
40
+ priority: zod_1.z.number().min(1).max(4).optional().default(1)
41
+ .describe('Priority: 1 (highest) to 4 (lowest)'),
42
+ }).passthrough();
@@ -16,11 +16,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
16
16
  export declare function createHumanQueueServer(options?: {
17
17
  name?: string;
18
18
  }): Promise<McpServer>;
19
- /**
20
- * Get the current MCP server instance.
21
- */
19
+ /** Get the current MCP server instance. */
22
20
  export declare function getServer(): McpServer | null;
23
- /**
24
- * Stop the MCP server and release resources.
25
- */
21
+ /** Stop the MCP server and release resources. */
26
22
  export declare function stopServer(): Promise<void>;
@@ -38,48 +38,10 @@ exports.getServer = getServer;
38
38
  exports.stopServer = stopServer;
39
39
  const crypto = __importStar(require("crypto"));
40
40
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
41
- const zod_1 = require("zod");
42
41
  const logger_1 = require("../../lib/logger");
43
42
  const escalationService = __importStar(require("../../services/escalation"));
43
+ const human_queue_schemas_1 = require("./human-queue-schemas");
44
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
45
  /**
84
46
  * Create the Long Tail Human Queue MCP server.
85
47
  *
@@ -103,7 +65,7 @@ async function createHumanQueueServer(options) {
103
65
  server.registerTool('escalate_to_human', {
104
66
  title: 'Escalate to Human',
105
67
  description: 'Create a new escalation for human review. Returns the escalation ID.',
106
- inputSchema: escalateSchema,
68
+ inputSchema: human_queue_schemas_1.escalateSchema,
107
69
  }, async (args) => {
108
70
  const escalation = await escalationService.createEscalation({
109
71
  type: args.type || 'mcp',
@@ -130,7 +92,7 @@ async function createHumanQueueServer(options) {
130
92
  server.registerTool('check_resolution', {
131
93
  title: 'Check Escalation Resolution',
132
94
  description: 'Check the status of an escalation. Returns status and resolver payload if resolved.',
133
- inputSchema: checkResolutionSchema,
95
+ inputSchema: human_queue_schemas_1.checkResolutionSchema,
134
96
  }, async (args) => {
135
97
  const escalation = await escalationService.getEscalation(args.escalation_id);
136
98
  if (!escalation) {
@@ -163,7 +125,7 @@ async function createHumanQueueServer(options) {
163
125
  server.registerTool('get_available_work', {
164
126
  title: 'Get Available Work',
165
127
  description: 'List available escalations for a role. Returns pending, unassigned escalations.',
166
- inputSchema: getAvailableWorkSchema,
128
+ inputSchema: human_queue_schemas_1.getAvailableWorkSchema,
167
129
  }, async (args) => {
168
130
  const { escalations } = await escalationService.listAvailableEscalations({
169
131
  role: args.role,
@@ -189,7 +151,7 @@ async function createHumanQueueServer(options) {
189
151
  server.registerTool('claim_and_resolve', {
190
152
  title: 'Claim and Resolve',
191
153
  description: 'Claim an escalation and immediately resolve it with a payload. Atomic operation.',
192
- inputSchema: claimAndResolveSchema,
154
+ inputSchema: human_queue_schemas_1.claimAndResolveSchema,
193
155
  }, async (args) => {
194
156
  const claimed = await escalationService.claimEscalation(args.escalation_id, args.resolver_id, 5);
195
157
  if (!claimed) {
@@ -226,7 +188,7 @@ async function createHumanQueueServer(options) {
226
188
  server.registerTool('resolve_escalation', {
227
189
  title: 'Resolve Escalation',
228
190
  description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
229
- inputSchema: resolveEscalationSchema,
191
+ inputSchema: human_queue_schemas_1.resolveEscalationSchema,
230
192
  }, async (args) => {
231
193
  const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
232
194
  if (!resolved) {
@@ -255,7 +217,7 @@ async function createHumanQueueServer(options) {
255
217
  description: 'Create an escalation and pause the workflow until a human responds. ' +
256
218
  'Returns a signal ID that the workflow uses to wait. ' +
257
219
  'Preferred over escalate_to_human + check_resolution polling.',
258
- inputSchema: escalateAndWaitSchema,
220
+ inputSchema: human_queue_schemas_1.escalateAndWaitSchema,
259
221
  }, async (args) => {
260
222
  const signalId = `wait-for-human-${crypto.randomUUID()}`;
261
223
  // YAML workflows inject _yaml_signal_routing to override Durable's signalId-based routing
@@ -300,15 +262,11 @@ async function createHumanQueueServer(options) {
300
262
  logger_1.loggerRegistry.info(`[lt-mcp:server] ${name} ready (5 tools registered)`);
301
263
  return server;
302
264
  }
303
- /**
304
- * Get the current MCP server instance.
305
- */
265
+ /** Get the current MCP server instance. */
306
266
  function getServer() {
307
267
  return server;
308
268
  }
309
- /**
310
- * Stop the MCP server and release resources.
311
- */
269
+ /** Stop the MCP server and release resources. */
312
270
  async function stopServer() {
313
271
  if (server) {
314
272
  await server.close();