@hotmeshio/long-tail 0.1.14 → 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 (349) 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 +3 -0
  19. package/build/api/files.js +18 -1
  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/settings.js +9 -1
  29. package/build/api/workflows/config.d.ts +64 -0
  30. package/build/api/workflows/config.js +142 -0
  31. package/build/api/workflows/discovery.d.ts +29 -0
  32. package/build/api/workflows/discovery.js +153 -0
  33. package/build/api/workflows/index.d.ts +3 -0
  34. package/build/api/workflows/index.js +18 -0
  35. package/build/api/workflows/invocation.d.ts +67 -0
  36. package/build/api/workflows/invocation.js +188 -0
  37. package/build/api/yaml-workflows/cron.d.ts +39 -0
  38. package/build/api/yaml-workflows/cron.js +127 -0
  39. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
  40. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +77 -378
  41. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  42. package/build/api/yaml-workflows/deploy.js +223 -0
  43. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  44. package/build/api/yaml-workflows/helpers.js +8 -0
  45. package/build/api/yaml-workflows/index.d.ts +4 -0
  46. package/build/api/yaml-workflows/index.js +27 -0
  47. package/build/api/yaml-workflows/versions.d.ts +43 -0
  48. package/build/api/yaml-workflows/versions.js +124 -0
  49. package/build/bin/ltc.d.ts +2 -0
  50. package/build/bin/ltc.js +220 -0
  51. package/build/examples/seed-data.d.ts +55 -0
  52. package/build/examples/seed-data.js +161 -0
  53. package/build/examples/seed.js +7 -164
  54. package/build/lib/cli/auth.d.ts +23 -0
  55. package/build/lib/cli/auth.js +167 -0
  56. package/build/lib/cli/client.d.ts +6 -0
  57. package/build/lib/cli/client.js +31 -0
  58. package/build/lib/cli/commands/escalations.d.ts +19 -0
  59. package/build/lib/cli/commands/escalations.js +69 -0
  60. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  61. package/build/lib/cli/commands/knowledge.js +87 -0
  62. package/build/lib/cli/commands/mcp.d.ts +8 -0
  63. package/build/lib/cli/commands/mcp.js +33 -0
  64. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  65. package/build/lib/cli/commands/pipelines.js +67 -0
  66. package/build/lib/cli/commands/status.d.ts +1 -0
  67. package/build/lib/cli/commands/status.js +28 -0
  68. package/build/lib/cli/commands/users.d.ts +7 -0
  69. package/build/lib/cli/commands/users.js +25 -0
  70. package/build/lib/cli/commands/workflows.d.ts +16 -0
  71. package/build/lib/cli/commands/workflows.js +104 -0
  72. package/build/lib/cli/compile.d.ts +2 -0
  73. package/build/lib/cli/compile.js +165 -0
  74. package/build/lib/cli/format.d.ts +23 -0
  75. package/build/lib/cli/format.js +94 -0
  76. package/build/lib/cli/init.d.ts +1 -0
  77. package/build/lib/cli/init.js +61 -0
  78. package/build/lib/cli/output.d.ts +27 -0
  79. package/build/lib/cli/output.js +126 -0
  80. package/build/lib/cli/scanner.d.ts +10 -0
  81. package/build/lib/cli/scanner.js +164 -0
  82. package/build/lib/cli/types.d.ts +16 -0
  83. package/build/lib/cli/types.js +2 -0
  84. package/build/lib/logger/index.d.ts +0 -9
  85. package/build/lib/logger/index.js +9 -4
  86. package/build/lib/storage/index.js +2 -2
  87. package/build/routes/file-browser.js +14 -0
  88. package/build/routes/index.js +2 -0
  89. package/build/routes/knowledge.d.ts +2 -0
  90. package/build/routes/knowledge.js +141 -0
  91. package/build/routes/yaml-workflows/crud.js +9 -0
  92. package/build/sdk/index.d.ts +17 -0
  93. package/build/sdk/index.js +19 -0
  94. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  95. package/build/services/mcp/client/connection-dispatch.js +78 -0
  96. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  97. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  98. package/build/services/mcp/client/connection-test.d.ts +10 -0
  99. package/build/services/mcp/client/connection-test.js +49 -0
  100. package/build/services/mcp/client/connection.d.ts +3 -68
  101. package/build/services/mcp/client/connection.js +15 -393
  102. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  103. package/build/services/mcp/server-lifecycle.js +49 -0
  104. package/build/services/mcp/server-tools.d.ts +13 -0
  105. package/build/services/mcp/server-tools.js +287 -0
  106. package/build/services/mcp/server.d.ts +2 -26
  107. package/build/services/mcp/server.js +7 -315
  108. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  109. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  110. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  111. package/build/services/yaml-workflow/db-versions.js +76 -0
  112. package/build/services/yaml-workflow/db.d.ts +3 -13
  113. package/build/services/yaml-workflow/db.js +15 -71
  114. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  115. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  116. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  117. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  118. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  119. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  120. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  121. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  122. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  123. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  124. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  125. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  126. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  127. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  128. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  129. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  130. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  131. package/build/start/workers.js +6 -5
  132. package/build/system/activities/file-storage.d.ts +4 -0
  133. package/build/system/activities/file-storage.js +7 -1
  134. package/build/system/activities/knowledge.d.ts +23 -0
  135. package/build/system/activities/knowledge.js +50 -10
  136. package/build/system/activities/sql.d.ts +3 -0
  137. package/build/system/activities/sql.js +25 -1
  138. package/build/system/mcp-servers/file-storage.js +3 -1
  139. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  140. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  141. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  142. package/build/system/mcp-servers/human-queue.js +9 -51
  143. package/build/system/mcp-servers/knowledge.js +43 -9
  144. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  145. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  146. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  147. package/build/system/workflows/mcp-triage/index.js +17 -75
  148. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
  149. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
  150. package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
  151. package/build/tsconfig.tsbuildinfo +1 -1
  152. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-NLryl1_B.js} +2 -2
  153. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  154. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  155. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  156. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DWhn0tr1.js} +2 -2
  157. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  158. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  159. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  160. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  161. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  162. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-DXkaAOYk.js} +2 -2
  163. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  164. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-B361BOfU.js} +2 -2
  165. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  166. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  167. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  168. package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-DXSUbA26.js} +2 -2
  169. package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-DXSUbA26.js.map} +1 -1
  170. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-CQGqkXP_.js} +2 -2
  171. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  172. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-Dep92Wkg.js} +2 -2
  173. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  174. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  175. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  176. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-BMJAPkMi.js} +2 -2
  177. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  178. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-DbVbCzH2.js} +2 -2
  179. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  180. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-0XNuXj0M.js} +2 -2
  181. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  182. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-CeYnCzBN.js} +2 -2
  183. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  184. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  185. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  186. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-CfUcdzaj.js} +2 -2
  187. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  188. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-CZtodW_Z.js} +2 -2
  189. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-CZtodW_Z.js.map} +1 -1
  190. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-Dzgq7HGt.js} +2 -2
  191. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-Dzgq7HGt.js.map} +1 -1
  192. package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-yyhUeKoA.js} +2 -2
  193. package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-yyhUeKoA.js.map} +1 -1
  194. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-Ceh7OQtZ.js} +2 -2
  195. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  196. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-CZ9a8cpr.js} +2 -2
  197. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  198. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  199. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  200. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-BrPikMFy.js} +2 -2
  201. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  202. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  203. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  204. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  205. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  206. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-DxbJMfJu.js} +2 -2
  207. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  208. package/dashboard/dist/assets/RolesPage-CYHRo21-.js +2 -0
  209. package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  210. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-DurFwIwe.js} +2 -2
  211. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-DurFwIwe.js.map} +1 -1
  212. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  213. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  214. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-CKplpK3w.js} +2 -2
  215. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-CKplpK3w.js.map} +1 -1
  216. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-Dm0V1dNN.js} +2 -2
  217. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  218. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-Dicx0WTZ.js} +2 -2
  219. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  220. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-B2jYvU3-.js} +2 -2
  221. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  222. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  223. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  224. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-CypDZ6Kl.js} +2 -2
  225. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  226. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DooDNJGT.js} +2 -2
  227. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  228. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  229. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  230. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-D7CdkAeg.js} +2 -2
  231. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  232. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-B5LXB2aj.js} +2 -2
  233. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  234. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Crb9b0Gw.js} +2 -2
  235. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  236. package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-OPg-nkRa.js} +2 -2
  237. package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-OPg-nkRa.js.map} +1 -1
  238. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  239. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  240. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-CCV4MMj7.js} +2 -2
  241. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-CCV4MMj7.js.map} +1 -1
  242. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  243. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  244. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  245. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  246. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  247. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  248. package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-Dqos20NE.js} +2 -2
  249. package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-Dqos20NE.js.map} +1 -1
  250. package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-A0CsbvNV.js} +2 -2
  251. package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-A0CsbvNV.js.map} +1 -1
  252. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-BpBJN6k4.js} +2 -2
  253. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  254. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CmznCuAx.js} +2 -2
  255. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CmznCuAx.js.map} +1 -1
  256. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  257. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  258. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  259. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  260. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  261. package/dashboard/dist/assets/{index-DX6zxr6t.js → index-C8-UaN4N.js} +2 -2
  262. package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-C8-UaN4N.js.map} +1 -1
  263. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  264. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  265. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  266. package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-CjxHCVxl.js.map} +1 -1
  267. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  268. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  269. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  270. package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-DZHNte4o.js.map} +1 -1
  271. package/dashboard/dist/assets/{index-DNytWfSZ.js → index-VnYkWW8r.js} +2 -2
  272. package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-VnYkWW8r.js.map} +1 -1
  273. package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-XGOmZ117.js} +2 -2
  274. package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-XGOmZ117.js.map} +1 -1
  275. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  276. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  277. package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-puKKZ5l8.js} +71 -71
  278. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  279. package/dashboard/dist/assets/{index-BmVCyB6C.js → index-t5frSddy.js} +2 -2
  280. package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-t5frSddy.js.map} +1 -1
  281. package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-DrWymhSu.js} +2 -2
  282. package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-DrWymhSu.js.map} +1 -1
  283. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-BhUxVEMS.js} +2 -2
  284. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-BhUxVEMS.js.map} +1 -1
  285. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-DUfz4mLd.js} +2 -2
  286. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-DUfz4mLd.js.map} +1 -1
  287. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-Cm6AY5sh.js} +2 -2
  288. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  289. package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-2v1Kc7BJ.js} +2 -2
  290. package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  291. package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-DTQNp6tH.js} +2 -2
  292. package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-DTQNp6tH.js.map} +1 -1
  293. package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-CS1rgG1s.js} +2 -2
  294. package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-CS1rgG1s.js.map} +1 -1
  295. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  296. package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  297. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  298. package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-BeR-nVWQ.js.map} +1 -1
  299. package/dashboard/dist/assets/{users-CxIMy_xw.js → users-DYsdQ7Md.js} +2 -2
  300. package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-DYsdQ7Md.js.map} +1 -1
  301. package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
  302. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  303. package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-2QAXh3UD.js} +2 -2
  304. package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-2QAXh3UD.js.map} +1 -1
  305. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-sx8-UEE3.js} +2 -2
  306. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-sx8-UEE3.js.map} +1 -1
  307. package/dashboard/dist/index.html +3 -3
  308. package/docs/api/http/file-browser.md +101 -0
  309. package/docs/api/http/knowledge.md +203 -0
  310. package/docs/api/http/settings.md +6 -4
  311. package/docs/api/sdk/files.md +68 -0
  312. package/docs/api/sdk/knowledge.md +126 -0
  313. package/docs/api/sdk/settings.md +3 -2
  314. package/docs/cli.md +171 -0
  315. package/docs/compilation.md +16 -0
  316. package/docs/compiler.md +311 -0
  317. package/docs/events.md +19 -0
  318. package/docs/workflows.md +19 -0
  319. package/package.json +13 -2
  320. package/build/api/escalations.d.ts +0 -271
  321. package/build/api/escalations.js +0 -932
  322. package/build/api/workflows.d.ts +0 -158
  323. package/build/api/workflows.js +0 -414
  324. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
  325. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
  326. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
  327. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
  328. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
  329. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
  330. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
  331. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
  332. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
  333. package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
  334. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
  335. package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
  336. package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
  337. package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
  338. package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
  339. package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
  340. package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
  341. package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
  342. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
  343. package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
  344. package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
  345. package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
  346. package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
  347. package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
  348. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
  349. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import type { LTEnvelope } from '../types';
