@hotmeshio/long-tail 0.1.0

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 (809) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +262 -0
  3. package/build/examples/external-mcp-server/server.d.ts +17 -0
  4. package/build/examples/external-mcp-server/server.js +116 -0
  5. package/build/examples/index.d.ts +2 -0
  6. package/build/examples/index.js +7 -0
  7. package/build/examples/seed.d.ts +5 -0
  8. package/build/examples/seed.js +221 -0
  9. package/build/examples/types/envelopes.d.ts +34 -0
  10. package/build/examples/types/envelopes.js +8 -0
  11. package/build/examples/types/index.d.ts +10 -0
  12. package/build/examples/types/index.js +9 -0
  13. package/build/examples/types/resolvers.d.ts +27 -0
  14. package/build/examples/types/resolvers.js +9 -0
  15. package/build/examples/workers.d.ts +10 -0
  16. package/build/examples/workers.js +49 -0
  17. package/build/examples/workflows/basic-echo/activities.d.ts +20 -0
  18. package/build/examples/workflows/basic-echo/activities.js +55 -0
  19. package/build/examples/workflows/basic-echo/index.d.ts +14 -0
  20. package/build/examples/workflows/basic-echo/index.js +66 -0
  21. package/build/examples/workflows/kitchen-sink/activities.d.ts +40 -0
  22. package/build/examples/workflows/kitchen-sink/activities.js +46 -0
  23. package/build/examples/workflows/kitchen-sink/index.d.ts +22 -0
  24. package/build/examples/workflows/kitchen-sink/index.js +123 -0
  25. package/build/examples/workflows/review-content/activities.d.ts +10 -0
  26. package/build/examples/workflows/review-content/activities.js +44 -0
  27. package/build/examples/workflows/review-content/index.d.ts +10 -0
  28. package/build/examples/workflows/review-content/index.js +95 -0
  29. package/build/examples/workflows/review-content/types.d.ts +28 -0
  30. package/build/examples/workflows/review-content/types.js +2 -0
  31. package/build/index.d.ts +37 -0
  32. package/build/index.js +151 -0
  33. package/build/modules/auth.d.ts +58 -0
  34. package/build/modules/auth.js +163 -0
  35. package/build/modules/config.d.ts +19 -0
  36. package/build/modules/config.js +26 -0
  37. package/build/modules/defaults.d.ts +58 -0
  38. package/build/modules/defaults.js +95 -0
  39. package/build/modules/ltconfig.d.ts +21 -0
  40. package/build/modules/ltconfig.js +110 -0
  41. package/build/modules/maintenance.d.ts +18 -0
  42. package/build/modules/maintenance.js +47 -0
  43. package/build/routes/auth.d.ts +2 -0
  44. package/build/routes/auth.js +48 -0
  45. package/build/routes/bot-accounts.d.ts +2 -0
  46. package/build/routes/bot-accounts.js +280 -0
  47. package/build/routes/controlplane.d.ts +2 -0
  48. package/build/routes/controlplane.js +144 -0
  49. package/build/routes/dba.d.ts +2 -0
  50. package/build/routes/dba.js +86 -0
  51. package/build/routes/delegation.d.ts +2 -0
  52. package/build/routes/delegation.js +81 -0
  53. package/build/routes/escalations/bulk.d.ts +2 -0
  54. package/build/routes/escalations/bulk.js +324 -0
  55. package/build/routes/escalations/helpers.d.ts +5 -0
  56. package/build/routes/escalations/helpers.js +48 -0
  57. package/build/routes/escalations/index.d.ts +2 -0
  58. package/build/routes/escalations/index.js +20 -0
  59. package/build/routes/escalations/list.d.ts +2 -0
  60. package/build/routes/escalations/list.js +140 -0
  61. package/build/routes/escalations/resolve.d.ts +2 -0
  62. package/build/routes/escalations/resolve.js +240 -0
  63. package/build/routes/escalations/single.d.ts +2 -0
  64. package/build/routes/escalations/single.js +195 -0
  65. package/build/routes/exports.d.ts +2 -0
  66. package/build/routes/exports.js +163 -0
  67. package/build/routes/files.d.ts +2 -0
  68. package/build/routes/files.js +47 -0
  69. package/build/routes/index.d.ts +2 -0
  70. package/build/routes/index.js +52 -0
  71. package/build/routes/insight.d.ts +2 -0
  72. package/build/routes/insight.js +58 -0
  73. package/build/routes/maintenance.d.ts +2 -0
  74. package/build/routes/maintenance.js +38 -0
  75. package/build/routes/mcp-runs.d.ts +2 -0
  76. package/build/routes/mcp-runs.js +85 -0
  77. package/build/routes/mcp.d.ts +2 -0
  78. package/build/routes/mcp.js +264 -0
  79. package/build/routes/namespaces.d.ts +2 -0
  80. package/build/routes/namespaces.js +71 -0
  81. package/build/routes/oauth.d.ts +7 -0
  82. package/build/routes/oauth.js +217 -0
  83. package/build/routes/resolve.d.ts +9 -0
  84. package/build/routes/resolve.js +19 -0
  85. package/build/routes/roles.d.ts +2 -0
  86. package/build/routes/roles.js +195 -0
  87. package/build/routes/settings.d.ts +2 -0
  88. package/build/routes/settings.js +35 -0
  89. package/build/routes/tasks.d.ts +2 -0
  90. package/build/routes/tasks.js +133 -0
  91. package/build/routes/users.d.ts +2 -0
  92. package/build/routes/users.js +206 -0
  93. package/build/routes/workflows/config.d.ts +2 -0
  94. package/build/routes/workflows/config.js +123 -0
  95. package/build/routes/workflows/discovery.d.ts +2 -0
  96. package/build/routes/workflows/discovery.js +146 -0
  97. package/build/routes/workflows/index.d.ts +2 -0
  98. package/build/routes/workflows/index.js +18 -0
  99. package/build/routes/workflows/invocation.d.ts +2 -0
  100. package/build/routes/workflows/invocation.js +162 -0
  101. package/build/routes/yaml-workflows/crud.d.ts +2 -0
  102. package/build/routes/yaml-workflows/crud.js +276 -0
  103. package/build/routes/yaml-workflows/deployment.d.ts +2 -0
  104. package/build/routes/yaml-workflows/deployment.js +179 -0
  105. package/build/routes/yaml-workflows/helpers.d.ts +2 -0
  106. package/build/routes/yaml-workflows/helpers.js +8 -0
  107. package/build/routes/yaml-workflows/index.d.ts +2 -0
  108. package/build/routes/yaml-workflows/index.js +21 -0
  109. package/build/routes/yaml-workflows/versions.d.ts +2 -0
  110. package/build/routes/yaml-workflows/versions.js +116 -0
  111. package/build/scripts/process-helpers.d.ts +11 -0
  112. package/build/scripts/process-helpers.js +59 -0
  113. package/build/scripts/process.d.ts +18 -0
  114. package/build/scripts/process.js +191 -0
  115. package/build/scripts/token.d.ts +13 -0
  116. package/build/scripts/token.js +42 -0
  117. package/build/services/auth/bot-api-key.d.ts +32 -0
  118. package/build/services/auth/bot-api-key.js +112 -0
  119. package/build/services/auth/delegation.d.ts +20 -0
  120. package/build/services/auth/delegation.js +53 -0
  121. package/build/services/auth/service-token.d.ts +23 -0
  122. package/build/services/auth/service-token.js +105 -0
  123. package/build/services/config/cache.d.ts +2 -0
  124. package/build/services/config/cache.js +24 -0
  125. package/build/services/config/index.d.ts +4 -0
  126. package/build/services/config/index.js +13 -0
  127. package/build/services/config/provider.d.ts +2 -0
  128. package/build/services/config/provider.js +30 -0
  129. package/build/services/config/read.d.ts +3 -0
  130. package/build/services/config/read.js +68 -0
  131. package/build/services/config/sql.d.ts +14 -0
  132. package/build/services/config/sql.js +58 -0
  133. package/build/services/config/write.d.ts +5 -0
  134. package/build/services/config/write.js +61 -0
  135. package/build/services/controlplane/index.d.ts +47 -0
  136. package/build/services/controlplane/index.js +124 -0
  137. package/build/services/controlplane/quorum-bridge.d.ts +15 -0
  138. package/build/services/controlplane/quorum-bridge.js +62 -0
  139. package/build/services/controlplane/sql.d.ts +21 -0
  140. package/build/services/controlplane/sql.js +70 -0
  141. package/build/services/controlplane/types.d.ts +13 -0
  142. package/build/services/controlplane/types.js +3 -0
  143. package/build/services/cron/index.d.ts +46 -0
  144. package/build/services/cron/index.js +199 -0
  145. package/build/services/db/index.d.ts +3 -0
  146. package/build/services/db/index.js +19 -0
  147. package/build/services/db/migrate.d.ts +1 -0
  148. package/build/services/db/migrate.js +78 -0
  149. package/build/services/dba.d.ts +28 -0
  150. package/build/services/dba.js +32 -0
  151. package/build/services/escalation/bulk.d.ts +27 -0
  152. package/build/services/escalation/bulk.js +57 -0
  153. package/build/services/escalation/crud.d.ts +47 -0
  154. package/build/services/escalation/crud.js +150 -0
  155. package/build/services/escalation/index.d.ts +4 -0
  156. package/build/services/escalation/index.js +20 -0
  157. package/build/services/escalation/queries.d.ts +37 -0
  158. package/build/services/escalation/queries.js +163 -0
  159. package/build/services/escalation/sql.d.ts +21 -0
  160. package/build/services/escalation/sql.js +135 -0
  161. package/build/services/escalation/types.d.ts +43 -0
  162. package/build/services/escalation/types.js +13 -0
  163. package/build/services/escalation-strategy/default.d.ts +12 -0
  164. package/build/services/escalation-strategy/default.js +17 -0
  165. package/build/services/escalation-strategy/index.d.ts +21 -0
  166. package/build/services/escalation-strategy/index.js +32 -0
  167. package/build/services/escalation-strategy/mcp.d.ts +13 -0
  168. package/build/services/escalation-strategy/mcp.js +51 -0
  169. package/build/services/events/index.d.ts +37 -0
  170. package/build/services/events/index.js +64 -0
  171. package/build/services/events/memory.d.ts +27 -0
  172. package/build/services/events/memory.js +40 -0
  173. package/build/services/events/nats.d.ts +29 -0
  174. package/build/services/events/nats.js +50 -0
  175. package/build/services/events/publish.d.ts +72 -0
  176. package/build/services/events/publish.js +106 -0
  177. package/build/services/events/socketio.d.ts +33 -0
  178. package/build/services/events/socketio.js +70 -0
  179. package/build/services/export/client.d.ts +2 -0
  180. package/build/services/export/client.js +16 -0
  181. package/build/services/export/index.d.ts +39 -0
  182. package/build/services/export/index.js +158 -0
  183. package/build/services/export/post-process.d.ts +16 -0
  184. package/build/services/export/post-process.js +133 -0
  185. package/build/services/export/types.d.ts +25 -0
  186. package/build/services/export/types.js +2 -0
  187. package/build/services/hotmesh-utils.d.ts +61 -0
  188. package/build/services/hotmesh-utils.js +204 -0
  189. package/build/services/iam/activity.d.ts +52 -0
  190. package/build/services/iam/activity.js +59 -0
  191. package/build/services/iam/bots.d.ts +83 -0
  192. package/build/services/iam/bots.js +157 -0
  193. package/build/services/iam/context.d.ts +14 -0
  194. package/build/services/iam/context.js +61 -0
  195. package/build/services/iam/credentials.d.ts +42 -0
  196. package/build/services/iam/credentials.js +86 -0
  197. package/build/services/iam/envelope.d.ts +10 -0
  198. package/build/services/iam/envelope.js +32 -0
  199. package/build/services/iam/ephemeral.d.ts +50 -0
  200. package/build/services/iam/ephemeral.js +131 -0
  201. package/build/services/iam/index.d.ts +19 -0
  202. package/build/services/iam/index.js +37 -0
  203. package/build/services/iam/principal.d.ts +12 -0
  204. package/build/services/iam/principal.js +53 -0
  205. package/build/services/iam/resolve.d.ts +48 -0
  206. package/build/services/iam/resolve.js +89 -0
  207. package/build/services/insight/index.d.ts +30 -0
  208. package/build/services/insight/index.js +81 -0
  209. package/build/services/insight/prompts.d.ts +4 -0
  210. package/build/services/insight/prompts.js +15 -0
  211. package/build/services/interceptor/activities/config.d.ts +21 -0
  212. package/build/services/interceptor/activities/config.js +26 -0
  213. package/build/services/interceptor/activities/escalation.d.ts +58 -0
  214. package/build/services/interceptor/activities/escalation.js +110 -0
  215. package/build/services/interceptor/activities/index.d.ts +4 -0
  216. package/build/services/interceptor/activities/index.js +23 -0
  217. package/build/services/interceptor/activities/task.d.ts +65 -0
  218. package/build/services/interceptor/activities/task.js +168 -0
  219. package/build/services/interceptor/activities/workflow.d.ts +26 -0
  220. package/build/services/interceptor/activities/workflow.js +41 -0
  221. package/build/services/interceptor/activity-interceptor.d.ts +32 -0
  222. package/build/services/interceptor/activity-interceptor.js +86 -0
  223. package/build/services/interceptor/completion.d.ts +16 -0
  224. package/build/services/interceptor/completion.js +149 -0
  225. package/build/services/interceptor/context.d.ts +11 -0
  226. package/build/services/interceptor/context.js +20 -0
  227. package/build/services/interceptor/escalation.d.ts +26 -0
  228. package/build/services/interceptor/escalation.js +150 -0
  229. package/build/services/interceptor/index.d.ts +45 -0
  230. package/build/services/interceptor/index.js +160 -0
  231. package/build/services/interceptor/lifecycle.d.ts +44 -0
  232. package/build/services/interceptor/lifecycle.js +174 -0
  233. package/build/services/interceptor/state.d.ts +22 -0
  234. package/build/services/interceptor/state.js +36 -0
  235. package/build/services/interceptor/types.d.ts +43 -0
  236. package/build/services/interceptor/types.js +3 -0
  237. package/build/services/llm/detect.d.ts +16 -0
  238. package/build/services/llm/detect.js +33 -0
  239. package/build/services/llm/index.d.ts +34 -0
  240. package/build/services/llm/index.js +106 -0
  241. package/build/services/llm/providers/anthropic.d.ts +11 -0
  242. package/build/services/llm/providers/anthropic.js +85 -0
  243. package/build/services/llm/providers/openai.d.ts +9 -0
  244. package/build/services/llm/providers/openai.js +46 -0
  245. package/build/services/llm/translate.d.ts +66 -0
  246. package/build/services/llm/translate.js +192 -0
  247. package/build/services/llm/types.d.ts +64 -0
  248. package/build/services/llm/types.js +8 -0
  249. package/build/services/logger/index.d.ts +32 -0
  250. package/build/services/logger/index.js +69 -0
  251. package/build/services/logger/pino.d.ts +24 -0
  252. package/build/services/logger/pino.js +59 -0
  253. package/build/services/maintenance/index.d.ts +43 -0
  254. package/build/services/maintenance/index.js +183 -0
  255. package/build/services/mcp/adapter.d.ts +23 -0
  256. package/build/services/mcp/adapter.js +119 -0
  257. package/build/services/mcp/client/connection.d.ts +46 -0
  258. package/build/services/mcp/client/connection.js +280 -0
  259. package/build/services/mcp/client/index.d.ts +2 -0
  260. package/build/services/mcp/client/index.js +16 -0
  261. package/build/services/mcp/client/tools.d.ts +22 -0
  262. package/build/services/mcp/client/tools.js +118 -0
  263. package/build/services/mcp/db-server/index.d.ts +25 -0
  264. package/build/services/mcp/db-server/index.js +49 -0
  265. package/build/services/mcp/db-server/schemas.d.ts +52 -0
  266. package/build/services/mcp/db-server/schemas.js +34 -0
  267. package/build/services/mcp/db-server/tools.d.ts +5 -0
  268. package/build/services/mcp/db-server/tools.js +224 -0
  269. package/build/services/mcp/db.d.ts +26 -0
  270. package/build/services/mcp/db.js +141 -0
  271. package/build/services/mcp/index.d.ts +25 -0
  272. package/build/services/mcp/index.js +47 -0
  273. package/build/services/mcp/playwright-server/index.d.ts +14 -0
  274. package/build/services/mcp/playwright-server/index.js +25 -0
  275. package/build/services/mcp/playwright-server/lifecycle.d.ts +7 -0
  276. package/build/services/mcp/playwright-server/lifecycle.js +63 -0
  277. package/build/services/mcp/playwright-server/schemas.d.ts +81 -0
  278. package/build/services/mcp/playwright-server/schemas.js +48 -0
  279. package/build/services/mcp/playwright-server/tools.d.ts +2 -0
  280. package/build/services/mcp/playwright-server/tools.js +224 -0
  281. package/build/services/mcp/server.d.ts +26 -0
  282. package/build/services/mcp/server.js +286 -0
  283. package/build/services/mcp/sql.d.ts +12 -0
  284. package/build/services/mcp/sql.js +59 -0
  285. package/build/services/mcp/types.d.ts +17 -0
  286. package/build/services/mcp/types.js +3 -0
  287. package/build/services/mcp/vision-server.d.ts +15 -0
  288. package/build/services/mcp/vision-server.js +214 -0
  289. package/build/services/mcp/workflow-compiler-server.d.ts +15 -0
  290. package/build/services/mcp/workflow-compiler-server.js +206 -0
  291. package/build/services/mcp/workflow-server.d.ts +24 -0
  292. package/build/services/mcp/workflow-server.js +230 -0
  293. package/build/services/mcp-runs/enrichment.d.ts +12 -0
  294. package/build/services/mcp-runs/enrichment.js +39 -0
  295. package/build/services/mcp-runs/events.d.ts +6 -0
  296. package/build/services/mcp-runs/events.js +126 -0
  297. package/build/services/mcp-runs/execution-builder.d.ts +12 -0
  298. package/build/services/mcp-runs/execution-builder.js +100 -0
  299. package/build/services/mcp-runs/index.d.ts +4 -0
  300. package/build/services/mcp-runs/index.js +8 -0
  301. package/build/services/mcp-runs/queries.d.ts +28 -0
  302. package/build/services/mcp-runs/queries.js +71 -0
  303. package/build/services/mcp-runs/sql.d.ts +4 -0
  304. package/build/services/mcp-runs/sql.js +17 -0
  305. package/build/services/mcp-runs/types.d.ts +65 -0
  306. package/build/services/mcp-runs/types.js +2 -0
  307. package/build/services/namespace/index.d.ts +17 -0
  308. package/build/services/namespace/index.js +41 -0
  309. package/build/services/namespace/sql.d.ts +4 -0
  310. package/build/services/namespace/sql.js +23 -0
  311. package/build/services/namespace/types.d.ts +11 -0
  312. package/build/services/namespace/types.js +3 -0
  313. package/build/services/oauth/crypto.d.ts +19 -0
  314. package/build/services/oauth/crypto.js +95 -0
  315. package/build/services/oauth/db.d.ts +20 -0
  316. package/build/services/oauth/db.js +140 -0
  317. package/build/services/oauth/index.d.ts +12 -0
  318. package/build/services/oauth/index.js +77 -0
  319. package/build/services/oauth/providers/anthropic.d.ts +3 -0
  320. package/build/services/oauth/providers/anthropic.js +111 -0
  321. package/build/services/oauth/providers/github.d.ts +3 -0
  322. package/build/services/oauth/providers/github.js +46 -0
  323. package/build/services/oauth/providers/google.d.ts +3 -0
  324. package/build/services/oauth/providers/google.js +44 -0
  325. package/build/services/oauth/providers/index.d.ts +2 -0
  326. package/build/services/oauth/providers/index.js +7 -0
  327. package/build/services/oauth/providers/microsoft.d.ts +3 -0
  328. package/build/services/oauth/providers/microsoft.js +46 -0
  329. package/build/services/oauth/providers/mock.d.ts +3 -0
  330. package/build/services/oauth/providers/mock.js +76 -0
  331. package/build/services/oauth/providers/registry.d.ts +8 -0
  332. package/build/services/oauth/providers/registry.js +46 -0
  333. package/build/services/oauth/providers/types.d.ts +13 -0
  334. package/build/services/oauth/providers/types.js +2 -0
  335. package/build/services/oauth/state.d.ts +30 -0
  336. package/build/services/oauth/state.js +83 -0
  337. package/build/services/orchestrator/index.d.ts +23 -0
  338. package/build/services/orchestrator/index.js +156 -0
  339. package/build/services/orchestrator/types.d.ts +15 -0
  340. package/build/services/orchestrator/types.js +3 -0
  341. package/build/services/role/index.d.ts +47 -0
  342. package/build/services/role/index.js +136 -0
  343. package/build/services/role/sql.d.ts +14 -0
  344. package/build/services/role/sql.js +80 -0
  345. package/build/services/role/types.d.ts +11 -0
  346. package/build/services/role/types.js +3 -0
  347. package/build/services/storage/index.d.ts +12 -0
  348. package/build/services/storage/index.js +31 -0
  349. package/build/services/storage/local.d.ts +26 -0
  350. package/build/services/storage/local.js +129 -0
  351. package/build/services/storage/s3.d.ts +31 -0
  352. package/build/services/storage/s3.js +180 -0
  353. package/build/services/storage/types.d.ts +41 -0
  354. package/build/services/storage/types.js +2 -0
  355. package/build/services/task/crud.d.ts +21 -0
  356. package/build/services/task/crud.js +123 -0
  357. package/build/services/task/index.d.ts +4 -0
  358. package/build/services/task/index.js +20 -0
  359. package/build/services/task/process.d.ts +14 -0
  360. package/build/services/task/process.js +98 -0
  361. package/build/services/task/resolve.d.ts +12 -0
  362. package/build/services/task/resolve.js +49 -0
  363. package/build/services/task/sql.d.ts +19 -0
  364. package/build/services/task/sql.js +92 -0
  365. package/build/services/task/types.d.ts +56 -0
  366. package/build/services/task/types.js +9 -0
  367. package/build/services/telemetry/honeycomb.d.ts +53 -0
  368. package/build/services/telemetry/honeycomb.js +79 -0
  369. package/build/services/telemetry/index.d.ts +46 -0
  370. package/build/services/telemetry/index.js +68 -0
  371. package/build/services/user/auth.d.ts +7 -0
  372. package/build/services/user/auth.js +26 -0
  373. package/build/services/user/crud.d.ts +19 -0
  374. package/build/services/user/crud.js +151 -0
  375. package/build/services/user/index.d.ts +5 -0
  376. package/build/services/user/index.js +26 -0
  377. package/build/services/user/rbac.d.ts +15 -0
  378. package/build/services/user/rbac.js +32 -0
  379. package/build/services/user/roles.d.ts +7 -0
  380. package/build/services/user/roles.js +42 -0
  381. package/build/services/user/sql.d.ts +22 -0
  382. package/build/services/user/sql.js +45 -0
  383. package/build/services/user/types.d.ts +23 -0
  384. package/build/services/user/types.js +4 -0
  385. package/build/services/workers/registry.d.ts +10 -0
  386. package/build/services/workers/registry.js +26 -0
  387. package/build/services/workflow-invocation.d.ts +46 -0
  388. package/build/services/workflow-invocation.js +184 -0
  389. package/build/services/yaml-workflow/db-utils.d.ts +25 -0
  390. package/build/services/yaml-workflow/db-utils.js +93 -0
  391. package/build/services/yaml-workflow/db.d.ts +27 -0
  392. package/build/services/yaml-workflow/db.js +196 -0
  393. package/build/services/yaml-workflow/deployer-helpers.d.ts +13 -0
  394. package/build/services/yaml-workflow/deployer-helpers.js +133 -0
  395. package/build/services/yaml-workflow/deployer.d.ts +54 -0
  396. package/build/services/yaml-workflow/deployer.js +203 -0
  397. package/build/services/yaml-workflow/generator.d.ts +21 -0
  398. package/build/services/yaml-workflow/generator.js +117 -0
  399. package/build/services/yaml-workflow/index.d.ts +4 -0
  400. package/build/services/yaml-workflow/index.js +20 -0
  401. package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +48 -0
  402. package/build/services/yaml-workflow/input-analyzer-helpers.js +183 -0
  403. package/build/services/yaml-workflow/input-analyzer.d.ts +30 -0
  404. package/build/services/yaml-workflow/input-analyzer.js +109 -0
  405. package/build/services/yaml-workflow/pattern-detector/array-source.d.ts +22 -0
  406. package/build/services/yaml-workflow/pattern-detector/array-source.js +120 -0
  407. package/build/services/yaml-workflow/pattern-detector/collapse.d.ts +27 -0
  408. package/build/services/yaml-workflow/pattern-detector/collapse.js +92 -0
  409. package/build/services/yaml-workflow/pattern-detector/index.d.ts +18 -0
  410. package/build/services/yaml-workflow/pattern-detector/index.js +22 -0
  411. package/build/services/yaml-workflow/pattern-detector/run-detection.d.ts +28 -0
  412. package/build/services/yaml-workflow/pattern-detector/run-detection.js +81 -0
  413. package/build/services/yaml-workflow/pattern-detector/types.d.ts +29 -0
  414. package/build/services/yaml-workflow/pattern-detector/types.js +8 -0
  415. package/build/services/yaml-workflow/pipeline/analyze.d.ts +11 -0
  416. package/build/services/yaml-workflow/pipeline/analyze.js +64 -0
  417. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +25 -0
  418. package/build/services/yaml-workflow/pipeline/build/dag.js +254 -0
  419. package/build/services/yaml-workflow/pipeline/build/index.d.ts +20 -0
  420. package/build/services/yaml-workflow/pipeline/build/index.js +115 -0
  421. package/build/services/yaml-workflow/pipeline/build/iteration.d.ts +25 -0
  422. package/build/services/yaml-workflow/pipeline/build/iteration.js +231 -0
  423. package/build/services/yaml-workflow/pipeline/build/metadata.d.ts +15 -0
  424. package/build/services/yaml-workflow/pipeline/build/metadata.js +126 -0
  425. package/build/services/yaml-workflow/pipeline/build/transform.d.ts +17 -0
  426. package/build/services/yaml-workflow/pipeline/build/transform.js +94 -0
  427. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +22 -0
  428. package/build/services/yaml-workflow/pipeline/build/utils.js +129 -0
  429. package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +9 -0
  430. package/build/services/yaml-workflow/pipeline/build/wiring.js +148 -0
  431. package/build/services/yaml-workflow/pipeline/compile/index.d.ts +17 -0
  432. package/build/services/yaml-workflow/pipeline/compile/index.js +64 -0
  433. package/build/services/yaml-workflow/pipeline/compile/llm-call.d.ts +14 -0
  434. package/build/services/yaml-workflow/pipeline/compile/llm-call.js +153 -0
  435. package/build/services/yaml-workflow/pipeline/compile/parse-plan.d.ts +12 -0
  436. package/build/services/yaml-workflow/pipeline/compile/parse-plan.js +88 -0
  437. package/build/services/yaml-workflow/pipeline/compile/summarize.d.ts +39 -0
  438. package/build/services/yaml-workflow/pipeline/compile/summarize.js +174 -0
  439. package/build/services/yaml-workflow/pipeline/extract-helpers.d.ts +42 -0
  440. package/build/services/yaml-workflow/pipeline/extract-helpers.js +88 -0
  441. package/build/services/yaml-workflow/pipeline/extract.d.ts +24 -0
  442. package/build/services/yaml-workflow/pipeline/extract.js +235 -0
  443. package/build/services/yaml-workflow/pipeline/prompts.d.ts +15 -0
  444. package/build/services/yaml-workflow/pipeline/prompts.js +254 -0
  445. package/build/services/yaml-workflow/pipeline/validate.d.ts +12 -0
  446. package/build/services/yaml-workflow/pipeline/validate.js +111 -0
  447. package/build/services/yaml-workflow/sql.d.ts +19 -0
  448. package/build/services/yaml-workflow/sql.js +83 -0
  449. package/build/services/yaml-workflow/types.d.ts +223 -0
  450. package/build/services/yaml-workflow/types.js +8 -0
  451. package/build/services/yaml-workflow/workers/callbacks.d.ts +17 -0
  452. package/build/services/yaml-workflow/workers/callbacks.js +194 -0
  453. package/build/services/yaml-workflow/workers/events.d.ts +7 -0
  454. package/build/services/yaml-workflow/workers/events.js +49 -0
  455. package/build/services/yaml-workflow/workers/index.d.ts +4 -0
  456. package/build/services/yaml-workflow/workers/index.js +15 -0
  457. package/build/services/yaml-workflow/workers/register.d.ts +15 -0
  458. package/build/services/yaml-workflow/workers/register.js +233 -0
  459. package/build/services/yaml-workflow/workers/scope.d.ts +13 -0
  460. package/build/services/yaml-workflow/workers/scope.js +37 -0
  461. package/build/start/adapters.d.ts +6 -0
  462. package/build/start/adapters.js +80 -0
  463. package/build/start/config.d.ts +10 -0
  464. package/build/start/config.js +88 -0
  465. package/build/start/index.d.ts +21 -0
  466. package/build/start/index.js +87 -0
  467. package/build/start/server.d.ts +6 -0
  468. package/build/start/server.js +46 -0
  469. package/build/start/workers.d.ts +32 -0
  470. package/build/start/workers.js +144 -0
  471. package/build/system/activities/claude-code.d.ts +56 -0
  472. package/build/system/activities/claude-code.js +258 -0
  473. package/build/system/activities/file-storage.d.ts +31 -0
  474. package/build/system/activities/file-storage.js +71 -0
  475. package/build/system/activities/http.d.ts +27 -0
  476. package/build/system/activities/http.js +56 -0
  477. package/build/system/activities/oauth.d.ts +39 -0
  478. package/build/system/activities/oauth.js +33 -0
  479. package/build/system/activities/triage/cache.d.ts +7 -0
  480. package/build/system/activities/triage/cache.js +10 -0
  481. package/build/system/activities/triage/context.d.ts +21 -0
  482. package/build/system/activities/triage/context.js +92 -0
  483. package/build/system/activities/triage/discovery.d.ts +25 -0
  484. package/build/system/activities/triage/discovery.js +170 -0
  485. package/build/system/activities/triage/index.d.ts +5 -0
  486. package/build/system/activities/triage/index.js +22 -0
  487. package/build/system/activities/triage/llm.d.ts +9 -0
  488. package/build/system/activities/triage/llm.js +34 -0
  489. package/build/system/activities/triage/tools.d.ts +24 -0
  490. package/build/system/activities/triage/tools.js +178 -0
  491. package/build/system/index.d.ts +16 -0
  492. package/build/system/index.js +100 -0
  493. package/build/system/mcp-servers/claude-code.d.ts +17 -0
  494. package/build/system/mcp-servers/claude-code.js +110 -0
  495. package/build/system/mcp-servers/db-query/index.d.ts +25 -0
  496. package/build/system/mcp-servers/db-query/index.js +49 -0
  497. package/build/system/mcp-servers/db-query/schemas.d.ts +52 -0
  498. package/build/system/mcp-servers/db-query/schemas.js +34 -0
  499. package/build/system/mcp-servers/db-query/tools.d.ts +5 -0
  500. package/build/system/mcp-servers/db-query/tools.js +224 -0
  501. package/build/system/mcp-servers/document-vision.d.ts +15 -0
  502. package/build/system/mcp-servers/document-vision.js +228 -0
  503. package/build/system/mcp-servers/file-storage.d.ts +4 -0
  504. package/build/system/mcp-servers/file-storage.js +101 -0
  505. package/build/system/mcp-servers/http-fetch.d.ts +4 -0
  506. package/build/system/mcp-servers/http-fetch.js +100 -0
  507. package/build/system/mcp-servers/human-queue.d.ts +26 -0
  508. package/build/system/mcp-servers/human-queue.js +287 -0
  509. package/build/system/mcp-servers/oauth.d.ts +11 -0
  510. package/build/system/mcp-servers/oauth.js +100 -0
  511. package/build/system/mcp-servers/playwright/browser-lifecycle.d.ts +26 -0
  512. package/build/system/mcp-servers/playwright/browser-lifecycle.js +125 -0
  513. package/build/system/mcp-servers/playwright/index.d.ts +25 -0
  514. package/build/system/mcp-servers/playwright/index.js +42 -0
  515. package/build/system/mcp-servers/playwright/schemas.d.ts +383 -0
  516. package/build/system/mcp-servers/playwright/schemas.js +87 -0
  517. package/build/system/mcp-servers/playwright/tools-atomic.d.ts +2 -0
  518. package/build/system/mcp-servers/playwright/tools-atomic.js +9 -0
  519. package/build/system/mcp-servers/playwright/tools-navigation.d.ts +2 -0
  520. package/build/system/mcp-servers/playwright/tools-navigation.js +140 -0
  521. package/build/system/mcp-servers/playwright/tools-page-interaction.d.ts +2 -0
  522. package/build/system/mcp-servers/playwright/tools-page-interaction.js +162 -0
  523. package/build/system/mcp-servers/playwright/tools-run-script.d.ts +2 -0
  524. package/build/system/mcp-servers/playwright/tools-run-script.js +190 -0
  525. package/build/system/mcp-servers/playwright/types.d.ts +8 -0
  526. package/build/system/mcp-servers/playwright/types.js +30 -0
  527. package/build/system/mcp-servers/playwright-cli/helpers.d.ts +11 -0
  528. package/build/system/mcp-servers/playwright-cli/helpers.js +20 -0
  529. package/build/system/mcp-servers/playwright-cli/index.d.ts +4 -0
  530. package/build/system/mcp-servers/playwright-cli/index.js +15 -0
  531. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +219 -0
  532. package/build/system/mcp-servers/playwright-cli/schemas.js +75 -0
  533. package/build/system/mcp-servers/playwright-cli/tools-auth.d.ts +2 -0
  534. package/build/system/mcp-servers/playwright-cli/tools-auth.js +183 -0
  535. package/build/system/mcp-servers/playwright-cli/tools-capture.d.ts +2 -0
  536. package/build/system/mcp-servers/playwright-cli/tools-capture.js +267 -0
  537. package/build/system/mcp-servers/prompts.d.ts +4 -0
  538. package/build/system/mcp-servers/prompts.js +10 -0
  539. package/build/system/mcp-servers/workflow-compiler.d.ts +15 -0
  540. package/build/system/mcp-servers/workflow-compiler.js +230 -0
  541. package/build/system/mcp-servers/workflow.d.ts +24 -0
  542. package/build/system/mcp-servers/workflow.js +231 -0
  543. package/build/system/seed/index.d.ts +7 -0
  544. package/build/system/seed/index.js +36 -0
  545. package/build/system/seed/server-definitions.d.ts +1460 -0
  546. package/build/system/seed/server-definitions.js +160 -0
  547. package/build/system/seed/tool-manifests-browser.d.ts +577 -0
  548. package/build/system/seed/tool-manifests-browser.js +158 -0
  549. package/build/system/seed/tool-manifests-data.d.ts +322 -0
  550. package/build/system/seed/tool-manifests-data.js +173 -0
  551. package/build/system/seed/tool-manifests-escalation.d.ts +173 -0
  552. package/build/system/seed/tool-manifests-escalation.js +76 -0
  553. package/build/system/seed/tool-manifests-workflows.d.ts +211 -0
  554. package/build/system/seed/tool-manifests-workflows.js +136 -0
  555. package/build/system/workflows/mcp-deterministic/activities.d.ts +6 -0
  556. package/build/system/workflows/mcp-deterministic/activities.js +56 -0
  557. package/build/system/workflows/mcp-deterministic/index.d.ts +9 -0
  558. package/build/system/workflows/mcp-deterministic/index.js +72 -0
  559. package/build/system/workflows/mcp-query/activities/caches.d.ts +7 -0
  560. package/build/system/workflows/mcp-query/activities/caches.js +10 -0
  561. package/build/system/workflows/mcp-query/activities/discovery.d.ts +31 -0
  562. package/build/system/workflows/mcp-query/activities/discovery.js +172 -0
  563. package/build/system/workflows/mcp-query/activities/index.d.ts +4 -0
  564. package/build/system/workflows/mcp-query/activities/index.js +13 -0
  565. package/build/system/workflows/mcp-query/activities/llm.d.ts +8 -0
  566. package/build/system/workflows/mcp-query/activities/llm.js +33 -0
  567. package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +5 -0
  568. package/build/system/workflows/mcp-query/activities/tool-executor.js +112 -0
  569. package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +14 -0
  570. package/build/system/workflows/mcp-query/activities/tool-loader.js +93 -0
  571. package/build/system/workflows/mcp-query/index.d.ts +14 -0
  572. package/build/system/workflows/mcp-query/index.js +227 -0
  573. package/build/system/workflows/mcp-query/prompts.d.ts +4 -0
  574. package/build/system/workflows/mcp-query/prompts.js +101 -0
  575. package/build/system/workflows/mcp-query/strategy-advisors.d.ts +14 -0
  576. package/build/system/workflows/mcp-query/strategy-advisors.js +109 -0
  577. package/build/system/workflows/mcp-query/types.d.ts +10 -0
  578. package/build/system/workflows/mcp-query/types.js +3 -0
  579. package/build/system/workflows/mcp-query-router/activities.d.ts +6 -0
  580. package/build/system/workflows/mcp-query-router/activities.js +12 -0
  581. package/build/system/workflows/mcp-query-router/index.d.ts +13 -0
  582. package/build/system/workflows/mcp-query-router/index.js +107 -0
  583. package/build/system/workflows/mcp-query-router/prompts.d.ts +1 -0
  584. package/build/system/workflows/mcp-query-router/prompts.js +8 -0
  585. package/build/system/workflows/mcp-triage/index.d.ts +31 -0
  586. package/build/system/workflows/mcp-triage/index.js +222 -0
  587. package/build/system/workflows/mcp-triage/prompts.d.ts +7 -0
  588. package/build/system/workflows/mcp-triage/prompts.js +159 -0
  589. package/build/system/workflows/mcp-triage/response-builders.d.ts +17 -0
  590. package/build/system/workflows/mcp-triage/response-builders.js +96 -0
  591. package/build/system/workflows/mcp-triage/response.d.ts +8 -0
  592. package/build/system/workflows/mcp-triage/response.js +157 -0
  593. package/build/system/workflows/mcp-triage/types.d.ts +20 -0
  594. package/build/system/workflows/mcp-triage/types.js +3 -0
  595. package/build/system/workflows/mcp-triage-deterministic/activities.d.ts +4 -0
  596. package/build/system/workflows/mcp-triage-deterministic/activities.js +8 -0
  597. package/build/system/workflows/mcp-triage-deterministic/index.d.ts +12 -0
  598. package/build/system/workflows/mcp-triage-deterministic/index.js +83 -0
  599. package/build/system/workflows/mcp-triage-router/activities.d.ts +9 -0
  600. package/build/system/workflows/mcp-triage-router/activities.js +15 -0
  601. package/build/system/workflows/mcp-triage-router/index.d.ts +13 -0
  602. package/build/system/workflows/mcp-triage-router/index.js +122 -0
  603. package/build/tsconfig.tsbuildinfo +1 -0
  604. package/build/types/auth.d.ts +34 -0
  605. package/build/types/auth.js +2 -0
  606. package/build/types/config.d.ts +48 -0
  607. package/build/types/config.js +2 -0
  608. package/build/types/delegation.d.ts +41 -0
  609. package/build/types/delegation.js +2 -0
  610. package/build/types/discovery.d.ts +12 -0
  611. package/build/types/discovery.js +3 -0
  612. package/build/types/envelope.d.ts +53 -0
  613. package/build/types/envelope.js +2 -0
  614. package/build/types/escalation-strategy.d.ts +37 -0
  615. package/build/types/escalation-strategy.js +2 -0
  616. package/build/types/escalation.d.ts +39 -0
  617. package/build/types/escalation.js +21 -0
  618. package/build/types/events.d.ts +65 -0
  619. package/build/types/events.js +2 -0
  620. package/build/types/export.d.ts +78 -0
  621. package/build/types/export.js +11 -0
  622. package/build/types/index.d.ts +21 -0
  623. package/build/types/index.js +6 -0
  624. package/build/types/logger.d.ts +26 -0
  625. package/build/types/logger.js +2 -0
  626. package/build/types/maintenance.d.ts +24 -0
  627. package/build/types/maintenance.js +2 -0
  628. package/build/types/mcp.d.ts +80 -0
  629. package/build/types/mcp.js +2 -0
  630. package/build/types/oauth.d.ts +74 -0
  631. package/build/types/oauth.js +2 -0
  632. package/build/types/startup.d.ts +110 -0
  633. package/build/types/startup.js +2 -0
  634. package/build/types/task.d.ts +39 -0
  635. package/build/types/task.js +2 -0
  636. package/build/types/telemetry.d.ts +32 -0
  637. package/build/types/telemetry.js +2 -0
  638. package/build/types/tool-context.d.ts +68 -0
  639. package/build/types/tool-context.js +14 -0
  640. package/build/types/user.d.ts +18 -0
  641. package/build/types/user.js +2 -0
  642. package/build/types/workflow.d.ts +35 -0
  643. package/build/types/workflow.js +2 -0
  644. package/build/types/yaml-workflow.d.ts +101 -0
  645. package/build/types/yaml-workflow.js +5 -0
  646. package/build/vitest.config.d.ts +2 -0
  647. package/build/vitest.config.js +32 -0
  648. package/build/vitest.integration.config.d.ts +2 -0
  649. package/build/vitest.integration.config.js +25 -0
  650. package/build/workers/index.d.ts +6 -0
  651. package/build/workers/index.js +20 -0
  652. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +2 -0
  653. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +1 -0
  654. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +2 -0
  655. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +1 -0
  656. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +2 -0
  657. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js.map +1 -0
  658. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +2 -0
  659. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js.map +1 -0
  660. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +2 -0
  661. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js.map +1 -0
  662. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +2 -0
  663. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js.map +1 -0
  664. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +2 -0
  665. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js.map +1 -0
  666. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +2 -0
  667. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js.map +1 -0
  668. package/dashboard/dist/assets/DataTable-BDn1WBHS.js +2 -0
  669. package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +1 -0
  670. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +2 -0
  671. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js.map +1 -0
  672. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +2 -0
  673. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js.map +1 -0
  674. package/dashboard/dist/assets/EventTable-B01oJf6Y.js +2 -0
  675. package/dashboard/dist/assets/EventTable-B01oJf6Y.js.map +1 -0
  676. package/dashboard/dist/assets/Field-DuFBAYhu.js +2 -0
  677. package/dashboard/dist/assets/Field-DuFBAYhu.js.map +1 -0
  678. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
  679. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js.map +1 -0
  680. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +2 -0
  681. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js.map +1 -0
  682. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +2 -0
  683. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +1 -0
  684. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +2 -0
  685. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +1 -0
  686. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +2 -0
  687. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +1 -0
  688. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +2 -0
  689. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +1 -0
  690. package/dashboard/dist/assets/Modal-B4rbIVAn.js +2 -0
  691. package/dashboard/dist/assets/Modal-B4rbIVAn.js.map +1 -0
  692. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +2 -0
  693. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +1 -0
  694. package/dashboard/dist/assets/PageHeader-CpWFly5S.js +2 -0
  695. package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +1 -0
  696. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
  697. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js.map +1 -0
  698. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +2 -0
  699. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +1 -0
  700. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +2 -0
  701. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +1 -0
  702. package/dashboard/dist/assets/RolePill-BTPa8L-P.js +2 -0
  703. package/dashboard/dist/assets/RolePill-BTPa8L-P.js.map +1 -0
  704. package/dashboard/dist/assets/RolesPage-9grZW7yR.js +2 -0
  705. package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +1 -0
  706. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
  707. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js.map +1 -0
  708. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +4 -0
  709. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +1 -0
  710. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
  711. package/dashboard/dist/assets/StatCard-DlgF0CJC.js.map +1 -0
  712. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +2 -0
  713. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +1 -0
  714. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
  715. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js.map +1 -0
  716. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +2 -0
  717. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +1 -0
  718. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +2 -0
  719. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +1 -0
  720. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +2 -0
  721. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js.map +1 -0
  722. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +2 -0
  723. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js.map +1 -0
  724. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +2 -0
  725. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +1 -0
  726. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +2 -0
  727. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +1 -0
  728. package/dashboard/dist/assets/UserName-DaP4YAKr.js +2 -0
  729. package/dashboard/dist/assets/UserName-DaP4YAKr.js.map +1 -0
  730. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +5 -0
  731. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +1 -0
  732. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +2 -0
  733. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +1 -0
  734. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +2 -0
  735. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +1 -0
  736. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +2 -0
  737. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +1 -0
  738. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +2 -0
  739. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js.map +1 -0
  740. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +3 -0
  741. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +1 -0
  742. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +2 -0
  743. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +1 -0
  744. package/dashboard/dist/assets/bots-BkKVMbUW.js +2 -0
  745. package/dashboard/dist/assets/bots-BkKVMbUW.js.map +1 -0
  746. package/dashboard/dist/assets/constants-CgaZfe5d.js +2 -0
  747. package/dashboard/dist/assets/constants-CgaZfe5d.js.map +1 -0
  748. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +2 -0
  749. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js.map +1 -0
  750. package/dashboard/dist/assets/escalation-qalymbKB.js +2 -0
  751. package/dashboard/dist/assets/escalation-qalymbKB.js.map +1 -0
  752. package/dashboard/dist/assets/format-gXZXQ-HJ.js +2 -0
  753. package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +1 -0
  754. package/dashboard/dist/assets/helpers-0gSleuzT.js +2 -0
  755. package/dashboard/dist/assets/helpers-0gSleuzT.js.map +1 -0
  756. package/dashboard/dist/assets/index-BWvMHed7.js +6 -0
  757. package/dashboard/dist/assets/index-BWvMHed7.js.map +1 -0
  758. package/dashboard/dist/assets/index-BaszoPO_.css +1 -0
  759. package/dashboard/dist/assets/index-Cn2jyj9A.js +2 -0
  760. package/dashboard/dist/assets/index-Cn2jyj9A.js.map +1 -0
  761. package/dashboard/dist/assets/index-D8VH6K8B.js +54 -0
  762. package/dashboard/dist/assets/index-D8VH6K8B.js.map +1 -0
  763. package/dashboard/dist/assets/index-D9SYwJsi.js +3 -0
  764. package/dashboard/dist/assets/index-D9SYwJsi.js.map +1 -0
  765. package/dashboard/dist/assets/index-DTPzZr_X.js +2 -0
  766. package/dashboard/dist/assets/index-DTPzZr_X.js.map +1 -0
  767. package/dashboard/dist/assets/index-D_6AB5BE.js +2 -0
  768. package/dashboard/dist/assets/index-D_6AB5BE.js.map +1 -0
  769. package/dashboard/dist/assets/index-S9Ks2Lj2.js +2 -0
  770. package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +1 -0
  771. package/dashboard/dist/assets/index-X85K5bHC.js +17 -0
  772. package/dashboard/dist/assets/index-X85K5bHC.js.map +1 -0
  773. package/dashboard/dist/assets/index-rjmgHlSH.js +2 -0
  774. package/dashboard/dist/assets/index-rjmgHlSH.js.map +1 -0
  775. package/dashboard/dist/assets/mcp-blCW6IL7.js +2 -0
  776. package/dashboard/dist/assets/mcp-blCW6IL7.js.map +1 -0
  777. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +2 -0
  778. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +1 -0
  779. package/dashboard/dist/assets/mcp-runs-ChPbpvXK.js +2 -0
  780. package/dashboard/dist/assets/mcp-runs-ChPbpvXK.js.map +1 -0
  781. package/dashboard/dist/assets/namespaces-BgbaC3ow.js +2 -0
  782. package/dashboard/dist/assets/namespaces-BgbaC3ow.js.map +1 -0
  783. package/dashboard/dist/assets/roles-ZNrqqnQl.js +2 -0
  784. package/dashboard/dist/assets/roles-ZNrqqnQl.js.map +1 -0
  785. package/dashboard/dist/assets/settings-eBRSE0mQ.js +2 -0
  786. package/dashboard/dist/assets/settings-eBRSE0mQ.js.map +1 -0
  787. package/dashboard/dist/assets/tasks-tRqClPns.js +2 -0
  788. package/dashboard/dist/assets/tasks-tRqClPns.js.map +1 -0
  789. package/dashboard/dist/assets/useFilterParams-BaXUAkYK.js +2 -0
  790. package/dashboard/dist/assets/useFilterParams-BaXUAkYK.js.map +1 -0
  791. package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js +2 -0
  792. package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js.map +1 -0
  793. package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js +2 -0
  794. package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js.map +1 -0
  795. package/dashboard/dist/assets/users-tMvNyOo8.js +2 -0
  796. package/dashboard/dist/assets/users-tMvNyOo8.js.map +1 -0
  797. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js +292 -0
  798. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +1 -0
  799. package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
  800. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
  801. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +22 -0
  802. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +1 -0
  803. package/dashboard/dist/assets/workflows-Cc4VHcrp.js +2 -0
  804. package/dashboard/dist/assets/workflows-Cc4VHcrp.js.map +1 -0
  805. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +2 -0
  806. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +1 -0
  807. package/dashboard/dist/index.html +20 -0
  808. package/dashboard/dist/logo512.png +0 -0
  809. package/package.json +96 -0
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpQueryDetailPage-CUMqhQdS.js","sources":["../../src/components/common/layout/WizardSteps.tsx","../../src/hooks/useWizardStep.ts","../../src/pages/mcp/mcp-query-detail/helpers.ts","../../src/components/common/layout/WizardNav.tsx","../../src/pages/mcp/mcp-query-detail/PanelTitle.tsx","../../src/pages/mcp/mcp-query-detail/ResultSummary.tsx","../../src/pages/mcp/mcp-query-detail/OriginalQueryPanel.tsx","../../src/pages/mcp/mcp-query-detail/TimelinePanel.tsx","../../src/pages/mcp/mcp-query-detail/SectionHeading.tsx","../../src/pages/mcp/mcp-query-detail/ProfilePanel.tsx","../../src/pages/mcp/mcp-query-detail/DeployPanel.tsx","../../src/pages/mcp/mcp-query-detail/TestPanel.tsx","../../src/pages/mcp/mcp-query-detail/RouterProgressTracker.tsx","../../src/pages/mcp/mcp-query-detail/VerifyPanel.tsx","../../src/pages/mcp/mcp-query-detail/EscalationBanner.tsx","../../src/pages/mcp/mcp-query-detail/McpQueryDetailPage.tsx"],"sourcesContent":["/**\n * Reusable wizard step indicator — sticky at top on scroll.\n * Numbered-circle pattern for multi-step wizard flows.\n */\n\ninterface WizardStepsProps {\n labels: readonly string[];\n current: number;\n /** Highest step the user can navigate to */\n maxReachable: number;\n onStepClick: (step: number) => void;\n}\n\nexport function WizardSteps({ labels, current, maxReachable, onStepClick }: WizardStepsProps) {\n return (\n <div className=\"sticky top-0 z-10 bg-surface/95 backdrop-blur-sm pb-6 pt-1 -mt-1\">\n <div className=\"flex items-center gap-3\">\n {labels.map((label, i) => {\n const s = i + 1;\n const isReachable = s <= maxReachable;\n return (\n <div key={s} className=\"flex items-center gap-2\">\n {s > 1 && <div className={`w-8 h-px ${current >= s ? 'bg-accent' : 'bg-surface-border'}`} />}\n <button\n onClick={() => isReachable && onStepClick(s)}\n disabled={!isReachable}\n className={`w-6 h-6 rounded-full text-[11px] font-semibold flex items-center justify-center transition-colors ${\n current === s\n ? 'bg-accent text-text-inverse'\n : isReachable\n ? 'bg-accent/20 text-accent cursor-pointer hover:bg-accent/30'\n : 'bg-surface-sunken text-text-tertiary cursor-default'\n }`}\n >\n {s}\n </button>\n <span className={`text-xs ${current === s ? 'text-text-primary font-medium' : 'text-text-tertiary'}`}>\n {label}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\n/**\n * Manage wizard step via URL search param for deep-linkable browser history.\n * Returns [currentStep, setStep] where step is synced to ?step=N in the URL.\n * When step param is absent, returns null (caller should use autoStep).\n */\nexport function useWizardStep(): [number | null, (step: number | null) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n const current = searchParams.get('step');\n const stepValue = current ? parseInt(current, 10) : null;\n\n const setStep = useCallback((step: number | null) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n if (step === null) {\n next.delete('step');\n } else {\n next.set('step', String(step));\n }\n return next;\n }, { replace: false }); // push to history for back/forward nav\n }, [setSearchParams]);\n\n return [stepValue, setStep];\n}\n","// ── Shared helpers for MCP Query Detail wizard panels ────────────────────────\n\nexport type Step = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const STEP_LABELS_BASE = ['Original', 'Timeline', 'Profile', 'Deploy', 'Test', 'Verify'] as const;\n\n/**\n * Maps an execution record to a simplified status string.\n */\nexport function mapStatus(exec: { status?: string } | undefined): string {\n if (!exec) return 'pending';\n if (exec.status === 'completed') return 'completed';\n if (exec.status === 'failed') return 'failed';\n return 'in_progress';\n}\n\n/**\n * Extracts the first JSON object from an LLM summary that may contain\n * fenced code blocks or inline JSON.\n */\nexport function extractJsonFromSummary(summary: string): Record<string, unknown> | null {\n const match = summary.match(/```json\\s*([\\s\\S]*?)```/) || summary.match(/\\{[\\s\\S]*?\\n\\}/);\n if (!match) return null;\n try { return JSON.parse((match[1] ?? match[0]).trim()); } catch { return null; }\n}\n","/**\n * Sticky bottom navigation bar for wizard flows.\n * Pins Back/Next buttons to the bottom of the viewport.\n */\n\ninterface WizardNavProps {\n children: React.ReactNode;\n}\n\nexport function WizardNav({ children }: WizardNavProps) {\n return (\n <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)' }}>\n {children}\n </div>\n );\n}\n","/**\n * Consistent heading for each wizard panel: a title and optional subtitle.\n */\nexport function PanelTitle({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-light text-text-primary\">{title}</h2>\n {subtitle && <p className=\"text-xs text-text-tertiary mt-0.5\">{subtitle}</p>}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { SimpleMarkdown } from '../../../components/common/display/SimpleMarkdown';\n\n/**\n * Renders an LLM result string that may contain interleaved prose and JSON blocks.\n * JSON blocks are rendered as interactive tree viewers; prose as markdown.\n */\nexport function ResultSummary({ text }: { text: string }) {\n const parts: Array<{ type: 'text' | 'json'; content: string }> = [];\n const jsonBlockRe = /\\n?\\{[\\s\\S]*?\\n\\}/g;\n let lastIndex = 0;\n for (const match of text.matchAll(jsonBlockRe)) {\n try {\n JSON.parse(match[0].trim());\n if (match.index! > lastIndex) parts.push({ type: 'text', content: text.slice(lastIndex, match.index) });\n parts.push({ type: 'json', content: match[0].trim() });\n lastIndex = match.index! + match[0].length;\n } catch { /* not JSON */ }\n }\n if (lastIndex < text.length) parts.push({ type: 'text', content: text.slice(lastIndex) });\n if (!parts.length) parts.push({ type: 'text', content: text });\n return (\n <div className=\"space-y-3\">\n {parts.map((p, i) => p.type === 'json'\n ? <JsonViewer key={i} data={JSON.parse(p.content)} defaultMode=\"tree\" />\n : p.content.trim() ? <SimpleMarkdown key={i} content={p.content.trim()} /> : null)}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { PanelTitle } from './PanelTitle';\nimport { ResultSummary } from './ResultSummary';\n\ninterface OriginalQueryPanelProps {\n status: string;\n originalEnvelope: Record<string, unknown> | null;\n originalPrompt: string | undefined;\n originalOutput: unknown;\n originalDurationMs: number | null | undefined;\n resultSummary: string | undefined;\n onNext: () => void;\n}\n\nexport function OriginalQueryPanel({\n status,\n originalEnvelope,\n originalPrompt,\n originalOutput,\n originalDurationMs,\n resultSummary,\n onNext,\n}: OriginalQueryPanelProps) {\n return (\n <div>\n <PanelTitle title=\"Original Query\" subtitle=\"Dynamic LLM-orchestrated execution — the discovery run\" />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Left: Input */}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Input</p>\n {originalEnvelope ? (\n <JsonViewer data={originalEnvelope} defaultMode=\"tree\" />\n ) : originalPrompt ? (\n <JsonViewer data={{ prompt: originalPrompt }} defaultMode=\"tree\" />\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">Loading...</p>\n )}\n </div>\n\n {/* Right: Output */}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Output</p>\n {status !== 'completed' && status !== 'failed' ? (\n <p className=\"text-sm text-text-secondary animate-pulse\">Pending...</p>\n ) : originalOutput ? (\n <JsonViewer data={originalOutput} defaultMode=\"tree\" />\n ) : resultSummary ? (\n <ResultSummary text={resultSummary} />\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">No structured output</p>\n )}\n {originalDurationMs != null && (\n <p className=\"text-[10px] text-text-tertiary mt-2\">{(originalDurationMs / 1000).toFixed(1)}s</p>\n )}\n </div>\n </div>\n\n <WizardNav><span /><button onClick={onNext} className=\"btn-primary text-xs\">Next: Timeline</button></WizardNav>\n </div>\n );\n}\n","import { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { SwimlaneTimeline } from '../../workflows/workflow-execution/SwimlaneTimeline';\nimport { PanelTitle } from './PanelTitle';\n\ninterface TimelinePanelProps {\n events: any[];\n onBack: () => void;\n onNext: () => void;\n}\n\nexport function TimelinePanel({ events, onBack, onNext }: TimelinePanelProps) {\n return (\n <div>\n <PanelTitle title=\"Execution Timeline\" subtitle=\"Activity swimlane showing tool calls and their durations\" />\n <SwimlaneTimeline events={events} />\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <button onClick={onNext} className=\"btn-primary text-xs\">Next: Profile</button>\n </WizardNav>\n </div>\n );\n}\n","/**\n * A thin section divider: uppercase label with a trailing border line.\n * Reused across multiple wizard panels.\n */\nexport function SectionHeading({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-3 mb-3\">\n <span className=\"text-xs font-semibold uppercase tracking-widest text-text-tertiary\">{children}</span>\n <span className=\"flex-1 border-b border-surface-border\" />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { TagInput } from '../../../components/common/form/TagInput';\nimport { PanelTitle } from './PanelTitle';\nimport { SectionHeading } from './SectionHeading';\n\n// ── Sub-components ───────────────────────────────────────────────────────────\n\ninterface ExistingProfileViewProps {\n compiledYaml: any;\n onBack: () => void;\n onNext: () => void;\n}\n\n/**\n * Read-only view of an already-compiled workflow profile (step 3, existing path).\n */\nfunction ExistingProfileView({ compiledYaml, onBack, onNext }: ExistingProfileViewProps) {\n return (\n <div>\n <PanelTitle title=\"Pipeline Profile\" subtitle=\"Configure the compiled tool — name, tags, input schema, and deployment target\" />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6\">\n {/* Left: identity + description */}\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Name</p>\n <p className=\"text-sm font-mono text-text-primary\">{compiledYaml.name}</p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Status</p>\n <StatusBadge status={compiledYaml.status} />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Namespace</p>\n <p className=\"text-xs font-mono text-text-primary\">{compiledYaml.app_id || '\\u2014'}</p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Topic</p>\n <p className=\"text-xs font-mono text-text-primary\">{compiledYaml.graph_topic || '\\u2014'}</p>\n </div>\n </div>\n {compiledYaml.description && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Description</p>\n <p className=\"text-xs text-text-secondary leading-relaxed\">{compiledYaml.description}</p>\n </div>\n )}\n </div>\n\n {/* Right: pipeline + tags */}\n <div className=\"space-y-4\">\n {compiledYaml.activity_manifest?.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Pipeline</p>\n <div className=\"flex items-center gap-1 flex-wrap\">\n {(compiledYaml.activity_manifest as any[])\n .filter((a: any) => a.tool_source !== 'trigger')\n .map((a: any, i: number, arr: any[]) => (\n <span key={i} className=\"flex items-center gap-1\">\n <span className=\"text-[10px] px-2 py-0.5 rounded bg-surface-sunken font-mono text-text-primary\">{a.mcp_tool_name || a.title}</span>\n {i < arr.length - 1 && <span className=\"text-text-tertiary text-[10px]\">{'\\u2192'}</span>}\n </span>\n ))}\n </div>\n </div>\n )}\n {compiledYaml.tags?.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags</p>\n <div className=\"flex gap-1.5 flex-wrap\">\n {(compiledYaml.tags as string[]).slice(0, 12).map((tag: string) => (\n <span key={tag} className=\"text-[10px] px-2 py-0.5 rounded-full bg-surface-sunken text-text-secondary\">{tag}</span>\n ))}\n {(compiledYaml.tags as string[]).length > 12 && (\n <span className=\"text-[10px] text-text-tertiary\">+{(compiledYaml.tags as string[]).length - 12} more</span>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <div className=\"flex gap-3\">\n <Link to={`/mcp/workflows/${compiledYaml.id}`} className=\"px-3 py-1.5 text-xs border border-surface-border rounded text-text-primary hover:bg-surface-sunken transition-colors\">\n Edit Workflow\n </Link>\n {compiledYaml.status !== 'active'\n ? <button onClick={onNext} className=\"btn-primary text-xs\">Next: Deploy</button>\n : <button onClick={onNext} className=\"btn-primary text-xs\">Next: Test</button>}\n </div>\n </WizardNav>\n </div>\n );\n}\n\n// ── Create-new form ──────────────────────────────────────────────────────────\n\ninterface CreateProfileFormProps {\n originalPrompt: string | undefined;\n compileAppId: string;\n setCompileAppId: (v: string) => void;\n compileName: string;\n setCompileName: (v: string) => void;\n compileDescription: string;\n setCompileDescription: (v: string) => void;\n compileTags: string[];\n setCompileTags: (v: string[]) => void;\n describeData: { tool_name?: string; description: string; tags: string[] } | undefined;\n describePrompt: string | undefined;\n allAppIds: string[];\n compileFeedback: string;\n setCompileFeedback: (v: string) => void;\n onCompile: () => Promise<void>;\n isCompiling: boolean;\n compileError: string | undefined;\n onBack: () => void;\n}\n\nfunction CreateProfileForm({\n originalPrompt,\n compileAppId,\n setCompileAppId,\n compileName,\n setCompileName,\n compileDescription,\n setCompileDescription,\n compileTags,\n setCompileTags,\n describeData,\n describePrompt,\n allAppIds,\n compileFeedback,\n setCompileFeedback,\n onCompile,\n isCompiling,\n compileError,\n onBack,\n}: CreateProfileFormProps) {\n const [showFeedback, setShowFeedback] = useState(!!compileFeedback);\n return (\n <div>\n <PanelTitle title=\"Create Workflow Profile\" subtitle=\"Define the deterministic workflow tool from this execution\" />\n\n {originalPrompt && (\n <div className=\"mb-6\">\n <SectionHeading>Original Query</SectionHeading>\n <p className=\"text-xs text-text-primary leading-relaxed\">{originalPrompt}</p>\n </div>\n )}\n\n <SectionHeading>Workflow Configuration</SectionHeading>\n <div className=\"space-y-5\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Namespace *</label>\n <input type=\"text\" value={compileAppId} onChange={(e) => setCompileAppId(e.target.value.toLowerCase().replace(/[^a-z0-9]/g, ''))}\n 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\" />\n {allAppIds.length > 0 && (\n <div className=\"flex gap-1.5 mt-1.5 flex-wrap\">\n {allAppIds.map((id) => (\n <button key={id} type=\"button\" onClick={() => setCompileAppId(id)}\n className={`text-[10px] px-2 py-0.5 rounded-full transition-colors ${compileAppId === id ? 'bg-accent/20 text-accent' : 'bg-surface-sunken text-text-tertiary hover:text-text-secondary'}`}>{id}</button>\n ))}\n </div>\n )}\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tool Name *</label>\n <input type=\"text\" value={compileName} onChange={(e) => setCompileName(e.target.value)}\n 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\" />\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Description</label>\n {!compileDescription && !describeData && describePrompt && <span className=\"text-[10px] text-accent animate-pulse\">Generating...</span>}\n </div>\n <textarea value={compileDescription} onChange={(e) => setCompileDescription(e.target.value)}\n placeholder=\"Describe what this workflow does as a reusable tool...\"\n 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\" />\n <p className=\"text-[10px] text-text-tertiary mt-1\">{describeData ? 'AI-generated. Edit to refine.' : 'Describe what this workflow does so future queries can find it.'}</p>\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags</label>\n <TagInput tags={compileTags} onChange={setCompileTags} placeholder=\"e.g. browser, screenshots, login\" />\n <p className=\"text-[10px] text-text-tertiary mt-1\">Press Enter or comma to add.</p>\n </div>\n </div>\n\n <div className=\"mt-5\">\n <button type=\"button\" onClick={() => setShowFeedback(!showFeedback)}\n className=\"text-xs text-accent hover:text-accent/80 transition-colors\">\n {showFeedback ? 'Hide refinement feedback' : 'Refine compilation'}\n </button>\n {showFeedback && (\n <div className=\"mt-2\">\n <textarea value={compileFeedback} onChange={(e) => setCompileFeedback(e.target.value)}\n 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.'\"\n 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\" />\n <p className=\"text-[10px] text-text-tertiary mt-1\">This feedback is sent to the compiler so it can adjust inputs, outputs, and step selection.</p>\n </div>\n )}\n </div>\n\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <button onClick={onCompile} disabled={!compileName.trim() || !compileAppId.trim() || isCompiling} className=\"btn-primary text-xs\">\n {isCompiling ? 'Creating...' : 'Create Profile'}\n </button>\n </WizardNav>\n {compileError && <p className=\"mt-3 text-sm text-status-error\">{compileError}</p>}\n </div>\n );\n}\n\n// ── Composite panel ──────────────────────────────────────────────────────────\n\ninterface ProfilePanelProps {\n compiledYaml: any | undefined;\n /* Create-form props (only used when compiledYaml is absent) */\n originalPrompt: string | undefined;\n compileAppId: string;\n setCompileAppId: (v: string) => void;\n compileName: string;\n setCompileName: (v: string) => void;\n compileDescription: string;\n setCompileDescription: (v: string) => void;\n compileTags: string[];\n setCompileTags: (v: string[]) => void;\n describeData: { tool_name?: string; description: string; tags: string[] } | undefined;\n describePrompt: string | undefined;\n allAppIds: string[];\n compileFeedback: string;\n setCompileFeedback: (v: string) => void;\n onCompile: () => Promise<void>;\n isCompiling: boolean;\n compileError: string | undefined;\n isUncompilable?: boolean;\n onBack: () => void;\n onNext: () => void;\n}\n\nexport function ProfilePanel(props: ProfilePanelProps) {\n const { compiledYaml, isUncompilable, onBack, onNext } = props;\n\n if (isUncompilable && !compiledYaml) {\n return (\n <div>\n <PanelTitle title=\"Create Workflow Profile\" subtitle=\"Define the deterministic workflow tool from this execution\" />\n <div className=\"rounded-md bg-status-warning/5 border border-status-warning/20 px-4 py-3 mb-6\">\n <p className=\"text-xs text-status-warning font-medium\">Cannot compile this query</p>\n <p className=\"text-xs text-text-secondary mt-1\">\n This query did not complete successfully. Resolve the escalation before compiling to a deterministic workflow.\n </p>\n </div>\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <span />\n </WizardNav>\n </div>\n );\n }\n\n if (compiledYaml) {\n return <ExistingProfileView compiledYaml={compiledYaml} onBack={onBack} onNext={onNext} />;\n }\n\n return (\n <CreateProfileForm\n originalPrompt={props.originalPrompt}\n compileAppId={props.compileAppId}\n setCompileAppId={props.setCompileAppId}\n compileName={props.compileName}\n setCompileName={props.setCompileName}\n compileDescription={props.compileDescription}\n setCompileDescription={props.setCompileDescription}\n compileTags={props.compileTags}\n setCompileTags={props.setCompileTags}\n describeData={props.describeData}\n describePrompt={props.describePrompt}\n allAppIds={props.allAppIds}\n compileFeedback={props.compileFeedback}\n setCompileFeedback={props.setCompileFeedback}\n onCompile={props.onCompile}\n isCompiling={props.isCompiling}\n compileError={props.compileError}\n onBack={onBack}\n />\n );\n}\n","import { useState, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { MessageSquarePlus, Pencil } from 'lucide-react';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { ConfigurationSection } from '../../workflows/yaml-workflow-detail/ConfigurationSection';\nimport { LifecycleSidebar } from '../../workflows/yaml-workflow-detail/LifecycleSidebar';\nimport { VersionHistory } from '../../workflows/yaml-workflow-detail/VersionHistory';\nimport {\n useYamlWorkflow,\n useYamlWorkflowVersions,\n useYamlWorkflowVersion,\n useUpdateYamlWorkflow,\n useDeployYamlWorkflow,\n useActivateYamlWorkflow,\n useArchiveYamlWorkflow,\n useRegenerateYamlWorkflow,\n useDeleteYamlWorkflow,\n} from '../../../api/yaml-workflows';\nimport type { InputFieldMeta } from '../../../api/types';\n\ninterface DeployPanelProps {\n yamlId: string;\n onAdvance: () => void;\n onBack: () => void;\n}\n\nexport function DeployPanel({ yamlId, onAdvance, onBack }: DeployPanelProps) {\n const queryClient = useQueryClient();\n const yamlTextareaRef = useRef<HTMLTextAreaElement>(null);\n const [feedbackText, setFeedbackText] = useState('');\n const [showFeedback, setShowFeedback] = useState(false);\n\n const { data: wf, refetch } = useYamlWorkflow(yamlId);\n const { data: versionsData } = useYamlWorkflowVersions(yamlId);\n\n const deployMutation = useDeployYamlWorkflow();\n const activateMutation = useActivateYamlWorkflow();\n const archiveMutation = useArchiveYamlWorkflow();\n const deleteMutation = useDeleteYamlWorkflow();\n const regenerateMutation = useRegenerateYamlWorkflow();\n const updateMutation = useUpdateYamlWorkflow();\n\n // Config editing state\n const [yamlDraft, setYamlDraft] = useState('');\n const [inputSchemaDraft, setInputSchemaDraft] = useState('');\n const [outputSchemaDraft, setOutputSchemaDraft] = useState('');\n const [inputFieldMetaDraft, setInputFieldMetaDraft] = useState<InputFieldMeta[]>([]);\n const [configEditing, setConfigEditing] = useState(false);\n\n // Version browsing\n const [versionParam, setVersionParam] = useState<number | null>(null);\n const isViewingHistory = versionParam !== null && wf != null && versionParam !== wf.content_version;\n const { data: versionSnapshot } = useYamlWorkflowVersion(yamlId, isViewingHistory ? versionParam : null);\n\n const resolvedYaml = isViewingHistory && versionSnapshot ? versionSnapshot.yaml_content : wf?.yaml_content;\n const resolvedInputSchema = isViewingHistory && versionSnapshot ? versionSnapshot.input_schema : wf?.input_schema;\n const resolvedOutputSchema = isViewingHistory && versionSnapshot ? versionSnapshot.output_schema : wf?.output_schema;\n\n // Sync drafts when workflow loads\n useEffect(() => {\n if (wf) {\n setYamlDraft(wf.yaml_content);\n setInputSchemaDraft(JSON.stringify(wf.input_schema, null, 2));\n setOutputSchemaDraft(JSON.stringify(wf.output_schema, null, 2));\n if (wf.input_field_meta) setInputFieldMetaDraft(wf.input_field_meta);\n }\n }, [wf?.id, wf?.content_version]);\n\n // Version history adapter (VersionHistory expects URLSearchParams)\n const versionSearchParams = useMemo(() => {\n const sp = new URLSearchParams();\n if (versionParam !== null) sp.set('version', String(versionParam));\n return sp;\n }, [versionParam]);\n const setVersionSearchParams = useCallback((sp: URLSearchParams) => {\n const v = sp.get('version');\n setVersionParam(v ? parseInt(v, 10) : null);\n }, []);\n\n const canEditConfig = wf?.status !== 'archived' && !isViewingHistory;\n\n const handleSaveConfig = async () => {\n if (!wf) return;\n let inputSchema, outputSchema;\n try { inputSchema = JSON.parse(inputSchemaDraft); } catch { /* keep existing */ }\n try { outputSchema = JSON.parse(outputSchemaDraft); } catch { /* keep existing */ }\n await updateMutation.mutateAsync({\n id: wf.id,\n yaml_content: yamlDraft,\n ...(inputSchema ? { input_schema: inputSchema } : {}),\n ...(outputSchema ? { output_schema: outputSchema } : {}),\n });\n setConfigEditing(false);\n refetch();\n };\n\n const handleCancelEdit = () => {\n if (!wf) return;\n setYamlDraft(wf.yaml_content);\n setInputSchemaDraft(JSON.stringify(wf.input_schema, null, 2));\n setOutputSchemaDraft(JSON.stringify(wf.output_schema, null, 2));\n setConfigEditing(false);\n };\n\n const handleDeploy = async () => {\n if (!wf) return;\n // Always deploy (updates deployed_content_version), then activate\n await deployMutation.mutateAsync(wf.id);\n await activateMutation.mutateAsync(wf.id);\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflowForSource'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflow'], refetchType: 'all' });\n refetch();\n };\n\n const handleRegenerate = async () => {\n await regenerateMutation.mutateAsync({\n id: yamlId,\n compilation_feedback: feedbackText.trim() || undefined,\n });\n setFeedbackText('');\n setShowFeedback(false);\n refetch();\n };\n\n if (!wf) return <p className=\"text-sm text-text-secondary animate-pulse\">Loading workflow...</p>;\n\n const isPending = deployMutation.isPending || activateMutation.isPending || archiveMutation.isPending || regenerateMutation.isPending || deleteMutation.isPending;\n\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_200px] gap-8\">\n {/* Left: config */}\n <div>\n <div className=\"flex items-start justify-between mb-6\">\n <div>\n <h2 className=\"text-lg font-light text-text-primary\">\n {wf.status === 'active' ? 'Redeploy' : 'Deploy'} Workflow\n </h2>\n <p className=\"text-xs text-text-tertiary mt-0.5\">Review configuration, input/output schemas, and YAML definition</p>\n </div>\n <div className=\"flex items-center gap-3 shrink-0\">\n <button type=\"button\" onClick={() => { setShowFeedback(!showFeedback); setConfigEditing(false); }}\n className={`inline-flex items-center gap-1 text-xs transition-colors hover:underline ${showFeedback ? 'text-accent font-medium' : 'text-accent/70 hover:text-accent'}`}>\n <MessageSquarePlus className=\"w-3 h-3\" />\n Recompile with Feedback\n </button>\n <span className=\"text-text-tertiary/30\">|</span>\n <button type=\"button\" onClick={() => { setConfigEditing(!configEditing); setShowFeedback(false); }}\n className={`inline-flex items-center gap-1 text-xs transition-colors hover:underline ${configEditing ? 'text-accent font-medium' : 'text-accent/70 hover:text-accent'}`}>\n <Pencil className=\"w-3 h-3\" />\n Manual Edit\n </button>\n </div>\n </div>\n\n {/* Recompile feedback panel */}\n {showFeedback && (\n <div className=\"mb-4 p-4 bg-surface-sunken border border-surface-border rounded-lg\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">What should change?</p>\n <textarea value={feedbackText} onChange={(e) => setFeedbackText(e.target.value)}\n placeholder=\"E.g.: 'Only url, username, password, and screenshot_dir should be dynamic inputs. The steps array and script are implementation details.'\"\n 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\" />\n <div className=\"flex items-center justify-between mt-2\">\n <p className=\"text-[10px] text-text-tertiary\">This feedback guides the compiler. The current YAML will be replaced.</p>\n <button onClick={handleRegenerate} disabled={!feedbackText.trim() || regenerateMutation.isPending} className=\"btn-primary text-xs shrink-0 ml-4\">\n {regenerateMutation.isPending ? 'Recompiling...' : 'Recompile Pipeline'}\n </button>\n </div>\n </div>\n )}\n\n {/* Version history banner */}\n {isViewingHistory && (\n <div className=\"mb-4 px-3 py-2 bg-accent-muted/20 border border-accent-muted/40 rounded-md flex items-center justify-between\">\n <span className=\"text-xs text-accent\">Viewing version {versionParam}</span>\n <button onClick={() => setVersionParam(null)} className=\"text-xs text-accent hover:underline\">Back to current</button>\n </div>\n )}\n\n <ConfigurationSection\n wf={wf}\n resolvedInputSchema={resolvedInputSchema}\n resolvedOutputSchema={resolvedOutputSchema}\n resolvedYaml={resolvedYaml}\n configEditing={configEditing}\n setConfigEditing={setConfigEditing}\n canEditConfig={canEditConfig}\n yamlDraft={yamlDraft}\n setYamlDraft={setYamlDraft}\n inputSchemaDraft={inputSchemaDraft}\n setInputSchemaDraft={setInputSchemaDraft}\n outputSchemaDraft={outputSchemaDraft}\n setOutputSchemaDraft={setOutputSchemaDraft}\n inputFieldMetaDraft={inputFieldMetaDraft}\n setInputFieldMetaDraft={setInputFieldMetaDraft}\n onSave={handleSaveConfig}\n onCancel={handleCancelEdit}\n updateMutation={updateMutation}\n yamlTextareaRef={yamlTextareaRef}\n isCollapsed={false}\n onToggle={() => {}}\n schemasGrid\n />\n\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n {wf.status === 'active'\n ? <button onClick={onAdvance} disabled={showFeedback} className=\"btn-primary text-xs\">Next: Test</button>\n : <button onClick={handleDeploy} disabled={isPending || showFeedback} className=\"btn-primary text-xs\">{isPending ? 'Deploying...' : 'Deploy & Activate'}</button>\n }\n </WizardNav>\n </div>\n\n {/* Right: lifecycle + versions — sticky on scroll */}\n <div className=\"space-y-6\">\n <div className=\"sticky top-6\">\n <LifecycleSidebar\n status={wf.status}\n sourceWorkflowId={wf.source_workflow_id}\n contentVersion={wf.content_version}\n deployedContentVersion={wf.deployed_content_version}\n onDeploy={handleDeploy}\n onArchive={() => archiveMutation.mutateAsync(yamlId).then(() => refetch())}\n onDelete={() => deleteMutation.mutateAsync(yamlId)}\n onRegenerate={handleRegenerate}\n isPending={isPending}\n error={undefined}\n />\n {(versionsData?.versions?.length ?? 0) > 1 && (\n <VersionHistory\n versionsData={versionsData}\n searchParams={versionSearchParams}\n setSearchParams={setVersionSearchParams}\n currentVersion={wf.content_version}\n viewingVersion={isViewingHistory ? versionParam : null}\n />\n )}\n </div>{/* end sticky */}\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport { useYamlWorkflow, useInvokeYamlWorkflow } from '../../../api/yaml-workflows';\nimport { useMcpRuns, useMcpRunExecution } from '../../../api/mcp-runs';\nimport { useWorkflowExecution } from '../../../api/workflows';\nimport { useTaskByWorkflowId } from '../../../api/tasks';\nimport { useYamlActivityEvents } from '../../../hooks/useYamlActivityEvents';\nimport { buildSkeleton } from '../../workflows/yaml-workflow-detail/helpers';\nimport type { LTJob, ActivityManifestEntry } from '../../../api/types';\nimport { extractJsonFromSummary } from './helpers';\nimport { SectionHeading } from './SectionHeading';\n\nfunction jobLabel(job: LTJob): string {\n const date = new Date(job.created_at);\n const time = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n const day = date.toLocaleDateString([], { month: 'short', day: 'numeric' });\n const status = job.status === 'completed' || Number(job.status) === 0 ? 'completed' : job.is_live ? 'running' : 'failed';\n return `${day} ${time} — ${status}`;\n}\n\ninterface TestPanelProps {\n yamlId: string;\n originalWorkflowId: string | undefined;\n originalResult: Record<string, unknown> | undefined;\n originalPrompt: string | undefined;\n onBack: () => void;\n onAdvance: () => void;\n}\n\nexport function TestPanel({ yamlId, originalWorkflowId, originalResult, originalPrompt, onBack, onAdvance }: TestPanelProps) {\n const queryClient = useQueryClient();\n const { data: wf } = useYamlWorkflow(yamlId);\n const invokeMutation = useInvokeYamlWorkflow();\n\n const { data: runs } = useMcpRuns({\n entity: wf?.graph_topic, app_id: wf?.app_id || 'longtail', limit: 10,\n });\n\n const [selectedRunId, setSelectedRunId] = useState<string | null>(null);\n const { data: selectedRunExecution } = useMcpRunExecution(\n selectedRunId ?? '', wf?.app_id || 'longtail',\n );\n\n // Invoke modal state\n const [showInvokeModal, setShowInvokeModal] = useState(false);\n const [invokeJsonMode, setInvokeJsonMode] = useState(false);\n const [invokeFields, setInvokeFields] = useState<Record<string, any>>({});\n const [invokeJson, setInvokeJson] = useState('{}');\n const [activeJobId, setActiveJobId] = useState<string | null>(null);\n const { steps: activitySteps, isComplete: jobComplete } = useYamlActivityEvents(activeJobId);\n\n // Original execution + task envelope\n const { data: originalExecution } = useWorkflowExecution(originalWorkflowId ?? '');\n const { data: originalTask } = useTaskByWorkflowId(originalWorkflowId ?? '');\n const originalExecResult = (originalExecution?.result as any)?.data as Record<string, unknown> | undefined;\n\n const originalEnvelope = useMemo(() => {\n if (!originalTask?.envelope) return null;\n try { return typeof originalTask.envelope === 'string' ? JSON.parse(originalTask.envelope) : originalTask.envelope; }\n catch { return null; }\n }, [originalTask?.envelope]);\n\n const resolvedPrompt = (originalEnvelope as any)?.data?.prompt ?? originalPrompt;\n\n const jobs = runs?.jobs ?? [];\n useEffect(() => {\n if (!selectedRunId && jobs.length > 0) setSelectedRunId(jobs[0].workflow_id);\n }, [jobs.length]);\n\n // Build form skeleton from input schema\n useEffect(() => {\n if (wf?.input_schema) {\n const skeleton = buildSkeleton(wf.input_schema);\n setInvokeFields(skeleton);\n setInvokeJson(JSON.stringify(skeleton, null, 2));\n }\n }, [wf?.id]);\n\n const handleInvoke = async () => {\n if (!wf) return;\n try {\n const data = invokeJsonMode ? JSON.parse(invokeJson) : invokeFields;\n const result = await invokeMutation.mutateAsync({ id: wf.id, data, sync: false });\n if (result.job_id) {\n setActiveJobId(result.job_id);\n }\n } catch { /* error shown in modal */ }\n };\n\n // When job completes via NATS events, dismiss modal and select the new run\n useEffect(() => {\n if (jobComplete && activeJobId) {\n const completedJobId = activeJobId;\n const timer = setTimeout(() => {\n setShowInvokeModal(false);\n setActiveJobId(null);\n setSelectedRunId(completedJobId);\n queryClient.invalidateQueries({ queryKey: ['mcpRuns'], refetchType: 'all' });\n }, 1000); // brief pause to show final completed state\n return () => clearTimeout(timer);\n }\n }, [jobComplete, activeJobId, queryClient]);\n\n if (!wf) return <p className=\"text-sm text-text-secondary animate-pulse\">Loading...</p>;\n\n // Original output\n const originalOutput = originalExecResult?.result ??\n (typeof originalExecResult?.summary === 'string' ? extractJsonFromSummary(originalExecResult.summary) : null) ??\n originalResult?.result ??\n (typeof originalResult?.summary === 'string' ? extractJsonFromSummary(originalResult.summary) : null) ??\n originalResult;\n\n // Deterministic run data\n let deterministicOutput: unknown = null;\n let deterministicInput: unknown = null;\n if (selectedRunExecution?.result) {\n const execResult = selectedRunExecution.result as Record<string, unknown>;\n if (typeof execResult.response === 'string') {\n const jsonMatch = (execResult.response as string).match(/```json\\s*([\\s\\S]*?)```/);\n if (jsonMatch) {\n try { deterministicOutput = JSON.parse(jsonMatch[1].trim()); } catch { deterministicOutput = execResult; }\n } else {\n deterministicOutput = extractJsonFromSummary(execResult.response as string) ?? execResult;\n }\n } else {\n deterministicOutput = execResult;\n }\n }\n if (selectedRunExecution?.events?.length) {\n const triggerEvent = selectedRunExecution.events.find(\n (e) => e.event_type === 'activity_task_completed' && e.is_system &&\n (e.attributes as any)?.result && Object.keys((e.attributes as any).result).length > 0,\n );\n deterministicInput = triggerEvent ? (triggerEvent.attributes as any).result : null;\n }\n\n return (\n <div>\n {/* Header */}\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-light text-text-primary\">Compare Runs</h2>\n <div className=\"flex items-center gap-3 mt-1\">\n <span className=\"text-xs font-mono text-text-secondary\">{wf.name}</span>\n <span className=\"text-[10px] text-text-tertiary\">v{wf.content_version}</span>\n <Link to={`/mcp/workflows/${yamlId}`} className=\"text-[10px] text-accent hover:underline\">View workflow</Link>\n </div>\n </div>\n\n {/* Grid-aligned comparison: column headers */}\n <div className=\"grid grid-cols-2 gap-8 mb-4\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Original MCP Query</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Dynamic LLM orchestration</p>\n </div>\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Compiled Pipeline Run</p>\n {jobs.length > 0 && selectedRunId && (\n <select\n value={selectedRunId}\n onChange={(e) => setSelectedRunId(e.target.value)}\n 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\"\n >\n {jobs.map((job) => <option key={job.workflow_id} value={job.workflow_id}>{jobLabel(job)}</option>)}\n </select>\n )}\n {!selectedRunId && <p className=\"text-[10px] text-text-tertiary mt-0.5\">No runs yet</p>}\n </div>\n <button\n onClick={() => setShowInvokeModal(true)}\n 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\"\n >\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"currentColor\"><path d=\"M3 1.5v9l7.5-4.5z\" /></svg>\n Run Test\n </button>\n </div>\n </div>\n\n {/* Row 1: Inputs */}\n <SectionHeading>Input</SectionHeading>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6\">\n <div>\n {originalEnvelope ? (\n <JsonViewer data={originalEnvelope} defaultMode=\"tree\" />\n ) : resolvedPrompt ? (\n <p className=\"text-xs text-text-primary leading-relaxed px-3 py-2 bg-surface-sunken rounded-md\">{resolvedPrompt}</p>\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">Loading...</p>\n )}\n </div>\n <div>\n {deterministicInput ? (\n <JsonViewer data={deterministicInput} defaultMode=\"tree\" />\n ) : selectedRunId && wf.input_schema ? (\n <div>\n <p className=\"text-[10px] text-text-tertiary italic mb-1\">Stored defaults</p>\n <JsonViewer data={wf.input_schema} defaultMode=\"tree\" />\n </div>\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">No runs yet</p>\n )}\n </div>\n </div>\n\n {/* Row 2: Outputs */}\n <SectionHeading>Output</SectionHeading>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-6\">\n <div>\n {originalOutput ? (\n <JsonViewer data={originalOutput} defaultMode=\"tree\" />\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">No output</p>\n )}\n {originalExecution?.duration_ms != null && (\n <p className=\"text-[10px] text-text-tertiary mt-2\">{(originalExecution.duration_ms / 1000).toFixed(1)}s</p>\n )}\n </div>\n <div>\n {deterministicOutput ? (\n <JsonViewer data={deterministicOutput} defaultMode=\"tree\" />\n ) : selectedRunId ? (\n <p className=\"text-xs text-text-tertiary animate-pulse\">Loading...</p>\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">No runs yet</p>\n )}\n {selectedRunExecution?.duration_ms != null && (\n <p className=\"text-[10px] text-text-tertiary mt-2\">{(selectedRunExecution.duration_ms / 1000).toFixed(1)}s</p>\n )}\n </div>\n </div>\n\n {/* Invoke modal with form/JSON toggle or live timeline */}\n <Modal\n open={showInvokeModal}\n onClose={() => { if (!activeJobId) { setShowInvokeModal(false); } }}\n title={activeJobId ? 'Executing...' : 'Test Compiled Pipeline'}\n maxWidth=\"max-w-lg\"\n >\n {activeJobId ? (\n /* ── Live execution timeline ── */\n <LiveActivityTimeline\n steps={activitySteps}\n manifest={wf.activity_manifest}\n isComplete={jobComplete}\n />\n ) : (\n /* ── Input form ── */\n <>\n <p className=\"text-xs text-text-secondary mb-3 leading-relaxed\">\n Invoke <span className=\"font-mono text-text-primary\">{wf.name}</span> with explicit inputs.\n </p>\n\n <div className=\"flex justify-end mb-2\">\n <button onClick={() => {\n if (!invokeJsonMode) setInvokeJson(JSON.stringify(invokeFields, null, 2));\n else try { setInvokeFields(JSON.parse(invokeJson)); } catch { /* keep fields */ }\n setInvokeJsonMode(!invokeJsonMode);\n }} className=\"text-[10px] text-accent hover:underline\">\n {invokeJsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {invokeJsonMode ? (\n <textarea\n value={invokeJson}\n onChange={(e) => setInvokeJson(e.target.value)}\n 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\"\n />\n ) : (\n <div className=\"space-y-3 max-h-[400px] overflow-y-auto\">\n {Object.entries(invokeFields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setInvokeFields({ ...invokeFields, [key]: e.target.value === 'true' })}\n 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\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setInvokeFields({ ...invokeFields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid json */ } }}\n 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\"\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setInvokeFields({ ...invokeFields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n 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\"\n />\n )}\n </div>\n ))}\n </div>\n )}\n\n {invokeMutation.isError && (\n <p className=\"mt-2 text-xs text-status-error\">{invokeMutation.error.message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-4\">\n <button onClick={() => setShowInvokeModal(false)} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Cancel</button>\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary text-xs\">\n {invokeMutation.isPending ? 'Starting...' : 'Invoke'}\n </button>\n </div>\n </>\n )}\n </Modal>\n\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <button onClick={onAdvance} className=\"btn-primary text-xs\">Next: Verify</button>\n </WizardNav>\n </div>\n );\n}\n\n// ── Live activity timeline shown inside the invoke modal ──────────────────\n\nconst TOOL_SOURCE_COLORS: Record<string, { border: string; text: string; icon: string }> = {\n mcp: { border: 'border-blue-500', text: 'text-blue-500', icon: 'MCP' },\n db: { border: 'border-blue-500', text: 'text-blue-500', icon: 'DB' },\n llm: { border: 'border-violet-500', text: 'text-violet-500', icon: 'LLM' },\n transform: { border: 'border-emerald-500', text: 'text-emerald-500', icon: 'Map' },\n};\n\nfunction LiveActivityTimeline({\n steps,\n manifest,\n isComplete,\n}: {\n steps: import('../../../hooks/useYamlActivityEvents').ActivityStep[];\n manifest: ActivityManifestEntry[];\n isComplete: boolean;\n}) {\n // Build the full skeleton from manifest, overlay live step status\n const workerActivities = manifest.filter((a) => a.type === 'worker');\n const totalSteps = workerActivities.length;\n\n const merged = workerActivities.map((a, i) => {\n const live = steps.find((s) => s.activityId === a.activity_id);\n const source = a.tool_source || 'mcp';\n const colors = TOOL_SOURCE_COLORS[source] || TOOL_SOURCE_COLORS.mcp;\n return {\n activityId: a.activity_id,\n title: a.title || a.mcp_tool_name || a.activity_id,\n toolName: a.mcp_tool_name,\n toolSource: source,\n colors,\n stepIndex: i,\n status: live?.status || 'pending' as const,\n error: live?.error,\n };\n });\n\n return (\n <div>\n <p className=\"text-xs text-text-secondary mb-4\">\n {isComplete\n ? `All ${totalSteps} steps completed`\n : `Running step ${merged.filter((s) => s.status === 'completed').length + 1} of ${totalSteps}...`}\n </p>\n\n <div className=\"space-y-0\">\n {merged.map((step, idx) => {\n const isLast = idx === merged.length - 1;\n return (\n <div key={step.activityId} className=\"flex items-stretch gap-3\">\n {/* Vertical track */}\n <div className=\"flex flex-col items-center w-5 shrink-0\">\n <span className={`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${\n step.status === 'completed' ? 'bg-status-success border-status-success'\n : step.status === 'running' ? `${step.colors.border} bg-transparent animate-pulse`\n : step.status === 'failed' ? 'bg-status-error border-status-error'\n : 'bg-surface-sunken border-surface-border'\n }`} />\n {!isLast && (\n <span className={`w-px flex-1 transition-colors ${\n step.status === 'completed' ? 'bg-status-success/30' : 'bg-surface-border'\n }`} />\n )}\n </div>\n\n {/* Step content */}\n <div className={`pb-4 ${isLast ? 'pb-0' : ''}`}>\n <p className={`text-xs font-medium ${\n step.status === 'running' ? 'text-text-primary'\n : step.status === 'completed' ? 'text-text-secondary'\n : step.status === 'failed' ? 'text-status-error'\n : 'text-text-tertiary'\n }`}>\n {step.title}\n </p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <span className={`text-[9px] font-mono px-1 py-0.5 rounded border ${step.colors.border} ${step.colors.text} bg-transparent`}>\n {step.colors.icon}\n </span>\n {step.toolName && (\n <span className=\"text-[10px] text-text-tertiary font-mono\">{step.toolName}</span>\n )}\n </div>\n {step.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{step.error}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {isComplete && (\n <p className=\"text-[10px] text-text-tertiary mt-3 text-center\">Closing...</p>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { WorkflowExecutionEvent } from '../../../api/types';\n\ninterface RouterPhase {\n step: number; // 0=starting, 1=discover, 2=evaluate, 3=execute\n label: string;\n detail: string;\n path: 'deterministic' | 'dynamic' | null;\n childWorkflowId?: string;\n}\n\nconst STEPS = ['Discover', 'Evaluate', 'Execute'] as const;\n\nfunction derivePhase(events: WorkflowExecutionEvent[] | undefined): RouterPhase {\n if (!events?.length) return { step: 0, label: 'Starting...', detail: 'Initializing query router', path: null };\n\n // Check for child workflow — this reveals the routing decision\n const childStart = events.find((e) => e.event_type === 'child_workflow_execution_started');\n if (childStart) {\n const childId = childStart.attributes.child_workflow_id ?? '';\n const isDeterministic = childId.includes('mcpDeterministic');\n const childCompleted = events.some((e) => e.event_type === 'child_workflow_execution_completed');\n if (childCompleted) {\n return {\n step: 3, label: isDeterministic ? 'Deterministic complete' : 'Dynamic complete',\n detail: isDeterministic ? 'Compiled workflow executed successfully' : 'Dynamic MCP orchestration completed',\n path: isDeterministic ? 'deterministic' : 'dynamic', childWorkflowId: childId,\n };\n }\n return {\n step: 3,\n label: isDeterministic ? 'Running deterministic workflow' : 'Running dynamic MCP query',\n detail: isDeterministic ? 'Executing compiled workflow' : 'LLM agentic orchestration in progress (30\\u201360s)',\n path: isDeterministic ? 'deterministic' : 'dynamic',\n childWorkflowId: childId,\n };\n }\n\n // Derive from activity names\n const activityTypes = events\n .filter((e) => e.category === 'activity')\n .map((e) => e.attributes.activity_type ?? '');\n\n if (activityTypes.some((a) => a === 'extractWorkflowInputs')) {\n return { step: 2, label: 'Extracting inputs...', detail: 'Preparing structured inputs for compiled workflow', path: null };\n }\n if (activityTypes.some((a) => a === 'evaluateWorkflowMatch')) {\n return { step: 2, label: 'Evaluating match...', detail: 'LLM judge determining best compiled workflow', path: null };\n }\n if (activityTypes.some((a) => a === 'findCompiledWorkflows')) {\n return { step: 1, label: 'Searching compiled workflows...', detail: 'Full-text + tag discovery of candidates', path: null };\n }\n\n return { step: 0, label: 'Starting...', detail: 'Initializing query router', path: null };\n}\n\ninterface RouterProgressTrackerProps {\n events: WorkflowExecutionEvent[] | undefined;\n status: string | undefined;\n verifyRunId: string | null;\n}\n\nexport function RouterProgressTracker({ events, status, verifyRunId }: RouterProgressTrackerProps) {\n const phase = derivePhase(events);\n const isDone = status === 'completed' || status === 'failed';\n\n return (\n <div className=\"space-y-4\">\n {/* Stepper */}\n <div className=\"flex items-center gap-1\">\n {STEPS.map((label, i) => {\n const stepNum = i + 1;\n const isComplete = phase.step > stepNum || isDone;\n const isActive = phase.step === stepNum && !isDone;\n return (\n <div key={label} className=\"flex items-center gap-1 flex-1\">\n <div className=\"flex items-center gap-2 flex-1\">\n <div className={`w-5 h-5 rounded-full flex items-center justify-center text-[9px] font-medium shrink-0 transition-colors ${\n isComplete ? 'bg-status-success/20 text-status-success' :\n isActive ? 'bg-accent/20 text-accent animate-pulse' :\n 'bg-surface-sunken text-text-tertiary'\n }`}>\n {isComplete ? (\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : stepNum}\n </div>\n <span className={`text-[10px] font-medium whitespace-nowrap ${\n isComplete ? 'text-text-secondary' : isActive ? 'text-text-primary' : 'text-text-tertiary'\n }`}>{label}</span>\n </div>\n {i < STEPS.length - 1 && (\n <div className={`h-px flex-1 min-w-4 ${isComplete ? 'bg-status-success/30' : 'bg-surface-border'}`} />\n )}\n </div>\n );\n })}\n </div>\n\n {/* Detail + badges */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n <p className=\"text-xs text-text-secondary\">{phase.detail}</p>\n {phase.path === 'deterministic' && (\n <span className=\"text-[10px] bg-status-success/10 text-status-success px-2 py-0.5 rounded-full\">\n Deterministic\n </span>\n )}\n {phase.path === 'dynamic' && (\n <span className=\"text-[10px] bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full\">\n Dynamic\n </span>\n )}\n </div>\n\n {/* Escape hatch link */}\n {verifyRunId && phase.step >= 1 && (\n <Link\n to={`/workflows/executions/${verifyRunId}`}\n className=\"text-[10px] text-accent hover:underline\"\n >\n View execution tree\n </Link>\n )}\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Link, useSearchParams } from 'react-router-dom';\n\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { WizardNav } from '../../../components/common/layout/WizardNav';\nimport { useSubmitMcpQueryRouted, useMcpQueryExecution, useMcpQueryResult } from '../../../api/mcp-query';\nimport { useTaskByWorkflowId } from '../../../api/tasks';\nimport { RouterProgressTracker } from './RouterProgressTracker';\n\ninterface VerifyPanelProps {\n originalWorkflowId: string | undefined;\n originalPrompt: string | undefined;\n workflowName: string;\n onBack: () => void;\n onGoToDeploy: () => void;\n}\n\nexport function VerifyPanel({ originalWorkflowId, originalPrompt, workflowName, onBack, onGoToDeploy }: VerifyPanelProps) {\n const submitQuery = useSubmitMcpQueryRouted();\n const [searchParams, setSearchParams] = useSearchParams();\n\n const [testPrompt, setTestPrompt] = useState('');\n const [promptInitialized, setPromptInitialized] = useState(false);\n\n // Persist verifyRunId in URL so it survives navigation\n const verifyRunId = searchParams.get('verifyRun');\n const setVerifyRunId = (id: string | null) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n if (id) next.set('verifyRun', id);\n else next.delete('verifyRun');\n return next;\n }, { replace: true });\n };\n\n // Original prompt\n const { data: originalTask } = useTaskByWorkflowId(originalWorkflowId ?? '');\n const originalEnvelope = useMemo(() => {\n if (!originalTask?.envelope) return null;\n try { return typeof originalTask.envelope === 'string' ? JSON.parse(originalTask.envelope) : originalTask.envelope; }\n catch { return null; }\n }, [originalTask?.envelope]);\n const resolvedPrompt = (originalEnvelope as any)?.data?.prompt ?? originalPrompt;\n\n // Pre-fill prompt once\n if (resolvedPrompt && !promptInitialized) {\n setPromptInitialized(true);\n setTestPrompt(resolvedPrompt);\n }\n\n // Verify run\n const { data: verifyExecution } = useMcpQueryExecution(verifyRunId ?? undefined);\n const { data: verifyResult } = useMcpQueryResult(\n verifyExecution?.status === 'completed' ? verifyRunId ?? undefined : undefined,\n );\n\n const verifyStatus = verifyExecution?.status;\n const verifyData = (verifyResult?.result?.data ?? {}) as Record<string, unknown>;\n const verifyDiscovery = verifyData.discovery as Record<string, unknown> | undefined;\n const usedDeterministic = verifyDiscovery?.method === 'compiled-workflow';\n const isRunning = verifyRunId && verifyStatus !== 'completed' && verifyStatus !== 'failed';\n\n const handleSubmit = async () => {\n if (!testPrompt.trim()) return;\n const res = await submitQuery.mutateAsync({ prompt: testPrompt.trim() });\n setVerifyRunId(res.workflow_id);\n };\n\n return (\n <div>\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-light text-text-primary\">End-to-End Verification</h2>\n <p className=\"text-xs text-text-tertiary mt-0.5\">\n Submit the original prompt (or a variant) to verify that\n <span className=\"font-mono text-text-primary mx-1\">{workflowName}</span>\n handles it deterministically.\n If results are unexpected, go <button onClick={onGoToDeploy} className=\"text-accent hover:underline\">back</button> to adjust.\n </p>\n </div>\n\n {/* Row 1: Headers + metadata (aligned) */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 mb-4\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Query Prompt</p>\n <p className=\"text-[10px] text-text-tertiary\">\n {testPrompt !== resolvedPrompt && resolvedPrompt\n ? <button onClick={() => setTestPrompt(resolvedPrompt)} className=\"text-accent hover:underline\">Reset to original</button>\n : 'Edit and submit to verify'}\n </p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Result</p>\n {!verifyRunId && (\n <p className=\"text-[10px] text-text-tertiary italic\">Awaiting submission</p>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-2\">\n <StatusBadge status=\"in_progress\" />\n <span className=\"text-[10px] text-text-secondary animate-pulse\">Routing...</span>\n </div>\n )}\n {verifyStatus === 'failed' && (\n <div className=\"flex items-center gap-2\">\n <StatusBadge status=\"failed\" />\n <span className=\"text-[10px] text-status-error\">Failed</span>\n </div>\n )}\n {verifyStatus === 'completed' && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n <StatusBadge status=\"completed\" />\n {usedDeterministic ? (\n <span className=\"text-[10px] bg-status-success/10 text-status-success px-2 py-0.5 rounded-full\">\n Deterministic ({((verifyDiscovery?.confidence as number) * 100).toFixed(0)}%)\n </span>\n ) : (\n <span className=\"text-[10px] bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full\">\n Dynamic (no match)\n </span>\n )}\n {verifyExecution?.duration_ms != null && (\n <span className=\"text-[10px] text-text-tertiary\">{(verifyExecution.duration_ms / 1000).toFixed(1)}s</span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Row 2: Prompt input + output (aligned) */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Left: editable prompt */}\n <div>\n <textarea\n value={testPrompt}\n onChange={(e) => setTestPrompt(e.target.value)}\n 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\"\n placeholder=\"Type a natural language query...\"\n />\n <div className=\"flex justify-end mt-2\">\n <button\n onClick={handleSubmit}\n disabled={!testPrompt.trim() || submitQuery.isPending || !!isRunning}\n 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\"\n >\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"currentColor\"><path d=\"M3 1.5v9l7.5-4.5z\" /></svg>\n {submitQuery.isPending ? 'Starting...' : isRunning ? 'Running...' : verifyRunId ? 'Resubmit' : 'Submit'}\n </button>\n </div>\n </div>\n\n {/* Right: output */}\n <div>\n {!verifyRunId && (\n <div className=\"flex items-center justify-center min-h-[160px] text-xs text-text-tertiary italic\">\n Submit a query to see the result\n </div>\n )}\n\n {isRunning && (\n <div className=\"min-h-[160px] flex items-start pt-4\">\n <RouterProgressTracker\n events={verifyExecution?.events}\n status={verifyStatus}\n verifyRunId={verifyRunId}\n />\n </div>\n )}\n\n {verifyStatus === 'completed' && (\n <div className=\"space-y-3\">\n {typeof verifyData.title === 'string' && (\n <p className=\"text-sm text-text-primary\">{verifyData.title}</p>\n )}\n {verifyData.result != null && (\n <JsonViewer data={verifyData.result} defaultMode=\"tree\" />\n )}\n <div className=\"flex items-center gap-3 pt-1\">\n <Link to={`/mcp/queries/${verifyRunId}`} className=\"text-[10px] text-accent hover:underline\">\n View full details\n </Link>\n <button onClick={() => setVerifyRunId(null)} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Clear\n </button>\n </div>\n </div>\n )}\n\n {verifyStatus === 'failed' && (\n <p className=\"text-xs text-status-error py-4\">Query failed. Try modifying the prompt.</p>\n )}\n </div>\n </div>\n\n <WizardNav>\n <button onClick={onBack} className=\"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary\">Back</button>\n <span className=\"text-[10px] text-text-tertiary\">End-to-end verification — modify the prompt and submit to test the full pipeline</span>\n </WizardNav>\n </div>\n );\n}\n","import { Link, useNavigate } from 'react-router-dom';\n\ninterface EscalationBannerProps {\n escalation: any | undefined;\n isRoundsExhausted: boolean;\n diagnosis: string | undefined;\n onRetryTriage?: () => void;\n isRetrying?: boolean;\n /** The successful re-run workflow ID (discovered from triage result) */\n rerunWorkflowId?: string;\n}\n\nexport function EscalationBanner({ escalation, isRoundsExhausted, diagnosis, onRetryTriage, isRetrying, rerunWorkflowId }: EscalationBannerProps) {\n const navigate = useNavigate();\n\n if (!escalation && !isRoundsExhausted) return null;\n\n const isPending = escalation?.status === 'pending';\n const isResolved = escalation?.status === 'resolved';\n\n // Extract triage metadata from resolver_payload\n const resolverPayload = (() => {\n if (!escalation?.resolver_payload) return null;\n try {\n return typeof escalation.resolver_payload === 'string'\n ? JSON.parse(escalation.resolver_payload)\n : escalation.resolver_payload;\n } catch { return null; }\n })();\n const wasTriaged = resolverPayload?._lt?.triaged === true;\n\n // Extract original failure context from escalation_payload\n const escalationPayload = (() => {\n if (!escalation?.escalation_payload) return null;\n try {\n return typeof escalation.escalation_payload === 'string'\n ? JSON.parse(escalation.escalation_payload)\n : escalation.escalation_payload;\n } catch { return null; }\n })();\n const originalDiagnosis = escalationPayload?.diagnosis as string | undefined;\n\n // ── Resolved by triage: outcome-focused ────────────────────────\n if (isResolved && wasTriaged) {\n return (\n <div className=\"rounded-md mb-4 border border-status-success/30 bg-surface-raised overflow-hidden\">\n <div className=\"px-4 pt-3 pb-2\">\n <div className=\"flex items-start gap-3\">\n <svg className=\"w-4 h-4 mt-0.5 shrink-0 text-status-success\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <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\" />\n </svg>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-status-success\">\n {rerunWorkflowId\n ? 'This query succeeded after AI triage'\n : 'AI triage resolved this query'}\n </p>\n <p className=\"text-xs text-text-secondary mt-1.5 leading-relaxed\">\n {rerunWorkflowId\n ? '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.'\n : 'The original run hit a wall. AI triage diagnosed the issue and resolved it.'}\n </p>\n </div>\n </div>\n </div>\n\n {originalDiagnosis && (\n <div className=\"px-4 py-2 mx-4 mb-2 rounded bg-surface-sunken\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">What went wrong</p>\n <p className=\"text-xs text-text-secondary leading-relaxed line-clamp-2\">{originalDiagnosis}</p>\n </div>\n )}\n\n {/* Clear outcomes */}\n <div className=\"px-4 py-3 border-t border-surface-border bg-surface-sunken/50\">\n <div className=\"flex items-center gap-3\">\n {rerunWorkflowId && (\n <button\n onClick={() => navigate(`/mcp/queries/${rerunWorkflowId}`)}\n 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\"\n >\n Continue to successful run\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M4.5 2l4 4-4 4\" />\n </svg>\n </button>\n )}\n <button\n onClick={() => navigate('/mcp/queries')}\n 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\"\n >\n Start fresh\n </button>\n <Link\n to={`/escalations/detail/${escalation.id}`}\n className=\"text-[10px] text-text-tertiary hover:text-accent hover:underline ml-auto\"\n >\n Details\n </Link>\n </div>\n </div>\n </div>\n );\n }\n\n // ── Resolved (non-triage) ──────────────────────────────────────\n if (isResolved) {\n return (\n <div className=\"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-success/30\">\n <div className=\"flex items-start gap-3\">\n <svg className=\"w-4 h-4 mt-0.5 shrink-0 text-status-success\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <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\" />\n </svg>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-status-success\">Escalation resolved</p>\n <p className=\"text-xs text-text-tertiary mt-1\">\n This escalation was resolved manually. You can continue to compile.\n </p>\n <div className=\"flex items-center gap-3 mt-2\">\n {escalation && (\n <Link to={`/escalations/detail/${escalation.id}`} className=\"text-[10px] text-accent hover:underline\">\n View escalation\n </Link>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // ── Pending / rounds exhausted ─────────────────────────────────\n return (\n <div className=\"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-warning/30\">\n <div className=\"flex items-start gap-3\">\n <svg className=\"w-4 h-4 mt-0.5 shrink-0 text-status-warning\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <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\" />\n </svg>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-status-warning\">\n {isRoundsExhausted\n ? 'This query exceeded the maximum tool rounds'\n : 'This query has a pending escalation'}\n </p>\n {diagnosis && (\n <p className=\"text-xs text-text-secondary mt-1 line-clamp-2\">{diagnosis}</p>\n )}\n <div className=\"flex items-center gap-3 mt-2\">\n {isPending && onRetryTriage && (\n <button\n onClick={onRetryTriage}\n disabled={isRetrying}\n 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\"\n >\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"currentColor\"><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\" /></svg>\n {isRetrying ? 'Sending...' : 'Retry with AI Triage'}\n </button>\n )}\n {escalation && (\n <Link to={`/escalations/detail/${escalation.id}`} className=\"text-[10px] text-accent hover:underline\">\n View escalation\n </Link>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useMemo, useEffect, useRef } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { WizardSteps } from '../../../components/common/layout/WizardSteps';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { CopyableId } from '../../../components/common/display/CopyableId';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport { useWorkflowDetailEvents } from '../../../hooks/useNatsEvents';\nimport { useWizardStep } from '../../../hooks/useWizardStep';\nimport { useMcpQueryExecution, useMcpQueryResult, useYamlWorkflowForSource, useDescribeMcpQuery } from '../../../api/mcp-query';\nimport { useCreateYamlWorkflow, useYamlWorkflowAppIds } from '../../../api/yaml-workflows';\nimport { useWorkflowExecution } from '../../../api/workflows';\nimport { useTaskByWorkflowId } from '../../../api/tasks';\nimport { useEscalationsByWorkflowId, useClaimEscalation, useResolveEscalation } from '../../../api/escalations';\n\nimport { mapStatus, extractJsonFromSummary, STEP_LABELS_BASE } from './helpers';\nimport type { Step } from './helpers';\nimport { OriginalQueryPanel } from './OriginalQueryPanel';\nimport { TimelinePanel } from './TimelinePanel';\nimport { ProfilePanel } from './ProfilePanel';\nimport { DeployPanel } from './DeployPanel';\nimport { TestPanel } from './TestPanel';\nimport { VerifyPanel } from './VerifyPanel';\nimport { EscalationBanner } from './EscalationBanner';\n\n// ── Main component ──────────────────────────────────────────────────────────\n\nexport function McpQueryDetailPage() {\n const { workflowId } = useParams<{ workflowId: string }>();\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const queryClient = useQueryClient();\n\n // Strip ?prompt= from URL on mount (keep only step)\n const promptFromUrl = useRef(searchParams.get('prompt'));\n useEffect(() => {\n if (searchParams.has('prompt')) {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.delete('prompt');\n return next;\n }, { replace: true });\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const [compileAppId, setCompileAppId] = useState('longtail');\n const [compileName, setCompileName] = useState('');\n const [compileDescription, setCompileDescription] = useState('');\n const [compileTags, setCompileTags] = useState<string[]>([]);\n const [compileInitialized, setCompileInitialized] = useState(false);\n const [compileFeedback, setCompileFeedback] = useState('');\n\n const { data: execution } = useMcpQueryExecution(workflowId);\n const { data: resultData } = useMcpQueryResult(workflowId);\n const { data: yamlSearch } = useYamlWorkflowForSource(workflowId);\n useWorkflowDetailEvents(workflowId);\n\n const createYaml = useCreateYamlWorkflow();\n const { data: appIdData } = useYamlWorkflowAppIds();\n\n // Original execution + task envelope (for Panel 1 and prompt extraction)\n const { data: originalExecution } = useWorkflowExecution(workflowId ?? '');\n const { data: originalTask } = useTaskByWorkflowId(workflowId ?? '');\n const originalEnvelope = useMemo(() => {\n if (!originalTask?.envelope) return null;\n try { return typeof originalTask.envelope === 'string' ? JSON.parse(originalTask.envelope) : originalTask.envelope; }\n catch { return null; }\n }, [originalTask?.envelope]);\n const originalExecResult = (originalExecution?.result as any)?.data as Record<string, unknown> | undefined;\n\n const status = mapStatus(execution);\n const result = resultData?.result?.data as Record<string, unknown> | undefined;\n const discovery = (result?.discovery as Record<string, unknown>) || {};\n const events = execution?.events ?? [];\n\n // Escalation data + triage action hooks\n const { data: escalationData } = useEscalationsByWorkflowId(workflowId);\n const activeEscalation = escalationData?.escalations?.find((e: any) => e.status === 'pending');\n const resolvedEscalation = escalationData?.escalations?.find((e: any) => e.status === 'resolved');\n const displayEscalation = activeEscalation || resolvedEscalation;\n const claimMutation = useClaimEscalation();\n const resolveMutation = useResolveEscalation();\n\n // Extract triage metadata from resolved escalation\n const resolvedPayload = useMemo(() => {\n if (!resolvedEscalation?.resolver_payload) return null;\n try {\n return typeof resolvedEscalation.resolver_payload === 'string'\n ? JSON.parse(resolvedEscalation.resolver_payload)\n : resolvedEscalation.resolver_payload;\n } catch { return null; }\n }, [resolvedEscalation?.resolver_payload]);\n const triageWorkflowId = resolvedPayload?._lt?.triageWorkflowId as string | undefined;\n\n // Fetch the triage result to discover the re-run workflow ID\n const { data: triageResultData } = useWorkflowExecution(\n resolvedPayload?._lt?.triaged ? (triageWorkflowId ?? '') : '',\n );\n const triageResult = (triageResultData?.result as any)?.data as Record<string, unknown> | undefined;\n const rerunWorkflowId = triageResult?.rerunWorkflowId as string | undefined;\n\n // Detect rounds_exhausted from result data OR milestones (covers old + new runs)\n const milestones = (resultData?.result as any)?.milestones as Array<{ name: string; value: string }> | undefined;\n const isRoundsExhausted = !!(result as any)?.rounds_exhausted ||\n !!milestones?.some((m) => m.name === 'rounds_exhausted');\n\n // This run is uncompilable if it failed — triage resolving doesn't make THIS run compilable\n const isUncompilable = isRoundsExhausted || !!activeEscalation;\n\n // Extract original prompt: envelope > URL param (captured on mount) > execution events\n const originalPrompt = useMemo(() => {\n const fromEnvelope = (originalEnvelope as any)?.data?.prompt;\n if (fromEnvelope) return fromEnvelope as string;\n if (promptFromUrl.current) return promptFromUrl.current;\n for (const e of events) {\n const attrs = e.attributes as Record<string, unknown>;\n if (attrs.activity_type === 'findCompiledWorkflows' && Array.isArray(attrs.input) && typeof (attrs.input as unknown[])[0] === 'string') {\n return (attrs.input as string[])[0];\n }\n }\n return undefined;\n }, [originalEnvelope, events]);\n\n // Extract structured output from original execution\n const originalOutput = useMemo(() => {\n return originalExecResult?.result ??\n (typeof originalExecResult?.summary === 'string' ? extractJsonFromSummary(originalExecResult.summary) : null) ??\n result?.result ??\n (typeof result?.summary === 'string' ? extractJsonFromSummary(result.summary as string) : null) ??\n null;\n }, [originalExecResult, result]);\n\n const describePrompt = originalPrompt || (result?.title as string | undefined);\n const { data: describeData } = useDescribeMcpQuery({\n prompt: status === 'completed' ? describePrompt : undefined,\n resultTitle: result?.title as string | undefined,\n resultSummary: result?.summary as string | undefined,\n });\n\n const compiledYaml = yamlSearch?.workflows?.find(\n (w) => w.status === 'active' || w.status === 'deployed' || w.status === 'draft',\n );\n\n const autoStep: Step = useMemo(() => {\n if (status === 'pending') return 1;\n if (status === 'in_progress') return 2;\n if (!result) return 1;\n if (!compiledYaml) return 2;\n if (compiledYaml.status === 'draft' || compiledYaml.status === 'deployed') return 4;\n return 5;\n }, [status, result, compiledYaml]);\n\n const [manualStep, setManualStep] = useWizardStep();\n const step = (manualStep as Step | null) ?? autoStep;\n\n // Sequential unlock: each step requires the prior step to be satisfied\n // 1 (Query) — always available\n // 2 (Timeline) — available when workflow has started (not pending)\n // 3 (Profile) — available when workflow completed and not uncompilable\n // 4 (Deploy) — available when a compiled YAML exists (draft or later)\n // 5 (Test) — available when YAML is deployed or active\n // 6 (Verify) — available when YAML is active (deployed + tested)\n const maxReachable: Step = (() => {\n if (status === 'pending') return 1;\n if (status === 'in_progress' || !result) return 2;\n if (isUncompilable) return 2;\n if (!compiledYaml) return 3;\n if (compiledYaml.status === 'draft') return 4;\n if (compiledYaml.status === 'deployed') return 5;\n return 6; // active\n })() as Step;\n\n // Auto-advance from step 2 → step 3 when workflow completes\n const prevStatusRef = useRef(status);\n useEffect(() => {\n if (prevStatusRef.current === 'in_progress' && status === 'completed' && manualStep === null) {\n setManualStep(3);\n }\n prevStatusRef.current = status;\n }, [status, manualStep, setManualStep]);\n\n const stepLabels = useMemo((): string[] => {\n const labels: string[] = [...STEP_LABELS_BASE];\n if (compiledYaml?.status === 'active') labels[3] = 'Redeploy';\n return labels;\n }, [compiledYaml?.status]);\n\n // Pre-fill compile fields from LLM\n if (describeData && !compileInitialized) {\n setCompileInitialized(true);\n if (!compileDescription) setCompileDescription(describeData.description);\n if (compileTags.length === 0 && describeData.tags.length > 0) setCompileTags(describeData.tags);\n if (!compileName && describeData.tool_name) setCompileName(describeData.tool_name);\n }\n\n // Topic always derives from namespace\n const derivedSubscribes = compileAppId.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n const allAppIds = useMemo(() => appIdData?.app_ids ?? [], [appIdData?.app_ids]);\n\n const handleCompile = async () => {\n if (!workflowId || !compileName.trim() || !compileAppId.trim()) return;\n await createYaml.mutateAsync({\n workflow_id: workflowId, task_queue: 'long-tail-system', workflow_name: 'mcpQuery',\n name: compileName.trim(), description: compileDescription.trim() || undefined,\n app_id: compileAppId.trim(), subscribes: derivedSubscribes, tags: compileTags,\n compilation_feedback: compileFeedback.trim() || undefined,\n });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflowForSource'], refetchType: 'all' });\n setManualStep(4);\n };\n\n const handleRetryTriage = async () => {\n if (!activeEscalation) return;\n await claimMutation.mutateAsync({ id: activeEscalation.id, durationMinutes: 30 });\n const diagnosis = (result as any)?.diagnosis as string || activeEscalation.description || '';\n await resolveMutation.mutateAsync({\n id: activeEscalation.id,\n resolverPayload: { _lt: { needsTriage: true }, notes: diagnosis },\n });\n };\n\n // Determine the correct next step for profile panel navigation\n const profileNextStep = compiledYaml?.status === 'active' ? 5 : 4;\n\n return (\n <div className=\"flex flex-col min-h-[calc(100vh-12rem)]\">\n <PageHeader\n title=\"Compilation Wizard\"\n actions={\n <button onClick={() => navigate('/mcp/queries')} className=\"text-sm text-text-secondary hover:text-text-primary\">\n Back to list\n </button>\n }\n />\n\n {/* Status card */}\n <div className=\"bg-surface-raised border border-surface-border rounded-md px-6 py-5 mb-6\">\n <div className=\"flex items-center gap-4 mb-4\">\n <StatusBadge status={status} />\n {discovery?.method === 'compiled-workflow' && (\n <span className=\"text-xs bg-status-success/10 text-status-success px-2 py-0.5 rounded-full\">\n Deterministic ({((discovery.confidence as number) * 100).toFixed(0)}% match)\n </span>\n )}\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-y-3 gap-x-8\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Run ID</p>\n <CopyableId label=\"\" value={workflowId ?? null} href={`/workflows/executions/${workflowId}`} />\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Duration</p>\n <p className=\"text-xs text-text-primary font-mono\">\n {execution?.duration_ms != null ? `${(execution.duration_ms / 1000).toFixed(1)}s` : '\\u2014'}\n </p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Started</p>\n <p className=\"text-xs text-text-primary\">\n {execution?.start_time ? <TimeAgo date={execution.start_time} /> : '\\u2014'}\n </p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Tool Calls</p>\n <p className=\"text-xs text-text-primary\">\n {typeof result?.tool_calls_made === 'number' ? result.tool_calls_made : '\\u2014'}\n </p>\n </div>\n </div>\n </div>\n\n {/* Escalation banner */}\n <EscalationBanner\n escalation={displayEscalation}\n isRoundsExhausted={isRoundsExhausted}\n diagnosis={(result as any)?.diagnosis as string | undefined}\n onRetryTriage={activeEscalation ? handleRetryTriage : undefined}\n isRetrying={claimMutation.isPending || resolveMutation.isPending}\n rerunWorkflowId={rerunWorkflowId}\n />\n\n <WizardSteps labels={stepLabels} current={step} maxReachable={maxReachable} onStepClick={(s) => setManualStep(s as Step)} />\n\n {/* Panel content */}\n <div className=\"flex-1\">\n\n {step === 1 && (\n <OriginalQueryPanel\n status={status}\n originalEnvelope={originalEnvelope}\n originalPrompt={originalPrompt}\n originalOutput={originalOutput}\n originalDurationMs={originalExecution?.duration_ms}\n resultSummary={result?.summary as string | undefined}\n onNext={() => setManualStep(2)}\n />\n )}\n\n {step === 2 && (\n <TimelinePanel\n events={events}\n onBack={() => setManualStep(1)}\n onNext={() => setManualStep(3)}\n />\n )}\n\n {step === 3 && (\n <ProfilePanel\n compiledYaml={compiledYaml}\n originalPrompt={originalPrompt}\n compileAppId={compileAppId}\n setCompileAppId={setCompileAppId}\n compileName={compileName}\n setCompileName={setCompileName}\n compileDescription={compileDescription}\n setCompileDescription={setCompileDescription}\n compileTags={compileTags}\n setCompileTags={setCompileTags}\n describeData={describeData}\n describePrompt={describePrompt}\n allAppIds={allAppIds}\n compileFeedback={compileFeedback}\n setCompileFeedback={setCompileFeedback}\n onCompile={handleCompile}\n isCompiling={createYaml.isPending}\n compileError={createYaml.isError ? createYaml.error.message : undefined}\n isUncompilable={isUncompilable}\n onBack={() => setManualStep(2)}\n onNext={() => setManualStep(profileNextStep as Step)}\n />\n )}\n\n {step === 4 && compiledYaml && (\n <DeployPanel\n yamlId={compiledYaml.id}\n onAdvance={() => setManualStep(5)}\n onBack={() => setManualStep(3)}\n />\n )}\n\n {step === 5 && compiledYaml && (\n <TestPanel\n yamlId={compiledYaml.id}\n originalWorkflowId={workflowId}\n originalResult={result}\n originalPrompt={originalPrompt}\n onBack={() => setManualStep(4)}\n onAdvance={() => setManualStep(6)}\n />\n )}\n\n {step === 6 && compiledYaml && (\n <VerifyPanel\n originalWorkflowId={workflowId}\n originalPrompt={originalPrompt}\n workflowName={compiledYaml.name}\n onBack={() => setManualStep(5)}\n onGoToDeploy={() => setManualStep(4)}\n />\n )}\n\n </div>{/* end flex-1 panel content */}\n </div>\n );\n}\n"],"names":["WizardSteps","labels","current","maxReachable","onStepClick","jsx","label","i","isReachable","jsxs","useWizardStep","searchParams","setSearchParams","useSearchParams","stepValue","setStep","useCallback","step","prev","next","STEP_LABELS_BASE","mapStatus","exec","extractJsonFromSummary","summary","match","WizardNav","children","PanelTitle","title","subtitle","ResultSummary","text","parts","jsonBlockRe","lastIndex","p","JsonViewer","SimpleMarkdown","OriginalQueryPanel","status","originalEnvelope","originalPrompt","originalOutput","originalDurationMs","resultSummary","onNext","TimelinePanel","events","onBack","SwimlaneTimeline","SectionHeading","ExistingProfileView","compiledYaml","StatusBadge","_a","a","arr","_b","tag","Link","CreateProfileForm","compileAppId","setCompileAppId","compileName","setCompileName","compileDescription","setCompileDescription","compileTags","setCompileTags","describeData","describePrompt","allAppIds","compileFeedback","setCompileFeedback","onCompile","isCompiling","compileError","showFeedback","setShowFeedback","useState","e","id","TagInput","ProfilePanel","props","isUncompilable","DeployPanel","yamlId","onAdvance","queryClient","useQueryClient","yamlTextareaRef","useRef","feedbackText","setFeedbackText","wf","refetch","useYamlWorkflow","versionsData","useYamlWorkflowVersions","deployMutation","useDeployYamlWorkflow","activateMutation","useActivateYamlWorkflow","archiveMutation","useArchiveYamlWorkflow","deleteMutation","useDeleteYamlWorkflow","regenerateMutation","useRegenerateYamlWorkflow","updateMutation","useUpdateYamlWorkflow","yamlDraft","setYamlDraft","inputSchemaDraft","setInputSchemaDraft","outputSchemaDraft","setOutputSchemaDraft","inputFieldMetaDraft","setInputFieldMetaDraft","configEditing","setConfigEditing","versionParam","setVersionParam","isViewingHistory","versionSnapshot","useYamlWorkflowVersion","resolvedYaml","resolvedInputSchema","resolvedOutputSchema","useEffect","versionSearchParams","useMemo","sp","setVersionSearchParams","v","canEditConfig","handleSaveConfig","inputSchema","outputSchema","handleCancelEdit","handleDeploy","handleRegenerate","isPending","MessageSquarePlus","Pencil","ConfigurationSection","LifecycleSidebar","VersionHistory","jobLabel","job","date","time","day","TestPanel","originalWorkflowId","originalResult","invokeMutation","useInvokeYamlWorkflow","runs","useMcpRuns","selectedRunId","setSelectedRunId","selectedRunExecution","useMcpRunExecution","showInvokeModal","setShowInvokeModal","invokeJsonMode","setInvokeJsonMode","invokeFields","setInvokeFields","invokeJson","setInvokeJson","activeJobId","setActiveJobId","activitySteps","jobComplete","useYamlActivityEvents","originalExecution","useWorkflowExecution","originalTask","useTaskByWorkflowId","originalExecResult","resolvedPrompt","jobs","skeleton","buildSkeleton","handleInvoke","data","result","completedJobId","timer","deterministicOutput","deterministicInput","execResult","jsonMatch","_c","triggerEvent","Modal","LiveActivityTimeline","Fragment","key","value","TOOL_SOURCE_COLORS","steps","manifest","isComplete","workerActivities","totalSteps","merged","live","s","source","colors","idx","isLast","STEPS","derivePhase","childStart","childId","isDeterministic","activityTypes","RouterProgressTracker","verifyRunId","phase","isDone","stepNum","isActive","VerifyPanel","workflowName","onGoToDeploy","submitQuery","useSubmitMcpQueryRouted","testPrompt","setTestPrompt","promptInitialized","setPromptInitialized","setVerifyRunId","verifyExecution","useMcpQueryExecution","verifyResult","useMcpQueryResult","verifyStatus","verifyData","verifyDiscovery","usedDeterministic","isRunning","handleSubmit","res","EscalationBanner","escalation","isRoundsExhausted","diagnosis","onRetryTriage","isRetrying","rerunWorkflowId","navigate","useNavigate","isResolved","resolverPayload","wasTriaged","escalationPayload","originalDiagnosis","McpQueryDetailPage","workflowId","useParams","promptFromUrl","compileInitialized","setCompileInitialized","execution","resultData","yamlSearch","useYamlWorkflowForSource","useWorkflowDetailEvents","createYaml","useCreateYamlWorkflow","appIdData","useYamlWorkflowAppIds","discovery","escalationData","useEscalationsByWorkflowId","activeEscalation","resolvedEscalation","_d","displayEscalation","claimMutation","useClaimEscalation","resolveMutation","useResolveEscalation","resolvedPayload","triageWorkflowId","_e","triageResultData","_f","triageResult","_g","milestones","_h","m","fromEnvelope","attrs","useDescribeMcpQuery","_i","w","autoStep","manualStep","setManualStep","prevStatusRef","stepLabels","derivedSubscribes","handleCompile","handleRetryTriage","profileNextStep","PageHeader","CopyableId","TimeAgo"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{a as h,j as e}from"./vendor-query-B2UbickB.js";import{P as v}from"./PageHeader-CpWFly5S.js";import{D as S}from"./DataTable-BDn1WBHS.js";import{F as P,b as C}from"./FilterBar-Ck4K4rzu.js";import{S as D}from"./StickyPagination-F9FZsRy9.js";import{T as b}from"./TimestampCell-DoWMKg6w.js";import{W as _}from"./WorkflowPill-CCDSVaQj.js";import{E as M}from"./EmptyState-2CmV-IaS.js";import{u as R}from"./useFilterParams-BaXUAkYK.js";import{a as F}from"./useNatsEvents-Xr43X1fG.js";import{u as E,a as W,b as L}from"./mcp-query-DoAyPbjC.js";import{e as T,Z as z,i as $,j as Q,k as K}from"./vendor-icons-ZTAKVwGc.js";import{b as U}from"./vendor-react-Cw8Gy8NJ.js";import"./TimeAgo-UPG6DoH8.js";import"./format-gXZXQ-HJ.js";import"./index-D8VH6K8B.js";function q(t){return t.status==="completed"||Number(t.status)===0?"completed":t.is_live?"in_progress":"failed"}const A=[{key:"entity",label:"Workflow Type",className:"whitespace-nowrap",render:t=>{const r=q(t),n=r==="completed"?"fill-status-success text-status-success":r==="in_progress"?"fill-status-active text-status-active animate-pulse":"fill-status-error text-status-error";return e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(Q,{className:`w-2.5 h-2.5 shrink-0 ${n}`}),e.jsx(_,{type:t.entity||"unknown"})]})}},{key:"workflow_id",label:"Workflow ID",render:t=>e.jsx("span",{className:"text-xs font-mono text-text-primary truncate block",children:t.workflow_id})},{key:"created_at",label:"Created",className:"w-36",sortable:!0,render:t=>e.jsx(b,{date:t.created_at})},{key:"updated_at",label:"Updated",className:"w-36",render:t=>e.jsx(b,{date:t.updated_at})},{key:"actions",label:"",className:"w-10",render:()=>e.jsx("span",{className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",children:e.jsx(K,{className:"w-4 h-4",strokeWidth:1.5})})}];function oe(){const t=U(),[r,n]=h.useState(""),[l,g]=h.useState(!0),y=E(),j=W(),o=l?y:j,{filters:c,setFilter:w,pagination:a,sort:N,setSort:k}=R({filters:{search:"",status:""},pageSize:20}),{data:i,isLoading:m}=L({limit:a.pageSize,offset:a.offset,search:c.search,status:c.status});F();const p=async s=>{s.preventDefault();const d=r.trim();if(!d)return;const f=await o.mutateAsync({prompt:d});n(""),t(l?`/mcp/queries/${f.workflow_id}?prompt=${encodeURIComponent(d)}`:`/workflows/executions/${f.workflow_id}`)},x=(i==null?void 0:i.jobs)??[],u=(i==null?void 0:i.total)??0;return e.jsxs(e.Fragment,{children:[e.jsx(v,{title:"Pipeline Designer"}),e.jsx("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Describe a task and MCP discovers the right tools, executes the workflow, and compiles the result into a reusable pipeline."}),e.jsxs("div",{className:"grid grid-cols-3 gap-4 mb-8",children:[e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50",children:[e.jsx(T,{className:"w-4 h-4 mt-0.5 text-accent shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-text-primary",children:"1. Describe"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5 leading-relaxed",children:"Write a specific prompt. Mention tools, URLs, credentials, and expected outputs."})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50",children:[e.jsx(z,{className:"w-4 h-4 mt-0.5 text-status-warning shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-text-primary",children:"2. Discover"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5 leading-relaxed",children:"MCP selects servers, calls tools, and chains results. You review the execution."})]})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50",children:[e.jsx($,{className:"w-4 h-4 mt-0.5 text-status-success shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-text-primary",children:"3. Compile"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5 leading-relaxed",children:"Successful runs compile into deterministic pipelines. No LLM needed at runtime."})]})]})]}),e.jsxs("form",{onSubmit:p,className:"mb-8",children:[e.jsxs("div",{className:"rounded-lg border border-surface-border bg-surface-raised overflow-hidden",children:[e.jsx("textarea",{value:r,onChange:s=>n(s.target.value),placeholder:"Describe what you want to accomplish. Be specific about which tools to use, what data to capture, and how results should be structured...",className:"w-full min-h-[100px] max-h-[200px] px-4 py-3 bg-transparent text-sm text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none border-none",onKeyDown:s=>{s.key==="Enter"&&(s.metaKey||s.ctrlKey)&&p(s)}}),e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-t border-surface-border bg-surface-sunken/30",children:[e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer select-none group",children:[e.jsx("input",{type:"checkbox",checked:l,onChange:s=>g(s.target.checked),className:"w-3.5 h-3.5 rounded border-border text-accent-primary focus:ring-accent-primary/50 bg-surface-sunken cursor-pointer"}),e.jsx("span",{className:"text-[10px] text-text-secondary group-hover:text-text-primary transition-colors",children:"Force discovery"}),e.jsx("span",{className:"text-[10px] text-text-tertiary",children:l?"— skip compiled pipelines":"— prefer compiled pipelines"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[10px] text-text-tertiary",children:"Cmd+Enter"}),e.jsx("button",{type:"submit",disabled:!r.trim()||o.isPending,className:"px-4 py-1.5 bg-accent text-white text-xs font-medium rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:o.isPending?"Starting...":"Design Pipeline"})]})]})]}),o.isError&&e.jsx("p",{className:"mt-2 text-sm text-status-error",children:o.error.message})]}),e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Recent Runs"}),e.jsx(P,{children:e.jsx(C,{label:"Status",value:c.status,onChange:s=>w("status",s),options:[{value:"completed",label:"Completed"},{value:"running",label:"Running"},{value:"failed",label:"Failed"}]})})]}),e.jsx(S,{columns:A,data:x,keyFn:s=>s.workflow_id,onRowClick:s=>t(`/mcp/queries/${s.workflow_id}`),isLoading:m,emptyMessage:"",sort:N,onSort:k}),!m&&x.length===0&&e.jsx(M,{title:"No pipeline runs yet",description:"Describe a task above to start designing"}),e.jsx(D,{page:a.page,pageSize:a.pageSize,total:u,totalPages:a.totalPages(u),onPageChange:a.setPage})]})}export{oe as McpQueryPage};
2
+ //# sourceMappingURL=McpQueryPage-DRRhw4nN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpQueryPage-DRRhw4nN.js","sources":["../../src/pages/mcp/McpQueryPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ArrowRight, Wand2, Zap, Layers, Circle } from 'lucide-react';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useWorkflowListEvents } from '../../hooks/useNatsEvents';\nimport { useMcpQueryJobs, useSubmitMcpQuery, useSubmitMcpQueryRouted } from '../../api/mcp-query';\nimport type { LTJob } from '../../api/types';\n\nfunction mapStatus(job: LTJob): string {\n if (job.status === 'completed') return 'completed';\n if (Number(job.status) === 0) return 'completed';\n if (job.is_live) return 'in_progress';\n return 'failed';\n}\n\n\nconst columns: Column<LTJob>[] = [\n {\n key: 'entity',\n label: 'Workflow Type',\n className: 'whitespace-nowrap',\n render: (row) => {\n const s = mapStatus(row);\n const dotColor = s === 'completed' ? 'fill-status-success text-status-success'\n : s === 'in_progress' ? 'fill-status-active text-status-active animate-pulse'\n : 'fill-status-error text-status-error';\n return (\n <span className=\"inline-flex items-center gap-2\">\n <Circle className={`w-2.5 h-2.5 shrink-0 ${dotColor}`} />\n <WorkflowPill type={(row as any).entity || 'unknown'} />\n </span>\n );\n },\n },\n {\n key: 'workflow_id',\n label: 'Workflow ID',\n render: (row) => (\n <span className=\"text-xs font-mono text-text-primary truncate block\">\n {row.workflow_id}\n </span>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n className: 'w-36',\n sortable: true,\n render: (row) => <TimestampCell date={row.created_at} />,\n },\n {\n key: 'updated_at',\n label: 'Updated',\n className: 'w-36',\n render: (row) => <TimestampCell date={row.updated_at} />,\n },\n {\n key: 'actions',\n label: '',\n className: 'w-10',\n render: () => (\n <span className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\">\n <ArrowRight className=\"w-4 h-4\" strokeWidth={1.5} />\n </span>\n ),\n },\n];\n\nexport function McpQueryPage() {\n const navigate = useNavigate();\n const [promptText, setPromptText] = useState('');\n const [direct, setDirect] = useState(true);\n const submitDirect = useSubmitMcpQuery();\n const submitRouted = useSubmitMcpQueryRouted();\n const activeMutation = direct ? submitDirect : submitRouted;\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { search: '', status: '' },\n pageSize: 20,\n });\n\n const { data, isLoading } = useMcpQueryJobs({\n limit: pagination.pageSize,\n offset: pagination.offset,\n search: filters.search,\n status: filters.status,\n });\n\n useWorkflowListEvents();\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const prompt = promptText.trim();\n if (!prompt) return;\n\n const result = await activeMutation.mutateAsync({ prompt });\n setPromptText('');\n if (direct) {\n navigate(`/mcp/queries/${result.workflow_id}?prompt=${encodeURIComponent(prompt)}`);\n } else {\n navigate(`/workflows/executions/${result.workflow_id}`);\n }\n };\n\n const jobs = data?.jobs ?? [];\n const total = data?.total ?? 0;\n\n return (\n <>\n <PageHeader title=\"Pipeline Designer\" />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Describe a task and MCP discovers the right tools, executes the workflow, and compiles the result into a reusable pipeline.\n </p>\n\n {/* Design lifecycle steps */}\n <div className=\"grid grid-cols-3 gap-4 mb-8\">\n <div className=\"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50\">\n <Wand2 className=\"w-4 h-4 mt-0.5 text-accent shrink-0\" />\n <div>\n <p className=\"text-xs font-medium text-text-primary\">1. Describe</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5 leading-relaxed\">Write a specific prompt. Mention tools, URLs, credentials, and expected outputs.</p>\n </div>\n </div>\n <div className=\"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50\">\n <Zap className=\"w-4 h-4 mt-0.5 text-status-warning shrink-0\" />\n <div>\n <p className=\"text-xs font-medium text-text-primary\">2. Discover</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5 leading-relaxed\">MCP selects servers, calls tools, and chains results. You review the execution.</p>\n </div>\n </div>\n <div className=\"flex items-start gap-3 p-3 rounded-lg border border-surface-border bg-surface-raised/50\">\n <Layers className=\"w-4 h-4 mt-0.5 text-status-success shrink-0\" />\n <div>\n <p className=\"text-xs font-medium text-text-primary\">3. Compile</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5 leading-relaxed\">Successful runs compile into deterministic pipelines. No LLM needed at runtime.</p>\n </div>\n </div>\n </div>\n\n {/* Prompt input */}\n <form onSubmit={handleSubmit} className=\"mb-8\">\n <div className=\"rounded-lg border border-surface-border bg-surface-raised overflow-hidden\">\n <textarea\n value={promptText}\n onChange={(e) => setPromptText(e.target.value)}\n placeholder=\"Describe what you want to accomplish. Be specific about which tools to use, what data to capture, and how results should be structured...\"\n className=\"w-full min-h-[100px] max-h-[200px] px-4 py-3 bg-transparent text-sm text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none border-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n handleSubmit(e);\n }\n }}\n />\n <div className=\"flex items-center justify-between px-4 py-2 border-t border-surface-border bg-surface-sunken/30\">\n <label className=\"flex items-center gap-2 cursor-pointer select-none group\">\n <input\n type=\"checkbox\"\n checked={direct}\n onChange={(e) => setDirect(e.target.checked)}\n className=\"w-3.5 h-3.5 rounded border-border text-accent-primary focus:ring-accent-primary/50 bg-surface-sunken cursor-pointer\"\n />\n <span className=\"text-[10px] text-text-secondary group-hover:text-text-primary transition-colors\">\n Force discovery\n </span>\n <span className=\"text-[10px] text-text-tertiary\">\n {direct ? '— skip compiled pipelines' : '— prefer compiled pipelines'}\n </span>\n </label>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] text-text-tertiary\">Cmd+Enter</span>\n <button\n type=\"submit\"\n disabled={!promptText.trim() || activeMutation.isPending}\n className=\"px-4 py-1.5 bg-accent text-white text-xs font-medium rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n {activeMutation.isPending ? 'Starting...' : 'Design Pipeline'}\n </button>\n </div>\n </div>\n </div>\n {activeMutation.isError && (\n <p className=\"mt-2 text-sm text-status-error\">{activeMutation.error.message}</p>\n )}\n </form>\n\n {/* Recent runs */}\n <div className=\"flex items-center justify-between mb-3\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Recent Runs</p>\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'completed', label: 'Completed' },\n { value: 'running', label: 'Running' },\n { value: 'failed', label: 'Failed' },\n ]}\n />\n </FilterBar>\n </div>\n\n <DataTable\n columns={columns}\n data={jobs}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/mcp/queries/${row.workflow_id}`)}\n isLoading={isLoading}\n emptyMessage=\"\"\n sort={sort}\n onSort={setSort}\n />\n\n {!isLoading && jobs.length === 0 && (\n <EmptyState title=\"No pipeline runs yet\" description=\"Describe a task above to start designing\" />\n )}\n\n <StickyPagination\n page={pagination.page}\n pageSize={pagination.pageSize}\n total={total}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n />\n </>\n );\n}\n"],"names":["mapStatus","job","columns","row","s","dotColor","jsxs","jsx","Circle","WorkflowPill","TimestampCell","ArrowRight","McpQueryPage","navigate","useNavigate","promptText","setPromptText","useState","direct","setDirect","submitDirect","useSubmitMcpQuery","submitRouted","useSubmitMcpQueryRouted","activeMutation","filters","setFilter","pagination","sort","setSort","useFilterParams","data","isLoading","useMcpQueryJobs","useWorkflowListEvents","handleSubmit","e","prompt","result","jobs","total","Fragment","PageHeader","Wand2","Zap","Layers","FilterBar","FilterSelect","v","DataTable","EmptyState","StickyPagination"],"mappings":"8uBAgBA,SAASA,EAAUC,EAAoB,CAErC,OADIA,EAAI,SAAW,aACf,OAAOA,EAAI,MAAM,IAAM,EAAU,YACjCA,EAAI,QAAgB,cACjB,QACT,CAGA,MAAMC,EAA2B,CAC/B,CACE,IAAK,SACL,MAAO,gBACP,UAAW,oBACX,OAASC,GAAQ,CACf,MAAMC,EAAIJ,EAAUG,CAAG,EACjBE,EAAWD,IAAM,YAAc,0CACjCA,IAAM,cAAgB,sDACtB,sCACJ,OACEE,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAO,UAAW,wBAAwBH,CAAQ,GAAI,EACvDE,EAAAA,IAACE,EAAA,CAAa,KAAON,EAAY,QAAU,SAAA,CAAW,CAAA,EACxD,CAEJ,CAAA,EAEF,CACE,IAAK,cACL,MAAO,cACP,OAASA,GACPI,EAAAA,IAAC,QAAK,UAAU,qDACb,WAAI,WAAA,CACP,CAAA,EAGJ,CACE,IAAK,aACL,MAAO,UACP,UAAW,OACX,SAAU,GACV,OAASJ,SAASO,EAAA,CAAc,KAAMP,EAAI,UAAA,CAAY,CAAA,EAExD,CACE,IAAK,aACL,MAAO,UACP,UAAW,OACX,OAASA,SAASO,EAAA,CAAc,KAAMP,EAAI,UAAA,CAAY,CAAA,EAExD,CACE,IAAK,UACL,MAAO,GACP,UAAW,OACX,OAAQ,IACNI,EAAAA,IAAC,OAAA,CAAK,UAAU,gGACd,SAAAA,EAAAA,IAACI,EAAA,CAAW,UAAU,UAAU,YAAa,GAAA,CAAK,CAAA,CACpD,CAAA,CAGN,EAEO,SAASC,IAAe,CAC7B,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAE,EACzC,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAI,EACnCG,EAAeC,EAAA,EACfC,EAAeC,EAAA,EACfC,EAAiBN,EAASE,EAAeE,EAEzC,CAAE,QAAAG,EAAS,UAAAC,EAAW,WAAAC,EAAY,KAAAC,EAAM,QAAAC,CAAA,EAAYC,EAAgB,CACxE,QAAS,CAAE,OAAQ,GAAI,OAAQ,EAAA,EAC/B,SAAU,EAAA,CACX,EAEK,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAgB,CAC1C,MAAON,EAAW,SAClB,OAAQA,EAAW,OACnB,OAAQF,EAAQ,OAChB,OAAQA,EAAQ,MAAA,CACjB,EAEDS,EAAA,EAEA,MAAMC,EAAe,MAAOC,GAAuB,CACjDA,EAAE,eAAA,EACF,MAAMC,EAAStB,EAAW,KAAA,EAC1B,GAAI,CAACsB,EAAQ,OAEb,MAAMC,EAAS,MAAMd,EAAe,YAAY,CAAE,OAAAa,EAAQ,EAC1DrB,EAAc,EAAE,EAEdH,EADEK,EACO,gBAAgBoB,EAAO,WAAW,WAAW,mBAAmBD,CAAM,CAAC,GAEvE,yBAAyBC,EAAO,WAAW,EAF8B,CAItF,EAEMC,GAAOR,GAAA,YAAAA,EAAM,OAAQ,CAAA,EACrBS,GAAQT,GAAA,YAAAA,EAAM,QAAS,EAE7B,OACEzB,EAAAA,KAAAmC,WAAA,CACE,SAAA,CAAAlC,EAAAA,IAACmC,EAAA,CAAW,MAAM,mBAAA,CAAoB,EAEtCnC,EAAAA,IAAC,IAAA,CAAE,UAAU,6DAA6D,SAAA,8HAE1E,EAGAD,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0FACb,SAAA,CAAAC,EAAAA,IAACoC,EAAA,CAAM,UAAU,qCAAA,CAAsC,SACtD,MAAA,CACC,SAAA,CAAApC,EAAAA,IAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,cAAW,EAChEA,EAAAA,IAAC,IAAA,CAAE,UAAU,wDAAwD,SAAA,kFAAA,CAAgF,CAAA,CAAA,CACvJ,CAAA,EACF,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0FACb,SAAA,CAAAC,EAAAA,IAACqC,EAAA,CAAI,UAAU,6CAAA,CAA8C,SAC5D,MAAA,CACC,SAAA,CAAArC,EAAAA,IAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,cAAW,EAChEA,EAAAA,IAAC,IAAA,CAAE,UAAU,wDAAwD,SAAA,iFAAA,CAA+E,CAAA,CAAA,CACtJ,CAAA,EACF,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0FACb,SAAA,CAAAC,EAAAA,IAACsC,EAAA,CAAO,UAAU,6CAAA,CAA8C,SAC/D,MAAA,CACC,SAAA,CAAAtC,EAAAA,IAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,aAAU,EAC/DA,EAAAA,IAAC,IAAA,CAAE,UAAU,wDAAwD,SAAA,iFAAA,CAA+E,CAAA,CAAA,CACtJ,CAAA,CAAA,CACF,CAAA,EACF,EAGAD,EAAAA,KAAC,OAAA,CAAK,SAAU6B,EAAc,UAAU,OACtC,SAAA,CAAA7B,EAAAA,KAAC,MAAA,CAAI,UAAU,4EACb,SAAA,CAAAC,EAAAA,IAAC,WAAA,CACC,MAAOQ,EACP,SAAWqB,GAAMpB,EAAcoB,EAAE,OAAO,KAAK,EAC7C,YAAY,4IACZ,UAAU,+JACV,UAAYA,GAAM,CACZA,EAAE,MAAQ,UAAYA,EAAE,SAAWA,EAAE,UACvCD,EAAaC,CAAC,CAElB,CAAA,CAAA,EAEF9B,EAAAA,KAAC,MAAA,CAAI,UAAU,kGACb,SAAA,CAAAA,EAAAA,KAAC,QAAA,CAAM,UAAU,2DACf,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,WACL,QAASW,EACT,SAAWkB,GAAMjB,EAAUiB,EAAE,OAAO,OAAO,EAC3C,UAAU,qHAAA,CAAA,EAEZ7B,EAAAA,IAAC,OAAA,CAAK,UAAU,kFAAkF,SAAA,kBAElG,QACC,OAAA,CAAK,UAAU,iCACb,SAAAW,EAAS,4BAA8B,6BAAA,CAC1C,CAAA,EACF,EACAZ,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,iCAAiC,SAAA,YAAS,EAC1DA,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,SAAU,CAACQ,EAAW,KAAA,GAAUS,EAAe,UAC/C,UAAU,uJAET,SAAAA,EAAe,UAAY,cAAgB,iBAAA,CAAA,CAC9C,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EACCA,EAAe,SACdjB,MAAC,IAAA,CAAE,UAAU,iCAAkC,SAAAiB,EAAe,MAAM,OAAA,CAAQ,CAAA,EAEhF,EAGAlB,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,yEAAyE,SAAA,cAAW,QAChGuC,EAAA,CACC,SAAAvC,EAAAA,IAACwC,EAAA,CACC,MAAM,SACN,MAAOtB,EAAQ,OACf,SAAWuB,GAAMtB,EAAU,SAAUsB,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,SAAU,MAAO,QAAA,CAAS,CACrC,CAAA,CACF,CACF,CAAA,EACF,EAEAzC,EAAAA,IAAC0C,EAAA,CACC,QAAA/C,EACA,KAAMqC,EACN,MAAQpC,GAAQA,EAAI,YACpB,WAAaA,GAAQU,EAAS,gBAAgBV,EAAI,WAAW,EAAE,EAC/D,UAAA6B,EACA,aAAa,GACb,KAAAJ,EACA,OAAQC,CAAA,CAAA,EAGT,CAACG,GAAaO,EAAK,SAAW,SAC5BW,EAAA,CAAW,MAAM,uBAAuB,YAAY,0CAAA,CAA2C,EAGlG3C,EAAAA,IAAC4C,EAAA,CACC,KAAMxB,EAAW,KACjB,SAAUA,EAAW,SACrB,MAAAa,EACA,WAAYb,EAAW,WAAWa,CAAK,EACvC,aAAcb,EAAW,OAAA,CAAA,CAC3B,EACF,CAEJ"}