@hotmeshio/long-tail 0.1.4 → 0.1.5

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 (613) hide show
  1. package/README.md +1 -1
  2. package/build/examples/seed.js +1 -1
  3. package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
  4. package/build/examples/workflows/basic-echo/activities.js +7 -7
  5. package/build/examples/workflows/basic-echo/index.js +1 -1
  6. package/build/examples/workflows/kitchen-sink/index.js +2 -2
  7. package/build/index.d.ts +11 -10
  8. package/build/index.js +13 -12
  9. package/build/lib/db/index.d.ts +18 -0
  10. package/build/{services → lib}/db/index.js +9 -0
  11. package/build/{services → lib}/db/migrate.js +3 -3
  12. package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
  13. package/build/{services → lib}/telemetry/honeycomb.js +2 -2
  14. package/build/modules/defaults.d.ts +2 -0
  15. package/build/modules/defaults.js +3 -1
  16. package/build/routes/controlplane.js +1 -1
  17. package/build/routes/dba.js +4 -0
  18. package/build/routes/docs.d.ts +2 -0
  19. package/build/routes/docs.js +87 -0
  20. package/build/routes/escalations/bulk.js +120 -202
  21. package/build/routes/escalations/resolve.js +1 -1
  22. package/build/routes/escalations/single.js +1 -1
  23. package/build/routes/files.js +1 -1
  24. package/build/routes/index.js +2 -0
  25. package/build/routes/insight.js +2 -1
  26. package/build/routes/mcp.js +3 -2
  27. package/build/routes/oauth.js +1 -1
  28. package/build/routes/settings.js +4 -4
  29. package/build/routes/workflows/discovery.js +3 -3
  30. package/build/routes/workflows/invocation.js +1 -1
  31. package/build/routes/yaml-workflows/crud.js +1 -1
  32. package/build/routes/yaml-workflows/deployment.js +25 -0
  33. package/build/services/auth/bot-api-key.js +1 -1
  34. package/build/services/auth/index.d.ts +4 -0
  35. package/build/services/auth/index.js +17 -0
  36. package/build/services/auth/service-token.js +1 -1
  37. package/build/services/config/provider.js +1 -1
  38. package/build/services/config/read.js +1 -1
  39. package/build/services/config/write.js +1 -1
  40. package/build/services/controlplane/index.js +3 -4
  41. package/build/services/controlplane/quorum-bridge.js +2 -2
  42. package/build/services/cron/index.js +4 -5
  43. package/build/services/dba.d.ts +4 -0
  44. package/build/services/dba.js +3 -6
  45. package/build/services/escalation/bulk.js +1 -1
  46. package/build/services/escalation/crud.js +1 -1
  47. package/build/services/escalation/queries.js +1 -1
  48. package/build/services/export/client.js +2 -5
  49. package/build/services/export/index.js +14 -2
  50. package/build/services/hotmesh-utils.js +1 -1
  51. package/build/services/iam/bots.js +6 -12
  52. package/build/services/iam/context.d.ts +1 -1
  53. package/build/services/iam/context.js +5 -5
  54. package/build/services/iam/credentials.js +1 -1
  55. package/build/services/iam/ephemeral.js +8 -15
  56. package/build/services/iam/principal.js +3 -10
  57. package/build/services/iam/resolve.js +1 -1
  58. package/build/services/iam/sql.d.ts +10 -0
  59. package/build/services/iam/sql.js +42 -0
  60. package/build/services/insight/index.d.ts +1 -0
  61. package/build/services/insight/index.js +4 -6
  62. package/build/services/interceptor/activities/escalation.js +1 -1
  63. package/build/services/interceptor/activities/task.js +9 -6
  64. package/build/services/interceptor/activities/workflow.js +4 -5
  65. package/build/services/interceptor/activity-interceptor.d.ts +1 -1
  66. package/build/services/interceptor/activity-interceptor.js +5 -5
  67. package/build/services/interceptor/completion.js +1 -1
  68. package/build/services/interceptor/escalation.js +1 -1
  69. package/build/services/interceptor/index.js +4 -4
  70. package/build/services/interceptor/lifecycle.js +1 -1
  71. package/build/services/maintenance/index.js +4 -5
  72. package/build/services/mcp/adapter.js +1 -16
  73. package/build/services/mcp/client/connection.d.ts +1 -1
  74. package/build/services/mcp/client/connection.js +2 -2
  75. package/build/services/mcp/client/tools.js +1 -1
  76. package/build/services/mcp/db-server/index.js +1 -1
  77. package/build/services/mcp/db-server/tools.js +17 -4
  78. package/build/services/mcp/db.js +1 -1
  79. package/build/services/mcp/playwright-server/index.js +1 -1
  80. package/build/services/mcp/playwright-server/lifecycle.js +1 -1
  81. package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
  82. package/build/services/mcp/playwright-server/tools.js +1 -1
  83. package/build/services/mcp/server.js +1 -1
  84. package/build/services/mcp/sql.d.ts +6 -0
  85. package/build/services/mcp/sql.js +34 -1
  86. package/build/services/mcp/workflow-compiler-server.js +1 -1
  87. package/build/services/mcp/workflow-server.js +1 -1
  88. package/build/services/mcp-runs/execution-builder.js +8 -6
  89. package/build/services/mcp-runs/queries.js +2 -2
  90. package/build/services/mcp-runs/sql.d.ts +4 -1
  91. package/build/services/mcp-runs/sql.js +23 -2
  92. package/build/services/namespace/index.js +1 -1
  93. package/build/services/oauth/db.js +9 -37
  94. package/build/services/oauth/index.js +1 -1
  95. package/build/services/oauth/providers/registry.js +1 -1
  96. package/build/services/oauth/sql.d.ts +7 -0
  97. package/build/services/oauth/sql.js +32 -0
  98. package/build/services/orchestrator/index.js +3 -3
  99. package/build/services/role/index.js +1 -1
  100. package/build/services/task/crud.js +1 -1
  101. package/build/services/task/process.js +1 -1
  102. package/build/services/task/resolve.js +1 -1
  103. package/build/services/user/auth.js +1 -1
  104. package/build/services/user/crud.js +1 -1
  105. package/build/services/user/rbac.js +1 -1
  106. package/build/services/user/roles.js +1 -1
  107. package/build/services/user/sql.d.ts +2 -0
  108. package/build/services/user/sql.js +3 -1
  109. package/build/services/yaml-workflow/db-utils.js +1 -1
  110. package/build/services/yaml-workflow/db.js +1 -1
  111. package/build/services/yaml-workflow/deployer-helpers.js +1 -1
  112. package/build/services/yaml-workflow/deployer.js +4 -4
  113. package/build/services/yaml-workflow/generator.js +1 -1
  114. package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
  115. package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
  116. package/build/services/yaml-workflow/input-analyzer.js +16 -3
  117. package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
  118. package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
  119. package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
  120. package/build/services/yaml-workflow/pipeline/extract.js +5 -3
  121. package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
  122. package/build/services/yaml-workflow/pipeline/index.js +22 -0
  123. package/build/services/yaml-workflow/pipeline/validate.js +2 -2
  124. package/build/services/yaml-workflow/workers/callbacks.js +1 -1
  125. package/build/services/yaml-workflow/workers/events.js +2 -2
  126. package/build/services/yaml-workflow/workers/register.js +8 -8
  127. package/build/start/adapters.js +7 -7
  128. package/build/start/index.js +4 -4
  129. package/build/start/server.js +1 -1
  130. package/build/start/workers.d.ts +1 -2
  131. package/build/start/workers.js +8 -7
  132. package/build/system/activities/claude-code.js +1 -1
  133. package/build/system/activities/file-storage.js +1 -1
  134. package/build/system/activities/knowledge.d.ts +58 -0
  135. package/build/system/activities/knowledge.js +128 -0
  136. package/build/system/activities/sql.d.ts +9 -0
  137. package/build/system/activities/sql.js +41 -0
  138. package/build/system/activities/triage/context.js +1 -1
  139. package/build/system/activities/triage/discovery.d.ts +2 -14
  140. package/build/system/activities/triage/discovery.js +5 -161
  141. package/build/system/activities/triage/llm.d.ts +1 -8
  142. package/build/system/activities/triage/llm.js +2 -28
  143. package/build/system/activities/triage/tools.d.ts +1 -17
  144. package/build/system/activities/triage/tools.js +8 -167
  145. package/build/system/index.js +5 -4
  146. package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
  147. package/build/system/mcp-servers/admin/escalations.js +149 -0
  148. package/build/system/mcp-servers/admin/index.d.ts +31 -0
  149. package/build/system/mcp-servers/admin/index.js +80 -0
  150. package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
  151. package/build/system/mcp-servers/admin/maintenance.js +58 -0
  152. package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
  153. package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
  154. package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
  155. package/build/system/mcp-servers/admin/schemas.js +177 -0
  156. package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
  157. package/build/system/mcp-servers/admin/tasks.js +112 -0
  158. package/build/system/mcp-servers/admin/users.d.ts +5 -0
  159. package/build/system/mcp-servers/admin/users.js +167 -0
  160. package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
  161. package/build/system/mcp-servers/admin/workflow-config.js +118 -0
  162. package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
  163. package/build/system/mcp-servers/admin/workflows.js +138 -0
  164. package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
  165. package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
  166. package/build/system/mcp-servers/claude-code.js +1 -1
  167. package/build/system/mcp-servers/db-query/index.js +1 -1
  168. package/build/system/mcp-servers/db-query/tools.js +17 -4
  169. package/build/system/mcp-servers/docs.d.ts +5 -0
  170. package/build/system/mcp-servers/docs.js +147 -0
  171. package/build/system/mcp-servers/file-storage.js +1 -1
  172. package/build/system/mcp-servers/http-fetch.js +1 -1
  173. package/build/system/mcp-servers/human-queue.js +1 -1
  174. package/build/system/mcp-servers/knowledge.d.ts +4 -0
  175. package/build/system/mcp-servers/knowledge.js +137 -0
  176. package/build/system/mcp-servers/oauth.js +1 -1
  177. package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
  178. package/build/system/mcp-servers/playwright/index.js +1 -1
  179. package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
  180. package/build/system/mcp-servers/playwright/schemas.js +3 -0
  181. package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
  182. package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
  183. package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
  184. package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
  185. package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
  186. package/build/system/mcp-servers/playwright-cli/index.js +1 -1
  187. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
  188. package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
  189. package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
  190. package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
  191. package/build/system/mcp-servers/translation.d.ts +14 -0
  192. package/build/system/mcp-servers/translation.js +130 -0
  193. package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
  194. package/build/system/mcp-servers/vision-prompts.js +9 -0
  195. package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
  196. package/build/system/mcp-servers/vision.js +221 -0
  197. package/build/system/mcp-servers/workflow-compiler.js +1 -1
  198. package/build/system/mcp-servers/workflow.js +1 -1
  199. package/build/system/seed/index.js +13 -2
  200. package/build/system/seed/server-definitions.d.ts +1954 -322
  201. package/build/system/seed/server-definitions.js +65 -34
  202. package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
  203. package/build/system/seed/tool-manifests-admin.js +45 -0
  204. package/build/system/seed/tool-manifests-browser.d.ts +1 -1
  205. package/build/system/seed/tool-manifests-browser.js +3 -3
  206. package/build/system/seed/tool-manifests-data.d.ts +62 -21
  207. package/build/system/seed/tool-manifests-data.js +55 -17
  208. package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
  209. package/build/system/seed/tool-manifests-knowledge.js +94 -0
  210. package/build/system/workflows/mcp-deterministic/index.js +1 -1
  211. package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
  212. package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
  213. package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
  214. package/build/system/workflows/mcp-query/activities/llm.js +2 -27
  215. package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
  216. package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
  217. package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
  218. package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
  219. package/build/system/workflows/mcp-query/index.js +55 -5
  220. package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
  221. package/build/system/workflows/mcp-query/prompts.js +5 -32
  222. package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
  223. package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
  224. package/build/system/workflows/mcp-query/types.d.ts +2 -10
  225. package/build/system/workflows/mcp-query/types.js +0 -1
  226. package/build/system/workflows/mcp-query-router/index.js +1 -1
  227. package/build/system/workflows/mcp-triage/index.d.ts +2 -2
  228. package/build/system/workflows/mcp-triage/index.js +39 -7
  229. package/build/system/workflows/mcp-triage/prompts.js +7 -14
  230. package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
  231. package/build/system/workflows/mcp-triage-router/index.js +1 -1
  232. package/build/system/workflows/shared/discovery.d.ts +35 -0
  233. package/build/system/workflows/shared/discovery.js +175 -0
  234. package/build/system/workflows/shared/index.d.ts +7 -0
  235. package/build/system/workflows/shared/index.js +18 -0
  236. package/build/system/workflows/shared/llm-caller.d.ts +8 -0
  237. package/build/system/workflows/shared/llm-caller.js +31 -0
  238. package/build/system/workflows/shared/prompts.d.ts +2 -0
  239. package/build/system/workflows/shared/prompts.js +32 -0
  240. package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
  241. package/build/system/workflows/shared/strategy-advisors.js +109 -0
  242. package/build/system/workflows/shared/tool-executor.d.ts +11 -0
  243. package/build/system/workflows/shared/tool-executor.js +111 -0
  244. package/build/system/workflows/shared/tool-loader.d.ts +19 -0
  245. package/build/system/workflows/shared/tool-loader.js +94 -0
  246. package/build/system/workflows/shared/types.d.ts +9 -0
  247. package/build/system/workflows/shared/types.js +2 -0
  248. package/build/system/workflows/tool-result-guard.d.ts +14 -0
  249. package/build/system/workflows/tool-result-guard.js +78 -0
  250. package/build/tsconfig.tsbuildinfo +1 -1
  251. package/build/types/user.d.ts +2 -0
  252. package/build/vitest.config.d.ts +1 -1
  253. package/build/vitest.integration.config.d.ts +1 -1
  254. package/build/workers/index.js +2 -8
  255. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
  256. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
  257. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
  258. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
  259. package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
  260. package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
  261. package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
  262. package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
  263. package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
  264. package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
  265. package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
  266. package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
  267. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
  268. package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
  269. package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
  270. package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
  271. package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
  272. package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
  273. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
  274. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
  275. package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
  276. package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
  277. package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
  278. package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
  279. package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
  280. package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
  281. package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
  282. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
  283. package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
  284. package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
  285. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
  286. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
  287. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
  288. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
  289. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
  290. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
  291. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
  292. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
  293. package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
  294. package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
  295. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
  296. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
  297. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
  298. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
  299. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
  300. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
  301. package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
  302. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
  303. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
  304. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
  305. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
  306. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
  307. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
  308. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
  309. package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
  310. package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
  311. package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
  312. package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
  313. package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
  314. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
  315. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
  316. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
  317. package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
  318. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
  319. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
  320. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
  321. package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
  322. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
  323. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
  324. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
  325. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
  326. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
  327. package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
  328. package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
  329. package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
  330. package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
  331. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
  332. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
  333. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
  334. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
  335. package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
  336. package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
  337. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
  338. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
  339. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
  340. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
  341. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
  342. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
  343. package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
  344. package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
  345. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
  346. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
  347. package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
  348. package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
  349. package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
  350. package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
  351. package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
  352. package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
  353. package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
  354. package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
  355. package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
  356. package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
  357. package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
  358. package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
  359. package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
  360. package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
  361. package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
  362. package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
  363. package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
  364. package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
  365. package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
  366. package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
  367. package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
  368. package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
  369. package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
  370. package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
  371. package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
  372. package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
  373. package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
  374. package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
  375. package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
  376. package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
  377. package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
  378. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
  379. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
  380. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
  381. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
  382. package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
  383. package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
  384. package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
  385. package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
  386. package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
  387. package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
  388. package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
  389. package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
  390. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
  391. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
  392. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
  393. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
  394. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
  395. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
  396. package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
  397. package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
  398. package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
  399. package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
  400. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  401. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  402. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  403. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  404. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
  405. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
  406. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
  407. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
  408. package/dashboard/dist/index.html +5 -5
  409. package/docs/api/dba.md +81 -0
  410. package/docs/api/escalations.md +575 -0
  411. package/docs/api/exports.md +170 -0
  412. package/docs/api/maintenance.md +93 -0
  413. package/docs/api/mcp-runs.md +128 -0
  414. package/docs/api/mcp-servers.md +195 -0
  415. package/docs/api/namespaces.md +48 -0
  416. package/docs/api/roles.md +390 -0
  417. package/docs/api/service-accounts.md +188 -0
  418. package/docs/api/settings.md +33 -0
  419. package/docs/api/tasks.md +167 -0
  420. package/docs/api/users.md +180 -0
  421. package/docs/api/workflows.md +616 -0
  422. package/docs/api/yaml-workflows.md +312 -0
  423. package/docs/architecture.md +221 -0
  424. package/docs/auth.md +181 -0
  425. package/docs/cloud.md +272 -0
  426. package/docs/compilation.md +136 -0
  427. package/docs/contributing.md +56 -0
  428. package/docs/dashboard.md +145 -0
  429. package/docs/data.md +478 -0
  430. package/docs/escalation-strategies.md +264 -0
  431. package/docs/events.md +251 -0
  432. package/docs/iam.md +222 -0
  433. package/docs/img/01-login.png +0 -0
  434. package/docs/img/02-dashboard-home.png +0 -0
  435. package/docs/img/03-processes-list.png +0 -0
  436. package/docs/img/04-escalations-list.png +0 -0
  437. package/docs/img/05-mcp-servers.png +0 -0
  438. package/docs/img/06-mcp-pipelines.png +0 -0
  439. package/docs/img/07-workflows-list.png +0 -0
  440. package/docs/img/compilation/01-query-submit.png +0 -0
  441. package/docs/img/compilation/02-mcp-servers.png +0 -0
  442. package/docs/img/compilation/03-query-completed.png +0 -0
  443. package/docs/img/compilation/04-wizard-original.png +0 -0
  444. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  445. package/docs/img/compilation/06-wizard-profile.png +0 -0
  446. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  447. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  448. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  449. package/docs/img/compilation/10-wizard-verify.png +0 -0
  450. package/docs/logging.md +110 -0
  451. package/docs/maintenance.md +221 -0
  452. package/docs/mcp.md +715 -0
  453. package/docs/oauth-and-delegation.md +469 -0
  454. package/docs/telemetry.md +144 -0
  455. package/docs/workflows.md +695 -0
  456. package/lib/db/schemas/015_knowledge.sql +23 -0
  457. package/package.json +8 -9
  458. package/build/services/db/index.d.ts +0 -3
  459. package/build/services/mcp/vision-server.d.ts +0 -15
  460. package/build/services/mcp/vision-server.js +0 -214
  461. package/build/system/mcp-servers/document-vision.js +0 -228
  462. package/build/system/mcp-servers/prompts.d.ts +0 -4
  463. package/build/system/mcp-servers/prompts.js +0 -10
  464. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
  465. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
  466. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
  467. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
  468. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
  469. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
  470. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
  471. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
  472. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
  473. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
  474. package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
  475. package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
  476. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
  477. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
  478. package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
  479. package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
  480. package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
  481. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  482. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
  483. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
  484. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
  485. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
  486. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
  487. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
  488. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
  489. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
  490. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
  491. package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
  492. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
  493. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
  494. package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
  495. package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
  496. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  497. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
  498. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
  499. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
  500. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
  501. package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
  502. package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
  503. package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
  504. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  505. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
  506. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
  507. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  508. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
  509. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
  510. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  511. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
  512. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
  513. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
  514. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
  515. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
  516. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
  517. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
  518. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
  519. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
  520. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
  521. package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
  522. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
  523. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
  524. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
  525. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
  526. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
  527. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
  528. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
  529. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
  530. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
  531. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
  532. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
  533. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
  534. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
  535. package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
  536. package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
  537. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
  538. package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
  539. package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
  540. package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
  541. package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
  542. package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
  543. package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
  544. package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
  545. package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
  546. package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
  547. package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
  548. package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
  549. package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
  550. package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
  551. package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
  552. package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
  553. package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
  554. package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
  555. package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
  556. package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
  557. package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
  558. package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
  559. package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
  560. package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
  561. package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
  562. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
  563. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
  564. package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
  565. package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
  566. package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
  567. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
  568. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  569. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  570. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
  571. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
  572. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
  573. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
  574. /package/build/{services → lib}/db/migrate.d.ts +0 -0
  575. /package/build/{services → lib}/events/index.d.ts +0 -0
  576. /package/build/{services → lib}/events/index.js +0 -0
  577. /package/build/{services → lib}/events/memory.d.ts +0 -0
  578. /package/build/{services → lib}/events/memory.js +0 -0
  579. /package/build/{services → lib}/events/nats.d.ts +0 -0
  580. /package/build/{services → lib}/events/nats.js +0 -0
  581. /package/build/{services → lib}/events/publish.d.ts +0 -0
  582. /package/build/{services → lib}/events/publish.js +0 -0
  583. /package/build/{services → lib}/events/socketio.d.ts +0 -0
  584. /package/build/{services → lib}/events/socketio.js +0 -0
  585. /package/build/{services → lib}/logger/index.d.ts +0 -0
  586. /package/build/{services → lib}/logger/index.js +0 -0
  587. /package/build/{services → lib}/logger/pino.d.ts +0 -0
  588. /package/build/{services → lib}/logger/pino.js +0 -0
  589. /package/build/{services → lib}/storage/index.d.ts +0 -0
  590. /package/build/{services → lib}/storage/index.js +0 -0
  591. /package/build/{services → lib}/storage/local.d.ts +0 -0
  592. /package/build/{services → lib}/storage/local.js +0 -0
  593. /package/build/{services → lib}/storage/s3.d.ts +0 -0
  594. /package/build/{services → lib}/storage/s3.js +0 -0
  595. /package/build/{services → lib}/storage/types.d.ts +0 -0
  596. /package/build/{services → lib}/storage/types.js +0 -0
  597. /package/build/{services → lib}/telemetry/index.d.ts +0 -0
  598. /package/build/{services → lib}/telemetry/index.js +0 -0
  599. /package/{services → lib}/db/README.md +0 -0
  600. /package/{services → lib}/db/schemas/001_schema.sql +0 -0
  601. /package/{services → lib}/db/schemas/002_seed.sql +0 -0
  602. /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
  603. /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
  604. /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
  605. /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
  606. /package/{services → lib}/db/schemas/007_security.sql +0 -0
  607. /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
  608. /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
  609. /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
  610. /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
  611. /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
  612. /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
  613. /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"AvailableEscalationsPage-BglLDoT8.js","sources":["../../src/components/common/modal/BulkActionBar.tsx","../../src/components/common/modal/BulkAssignModal.tsx","../../src/components/common/modal/BulkTriageModal.tsx","../../src/pages/operator/helpers.ts","../../src/pages/operator/AvailableEscalationsPage.tsx"],"sourcesContent":["import { PRIORITY_OPTIONS } from '../../../lib/constants';\nimport { useClaimDurations } from '../../../hooks/useClaimDurations';\n\ninterface BulkActionBarProps {\n selectedCount: number;\n onClearSelection: () => void;\n onSetPriority: (priority: 1 | 2 | 3 | 4) => void;\n onClaim: (durationMinutes: number) => void;\n onAssign: () => void;\n onEscalate: (targetRole: string) => void;\n onTriage: () => void;\n isPriorityPending: boolean;\n isClaimPending: boolean;\n isAssignPending: boolean;\n isEscalatePending: boolean;\n isTriagePending: boolean;\n availableRoles: string[];\n}\n\nconst anyPending = (props: BulkActionBarProps) =>\n props.isPriorityPending || props.isClaimPending || props.isAssignPending || props.isEscalatePending || props.isTriagePending;\n\nexport function BulkActionBar(props: BulkActionBarProps) {\n const disabled = anyPending(props);\n const claimDurations = useClaimDurations();\n\n return (\n <div className=\"flex flex-wrap items-center gap-3 px-4 py-3 bg-accent/5 border border-accent/20 rounded-lg mb-4\">\n <span className=\"text-xs font-medium text-accent\">\n {props.selectedCount} selected\n </span>\n\n <div className=\"w-px h-5 bg-surface-border\" />\n\n {/* Priority */}\n <select\n onChange={(e) => {\n if (!e.target.value) return;\n props.onSetPriority(parseInt(e.target.value) as 1 | 2 | 3 | 4);\n e.target.value = '';\n }}\n disabled={disabled}\n className=\"select text-xs py-1.5\"\n defaultValue=\"\"\n >\n <option value=\"\" disabled>Priority...</option>\n {PRIORITY_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n\n {/* Claim */}\n <select\n onChange={(e) => {\n if (!e.target.value) return;\n props.onClaim(parseInt(e.target.value));\n e.target.value = '';\n }}\n disabled={disabled}\n className=\"select text-xs py-1.5\"\n defaultValue=\"\"\n >\n <option value=\"\" disabled>Claim for...</option>\n {claimDurations.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n\n {/* Assign */}\n <button\n onClick={props.onAssign}\n disabled={disabled}\n className=\"btn-secondary text-xs py-1.5\"\n >\n {props.isAssignPending ? 'Assigning...' : 'Assign to...'}\n </button>\n\n {/* Escalate */}\n {props.availableRoles.length > 0 && (\n <select\n onChange={(e) => {\n if (!e.target.value) return;\n props.onEscalate(e.target.value);\n e.target.value = '';\n }}\n disabled={disabled}\n className=\"select text-xs py-1.5\"\n defaultValue=\"\"\n >\n <option value=\"\" disabled>Escalate to...</option>\n {props.availableRoles.map((role) => (\n <option key={role} value={role}>{role}</option>\n ))}\n </select>\n )}\n\n {/* Triage */}\n <button\n onClick={props.onTriage}\n disabled={disabled}\n className=\"btn-secondary text-xs py-1.5\"\n >\n {props.isTriagePending ? 'Triaging...' : 'Triage'}\n </button>\n\n <div className=\"flex-1\" />\n\n {/* Clear */}\n <button\n onClick={props.onClearSelection}\n className=\"text-xs text-text-tertiary hover:text-text-primary transition-colors\"\n >\n Clear\n </button>\n\n {disabled && (\n <span className=\"text-xs text-text-tertiary animate-pulse\">Processing...</span>\n )}\n </div>\n );\n}\n","import { useState, useMemo, useCallback } from 'react';\nimport { Modal } from './Modal';\nimport { CustomDurationPicker } from '../form/CustomDurationPicker';\nimport { useUsers } from '../../../api/users';\nimport { useAuth } from '../../../hooks/useAuth';\nimport { useClaimDurations } from '../../../hooks/useClaimDurations';\nimport type { LTUserRecord } from '../../../api/types';\n\ninterface BulkAssignModalProps {\n open: boolean;\n onClose: () => void;\n selectedCount: number;\n /** Distinct roles of the selected escalations; scopes user list for admins */\n selectedRoles: string[];\n onSubmit: (targetUserId: string, durationMinutes: number) => void;\n isPending: boolean;\n}\n\nexport function BulkAssignModal({\n open,\n onClose,\n selectedCount,\n selectedRoles,\n onSubmit,\n isPending,\n}: BulkAssignModalProps) {\n const { isSuperAdmin } = useAuth();\n const claimDurations = useClaimDurations();\n const [step, setStep] = useState<'user' | 'duration'>('user');\n const [selectedUser, setSelectedUser] = useState<LTUserRecord | null>(null);\n const [search, setSearch] = useState('');\n const [duration, setDuration] = useState('30');\n const [customMinutes, setCustomMinutes] = useState(0);\n const onCustomChange = useCallback((m: number) => setCustomMinutes(m), []);\n\n // Admins with a single role: scope to that role. Otherwise show all active users.\n const roleFilter =\n !isSuperAdmin && selectedRoles.length === 1 ? selectedRoles[0] : undefined;\n\n const { data: usersData, isLoading: usersLoading } = useUsers({\n role: roleFilter,\n status: 'active',\n limit: 200,\n });\n\n const filteredUsers = useMemo(() => {\n const users = usersData?.users ?? [];\n if (!search.trim()) return users;\n const q = search.toLowerCase();\n return users.filter(\n (u) =>\n u.display_name?.toLowerCase().includes(q) ||\n u.email?.toLowerCase().includes(q),\n );\n }, [usersData?.users, search]);\n\n const handleClose = () => {\n setStep('user');\n setSelectedUser(null);\n setSearch('');\n setDuration('30');\n setCustomMinutes(0);\n onClose();\n };\n\n const handleSelectUser = (user: LTUserRecord) => {\n setSelectedUser(user);\n setStep('duration');\n };\n\n const handleBack = () => {\n setStep('user');\n };\n\n const handleSubmit = () => {\n if (!selectedUser) return;\n const minutes = duration === 'custom' ? customMinutes : parseInt(duration);\n if (!minutes || minutes <= 0) return;\n onSubmit(selectedUser.id, minutes);\n };\n\n return (\n <Modal open={open} onClose={handleClose} title=\"Assign Escalations\">\n <div className=\"space-y-4\">\n {step === 'user' && (\n <>\n <p className=\"text-sm text-text-secondary\">\n Select a user to assign{' '}\n <span className=\"font-medium text-text-primary\">\n {selectedCount}\n </span>{' '}\n escalation(s) to:\n </p>\n\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search by name or email...\"\n className=\"input text-xs w-full\"\n autoFocus\n />\n\n <div className=\"max-h-60 overflow-y-auto border border-surface-border rounded-lg divide-y divide-surface-border\">\n {usersLoading && (\n <p className=\"text-xs text-text-tertiary p-3\">\n Loading users...\n </p>\n )}\n {!usersLoading && filteredUsers.length === 0 && (\n <p className=\"text-xs text-text-tertiary p-3\">\n No users found\n </p>\n )}\n {filteredUsers.map((user) => (\n <button\n key={user.id}\n onClick={() => handleSelectUser(user)}\n className=\"w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors\"\n >\n <p className=\"text-xs font-medium text-text-primary\">\n {user.display_name || user.external_id}\n </p>\n {user.email && (\n <p className=\"text-[10px] text-text-tertiary\">\n {user.email}\n </p>\n )}\n </button>\n ))}\n </div>\n\n <div className=\"flex justify-end pt-2\">\n <button onClick={handleClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n </div>\n </>\n )}\n\n {step === 'duration' && selectedUser && (\n <>\n <p className=\"text-sm text-text-secondary\">\n Assign to{' '}\n <span className=\"font-medium text-text-primary\">\n {selectedUser.display_name || selectedUser.external_id}\n </span>{' '}\n for:\n </p>\n\n <select\n value={duration}\n onChange={(e) => { setDuration(e.target.value); setCustomMinutes(0); }}\n className=\"select w-full text-sm\"\n >\n {claimDurations.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n <option value=\"custom\">Other...</option>\n </select>\n {duration === 'custom' && (\n <CustomDurationPicker onChange={onCustomChange} autoFocus />\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={handleBack} className=\"btn-secondary text-xs\">\n Back\n </button>\n <button\n onClick={handleSubmit}\n disabled={isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Assigning...' : 'Assign'}\n </button>\n </div>\n </>\n )}\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { Modal } from './Modal';\n\ninterface BulkTriageModalProps {\n open: boolean;\n onClose: () => void;\n selectedCount: number;\n onSubmit: (hint?: string) => void;\n isPending: boolean;\n}\n\nexport function BulkTriageModal({\n open,\n onClose,\n selectedCount,\n onSubmit,\n isPending,\n}: BulkTriageModalProps) {\n const [hint, setHint] = useState('');\n\n const handleSubmit = () => {\n onSubmit(hint || undefined);\n };\n\n return (\n <Modal open={open} onClose={onClose} title=\"Submit for AI Triage\">\n <div className=\"space-y-4\">\n <p className=\"text-sm text-text-secondary\">\n Submit <span className=\"font-medium text-text-primary\">{selectedCount}</span> escalation(s)\n for AI triage? The triage orchestrator will take over resolution.\n </p>\n\n <div>\n <label className=\"text-xs font-medium text-text-secondary block mb-1\">\n Triage hint <span className=\"text-text-tertiary\">(optional)</span>\n </label>\n <input\n type=\"text\"\n value={hint}\n onChange={(e) => setHint(e.target.value)}\n placeholder=\"e.g., image_orientation\"\n className=\"input text-xs font-mono w-full\"\n />\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n Guides the triage workflow on what remediation to apply\n </p>\n </div>\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSubmit}\n disabled={isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Submitting...' : 'Submit for Triage'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import type { UseMutationResult } from '@tanstack/react-query';\n\n/**\n * Create a bulk-action handler that calls a mutation and clears selection on success.\n */\nfunction bulkHandler<TData, TVariables>(\n mutation: UseMutationResult<TData, Error, TVariables>,\n clearSelection: () => void,\n afterSuccess?: () => void,\n) {\n return (variables: TVariables) => {\n mutation.mutate(variables, {\n onSuccess: () => {\n clearSelection();\n afterSuccess?.();\n },\n });\n };\n}\n\nexport function createBulkHandlers(deps: {\n selectedIds: Set<string>;\n clearSelection: () => void;\n setPriority: UseMutationResult<{ updated: number }, Error, { ids: string[]; priority: 1 | 2 | 3 | 4 }>;\n bulkClaim: UseMutationResult<{ claimed: number; skipped: number }, Error, { ids: string[]; durationMinutes: number }>;\n bulkEscalate: UseMutationResult<{ updated: number }, Error, { ids: string[]; targetRole: string }>;\n bulkTriage: UseMutationResult<{ triaged: number }, Error, { ids: string[]; hint?: string }>;\n bulkAssign: UseMutationResult<{ assigned: number; skipped: number }, Error, { ids: string[]; targetUserId: string; durationMinutes: number }>;\n closeTriageModal: () => void;\n closeAssignModal: () => void;\n}) {\n const ids = () => [...deps.selectedIds];\n\n const handleSetPriority = (priority: 1 | 2 | 3 | 4) => {\n bulkHandler(\n deps.setPriority,\n deps.clearSelection,\n )({ ids: ids(), priority });\n };\n\n const handleBulkClaim = (durationMinutes: number) => {\n bulkHandler(\n deps.bulkClaim,\n deps.clearSelection,\n )({ ids: ids(), durationMinutes });\n };\n\n const handleBulkEscalate = (targetRole: string) => {\n bulkHandler(\n deps.bulkEscalate,\n deps.clearSelection,\n )({ ids: ids(), targetRole });\n };\n\n const handleBulkTriage = (hint?: string) => {\n bulkHandler(\n deps.bulkTriage,\n deps.clearSelection,\n deps.closeTriageModal,\n )({ ids: ids(), hint });\n };\n\n const handleBulkAssign = (targetUserId: string, durationMinutes: number) => {\n bulkHandler(\n deps.bulkAssign,\n deps.clearSelection,\n deps.closeAssignModal,\n )({ ids: ids(), targetUserId, durationMinutes });\n };\n\n return { handleSetPriority, handleBulkClaim, handleBulkEscalate, handleBulkTriage, handleBulkAssign };\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAuth } from '../../hooks/useAuth';\nimport { useEscalationListEvents } from '../../hooks/useNatsEvents';\nimport {\n useEscalations,\n useEscalationTypes,\n useClaimEscalation,\n useSetEscalationPriority,\n useBulkClaimEscalations,\n useBulkAssignEscalations,\n useBulkEscalateToRole,\n useBulkTriageEscalations,\n} from '../../api/escalations';\nimport { useRoles } from '../../api/roles';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { Modal } from '../../components/common/modal/Modal';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { BulkActionBar } from '../../components/common/modal/BulkActionBar';\nimport { BulkAssignModal } from '../../components/common/modal/BulkAssignModal';\nimport { BulkTriageModal } from '../../components/common/modal/BulkTriageModal';\nimport { CustomDurationPicker } from '../../components/common/form/CustomDurationPicker';\nimport { useClaimDurations } from '../../hooks/useClaimDurations';\nimport { Lock } from 'lucide-react';\nimport { ESCALATION_COLUMNS, EscalationFilterBar } from './escalation-columns';\nimport { RowAction, RowActionGroup } from '../../components/common/layout/RowActions';\nimport { createBulkHandlers } from './helpers';\nimport type { LTEscalationRecord } from '../../api/types';\n\nexport function AvailableEscalationsPage() {\n useEscalationListEvents();\n const navigate = useNavigate();\n const { user, isSuperAdmin } = useAuth();\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { role: '', type: '', priority: '', status: 'available' },\n });\n const claimDurations = useClaimDurations();\n const [claimTarget, setClaimTarget] = useState<LTEscalationRecord | null>(null);\n const [claimDuration, setClaimDuration] = useState('30');\n const [customClaimMinutes, setCustomClaimMinutes] = useState(0);\n const onCustomClaimChange = useCallback((m: number) => setCustomClaimMinutes(m), []);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [triageModalOpen, setTriageModalOpen] = useState(false);\n const [assignModalOpen, setAssignModalOpen] = useState(false);\n\n const claim = useClaimEscalation();\n const setPriority = useSetEscalationPriority();\n const bulkClaim = useBulkClaimEscalations();\n const bulkAssign = useBulkAssignEscalations();\n const bulkEscalate = useBulkEscalateToRole();\n const bulkTriage = useBulkTriageEscalations();\n const { data: rolesData } = useRoles();\n const { data: typesData } = useEscalationTypes();\n\n // Clear selections on filter/page changes\n useEffect(() => {\n setSelectedIds(new Set());\n }, [filters.role, filters.type, filters.priority, filters.status, pagination.page, pagination.pageSize]);\n\n // Map the UI status filter to the API status parameter\n const statusFilter = filters.status || '';\n const apiStatus = statusFilter === 'available' ? 'pending'\n : statusFilter === 'claimed' ? 'pending'\n : statusFilter === 'resolved' ? 'resolved'\n : undefined; // '' (All) → no filter\n\n const { data, isLoading, error: queryError } = useEscalations({\n status: apiStatus,\n role: filters.role || undefined,\n type: filters.type || undefined,\n priority: filters.priority ? parseInt(filters.priority) : undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || undefined,\n order: sort.sort_by ? sort.order : undefined,\n });\n\n // Client-side filter for available/claimed based on claim expiry\n const now = new Date();\n const rawEscalations = data?.escalations ?? [];\n const escalations = statusFilter === 'available'\n ? rawEscalations.filter((e) => !e.assigned_to || !e.assigned_until || new Date(e.assigned_until) <= now)\n : statusFilter === 'claimed'\n ? rawEscalations.filter((e) => e.assigned_to && e.assigned_until && new Date(e.assigned_until) > now)\n : rawEscalations;\n const total = statusFilter === 'available' || statusFilter === 'claimed'\n ? escalations.length\n : data?.total ?? 0;\n const canBulkManage = isSuperAdmin || user?.roles.some((r) => r.type === 'admin');\n\n const selectedRoles = useMemo(() => {\n const roles = new Set<string>();\n for (const esc of escalations) {\n if (selectedIds.has(esc.id)) roles.add(esc.role);\n }\n return [...roles];\n }, [escalations, selectedIds]);\n\n const clearSelection = useCallback(() => setSelectedIds(new Set()), []);\n\n const handleClaim = () => {\n if (!claimTarget) return;\n const minutes = claimDuration === 'custom' ? customClaimMinutes : parseInt(claimDuration);\n if (!minutes || minutes <= 0) return;\n claim.mutate(\n { id: claimTarget.id, durationMinutes: minutes },\n {\n onSuccess: () => {\n setClaimTarget(null);\n navigate(`/escalations/detail/${claimTarget.id}`);\n },\n },\n );\n };\n\n const {\n handleSetPriority,\n handleBulkClaim,\n handleBulkEscalate,\n handleBulkTriage,\n handleBulkAssign,\n } = createBulkHandlers({\n selectedIds,\n clearSelection,\n setPriority,\n bulkClaim,\n bulkEscalate,\n bulkTriage,\n bulkAssign,\n closeTriageModal: () => setTriageModalOpen(false),\n closeAssignModal: () => setAssignModalOpen(false),\n });\n\n const toggleSelect = (id: string) => {\n const next = new Set(selectedIds);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n setSelectedIds(next);\n };\n\n const toggleAll = () => {\n if (selectedIds.size === escalations.length) {\n setSelectedIds(new Set());\n } else {\n setSelectedIds(new Set(escalations.map((e) => e.id)));\n }\n };\n\n const columns: Column<LTEscalationRecord>[] = [\n canBulkManage ? {\n key: 'select',\n label: (\n <input\n type=\"checkbox\"\n checked={escalations.length > 0 && selectedIds.size === escalations.length}\n onChange={toggleAll}\n className=\"rounded\"\n />\n ) as any,\n render: (row: LTEscalationRecord) => (\n <input\n type=\"checkbox\"\n checked={selectedIds.has(row.id)}\n onChange={(e) => {\n e.stopPropagation();\n toggleSelect(row.id);\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"rounded\"\n />\n ),\n className: 'w-10',\n } : {\n key: 'spacer',\n label: '',\n render: () => null,\n className: 'w-10',\n },\n ...ESCALATION_COLUMNS,\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Lock}\n title=\"Claim escalation\"\n onClick={() => setClaimTarget(row)}\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n return (\n <div>\n <PageHeader title=\"All Escalations\" />\n\n <EscalationFilterBar\n filters={filters}\n setFilter={setFilter}\n roles={rolesData?.roles ?? []}\n types={typesData?.types ?? []}\n showStatus\n />\n\n {selectedIds.size > 0 && (\n <BulkActionBar\n selectedCount={selectedIds.size}\n onClearSelection={() => setSelectedIds(new Set())}\n onSetPriority={handleSetPriority}\n onClaim={handleBulkClaim}\n onAssign={() => setAssignModalOpen(true)}\n onEscalate={handleBulkEscalate}\n onTriage={() => setTriageModalOpen(true)}\n isPriorityPending={setPriority.isPending}\n isClaimPending={bulkClaim.isPending}\n isAssignPending={bulkAssign.isPending}\n isEscalatePending={bulkEscalate.isPending}\n isTriagePending={bulkTriage.isPending}\n availableRoles={rolesData?.roles ?? []}\n />\n )}\n\n {queryError && (\n <div className=\"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error\">\n {(queryError as Error).message === 'Session expired'\n ? 'Your session has expired. Please log in again.'\n : `Failed to load escalations: ${(queryError as Error).message}`}\n </div>\n )}\n\n <DataTable\n columns={columns}\n data={escalations}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/escalations/detail/${row.id}`, { state: { from: '/escalations/available' } })}\n isLoading={isLoading}\n emptyMessage={queryError ? 'Unable to load data' : 'No available escalations'}\n sort={sort}\n onSort={setSort}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n\n <Modal\n open={!!claimTarget}\n onClose={() => setClaimTarget(null)}\n title=\"Claim Escalation\"\n >\n <div className=\"space-y-4\">\n <p className=\"text-sm text-text-secondary\">\n Claim <span className=\"font-medium text-text-primary\">{claimTarget?.type}</span> for:\n </p>\n <select\n value={claimDuration}\n onChange={(e) => { setClaimDuration(e.target.value); setCustomClaimMinutes(0); }}\n className=\"select w-full text-sm\"\n >\n {claimDurations.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n <option value=\"custom\">Other...</option>\n </select>\n {claimDuration === 'custom' && (\n <CustomDurationPicker onChange={onCustomClaimChange} autoFocus />\n )}\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={() => setClaimTarget(null)} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleClaim}\n className=\"btn-primary text-xs\"\n disabled={claim.isPending}\n >\n {claim.isPending ? 'Claiming...' : 'Claim'}\n </button>\n </div>\n </div>\n </Modal>\n\n <BulkTriageModal\n open={triageModalOpen}\n onClose={() => setTriageModalOpen(false)}\n selectedCount={selectedIds.size}\n onSubmit={handleBulkTriage}\n isPending={bulkTriage.isPending}\n />\n\n <BulkAssignModal\n open={assignModalOpen}\n onClose={() => setAssignModalOpen(false)}\n selectedCount={selectedIds.size}\n selectedRoles={selectedRoles}\n onSubmit={handleBulkAssign}\n isPending={bulkAssign.isPending}\n />\n </div>\n );\n}\n"],"names":["anyPending","props","BulkActionBar","disabled","claimDurations","useClaimDurations","jsxs","jsx","e","PRIORITY_OPTIONS","opt","role","BulkAssignModal","open","onClose","selectedCount","selectedRoles","onSubmit","isPending","isSuperAdmin","useAuth","step","setStep","useState","selectedUser","setSelectedUser","search","setSearch","duration","setDuration","customMinutes","setCustomMinutes","onCustomChange","useCallback","m","roleFilter","usersData","usersLoading","useUsers","filteredUsers","useMemo","users","q","u","_a","_b","handleClose","handleSelectUser","user","handleBack","handleSubmit","minutes","Modal","Fragment","CustomDurationPicker","BulkTriageModal","hint","setHint","bulkHandler","mutation","clearSelection","afterSuccess","variables","createBulkHandlers","deps","ids","priority","durationMinutes","targetRole","targetUserId","AvailableEscalationsPage","useEscalationListEvents","navigate","useNavigate","filters","setFilter","pagination","sort","setSort","useFilterParams","claimTarget","setClaimTarget","claimDuration","setClaimDuration","customClaimMinutes","setCustomClaimMinutes","onCustomClaimChange","selectedIds","setSelectedIds","triageModalOpen","setTriageModalOpen","assignModalOpen","setAssignModalOpen","claim","useClaimEscalation","setPriority","useSetEscalationPriority","bulkClaim","useBulkClaimEscalations","bulkAssign","useBulkAssignEscalations","bulkEscalate","useBulkEscalateToRole","bulkTriage","useBulkTriageEscalations","rolesData","useRoles","typesData","useEscalationTypes","useEffect","statusFilter","apiStatus","data","isLoading","queryError","useEscalations","now","rawEscalations","escalations","total","canBulkManage","r","roles","esc","handleClaim","handleSetPriority","handleBulkClaim","handleBulkEscalate","handleBulkTriage","handleBulkAssign","toggleSelect","id","next","toggleAll","columns","row","ESCALATION_COLUMNS","RowActionGroup","RowAction","Lock","PageHeader","EscalationFilterBar","DataTable","StickyPagination"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{a as m,j as e}from"./vendor-query-B2UbickB.js";import{u as j}from"./bots-BkKVMbUW.js";import{r as u,X as y,s as d,C as N,z as p}from"./vendor-icons-ZTAKVwGc.js";function b({selected:s,onChange:a,placeholder:f}){const{data:c}=j({limit:100}),l=((c==null?void 0:c.bots)??[]).filter(t=>t.status==="active"),[i,n]=m.useState(!1),o=m.useRef(null);m.useEffect(()=>{const t=r=>{o.current&&!o.current.contains(r.target)&&n(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[]);const x=l.find(t=>t.external_id===s),h=f??"Invoking user (default)";return e.jsxs("div",{ref:o,className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>n(!i),className:"flex items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[s&&x?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsx(u,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"}),x.display_name||x.external_id,e.jsx("span",{role:"button",onClick:t=>{t.stopPropagation(),a("")},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsx(y,{className:"w-2.5 h-2.5"})})]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-text-tertiary",children:[e.jsx(d,{className:"w-3 h-3 shrink-0"}),h]}),e.jsx(N,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${i?"rotate-180":""}`})]}),i&&e.jsxs("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:[e.jsxs("button",{type:"button",onClick:()=>{a(""),n(!1)},className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${s?"text-text-primary hover:bg-surface-sunken":"bg-accent/[0.06] text-accent"}`,children:[e.jsx(d,{className:"w-3 h-3 shrink-0 text-text-tertiary"}),e.jsx("span",{className:"flex-1",children:"Invoking user"}),!s&&e.jsx(p,{className:"w-3 h-3 shrink-0"})]}),l.length===0?e.jsx("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No bot accounts"}):l.map(t=>{const r=s===t.external_id;return e.jsxs("button",{type:"button",onClick:()=>{a(t.external_id),n(!1)},className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${r?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsx(u,{className:"w-3 h-3 shrink-0 text-accent/60"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{children:t.display_name||t.external_id}),t.display_name&&t.display_name!==t.external_id&&e.jsx("span",{className:"ml-1 text-text-tertiary font-mono",children:t.external_id})]}),r&&e.jsx(p,{className:"w-3 h-3 shrink-0"})]},t.id)})]})]})}export{b as B};
2
- //# sourceMappingURL=BotPicker-D6FYW1Gt.js.map
@@ -1,2 +0,0 @@
1
- import{j as t}from"./vendor-query-B2UbickB.js";import{C as a}from"./index-D8VH6K8B.js";function c({title:r,sectionKey:s,isCollapsed:e,onToggle:o,contentClassName:n,children:i}){return t.jsxs("div",{children:[t.jsxs("button",{onClick:()=>o(s),className:"flex items-center gap-3 w-full group/section",children:[t.jsx("svg",{className:`w-4 h-4 shrink-0 text-text-tertiary/40 group-hover/section:text-text-tertiary transition-all duration-200 ${e?"":"rotate-90"}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})}),t.jsx("span",{className:`text-xs font-semibold uppercase tracking-widest transition-colors duration-200 ${e?"text-text-tertiary":"text-text-secondary"}`,children:r}),t.jsx("span",{className:"flex-1 border-b border-surface-border"})]}),t.jsx(a,{open:!e,children:t.jsx("div",{className:n??"mt-4 ml-7",children:i})})]})}export{c as C};
2
- //# sourceMappingURL=CollapsibleSection-Cxk4wvjT.js.map
@@ -1,2 +0,0 @@
1
- import{j as e}from"./vendor-query-B2UbickB.js";import{M as l}from"./Modal-B4rbIVAn.js";function d({open:r,onClose:t,onConfirm:x,title:c,description:i,isPending:s,error:a}){return e.jsx(l,{open:r,onClose:t,title:c,children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-text-secondary",children:i}),a&&e.jsx("p",{className:"text-xs text-status-error",children:a.message}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:t,className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:x,className:"bg-status-error text-white px-3 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity",disabled:s,children:s?"Deleting...":"Delete"})]})]})})}export{d as C};
2
- //# sourceMappingURL=ConfirmDeleteModal-FSXyKjaB.js.map
@@ -1,2 +0,0 @@
1
- import{a as x,j as t}from"./vendor-query-B2UbickB.js";import{b as d}from"./vendor-react-Cw8Gy8NJ.js";function m({label:o,value:r,href:e,external:c}){const[n,s]=x.useState(!1),p=d();if(!r)return null;const i=a=>{a.stopPropagation(),navigator.clipboard.writeText(r),s(!0),setTimeout(()=>s(!1),1500)},l=a=>{a.stopPropagation(),e&&(c?window.open(e,"_blank","noopener,noreferrer"):p(e))};return t.jsxs("div",{className:"text-left group relative",children:[t.jsx("span",{className:"text-[11px] font-medium text-text-secondary uppercase tracking-wide",children:o}),t.jsxs("span",{className:"flex items-center gap-1 mt-0.5",children:[t.jsx("button",{onClick:i,title:`Copy ${o}`,className:"text-[12px] font-mono text-text-primary group-hover:text-accent transition-colors truncate max-w-[280px]",children:r}),t.jsx("button",{onClick:i,title:"Copy",className:"opacity-0 group-hover:opacity-100 transition-opacity shrink-0 p-0.5",children:t.jsx("svg",{className:`w-3 h-3 transition-colors ${n?"text-status-success":"text-text-tertiary hover:text-text-primary"}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:n?t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"}):t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3"})})}),e&&t.jsx("button",{onClick:l,title:`View ${o}`,className:"opacity-0 group-hover:opacity-100 transition-opacity shrink-0 p-0.5",children:t.jsx("svg",{className:"w-3 h-3 text-text-tertiary hover:text-accent",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101M10.172 13.828a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"})})})]})]})}export{m as C};
2
- //# sourceMappingURL=CopyableId-CBdxWfp8.js.map
@@ -1,2 +0,0 @@
1
- import{a as l,j as e}from"./vendor-query-B2UbickB.js";import{q as N,r as f,O as p,s as g}from"./index-D8VH6K8B.js";import{P as C}from"./PageHeader-CpWFly5S.js";import{T as k}from"./TimeAgo-UPG6DoH8.js";import{C as w}from"./ConfirmDeleteModal-FSXyKjaB.js";import{w as A,C as P,D as O,H as T}from"./vendor-icons-ZTAKVwGc.js";import"./vendor-react-Cw8Gy8NJ.js";import"./format-gXZXQ-HJ.js";import"./Modal-B4rbIVAn.js";const o={anthropic:{name:"Anthropic",helpText:'Run "claude setup-token" for an OAuth token, or use an API key from console.anthropic.com.',placeholder:"sk-ant-oat01-... or sk-ant-api03-..."},openai:{name:"OpenAI",helpText:"Create an API key at platform.openai.com/api-keys.",placeholder:"sk-..."}};function F(){var d,x;const{data:r,isLoading:m}=N(),i=f(),[s,n]=l.useState(null),[h,u]=l.useState(!1),[a,j]=l.useState("anthropic"),c=(r==null?void 0:r.connections)??[],b=()=>{s&&i.mutate({provider:s.provider,label:s.label},{onSuccess:()=>n(null)})},v=t=>`/connect/${t}?state=${encodeURIComponent(g()||"")}`;return e.jsxs("div",{children:[e.jsx(C,{title:"Credentials",actions:e.jsxs("button",{onClick:()=>u(t=>!t),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsx(A,{className:"w-3.5 h-3.5"}),"Add Credential"]})}),e.jsx("p",{className:"text-sm text-text-secondary mb-6",children:"Manage credentials used by tools when invoked on your behalf. Each credential is encrypted at rest and resolved automatically during tool execution."}),h&&e.jsxs("div",{className:"mb-6 p-4 bg-surface-raised border border-surface-border rounded-md space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("label",{className:"text-xs text-text-secondary font-medium",children:"Provider"}),e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:a,onChange:t=>j(t.target.value),className:"input text-xs pr-7 appearance-none",children:Object.entries(o).map(([t,y])=>e.jsx("option",{value:t,children:y.name},t))}),e.jsx(P,{className:"absolute right-2 top-1/2 -translate-y-1/2 w-3 h-3 text-text-tertiary pointer-events-none"})]})]}),e.jsx("p",{className:"text-xs text-text-tertiary",children:(d=o[a])==null?void 0:d.helpText}),e.jsxs("a",{href:v(a),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsx(p,{provider:a,className:"w-3.5 h-3.5"}),"Connect ",(x=o[a])==null?void 0:x.name]})]}),m?e.jsx("div",{className:"animate-pulse space-y-3",children:[1,2].map(t=>e.jsx("div",{className:"h-16 bg-surface-sunken rounded"},t))}):c.length===0?e.jsxs("div",{className:"text-center py-16 text-text-tertiary",children:[e.jsx(O,{className:"w-10 h-10 mx-auto mb-3 opacity-40"}),e.jsx("p",{className:"text-sm",children:"No credentials registered."}),e.jsx("p",{className:"text-xs mt-1",children:"Add a credential to enable tool authentication."})]}):e.jsx("div",{className:"space-y-2",children:c.map(t=>e.jsxs("div",{className:"group/row flex items-center gap-4 px-4 py-3 bg-surface-raised border border-surface-border rounded-md",children:[e.jsx(p,{provider:t.provider,className:"w-6 h-6 shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-text-primary font-medium capitalize",children:t.provider}),t.label!=="default"&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-surface-sunken rounded text-text-tertiary",children:t.label}),t.credential_type&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-faint rounded text-accent",children:t.credential_type})]}),e.jsxs("div",{className:"flex items-center gap-3 mt-0.5",children:[t.email&&e.jsx("span",{className:"text-xs text-text-tertiary",children:t.email}),t.expires_at&&e.jsxs("span",{className:"text-xs text-text-tertiary",children:["Expires ",e.jsx(k,{date:t.expires_at})]})]})]}),e.jsx("button",{onClick:()=>n({provider:t.provider,label:t.label}),className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-status-error",title:"Revoke credential",children:e.jsx(T,{className:"w-4 h-4"})})]},`${t.provider}-${t.label}`))}),e.jsx(w,{open:!!s,onClose:()=>n(null),onConfirm:b,title:"Revoke Credential",description:e.jsxs(e.Fragment,{children:["Revoke the"," ",e.jsx("span",{className:"font-medium text-text-primary capitalize",children:s==null?void 0:s.provider}),(s==null?void 0:s.label)!=="default"&&e.jsxs(e.Fragment,{children:[" (",s==null?void 0:s.label,")"]})," ","credential? Tools will no longer be able to use this credential."]}),isPending:i.isPending,error:i.error})]})}export{F as CredentialsPage};
2
- //# sourceMappingURL=CredentialsPage-Ikzsot0w.js.map
@@ -1,2 +0,0 @@
1
- import{a as u,j as i}from"./vendor-query-B2UbickB.js";import{u as x}from"./settings-eBRSE0mQ.js";import{D as d,f as v}from"./constants-CgaZfe5d.js";function j(){const{data:e}=x();return u.useMemo(()=>{var n;return(((n=e==null?void 0:e.escalation)==null?void 0:n.claimDurations)??d).map(a=>({value:String(a),label:v(a)}))},[e])}const f=[{value:1,label:"minutes"},{value:60,label:"hours"}];function C({onChange:e,compact:r,autoFocus:n,"data-testid":a="custom-duration-input"}){const[l,m]=u.useState(""),[s,c]=u.useState(1);u.useEffect(()=>{const t=parseInt(l);e(t>0?t*s:0)},[l,s,e]);const o=r?"text-xs":"text-sm",p=r?"w-16":"w-20";return i.jsxs("div",{className:"flex items-center gap-2","data-testid":a,children:[i.jsx("input",{type:"number",min:1,max:s===60?24:1440,value:l,onChange:t=>m(t.target.value),placeholder:s===60?"hrs":"min",className:`input ${o} ${p} text-center`,autoFocus:n,"data-testid":`${a}-quantity`}),i.jsx("select",{value:s,onChange:t=>c(parseInt(t.target.value)),className:`select ${o} py-1`,"data-testid":`${a}-unit`,children:f.map(t=>i.jsx("option",{value:t.value,children:t.label},t.value))})]})}export{C,j as u};
2
- //# sourceMappingURL=CustomDurationPicker-CAninCbl.js.map
@@ -1,2 +0,0 @@
1
- import{j as e}from"./vendor-query-B2UbickB.js";import{E as m}from"./EmptyState-2CmV-IaS.js";function b({active:s,direction:a}){return e.jsx("svg",{className:`w-3 h-3 shrink-0 transition-all duration-150 ${s?"text-accent opacity-100":"opacity-0 group-hover/sorthead:opacity-40 text-text-tertiary"} ${s&&a==="asc"?"rotate-180":""}`,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})}function y({columns:s,data:a,keyFn:l,onRowClick:o,activeRowKey:d,rowClassName:x,isLoading:h,emptyMessage:p="No records found",sort:n,onSort:u}){return h?e.jsx("div",{className:"animate-pulse space-y-0",children:Array.from({length:5}).map((r,t)=>e.jsx("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsx("div",{className:"h-3 bg-surface-sunken rounded w-full"})},t))}):a.length?e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsx("tr",{className:"border-b",children:s.map(r=>{const t=r.sortable&&u,i=(n==null?void 0:n.sort_by)===r.key;return e.jsx("th",{onClick:t?()=>u(r.key):void 0,className:`sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary whitespace-nowrap ${r.className??""} ${t?"cursor-pointer select-none group/sorthead hover:text-text-secondary transition-colors":""}`,children:e.jsxs("span",{className:"inline-flex items-center gap-1",children:[r.label,t&&e.jsx(b,{active:i,direction:i?n.order:"desc"})]})},r.key)})})}),e.jsx("tbody",{children:a.map((r,t)=>{const i=d!=null&&l(r)===d;return e.jsx("tr",{onClick:o?()=>o(r):void 0,className:`group/row border-b last:border-b-0 transition-colors duration-100 ${o?"cursor-pointer row-hover":""} ${i?"bg-accent/5 border-l-2 border-l-accent":""} ${x?x(r):""}`,children:s.map(c=>e.jsx("td",{className:`px-6 py-3.5 text-sm ${c.className??""}`,children:c.render(r,t)},c.key))},l(r))})})]}):p?e.jsx(m,{title:p}):null}export{y as D};
2
- //# sourceMappingURL=DataTable-BDn1WBHS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataTable-BDn1WBHS.js","sources":["../../src/components/common/data/DataTable.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { EmptyState } from '../display/EmptyState';\nimport type { SortState } from '../../../hooks/useFilterParams';\n\nexport interface Column<T> {\n key: string;\n label: string | ReactNode;\n render: (row: T, index: number) => ReactNode;\n className?: string;\n /** If true, this column header is clickable and triggers onSort. */\n sortable?: boolean;\n}\n\ninterface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n keyFn: (row: T) => string;\n onRowClick?: (row: T) => void;\n /** Highlight the row whose keyFn matches this value. */\n activeRowKey?: string | null;\n /** Optional per-row class name for custom styling (e.g., engine vs worker tint). */\n rowClassName?: (row: T) => string;\n isLoading?: boolean;\n emptyMessage?: string;\n /** Current sort state — pass to show active sort indicator. */\n sort?: SortState;\n /** Called when a sortable column header is clicked. */\n onSort?: (column: string) => void;\n}\n\nfunction SortIcon({ active, direction }: { active: boolean; direction: 'asc' | 'desc' }) {\n return (\n <svg\n className={`w-3 h-3 shrink-0 transition-all duration-150 ${\n active ? 'text-accent opacity-100' : 'opacity-0 group-hover/sorthead:opacity-40 text-text-tertiary'\n } ${active && direction === 'asc' ? 'rotate-180' : ''}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n}\n\nexport function DataTable<T>({\n columns,\n data,\n keyFn,\n onRowClick,\n activeRowKey,\n rowClassName,\n isLoading,\n emptyMessage = 'No records found',\n sort,\n onSort,\n}: DataTableProps<T>) {\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (!data.length) {\n return emptyMessage ? <EmptyState title={emptyMessage} /> : null;\n }\n\n return (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n {columns.map((col) => {\n const isSortable = col.sortable && onSort;\n const isActive = sort?.sort_by === col.key;\n\n return (\n <th\n key={col.key}\n onClick={isSortable ? () => onSort(col.key) : undefined}\n className={`sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary whitespace-nowrap ${col.className ?? ''} ${\n isSortable ? 'cursor-pointer select-none group/sorthead hover:text-text-secondary transition-colors' : ''\n }`}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.label}\n {isSortable && (\n <SortIcon active={isActive} direction={isActive ? sort.order : 'desc'} />\n )}\n </span>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.map((row, index) => {\n const isActive = activeRowKey != null && keyFn(row) === activeRowKey;\n return (\n <tr\n key={keyFn(row)}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={`group/row border-b last:border-b-0 transition-colors duration-100 ${\n onRowClick ? 'cursor-pointer row-hover' : ''\n } ${isActive ? 'bg-accent/5 border-l-2 border-l-accent' : ''} ${rowClassName ? rowClassName(row) : ''}`}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={`px-6 py-3.5 text-sm ${col.className ?? ''}`}\n >\n {col.render(row, index)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n}\n"],"names":["SortIcon","active","direction","jsx","DataTable","columns","data","keyFn","onRowClick","activeRowKey","rowClassName","isLoading","emptyMessage","sort","onSort","_","i","jsxs","col","isSortable","isActive","row","index","EmptyState"],"mappings":"4FA8BA,SAASA,EAAS,CAAE,OAAAC,EAAQ,UAAAC,GAA6D,CACvF,OACEC,EAAAA,IAAC,MAAA,CACC,UAAW,gDACTF,EAAS,0BAA4B,8DACvC,IAAIA,GAAUC,IAAc,MAAQ,aAAe,EAAE,GACrD,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAa,IAEb,eAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,gBAAA,CAAiB,CAAA,CAAA,CAG5E,CAEO,SAASE,EAAa,CAC3B,QAAAC,EACA,KAAAC,EACA,MAAAC,EACA,WAAAC,EACA,aAAAC,EACA,aAAAC,EACA,UAAAC,EACA,aAAAC,EAAe,mBACf,KAAAC,EACA,OAAAC,CACF,EAAsB,CACpB,OAAIH,EAEAR,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACY,EAAGC,IACjCb,EAAAA,IAAC,MAAA,CAAY,UAAU,uDACrB,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,sCAAA,CAAuC,CAAA,EAD9Ca,CAEV,CACD,CAAA,CACH,EAICV,EAAK,OAKRW,EAAAA,KAAC,QAAA,CAAM,UAAU,SACf,SAAA,CAAAd,EAAAA,IAAC,QAAA,CACC,eAAC,KAAA,CAAG,UAAU,WACX,SAAAE,EAAQ,IAAKa,GAAQ,CACpB,MAAMC,EAAaD,EAAI,UAAYJ,EAC7BM,GAAWP,GAAA,YAAAA,EAAM,WAAYK,EAAI,IAEvC,OACEf,EAAAA,IAAC,KAAA,CAEC,QAASgB,EAAa,IAAML,EAAOI,EAAI,GAAG,EAAI,OAC9C,UAAW,qJAAqJA,EAAI,WAAa,EAAE,IACjLC,EAAa,wFAA0F,EACzG,GAEA,SAAAF,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACb,SAAA,CAAAC,EAAI,MACJC,SACEnB,EAAA,CAAS,OAAQoB,EAAU,UAAWA,EAAWP,EAAK,MAAQ,MAAA,CAAQ,CAAA,CAAA,CAE3E,CAAA,EAXKK,EAAI,GAAA,CAcf,CAAC,EACH,EACF,QACC,QAAA,CACE,SAAAZ,EAAK,IAAI,CAACe,EAAKC,IAAU,CACxB,MAAMF,EAAWX,GAAgB,MAAQF,EAAMc,CAAG,IAAMZ,EACxD,OACAN,EAAAA,IAAC,KAAA,CAEC,QAASK,EAAa,IAAMA,EAAWa,CAAG,EAAI,OAC9C,UAAW,qEACTb,EAAa,2BAA6B,EAC5C,IAAIY,EAAW,yCAA2C,EAAE,IAAIV,EAAeA,EAAaW,CAAG,EAAI,EAAE,GAEpG,SAAAhB,EAAQ,IAAKa,GACZf,EAAAA,IAAC,KAAA,CAEC,UAAW,uBAAuBe,EAAI,WAAa,EAAE,GAEpD,SAAAA,EAAI,OAAOG,EAAKC,CAAK,CAAA,EAHjBJ,EAAI,GAAA,CAKZ,CAAA,EAbIX,EAAMc,CAAG,CAAA,CAgBlB,CAAC,CAAA,CACH,CAAA,EACF,EArDOT,EAAeT,EAAAA,IAACoB,EAAA,CAAW,MAAOX,EAAc,EAAK,IAuDhE"}
@@ -1,2 +0,0 @@
1
- import{j as t}from"./vendor-query-B2UbickB.js";function a({title:s="No data",description:e}){return t.jsxs("div",{className:"flex flex-col items-center justify-center py-20",children:[t.jsx("p",{className:"text-sm text-text-secondary",children:s}),e&&t.jsx("p",{className:"text-xs text-text-tertiary mt-1",children:e})]})}export{a as E};
2
- //# sourceMappingURL=EmptyState-2CmV-IaS.js.map
@@ -1,2 +0,0 @@
1
- import{a as m,j as e}from"./vendor-query-B2UbickB.js";import{e as u}from"./index-D8VH6K8B.js";import{c as p}from"./useNatsEvents-Xr43X1fG.js";import{P as b}from"./PageHeader-CpWFly5S.js";import{S as n}from"./StatCard-DlgF0CJC.js";import{b as j}from"./vendor-react-Cw8Gy8NJ.js";import"./vendor-icons-ZTAKVwGc.js";const v=[{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"},{label:"30d",value:"30d"}];function c({value:i,colorClass:r,onClick:o}){return i===0?e.jsx("span",{className:"text-text-tertiary",children:"0"}):e.jsx("button",{onClick:o,className:`${r} hover:underline tabular-nums font-medium`,children:i})}function $(){var x,d;p();const i=j(),[r,o]=m.useState("24h"),{data:s}=u(r),l=t=>{const h=new URLSearchParams(t).toString();i(`/escalations/available${h?`?${h}`:""}`)},a="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return e.jsxs("div",{children:[e.jsx(b,{title:"Escalations"}),e.jsx("div",{className:"flex items-center gap-1 mb-6",children:v.map(t=>e.jsx("button",{onClick:()=>o(t.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${r===t.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:t.label},t.value))}),e.jsxs("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[e.jsx(n,{label:"Open",value:(s==null?void 0:s.pending)??"—",colorClass:"text-status-pending",onClick:()=>l()}),e.jsx(n,{label:"Claimed",value:(s==null?void 0:s.claimed)??"—",colorClass:"text-status-active",onClick:()=>l()}),e.jsx(n,{label:"Created",value:(s==null?void 0:s.created)??"—",onClick:()=>l()}),e.jsx(n,{label:"Resolved",value:(s==null?void 0:s.resolved)??"—",colorClass:"text-status-success",onClick:()=>l()})]}),(((x=s==null?void 0:s.by_role)==null?void 0:x.length)??0)>0&&e.jsx("div",{className:"mb-8",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-surface-border",children:[e.jsx("th",{className:a,children:"Role"}),e.jsx("th",{className:`${a} text-right w-24`,children:"Pending"}),e.jsx("th",{className:`${a} text-right w-24`,children:"Claimed"})]})}),e.jsx("tbody",{children:s.by_role.map(t=>e.jsxs("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsx("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsx("button",{onClick:()=>l({role:t.role}),className:"hover:text-accent hover:underline",children:t.role})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(c,{value:t.pending,colorClass:"text-status-pending",onClick:()=>l({role:t.role})})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(c,{value:t.claimed,colorClass:"text-status-active",onClick:()=>l({role:t.role})})})]},t.role))})]})}),(((d=s==null?void 0:s.by_type)==null?void 0:d.length)??0)>0&&e.jsx("div",{children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-surface-border",children:[e.jsx("th",{className:a,children:"Type"}),e.jsx("th",{className:`${a} text-right w-24`,children:"Pending"}),e.jsx("th",{className:`${a} text-right w-24`,children:"Claimed"}),e.jsx("th",{className:`${a} text-right w-24`,children:"Resolved"})]})}),e.jsx("tbody",{children:s.by_type.map(t=>e.jsxs("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsx("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsx("button",{onClick:()=>l({type:t.type}),className:"hover:text-accent hover:underline",children:t.type})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(c,{value:t.pending,colorClass:"text-status-pending",onClick:()=>l({type:t.type})})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(c,{value:t.claimed,colorClass:"text-status-active",onClick:()=>l({type:t.type})})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(c,{value:t.resolved,colorClass:"text-status-success",onClick:()=>l({type:t.type})})})]},t.type))})]})}),s&&s.by_role.length===0&&s.by_type.length===0&&e.jsx("div",{className:"py-16 text-center",children:e.jsxs("p",{className:"text-sm text-text-tertiary",children:["No escalation activity in the last ",r]})})]})}export{$ as EscalationsOverview};
2
- //# sourceMappingURL=EscalationsOverview-GXYFPASS.js.map
@@ -1,2 +0,0 @@
1
- import{a as d,j as t}from"./vendor-query-B2UbickB.js";import{F as $,b as g}from"./FilterBar-Ck4K4rzu.js";import{C as T}from"./index-D8VH6K8B.js";import{E as F}from"./SwimlaneTimeline-7SiwATsZ.js";import{f as O}from"./format-gXZXQ-HJ.js";const y="lt-collapsed-sections";function D(r){try{const n=localStorage.getItem(`${y}:${r}`);return n?new Set(JSON.parse(n)):new Set}catch{return new Set}}function P(r,n){localStorage.setItem(`${y}:${r}`,JSON.stringify([...n]))}function K(r){const[n,l]=d.useState(()=>D(r)),p=d.useCallback(o=>n.has(o),[n]),u=d.useCallback(o=>{l(x=>{const c=new Set(x);return c.has(o)?c.delete(o):c.add(o),P(r,c),c})},[r]);return{isCollapsed:p,toggle:u}}const A=new Set(["activity_task_scheduled","timer_started","child_workflow_execution_started","signal_wait_started"]),L=new Set(["activity_task_completed","activity_task_failed","timer_fired","child_workflow_execution_completed","child_workflow_execution_failed","workflow_execution_signaled"]);function R(r){const n=new Set;for(const l of r)L.has(l.event_type)&&l.attributes.timeline_key&&n.add(l.attributes.timeline_key);return n}function M({events:r,childTasks:n}){const[l,p]=d.useState(""),[u,o]=d.useState(""),[x,c]=d.useState("asc"),[f,m]=d.useState(new Set),b=[...new Set(r.map(e=>e.category))].sort(),w=[...new Set(r.map(e=>e.event_type))].sort(),v=R(r),S=e=>{if(e.duration_ms!==null||!A.has(e.event_type))return!1;const s=e.attributes.timeline_key;return!(s&&v.has(s))};let a=r;l&&(a=a.filter(e=>e.category===l)),u&&(a=a.filter(e=>e.event_type===u)),a=[...a].sort((e,s)=>x==="asc"?e.event_id-s.event_id:s.event_id-e.event_id);const j=e=>{switch(e){case"activity":return"bg-blue-500";case"signal":return"bg-emerald-500";case"timer":return"bg-status-warning";case"child_workflow":return"bg-violet-500";default:return"bg-text-tertiary"}},k=e=>{const s=e.event_type;if(e.attributes.activity_type)return`${s} — ${e.attributes.activity_type}`;if(e.attributes.signal_name)return`${s} — ${e.attributes.signal_name}`;if(e.attributes.child_workflow_id){const i=e.attributes.child_workflow_id,C=i.length>24?`${i.slice(0,24)}...`:i;return`${s} — ${C}`}return s},N=e=>{if(!(n!=null&&n.length))return;const s=e.attributes.activity_type;if(s)return n.find(i=>i.workflow_type===s)},_=e=>{m(s=>{const i=new Set(s);return i.has(e)?i.delete(e):i.add(e),i})},h=a.length>0&&a.every(e=>f.has(e.event_id)),E=()=>{m(h?new Set:new Set(a.map(e=>e.event_id)))};return t.jsxs("div",{children:[t.jsxs("div",{className:"px-6 py-4 border-b border-surface-border flex items-center justify-between flex-wrap gap-3",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsxs("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:["Events (",a.length,")"]}),a.length>0&&t.jsx("button",{onClick:E,className:"text-[10px] text-accent hover:underline",children:h?"Collapse all":"Expand all"})]}),t.jsxs($,{children:[t.jsx(g,{label:"Category",value:l,onChange:p,options:b.map(e=>({value:e,label:e}))}),t.jsx(g,{label:"Type",value:u,onChange:o,options:w.map(e=>({value:e,label:e}))}),t.jsx("button",{onClick:()=>c(e=>e==="asc"?"desc":"asc"),className:"btn-ghost text-xs",children:x==="asc"?"Oldest first":"Newest first"})]})]}),t.jsx("div",{children:a.length===0?t.jsx("div",{className:"px-6 py-8 text-center",children:t.jsx("p",{className:"text-sm text-text-tertiary",children:"No events match the current filters"})}):a.map(e=>{const s=f.has(e.event_id),i=S(e);return t.jsxs("div",{className:"border-b border-surface-border last:border-b-0",children:[t.jsxs("div",{className:"px-6 py-3 flex items-center gap-4 cursor-pointer hover:bg-surface-hover transition-colors duration-200",onClick:()=>_(e.event_id),children:[t.jsx("span",{className:`text-[10px] text-text-tertiary transition-transform duration-300 ${s?"rotate-90":""}`,children:"▶"}),t.jsx("span",{className:"text-xs font-mono text-text-tertiary w-8 shrink-0",children:e.event_id}),t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${j(e.category)}`}),t.jsx("span",{className:"text-sm text-text-primary flex-1 truncate",children:k(e)}),t.jsx("span",{className:"text-xs font-mono text-text-tertiary shrink-0",children:i?t.jsxs("span",{className:"inline-flex items-center gap-1 text-status-warning",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"}),"Pending"]}):e.duration_ms!==null?O(e.duration_ms):"--"}),t.jsx("time",{className:"text-[10px] font-mono text-text-tertiary shrink-0",children:new Date(e.event_time).toLocaleTimeString()})]}),t.jsx(T,{open:s&&!!e.attributes,children:t.jsx("div",{className:"px-6 pb-4 pl-16",children:t.jsx(F,{event:e,childTask:N(e),pending:i,onClose:()=>_(e.event_id)})})})]},e.event_id)})})]})}export{M as E,K as u};
2
- //# sourceMappingURL=EventTable-B01oJf6Y.js.map
@@ -1,2 +0,0 @@
1
- import{j as e}from"./vendor-query-B2UbickB.js";import{S as r}from"./index-D8VH6K8B.js";function a({label:s,value:t}){return e.jsxs("div",{children:[e.jsx(r,{className:"mb-1",children:s}),e.jsx("div",{className:"text-sm text-text-primary",children:t??"—"})]})}export{a as F};
2
- //# sourceMappingURL=Field-DuFBAYhu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Field-DuFBAYhu.js","sources":["../../src/components/common/data/Field.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SectionLabel } from '../layout/SectionLabel';\n\ninterface FieldProps {\n label: string;\n value: ReactNode;\n}\n\nexport function Field({ label, value }: FieldProps) {\n return (\n <div>\n <SectionLabel className=\"mb-1\">{label}</SectionLabel>\n <div className=\"text-sm text-text-primary\">{value ?? '—'}</div>\n </div>\n );\n}\n"],"names":["Field","label","value","jsx","SectionLabel"],"mappings":"uFAQO,SAASA,EAAM,CAAE,MAAAC,EAAO,MAAAC,GAAqB,CAClD,cACG,MAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAa,UAAU,OAAQ,SAAAH,EAAM,EACtCE,EAAAA,IAAC,MAAA,CAAI,UAAU,4BAA6B,YAAS,GAAA,CAAI,CAAA,EAC3D,CAEJ"}
@@ -1,2 +0,0 @@
1
- import{j as e,a as c}from"./vendor-query-B2UbickB.js";function u({children:a,actions:s}){return e.jsx("div",{className:"sticky top-0 z-20 bg-surface -mx-10 px-10 py-1.5 pb-4 border-b border-surface-border/50",children:e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[a,s&&e.jsx("div",{className:"ml-auto flex items-center gap-2",children:s})]})})}function m({label:a,value:s,onChange:n,options:i,required:x,placeholder:r}){return e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("label",{className:"text-[10px] text-text-tertiary",children:a}),e.jsxs("select",{value:s,onChange:t=>n(t.target.value),className:"select text-[11px] py-1 px-2",children:[!x&&e.jsx("option",{value:"",children:r||"All"}),i.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))]})]})}function d({label:a,value:s,onChange:n,placeholder:i}){const[x,r]=c.useState(s),t=c.useRef(void 0);c.useEffect(()=>{r(s)},[s]);const o=l=>{r(l),clearTimeout(t.current),t.current=setTimeout(()=>n(l),300)};return c.useEffect(()=>()=>clearTimeout(t.current),[]),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("label",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:a}),e.jsx("input",{type:"text",value:x,onChange:l=>o(l.target.value),placeholder:i,className:"input text-[11px] py-1 px-2 w-48 font-mono"})]})}export{u as F,d as a,m as b};
2
- //# sourceMappingURL=FilterBar-Ck4K4rzu.js.map
@@ -1,2 +0,0 @@
1
- import{a as i,j as e}from"./vendor-query-B2UbickB.js";import{u as _}from"./mcp-blCW6IL7.js";import{u as R}from"./mcp-runs-ChPbpvXK.js";import{u as F}from"./yaml-workflows-BL4V5CQy.js";import{u as A}from"./namespaces-BgbaC3ow.js";import{P as z}from"./PageHeader-CpWFly5S.js";import{S as b}from"./StatCard-DlgF0CJC.js";import{c as E,d as I}from"./vendor-icons-ZTAKVwGc.js";import{b as W}from"./vendor-react-Cw8Gy8NJ.js";import"./index-D8VH6K8B.js";const $=[{label:"1h",ms:36e5},{label:"24h",ms:864e5},{label:"7d",ms:6048e5},{label:"30d",ms:2592e6}];function O(r){return r<1e3?`${Math.round(r)}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${(r/6e4).toFixed(1)}m`:`${(r/36e5).toFixed(1)}h`}function j({value:r,colorClass:c,onClick:v}){return r===0?e.jsx("span",{className:"text-text-tertiary",children:"0"}):e.jsx("button",{onClick:v,className:`${c} hover:underline tabular-nums font-medium`,children:r})}function X(){const r=W(),[c,v]=i.useState("24h"),[u,T]=i.useState("longtail"),{data:d}=A(),{data:m}=R({limit:500,app_id:u}),{data:N,isLoading:D}=_(),{data:y,isLoading:L}=F({limit:200}),k=i.useMemo(()=>((d==null?void 0:d.namespaces)??[]).map(t=>t.name),[d==null?void 0:d.namespaces]),p=(N==null?void 0:N.servers)??[],h=(y==null?void 0:y.workflows)??[],w=i.useMemo(()=>p.reduce((t,l)=>t+(Array.isArray(l.tool_manifest)?l.tool_manifest.length:0),0),[p]),M=i.useMemo(()=>new Set(h.map(l=>l.app_id)).size,[h]),S=i.useMemo(()=>{const t=$.find(l=>l.label===c);return Date.now()-t.ms},[c]),o=i.useMemo(()=>((m==null?void 0:m.jobs)??[]).filter(t=>new Date(t.created_at).getTime()>=S),[m==null?void 0:m.jobs,S]),C=i.useMemo(()=>{const t=new Map;for(const s of o){const a=t.get(s.entity)??{total:0,running:0,completed:0,failed:0,durations:[]};if(a.total++,s.status==="running"&&a.running++,s.status==="completed"){a.completed++;const g=new Date(s.updated_at).getTime()-new Date(s.created_at).getTime();g>0&&a.durations.push(g)}s.status==="failed"&&a.failed++,t.set(s.entity,a)}const l=[];for(const[s,a]of t)l.push({pipeline:s,...a,avgDuration:a.durations.length>0?a.durations.reduce((g,P)=>g+P,0)/a.durations.length:null});return l.sort((s,a)=>a.total-s.total)},[o]),f=i.useMemo(()=>({total:o.length,running:o.filter(t=>t.status==="running").length,completed:o.filter(t=>t.status==="completed").length,failed:o.filter(t=>t.status==="failed").length}),[o]),n=(t,l)=>{const s=new URLSearchParams;u!=="longtail"&&s.set("namespace",u),t&&s.set("entity",t),l&&s.set("status",l);const a=s.toString();r(`/mcp/executions${a?`?${a}`:""}`)},x="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return e.jsxs("div",{children:[e.jsx(z,{title:"Discovered"}),e.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[e.jsx("div",{className:"flex items-center gap-1",children:$.map(t=>e.jsx("button",{onClick:()=>v(t.label),className:`px-3 py-1 text-xs rounded-full transition-colors ${c===t.label?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:t.label},t.label))}),k.length>1&&e.jsx("select",{value:u,onChange:t=>T(t.target.value),className:"select text-xs py-1 px-2",children:k.map(t=>e.jsx("option",{value:t,children:t},t))})]}),e.jsxs("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[e.jsx(b,{label:"Total Runs",value:f.total,onClick:()=>n()}),e.jsx(b,{label:"Running",value:f.running,colorClass:"text-status-active",onClick:()=>n(void 0,"running")}),e.jsx(b,{label:"Completed",value:f.completed,colorClass:"text-status-success",onClick:()=>n(void 0,"completed")}),e.jsx(b,{label:"Failed",value:f.failed,colorClass:"text-status-error",onClick:()=>n(void 0,"failed")})]}),C.length>0&&e.jsxs("table",{className:"w-full text-left mb-10",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-surface-border",children:[e.jsx("th",{className:x,children:"Tool"}),e.jsx("th",{className:`${x} text-right w-20`,children:"Total"}),e.jsx("th",{className:`${x} text-right w-20`,children:"Running"}),e.jsx("th",{className:`${x} text-right w-24`,children:"Completed"}),e.jsx("th",{className:`${x} text-right w-20`,children:"Failed"}),e.jsx("th",{className:`${x} text-right w-28`,children:"Avg Duration"})]})}),e.jsx("tbody",{children:C.map(t=>e.jsxs("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsx("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsx("button",{onClick:()=>n(t.pipeline),className:"hover:text-accent hover:underline",children:t.pipeline})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(j,{value:t.total,colorClass:"text-text-secondary",onClick:()=>n(t.pipeline)})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(j,{value:t.running,colorClass:"text-status-active",onClick:()=>n(t.pipeline,"running")})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(j,{value:t.completed,colorClass:"text-status-success",onClick:()=>n(t.pipeline,"completed")})}),e.jsx("td",{className:"py-3 text-sm text-right",children:e.jsx(j,{value:t.failed,colorClass:"text-status-error",onClick:()=>n(t.pipeline,"failed")})}),e.jsx("td",{className:"py-3 text-sm font-mono text-text-secondary text-right",children:t.avgDuration!==null?O(t.avgDuration):"—"})]},t.pipeline))})]}),C.length===0&&e.jsx("div",{className:"py-12 text-center mb-8",children:e.jsxs("p",{className:"text-sm text-text-tertiary",children:["No MCP tool activity in the last ",c]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("button",{onClick:()=>r("/mcp/servers"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx(E,{size:16,className:"text-accent shrink-0"}),e.jsx("span",{className:"text-sm font-medium text-text-primary",children:"Tool Servers"})]}),e.jsxs("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[D?"—":p.length,e.jsxs("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["server",p.length!==1?"s":""," · ",w," tool",w!==1?"s":""]})]}),e.jsx("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Built-in and external MCP servers. Each server exposes tools that workflows and agents can call."})]}),e.jsxs("button",{onClick:()=>r("/mcp/workflows"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx(I,{size:16,className:"text-purple-400 shrink-0"}),e.jsx("span",{className:"text-sm font-medium text-text-primary",children:"Pipeline Registry"})]}),e.jsxs("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[L?"—":h.length,e.jsxs("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["workflow",h.length!==1?"s":""," · ",M," server",M!==1?"s":""]})]}),e.jsx("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Compiled from discovery runs. Deterministic tool-to-tool pipelines — no LLM, no token costs."})]})]})]})}export{X as McpOverview};
2
- //# sourceMappingURL=McpOverview-JkvRcX2e.js.map
@@ -1,2 +0,0 @@
1
- import{j as e,a as x,b as de}from"./vendor-query-B2UbickB.js";import{P as Fe}from"./PageHeader-CpWFly5S.js";import{S as se}from"./StatusBadge-TlC4jiig.js";import{C as ze}from"./CopyableId-CBdxWfp8.js";import{T as Be}from"./TimeAgo-UPG6DoH8.js";import{b as qe}from"./useNatsEvents-Xr43X1fG.js";import{e as xe,L as Z,b as _e,d as Ve}from"./vendor-react-Cw8Gy8NJ.js";import{a as Ee,c as Ce,d as Pe,e as Qe,f as Ue}from"./mcp-query-DoAyPbjC.js";import{c as Me,d as He,e as Ke,f as Ge,g as Ye,h as Xe,i as Ze,j as et,k as tt,l as st,m as rt,a as at}from"./yaml-workflows-BL4V5CQy.js";import{a as oe}from"./workflows-Cc4VHcrp.js";import{b as me}from"./tasks-tRqClPns.js";import{J as E,b as nt,c as it,d as ct}from"./index-D8VH6K8B.js";import{S as lt}from"./SimpleMarkdown-CBlvaWP4.js";import{S as ot}from"./SwimlaneTimeline-7SiwATsZ.js";import{T as dt,C as xt,L as mt,V as ut}from"./VersionHistory-Bt7WBr6m.js";import{M as pt,l as ht}from"./vendor-icons-ZTAKVwGc.js";import{M as ft}from"./Modal-B4rbIVAn.js";import{u as gt,b as yt}from"./mcp-runs-ChPbpvXK.js";import{u as bt}from"./useYamlActivityEvents-BO51u8tm.js";import{b as jt}from"./helpers-0gSleuzT.js";import"./format-gXZXQ-HJ.js";import"./CollapsibleSection-Cxk4wvjT.js";function vt({labels:t,current:n,maxReachable:o,onStepClick:a}){return e.jsx("div",{className:"sticky top-0 z-10 bg-surface/95 backdrop-blur-sm pb-6 pt-1 -mt-1",children:e.jsx("div",{className:"flex items-center gap-3",children:t.map((l,d)=>{const s=d+1,i=s<=o;return e.jsxs("div",{className:"flex items-center gap-2",children:[s>1&&e.jsx("div",{className:`w-8 h-px ${n>=s?"bg-accent":"bg-surface-border"}`}),e.jsx("button",{onClick:()=>i&&a(s),disabled:!i,className:`w-6 h-6 rounded-full text-[11px] font-semibold flex items-center justify-center transition-colors ${n===s?"bg-accent text-text-inverse":i?"bg-accent/20 text-accent cursor-pointer hover:bg-accent/30":"bg-surface-sunken text-text-tertiary cursor-default"}`,children:s}),e.jsx("span",{className:`text-xs ${n===s?"text-text-primary font-medium":"text-text-tertiary"}`,children:l})]},s)})})})}function Nt(){const[t,n]=xe(),o=t.get("step"),a=o?parseInt(o,10):null,l=x.useCallback(d=>{n(s=>{const i=new URLSearchParams(s);return d===null?i.delete("step"):i.set("step",String(d)),i},{replace:!1})},[n]);return[a,l]}const wt=["Original","Timeline","Profile","Deploy","Test","Verify"];function kt(t){return t?t.status==="completed"?"completed":t.status==="failed"?"failed":"in_progress":"pending"}function re(t){const n=t.match(/```json\s*([\s\S]*?)```/)||t.match(/\{[\s\S]*?\n\}/);if(!n)return null;try{return JSON.parse((n[1]??n[0]).trim())}catch{return null}}function Q({children:t}){return e.jsx("div",{className:"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-3 pb-5 z-10 flex justify-between items-center mt-8",style:{bottom:"calc(var(--feed-height, 0px) - 8px)"},children:t})}function ae({title:t,subtitle:n}){return e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"text-lg font-light text-text-primary",children:t}),n&&e.jsx("p",{className:"text-xs text-text-tertiary mt-0.5",children:n})]})}function St({text:t}){const n=[],o=/\n?\{[\s\S]*?\n\}/g;let a=0;for(const l of t.matchAll(o))try{JSON.parse(l[0].trim()),l.index>a&&n.push({type:"text",content:t.slice(a,l.index)}),n.push({type:"json",content:l[0].trim()}),a=l.index+l[0].length}catch{}return a<t.length&&n.push({type:"text",content:t.slice(a)}),n.length||n.push({type:"text",content:t}),e.jsx("div",{className:"space-y-3",children:n.map((l,d)=>l.type==="json"?e.jsx(E,{data:JSON.parse(l.content),defaultMode:"tree"},d):l.content.trim()?e.jsx(lt,{content:l.content.trim()},d):null)})}function _t({status:t,originalEnvelope:n,originalPrompt:o,originalOutput:a,originalDurationMs:l,resultSummary:d,onNext:s}){return e.jsxs("div",{children:[e.jsx(ae,{title:"Original Query",subtitle:"Dynamic LLM-orchestrated execution — the discovery run"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input"}),n?e.jsx(E,{data:n,defaultMode:"tree"}):o?e.jsx(E,{data:{prompt:o},defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"Loading..."})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Output"}),t!=="completed"&&t!=="failed"?e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Pending..."}):a?e.jsx(E,{data:a,defaultMode:"tree"}):d?e.jsx(St,{text:d}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No structured output"}),l!=null&&e.jsxs("p",{className:"text-[10px] text-text-tertiary mt-2",children:[(l/1e3).toFixed(1),"s"]})]})]}),e.jsxs(Q,{children:[e.jsx("span",{}),e.jsx("button",{onClick:s,className:"btn-primary text-xs",children:"Next: Timeline"})]})]})}function Ct({events:t,onBack:n,onNext:o}){return e.jsxs("div",{children:[e.jsx(ae,{title:"Execution Timeline",subtitle:"Activity swimlane showing tool calls and their durations"}),e.jsx(ot,{events:t}),e.jsxs(Q,{children:[e.jsx("button",{onClick:n,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Profile"})]})]})}function ce({children:t}){return e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-widest text-text-tertiary",children:t}),e.jsx("span",{className:"flex-1 border-b border-surface-border"})]})}function Pt({compiledYaml:t,onBack:n,onNext:o}){var a,l;return e.jsxs("div",{children:[e.jsx(ae,{title:"Pipeline Profile",subtitle:"Configure the compiled tool — name, tags, input schema, and deployment target"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Name"}),e.jsx("p",{className:"text-sm font-mono text-text-primary",children:t.name})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Status"}),e.jsx(se,{status:t.status})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Namespace"}),e.jsx("p",{className:"text-xs font-mono text-text-primary",children:t.app_id||"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Topic"}),e.jsx("p",{className:"text-xs font-mono text-text-primary",children:t.graph_topic||"—"})]})]}),t.description&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Description"}),e.jsx("p",{className:"text-xs text-text-secondary leading-relaxed",children:t.description})]})]}),e.jsxs("div",{className:"space-y-4",children:[((a=t.activity_manifest)==null?void 0:a.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Pipeline"}),e.jsx("div",{className:"flex items-center gap-1 flex-wrap",children:t.activity_manifest.filter(d=>d.tool_source!=="trigger").map((d,s,i)=>e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-[10px] px-2 py-0.5 rounded bg-surface-sunken font-mono text-text-primary",children:d.mcp_tool_name||d.title}),s<i.length-1&&e.jsx("span",{className:"text-text-tertiary text-[10px]",children:"→"})]},s))})]}),((l=t.tags)==null?void 0:l.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsxs("div",{className:"flex gap-1.5 flex-wrap",children:[t.tags.slice(0,12).map(d=>e.jsx("span",{className:"text-[10px] px-2 py-0.5 rounded-full bg-surface-sunken text-text-secondary",children:d},d)),t.tags.length>12&&e.jsxs("span",{className:"text-[10px] text-text-tertiary",children:["+",t.tags.length-12," more"]})]})]})]})]}),e.jsxs(Q,{children:[e.jsx("button",{onClick:n,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(Z,{to:`/mcp/workflows/${t.id}`,className:"px-3 py-1.5 text-xs border border-surface-border rounded text-text-primary hover:bg-surface-sunken transition-colors",children:"Edit Workflow"}),t.status!=="active"?e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Deploy"}):e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Test"})]})]})]})}function Mt({originalPrompt:t,compileAppId:n,setCompileAppId:o,compileName:a,setCompileName:l,compileDescription:d,setCompileDescription:s,compileTags:i,setCompileTags:m,describeData:r,describePrompt:v,allAppIds:S,compileFeedback:u,setCompileFeedback:W,onCompile:_,isCompiling:I,compileError:T,onBack:y}){const[f,N]=x.useState(!!u);return e.jsxs("div",{children:[e.jsx(ae,{title:"Create Workflow Profile",subtitle:"Define the deterministic workflow tool from this execution"}),t&&e.jsxs("div",{className:"mb-6",children:[e.jsx(ce,{children:"Original Query"}),e.jsx("p",{className:"text-xs text-text-primary leading-relaxed",children:t})]}),e.jsx(ce,{children:"Workflow Configuration"}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Namespace *"}),e.jsx("input",{type:"text",value:n,onChange:g=>o(g.target.value.toLowerCase().replace(/[^a-z0-9]/g,"")),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"e.g. longtail"}),S.length>0&&e.jsx("div",{className:"flex gap-1.5 mt-1.5 flex-wrap",children:S.map(g=>e.jsx("button",{type:"button",onClick:()=>o(g),className:`text-[10px] px-2 py-0.5 rounded-full transition-colors ${n===g?"bg-accent/20 text-accent":"bg-surface-sunken text-text-tertiary hover:text-text-secondary"}`,children:g},g))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool Name *"}),e.jsx("input",{type:"text",value:a,onChange:g=>l(g.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"e.g. auth-screenshot-all-nav-pages"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),!d&&!r&&v&&e.jsx("span",{className:"text-[10px] text-accent animate-pulse",children:"Generating..."})]}),e.jsx("textarea",{value:d,onChange:g=>s(g.target.value),placeholder:"Describe what this workflow does as a reusable tool...",className:"w-full min-h-[80px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-xs text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1",children:r?"AI-generated. Edit to refine.":"Describe what this workflow does so future queries can find it."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsx(dt,{tags:i,onChange:m,placeholder:"e.g. browser, screenshots, login"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Press Enter or comma to add."})]})]}),e.jsxs("div",{className:"mt-5",children:[e.jsx("button",{type:"button",onClick:()=>N(!f),className:"text-xs text-accent hover:text-accent/80 transition-colors",children:f?"Hide refinement feedback":"Refine compilation"}),f&&e.jsxs("div",{className:"mt-2",children:[e.jsx("textarea",{value:u,onChange:g=>W(g.target.value),placeholder:"Describe what should change. E.g.: 'Only url, username, password, and screenshot_dir should be dynamic inputs. The steps array is an implementation detail.'",className:"w-full min-h-[80px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-xs text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1",children:"This feedback is sent to the compiler so it can adjust inputs, outputs, and step selection."})]})]}),e.jsxs(Q,{children:[e.jsx("button",{onClick:y,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("button",{onClick:_,disabled:!a.trim()||!n.trim()||I,className:"btn-primary text-xs",children:I?"Creating...":"Create Profile"})]}),T&&e.jsx("p",{className:"mt-3 text-sm text-status-error",children:T})]})}function Tt(t){const{compiledYaml:n,isUncompilable:o,onBack:a,onNext:l}=t;return o&&!n?e.jsxs("div",{children:[e.jsx(ae,{title:"Create Workflow Profile",subtitle:"Define the deterministic workflow tool from this execution"}),e.jsxs("div",{className:"rounded-md bg-status-warning/5 border border-status-warning/20 px-4 py-3 mb-6",children:[e.jsx("p",{className:"text-xs text-status-warning font-medium",children:"Cannot compile this query"}),e.jsx("p",{className:"text-xs text-text-secondary mt-1",children:"This query did not complete successfully. Resolve the escalation before compiling to a deterministic workflow."})]}),e.jsxs(Q,{children:[e.jsx("button",{onClick:a,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("span",{})]})]}):n?e.jsx(Pt,{compiledYaml:n,onBack:a,onNext:l}):e.jsx(Mt,{originalPrompt:t.originalPrompt,compileAppId:t.compileAppId,setCompileAppId:t.setCompileAppId,compileName:t.compileName,setCompileName:t.setCompileName,compileDescription:t.compileDescription,setCompileDescription:t.setCompileDescription,compileTags:t.compileTags,setCompileTags:t.setCompileTags,describeData:t.describeData,describePrompt:t.describePrompt,allAppIds:t.allAppIds,compileFeedback:t.compileFeedback,setCompileFeedback:t.setCompileFeedback,onCompile:t.onCompile,isCompiling:t.isCompiling,compileError:t.compileError,onBack:a})}function It({yamlId:t,onAdvance:n,onBack:o}){var ee;const a=de(),l=x.useRef(null),[d,s]=x.useState(""),[i,m]=x.useState(!1),{data:r,refetch:v}=Me(t),{data:S}=He(t),u=Ke(),W=Ge(),_=Ye(),I=Xe(),T=Ze(),y=et(),[f,N]=x.useState(""),[g,w]=x.useState(""),[$,A]=x.useState(""),[D,P]=x.useState([]),[j,h]=x.useState(!1),[c,F]=x.useState(null),O=c!==null&&r!=null&&c!==r.content_version,{data:J}=tt(t,O?c:null),B=O&&J?J.yaml_content:r==null?void 0:r.yaml_content,M=O&&J?J.input_schema:r==null?void 0:r.input_schema,U=O&&J?J.output_schema:r==null?void 0:r.output_schema;x.useEffect(()=>{r&&(N(r.yaml_content),w(JSON.stringify(r.input_schema,null,2)),A(JSON.stringify(r.output_schema,null,2)),r.input_field_meta&&P(r.input_field_meta))},[r==null?void 0:r.id,r==null?void 0:r.content_version]);const H=x.useMemo(()=>{const z=new URLSearchParams;return c!==null&&z.set("version",String(c)),z},[c]),K=x.useCallback(z=>{const q=z.get("version");F(q?parseInt(q,10):null)},[]),V=(r==null?void 0:r.status)!=="archived"&&!O,p=async()=>{if(!r)return;let z,q;try{z=JSON.parse(g)}catch{}try{q=JSON.parse($)}catch{}await y.mutateAsync({id:r.id,yaml_content:f,...z?{input_schema:z}:{},...q?{output_schema:q}:{}}),h(!1),v()},b=()=>{r&&(N(r.yaml_content),w(JSON.stringify(r.input_schema,null,2)),A(JSON.stringify(r.output_schema,null,2)),h(!1))},L=async()=>{r&&(await u.mutateAsync(r.id),await W.mutateAsync(r.id),a.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),a.invalidateQueries({queryKey:["yamlWorkflow"],refetchType:"all"}),v())},ne=async()=>{await T.mutateAsync({id:t,compilation_feedback:d.trim()||void 0}),s(""),m(!1),v()};if(!r)return e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Loading workflow..."});const G=u.isPending||W.isPending||_.isPending||T.isPending||I.isPending;return e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_200px] gap-8",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between mb-6",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-light text-text-primary",children:[r.status==="active"?"Redeploy":"Deploy"," Workflow"]}),e.jsx("p",{className:"text-xs text-text-tertiary mt-0.5",children:"Review configuration, input/output schemas, and YAML definition"})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("button",{type:"button",onClick:()=>{m(!i),h(!1)},className:`inline-flex items-center gap-1 text-xs transition-colors hover:underline ${i?"text-accent font-medium":"text-accent/70 hover:text-accent"}`,children:[e.jsx(pt,{className:"w-3 h-3"}),"Recompile with Feedback"]}),e.jsx("span",{className:"text-text-tertiary/30",children:"|"}),e.jsxs("button",{type:"button",onClick:()=>{h(!j),m(!1)},className:`inline-flex items-center gap-1 text-xs transition-colors hover:underline ${j?"text-accent font-medium":"text-accent/70 hover:text-accent"}`,children:[e.jsx(ht,{className:"w-3 h-3"}),"Manual Edit"]})]})]}),i&&e.jsxs("div",{className:"mb-4 p-4 bg-surface-sunken border border-surface-border rounded-lg",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"What should change?"}),e.jsx("textarea",{value:d,onChange:z=>s(z.target.value),placeholder:"E.g.: 'Only url, username, password, and screenshot_dir should be dynamic inputs. The steps array and script are implementation details.'",className:"w-full min-h-[80px] px-3 py-2 bg-surface border border-surface-border rounded-md text-xs text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}),e.jsxs("div",{className:"flex items-center justify-between mt-2",children:[e.jsx("p",{className:"text-[10px] text-text-tertiary",children:"This feedback guides the compiler. The current YAML will be replaced."}),e.jsx("button",{onClick:ne,disabled:!d.trim()||T.isPending,className:"btn-primary text-xs shrink-0 ml-4",children:T.isPending?"Recompiling...":"Recompile Pipeline"})]})]}),O&&e.jsxs("div",{className:"mb-4 px-3 py-2 bg-accent-muted/20 border border-accent-muted/40 rounded-md flex items-center justify-between",children:[e.jsxs("span",{className:"text-xs text-accent",children:["Viewing version ",c]}),e.jsx("button",{onClick:()=>F(null),className:"text-xs text-accent hover:underline",children:"Back to current"})]}),e.jsx(xt,{wf:r,resolvedInputSchema:M,resolvedOutputSchema:U,resolvedYaml:B,configEditing:j,setConfigEditing:h,canEditConfig:V,yamlDraft:f,setYamlDraft:N,inputSchemaDraft:g,setInputSchemaDraft:w,outputSchemaDraft:$,setOutputSchemaDraft:A,inputFieldMetaDraft:D,setInputFieldMetaDraft:P,onSave:p,onCancel:b,updateMutation:y,yamlTextareaRef:l,isCollapsed:!1,onToggle:()=>{},schemasGrid:!0}),e.jsxs(Q,{children:[e.jsx("button",{onClick:o,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),r.status==="active"?e.jsx("button",{onClick:n,disabled:i,className:"btn-primary text-xs",children:"Next: Test"}):e.jsx("button",{onClick:L,disabled:G||i,className:"btn-primary text-xs",children:G?"Deploying...":"Deploy & Activate"})]})]}),e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"sticky top-6",children:[e.jsx(mt,{status:r.status,sourceWorkflowId:r.source_workflow_id,contentVersion:r.content_version,deployedContentVersion:r.deployed_content_version,onDeploy:L,onArchive:()=>_.mutateAsync(t).then(()=>v()),onDelete:()=>I.mutateAsync(t),onRegenerate:ne,isPending:G,error:void 0}),(((ee=S==null?void 0:S.versions)==null?void 0:ee.length)??0)>1&&e.jsx(ut,{versionsData:S,searchParams:H,setSearchParams:K,currentVersion:r.content_version,viewingVersion:O?c:null})]})})]})}function At(t){const n=new Date(t.created_at),o=n.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),a=n.toLocaleDateString([],{month:"short",day:"numeric"}),l=t.status==="completed"||Number(t.status)===0?"completed":t.is_live?"running":"failed";return`${a} ${o} — ${l}`}function Dt({yamlId:t,originalWorkflowId:n,originalResult:o,originalPrompt:a,onBack:l,onAdvance:d}){var H,K,V;const s=de(),{data:i}=Me(t),m=st(),{data:r}=gt({entity:i==null?void 0:i.graph_topic,app_id:(i==null?void 0:i.app_id)||"longtail",limit:10}),[v,S]=x.useState(null),{data:u}=yt(v??"",(i==null?void 0:i.app_id)||"longtail"),[W,_]=x.useState(!1),[I,T]=x.useState(!1),[y,f]=x.useState({}),[N,g]=x.useState("{}"),[w,$]=x.useState(null),{steps:A,isComplete:D}=bt(w),{data:P}=oe(n??""),{data:j}=me(n??""),h=(H=P==null?void 0:P.result)==null?void 0:H.data,c=x.useMemo(()=>{if(!(j!=null&&j.envelope))return null;try{return typeof j.envelope=="string"?JSON.parse(j.envelope):j.envelope}catch{return null}},[j==null?void 0:j.envelope]),F=((K=c==null?void 0:c.data)==null?void 0:K.prompt)??a,O=(r==null?void 0:r.jobs)??[];x.useEffect(()=>{!v&&O.length>0&&S(O[0].workflow_id)},[O.length]),x.useEffect(()=>{if(i!=null&&i.input_schema){const p=jt(i.input_schema);f(p),g(JSON.stringify(p,null,2))}},[i==null?void 0:i.id]);const J=async()=>{if(i)try{const p=I?JSON.parse(N):y,b=await m.mutateAsync({id:i.id,data:p,sync:!1});b.job_id&&$(b.job_id)}catch{}};if(x.useEffect(()=>{if(D&&w){const p=w,b=setTimeout(()=>{_(!1),$(null),S(p),s.invalidateQueries({queryKey:["mcpRuns"],refetchType:"all"})},1e3);return()=>clearTimeout(b)}},[D,w,s]),!i)return e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Loading..."});const B=(h==null?void 0:h.result)??(typeof(h==null?void 0:h.summary)=="string"?re(h.summary):null)??(o==null?void 0:o.result)??(typeof(o==null?void 0:o.summary)=="string"?re(o.summary):null)??o;let M=null,U=null;if(u!=null&&u.result){const p=u.result;if(typeof p.response=="string"){const b=p.response.match(/```json\s*([\s\S]*?)```/);if(b)try{M=JSON.parse(b[1].trim())}catch{M=p}else M=re(p.response)??p}else M=p}if((V=u==null?void 0:u.events)!=null&&V.length){const p=u.events.find(b=>{var L;return b.event_type==="activity_task_completed"&&b.is_system&&((L=b.attributes)==null?void 0:L.result)&&Object.keys(b.attributes.result).length>0});U=p?p.attributes.result:null}return e.jsxs("div",{children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"text-lg font-light text-text-primary",children:"Compare Runs"}),e.jsxs("div",{className:"flex items-center gap-3 mt-1",children:[e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:i.name}),e.jsxs("span",{className:"text-[10px] text-text-tertiary",children:["v",i.content_version]}),e.jsx(Z,{to:`/mcp/workflows/${t}`,className:"text-[10px] text-accent hover:underline",children:"View workflow"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Original MCP Query"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"Dynamic LLM orchestration"})]}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Compiled Pipeline Run"}),O.length>0&&v&&e.jsx("select",{value:v,onChange:p=>S(p.target.value),className:"mt-0.5 bg-transparent border-none text-[10px] text-accent hover:text-accent/80 cursor-pointer focus:outline-none -ml-1 p-0",children:O.map(p=>e.jsx("option",{value:p.workflow_id,children:At(p)},p.workflow_id))}),!v&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"No runs yet"})]}),e.jsxs("button",{onClick:()=>_(!0),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent/10 text-accent rounded-md hover:bg-accent/20 transition-colors shrink-0",children:[e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M3 1.5v9l7.5-4.5z"})}),"Run Test"]})]})]}),e.jsx(ce,{children:"Input"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6",children:[e.jsx("div",{children:c?e.jsx(E,{data:c,defaultMode:"tree"}):F?e.jsx("p",{className:"text-xs text-text-primary leading-relaxed px-3 py-2 bg-surface-sunken rounded-md",children:F}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"Loading..."})}),e.jsx("div",{children:U?e.jsx(E,{data:U,defaultMode:"tree"}):v&&i.input_schema?e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] text-text-tertiary italic mb-1",children:"Stored defaults"}),e.jsx(E,{data:i.input_schema,defaultMode:"tree"})]}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No runs yet"})})]}),e.jsx(ce,{children:"Output"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6",children:[e.jsxs("div",{children:[B?e.jsx(E,{data:B,defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No output"}),(P==null?void 0:P.duration_ms)!=null&&e.jsxs("p",{className:"text-[10px] text-text-tertiary mt-2",children:[(P.duration_ms/1e3).toFixed(1),"s"]})]}),e.jsxs("div",{children:[M?e.jsx(E,{data:M,defaultMode:"tree"}):v?e.jsx("p",{className:"text-xs text-text-tertiary animate-pulse",children:"Loading..."}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No runs yet"}),(u==null?void 0:u.duration_ms)!=null&&e.jsxs("p",{className:"text-[10px] text-text-tertiary mt-2",children:[(u.duration_ms/1e3).toFixed(1),"s"]})]})]}),e.jsx(ft,{open:W,onClose:()=>{w||_(!1)},title:w?"Executing...":"Test Compiled Pipeline",maxWidth:"max-w-lg",children:w?e.jsx(Ot,{steps:A,manifest:i.activity_manifest,isComplete:D}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-xs text-text-secondary mb-3 leading-relaxed",children:["Invoke ",e.jsx("span",{className:"font-mono text-text-primary",children:i.name})," with explicit inputs."]}),e.jsx("div",{className:"flex justify-end mb-2",children:e.jsx("button",{onClick:()=>{if(!I)g(JSON.stringify(y,null,2));else try{f(JSON.parse(N))}catch{}T(!I)},className:"text-[10px] text-accent hover:underline",children:I?"Form view":"JSON view"})}),I?e.jsx("textarea",{value:N,onChange:p=>g(p.target.value),className:"w-full min-h-[200px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("div",{className:"space-y-3 max-h-[400px] overflow-y-auto",children:Object.entries(y).map(([p,b])=>e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:p}),typeof b=="boolean"?e.jsxs("select",{value:String(b),onChange:L=>f({...y,[p]:L.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):typeof b=="object"?e.jsx("textarea",{value:JSON.stringify(b,null,2),onChange:L=>{try{f({...y,[p]:JSON.parse(L.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("input",{type:typeof b=="number"?"number":"text",value:String(b??""),onChange:L=>f({...y,[p]:typeof b=="number"?Number(L.target.value):L.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"})]},p))}),m.isError&&e.jsx("p",{className:"mt-2 text-xs text-status-error",children:m.error.message}),e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx("button",{onClick:()=>_(!1),className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:J,disabled:m.isPending,className:"btn-primary text-xs",children:m.isPending?"Starting...":"Invoke"})]})]})}),e.jsxs(Q,{children:[e.jsx("button",{onClick:l,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("button",{onClick:d,className:"btn-primary text-xs",children:"Next: Verify"})]})]})}const ke={mcp:{border:"border-blue-500",text:"text-blue-500",icon:"MCP"},db:{border:"border-blue-500",text:"text-blue-500",icon:"DB"},llm:{border:"border-violet-500",text:"text-violet-500",icon:"LLM"},transform:{border:"border-emerald-500",text:"text-emerald-500",icon:"Map"}};function Ot({steps:t,manifest:n,isComplete:o}){const a=n.filter(s=>s.type==="worker"),l=a.length,d=a.map((s,i)=>{const m=t.find(S=>S.activityId===s.activity_id),r=s.tool_source||"mcp",v=ke[r]||ke.mcp;return{activityId:s.activity_id,title:s.title||s.mcp_tool_name||s.activity_id,toolName:s.mcp_tool_name,toolSource:r,colors:v,stepIndex:i,status:(m==null?void 0:m.status)||"pending",error:m==null?void 0:m.error}});return e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-text-secondary mb-4",children:o?`All ${l} steps completed`:`Running step ${d.filter(s=>s.status==="completed").length+1} of ${l}...`}),e.jsx("div",{className:"space-y-0",children:d.map((s,i)=>{const m=i===d.length-1;return e.jsxs("div",{className:"flex items-stretch gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center w-5 shrink-0",children:[e.jsx("span",{className:`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${s.status==="completed"?"bg-status-success border-status-success":s.status==="running"?`${s.colors.border} bg-transparent animate-pulse`:s.status==="failed"?"bg-status-error border-status-error":"bg-surface-sunken border-surface-border"}`}),!m&&e.jsx("span",{className:`w-px flex-1 transition-colors ${s.status==="completed"?"bg-status-success/30":"bg-surface-border"}`})]}),e.jsxs("div",{className:`pb-4 ${m?"pb-0":""}`,children:[e.jsx("p",{className:`text-xs font-medium ${s.status==="running"?"text-text-primary":s.status==="completed"?"text-text-secondary":s.status==="failed"?"text-status-error":"text-text-tertiary"}`,children:s.title}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsx("span",{className:`text-[9px] font-mono px-1 py-0.5 rounded border ${s.colors.border} ${s.colors.text} bg-transparent`,children:s.colors.icon}),s.toolName&&e.jsx("span",{className:"text-[10px] text-text-tertiary font-mono",children:s.toolName})]}),s.error&&e.jsx("p",{className:"text-[10px] text-status-error mt-1",children:s.error})]})]},s.activityId)})}),o&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-3 text-center",children:"Closing..."})]})}const Se=["Discover","Evaluate","Execute"];function Lt(t){if(!(t!=null&&t.length))return{step:0,label:"Starting...",detail:"Initializing query router",path:null};const n=t.find(a=>a.event_type==="child_workflow_execution_started");if(n){const a=n.attributes.child_workflow_id??"",l=a.includes("mcpDeterministic");return t.some(s=>s.event_type==="child_workflow_execution_completed")?{step:3,label:l?"Deterministic complete":"Dynamic complete",detail:l?"Compiled workflow executed successfully":"Dynamic MCP orchestration completed",path:l?"deterministic":"dynamic",childWorkflowId:a}:{step:3,label:l?"Running deterministic workflow":"Running dynamic MCP query",detail:l?"Executing compiled workflow":"LLM agentic orchestration in progress (30–60s)",path:l?"deterministic":"dynamic",childWorkflowId:a}}const o=t.filter(a=>a.category==="activity").map(a=>a.attributes.activity_type??"");return o.some(a=>a==="extractWorkflowInputs")?{step:2,label:"Extracting inputs...",detail:"Preparing structured inputs for compiled workflow",path:null}:o.some(a=>a==="evaluateWorkflowMatch")?{step:2,label:"Evaluating match...",detail:"LLM judge determining best compiled workflow",path:null}:o.some(a=>a==="findCompiledWorkflows")?{step:1,label:"Searching compiled workflows...",detail:"Full-text + tag discovery of candidates",path:null}:{step:0,label:"Starting...",detail:"Initializing query router",path:null}}function Wt({events:t,status:n,verifyRunId:o}){const a=Lt(t),l=n==="completed"||n==="failed";return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex items-center gap-1",children:Se.map((d,s)=>{const i=s+1,m=a.step>i||l,r=a.step===i&&!l;return e.jsxs("div",{className:"flex items-center gap-1 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[e.jsx("div",{className:`w-5 h-5 rounded-full flex items-center justify-center text-[9px] font-medium shrink-0 transition-colors ${m?"bg-status-success/20 text-status-success":r?"bg-accent/20 text-accent animate-pulse":"bg-surface-sunken text-text-tertiary"}`,children:m?e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:3,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}):i}),e.jsx("span",{className:`text-[10px] font-medium whitespace-nowrap ${m?"text-text-secondary":r?"text-text-primary":"text-text-tertiary"}`,children:d})]}),s<Se.length-1&&e.jsx("div",{className:`h-px flex-1 min-w-4 ${m?"bg-status-success/30":"bg-surface-border"}`})]},d)})}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("p",{className:"text-xs text-text-secondary",children:a.detail}),a.path==="deterministic"&&e.jsx("span",{className:"text-[10px] bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:"Deterministic"}),a.path==="dynamic"&&e.jsx("span",{className:"text-[10px] bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full",children:"Dynamic"})]}),o&&a.step>=1&&e.jsx(Z,{to:`/workflows/executions/${o}`,className:"text-[10px] text-accent hover:underline",children:"View execution tree"})]})}function Jt({originalWorkflowId:t,originalPrompt:n,workflowName:o,onBack:a,onGoToDeploy:l}){var P,j;const d=Ee(),[s,i]=xe(),[m,r]=x.useState(""),[v,S]=x.useState(!1),u=s.get("verifyRun"),W=h=>{i(c=>{const F=new URLSearchParams(c);return h?F.set("verifyRun",h):F.delete("verifyRun"),F},{replace:!0})},{data:_}=me(t??""),I=x.useMemo(()=>{if(!(_!=null&&_.envelope))return null;try{return typeof _.envelope=="string"?JSON.parse(_.envelope):_.envelope}catch{return null}},[_==null?void 0:_.envelope]),T=((P=I==null?void 0:I.data)==null?void 0:P.prompt)??n;T&&!v&&(S(!0),r(T));const{data:y}=Ce(u??void 0),{data:f}=Pe((y==null?void 0:y.status)==="completed"?u??void 0:void 0),N=y==null?void 0:y.status,g=((j=f==null?void 0:f.result)==null?void 0:j.data)??{},w=g.discovery,$=(w==null?void 0:w.method)==="compiled-workflow",A=u&&N!=="completed"&&N!=="failed",D=async()=>{if(!m.trim())return;const h=await d.mutateAsync({prompt:m.trim()});W(h.workflow_id)};return e.jsxs("div",{children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"text-lg font-light text-text-primary",children:"End-to-End Verification"}),e.jsxs("p",{className:"text-xs text-text-tertiary mt-0.5",children:["Submit the original prompt (or a variant) to verify that",e.jsx("span",{className:"font-mono text-text-primary mx-1",children:o}),"handles it deterministically. If results are unexpected, go ",e.jsx("button",{onClick:l,className:"text-accent hover:underline",children:"back"})," to adjust."]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Query Prompt"}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:m!==T&&T?e.jsx("button",{onClick:()=>r(T),className:"text-accent hover:underline",children:"Reset to original"}):"Edit and submit to verify"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Result"}),!u&&e.jsx("p",{className:"text-[10px] text-text-tertiary italic",children:"Awaiting submission"}),A&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(se,{status:"in_progress"}),e.jsx("span",{className:"text-[10px] text-text-secondary animate-pulse",children:"Routing..."})]}),N==="failed"&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(se,{status:"failed"}),e.jsx("span",{className:"text-[10px] text-status-error",children:"Failed"})]}),N==="completed"&&e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(se,{status:"completed"}),$?e.jsxs("span",{className:"text-[10px] bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:["Deterministic (",((w==null?void 0:w.confidence)*100).toFixed(0),"%)"]}):e.jsx("span",{className:"text-[10px] bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full",children:"Dynamic (no match)"}),(y==null?void 0:y.duration_ms)!=null&&e.jsxs("span",{className:"text-[10px] text-text-tertiary",children:[(y.duration_ms/1e3).toFixed(1),"s"]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("textarea",{value:m,onChange:h=>r(h.target.value),className:"w-full min-h-[160px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-xs text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"Type a natural language query..."}),e.jsx("div",{className:"flex justify-end mt-2",children:e.jsxs("button",{onClick:D,disabled:!m.trim()||d.isPending||!!A,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent/10 text-accent rounded-md hover:bg-accent/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M3 1.5v9l7.5-4.5z"})}),d.isPending?"Starting...":A?"Running...":u?"Resubmit":"Submit"]})})]}),e.jsxs("div",{children:[!u&&e.jsx("div",{className:"flex items-center justify-center min-h-[160px] text-xs text-text-tertiary italic",children:"Submit a query to see the result"}),A&&e.jsx("div",{className:"min-h-[160px] flex items-start pt-4",children:e.jsx(Wt,{events:y==null?void 0:y.events,status:N,verifyRunId:u})}),N==="completed"&&e.jsxs("div",{className:"space-y-3",children:[typeof g.title=="string"&&e.jsx("p",{className:"text-sm text-text-primary",children:g.title}),g.result!=null&&e.jsx(E,{data:g.result,defaultMode:"tree"}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx(Z,{to:`/mcp/queries/${u}`,className:"text-[10px] text-accent hover:underline",children:"View full details"}),e.jsx("button",{onClick:()=>W(null),className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Clear"})]})]}),N==="failed"&&e.jsx("p",{className:"text-xs text-status-error py-4",children:"Query failed. Try modifying the prompt."})]})]}),e.jsxs(Q,{children:[e.jsx("button",{onClick:a,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("span",{className:"text-[10px] text-text-tertiary",children:"End-to-end verification — modify the prompt and submit to test the full pipeline"})]})]})}function Rt({escalation:t,isRoundsExhausted:n,diagnosis:o,onRetryTriage:a,isRetrying:l,rerunWorkflowId:d}){var W;const s=_e();if(!t&&!n)return null;const i=(t==null?void 0:t.status)==="pending",m=(t==null?void 0:t.status)==="resolved",r=(()=>{if(!(t!=null&&t.resolver_payload))return null;try{return typeof t.resolver_payload=="string"?JSON.parse(t.resolver_payload):t.resolver_payload}catch{return null}})(),v=((W=r==null?void 0:r._lt)==null?void 0:W.triaged)===!0,S=(()=>{if(!(t!=null&&t.escalation_payload))return null;try{return typeof t.escalation_payload=="string"?JSON.parse(t.escalation_payload):t.escalation_payload}catch{return null}})(),u=S==null?void 0:S.diagnosis;return m&&v?e.jsxs("div",{className:"rounded-md mb-4 border border-status-success/30 bg-surface-raised overflow-hidden",children:[e.jsx("div",{className:"px-4 pt-3 pb-2",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-success",children:d?"This query succeeded after AI triage":"AI triage resolved this query"}),e.jsx("p",{className:"text-xs text-text-secondary mt-1.5 leading-relaxed",children:d?"The original run hit a wall, but AI triage diagnosed the issue and re-ran the query successfully. The successful run is ready to compile into a deterministic workflow.":"The original run hit a wall. AI triage diagnosed the issue and resolved it."})]})]})}),u&&e.jsxs("div",{className:"px-4 py-2 mx-4 mb-2 rounded bg-surface-sunken",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"What went wrong"}),e.jsx("p",{className:"text-xs text-text-secondary leading-relaxed line-clamp-2",children:u})]}),e.jsx("div",{className:"px-4 py-3 border-t border-surface-border bg-surface-sunken/50",children:e.jsxs("div",{className:"flex items-center gap-3",children:[d&&e.jsxs("button",{onClick:()=>s(`/mcp/queries/${d}`),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 transition-colors",children:["Continue to successful run",e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M4.5 2l4 4-4 4"})})]}),e.jsx("button",{onClick:()=>s("/mcp/queries"),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-secondary border border-surface-border rounded-md hover:bg-surface-sunken transition-colors",children:"Start fresh"}),e.jsx(Z,{to:`/escalations/detail/${t.id}`,className:"text-[10px] text-text-tertiary hover:text-accent hover:underline ml-auto",children:"Details"})]})})]}):m?e.jsx("div",{className:"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-success/30",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-success",children:"Escalation resolved"}),e.jsx("p",{className:"text-xs text-text-tertiary mt-1",children:"This escalation was resolved manually. You can continue to compile."}),e.jsx("div",{className:"flex items-center gap-3 mt-2",children:t&&e.jsx(Z,{to:`/escalations/detail/${t.id}`,className:"text-[10px] text-accent hover:underline",children:"View escalation"})})]})]})}):e.jsx("div",{className:"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-warning/30",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-warning",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm0 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 4zm0 7a.75.75 0 100-1.5.75.75 0 000 1.5z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-warning",children:n?"This query exceeded the maximum tool rounds":"This query has a pending escalation"}),o&&e.jsx("p",{className:"text-xs text-text-secondary mt-1 line-clamp-2",children:o}),e.jsxs("div",{className:"flex items-center gap-3 mt-2",children:[i&&a&&e.jsxs("button",{onClick:a,disabled:l,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:[e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M6 0.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zm2 6l-3 1.75v-3.5l3 1.75z"})}),l?"Sending...":"Retry with AI Triage"]}),t&&e.jsx(Z,{to:`/escalations/detail/${t.id}`,className:"text-[10px] text-accent hover:underline",children:"View escalation"})]})]})]})})}function cs(){var he,fe,ge,ye,be,je,ve,Ne,we;const{workflowId:t}=Ve(),n=_e(),[o,a]=xe(),l=de(),d=x.useRef(o.get("prompt"));x.useEffect(()=>{o.has("prompt")&&a(C=>{const te=new URLSearchParams(C);return te.delete("prompt"),te},{replace:!0})},[]);const[s,i]=x.useState("longtail"),[m,r]=x.useState(""),[v,S]=x.useState(""),[u,W]=x.useState([]),[_,I]=x.useState(!1),[T,y]=x.useState(""),{data:f}=Ce(t),{data:N}=Pe(t),{data:g}=Qe(t);qe(t);const w=rt(),{data:$}=at(),{data:A}=oe(t??""),{data:D}=me(t??""),P=x.useMemo(()=>{if(!(D!=null&&D.envelope))return null;try{return typeof D.envelope=="string"?JSON.parse(D.envelope):D.envelope}catch{return null}},[D==null?void 0:D.envelope]),j=(he=A==null?void 0:A.result)==null?void 0:he.data,h=kt(f),c=(fe=N==null?void 0:N.result)==null?void 0:fe.data,F=(c==null?void 0:c.discovery)||{},O=(f==null?void 0:f.events)??[],{data:J}=nt(t),B=(ge=J==null?void 0:J.escalations)==null?void 0:ge.find(C=>C.status==="pending"),M=(ye=J==null?void 0:J.escalations)==null?void 0:ye.find(C=>C.status==="resolved"),U=B||M,H=it(),K=ct(),V=x.useMemo(()=>{if(!(M!=null&&M.resolver_payload))return null;try{return typeof M.resolver_payload=="string"?JSON.parse(M.resolver_payload):M.resolver_payload}catch{return null}},[M==null?void 0:M.resolver_payload]),p=(be=V==null?void 0:V._lt)==null?void 0:be.triageWorkflowId,{data:b}=oe((je=V==null?void 0:V._lt)!=null&&je.triaged?p??"":""),L=(ve=b==null?void 0:b.result)==null?void 0:ve.data,ne=L==null?void 0:L.rerunWorkflowId,G=(Ne=N==null?void 0:N.result)==null?void 0:Ne.milestones,ee=!!(c!=null&&c.rounds_exhausted)||!!(G!=null&&G.some(C=>C.name==="rounds_exhausted")),z=ee||!!B,q=x.useMemo(()=>{var te;const C=(te=P==null?void 0:P.data)==null?void 0:te.prompt;if(C)return C;if(d.current)return d.current;for(const $e of O){const ie=$e.attributes;if(ie.activity_type==="findCompiledWorkflows"&&Array.isArray(ie.input)&&typeof ie.input[0]=="string")return ie.input[0]}},[P,O]),Te=x.useMemo(()=>(j==null?void 0:j.result)??(typeof(j==null?void 0:j.summary)=="string"?re(j.summary):null)??(c==null?void 0:c.result)??(typeof(c==null?void 0:c.summary)=="string"?re(c.summary):null)??null,[j,c]),ue=q||(c==null?void 0:c.title),{data:Y}=Ue({prompt:h==="completed"?ue:void 0,resultTitle:c==null?void 0:c.title,resultSummary:c==null?void 0:c.summary}),k=(we=g==null?void 0:g.workflows)==null?void 0:we.find(C=>C.status==="active"||C.status==="deployed"||C.status==="draft"),Ie=x.useMemo(()=>h==="pending"?1:h==="in_progress"?2:c?k?k.status==="draft"||k.status==="deployed"?4:5:2:1,[h,c,k]),[le,R]=Nt(),X=le??Ie,Ae=h==="pending"?1:h==="in_progress"||!c||z?2:k?k.status==="draft"?4:k.status==="deployed"?5:6:3,pe=x.useRef(h);x.useEffect(()=>{pe.current==="in_progress"&&h==="completed"&&le===null&&R(3),pe.current=h},[h,le,R]);const De=x.useMemo(()=>{const C=[...wt];return(k==null?void 0:k.status)==="active"&&(C[3]="Redeploy"),C},[k==null?void 0:k.status]);Y&&!_&&(I(!0),v||S(Y.description),u.length===0&&Y.tags.length>0&&W(Y.tags),!m&&Y.tool_name&&r(Y.tool_name));const Oe=s.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),Le=x.useMemo(()=>($==null?void 0:$.app_ids)??[],[$==null?void 0:$.app_ids]),We=async()=>{!t||!m.trim()||!s.trim()||(await w.mutateAsync({workflow_id:t,task_queue:"long-tail-system",workflow_name:"mcpQuery",name:m.trim(),description:v.trim()||void 0,app_id:s.trim(),subscribes:Oe,tags:u,compilation_feedback:T.trim()||void 0}),l.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),R(4))},Je=async()=>{if(!B)return;await H.mutateAsync({id:B.id,durationMinutes:30});const C=(c==null?void 0:c.diagnosis)||B.description||"";await K.mutateAsync({id:B.id,resolverPayload:{_lt:{needsTriage:!0},notes:C}})},Re=(k==null?void 0:k.status)==="active"?5:4;return e.jsxs("div",{className:"flex flex-col min-h-[calc(100vh-12rem)]",children:[e.jsx(Fe,{title:"Compilation Wizard",actions:e.jsx("button",{onClick:()=>n("/mcp/queries"),className:"text-sm text-text-secondary hover:text-text-primary",children:"Back to list"})}),e.jsxs("div",{className:"bg-surface-raised border border-surface-border rounded-md px-6 py-5 mb-6",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsx(se,{status:h}),(F==null?void 0:F.method)==="compiled-workflow"&&e.jsxs("span",{className:"text-xs bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:["Deterministic (",(F.confidence*100).toFixed(0),"% match)"]})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-3 gap-x-8",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Run ID"}),e.jsx(ze,{label:"",value:t??null,href:`/workflows/executions/${t}`})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Duration"}),e.jsx("p",{className:"text-xs text-text-primary font-mono",children:(f==null?void 0:f.duration_ms)!=null?`${(f.duration_ms/1e3).toFixed(1)}s`:"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Started"}),e.jsx("p",{className:"text-xs text-text-primary",children:f!=null&&f.start_time?e.jsx(Be,{date:f.start_time}):"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Tool Calls"}),e.jsx("p",{className:"text-xs text-text-primary",children:typeof(c==null?void 0:c.tool_calls_made)=="number"?c.tool_calls_made:"—"})]})]})]}),e.jsx(Rt,{escalation:U,isRoundsExhausted:ee,diagnosis:c==null?void 0:c.diagnosis,onRetryTriage:B?Je:void 0,isRetrying:H.isPending||K.isPending,rerunWorkflowId:ne}),e.jsx(vt,{labels:De,current:X,maxReachable:Ae,onStepClick:C=>R(C)}),e.jsxs("div",{className:"flex-1",children:[X===1&&e.jsx(_t,{status:h,originalEnvelope:P,originalPrompt:q,originalOutput:Te,originalDurationMs:A==null?void 0:A.duration_ms,resultSummary:c==null?void 0:c.summary,onNext:()=>R(2)}),X===2&&e.jsx(Ct,{events:O,onBack:()=>R(1),onNext:()=>R(3)}),X===3&&e.jsx(Tt,{compiledYaml:k,originalPrompt:q,compileAppId:s,setCompileAppId:i,compileName:m,setCompileName:r,compileDescription:v,setCompileDescription:S,compileTags:u,setCompileTags:W,describeData:Y,describePrompt:ue,allAppIds:Le,compileFeedback:T,setCompileFeedback:y,onCompile:We,isCompiling:w.isPending,compileError:w.isError?w.error.message:void 0,isUncompilable:z,onBack:()=>R(2),onNext:()=>R(Re)}),X===4&&k&&e.jsx(It,{yamlId:k.id,onAdvance:()=>R(5),onBack:()=>R(3)}),X===5&&k&&e.jsx(Dt,{yamlId:k.id,originalWorkflowId:t,originalResult:c,originalPrompt:q,onBack:()=>R(4),onAdvance:()=>R(6)}),X===6&&k&&e.jsx(Jt,{originalWorkflowId:t,originalPrompt:q,workflowName:k.name,onBack:()=>R(5),onGoToDeploy:()=>R(4)})]})]})}export{cs as McpQueryDetailPage};
2
- //# sourceMappingURL=McpQueryDetailPage-CUMqhQdS.js.map