2
+ export declare const SEED_USERS: ({
3
+ external_id: string;
4
+ display_name: string;
5
+ email: string;
6
+ password: string;
7
+ roles: {
8
+ role: string;
9
+ type: "superadmin";
10
+ }[];
11
+ oauth_provider?: undefined;
12
+ oauth_provider_id?: undefined;
13
+ } | {
14
+ external_id: string;
15
+ display_name: string;
16
+ email: string;
17
+ password: string;
18
+ roles: {
19
+ role: string;
20
+ type: "admin";
21
+ }[];
22
+ oauth_provider?: undefined;
23
+ oauth_provider_id?: undefined;
24
+ } | {
25
+ external_id: string;
26
+ display_name: string;
27
+ email: string;
28
+ password: string;
29
+ roles: {
30
+ role: string;
31
+ type: "member";
32
+ }[];
33
+ oauth_provider?: undefined;
34
+ oauth_provider_id?: undefined;
35
+ } | {
36
+ external_id: string;
37
+ display_name: string;
38
+ email: string;
39
+ password: string;
40
+ oauth_provider: string;
41
+ oauth_provider_id: string;
42
+ roles: {
43
+ role: string;
44
+ type: "superadmin";
45
+ }[];
46
+ })[];
47
+ export declare const SEED_ROLES: string[];
48
+ export type SeedWorkflowName = 'reviewContent' | 'kitchenSink' | 'basicEcho' | 'basicSignal';
49
+ export declare const SEED_ENVELOPES: Array<{
50
+ workflowName: SeedWorkflowName;
51
+ taskQueue: string;
52
+ envelope: LTEnvelope;
53
+ label: string;
54
+ }>;
55
+ export declare const SEED_CHAINS: string[][];
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEED_CHAINS = exports.SEED_ENVELOPES = exports.SEED_ROLES = exports.SEED_USERS = void 0;
4
+ // ── Seed users ───────────────────────────────────────────────────────────────
5
+ exports.SEED_USERS = [
6
+ {
7
+ external_id: 'superadmin',
8
+ display_name: 'Super Admin',
9
+ email: 'admin@longtail.local',
10
+ password: 'l0ngt@1l',
11
+ roles: [{ role: 'superadmin', type: 'superadmin' }],
12
+ },
13
+ {
14
+ external_id: 'admin',
15
+ display_name: 'Admin User',
16
+ email: 'admin-user@longtail.local',
17
+ password: 'l0ngt@1l',
18
+ roles: [{ role: 'admin', type: 'admin' }],
19
+ },
20
+ {
21
+ external_id: 'engineer',
22
+ display_name: 'Engineer User',
23
+ email: 'engineer@longtail.local',
24
+ password: 'l0ngt@1l',
25
+ roles: [{ role: 'engineer', type: 'member' }],
26
+ },
27
+ {
28
+ external_id: 'reviewer',
29
+ display_name: 'Reviewer User',
30
+ email: 'reviewer@longtail.local',
31
+ password: 'l0ngt@1l',
32
+ roles: [{ role: 'reviewer', type: 'member' }],
33
+ },
34
+ {
35
+ external_id: 'mock:test-user-1',
36
+ display_name: 'Alice Test',
37
+ email: 'alice@test.local',
38
+ password: 'l0ngt@1l',
39
+ oauth_provider: 'mock',
40
+ oauth_provider_id: 'test-user-1',
41
+ roles: [{ role: 'superadmin', type: 'superadmin' }],
42
+ },
43
+ ];
44
+ exports.SEED_ROLES = ['reviewer', 'engineer', 'admin', 'superadmin'];
45
+ exports.SEED_ENVELOPES = [
46
+ // -- Process 1: Clean Review
47
+ {
48
+ label: 'Process 1 — Clean Review',
49
+ workflowName: 'reviewContent',
50
+ taskQueue: 'long-tail-examples',
51
+ envelope: {
52
+ data: {
53
+ contentId: 'process-clean-001',
54
+ content: 'This is a well-researched article about renewable energy solutions for urban environments. It covers solar panels, wind turbines, and energy storage with thorough citations and balanced analysis.',
55
+ contentType: 'article',
56
+ },
57
+ metadata: {
58
+ source: 'seed',
59
+ process: 'clean-review',
60
+ description: 'Happy path — AI auto-approves high-quality content',
61
+ },
62
+ },
63
+ },
64
+ // -- Process 2: Flagged for Review
65
+ {
66
+ label: 'Process 2 — Flagged for Review',
67
+ workflowName: 'reviewContent',
68
+ taskQueue: 'long-tail-examples',
69
+ envelope: {
70
+ data: {
71
+ contentId: 'process-flagged-001',
72
+ content: 'REVIEW_ME This user-submitted blog post discusses alternative medicine claims without citing peer-reviewed sources. The AI flagged it for human review.',
73
+ contentType: 'blog_post',
74
+ },
75
+ metadata: {
76
+ source: 'seed',
77
+ process: 'flagged-review',
78
+ description: 'AI flags content for human review. Log in as reviewer (reviewer/l0ngt@1l) and approve or reject.',
79
+ },
80
+ },
81
+ },
82
+ // -- Process 3: Wrong Language -> Durable MCP
83
+ {
84
+ label: 'Process 3 — Wrong Language',
85
+ workflowName: 'reviewContent',
86
+ taskQueue: 'long-tail-examples',
87
+ envelope: {
88
+ data: {
89
+ contentId: 'process-language-001',
90
+ content: 'WRONG_LANGUAGE La energía renovable es el futuro de las ciudades sostenibles. Los paneles solares y las turbinas eólicas pueden reducir significativamente la huella de carbono urbana cuando se combinan con sistemas modernos de almacenamiento de energía.',
91
+ contentType: 'article',
92
+ },
93
+ metadata: {
94
+ source: 'seed',
95
+ process: 'wrong-language',
96
+ description: 'Content arrived in the wrong language. Walk the escalation chain: reviewer → admin → engineer. As engineer, check "Request AI Triage" and describe: "Content is in Spanish, needs translation to English."',
97
+ },
98
+ },
99
+ },
100
+ // -- Process 4: Kitchen Sink -> Dynamic Triage
101
+ {
102
+ label: 'Process 4 — Dynamic Triage',
103
+ workflowName: 'kitchenSink',
104
+ taskQueue: 'long-tail-examples',
105
+ envelope: {
106
+ data: {
107
+ name: 'Triage Demo',
108
+ mode: 'full',
109
+ },
110
+ metadata: {
111
+ source: 'seed',
112
+ process: 'dynamic-triage',
113
+ description: 'As reviewer, check "Request AI Triage" and write: "This looks fine, just approve it."',
114
+ },
115
+ },
116
+ },
117
+ // -- Process 5: Basic Echo
118
+ {
119
+ label: 'Process 5 — Basic Echo',
120
+ workflowName: 'basicEcho',
121
+ taskQueue: 'long-tail-examples',
122
+ envelope: {
123
+ data: {
124
+ message: 'Hello from the seed!',
125
+ sleepSeconds: 2,
126
+ },
127
+ metadata: {
128
+ source: 'seed',
129
+ process: 'basic-echo',
130
+ description: 'Minimal durable workflow — echoes a message and reveals IAM context.',
131
+ },
132
+ },
133
+ },
134
+ // -- Process 6: Basic Signal
135
+ {
136
+ label: 'Process 6 — Basic Signal',
137
+ workflowName: 'basicSignal',
138
+ taskQueue: 'long-tail-examples',
139
+ envelope: {
140
+ data: {
141
+ message: 'Seed deployment needs approval before proceeding.',
142
+ role: 'reviewer',
143
+ },
144
+ metadata: {
145
+ certified: false,
146
+ source: 'seed',
147
+ process: 'basic-signal',
148
+ description: 'Lightweight signal-based escalation — workflow stays running, no interceptor. Claim the escalation, fill the form, and resolve to resume the workflow.',
149
+ },
150
+ },
151
+ },
152
+ ];
153
+ // Escalation chains: reviewer -> admin -> engineer (and cross-links)
154
+ exports.SEED_CHAINS = [
155
+ ['reviewer', 'admin'],
156
+ ['reviewer', 'engineer'],
157
+ ['admin', 'engineer'],
158
+ ['admin', 'superadmin'],
159
+ ['engineer', 'admin'],
160
+ ['engineer', 'superadmin'],
161
+ ];
@@ -8,176 +8,19 @@ const db_1 = require("../lib/db");
8
8
  const user_1 = require("../services/user");
