@hotmeshio/long-tail 0.1.14 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/README.md +15 -0
  2. package/build/api/escalations/bulk.d.ts +78 -0
  3. package/build/api/escalations/bulk.js +279 -0
  4. package/build/api/escalations/claim.d.ts +30 -0
  5. package/build/api/escalations/claim.js +121 -0
  6. package/build/api/escalations/create.d.ts +29 -0
  7. package/build/api/escalations/create.js +101 -0
  8. package/build/api/escalations/helpers.d.ts +10 -0
  9. package/build/api/escalations/helpers.js +80 -0
  10. package/build/api/escalations/index.d.ts +6 -0
  11. package/build/api/escalations/index.js +26 -0
  12. package/build/api/escalations/list.d.ts +75 -0
  13. package/build/api/escalations/list.js +170 -0
  14. package/build/api/escalations/resolve.d.ts +18 -0
  15. package/build/api/escalations/resolve.js +243 -0
  16. package/build/api/escalations/single.d.ts +37 -0
  17. package/build/api/escalations/single.js +123 -0
  18. package/build/api/files.d.ts +3 -0
  19. package/build/api/files.js +18 -1
  20. package/build/api/knowledge.d.ts +36 -0
  21. package/build/api/knowledge.js +112 -0
  22. package/build/api/mcp/index.d.ts +2 -0
  23. package/build/api/mcp/index.js +16 -0
  24. package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
  25. package/build/api/{mcp.js → mcp/servers.js} +4 -65
  26. package/build/api/mcp/tools.d.ts +33 -0
  27. package/build/api/mcp/tools.js +64 -0
  28. package/build/api/settings.js +9 -1
  29. package/build/api/workflows/config.d.ts +64 -0
  30. package/build/api/workflows/config.js +142 -0
  31. package/build/api/workflows/discovery.d.ts +29 -0
  32. package/build/api/workflows/discovery.js +153 -0
  33. package/build/api/workflows/index.d.ts +3 -0
  34. package/build/api/workflows/index.js +18 -0
  35. package/build/api/workflows/invocation.d.ts +67 -0
  36. package/build/api/workflows/invocation.js +188 -0
  37. package/build/api/yaml-workflows/cron.d.ts +39 -0
  38. package/build/api/yaml-workflows/cron.js +127 -0
  39. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
  40. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +77 -378
  41. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  42. package/build/api/yaml-workflows/deploy.js +223 -0
  43. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  44. package/build/api/yaml-workflows/helpers.js +8 -0
  45. package/build/api/yaml-workflows/index.d.ts +4 -0
  46. package/build/api/yaml-workflows/index.js +27 -0
  47. package/build/api/yaml-workflows/versions.d.ts +43 -0
  48. package/build/api/yaml-workflows/versions.js +124 -0
  49. package/build/bin/ltc.d.ts +2 -0
  50. package/build/bin/ltc.js +220 -0
  51. package/build/examples/seed-data.d.ts +55 -0
  52. package/build/examples/seed-data.js +161 -0
  53. package/build/examples/seed.js +7 -164
  54. package/build/lib/cli/auth.d.ts +23 -0
  55. package/build/lib/cli/auth.js +167 -0
  56. package/build/lib/cli/client.d.ts +6 -0
  57. package/build/lib/cli/client.js +31 -0
  58. package/build/lib/cli/commands/escalations.d.ts +19 -0
  59. package/build/lib/cli/commands/escalations.js +69 -0
  60. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  61. package/build/lib/cli/commands/knowledge.js +87 -0
  62. package/build/lib/cli/commands/mcp.d.ts +8 -0
  63. package/build/lib/cli/commands/mcp.js +33 -0
  64. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  65. package/build/lib/cli/commands/pipelines.js +67 -0
  66. package/build/lib/cli/commands/status.d.ts +1 -0
  67. package/build/lib/cli/commands/status.js +28 -0
  68. package/build/lib/cli/commands/users.d.ts +7 -0
  69. package/build/lib/cli/commands/users.js +25 -0
  70. package/build/lib/cli/commands/workflows.d.ts +16 -0
  71. package/build/lib/cli/commands/workflows.js +104 -0
  72. package/build/lib/cli/compile.d.ts +2 -0
  73. package/build/lib/cli/compile.js +165 -0
  74. package/build/lib/cli/format.d.ts +23 -0
  75. package/build/lib/cli/format.js +94 -0
  76. package/build/lib/cli/init.d.ts +1 -0
  77. package/build/lib/cli/init.js +61 -0
  78. package/build/lib/cli/output.d.ts +27 -0
  79. package/build/lib/cli/output.js +126 -0
  80. package/build/lib/cli/scanner.d.ts +10 -0
  81. package/build/lib/cli/scanner.js +164 -0
  82. package/build/lib/cli/types.d.ts +16 -0
  83. package/build/lib/cli/types.js +2 -0
  84. package/build/lib/logger/index.d.ts +0 -9
  85. package/build/lib/logger/index.js +9 -4
  86. package/build/lib/storage/index.js +2 -2
  87. package/build/routes/file-browser.js +14 -0
  88. package/build/routes/index.js +2 -0
  89. package/build/routes/knowledge.d.ts +2 -0
  90. package/build/routes/knowledge.js +141 -0
  91. package/build/routes/yaml-workflows/crud.js +9 -0
  92. package/build/sdk/index.d.ts +17 -0
  93. package/build/sdk/index.js +19 -0
  94. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  95. package/build/services/mcp/client/connection-dispatch.js +78 -0
  96. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  97. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  98. package/build/services/mcp/client/connection-test.d.ts +10 -0
  99. package/build/services/mcp/client/connection-test.js +49 -0
  100. package/build/services/mcp/client/connection.d.ts +3 -68
  101. package/build/services/mcp/client/connection.js +15 -393
  102. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  103. package/build/services/mcp/server-lifecycle.js +49 -0
  104. package/build/services/mcp/server-tools.d.ts +13 -0
  105. package/build/services/mcp/server-tools.js +287 -0
  106. package/build/services/mcp/server.d.ts +2 -26
  107. package/build/services/mcp/server.js +7 -315
  108. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  109. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  110. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  111. package/build/services/yaml-workflow/db-versions.js +76 -0
  112. package/build/services/yaml-workflow/db.d.ts +3 -13
  113. package/build/services/yaml-workflow/db.js +15 -71
  114. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  115. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  116. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  117. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  118. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  119. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  120. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  121. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  122. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  123. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  124. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  125. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  126. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  127. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  128. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  129. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  130. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  131. package/build/start/workers.js +6 -5
  132. package/build/system/activities/file-storage.d.ts +4 -0
  133. package/build/system/activities/file-storage.js +7 -1
  134. package/build/system/activities/knowledge.d.ts +23 -0
  135. package/build/system/activities/knowledge.js +50 -10
  136. package/build/system/activities/sql.d.ts +3 -0
  137. package/build/system/activities/sql.js +25 -1
  138. package/build/system/mcp-servers/file-storage.js +3 -1
  139. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  140. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  141. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  142. package/build/system/mcp-servers/human-queue.js +9 -51
  143. package/build/system/mcp-servers/knowledge.js +43 -9
  144. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  145. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  146. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  147. package/build/system/workflows/mcp-triage/index.js +17 -75
  148. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
  149. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
  150. package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
  151. package/build/tsconfig.tsbuildinfo +1 -1
  152. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-NLryl1_B.js} +2 -2
  153. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  154. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  155. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  156. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DWhn0tr1.js} +2 -2
  157. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  158. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  159. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  160. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  161. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  162. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-DXkaAOYk.js} +2 -2
  163. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  164. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-B361BOfU.js} +2 -2
  165. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  166. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  167. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  168. package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-DXSUbA26.js} +2 -2
  169. package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-DXSUbA26.js.map} +1 -1
  170. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-CQGqkXP_.js} +2 -2
  171. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  172. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-Dep92Wkg.js} +2 -2
  173. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  174. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  175. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  176. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-BMJAPkMi.js} +2 -2
  177. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  178. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-DbVbCzH2.js} +2 -2
  179. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  180. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-0XNuXj0M.js} +2 -2
  181. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  182. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-CeYnCzBN.js} +2 -2
  183. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  184. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  185. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  186. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-CfUcdzaj.js} +2 -2
  187. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  188. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-CZtodW_Z.js} +2 -2
  189. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-CZtodW_Z.js.map} +1 -1
  190. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-Dzgq7HGt.js} +2 -2
  191. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-Dzgq7HGt.js.map} +1 -1
  192. package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-yyhUeKoA.js} +2 -2
  193. package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-yyhUeKoA.js.map} +1 -1
  194. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-Ceh7OQtZ.js} +2 -2
  195. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  196. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-CZ9a8cpr.js} +2 -2
  197. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  198. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  199. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  200. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-BrPikMFy.js} +2 -2
  201. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  202. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  203. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  204. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  205. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  206. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-DxbJMfJu.js} +2 -2
  207. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  208. package/dashboard/dist/assets/RolesPage-CYHRo21-.js +2 -0
  209. package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  210. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-DurFwIwe.js} +2 -2
  211. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-DurFwIwe.js.map} +1 -1
  212. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  213. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  214. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-CKplpK3w.js} +2 -2
  215. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-CKplpK3w.js.map} +1 -1
  216. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-Dm0V1dNN.js} +2 -2
  217. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  218. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-Dicx0WTZ.js} +2 -2
  219. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  220. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-B2jYvU3-.js} +2 -2
  221. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  222. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  223. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  224. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-CypDZ6Kl.js} +2 -2
  225. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  226. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DooDNJGT.js} +2 -2
  227. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  228. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  229. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  230. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-D7CdkAeg.js} +2 -2
  231. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  232. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-B5LXB2aj.js} +2 -2
  233. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  234. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Crb9b0Gw.js} +2 -2
  235. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  236. package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-OPg-nkRa.js} +2 -2
  237. package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-OPg-nkRa.js.map} +1 -1
  238. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  239. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  240. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-CCV4MMj7.js} +2 -2
  241. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-CCV4MMj7.js.map} +1 -1
  242. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  243. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  244. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  245. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  246. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  247. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  248. package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-Dqos20NE.js} +2 -2
  249. package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-Dqos20NE.js.map} +1 -1
  250. package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-A0CsbvNV.js} +2 -2
  251. package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-A0CsbvNV.js.map} +1 -1
  252. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-BpBJN6k4.js} +2 -2
  253. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  254. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CmznCuAx.js} +2 -2
  255. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CmznCuAx.js.map} +1 -1
  256. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  257. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  258. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  259. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  260. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  261. package/dashboard/dist/assets/{index-DX6zxr6t.js → index-C8-UaN4N.js} +2 -2
  262. package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-C8-UaN4N.js.map} +1 -1
  263. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  264. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  265. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  266. package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-CjxHCVxl.js.map} +1 -1
  267. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  268. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  269. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  270. package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-DZHNte4o.js.map} +1 -1
  271. package/dashboard/dist/assets/{index-DNytWfSZ.js → index-VnYkWW8r.js} +2 -2
  272. package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-VnYkWW8r.js.map} +1 -1
  273. package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-XGOmZ117.js} +2 -2
  274. package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-XGOmZ117.js.map} +1 -1
  275. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  276. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  277. package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-puKKZ5l8.js} +71 -71
  278. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  279. package/dashboard/dist/assets/{index-BmVCyB6C.js → index-t5frSddy.js} +2 -2
  280. package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-t5frSddy.js.map} +1 -1
  281. package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-DrWymhSu.js} +2 -2
  282. package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-DrWymhSu.js.map} +1 -1
  283. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-BhUxVEMS.js} +2 -2
  284. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-BhUxVEMS.js.map} +1 -1
  285. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-DUfz4mLd.js} +2 -2
  286. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-DUfz4mLd.js.map} +1 -1
  287. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-Cm6AY5sh.js} +2 -2
  288. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  289. package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-2v1Kc7BJ.js} +2 -2
  290. package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  291. package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-DTQNp6tH.js} +2 -2
  292. package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-DTQNp6tH.js.map} +1 -1
  293. package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-CS1rgG1s.js} +2 -2
  294. package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-CS1rgG1s.js.map} +1 -1
  295. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  296. package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  297. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  298. package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-BeR-nVWQ.js.map} +1 -1
  299. package/dashboard/dist/assets/{users-CxIMy_xw.js → users-DYsdQ7Md.js} +2 -2
  300. package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-DYsdQ7Md.js.map} +1 -1
  301. package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
  302. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  303. package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-2QAXh3UD.js} +2 -2
  304. package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-2QAXh3UD.js.map} +1 -1
  305. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-sx8-UEE3.js} +2 -2
  306. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-sx8-UEE3.js.map} +1 -1
  307. package/dashboard/dist/index.html +3 -3
  308. package/docs/api/http/file-browser.md +101 -0
  309. package/docs/api/http/knowledge.md +203 -0
  310. package/docs/api/http/settings.md +6 -4
  311. package/docs/api/sdk/files.md +68 -0
  312. package/docs/api/sdk/knowledge.md +126 -0
  313. package/docs/api/sdk/settings.md +3 -2
  314. package/docs/cli.md +171 -0
  315. package/docs/compilation.md +16 -0
  316. package/docs/compiler.md +311 -0
  317. package/docs/events.md +19 -0
  318. package/docs/workflows.md +19 -0
  319. package/package.json +13 -2
  320. package/build/api/escalations.d.ts +0 -271
  321. package/build/api/escalations.js +0 -932
  322. package/build/api/workflows.d.ts +0 -158
  323. package/build/api/workflows.js +0 -414
  324. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
  325. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
  326. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
  327. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
  328. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
  329. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
  330. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
  331. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
  332. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
  333. package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
  334. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
  335. package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
  336. package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
  337. package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
  338. package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
  339. package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
  340. package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
  341. package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
  342. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
  343. package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
  344. package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
  345. package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
  346. package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
  347. package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
  348. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
  349. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{j as e}from"./index-Cmgrk7PQ.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{b,c as h,d as f,e as g,f as E,g as v}from"./roles-DoHYlhWH.js";import{D}from"./DataTable-DkOokbtL.js";import{C as j}from"./ConfirmDeleteModal-CpXG9uyu.js";import{P as V}from"./PageHeader-Cm5HBQF_.js";import{M as C}from"./Modal-E1yRnCeW.js";import{R}from"./RolePill-BVUp2bF0.js";import{R as P,a as y}from"./RowActions-DbUJPfaW.js";import{k}from"./vendor-icons-AFGxSeQS.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-C7KIMIbE.js";function w({open:s,onClose:r}){const l=b(),[i,c]=n.useState(""),[t,m]=n.useState(s);s!==t&&(m(s),s&&(c(""),l.reset()));const d=()=>{const o=i.trim().toLowerCase();o&&l.mutate(o,{onSuccess:r})};return e.jsxDEV(C,{open:s,onClose:r,title:"Create Role",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Role Name (required)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:34,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i,onChange:o=>c(o.target.value),placeholder:"e.g., reviewer",className:"input text-xs w-full",onKeyDown:o=>{o.key==="Enter"&&d()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:37,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Lowercase letters, numbers, hyphens, and underscores only."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:33,columnNumber:9},this),l.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:l.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:53,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:r,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:57,columnNumber:11},this),e.jsxDEV("button",{onClick:d,disabled:!i.trim()||l.isPending,className:"btn-primary text-xs",children:l.isPending?"Creating...":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:56,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:32,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:31,columnNumber:5},this)}function _({selectedRole:s,allRoles:r}){const{data:l}=h(),i=f(),c=g(),[t,m]=n.useState(""),d=(l==null?void 0:l.chains)??[],o=n.useMemo(()=>s?d.filter(a=>a.source_role===s).map(a=>a.target_role):[],[d,s]),u=n.useMemo(()=>s?r.filter(a=>a!==s&&a!=="superadmin"&&!o.includes(a)):[],[r,s,o]),p=()=>{!s||!t.trim()||i.mutate({source_role:s,target_role:t.trim()},{onSuccess:()=>m("")})},N=a=>{s&&c.mutate({source_role:s,target_role:a})},x=s==="superadmin";return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 min-h-[300px]",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Escalation Routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:49,columnNumber:7},this),s?x?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary mb-2",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:59,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Superadmins can escalate to any role implicitly."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:58,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:67,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"Can escalate to:"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:68,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:66,columnNumber:11},this),o.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"No escalation targets configured."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:72,columnNumber:13},this):e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:o.map(a=>e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono",children:[a,e.jsxDEV("button",{onClick:()=>N(a),className:"text-text-tertiary hover:text-status-error transition-colors",title:`Remove ${a}`,children:"×"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:83,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:78,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:76,columnNumber:13},this),u.length>0&&e.jsxDEV("div",{className:"pt-3 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Add Target"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:97,columnNumber:15},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("select",{value:t,onChange:a=>m(a.target.value),className:"select text-xs font-mono flex-1",children:[e.jsxDEV("option",{value:"",children:"Select a role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:106,columnNumber:19},this),u.map(a=>e.jsxDEV("option",{value:a,children:a},a,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:108,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:101,columnNumber:17},this),e.jsxDEV("button",{onClick:p,disabled:!t||i.isPending,className:"btn-primary text-xs",children:i.isPending?"Adding...":"Add"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:111,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:100,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:96,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:65,columnNumber:9},this):e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Select a role to manage its escalation targets."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:48,columnNumber:5},this)}function M(s){return[{key:"role",label:"Role",render:r=>e.jsxDEV(R,{role:r.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:14,columnNumber:24},this)},{key:"user_count",label:"Users",render:r=>r.user_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.user_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:21,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:22,columnNumber:13},this),className:"w-24 text-right"},{key:"chain_count",label:"Escalations",render:r=>r.chain_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.chain_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:30,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:31,columnNumber:13},this),className:"w-28 text-right"},{key:"workflow_count",label:"Workflows",render:r=>r.workflow_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.workflow_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:39,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:40,columnNumber:13},this),className:"w-28 text-right"},{key:"actions",label:"",render:r=>r.user_count>0||r.chain_count>0||r.workflow_count>0?null:e.jsxDEV(P,{children:e.jsxDEV(y,{icon:k,title:"Delete role",onClick:()=>s(r),colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:51,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:50,columnNumber:11},this),className:"w-16 text-right"}]}function $(){const{data:s,isLoading:r}=E(),l=v(),[i,c]=n.useState(!1),[t,m]=n.useState(null),[d,o]=n.useState(null),u=(s==null?void 0:s.roles)??[],p=n.useMemo(()=>u.map(a=>a.role),[u]),N=M(a=>m(a)),x=()=>{t&&l.mutate(t.role,{onSuccess:()=>m(null)})};return e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"Roles",actions:e.jsxDEV("button",{onClick:()=>c(!0),className:"btn-primary text-xs",children:"Add Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:35,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:32,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6",children:[e.jsxDEV("div",{children:e.jsxDEV(D,{columns:N,data:u,keyFn:a=>a.role,isLoading:r,emptyMessage:"No roles found",onRowClick:a=>o(a.role),activeRowKey:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:43,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:42,columnNumber:9},this),e.jsxDEV(_,{selectedRole:d,allRoles:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV(w,{open:i,onClose:()=>c(!1)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:57,columnNumber:7},this),e.jsxDEV(j,{open:!!t,onClose:()=>m(null),onConfirm:x,title:"Delete Role",description:e.jsxDEV(e.Fragment,{children:["Delete role"," ",e.jsxDEV("span",{className:"font-medium font-mono text-text-primary",children:t==null?void 0:t.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:67,columnNumber:13},this),"? This action cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:65,columnNumber:11},this),isPending:l.isPending,error:l.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:59,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:31,columnNumber:5},this)}export{$ as RolesPage};
2
- //# sourceMappingURL=RolesPage-kH-Njt25.js.map
@@ -1,2 +0,0 @@
1
- import{j as e,D as L,c as C,J as v,f as S,C as R}from"./index-Cmgrk7PQ.js";import{a as W}from"./vendor-query-DLp59M9_.js";import{S as K}from"./StatusBadge-CakDdsCw.js";import{L as $}from"./vendor-react-Co3Y8ikm.js";function I(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}function J({event:a,childTask:o,pending:m=!1,onClose:w}){const d=o?I(o.envelope):null,c=o?I(o.data):null;return e.jsxDEV("div",{className:"p-4 bg-surface-sunken rounded-md space-y-4",children:[e.jsxDEV("div",{className:"flex items-center justify-between gap-2",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("p",{className:"font-mono font-medium text-sm text-text-primary",children:a.attributes.activity_type??a.attributes.signal_name??a.attributes.child_workflow_id??a.event_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:45,columnNumber:11},this),m&&e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-warning/15 text-status-warning",children:[e.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:53,columnNumber:15},this),"Pending"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:52,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:44,columnNumber:9},this),w&&e.jsxDEV("button",{onClick:w,className:"text-text-tertiary hover:text-text-primary text-xs",children:"Close"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:59,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:43,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[a.attributes.activity_type&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Activity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:72,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.activity_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:75,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:71,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Kind"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.kind},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:84,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:80,columnNumber:9},this),a.duration_ms!==null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Duration"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:90,columnNumber:13},this),e.jsxDEV(L,{ms:a.duration_ms,className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:93,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:89,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Time"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:97,columnNumber:11},this),e.jsxDEV(C,{date:a.event_time,format:"datetime",className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:100,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:96,columnNumber:9},this),a.attributes.signal_name&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Signal"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:106,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.signal_name},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:109,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:105,columnNumber:11},this),a.attributes.awaited!==void 0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Awaited"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:118,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.awaited?"Yes":"No (fire-and-forget)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:121,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:117,columnNumber:11},this),a.attributes.timeline_key&&e.jsxDEV("div",{className:"col-span-2",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Timeline Key"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:130,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary truncate",title:a.attributes.timeline_key,children:a.attributes.timeline_key},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:133,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:129,columnNumber:11},this),a.attributes.execution_index!==void 0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Exec Index"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:142,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.execution_index},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:145,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:141,columnNumber:11},this),a.attributes.scheduled_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Scheduled Event"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:154,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["#",a.attributes.scheduled_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:157,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:153,columnNumber:11},this),a.attributes.wait_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Wait Started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:164,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["Event #",a.attributes.wait_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:167,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:163,columnNumber:11},this),a.attributes.initiated_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Initiated Event"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:174,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["#",a.attributes.initiated_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:177,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:173,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:69,columnNumber:7},this),!o&&a.attributes.child_workflow_id&&e.jsxDEV("div",{className:"border-t border-surface-border pt-3",children:e.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:188,columnNumber:13},this),e.jsxDEV($,{to:`/workflows/executions/${a.attributes.child_workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:l=>l.stopPropagation(),children:a.attributes.child_workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:191,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:187,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:186,columnNumber:9},this),o&&e.jsxDEV("div",{className:"space-y-3 border-t border-surface-border pt-3",children:[e.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:207,columnNumber:13},this),e.jsxDEV($,{to:`/workflows/executions/${o.workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:l=>l.stopPropagation(),children:o.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:210,columnNumber:13},this),e.jsxDEV(K,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:217,columnNumber:13},this),o.completed_at&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:["Completed ",e.jsxDEV(C,{date:o.completed_at,format:"relative"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:220,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:219,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:206,columnNumber:11},this),(d!=null||c!=null)&&e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[d!=null?e.jsxDEV(v,{data:d,label:"Input (Envelope)",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:229,columnNumber:17},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:230,columnNumber:19},this),c!=null?e.jsxDEV(v,{data:c,label:"Output (Result)",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:232,columnNumber:17},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:233,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:227,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:204,columnNumber:9},this),(()=>{const l=a.attributes.input,r=a.attributes.result,b=a.category==="signal",n=a.category==="activity",p=a.category==="child_workflow",g=l!==void 0&&(n||p),f=!o&&r!==void 0&&(n||p),u=a.attributes.activity_type==="ltSignalParent"?"Signal Payload":"Result";return g||f?e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[g?e.jsxDEV(v,{data:l,label:"Input",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:254,columnNumber:17},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:255,columnNumber:19},this),f?e.jsxDEV(v,{data:r,label:u,variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:257,columnNumber:17},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:258,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:252,columnNumber:13},this):b&&l!==void 0?e.jsxDEV(v,{data:l,label:"Signal Payload",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:265,columnNumber:18},this):null})(),a.attributes.failure!==void 0&&e.jsxDEV(v,{data:a.attributes.failure,label:"Failure"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:273,columnNumber:9},this),(()=>{const{kind:l,activity_type:r,result:b,timeline_key:n,execution_index:p,signal_name:g,input:f,child_workflow_id:u,awaited:E,wait_event_id:x,scheduled_event_id:N,initiated_event_id:y,failure:T,trace_id:_,span_id:j,...V}=a.attributes;return Object.keys(V).length>0?e.jsxDEV(v,{data:V,label:"Attributes"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:297,columnNumber:11},this):null})()]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:41,columnNumber:5},this)}const k={activity:{bar:"bg-blue-500",outline:"border-blue-500 bg-transparent",text:"text-blue-500",label:"Activities"},signal:{bar:"bg-emerald-500",outline:"border-emerald-500 bg-transparent",text:"text-emerald-500",label:"Signals"},timer:{bar:"bg-status-warning",outline:"border-status-warning bg-transparent",text:"text-status-warning",label:"Timers"},child_workflow:{bar:"bg-violet-500",outline:"border-violet-500 bg-transparent",text:"text-violet-500",label:"Child Workflows"}},B="bg-stripes animate-pulse opacity-70",Y=new Set(["callLLM","callDbTool","callVisionTool","callMcpTool","getDBTools","getVisionTools"]);function G(a,o){if(a.length<=o)return a;const m=Math.floor((o-1)/2);return`${a.slice(0,m)}…${a.slice(a.length-m)}`}function z(a){const o=[],m=new Map,w=new Map;for(const c of a){const l=c.attributes.timeline_key;if(!l)continue;const r=c.event_type;r==="activity_task_scheduled"||r==="timer_started"||r==="child_workflow_execution_started"||r==="signal_wait_started"?m.set(l,c):w.set(l,c)}const d=new Set;for(const c of a){const l=c.attributes.timeline_key;if(l&&d.has(l))continue;l&&d.add(l);const r=l?m.get(l):void 0,b=l?w.get(l):void 0,n=b||r||c,p=n.category,g=n.attributes.activity_type||n.attributes.signal_name||n.attributes.child_workflow_id||n.event_type,f=r||n,u=b,E=new Date(f.event_time).getTime();let x=null,N=null,y=!1;u?(x=new Date(u.event_time).getTime(),N=u.duration_ms??x-E):n.duration_ms!==null?(N=n.duration_ms,x=E+N):y=!0,o.push({category:p,name:g||n.event_type,startTime:E,endTime:x,duration:N,eventId:n.event_id,pending:y})}return o}function U({events:a,childTasks:o,outline:m}){const[w,d]=W.useState(new Set),l=a.filter(t=>t.category!=="workflow");if(l.length===0)return null;const r=z(l);if(r.length===0)return null;const b=Date.now(),n=r.flatMap(t=>{const i=[t.startTime];return t.endTime?i.push(t.endTime):i.push(b),i}),p=Math.min(...n),f=Math.max(...n)-p||1,u=new Map;for(const t of r){const i=`${t.category}:${t.name}`,s=t.startTime-p,D=(t.endTime?t.endTime-p:b-p)-s,P={eventId:t.eventId,startPct:s/f*100,widthPct:Math.max(D/f*100,.5),duration:t.duration,label:`${t.name} — ${t.duration!==null?S(t.duration):"pending"} — ${new Date(t.startTime).toLocaleTimeString()}`,eventTime:new Date(t.startTime).toISOString(),pending:t.pending};u.has(i)||u.set(i,{name:t.name,category:t.category,segments:[]}),u.get(i).segments.push(P)}const E=Array.from(u.values()),x=5,N=Array.from({length:x+1},(t,i)=>({pct:i/x*100,label:S(Math.round(i/x*f))})),y=[...new Set(r.map(t=>t.category))],T=t=>{if(!(o!=null&&o.length))return;const i=t.attributes.activity_type;if(i)return o.find(s=>s.workflow_type===i)},_=t=>{d(i=>{const s=new Set(i);return s.has(t)?s.delete(t):s.add(t),s})},j=r.map(t=>t.eventId),V=j.length>0&&j.every(t=>w.has(t)),A=()=>{d(V?new Set:new Set(j))},M=(t,i)=>{var s,h;return i?B:m?((s=k[t])==null?void 0:s.outline)??"border-text-tertiary bg-transparent":((h=k[t])==null?void 0:h.bar)??"bg-text-tertiary"},O=t=>{var i;return m?((i=k[t])==null?void 0:i.text)??"text-text-tertiary":"text-white"};return e.jsxDEV("div",{className:"px-6 py-6 mb-6",children:[e.jsxDEV("div",{className:"flex items-center gap-4 mb-4 flex-wrap",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Execution Timeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:133,columnNumber:9},this),e.jsxDEV("button",{onClick:A,className:"text-[10px] text-accent hover:underline",children:V?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:136,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3 ml-auto",children:[y.map(t=>{var i,s,h;return e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("span",{className:`w-2 h-2 rounded-full ${m?`border ${((i=k[t])==null?void 0:i.outline)??"border-text-tertiary"}`:((s=k[t])==null?void 0:s.bar)??"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:144,columnNumber:15},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:((h=k[t])==null?void 0:h.label)??t},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:145,columnNumber:15},this)]},t,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:143,columnNumber:13},this)}),r.some(t=>t.pending)&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("span",{className:"w-2 h-2 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:152,columnNumber:15},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"Pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:153,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:151,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:141,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:132,columnNumber:7},this),e.jsxDEV("div",{className:"flex",children:[e.jsxDEV("div",{className:"w-56 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:161,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 relative h-6 border-b border-surface-border",children:N.map(t=>e.jsxDEV("span",{className:"absolute text-[9px] font-mono text-text-tertiary -translate-x-1/2 bottom-1",style:{left:`${t.pct}%`},children:t.label},t.pct,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:164,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:162,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:160,columnNumber:7},this),E.map(t=>{const i=k[t.category];return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center border-b border-surface-border",children:[e.jsxDEV("div",{className:"w-56 shrink-0 py-3 pr-4 flex items-center gap-2",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${(i==null?void 0:i.bar)??"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:184,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-secondary whitespace-nowrap overflow-hidden",title:t.name,children:G(t.name,28)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:185,columnNumber:17},this),Y.has(t.name)&&e.jsxDEV("span",{className:"shrink-0 text-accent/60",title:"MCP tool interaction",children:e.jsxDEV("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:194,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:193,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:192,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:183,columnNumber:15},this),e.jsxDEV("div",{className:"flex-1 relative h-10",children:[N.map(s=>e.jsxDEV("div",{className:"absolute top-0 bottom-0 w-px bg-surface-border opacity-30",style:{left:`${s.pct}%`}},s.pct,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:202,columnNumber:19},this)),t.segments.map(s=>e.jsxDEV("div",{className:`absolute top-2 h-6 rounded-sm cursor-pointer transition-all duration-200 ${m?"border-2":""} ${w.has(s.eventId)?`${M(t.category,s.pending)} ring-2 ring-accent ring-offset-1`:`${M(t.category,s.pending)} hover:opacity-80`}`,style:{left:`${s.startPct}%`,width:`${s.widthPct}%`,minWidth:"4px"},title:s.label,onClick:()=>_(s.eventId),children:s.widthPct>8&&e.jsxDEV("span",{className:`absolute inset-0 flex items-center px-1.5 text-[9px] font-mono ${O(t.category)} truncate`,children:s.duration!==null?S(s.duration):"pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:226,columnNumber:23},this)},s.eventId,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:210,columnNumber:19},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:200,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:182,columnNumber:13},this),t.segments.map(s=>{const h=w.has(s.eventId),D=l.find(P=>P.event_id===s.eventId);return e.jsxDEV(R,{open:h,children:D&&e.jsxDEV("div",{className:"py-3",children:e.jsxDEV(J,{event:D,childTask:T(D),pending:s.pending,onClose:()=>_(D.event_id)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:243,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:242,columnNumber:21},this)},s.eventId,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:240,columnNumber:17},this)})]},`${t.category}:${t.name}`,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:180,columnNumber:11},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:131,columnNumber:5},this)}export{J as E,U as S};
2
- //# sourceMappingURL=SwimlaneTimeline-Cfe-xQRX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwimlaneTimeline-Cfe-xQRX.js","sources":["../../src/pages/workflows/workflow-execution/EventDetailPanel.tsx","../../src/pages/workflows/workflow-execution/utils.ts","../../src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { DurationValue } from '../../../components/common/display/DurationValue';\n\ninterface EventDetailPanelProps {\n event: WorkflowExecutionEvent;\n childTask?: LTTaskRecord;\n /** When true, show a \"Pending\" badge. Caller determines this from the full event list. */\n pending?: boolean;\n onClose?: () => void;\n}\n\nfunction safeParseJson(raw: string | null | undefined): unknown {\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\n/**\n * Reusable detail panel for a workflow execution event.\n * Renders inline wherever placed — used by both SwimlaneTimeline\n * (below the lane row) and EventTable (below the event row).\n *\n * Shows rich detail for all event categories:\n * - Activities: activity_type, result, scheduled_event_id\n * - Signals: signal_name, payload, wait_event_id\n * - Timers: duration\n * - Child workflows: child_workflow_id link, awaited badge, result\n */\nexport function EventDetailPanel({ event, childTask, pending = false, onClose }: EventDetailPanelProps) {\n const childInput = childTask ? safeParseJson(childTask.envelope) : null;\n const childOutput = childTask ? safeParseJson(childTask.data) : null;\n\n return (\n <div className=\"p-4 bg-surface-sunken rounded-md space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"font-mono font-medium text-sm text-text-primary\">\n {event.attributes.activity_type\n ?? event.attributes.signal_name\n ?? event.attributes.child_workflow_id\n ?? event.event_type}\n </p>\n {pending && (\n <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-warning/15 text-status-warning\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n Pending\n </span>\n )}\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"text-text-tertiary hover:text-text-primary text-xs\"\n >\n Close\n </button>\n )}\n </div>\n\n {/* Metadata grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {event.attributes.activity_type && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Activity\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.activity_type}\n </p>\n </div>\n )}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Kind\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.kind}\n </p>\n </div>\n {event.duration_ms !== null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Duration\n </p>\n <DurationValue ms={event.duration_ms} className=\"font-mono text-text-primary\" />\n </div>\n )}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Time\n </p>\n <DateValue date={event.event_time} format=\"datetime\" className=\"font-mono text-text-primary\" />\n </div>\n\n {/* Signal-specific: signal name */}\n {event.attributes.signal_name && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Signal\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.signal_name}\n </p>\n </div>\n )}\n\n {/* Child workflow: awaited badge */}\n {event.attributes.awaited !== undefined && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Awaited\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.awaited ? 'Yes' : 'No (fire-and-forget)'}\n </p>\n </div>\n )}\n\n {/* Timeline key */}\n {event.attributes.timeline_key && (\n <div className=\"col-span-2\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Timeline Key\n </p>\n <p className=\"text-xs font-mono text-text-primary truncate\" title={event.attributes.timeline_key}>\n {event.attributes.timeline_key}\n </p>\n </div>\n )}\n\n {/* Execution index */}\n {event.attributes.execution_index !== undefined && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Exec Index\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.execution_index}\n </p>\n </div>\n )}\n\n {/* Back-references */}\n {event.attributes.scheduled_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Scheduled Event\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n #{event.attributes.scheduled_event_id}\n </p>\n </div>\n )}\n {event.attributes.wait_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Wait Started\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n Event #{event.attributes.wait_event_id}\n </p>\n </div>\n )}\n {event.attributes.initiated_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Initiated Event\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n #{event.attributes.initiated_event_id}\n </p>\n </div>\n )}\n </div>\n\n {/* Child workflow link — from event attributes (no matching task record) */}\n {!childTask && event.attributes.child_workflow_id && (\n <div className=\"border-t border-surface-border pt-3\">\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Child Workflow\n </span>\n <Link\n to={`/workflows/executions/${event.attributes.child_workflow_id}`}\n className=\"text-xs font-mono text-accent hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n {event.attributes.child_workflow_id}\n </Link>\n </div>\n </div>\n )}\n\n {/* Child workflow section — from matched task record */}\n {childTask && (\n <div className=\"space-y-3 border-t border-surface-border pt-3\">\n {/* Child link + status */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Child Workflow\n </span>\n <Link\n to={`/workflows/executions/${childTask.workflow_id}`}\n className=\"text-xs font-mono text-accent hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n {childTask.workflow_id}\n </Link>\n <StatusBadge status={childTask.status} />\n {childTask.completed_at && (\n <span className=\"text-[10px] text-text-tertiary\">\n Completed <DateValue date={childTask.completed_at} format=\"relative\" />\n </span>\n )}\n </div>\n\n {/* Input / Output side-by-side */}\n {(childInput != null || childOutput != null) && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {childInput != null ? (\n <JsonViewer data={childInput} label=\"Input (Envelope)\" variant=\"panel\" />\n ) : <div />}\n {childOutput != null ? (\n <JsonViewer data={childOutput} label=\"Output (Result)\" variant=\"panel\" />\n ) : <div />}\n </div>\n )}\n </div>\n )}\n\n {/* Input / Result side-by-side for activities and child workflows */}\n {(() => {\n const input = event.attributes.input;\n const result = event.attributes.result;\n const isSignal = event.category === 'signal';\n const isActivity = event.category === 'activity';\n const isChild = event.category === 'child_workflow';\n const hasInput = input !== undefined && (isActivity || isChild);\n const hasResult = !childTask && result !== undefined && (isActivity || isChild);\n const resultLabel = event.attributes.activity_type === 'ltSignalParent' ? 'Signal Payload' : 'Result';\n\n if (hasInput || hasResult) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {hasInput ? (\n <JsonViewer data={input} label=\"Input\" variant=\"panel\" />\n ) : <div />}\n {hasResult ? (\n <JsonViewer data={result} label={resultLabel} variant=\"panel\" />\n ) : <div />}\n </div>\n );\n }\n\n // Signal payload — standalone (no result pairing)\n if (isSignal && input !== undefined) {\n return <JsonViewer data={input} label=\"Signal Payload\" variant=\"panel\" />;\n }\n\n return null;\n })()}\n\n {/* Failure detail */}\n {event.attributes.failure !== undefined && (\n <JsonViewer data={event.attributes.failure} label=\"Failure\" />\n )}\n\n {/* Remaining attributes (exclude the fields shown above) */}\n {(() => {\n const {\n kind,\n activity_type,\n result,\n timeline_key,\n execution_index,\n signal_name,\n input,\n child_workflow_id,\n awaited,\n wait_event_id,\n scheduled_event_id,\n initiated_event_id,\n failure,\n trace_id,\n span_id,\n ...rest\n } = event.attributes;\n return Object.keys(rest).length > 0 ? (\n <JsonViewer data={rest} label=\"Attributes\" />\n ) : null;\n })()}\n </div>\n );\n}\n","export { formatDuration, formatDateTime } from '../../../lib/format';\n\nimport type { WorkflowExecutionEvent } from '../../../api/types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface Segment {\n eventId: number;\n startPct: number;\n widthPct: number;\n duration: number | null;\n label: string;\n eventTime: string;\n pending: boolean;\n}\n\nexport interface Lane {\n name: string;\n category: string;\n segments: Segment[];\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────\n\nexport const CATEGORY_COLORS: Record<string, { bar: string; outline: string; text: string; label: string }> = {\n activity: { bar: 'bg-blue-500', outline: 'border-blue-500 bg-transparent', text: 'text-blue-500', label: 'Activities' },\n signal: { bar: 'bg-emerald-500', outline: 'border-emerald-500 bg-transparent', text: 'text-emerald-500', label: 'Signals' },\n timer: { bar: 'bg-status-warning', outline: 'border-status-warning bg-transparent', text: 'text-status-warning', label: 'Timers' },\n child_workflow: { bar: 'bg-violet-500', outline: 'border-violet-500 bg-transparent', text: 'text-violet-500', label: 'Child Workflows' },\n};\n\nexport const PENDING_CLASS = 'bg-stripes animate-pulse opacity-70';\n\n/** Activity names that indicate LLM/MCP tool interaction */\nexport const MCP_ACTIVITY_NAMES = new Set([\n 'callLLM', 'callDbTool', 'callVisionTool', 'callMcpTool', 'getDBTools', 'getVisionTools',\n]);\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Truncate a string in the middle, keeping the start and end visible. */\nexport function middleTruncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n const keep = Math.floor((maxLen - 1) / 2);\n return `${str.slice(0, keep)}…${str.slice(str.length - keep)}`;\n}\n\nexport interface TimelineSpan {\n category: string;\n name: string;\n startTime: number;\n endTime: number | null;\n duration: number | null;\n eventId: number;\n pending: boolean;\n}\n\n/**\n * Group paired events (scheduled→completed, started→fired, wait→signaled)\n * into a single span using timeline_key, or treat standalone events as points.\n */\nexport function buildTimelineSpans(events: WorkflowExecutionEvent[]): TimelineSpan[] {\n const spans: TimelineSpan[] = [];\n\n // Index scheduled/started events by timeline_key for pairing\n const startedMap = new Map<string, WorkflowExecutionEvent>();\n const completedMap = new Map<string, WorkflowExecutionEvent>();\n\n for (const evt of events) {\n const tlKey = evt.attributes.timeline_key;\n if (!tlKey) continue;\n const type = evt.event_type;\n\n if (type === 'activity_task_scheduled'\n || type === 'timer_started'\n || type === 'child_workflow_execution_started'\n || type === 'signal_wait_started') {\n startedMap.set(tlKey, evt);\n } else {\n completedMap.set(tlKey, evt);\n }\n }\n\n // Build spans from pairs\n const seen = new Set<string>();\n\n for (const evt of events) {\n const tlKey = evt.attributes.timeline_key;\n\n // Skip if no timeline_key or already processed\n if (tlKey && seen.has(tlKey)) continue;\n if (tlKey) seen.add(tlKey);\n\n const started = tlKey ? startedMap.get(tlKey) : undefined;\n const completed = tlKey ? completedMap.get(tlKey) : undefined;\n\n // Determine the representative event for this span\n const primary = completed || started || evt;\n const cat = primary.category;\n const name = primary.attributes.activity_type\n || primary.attributes.signal_name\n || primary.attributes.child_workflow_id\n || primary.event_type;\n\n const startEvt = started || primary;\n const endEvt = completed;\n\n const startMs = new Date(startEvt.event_time).getTime();\n let endMs: number | null = null;\n let dur: number | null = null;\n let pending = false;\n\n if (endEvt) {\n endMs = new Date(endEvt.event_time).getTime();\n dur = endEvt.duration_ms ?? (endMs - startMs);\n } else if (primary.duration_ms !== null) {\n dur = primary.duration_ms;\n endMs = startMs + dur;\n } else {\n // Pending — no completion event\n pending = true;\n }\n\n spans.push({\n category: cat,\n name: name || primary.event_type,\n startTime: startMs,\n endTime: endMs,\n duration: dur,\n eventId: primary.event_id,\n pending,\n });\n }\n\n return spans;\n}\n","import { useState } from 'react';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { EventDetailPanel } from './EventDetailPanel';\nimport {\n formatDuration,\n middleTruncate,\n buildTimelineSpans,\n CATEGORY_COLORS,\n PENDING_CLASS,\n MCP_ACTIVITY_NAMES,\n} from './utils';\nimport type { Segment, Lane } from './utils';\n\ninterface SwimlaneTimelineProps {\n events: WorkflowExecutionEvent[];\n childTasks?: LTTaskRecord[];\n /** Use outline-style bars (border + transparent fill) instead of solid fills */\n outline?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function SwimlaneTimeline({ events, childTasks, outline }: SwimlaneTimelineProps) {\n const [selectedEvents, setSelectedEvents] = useState<Set<number>>(new Set());\n\n // Filter out workflow-level events (started/completed) — they aren't operations\n const timelineEvents = events.filter(\n (e) => e.category !== 'workflow',\n );\n\n // Show all activities (user + system), signals, timers, and child workflows.\n const displayEvents = timelineEvents;\n\n if (displayEvents.length === 0) return null;\n\n const spans = buildTimelineSpans(displayEvents);\n if (spans.length === 0) return null;\n\n // Compute time axis bounds\n const now = Date.now();\n const allTimes = spans.flatMap((s) => {\n const times = [s.startTime];\n if (s.endTime) times.push(s.endTime);\n else times.push(now); // pending extends to now\n return times;\n });\n const timeMin = Math.min(...allTimes);\n const timeMax = Math.max(...allTimes);\n const totalSpan = timeMax - timeMin || 1;\n\n // Group spans into lanes by \"category:name\"\n const laneMap = new Map<string, { name: string; category: string; segments: Segment[] }>();\n\n for (const span of spans) {\n const laneKey = `${span.category}:${span.name}`;\n const startOffset = span.startTime - timeMin;\n const endOffset = span.endTime ? span.endTime - timeMin : (now - timeMin);\n const widthMs = endOffset - startOffset;\n\n const segment: Segment = {\n eventId: span.eventId,\n startPct: (startOffset / totalSpan) * 100,\n widthPct: Math.max((widthMs / totalSpan) * 100, 0.5),\n duration: span.duration,\n label: `${span.name} — ${span.duration !== null ? formatDuration(span.duration) : 'pending'} — ${new Date(span.startTime).toLocaleTimeString()}`,\n eventTime: new Date(span.startTime).toISOString(),\n pending: span.pending,\n };\n\n if (!laneMap.has(laneKey)) {\n laneMap.set(laneKey, { name: span.name, category: span.category, segments: [] });\n }\n laneMap.get(laneKey)!.segments.push(segment);\n }\n\n const lanes: Lane[] = Array.from(laneMap.values());\n\n // Time axis ticks\n const tickCount = 5;\n const ticks = Array.from({ length: tickCount + 1 }, (_, i) => ({\n pct: (i / tickCount) * 100,\n label: formatDuration(Math.round((i / tickCount) * totalSpan)),\n }));\n\n // Active categories for legend\n const activeCategories = [...new Set(spans.map((s) => s.category))];\n\n /** Find a matching child task for an event */\n const findChildTask = (evt: WorkflowExecutionEvent): LTTaskRecord | undefined => {\n if (!childTasks?.length) return undefined;\n const activityType = evt.attributes.activity_type;\n if (!activityType) return undefined;\n return childTasks.find((t) => t.workflow_type === activityType);\n };\n\n const toggleEvent = (id: number) => {\n setSelectedEvents((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const allEventIds = spans.map((s) => s.eventId);\n const allExpanded = allEventIds.length > 0 && allEventIds.every((id) => selectedEvents.has(id));\n\n const toggleAll = () => {\n if (allExpanded) {\n setSelectedEvents(new Set());\n } else {\n setSelectedEvents(new Set(allEventIds));\n }\n };\n\n\n\n const barColor = (cat: string, pending: boolean) => {\n if (pending) return PENDING_CLASS;\n if (outline) return CATEGORY_COLORS[cat]?.outline ?? 'border-text-tertiary bg-transparent';\n return CATEGORY_COLORS[cat]?.bar ?? 'bg-text-tertiary';\n };\n\n const textColor = (cat: string) => {\n if (outline) return CATEGORY_COLORS[cat]?.text ?? 'text-text-tertiary';\n return 'text-white';\n };\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n <div className=\"flex items-center gap-4 mb-4 flex-wrap\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Execution Timeline\n </p>\n <button onClick={toggleAll} className=\"text-[10px] text-accent hover:underline\">\n {allExpanded ? 'Collapse all' : 'Expand all'}\n </button>\n\n {/* Legend */}\n <div className=\"flex items-center gap-3 ml-auto\">\n {activeCategories.map((cat) => (\n <div key={cat} className=\"flex items-center gap-1\">\n <span className={`w-2 h-2 rounded-full ${outline ? `border ${CATEGORY_COLORS[cat]?.outline ?? 'border-text-tertiary'}` : CATEGORY_COLORS[cat]?.bar ?? 'bg-text-tertiary'}`} />\n <span className=\"text-[9px] text-text-tertiary\">\n {CATEGORY_COLORS[cat]?.label ?? cat}\n </span>\n </div>\n ))}\n {spans.some((s) => s.pending) && (\n <div className=\"flex items-center gap-1\">\n <span className=\"w-2 h-2 rounded-full bg-status-warning animate-pulse\" />\n <span className=\"text-[9px] text-text-tertiary\">Pending</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Time axis */}\n <div className=\"flex\">\n <div className=\"w-56 shrink-0\" />\n <div className=\"flex-1 relative h-6 border-b border-surface-border\">\n {ticks.map((tick) => (\n <span\n key={tick.pct}\n className=\"absolute text-[9px] font-mono text-text-tertiary -translate-x-1/2 bottom-1\"\n style={{ left: `${tick.pct}%` }}\n >\n {tick.label}\n </span>\n ))}\n </div>\n </div>\n\n {/* Lanes */}\n {lanes.map((lane) => {\n const catColor = CATEGORY_COLORS[lane.category];\n\n return (\n <div key={`${lane.category}:${lane.name}`}>\n {/* Lane row */}\n <div className=\"flex items-center border-b border-surface-border\">\n <div className=\"w-56 shrink-0 py-3 pr-4 flex items-center gap-2\">\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${catColor?.bar ?? 'bg-text-tertiary'}`} />\n <p\n className=\"text-xs font-mono text-text-secondary whitespace-nowrap overflow-hidden\"\n title={lane.name}\n >\n {middleTruncate(lane.name, 28)}\n </p>\n {MCP_ACTIVITY_NAMES.has(lane.name) && (\n <span className=\"shrink-0 text-accent/60\" title=\"MCP tool interaction\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n )}\n </div>\n\n <div className=\"flex-1 relative h-10\">\n {ticks.map((tick) => (\n <div\n key={tick.pct}\n className=\"absolute top-0 bottom-0 w-px bg-surface-border opacity-30\"\n style={{ left: `${tick.pct}%` }}\n />\n ))}\n\n {lane.segments.map((seg) => (\n <div\n key={seg.eventId}\n className={`absolute top-2 h-6 rounded-sm cursor-pointer transition-all duration-200 ${outline ? 'border-2' : ''} ${\n selectedEvents.has(seg.eventId)\n ? `${barColor(lane.category, seg.pending)} ring-2 ring-accent ring-offset-1`\n : `${barColor(lane.category, seg.pending)} hover:opacity-80`\n }`}\n style={{\n left: `${seg.startPct}%`,\n width: `${seg.widthPct}%`,\n minWidth: '4px',\n }}\n title={seg.label}\n onClick={() => toggleEvent(seg.eventId)}\n >\n {seg.widthPct > 8 && (\n <span className={`absolute inset-0 flex items-center px-1.5 text-[9px] font-mono ${textColor(lane.category)} truncate`}>\n {seg.duration !== null ? formatDuration(seg.duration) : 'pending'}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Inline detail panels */}\n {lane.segments.map((seg) => {\n const isOpen = selectedEvents.has(seg.eventId);\n const evt = displayEvents.find((e) => e.event_id === seg.eventId);\n return (\n <Collapsible key={seg.eventId} open={isOpen}>\n {evt && (\n <div className=\"py-3\">\n <EventDetailPanel\n event={evt}\n childTask={findChildTask(evt)}\n pending={seg.pending}\n onClose={() => toggleEvent(evt.event_id)}\n />\n </div>\n )}\n </Collapsible>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["safeParseJson","raw","EventDetailPanel","event","childTask","pending","onClose","childInput","childOutput","jsxDEV","DurationValue","DateValue","Link","e","StatusBadge","JsonViewer","input","result","isSignal","isActivity","isChild","hasInput","hasResult","resultLabel","kind","activity_type","timeline_key","execution_index","signal_name","child_workflow_id","awaited","wait_event_id","scheduled_event_id","initiated_event_id","failure","trace_id","span_id","rest","CATEGORY_COLORS","PENDING_CLASS","MCP_ACTIVITY_NAMES","middleTruncate","str","maxLen","keep","buildTimelineSpans","events","spans","startedMap","completedMap","evt","tlKey","type","seen","started","completed","primary","cat","name","startEvt","endEvt","startMs","endMs","dur","SwimlaneTimeline","childTasks","outline","selectedEvents","setSelectedEvents","useState","displayEvents","now","allTimes","s","times","timeMin","totalSpan","laneMap","span","laneKey","startOffset","widthMs","segment","formatDuration","lanes","tickCount","ticks","_","activeCategories","findChildTask","activityType","t","toggleEvent","id","prev","next","allEventIds","allExpanded","toggleAll","barColor","_a","_b","textColor","tick","lane","catColor","seg","isOpen","Collapsible"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{j as e,S as y}from"./index-Cmgrk7PQ.js";import{a as p}from"./vendor-query-DLp59M9_.js";import{l as J,n as L,o as R,u as A}from"./yaml-workflows-QVF2MZ0l.js";import{u as $,d as z}from"./useYamlActivityEvents-D56KV14X.js";import{u as F}from"./useFilterParams-CGRYFw_A.js";import{u as q}from"./useExpandedRows-Cg9iq6Vy.js";import{S as T}from"./StatusBadge-CakDdsCw.js";import{P as V}from"./PageHeader-Cm5HBQF_.js";import{F as B,a as U,b as W}from"./FilterBar-C5r3n6YO.js";import{E as H}from"./EmptyState-C7KIMIbE.js";import{b as Y,R as _}from"./helpers-rMEcLwKs.js";import{X as O,_ as X,a6 as G,P as M,i as K,W as Q,$ as Z,c as ee}from"./vendor-icons-AFGxSeQS.js";import{L as se,c as oe}from"./vendor-react-Co3Y8ikm.js";import{d as C,C as te}from"./helpers-ZSKqdkdS.js";import"./BotPicker-B8Uvw9Si.js";import"./bots-DPfUpVqI.js";import"./TimeAgo-DgfDZ1pl.js";const S={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 re({steps:o,manifest:l,isComplete:t}){const r=l.filter(s=>s.type==="worker"),c=r.length,n=r.map(s=>{const u=o.find(d=>d.activityId===s.activity_id),m=s.tool_source||"mcp",N=S[m]||S.mcp;return{activityId:s.activity_id,title:s.title||s.mcp_tool_name||s.activity_id,toolName:s.mcp_tool_name,colors:N,status:(u==null?void 0:u.status)||"pending",error:u==null?void 0:u.error}});return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-3",children:t?`All ${c} steps completed`:`Running step ${n.filter(s=>s.status==="completed").length+1} of ${c}...`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-0",children:n.map((s,u)=>{const m=u===n.length-1;return e.jsxDEV("div",{className:"flex items-stretch gap-2",children:[e.jsxDEV("div",{className:"flex flex-col items-center w-4 shrink-0",children:[e.jsxDEV("span",{className:`w-2.5 h-2.5 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"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:52,columnNumber:17},this),!m&&e.jsxDEV("span",{className:`w-px flex-1 transition-colors ${s.status==="completed"?"bg-status-success/30":"bg-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:59,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:51,columnNumber:15},this),e.jsxDEV("div",{className:m?"":"pb-3",children:[e.jsxDEV("p",{className:`text-[11px] 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},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:65,columnNumber:17},this),s.toolName&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:s.toolName},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:72,columnNumber:19},this),s.error&&e.jsxDEV("p",{className:"text-[9px] text-status-error mt-0.5",children:s.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:75,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:64,columnNumber:15},this)]},s.activityId,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:50,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:46,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:40,columnNumber:5},this)}function ae({workflow:o,onClose:l}){const t=J(),[r,c]=p.useState(!1),[n,s]=p.useState({}),[u,m]=p.useState(""),[N,d]=p.useState(""),[f,w]=p.useState(""),[x,v]=p.useState(null),[k,g]=p.useState(null),{steps:P,isComplete:a}=$(x);p.useEffect(()=>{v(null),g(null),d(""),t.reset();const b=Y(o.input_schema);s(b),m(JSON.stringify(b,null,2)),c(!1)},[o.id]),p.useEffect(()=>{if(a&&x){const b=x,h=setTimeout(()=>{g({jobId:b}),v(null)},800);return()=>clearTimeout(h)}},[a,x]);const i=()=>{if(!r)m(JSON.stringify(n,null,2));else try{s(JSON.parse(u))}catch{}c(!r)},E=async()=>{d(""),g(null);let b;if(r)try{b=JSON.parse(u)}catch{d("Invalid JSON");return}else b={...n};try{const h=await t.mutateAsync({id:o.id,data:b,sync:!1,...f?{execute_as:f}:{}});h.job_id&&v(h.job_id)}catch{}},D=!!x,I=o.app_id||"longtail";return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:o.app_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:161,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:162,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:160,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>{D||l()},className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(O,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:165,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:164,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:159,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:D?e.jsxDEV(re,{steps:P,manifest:o.activity_manifest,isComplete:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:172,columnNumber:11},this):k?e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("svg",{className:"w-4 h-4 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsxDEV("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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:177,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:176,columnNumber:15},this),e.jsxDEV("p",{className:"text-xs font-medium text-status-success",children:"Workflow completed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:179,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:175,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV(se,{to:`/mcp/executions/${encodeURIComponent(k.jobId)}?namespace=${encodeURIComponent(I)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:186,columnNumber:17},this)," View execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:182,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>g(null),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(G,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:192,columnNumber:17},this)," Run again"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:188,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:181,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:174,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(_,{selected:f,onChange:w},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:198,columnNumber:13},this),o.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:201,columnNumber:15},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:207,columnNumber:17},this),e.jsxDEV("button",{onClick:i,className:"text-[10px] text-accent hover:underline",children:r?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:208,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:206,columnNumber:15},this),r?e.jsxDEV("textarea",{value:u,onChange:b=>m(b.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:214,columnNumber:17},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(n).map(([b,h])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:b},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:225,columnNumber:23},this),typeof h=="boolean"?e.jsxDEV("select",{value:String(h),onChange:j=>s({...n,[b]:j.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.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:232,columnNumber:27},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:233,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:227,columnNumber:25},this):typeof h=="object"?e.jsxDEV("textarea",{value:JSON.stringify(h,null,2),onChange:j=>{try{s({...n,[b]:JSON.parse(j.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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:236,columnNumber:25},this):e.jsxDEV("input",{type:typeof h=="number"?"number":"text",value:String(h??""),onChange:j=>s({...n,[b]:typeof h=="number"?Number(j.target.value):j.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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:242,columnNumber:25},this)]},b,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:224,columnNumber:21},this)),Object.keys(n).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:252,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:222,columnNumber:17},this),N&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:N},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:256,columnNumber:29},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:205,columnNumber:13},this),t.isError&&e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:t.error instanceof Error?t.error.message:"Invocation failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:261,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:260,columnNumber:15},this),e.jsxDEV("button",{onClick:E,disabled:t.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:t.isPending?"Starting...":e.jsxDEV(e.Fragment,{children:[e.jsxDEV(M,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:61},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:59},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:266,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:197,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:170,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:157,columnNumber:5},this)}function le({cronInput:o,setCronInput:l,setCron:t,hasCronSchedule:r,onSave:c,onClear:n}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV(y,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:24,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:o,onChange:s=>{l(s.target.value),t.reset()},placeholder:"0 */6 * * *",className:"input font-mono text-sm w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:27,columnNumber:13},this),o.trim()&&C(o.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:C(o.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:38,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:26,columnNumber:11},this),e.jsxDEV("button",{onClick:c,disabled:t.isPending,className:"btn-primary text-xs shrink-0",children:t.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:43,columnNumber:11},this),r&&e.jsxDEV("button",{onClick:n,disabled:t.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:51,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:25,columnNumber:9},this),t.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:62,columnNumber:11},this),t.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:t.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(y,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:71,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:te.map(([s,u])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(s),t.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:83,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:86,columnNumber:15},this)]},s,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:74,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:72,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:70,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:22,columnNumber:5},this)}function ne({workflow:o,onClose:l}){const t=L(),r=R(),[c,n]=p.useState(""),[s,u]=p.useState(""),[m,N]=p.useState(!1),[d,f]=p.useState({}),[w,x]=p.useState("{}");p.useEffect(()=>{n(o.cron_schedule??""),u(o.execute_as??""),t.reset(),r.reset();const a=o.cron_envelope||{},i=Object.keys(a).length>0?a:Y(o.input_schema);f(i),x(JSON.stringify(i,null,2)),N(!1)},[o.id]);const v=()=>{if(!m)x(JSON.stringify(d,null,2));else try{f(JSON.parse(w))}catch{}N(!m)},k=()=>{let a;if(m)try{a=JSON.parse(w)}catch{return}else a={...d};t.mutate({id:o.id,cron_schedule:c.trim(),cron_envelope:Object.keys(a).length>0?a:null,execute_as:s||null})},g=()=>{r.mutate(o.id,{onSuccess:()=>{n("")}})},P={isPending:t.isPending||r.isPending,isSuccess:t.isSuccess||r.isSuccess,error:t.error||r.error,reset:()=>{t.reset(),r.reset()}};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:"Cron Schedule"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:87,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:86,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(O,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:90,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:85,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(_,{selected:s,onChange:u},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:97,columnNumber:9},this),e.jsxDEV(le,{cronInput:c,setCronInput:n,setCron:P,hasCronSchedule:!!o.cron_schedule,onSave:k,onClear:g},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:99,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV(y,{children:"Default Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("button",{onClick:v,className:"text-[10px] text-accent hover:underline",children:m?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:112,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:110,columnNumber:11},this),m?e.jsxDEV("textarea",{value:w,onChange:a=>x(a.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:118,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[200px] overflow-y-auto",children:[Object.entries(d).map(([a,i])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:129,columnNumber:19},this),typeof i=="boolean"?e.jsxDEV("select",{value:String(i),onChange:E=>f({...d,[a]:E.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.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:136,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:137,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:131,columnNumber:21},this):typeof i=="object"?e.jsxDEV("textarea",{value:JSON.stringify(i,null,2),onChange:E=>{try{f({...d,[a]:JSON.parse(E.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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:140,columnNumber:21},this):e.jsxDEV("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:E=>f({...d,[a]:typeof i=="number"?Number(E.target.value):E.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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:146,columnNumber:21},this)]},a,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:128,columnNumber:17},this)),Object.keys(d).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:96,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:83,columnNumber:5},this)}function ie(o){const l=new Map;for(const t of o){const r=l.get(t.app_id)??[];r.push(t),l.set(t.app_id,r)}return[...l.entries()].map(([t,r])=>{var N;const c={active:0,deployed:1,draft:2,archived:3},n=r.reduce((d,f)=>(c[f.status]??9)<(c[d]??9)?f.status:d,r[0].status),s=r.reduce((d,f)=>f.updated_at>d?f.updated_at:d,r[0].updated_at),u=r.reduce((d,f)=>{const w=parseInt(f.app_version||"0",10);return w>d?w:d},0),m=((N=r.find(d=>d.set_id))==null?void 0:N.set_id)||null;return{appId:t,workflows:r,toolCount:r.length,status:n,updatedAt:s,appVersion:String(u),setId:m}})}function me(o,l){if(!l)return!0;const t=l.toLowerCase();return o.appId.toLowerCase().includes(t)?!0:o.workflows.some(r=>{var c,n;return r.graph_topic.toLowerCase().includes(t)||((c=r.name)==null?void 0:c.toLowerCase().includes(t))||((n=r.description)==null?void 0:n.toLowerCase().includes(t))})}function ce(o,l){if(!l)return o;const t=l.toLowerCase();return o.filter(r=>{var c,n;return r.graph_topic.toLowerCase().includes(t)||((c=r.name)==null?void 0:c.toLowerCase().includes(t))||((n=r.description)==null?void 0:n.toLowerCase().includes(t))})}function de({wf:o,onTry:l,onWizard:t,onCron:r}){const c=o.status==="active",n=!!o.cron_schedule;return e.jsxDEV("div",{onClick:c?l:void 0,className:`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${c?"cursor-pointer":""}`,children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary truncate",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:33,columnNumber:11},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono shrink-0",children:["v",o.content_version]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:34,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:32,columnNumber:9},this),o.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:37,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("div",{className:"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0",children:new Date(o.updated_at).toLocaleDateString("en-US",{month:"short",day:"numeric"})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:40,columnNumber:7},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 whitespace-nowrap shrink-0",children:e.jsxDEV(T,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:44,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:43,columnNumber:7},this),e.jsxDEV("div",{className:"w-20 px-3 py-2 flex justify-end gap-2 shrink-0",children:[c&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),l()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Test tool",children:e.jsxDEV(M,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:53,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),r()},className:n?"text-status-success":"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:n?`Cron: ${o.cron_schedule}`:"Schedule cron",children:e.jsxDEV(Z,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:56,columnNumber:9},this),o.source_workflow_id&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),t()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"MCP Tool Compiler",children:e.jsxDEV(ee,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:71,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:66,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:46,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:30,columnNumber:5},this)}function ue({server:o,expanded:l,onToggle:t,onTryTool:r,onWizard:c,onWorkbench:n,onCron:s,visibleTools:u}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:t,className:"group/row border-b transition-colors duration-100 cursor-pointer row-hover",children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${l?"rotate-90":""} text-text-tertiary`,children:e.jsxDEV(K,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:110,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:109,columnNumber:13},this),e.jsxDEV("p",{className:"text-sm text-text-primary font-medium font-mono",children:o.appId},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:112,columnNumber:13},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:["app v",o.appVersion]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:113,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:108,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:107,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28 whitespace-nowrap",children:e.jsxDEV(T,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:119,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV("td",{className:"w-20 text-center",children:e.jsxDEV("div",{className:"flex items-center justify-center gap-2",children:[e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:o.toolCount},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:125,columnNumber:13},this),o.setId&&e.jsxDEV("button",{onClick:m=>{m.stopPropagation(),n()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Open workbench",children:e.jsxDEV(Q,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:134,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:129,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:124,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:123,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:102,columnNumber:7},this),e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:5,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:l?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[u.map(m=>e.jsxDEV(de,{wf:m,onTry:()=>r(m),onWizard:()=>c(m),onCron:()=>s(m)},m.id,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:150,columnNumber:17},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:152,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:148,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:144,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:143,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:142,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:101,columnNumber:5},this)}function Ce(){const o=oe(),{filters:l,setFilter:t}=F({filters:{status:"",server:"",search:""}}),{data:r,isLoading:c}=A({status:l.status||void 0,app_id:l.server||void 0,search:l.search||void 0,limit:200,offset:0}),n=(r==null?void 0:r.workflows)??[],{data:s}=z({limit:100}),u=p.useMemo(()=>{const a=new Map;for(const i of(s==null?void 0:s.sets)??[])i.source_workflow_id&&a.set(i.id,i.source_workflow_id);return a},[s==null?void 0:s.sets]),m=p.useMemo(()=>ie(n),[n]),N=p.useMemo(()=>[...new Set(n.map(i=>i.app_id))].sort().map(i=>({value:i,label:i})),[n]),d=p.useMemo(()=>l.search?m.filter(a=>me(a,l.search)):m,[m,l.search]),{expandedIds:f,toggle:w}=q("lt:expanded:yaml-workflows"),[x,v]=p.useState(null),[k,g]=p.useState(null),P=x||k;return c?e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"MCP Pipeline Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:214,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:4}).map((a,i)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:218,columnNumber:15},this)},i,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:217,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:215,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:213,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"MCP Pipeline Tools",actions:e.jsxDEV("button",{onClick:()=>o("/mcp/queries"),className:"btn-primary text-xs",children:"Design Pipeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:231,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:228,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Compiled from successful triage runs. Each workflow is a deterministic tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:237,columnNumber:7},this),e.jsxDEV(B,{children:[e.jsxDEV(U,{label:"Search",value:l.search,onChange:a=>t("search",a),placeholder:"Server or tool name…"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:242,columnNumber:9},this),N.length>1&&e.jsxDEV(W,{label:"Server",value:l.server,onChange:a=>t("server",a),options:N},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:249,columnNumber:11},this),e.jsxDEV(W,{label:"Status",value:l.status,onChange:a=>t("status",a),options:[{value:"draft",label:"Draft"},{value:"deployed",label:"Deployed"},{value:"active",label:"Active"},{value:"archived",label:"Archived"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:256,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:241,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:`${P?"flex-1 min-w-0":"w-full"} transition-all`,children:d.length===0?e.jsxDEV(H,{title:"No pipelines yet",description:"Use the MCP Tool Designer to create your first MCP tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:272,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:277,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:280,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:283,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:276,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:275,columnNumber:15},this),e.jsxDEV("tbody",{children:d.map(a=>e.jsxDEV(ue,{server:a,expanded:f.has(a.appId),onToggle:()=>w(a.appId),onTryTool:i=>{g(null),v(i)},onWizard:i=>{i.source_workflow_id&&o(`/mcp/queries/${i.source_workflow_id}?step=4`)},onWorkbench:()=>{if(a.setId){const i=u.get(a.setId);i&&o(`/mcp/queries/${i}?mode=plan&set_id=${a.setId}&step=2`)}},onCron:i=>{v(null),g(i)},visibleTools:ce(a.workflows,l.search)},a.appId,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:288,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:286,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:274,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:270,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ae,{workflow:x,onClose:()=>v(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:316,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:315,columnNumber:11},this),k&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ne,{workflow:k,onClose:()=>g(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:325,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:324,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:269,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:227,columnNumber:5},this)}export{Ce as YamlWorkflowsPage};
2
- //# sourceMappingURL=YamlWorkflowsPage-BICF0fRO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"YamlWorkflowsPage-BICF0fRO.js","sources":["../../src/components/common/test/WorkflowTestPanel.tsx","../../src/pages/workflows/cron/CronScheduleEditor.tsx","../../src/components/common/test/CronPanel.tsx","../../src/pages/workflows/yaml-helpers.ts","../../src/pages/workflows/YamlWorkflowsPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, Play, RotateCcw, ExternalLink } from 'lucide-react';\nimport { useInvokeYamlWorkflow } from '../../../api/yaml-workflows';\nimport { useYamlActivityEvents, type ActivityStep } from '../../../hooks/useYamlActivityEvents';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport type { LTYamlWorkflowRecord, ActivityManifestEntry } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\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 LiveTimeline({ steps, manifest, isComplete }: {\n steps: ActivityStep[];\n manifest: ActivityManifestEntry[];\n isComplete: boolean;\n}) {\n const workerActivities = manifest.filter((a) => a.type === 'worker');\n const totalSteps = workerActivities.length;\n\n const merged = workerActivities.map((a) => {\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 colors,\n status: live?.status || 'pending' as const,\n error: live?.error,\n };\n });\n\n return (\n <div>\n <p className=\"text-[11px] text-text-secondary mb-3\">\n {isComplete\n ? `All ${totalSteps} steps completed`\n : `Running step ${merged.filter((s) => s.status === 'completed').length + 1} of ${totalSteps}...`}\n </p>\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-2\">\n <div className=\"flex flex-col items-center w-4 shrink-0\">\n <span className={`w-2.5 h-2.5 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 <div className={isLast ? '' : 'pb-3'}>\n <p className={`text-[11px] 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 }`}>{step.title}</p>\n {step.toolName && (\n <span className=\"text-[9px] text-text-tertiary font-mono\">{step.toolName}</span>\n )}\n {step.error && (\n <p className=\"text-[9px] text-status-error mt-0.5\">{step.error}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface WorkflowTestPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function WorkflowTestPanel({ workflow, onClose }: WorkflowTestPanelProps) {\n const invokeMutation = useInvokeYamlWorkflow();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n const [activeJobId, setActiveJobId] = useState<string | null>(null);\n const [completedResult, setCompletedResult] = useState<{ jobId: string } | null>(null);\n const { steps, isComplete } = useYamlActivityEvents(activeJobId);\n\n useEffect(() => {\n setActiveJobId(null);\n setCompletedResult(null);\n setJsonError('');\n invokeMutation.reset();\n const skeleton = buildSkeleton(workflow.input_schema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (isComplete && activeJobId) {\n const jobId = activeJobId;\n const timer = setTimeout(() => {\n setCompletedResult({ jobId });\n setActiveJobId(null);\n }, 800);\n return () => clearTimeout(timer);\n }\n }, [isComplete, activeJobId]);\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = async () => {\n setJsonError('');\n setCompletedResult(null);\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n try {\n const result = await invokeMutation.mutateAsync({\n id: workflow.id,\n data: parsed,\n sync: false,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n if (result.job_id) setActiveJobId(result.job_id);\n } catch { /* error shown in panel */ }\n };\n\n const isRunning = !!activeJobId;\n const ns = workflow.app_id || 'longtail';\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{workflow.app_id}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</code>\n </div>\n <button onClick={() => { if (!isRunning) onClose(); }} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n {isRunning ? (\n <LiveTimeline steps={steps} manifest={workflow.activity_manifest} isComplete={isComplete} />\n ) : completedResult ? (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 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 <p className=\"text-xs font-medium text-status-success\">Workflow completed</p>\n </div>\n <div className=\"flex items-center justify-between\">\n <Link\n to={`/mcp/executions/${encodeURIComponent(completedResult.jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} /> View execution\n </Link>\n <button\n onClick={() => setCompletedResult(null)}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <RotateCcw size={12} /> Run again\n </button>\n </div>\n </div>\n ) : (\n <>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {workflow.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{workflow.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\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\">Input</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).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) => setFields({ ...fields, [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 { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\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) => setFields({ ...fields, [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 {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {invokeMutation.isError && (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">\n {invokeMutation.error instanceof Error ? invokeMutation.error.message : 'Invocation failed'}\n </p>\n </div>\n )}\n <button\n onClick={handleRun}\n disabled={invokeMutation.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {invokeMutation.isPending ? 'Starting...' : <><Play size={12} /> Run</>}\n </button>\n </>\n )}\n </div>\n </div>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { describeCron, COMMON_PATTERNS } from './helpers';\n\ninterface CronScheduleEditorProps {\n cronInput: string;\n setCronInput: (value: string) => void;\n setCron: { isPending: boolean; isSuccess: boolean; error: Error | null; reset: () => void };\n hasCronSchedule: boolean;\n onSave: () => void;\n onClear: () => void;\n}\n\nexport function CronScheduleEditor({\n cronInput,\n setCronInput,\n setCron,\n hasCronSchedule,\n onSave,\n onClear,\n}: CronScheduleEditorProps) {\n return (\n <>\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => {\n setCronInput(e.target.value);\n setCron.reset();\n }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button\n onClick={onSave}\n disabled={setCron.isPending}\n className=\"btn-primary text-xs shrink-0\"\n >\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {hasCronSchedule && (\n <button\n onClick={onClear}\n disabled={setCron.isPending}\n className=\"btn-ghost text-xs text-status-error shrink-0\"\n >\n Clear\n </button>\n )}\n </div>\n\n {setCron.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>\n )}\n {setCron.error && (\n <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>\n )}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => {\n setCronInput(expr);\n setCron.reset();\n }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">\n {expr}\n </code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { X } from 'lucide-react';\nimport { useSetYamlCron, useClearYamlCron } from '../../../api/yaml-workflows';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { CronScheduleEditor } from '../../../pages/workflows/cron/CronScheduleEditor';\nimport { SectionLabel } from '../layout/SectionLabel';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\nimport type { LTYamlWorkflowRecord } from '../../../api/types';\n\ninterface CronPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function CronPanel({ workflow, onClose }: CronPanelProps) {\n const setCronMutation = useSetYamlCron();\n const clearCronMutation = useClearYamlCron();\n\n const [cronInput, setCronInput] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('{}');\n\n // Sync state when workflow changes\n useEffect(() => {\n setCronInput(workflow.cron_schedule ?? '');\n setExecuteAs(workflow.execute_as ?? '');\n setCronMutation.reset();\n clearCronMutation.reset();\n\n const envelope = workflow.cron_envelope || {};\n const skeleton = Object.keys(envelope).length > 0\n ? envelope\n : buildSkeleton(workflow.input_schema);\n setFields(skeleton as Record<string, any>);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleSave = () => {\n let envelope: Record<string, unknown>;\n if (jsonMode) {\n try { envelope = JSON.parse(argsJson); } catch { return; }\n } else {\n envelope = { ...fields };\n }\n\n setCronMutation.mutate({\n id: workflow.id,\n cron_schedule: cronInput.trim(),\n cron_envelope: Object.keys(envelope).length > 0 ? envelope : null,\n execute_as: executeAs || null,\n });\n };\n\n const handleClear = () => {\n clearCronMutation.mutate(workflow.id, {\n onSuccess: () => {\n setCronInput('');\n },\n });\n };\n\n // Combine mutation states for CronScheduleEditor\n const combinedMutation = {\n isPending: setCronMutation.isPending || clearCronMutation.isPending,\n isSuccess: setCronMutation.isSuccess || clearCronMutation.isSuccess,\n error: setCronMutation.error || clearCronMutation.error,\n reset: () => { setCronMutation.reset(); clearCronMutation.reset(); },\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">Cron Schedule</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n <CronScheduleEditor\n cronInput={cronInput}\n setCronInput={setCronInput}\n setCron={combinedMutation}\n hasCronSchedule={!!workflow.cron_schedule}\n onSave={handleSave}\n onClear={handleClear}\n />\n\n {/* Default input for cron invocations */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <SectionLabel>Default Input</SectionLabel>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[200px] overflow-y-auto\">\n {Object.entries(fields).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) => setFields({ ...fields, [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 { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\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) => setFields({ ...fields, [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 {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface ProcessServer {\n appId: string;\n workflows: LTYamlWorkflowRecord[];\n toolCount: number;\n status: string;\n updatedAt: string;\n appVersion: string;\n setId: string | null;\n}\n\n// ── Grouping & filtering helpers ──────────────────────────────────────────────\n\nexport function groupByAppId(workflows: LTYamlWorkflowRecord[]): ProcessServer[] {\n const map = new Map<string, LTYamlWorkflowRecord[]>();\n for (const wf of workflows) {\n const list = map.get(wf.app_id) ?? [];\n list.push(wf);\n map.set(wf.app_id, list);\n }\n\n return [...map.entries()].map(([appId, wfs]) => {\n const statusPriority: Record<string, number> = { active: 0, deployed: 1, draft: 2, archived: 3 };\n const bestStatus = wfs.reduce(\n (best, wf) => ((statusPriority[wf.status] ?? 9) < (statusPriority[best] ?? 9) ? wf.status : best),\n wfs[0].status,\n );\n const latest = wfs.reduce((max, wf) => (wf.updated_at > max ? wf.updated_at : max), wfs[0].updated_at);\n\n const maxAppVersion = wfs.reduce((max, wf) => {\n const v = parseInt(wf.app_version || '0', 10);\n return v > max ? v : max;\n }, 0);\n // Use the set_id from any workflow in the group (they all share the same set)\n const setId = wfs.find(wf => wf.set_id)?.set_id || null;\n\n return {\n appId,\n workflows: wfs,\n toolCount: wfs.length,\n status: bestStatus,\n updatedAt: latest,\n appVersion: String(maxAppVersion),\n setId,\n };\n });\n}\n\n/** Client-side search: match server name or any tool's graph_topic/description */\nexport function matchesSearch(server: ProcessServer, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.appId.toLowerCase().includes(q)) return true;\n return server.workflows.some(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(workflows: LTYamlWorkflowRecord[], search: string): LTYamlWorkflowRecord[] {\n if (!search) return workflows;\n const q = search.toLowerCase();\n return workflows.filter(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ChevronRight, Clock, Play, Wand2, Wrench } from 'lucide-react';\nimport { useYamlWorkflows } from '../../api/yaml-workflows';\nimport { useWorkflowSets } from '../../api/workflow-sets';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../hooks/useExpandedRows';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { WorkflowTestPanel } from '../../components/common/test/WorkflowTestPanel';\nimport { CronPanel } from '../../components/common/test/CronPanel';\nimport { groupByAppId, matchesSearch, filterTools, type ProcessServer } from './yaml-helpers';\nimport type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Tool row (individual workflow inside expanded server) ─────────────────────\n\nfunction ToolRow({ wf, onTry, onWizard, onCron }: {\n wf: LTYamlWorkflowRecord;\n onTry: () => void;\n onWizard: () => void;\n onCron: () => void;\n}) {\n const canTry = wf.status === 'active';\n const hasCron = !!wf.cron_schedule;\n\n return (\n <div onClick={canTry ? onTry : undefined} className={`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${canTry ? 'cursor-pointer' : ''}`}>\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <code className=\"text-xs font-mono text-accent-primary truncate\">{wf.graph_topic}</code>\n <span className=\"text-[9px] text-text-tertiary font-mono shrink-0\">v{wf.content_version}</span>\n </div>\n {wf.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{wf.description}</p>\n )}\n </div>\n <div className=\"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0\">\n {new Date(wf.updated_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}\n </div>\n <div className=\"w-28 px-6 py-2 whitespace-nowrap shrink-0\">\n <StatusBadge status={wf.status} />\n </div>\n <div className=\"w-20 px-3 py-2 flex justify-end gap-2 shrink-0\">\n {canTry && (\n <button\n onClick={(e) => { e.stopPropagation(); onTry(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Test tool\"\n >\n <Play className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n <button\n onClick={(e) => { e.stopPropagation(); onCron(); }}\n className={hasCron\n ? 'text-status-success'\n : 'opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent'}\n title={hasCron ? `Cron: ${wf.cron_schedule}` : 'Schedule cron'}\n >\n <Clock className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n {wf.source_workflow_id && (\n <button\n onClick={(e) => { e.stopPropagation(); onWizard(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"MCP Tool Compiler\"\n >\n <Wand2 className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── Server row (expandable namespace) ────────────────────────────────────────\n\nfunction ServerRow({\n server,\n expanded,\n onToggle,\n onTryTool,\n onWizard,\n onWorkbench,\n onCron,\n visibleTools,\n}: {\n server: ProcessServer;\n expanded: boolean;\n onToggle: () => void;\n onTryTool: (wf: LTYamlWorkflowRecord) => void;\n onWizard: (wf: LTYamlWorkflowRecord) => void;\n onWorkbench: () => void;\n onCron: (wf: LTYamlWorkflowRecord) => void;\n visibleTools: LTYamlWorkflowRecord[];\n}) {\n return (\n <>\n <tr\n onClick={onToggle}\n className=\"group/row border-b transition-colors duration-100 cursor-pointer row-hover\"\n >\n {/* Name + version */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} text-text-tertiary`}>\n <ChevronRight size={14} />\n </span>\n <p className=\"text-sm text-text-primary font-medium font-mono\">{server.appId}</p>\n <span className=\"text-[9px] text-text-tertiary font-mono\">app v{server.appVersion}</span>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28 whitespace-nowrap\">\n <StatusBadge status={server.status} />\n </td>\n\n {/* Tool count + workbench */}\n <td className=\"w-20 text-center\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {server.toolCount}\n </span>\n {server.setId && (\n <button\n onClick={(e) => { e.stopPropagation(); onWorkbench(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Open workbench\"\n >\n <Wrench className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </td>\n </tr>\n\n {/* Expanded tool rows — no sub-header, aligned to outer columns */}\n <tr>\n <td colSpan={5} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((wf) => (\n <ToolRow key={wf.id} wf={wf} onTry={() => onTryTool(wf)} onWizard={() => onWizard(wf)} onCron={() => onCron(wf)} />\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n </>\n );\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function YamlWorkflowsPage() {\n const navigate = useNavigate();\n const { filters, setFilter } = useFilterParams({\n filters: { status: '', server: '', search: '' },\n });\n\n // Fetch a larger page to get all workflows for grouping\n const { data, isLoading } = useYamlWorkflows({\n status: (filters.status || undefined) as any,\n app_id: filters.server || undefined,\n search: filters.search || undefined,\n limit: 200,\n offset: 0,\n });\n\n const workflows = data?.workflows ?? [];\n\n // Fetch workflow sets to resolve workbench links (set_id → planner workflow ID)\n const { data: setsData } = useWorkflowSets({ limit: 100 });\n const setSourceMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of setsData?.sets ?? []) {\n if (s.source_workflow_id) map.set(s.id, s.source_workflow_id);\n }\n return map;\n }, [setsData?.sets]);\n\n const servers = useMemo(() => groupByAppId(workflows), [workflows]);\n\n // Build server options from unfiltered results; re-derive when status/search change\n const serverOptions = useMemo(() => {\n const ids = [...new Set(workflows.map((wf) => wf.app_id))].sort();\n return ids.map((id) => ({ value: id, label: id }));\n }, [workflows]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:yaml-workflows');\n const [tryWorkflow, setTryWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n const [cronWorkflow, setCronWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n\n // Active sidebar: test panel or cron panel (mutually exclusive)\n const sidebarWorkflow = tryWorkflow || cronWorkflow;\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Pipeline Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Pipeline Tools\"\n actions={\n <button onClick={() => navigate('/mcp/queries')} className=\"btn-primary text-xs\">\n Design Pipeline\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Compiled from successful triage runs. Each workflow is a deterministic tool.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name…\"\n />\n {serverOptions.length > 1 && (\n <FilterSelect\n label=\"Server\"\n value={filters.server}\n onChange={(v) => setFilter('server', v)}\n options={serverOptions}\n />\n )}\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'draft', label: 'Draft' },\n { value: 'deployed', label: 'Deployed' },\n { value: 'active', label: 'Active' },\n { value: 'archived', label: 'Archived' },\n ]}\n />\n </FilterBar>\n\n <div className=\"flex gap-0\">\n <div className={`${sidebarWorkflow ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No pipelines yet\" description=\"Use the MCP Tool Designer to create your first MCP tool.\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-20\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.appId}\n server={server}\n expanded={expandedIds.has(server.appId)}\n onToggle={() => toggleExpand(server.appId)}\n onTryTool={(wf) => { setCronWorkflow(null); setTryWorkflow(wf); }}\n onWizard={(wf) => {\n if (wf.source_workflow_id) navigate(`/mcp/queries/${wf.source_workflow_id}?step=4`);\n }}\n onWorkbench={() => {\n if (server.setId) {\n const plannerWfId = setSourceMap.get(server.setId);\n if (plannerWfId) {\n navigate(`/mcp/queries/${plannerWfId}?mode=plan&set_id=${server.setId}&step=2`);\n }\n }\n }}\n onCron={(wf) => { setTryWorkflow(null); setCronWorkflow(wf); }}\n visibleTools={filterTools(server.workflows, filters.search)}\n />\n ))}\n </tbody>\n </table>\n )}\n </div>\n\n {tryWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <WorkflowTestPanel\n workflow={tryWorkflow}\n onClose={() => setTryWorkflow(null)}\n />\n </div>\n )}\n\n {cronWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <CronPanel\n workflow={cronWorkflow}\n onClose={() => setCronWorkflow(null)}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["TOOL_SOURCE_COLORS","LiveTimeline","steps","manifest","isComplete","workerActivities","a","totalSteps","merged","live","s","source","colors","jsxDEV","step","idx","isLast","WorkflowTestPanel","workflow","onClose","invokeMutation","useInvokeYamlWorkflow","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","activeJobId","setActiveJobId","completedResult","setCompletedResult","useYamlActivityEvents","useEffect","skeleton","buildSkeleton","jobId","timer","toggleMode","handleRun","parsed","result","isRunning","ns","X","Link","ExternalLink","RotateCcw","Fragment","RunAsSelector","e","key","value","Play","CronScheduleEditor","cronInput","setCronInput","setCron","hasCronSchedule","onSave","onClear","SectionLabel","describeCron","COMMON_PATTERNS","expr","desc","CronPanel","setCronMutation","useSetYamlCron","clearCronMutation","useClearYamlCron","envelope","handleSave","handleClear","combinedMutation","groupByAppId","workflows","map","wf","list","appId","wfs","statusPriority","bestStatus","best","latest","max","maxAppVersion","v","setId","_a","matchesSearch","server","search","q","_b","filterTools","ToolRow","onTry","onWizard","onCron","canTry","hasCron","StatusBadge","Clock","Wand2","ServerRow","expanded","onToggle","onTryTool","onWorkbench","visibleTools","ChevronRight","Wrench","YamlWorkflowsPage","navigate","useNavigate","filters","setFilter","useFilterParams","data","isLoading","useYamlWorkflows","setsData","useWorkflowSets","setSourceMap","useMemo","servers","serverOptions","id","filteredServers","expandedIds","toggleExpand","useExpandedRows","tryWorkflow","setTryWorkflow","cronWorkflow","setCronWorkflow","sidebarWorkflow","PageHeader","_","FilterBar","FilterInput","FilterSelect","EmptyState","plannerWfId"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{i as a,j as o}from"./index-Cmgrk7PQ.js";import{B as i}from"./BotPicker-B8Uvw9Si.js";import{a4 as c,a5 as l}from"./vendor-icons-AFGxSeQS.js";function N({selected:e,onChange:s}){const{user:r,isSuperAdmin:n,hasRoleType:m}=a(),t=n||m("admin");return o.jsxDEV("div",{className:"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20",children:t?o.jsxDEV("div",{className:"space-y-1",children:[o.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Run as"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:18,columnNumber:11},this),o.jsxDEV(i,{selected:e,onChange:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:17,columnNumber:9},this):o.jsxDEV("div",{className:"flex items-center gap-1.5",children:e?o.jsxDEV(o.Fragment,{children:[o.jsxDEV(c,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:25,columnNumber:15},this),o.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",o.jsxDEV("span",{className:"font-medium text-accent font-mono",children:e},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:27,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:26,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:24,columnNumber:13},this):o.jsxDEV(o.Fragment,{children:[o.jsxDEV(l,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:32,columnNumber:15},this),o.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",o.jsxDEV("span",{className:"font-medium text-accent",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.userId)||"you"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:34,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:33,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:31,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:22,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:15,columnNumber:5},this)}const b=["Describe","Discover","Compile","Deploy","Test","Verify"];function x(e){return e?e.status==="completed"?"completed":e.status==="failed"?"failed":"in_progress":"pending"}function h(e){const s=e.match(/```json\s*([\s\S]*?)```/)||e.match(/\{[\s\S]*?\n\}/);if(!s)return null;try{return JSON.parse((s[1]??s[0]).trim())}catch{return null}}const u=new Set(["token","authorization","bearer_token","access_token","api_token"]);function S(e){if(!(e!=null&&e.properties))return{};const s={},r=sessionStorage.getItem("lt_token")||"";for(const[n,m]of Object.entries(e.properties)){const t=m;t.default!==void 0?s[n]=t.default:u.has(n.toLowerCase())&&t.type==="string"?s[n]=r:t.type==="string"?s[n]="":t.type==="number"||t.type==="integer"?s[n]=t.minimum??0:t.type==="boolean"?s[n]=!1:t.type==="object"?s[n]={}:t.type==="array"?s[n]=[]:s[n]=null}return s}export{N as R,b as S,S as b,h as e,x as m};
2
- //# sourceMappingURL=helpers-rMEcLwKs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers-rMEcLwKs.js","sources":["../../src/components/common/form/RunAsSelector.tsx","../../src/pages/mcp/mcp-query-detail/helpers.ts"],"sourcesContent":["import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from './BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\n\ninterface RunAsSelectorProps {\n selected: string;\n onChange: (botExternalId: string) => void;\n}\n\nexport function RunAsSelector({ selected, onChange }: RunAsSelectorProps) {\n const { user, isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n\n return (\n <div className=\"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20\">\n {isAdmin ? (\n <div className=\"space-y-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Run as</label>\n <BotPicker selected={selected} onChange={onChange} />\n </div>\n ) : (\n <div className=\"flex items-center gap-1.5\">\n {selected ? (\n <>\n <Bot className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent font-mono\">{selected}</span>\n </span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent\">{user?.displayName || user?.userId || 'you'}</span>\n </span>\n </>\n )}\n </div>\n )}\n </div>\n );\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 = ['Describe', 'Discover', 'Compile', 'Deploy', 'Test', 'Verify'] as const;\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\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// ── Helpers migrated from yaml-workflow-detail ───────────────────────────────\n\nexport type Section = 'invoke' | 'tools' | 'config';\n\n/** Keys that should auto-fill with the current session token when building test input skeletons. */\nconst TOKEN_FIELD_NAMES = new Set(['token', 'authorization', 'bearer_token', 'access_token', 'api_token']);\n\nexport function buildSkeleton(schema: Record<string, any>): Record<string, any> {\n if (!schema?.properties) return {};\n const result: Record<string, any> = {};\n // Auto-fill token fields with the current session token so test invocations\n // always use a fresh credential instead of requiring manual paste.\n const sessionToken = sessionStorage.getItem('lt_token') || '';\n for (const [key, prop] of Object.entries(schema.properties)) {\n const p = prop as any;\n if (p.default !== undefined) result[key] = p.default;\n else if (TOKEN_FIELD_NAMES.has(key.toLowerCase()) && p.type === 'string') result[key] = sessionToken;\n else if (p.type === 'string') result[key] = '';\n else if (p.type === 'number' || p.type === 'integer') result[key] = p.minimum ?? 0;\n else if (p.type === 'boolean') result[key] = false;\n else if (p.type === 'object') result[key] = {};\n else if (p.type === 'array') result[key] = [];\n else result[key] = null;\n }\n return result;\n}\n\nexport function inferFieldType(schemaProp: any): string {\n if (!schemaProp) return 'string';\n return schemaProp.type || 'string';\n}\n\nexport const metadataLabels: Record<string, string> = {\n app: 'MCP Workflow Server', tpc: 'MCP Workflow Tool', vrs: 'Version', ngn: 'Engine ID',\n jid: 'Job ID', gid: 'Run ID', aid: 'Activity ID', ts: 'Time Series',\n jc: 'Created', ju: 'Updated', trc: 'Trace ID', js: 'Job Status',\n};\n\nexport const jobStatusLabels: Record<number, string> = { 0: 'Completed', 1: 'Pending', 2: 'Error' };\n\nexport function parseCompactTimestamp(val: string): string {\n const match = val.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)$/);\n if (!match) return val;\n const [, y, mo, d, h, mi, s, ms] = match;\n return `${y}-${mo}-${d} ${h}:${mi}:${s}.${ms}`;\n}\n\nexport function formatMetadataValue(key: string, value: unknown): string {\n if (key === 'js' && typeof value === 'number') return jobStatusLabels[value] ?? `Unknown (${value})`;\n if ((key === 'jc' || key === 'ju') && typeof value === 'string') return parseCompactTimestamp(value);\n return String(value ?? '');\n}\n\nexport function sourceLabel(s: string | undefined) {\n if (s === 'llm') return 'LLM';\n if (s === 'db') return 'DB';\n return 'MCP';\n}\n\nexport function sourceColor(s: string | undefined) {\n if (s === 'llm') return 'bg-purple-500/10 text-purple-400 border-purple-500/20';\n return 'bg-accent-primary/10 text-accent border-accent-primary/20';\n}\n"],"names":["RunAsSelector","selected","onChange","user","isSuperAdmin","hasRoleType","useAuth","isAdmin","jsxDEV","BotPicker","Fragment","Bot","UserCircle","STEP_LABELS_BASE","mapStatus","exec","extractJsonFromSummary","summary","match","TOKEN_FIELD_NAMES","buildSkeleton","schema","result","sessionToken","key","prop","p"],"mappings":"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"}