9
9
  const roles_1 = require("../services/user/roles");
10
10
  const role_1 = require("../services/role");
11
- // ── Seed users ───────────────────────────────────────────────────────────────
12
- const SEED_USERS = [
13
- {
14
- external_id: 'superadmin',
15
- display_name: 'Super Admin',
16
- email: 'admin@longtail.local',
17
- password: 'l0ngt@1l',
18
- roles: [{ role: 'superadmin', type: 'superadmin' }],
19
- },
20
- {
21
- external_id: 'admin',
22
- display_name: 'Admin User',
23
- email: 'admin-user@longtail.local',
24
- password: 'l0ngt@1l',
25
- roles: [{ role: 'admin', type: 'admin' }],
26
- },
27
- {
28
- external_id: 'engineer',
29
- display_name: 'Engineer User',
30
- email: 'engineer@longtail.local',
31
- password: 'l0ngt@1l',
32
- roles: [{ role: 'engineer', type: 'member' }],
33
- },
34
- {
35
- external_id: 'reviewer',
36
- display_name: 'Reviewer User',
37
- email: 'reviewer@longtail.local',
38
- password: 'l0ngt@1l',
39
- roles: [{ role: 'reviewer', type: 'member' }],
40
- },
41
- {
42
- external_id: 'mock:test-user-1',
43
- display_name: 'Alice Test',
44
- email: 'alice@test.local',
45
- password: 'l0ngt@1l',
46
- oauth_provider: 'mock',
47
- oauth_provider_id: 'test-user-1',
48
- roles: [{ role: 'superadmin', type: 'superadmin' }],
49
- },
50
- ];
51
- const SEED_ROLES = ['reviewer', 'engineer', 'admin', 'superadmin'];
52
- const SEED_ENVELOPES = [
53
- // -- Process 1: Clean Review
54
- {
55
- label: 'Process 1 — Clean Review',
56
- workflowName: 'reviewContent',
57
- taskQueue: 'long-tail-examples',
58
- envelope: {
59
- data: {
60
- contentId: 'process-clean-001',
61
- content: 'This is a well-researched article about renewable energy solutions for urban environments. It covers solar panels, wind turbines, and energy storage with thorough citations and balanced analysis.',
62
- contentType: 'article',
63
- },
64
- metadata: {
65
- source: 'seed',
66
- process: 'clean-review',
67
- description: 'Happy path — AI auto-approves high-quality content',
68
- },
69
- },
70
- },
71
- // -- Process 2: Flagged for Review
72
- {
73
- label: 'Process 2 — Flagged for Review',
74
- workflowName: 'reviewContent',
75
- taskQueue: 'long-tail-examples',
76
- envelope: {
77
- data: {
78
- contentId: 'process-flagged-001',
79
- content: 'REVIEW_ME This user-submitted blog post discusses alternative medicine claims without citing peer-reviewed sources. The AI flagged it for human review.',
80
- contentType: 'blog_post',
81
- },
82
- metadata: {
83
- source: 'seed',
84
- process: 'flagged-review',
85
- description: 'AI flags content for human review. Log in as reviewer (reviewer/l0ngt@1l) and approve or reject.',
86
- },
87
- },
88
- },
89
- // -- Process 3: Wrong Language -> Durable MCP
90
- {
91
- label: 'Process 3 — Wrong Language',
92
- workflowName: 'reviewContent',
93
- taskQueue: 'long-tail-examples',
94
- envelope: {
95
- data: {
96
- contentId: 'process-language-001',
97
- content: 'WRONG_LANGUAGE La energía renovable es el futuro de las ciudades sostenibles. Los paneles solares y las turbinas eólicas pueden reducir significativamente la huella de carbono urbana cuando se combinan con sistemas modernos de almacenamiento de energía.',
98
- contentType: 'article',
99
- },
100
- metadata: {
101
- source: 'seed',
102
- process: 'wrong-language',
103
- description: 'Content arrived in the wrong language. Walk the escalation chain: reviewer → admin → engineer. As engineer, check "Request AI Triage" and describe: "Content is in Spanish, needs translation to English."',
104
- },
105
- },
106
- },
107
- // -- Process 4: Kitchen Sink -> Dynamic Triage
108
- {
109
- label: 'Process 4 — Dynamic Triage',
110
- workflowName: 'kitchenSink',
111
- taskQueue: 'long-tail-examples',
112
- envelope: {
113
- data: {
114
- name: 'Triage Demo',
115
- mode: 'full',
116
- },
117
- metadata: {
118
- source: 'seed',
119
- process: 'dynamic-triage',
120
- description: 'As reviewer, check "Request AI Triage" and write: "This looks fine, just approve it."',
121
- },
122
- },
123
- },
124
- // -- Process 5: Basic Echo
125
- {
126
- label: 'Process 5 — Basic Echo',
127
- workflowName: 'basicEcho',
128
- taskQueue: 'long-tail-examples',
129
- envelope: {
130
- data: {
131
- message: 'Hello from the seed!',
132
- sleepSeconds: 2,
133
- },
134
- metadata: {
135
- source: 'seed',
136
- process: 'basic-echo',
137
- description: 'Minimal durable workflow — echoes a message and reveals IAM context.',
138
- },
139
- },
140
- },
141
- // -- Process 6: Basic Signal
142
- {
143
- label: 'Process 6 — Basic Signal',
144
- workflowName: 'basicSignal',
145
- taskQueue: 'long-tail-examples',
146
- envelope: {
147
- data: {
148
- message: 'Seed deployment needs approval before proceeding.',
149
- role: 'reviewer',
150
- },
151
- metadata: {
152
- certified: false,
153
- source: 'seed',
154
- process: 'basic-signal',
155
- description: 'Lightweight signal-based escalation — workflow stays running, no interceptor. Claim the escalation, fill the form, and resolve to resume the workflow.',
156
- },
157
- },
158
- },
159
- ];
160
- // Escalation chains: reviewer -> admin -> engineer (and cross-links)
161
- const SEED_CHAINS = [
162
- ['reviewer', 'admin'],
163
- ['reviewer', 'engineer'],
164
- ['admin', 'engineer'],
165
- ['admin', 'superadmin'],
166
- ['engineer', 'admin'],
167
- ['engineer', 'superadmin'],
168
- ];
11
+ const seed_data_1 = require("./seed-data");
169
12
  // ── Seed functions ───────────────────────────────────────────────────────────
170
13
  async function seedRoles() {
171
- for (const role of SEED_ROLES) {
14
+ for (const role of seed_data_1.SEED_ROLES) {
172
15
  try {
173
16
  await (0, role_1.createRole)(role);
174
17
  }
175
18
  catch { /* ON CONFLICT DO NOTHING handles duplicates */ }
176
19
  }
177
- logger_1.loggerRegistry.info(`[examples] roles verified (${SEED_ROLES.join(', ')})`);
20
+ logger_1.loggerRegistry.info(`[examples] roles verified (${seed_data_1.SEED_ROLES.join(', ')})`);
178
21
  }
179
22
  async function seedUsers() {
180
- for (const userDef of SEED_USERS) {
23
+ for (const userDef of seed_data_1.SEED_USERS) {
181
24
  try {
182
25
  const existing = await (0, user_1.getUserByExternalId)(userDef.external_id);
183
26
  if (existing) {
@@ -204,13 +47,13 @@ async function seedUsers() {
204
47
  }
205
48
  }
206
49
  async function seedEscalationChains() {
207
- for (const [source, target] of SEED_CHAINS) {
50
+ for (const [source, target] of seed_data_1.SEED_CHAINS) {
208
51
  try {
209
52
  await (0, role_1.addEscalationChain)(source, target);
210
53
  }
211
54
  catch { /* ON CONFLICT DO NOTHING handles duplicates */ }
212
55
  }
213
- logger_1.loggerRegistry.info(`[examples] escalation chains verified (${SEED_CHAINS.length} entries)`);
56
+ logger_1.loggerRegistry.info(`[examples] escalation chains verified (${seed_data_1.SEED_CHAINS.length} entries)`);
214
57
  }
215
58
  /**
216
59
  * Seed example workflow configs into lt_config_workflows.
@@ -269,7 +112,7 @@ async function seedExamples(client) {
269
112
  await seedRoles();
270
113
  await seedUsers();
271
114
  await seedEscalationChains();
272
- for (const { workflowName, taskQueue, envelope, label } of SEED_ENVELOPES) {
115
+ for (const { workflowName, taskQueue, envelope, label } of seed_data_1.SEED_ENVELOPES) {
273
116
  try {
274
117
  const workflowId = `${workflowName}-seed-${hotmesh_1.Durable.guid().slice(0, 8)}`;
275
118
  await client.workflow.start({
@@ -0,0 +1,23 @@
1
+ export interface StoredCredentials {
2
+ server: string;
3
+ token: string;
4
+ username: string;
5
+ password: string;
6
+ expiresAt: string;
7
+ }
8
+ export interface AuthContext {
9
+ server: string;
10
+ token: string;
11
+ }
12
+ /** Resolve auth from env → stored credentials → error */
13
+ export declare function resolveAuth(): Promise<AuthContext>;
14
+ /** Interactive or flag-based login */
15
+ export declare function login(options: {
16
+ server?: string;
17
+ username?: string;
18
+ password?: string;
19
+ }): Promise<void>;
20
+ /** Clear stored credentials */
21
+ export declare function logout(): void;
22
+ /** Get the current server URL (for display purposes) */
23
+ export declare function getServerUrl(): string | null;
@@ -0,0 +1,167 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.resolveAuth = resolveAuth;
40
+ exports.login = login;
41
+ exports.logout = logout;
42
+ exports.getServerUrl = getServerUrl;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const picocolors_1 = __importDefault(require("picocolors"));
47
+ const CONFIG_DIR = path.join(os.homedir(), '.config', 'longtail');
48
+ const CREDS_FILE = path.join(CONFIG_DIR, 'credentials.json');
49
+ /** Resolve auth from env → stored credentials → error */
50
+ async function resolveAuth() {
51
+ // 1. Environment variables (CI / scripts)
52
+ if (process.env.LT_TOKEN && process.env.LT_SERVER) {
53
+ return { server: process.env.LT_SERVER, token: process.env.LT_TOKEN };
54
+ }
55
+ // 2. Stored credentials
56
+ const creds = loadCredentials();
57
+ if (!creds) {
58
+ throw new Error('Not logged in. Run: ltc login');
59
+ }
60
+ // 3. Check expiry, auto-refresh if needed
61
+ if (isExpired(creds.token)) {
62
+ const fresh = await loginRequest(creds.server, creds.username, creds.password);
63
+ saveCredentials({ ...creds, token: fresh.token, expiresAt: fresh.expiresAt });
64
+ return { server: creds.server, token: fresh.token };
65
+ }
66
+ return { server: creds.server, token: creds.token };
67
+ }
68
+ /** Interactive or flag-based login */
69
+ async function login(options) {
70
+ let { server, username, password } = options;
71
+ // Interactive prompts for missing values
72
+ if (!server) {
73
+ server = await prompt('Server URL', 'http://localhost:3000');
74
+ }
75
+ if (!username) {
76
+ username = await prompt('Username');
77
+ }
78
+ if (!password) {
79
+ password = await prompt('Password');
80
+ }
81
+ server = server.replace(/\/+$/, '');
82
+ const result = await loginRequest(server, username, password);
83
+ saveCredentials({
84
+ server,
85
+ token: result.token,
86
+ username: username,
87
+ password: password,
88
+ expiresAt: result.expiresAt,
89
+ });
90
+ console.log(`\n ${picocolors_1.default.green('✓')} Logged in as ${picocolors_1.default.bold(result.displayName || username)} at ${picocolors_1.default.dim(server)}`);
91
+ console.log(picocolors_1.default.dim(` Token expires: ${result.expiresAt}\n`));
92
+ }
93
+ /** Clear stored credentials */
94
+ function logout() {
95
+ if (fs.existsSync(CREDS_FILE)) {
96
+ fs.unlinkSync(CREDS_FILE);
97
+ console.log(`\n ${picocolors_1.default.green('✓')} Logged out. Credentials cleared.\n`);
98
+ }
99
+ else {
100
+ console.log(picocolors_1.default.dim('\n No stored credentials found.\n'));
101
+ }
102
+ }
103
+ /** Get the current server URL (for display purposes) */
104
+ function getServerUrl() {
105
+ if (process.env.LT_SERVER)
106
+ return process.env.LT_SERVER;
107
+ const creds = loadCredentials();
108
+ return creds?.server || null;
109
+ }
110
+ // ── Internal ─────────────────────────────────────────────────────────────
111
+ async function loginRequest(server, username, password) {
112
+ const res = await fetch(`${server}/api/auth/login`, {
113
+ method: 'POST',
114
+ headers: { 'Content-Type': 'application/json' },
115
+ body: JSON.stringify({ username, password }),
116
+ });
117
+ if (!res.ok) {
118
+ const body = await res.json().catch(() => ({}));
119
+ throw new Error(body.error || `Login failed (HTTP ${res.status})`);
120
+ }
121
+ const data = await res.json();
122
+ const token = data.token;
123
+ // Decode JWT to get expiry
124
+ const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
125
+ const expiresAt = new Date(payload.exp * 1000).toISOString();
126
+ return {
127
+ token,
128
+ expiresAt,
129
+ displayName: data.user?.display_name || data.user?.external_id,
130
+ };
131
+ }
132
+ function loadCredentials() {
133
+ try {
134
+ if (!fs.existsSync(CREDS_FILE))
135
+ return null;
136
+ return JSON.parse(fs.readFileSync(CREDS_FILE, 'utf-8'));
137
+ }
138
+ catch {
139
+ return null;
140
+ }
141
+ }
142
+ function saveCredentials(creds) {
143
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
144
+ fs.writeFileSync(CREDS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });
145
+ }
146
+ function isExpired(token) {
147
+ try {
148
+ const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
149
+ return Date.now() >= payload.exp * 1000 - 60_000; // 1min buffer
150
+ }
151
+ catch {
152
+ return true;
153
+ }
154
+ }
155
+ async function prompt(label, defaultValue) {
156
+ const suffix = defaultValue ? picocolors_1.default.dim(` (${defaultValue})`) : '';
157
+ process.stdout.write(` ${label}${suffix}: `);
158
+ return new Promise((resolve) => {
159
+ let data = '';
160
+ process.stdin.setEncoding('utf-8');
161
+ process.stdin.once('data', (chunk) => {
162
+ data = chunk.toString().trim();
163
+ resolve(data || defaultValue || '');
164
+ });
165
+ process.stdin.resume();
166
+ });
167
+ }
@@ -0,0 +1,6 @@
1
+ export declare class CLIError extends Error {
2
+ status?: number | undefined;
3
+ constructor(message: string, status?: number | undefined);
4
+ }
5
+ /** Authenticated fetch against the Long Tail API */
6
+ export declare function apiFetch<T = any>(path: string, options?: RequestInit): Promise<T>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLIError = void 0;
4
+ exports.apiFetch = apiFetch;
5
+ const auth_1 = require("./auth");
6
+ class CLIError extends Error {
7
+ constructor(message, status) {
8
+ super(message);
9
+ this.status = status;
10
+ this.name = 'CLIError';
11
+ }
12
+ }
13
+ exports.CLIError = CLIError;
14
+ /** Authenticated fetch against the Long Tail API */
15
+ async function apiFetch(path, options) {
16
+ const { server, token } = await (0, auth_1.resolveAuth)();
17
+ const url = `${server}/api${path}`;
18
+ const res = await fetch(url, {
19
+ ...options,
20
+ headers: {
21
+ 'Authorization': `Bearer ${token}`,
22
+ 'Content-Type': 'application/json',
23
+ ...options?.headers,
24
+ },
25
+ });
26
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
27
+ if (!res.ok) {
28
+ throw new CLIError(body.error || `HTTP ${res.status}`, res.status);
29
+ }
30
+ return body;
31
+ }
@@ -0,0 +1,19 @@
1
+ interface ListOptions {
2
+ status?: string;
3
+ role?: string;
4
+ limit?: string;
5
+ json?: boolean;
6
+ quiet?: boolean;
7
+ }
8
+ export declare function listEscalations(opts: ListOptions): Promise<void>;
9
+ export declare function getEscalation(id: string, opts: {
10
+ json?: boolean;
11
+ }): Promise<void>;
12
+ export declare function claimEscalation(id: string, opts: {
13
+ duration?: string;
14
+ }): Promise<void>;
15
+ export declare function releaseEscalation(id: string): Promise<void>;
16
+ export declare function resolveEscalation(id: string, opts: {
17
+ data?: string;
18
+ }): Promise<void>;
19
+ export {};