@hotmeshio/long-tail 0.1.14 → 0.1.16

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 (360) 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 +6 -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} +99 -380
  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/index.d.ts +1 -1
  55. package/build/lib/cli/auth.d.ts +23 -0
  56. package/build/lib/cli/auth.js +167 -0
  57. package/build/lib/cli/client.d.ts +6 -0
  58. package/build/lib/cli/client.js +31 -0
  59. package/build/lib/cli/commands/escalations.d.ts +19 -0
  60. package/build/lib/cli/commands/escalations.js +69 -0
  61. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  62. package/build/lib/cli/commands/knowledge.js +87 -0
  63. package/build/lib/cli/commands/mcp.d.ts +8 -0
  64. package/build/lib/cli/commands/mcp.js +33 -0
  65. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  66. package/build/lib/cli/commands/pipelines.js +67 -0
  67. package/build/lib/cli/commands/status.d.ts +1 -0
  68. package/build/lib/cli/commands/status.js +28 -0
  69. package/build/lib/cli/commands/users.d.ts +7 -0
  70. package/build/lib/cli/commands/users.js +25 -0
  71. package/build/lib/cli/commands/workflows.d.ts +16 -0
  72. package/build/lib/cli/commands/workflows.js +104 -0
  73. package/build/lib/cli/compile.d.ts +2 -0
  74. package/build/lib/cli/compile.js +165 -0
  75. package/build/lib/cli/format.d.ts +23 -0
  76. package/build/lib/cli/format.js +94 -0
  77. package/build/lib/cli/init.d.ts +1 -0
  78. package/build/lib/cli/init.js +61 -0
  79. package/build/lib/cli/output.d.ts +27 -0
  80. package/build/lib/cli/output.js +126 -0
  81. package/build/lib/cli/scanner.d.ts +10 -0
  82. package/build/lib/cli/scanner.js +164 -0
  83. package/build/lib/cli/types.d.ts +16 -0
  84. package/build/lib/cli/types.js +2 -0
  85. package/build/lib/db/schemas/schemas/001_schema.sql +485 -0
  86. package/build/lib/db/schemas/schemas/002_seed.sql +92 -0
  87. package/build/lib/events/socketio.d.ts +12 -0
  88. package/build/lib/events/socketio.js +24 -1
  89. package/build/lib/logger/index.d.ts +0 -9
  90. package/build/lib/logger/index.js +9 -4
  91. package/build/lib/storage/index.js +2 -2
  92. package/build/routes/file-browser.js +14 -0
  93. package/build/routes/index.js +4 -0
  94. package/build/routes/knowledge.d.ts +2 -0
  95. package/build/routes/knowledge.js +141 -0
  96. package/build/routes/nats-credentials.d.ts +2 -0
  97. package/build/routes/nats-credentials.js +22 -0
  98. package/build/routes/yaml-workflows/crud.js +9 -0
  99. package/build/sdk/index.d.ts +17 -0
  100. package/build/sdk/index.js +19 -0
  101. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  102. package/build/services/mcp/client/connection-dispatch.js +78 -0
  103. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  104. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  105. package/build/services/mcp/client/connection-test.d.ts +10 -0
  106. package/build/services/mcp/client/connection-test.js +49 -0
  107. package/build/services/mcp/client/connection.d.ts +3 -68
  108. package/build/services/mcp/client/connection.js +15 -393
  109. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  110. package/build/services/mcp/server-lifecycle.js +49 -0
  111. package/build/services/mcp/server-tools.d.ts +13 -0
  112. package/build/services/mcp/server-tools.js +287 -0
  113. package/build/services/mcp/server.d.ts +2 -26
  114. package/build/services/mcp/server.js +7 -315
  115. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  116. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  117. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  118. package/build/services/yaml-workflow/db-versions.js +76 -0
  119. package/build/services/yaml-workflow/db.d.ts +3 -13
  120. package/build/services/yaml-workflow/db.js +15 -71
  121. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  122. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  123. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  124. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  125. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  126. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  127. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  128. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  129. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  130. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  131. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  132. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  133. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  134. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  135. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  136. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  137. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  138. package/build/services/yaml-workflow/workers/register.js +4 -2
  139. package/build/start/adapters.js +4 -1
  140. package/build/start/socket-auth.d.ts +13 -0
  141. package/build/start/socket-auth.js +32 -0
  142. package/build/start/workers.js +6 -5
  143. package/build/system/activities/file-storage.d.ts +4 -0
  144. package/build/system/activities/file-storage.js +7 -1
  145. package/build/system/activities/knowledge.d.ts +23 -0
  146. package/build/system/activities/knowledge.js +50 -10
  147. package/build/system/activities/sql.d.ts +3 -0
  148. package/build/system/activities/sql.js +25 -1
  149. package/build/system/mcp-servers/file-storage.js +3 -1
  150. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  151. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  152. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  153. package/build/system/mcp-servers/human-queue.js +9 -51
  154. package/build/system/mcp-servers/knowledge.js +43 -9
  155. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  156. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  157. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  158. package/build/system/workflows/mcp-triage/index.js +17 -75
  159. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
  160. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
  161. package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
  162. package/build/tsconfig.tsbuildinfo +1 -1
  163. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-Bprul9Eb.js} +2 -2
  164. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-Bprul9Eb.js.map} +1 -1
  165. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +2 -0
  166. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js.map +1 -0
  167. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DcvILNUf.js} +2 -2
  168. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DcvILNUf.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-BWPbzgEe.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-BWPbzgEe.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-Cy6KVLfC.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-Cy6KVLfC.js.map} +1 -1
  173. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-CRED8hvk.js} +2 -2
  174. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-CRED8hvk.js.map} +1 -1
  175. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-BUdvxiE3.js} +2 -2
  176. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-BUdvxiE3.js.map} +1 -1
  177. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-eOk2EqQ5.js} +2 -2
  178. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-eOk2EqQ5.js.map} +1 -1
  179. package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-bd2PTBJd.js} +2 -2
  180. package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-bd2PTBJd.js.map} +1 -1
  181. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-BGo8vyus.js} +2 -2
  182. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-BGo8vyus.js.map} +1 -1
  183. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-BygtU-Rh.js} +2 -2
  184. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-BygtU-Rh.js.map} +1 -1
  185. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DUEcN5MP.js} +2 -2
  186. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DUEcN5MP.js.map} +1 -1
  187. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-CmFhswLW.js} +2 -2
  188. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-CmFhswLW.js.map} +1 -1
  189. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-BQNzsd3A.js} +2 -2
  190. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-BQNzsd3A.js.map} +1 -1
  191. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-OWOn-HiC.js} +2 -2
  192. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-OWOn-HiC.js.map} +1 -1
  193. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-OkEzvClD.js} +2 -2
  194. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-OkEzvClD.js.map} +1 -1
  195. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +5 -0
  196. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +1 -0
  197. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-BAuOf5TL.js} +2 -2
  198. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-BAuOf5TL.js.map} +1 -1
  199. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-DMeiG4i_.js} +2 -2
  200. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-DMeiG4i_.js.map} +1 -1
  201. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-CG3cNJh8.js} +2 -2
  202. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-CG3cNJh8.js.map} +1 -1
  203. package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-Dir9Rlnx.js} +2 -2
  204. package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-Dir9Rlnx.js.map} +1 -1
  205. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-OqWC6Azy.js} +2 -2
  206. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-OqWC6Azy.js.map} +1 -1
  207. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-FJIemmrC.js} +2 -2
  208. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-FJIemmrC.js.map} +1 -1
  209. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-Br5y9qNO.js} +2 -2
  210. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-Br5y9qNO.js.map} +1 -1
  211. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-C7D5d_HY.js} +2 -2
  212. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-C7D5d_HY.js.map} +1 -1
  213. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-DZIP6grw.js} +2 -2
  214. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-DZIP6grw.js.map} +1 -1
  215. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-BQoPYkeB.js} +2 -2
  216. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-BQoPYkeB.js.map} +1 -1
  217. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-D6nMxMvp.js} +2 -2
  218. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-D6nMxMvp.js.map} +1 -1
  219. package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +2 -0
  220. package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CwLnJFhy.js.map} +1 -1
  221. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-JqgAB0p3.js} +2 -2
  222. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-JqgAB0p3.js.map} +1 -1
  223. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +2 -0
  224. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js.map +1 -0
  225. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-B-WLhOaH.js} +2 -2
  226. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-B-WLhOaH.js.map} +1 -1
  227. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-DVCf2ncM.js} +2 -2
  228. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-DVCf2ncM.js.map} +1 -1
  229. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-D9Xvdf18.js} +2 -2
  230. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-D9Xvdf18.js.map} +1 -1
  231. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-CJHMzYJj.js} +2 -2
  232. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-CJHMzYJj.js.map} +1 -1
  233. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +2 -0
  234. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +1 -0
  235. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-DcPnUnSJ.js} +2 -2
  236. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-DcPnUnSJ.js.map} +1 -1
  237. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DftmYWD7.js} +2 -2
  238. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DftmYWD7.js.map} +1 -1
  239. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-BzduBqwy.js} +2 -2
  240. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-BzduBqwy.js.map} +1 -1
  241. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-DeewV4Gp.js} +2 -2
  242. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-DeewV4Gp.js.map} +1 -1
  243. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-DJZq-e4R.js} +2 -2
  244. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-DJZq-e4R.js.map} +1 -1
  245. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Dx5uwGfS.js} +2 -2
  246. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Dx5uwGfS.js.map} +1 -1
  247. package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-CnGk7MgL.js} +2 -2
  248. package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-CnGk7MgL.js.map} +1 -1
  249. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CPQ0fIwf.js} +2 -2
  250. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CPQ0fIwf.js.map} +1 -1
  251. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-BrD5d1AG.js} +2 -2
  252. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-BrD5d1AG.js.map} +1 -1
  253. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-BzjhABZP.js} +2 -2
  254. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-BzjhABZP.js.map} +1 -1
  255. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-lBp2E6rN.js} +2 -2
  256. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-lBp2E6rN.js.map} +1 -1
  257. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +2 -0
  258. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +1 -0
  259. package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-fc_O_YIq.js} +2 -2
  260. package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-fc_O_YIq.js.map} +1 -1
  261. package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-BYhLYHBz.js} +2 -2
  262. package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-BYhLYHBz.js.map} +1 -1
  263. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-DjJyuC1g.js} +2 -2
  264. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-DjJyuC1g.js.map} +1 -1
  265. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CQG3Rh2y.js} +2 -2
  266. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CQG3Rh2y.js.map} +1 -1
  267. package/dashboard/dist/assets/{index-DX6zxr6t.js → index-2nBhR7Dg.js} +2 -2
  268. package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-2nBhR7Dg.js.map} +1 -1
  269. package/dashboard/dist/assets/index-4IUoh_hd.js +2 -0
  270. package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-4IUoh_hd.js.map} +1 -1
  271. package/dashboard/dist/assets/index-B2CqPzLK.js +2 -0
  272. package/dashboard/dist/assets/index-B2CqPzLK.js.map +1 -0
  273. package/dashboard/dist/assets/index-B78xalb4.js +2 -0
  274. package/dashboard/dist/assets/index-B78xalb4.js.map +1 -0
  275. package/dashboard/dist/assets/index-BI8r69O_.js +2 -0
  276. package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-BI8r69O_.js.map} +1 -1
  277. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  278. package/dashboard/dist/assets/{index-BmVCyB6C.js → index-CUqCBBZG.js} +2 -2
  279. package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-CUqCBBZG.js.map} +1 -1
  280. package/dashboard/dist/assets/index-D51PaQZY.js +2 -0
  281. package/dashboard/dist/assets/index-D51PaQZY.js.map +1 -0
  282. package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-DNtXXy1o.js} +2 -2
  283. package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-DNtXXy1o.js.map} +1 -1
  284. package/dashboard/dist/assets/{index-DNytWfSZ.js → index-DR4qQvlW.js} +2 -2
  285. package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-DR4qQvlW.js.map} +1 -1
  286. package/dashboard/dist/assets/index-Dh0PCbR-.js +15 -0
  287. package/dashboard/dist/assets/index-Dh0PCbR-.js.map +1 -0
  288. package/dashboard/dist/assets/index-KYpLvJKB.js +5 -0
  289. package/dashboard/dist/assets/index-KYpLvJKB.js.map +1 -0
  290. package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-sNrqYt0Q.js} +73 -73
  291. package/dashboard/dist/assets/index-sNrqYt0Q.js.map +1 -0
  292. package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-D2XfRh8v.js} +2 -2
  293. package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-D2XfRh8v.js.map} +1 -1
  294. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-CIx_mIC7.js} +2 -2
  295. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-CIx_mIC7.js.map} +1 -1
  296. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-C9_J4LIH.js} +2 -2
  297. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-C9_J4LIH.js.map} +1 -1
  298. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-BwMljx6f.js} +2 -2
  299. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-BwMljx6f.js.map} +1 -1
  300. package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-Bd_sTV6I.js} +2 -2
  301. package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-Bd_sTV6I.js.map} +1 -1
  302. package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-BCb8eFyA.js} +2 -2
  303. package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-BCb8eFyA.js.map} +1 -1
  304. package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-Bq54qGGq.js} +2 -2
  305. package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-Bq54qGGq.js.map} +1 -1
  306. package/dashboard/dist/assets/useEventHooks-BTbGf536.js +2 -0
  307. package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BTbGf536.js.map} +1 -1
  308. package/dashboard/dist/assets/useYamlActivityEvents-CsYP09W5.js +2 -0
  309. package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-CsYP09W5.js.map} +1 -1
  310. package/dashboard/dist/assets/{users-CxIMy_xw.js → users-BTBhafGc.js} +2 -2
  311. package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-BTBhafGc.js.map} +1 -1
  312. package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
  313. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  314. package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-BkzA4ahe.js} +2 -2
  315. package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-BkzA4ahe.js.map} +1 -1
  316. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-Cs0EYp0F.js} +2 -2
  317. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-Cs0EYp0F.js.map} +1 -1
  318. package/dashboard/dist/index.html +3 -3
  319. package/docs/api/http/file-browser.md +101 -0
  320. package/docs/api/http/knowledge.md +203 -0
  321. package/docs/api/http/settings.md +6 -4
  322. package/docs/api/sdk/files.md +68 -0
  323. package/docs/api/sdk/knowledge.md +126 -0
  324. package/docs/api/sdk/settings.md +3 -2
  325. package/docs/cli.md +171 -0
  326. package/docs/compilation.md +16 -0
  327. package/docs/compiler.md +311 -0
  328. package/docs/events.md +19 -0
  329. package/docs/workflows.md +19 -0
  330. package/package.json +13 -2
  331. package/build/api/escalations.d.ts +0 -271
  332. package/build/api/escalations.js +0 -932
  333. package/build/api/workflows.d.ts +0 -158
  334. package/build/api/workflows.js +0 -414
  335. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
  336. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
  337. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
  338. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
  339. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
  340. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
  341. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
  342. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
  343. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
  344. package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
  345. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
  346. package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
  347. package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
  348. package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
  349. package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
  350. package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
  351. package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
  352. package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
  353. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
  354. package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
  355. package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
  356. package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
  357. package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
  358. package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
  359. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
  360. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-DNytWfSZ.js","sources":["../../src/pages/mcp/servers/detail/server-form-types.ts","../../src/pages/mcp/servers/detail/TransportStep.tsx","../../src/pages/mcp/servers/detail/DiscoveryStep.tsx","../../src/pages/mcp/servers/detail/TestStep.tsx","../../src/pages/mcp/servers/detail/ReviewStep.tsx","../../src/pages/mcp/servers/detail/McpServerDetailPage.tsx"],"sourcesContent":["import type { McpServerRecord, McpToolManifest } from '../../../../api/types';\n\nexport interface ServerFormState {\n name: string;\n description: string;\n mode: 'in-process' | 'network' | 'local-process';\n transport_type: 'stdio' | 'sse' | 'streamable-http';\n // stdio fields\n command: string;\n args: string;\n env_vars: string;\n // network fields\n url: string;\n // shared\n auto_connect: boolean;\n tags: string[];\n compile_hints: string;\n credential_providers: string[];\n discovered_tools: McpToolManifest[] | null;\n}\n\nexport const EMPTY_FORM: ServerFormState = {\n name: '',\n description: '',\n mode: 'network',\n transport_type: 'sse',\n command: '',\n args: '',\n env_vars: '{}',\n url: '',\n auto_connect: false,\n tags: [],\n compile_hints: '',\n credential_providers: [],\n discovered_tools: null,\n};\n\nexport function serverToForm(s: McpServerRecord): ServerFormState {\n const config = s.transport_config ?? {};\n const isBuiltin = !!(config as any).builtin;\n\n let mode: ServerFormState['mode'] = 'network';\n if (isBuiltin) mode = 'in-process';\n else if (s.transport_type === 'stdio') mode = 'local-process';\n\n return {\n name: s.name,\n description: s.description ?? '',\n mode,\n transport_type: s.transport_type,\n command: (config as any).command ?? '',\n args: ((config as any).args ?? []).join(', '),\n env_vars: (config as any).env ? JSON.stringify((config as any).env, null, 2) : '{}',\n url: (config as any).url ?? '',\n auto_connect: s.auto_connect,\n tags: s.tags ?? [],\n compile_hints: (s as any).compile_hints ?? '',\n credential_providers: s.credential_providers ?? [],\n discovered_tools: s.tool_manifest ?? null,\n };\n}\n\nexport function formToPayload(form: ServerFormState) {\n let transport_config: Record<string, unknown> = {};\n\n if (form.mode === 'local-process') {\n transport_config = {\n command: form.command.trim(),\n args: form.args.split(',').map((a) => a.trim()).filter(Boolean),\n env: form.env_vars.trim() ? JSON.parse(form.env_vars) : undefined,\n };\n } else if (form.mode === 'network') {\n transport_config = { url: form.url.trim() };\n }\n // in-process: transport_config stays empty (server manages it)\n\n return {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n transport_type: form.mode === 'local-process' ? 'stdio' as const : form.transport_type,\n transport_config,\n auto_connect: form.auto_connect,\n tags: form.tags,\n compile_hints: form.compile_hints.trim() || undefined,\n credential_providers: form.credential_providers.length > 0 ? form.credential_providers : undefined,\n };\n}\n\nexport const STEP_LABELS = ['Transport', 'Discovery', 'Test', 'Review'];\n\nexport function isStepValid(step: number, form: ServerFormState): boolean {\n if (step === 1) {\n if (!form.name.trim()) return false;\n if (form.mode === 'network' && !form.url.trim()) return false;\n if (form.mode === 'local-process' && !form.command.trim()) return false;\n return true;\n }\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n isBuiltin: boolean;\n}\n\nconst modes = [\n { value: 'in-process', label: 'In-Process', hint: 'Built-in server running inside the app' },\n { value: 'network', label: 'Network Service', hint: 'Remote server via SSE or Streamable HTTP' },\n { value: 'local-process', label: 'Local Process', hint: 'Spawn a local command via stdio' },\n] as const;\n\nexport function TransportStep({ form, set, isBuiltin }: Props) {\n return (\n <div className=\"space-y-5\">\n {/* Mode selector */}\n <div>\n <label className={labelCls}>Connection Mode</label>\n <div className=\"grid grid-cols-3 gap-3 mt-1\">\n {modes.map((m) => {\n const active = form.mode === m.value;\n const disabled = isBuiltin && m.value !== 'in-process';\n return (\n <button\n key={m.value}\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n set('mode', m.value);\n if (m.value === 'local-process') set('transport_type', 'stdio');\n if (m.value === 'network') set('transport_type', 'sse');\n }}\n className={`text-left p-3 rounded-md border transition-colors ${\n active\n ? 'border-accent bg-accent/5'\n : disabled\n ? 'border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed'\n : 'border-surface-border hover:border-text-tertiary cursor-pointer'\n }`}\n >\n <span className={`text-xs font-medium ${active ? 'text-accent' : 'text-text-primary'}`}>\n {m.label}\n </span>\n <span className=\"block text-[10px] text-text-tertiary mt-0.5\">{m.hint}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Name + Description (always shown) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className={labelCls}>Name</label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value)}\n placeholder=\"e.g., vision-server\"\n className=\"input text-xs w-full\"\n disabled={isBuiltin}\n />\n </div>\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Optional description\"\n className=\"input text-xs w-full\"\n />\n </div>\n </div>\n\n {/* In-Process: read-only info */}\n {form.mode === 'in-process' && (\n <div>\n <p className={hintCls}>\n This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed.\n </p>\n </div>\n )}\n\n {/* Network: URL + transport toggle */}\n {form.mode === 'network' && (\n <>\n <div>\n <label className={labelCls}>Server URL</label>\n <input\n type=\"text\"\n value={form.url}\n onChange={(e) => set('url', e.target.value)}\n placeholder=\"https://mcp-server.example.com/sse\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Transport Protocol</label>\n <div className=\"flex gap-2 mt-1\">\n {(['sse', 'streamable-http'] as const).map((t) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => set('transport_type', t)}\n className={`px-3 py-1.5 text-xs rounded-md border transition-colors ${\n form.transport_type === t\n ? 'border-accent bg-accent/5 text-accent font-medium'\n : 'border-surface-border text-text-secondary hover:border-text-tertiary'\n }`}\n >\n {t === 'sse' ? 'SSE' : 'Streamable HTTP'}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* Local Process: command + args + env */}\n {form.mode === 'local-process' && (\n <>\n <div>\n <label className={labelCls}>Command</label>\n <input\n type=\"text\"\n value={form.command}\n onChange={(e) => set('command', e.target.value)}\n placeholder=\"e.g., npx\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Arguments (comma-separated)</label>\n <input\n type=\"text\"\n value={form.args}\n onChange={(e) => set('args', e.target.value)}\n placeholder=\"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Environment Variables (JSON)</label>\n <textarea\n value={form.env_vars}\n onChange={(e) => set('env_vars', e.target.value)}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={3}\n spellCheck={false}\n />\n </div>\n </>\n )}\n\n {/* Auto-connect */}\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.auto_connect}\n onChange={(e) => set('auto_connect', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary\">Auto-connect on startup</span>\n </label>\n </div>\n );\n}\n","import { useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { TagInput } from '../../../../components/common/form/TagInput';\nimport type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function DiscoveryStep({ form, set }: Props) {\n const [cpInput, setCpInput] = useState('');\n\n const addProvider = (raw: string) => {\n const v = raw.trim().toLowerCase();\n if (v && !form.credential_providers.includes(v)) {\n set('credential_providers', [...form.credential_providers, v]);\n }\n setCpInput('');\n };\n\n const removeProvider = (p: string) => {\n set('credential_providers', form.credential_providers.filter((x) => x !== p));\n };\n\n const handleCpKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addProvider(cpInput);\n } else if (e.key === 'Backspace' && !cpInput && form.credential_providers.length > 0) {\n removeProvider(form.credential_providers[form.credential_providers.length - 1]);\n }\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Tags */}\n <div>\n <label className={labelCls}>Tags</label>\n <TagInput\n tags={form.tags}\n onChange={(tags) => set('tags', tags)}\n placeholder=\"Add tag (e.g., database, analytics)...\"\n />\n <p className={hintCls}>\n Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools.\n </p>\n </div>\n\n {/* Compile Hints */}\n <div>\n <label className={labelCls}>Compile Hints</label>\n <textarea\n value={form.compile_hints}\n onChange={(e) => set('compile_hints', e.target.value)}\n placeholder=\"Guidance for the workflow compiler when generating YAML from this server's tools...\"\n className=\"input text-xs w-full leading-relaxed\"\n rows={4}\n spellCheck={false}\n />\n <p className={hintCls}>\n Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized.\n </p>\n </div>\n\n {/* Credential Providers */}\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary\">\n {form.credential_providers.map((p) => (\n <span\n key={p}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {p}\n <button\n type=\"button\"\n onClick={() => removeProvider(p)}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n type=\"text\"\n value={cpInput}\n onChange={(e) => setCpInput(e.target.value)}\n onKeyDown={handleCpKey}\n onBlur={() => { if (cpInput.trim()) addProvider(cpInput); }}\n placeholder={form.credential_providers.length === 0 ? 'Add provider (e.g., github, slack)...' : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n <p className={hintCls}>\n IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution.\n </p>\n </div>\n </div>\n );\n}\n","import { CheckCircle2, XCircle, Loader2 } from 'lucide-react';\nimport { useTestConnection } from '../../../../api/mcp';\nimport type { ServerFormState } from './server-form-types';\nimport { formToPayload } from './server-form-types';\nimport { hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function TestStep({ form, set }: Props) {\n const test = useTestConnection();\n const isInProcess = form.mode === 'in-process';\n\n const handleTest = () => {\n const payload = formToPayload(form);\n test.mutate(\n { transport_type: payload.transport_type, transport_config: payload.transport_config },\n {\n onSuccess: (result) => {\n if (result.success) {\n set('discovered_tools', result.tools);\n }\n },\n },\n );\n };\n\n const result = test.data;\n const tools = form.discovered_tools ?? result?.tools ?? [];\n\n return (\n <div className=\"space-y-5\">\n {isInProcess ? (\n <div>\n <p className=\"text-sm text-text-secondary\">\n In-process servers connect lazily on first tool call. No connection test needed.\n </p>\n {form.discovered_tools && form.discovered_tools.length > 0 && (\n <div className=\"mt-4\">\n <p className=\"text-xs text-text-tertiary mb-2\">\n {form.discovered_tools.length} tool{form.discovered_tools.length !== 1 ? 's' : ''} cached from last connection\n </p>\n <ToolList tools={form.discovered_tools} />\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={test.isPending}\n className=\"btn-primary text-xs\"\n >\n {test.isPending ? (\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"w-3 h-3 animate-spin\" />\n Connecting...\n </span>\n ) : (\n 'Test Connection'\n )}\n </button>\n {result?.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-success\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n Connected — {tools.length} tool{tools.length !== 1 ? 's' : ''} discovered\n </span>\n )}\n {result && !result.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-error\">\n <XCircle className=\"w-3.5 h-3.5\" />\n {result.error || 'Connection failed'}\n </span>\n )}\n </div>\n\n {tools.length > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary mb-2\">Discovered tools</p>\n <ToolList tools={tools} />\n </div>\n )}\n\n <p className={hintCls}>\n Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine.\n </p>\n </>\n )}\n </div>\n );\n}\n\nfunction ToolList({ tools }: { tools: { name: string; description?: string }[] }) {\n return (\n <div className=\"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border\">\n {tools.map((t) => (\n <div key={t.name} className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-text-primary font-mono\">{t.name}</span>\n {t.description && (\n <span className=\"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2\">{t.description}</span>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n}\n\nconst modeLabels: Record<string, string> = {\n 'in-process': 'In-Process',\n 'network': 'Network Service',\n 'local-process': 'Local Process',\n};\n\nconst transportLabels: Record<string, string> = {\n stdio: 'stdio',\n sse: 'SSE',\n 'streamable-http': 'Streamable HTTP',\n};\n\nexport function ReviewStep({ form }: Props) {\n const tools = form.discovered_tools ?? [];\n\n return (\n <div className=\"space-y-4\">\n <Row label=\"Name\" value={form.name} />\n {form.description && <Row label=\"Description\" value={form.description} />}\n <Row label=\"Mode\" value={modeLabels[form.mode] ?? form.mode} />\n\n {form.mode === 'network' && (\n <>\n <Row label=\"Transport\" value={transportLabels[form.transport_type] ?? form.transport_type} />\n <Row label=\"URL\" value={form.url} mono />\n </>\n )}\n {form.mode === 'local-process' && (\n <>\n <Row label=\"Command\" value={form.command} mono />\n {form.args && <Row label=\"Args\" value={form.args} mono />}\n </>\n )}\n\n <Row label=\"Auto-connect\" value={form.auto_connect ? 'Yes' : 'No'} />\n\n {form.tags.length > 0 && (\n <div>\n <label className={labelCls}>Tags</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.tags.map((t) => (\n <span key={t} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.credential_providers.length > 0 && (\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.credential_providers.map((p) => (\n <span key={p} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {p}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.compile_hints && <Row label=\"Compile Hints\" value={form.compile_hints} />}\n\n {tools.length > 0 && (\n <Row label=\"Discovered Tools\" value={`${tools.length} tool${tools.length !== 1 ? 's' : ''}`} />\n )}\n </div>\n );\n}\n\nfunction Row({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div>\n <label className={labelCls}>{label}</label>\n <p className={`text-xs text-text-primary mt-0.5 ${mono ? 'font-mono' : ''}`}>{value}</p>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useMcpServer, useCreateMcpServer, useUpdateMcpServer } from '../../../../api/mcp';\nimport { StepIndicator } from '../../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../../components/common/layout/PageHeader';\nimport {\n EMPTY_FORM,\n serverToForm,\n formToPayload,\n STEP_LABELS,\n isStepValid,\n} from './server-form-types';\nimport type { ServerFormState } from './server-form-types';\nimport { TransportStep } from './TransportStep';\nimport { DiscoveryStep } from './DiscoveryStep';\nimport { TestStep } from './TestStep';\nimport { ReviewStep } from './ReviewStep';\n\nexport function McpServerDetailPage() {\n const { serverId } = useParams<{ serverId: string }>();\n const isNew = !serverId;\n const navigate = useNavigate();\n const { data: existing, isLoading } = useMcpServer(serverId ?? '');\n const createServer = useCreateMcpServer();\n const updateServer = useUpdateMcpServer();\n\n const [form, setForm] = useState<ServerFormState>(EMPTY_FORM);\n const [initialized, setInitialized] = useState(false);\n const [saveError, setSaveError] = useState('');\n\n // Step via URL search param\n const [searchParams, setSearchParams] = useSearchParams();\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n // Initialize form from existing record\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(EMPTY_FORM);\n setInitialized(true);\n return;\n }\n if (existing) {\n setForm(serverToForm(existing));\n setInitialized(true);\n }\n }, [existing, isNew, initialized]);\n\n const set = (field: keyof ServerFormState, value: any) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n const isBuiltin = !!(existing?.transport_config as any)?.builtin;\n\n // Save\n const handleSave = () => {\n setSaveError('');\n const payload = formToPayload(form);\n\n if (existing) {\n updateServer.mutate(\n { id: existing.id, ...payload },\n { onSuccess: () => navigate('/mcp/servers') },\n );\n } else {\n createServer.mutate(payload, {\n onSuccess: () => navigate('/mcp/servers'),\n onError: (err) => setSaveError(err.message),\n });\n }\n };\n\n if (!isNew && isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !existing && !isLoading) {\n return <p className=\"text-sm text-text-secondary\">Server not found.</p>;\n }\n\n const isLast = step === STEP_LABELS.length;\n const isPending = createServer.isPending || updateServer.isPending;\n const error = saveError || (createServer.error as Error | null)?.message || (updateServer.error as Error | null)?.message;\n\n return (\n <div>\n <PageHeader title={isNew ? 'Register MCP Server' : existing?.name ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <TransportStep form={form} set={set} isBuiltin={isBuiltin} />}\n {step === 2 && <DiscoveryStep form={form} set={set} />}\n {step === 3 && <TestStep form={form} set={set} />}\n {step === 4 && <ReviewStep form={form} />}\n </div>\n\n {error && (\n <p className=\"text-xs text-status-error mt-4\">{error}</p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button onClick={() => setStep(step - 1)} className=\"btn-secondary text-xs\">\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/mcp/servers')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Saving...' : existing ? 'Save' : 'Register'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["EMPTY_FORM","serverToForm","config","isBuiltin","mode","formToPayload","form","transport_config","a","STEP_LABELS","isStepValid","step","labelCls","hintCls","modes","TransportStep","set","jsxDEV","m","active","disabled","e","Fragment","t","DiscoveryStep","cpInput","setCpInput","useState","addProvider","raw","v","removeProvider","p","x","handleCpKey","TagInput","tags","X","TestStep","test","useTestConnection","isInProcess","handleTest","payload","result","tools","ToolList","Loader2","CheckCircle2","XCircle","modeLabels","transportLabels","ReviewStep","Row","label","value","mono","McpServerDetailPage","serverId","useParams","isNew","navigate","useNavigate","existing","isLoading","useMcpServer","createServer","useCreateMcpServer","updateServer","useUpdateMcpServer","setForm","initialized","setInitialized","saveError","setSaveError","searchParams","setSearchParams","useSearchParams","setStep","useCallback","s","prev","next","useEffect","field","f","_a","handleSave","err","isLast","isPending","error","_b","_c","PageHeader","StepIndicator","i"],"mappings":"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"}
1
+ {"version":3,"file":"index-DR4qQvlW.js","sources":["../../src/pages/mcp/servers/detail/server-form-types.ts","../../src/pages/mcp/servers/detail/TransportStep.tsx","../../src/pages/mcp/servers/detail/DiscoveryStep.tsx","../../src/pages/mcp/servers/detail/TestStep.tsx","../../src/pages/mcp/servers/detail/ReviewStep.tsx","../../src/pages/mcp/servers/detail/McpServerDetailPage.tsx"],"sourcesContent":["import type { McpServerRecord, McpToolManifest } from '../../../../api/types';\n\nexport interface ServerFormState {\n name: string;\n description: string;\n mode: 'in-process' | 'network' | 'local-process';\n transport_type: 'stdio' | 'sse' | 'streamable-http';\n // stdio fields\n command: string;\n args: string;\n env_vars: string;\n // network fields\n url: string;\n // shared\n auto_connect: boolean;\n tags: string[];\n compile_hints: string;\n credential_providers: string[];\n discovered_tools: McpToolManifest[] | null;\n}\n\nexport const EMPTY_FORM: ServerFormState = {\n name: '',\n description: '',\n mode: 'network',\n transport_type: 'sse',\n command: '',\n args: '',\n env_vars: '{}',\n url: '',\n auto_connect: false,\n tags: [],\n compile_hints: '',\n credential_providers: [],\n discovered_tools: null,\n};\n\nexport function serverToForm(s: McpServerRecord): ServerFormState {\n const config = s.transport_config ?? {};\n const isBuiltin = !!(config as any).builtin;\n\n let mode: ServerFormState['mode'] = 'network';\n if (isBuiltin) mode = 'in-process';\n else if (s.transport_type === 'stdio') mode = 'local-process';\n\n return {\n name: s.name,\n description: s.description ?? '',\n mode,\n transport_type: s.transport_type,\n command: (config as any).command ?? '',\n args: ((config as any).args ?? []).join(', '),\n env_vars: (config as any).env ? JSON.stringify((config as any).env, null, 2) : '{}',\n url: (config as any).url ?? '',\n auto_connect: s.auto_connect,\n tags: s.tags ?? [],\n compile_hints: (s as any).compile_hints ?? '',\n credential_providers: s.credential_providers ?? [],\n discovered_tools: s.tool_manifest ?? null,\n };\n}\n\nexport function formToPayload(form: ServerFormState) {\n let transport_config: Record<string, unknown> = {};\n\n if (form.mode === 'local-process') {\n transport_config = {\n command: form.command.trim(),\n args: form.args.split(',').map((a) => a.trim()).filter(Boolean),\n env: form.env_vars.trim() ? JSON.parse(form.env_vars) : undefined,\n };\n } else if (form.mode === 'network') {\n transport_config = { url: form.url.trim() };\n }\n // in-process: transport_config stays empty (server manages it)\n\n return {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n transport_type: form.mode === 'local-process' ? 'stdio' as const : form.transport_type,\n transport_config,\n auto_connect: form.auto_connect,\n tags: form.tags,\n compile_hints: form.compile_hints.trim() || undefined,\n credential_providers: form.credential_providers.length > 0 ? form.credential_providers : undefined,\n };\n}\n\nexport const STEP_LABELS = ['Transport', 'Discovery', 'Test', 'Review'];\n\nexport function isStepValid(step: number, form: ServerFormState): boolean {\n if (step === 1) {\n if (!form.name.trim()) return false;\n if (form.mode === 'network' && !form.url.trim()) return false;\n if (form.mode === 'local-process' && !form.command.trim()) return false;\n return true;\n }\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n isBuiltin: boolean;\n}\n\nconst modes = [\n { value: 'in-process', label: 'In-Process', hint: 'Built-in server running inside the app' },\n { value: 'network', label: 'Network Service', hint: 'Remote server via SSE or Streamable HTTP' },\n { value: 'local-process', label: 'Local Process', hint: 'Spawn a local command via stdio' },\n] as const;\n\nexport function TransportStep({ form, set, isBuiltin }: Props) {\n return (\n <div className=\"space-y-5\">\n {/* Mode selector */}\n <div>\n <label className={labelCls}>Connection Mode</label>\n <div className=\"grid grid-cols-3 gap-3 mt-1\">\n {modes.map((m) => {\n const active = form.mode === m.value;\n const disabled = isBuiltin && m.value !== 'in-process';\n return (\n <button\n key={m.value}\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n set('mode', m.value);\n if (m.value === 'local-process') set('transport_type', 'stdio');\n if (m.value === 'network') set('transport_type', 'sse');\n }}\n className={`text-left p-3 rounded-md border transition-colors ${\n active\n ? 'border-accent bg-accent/5'\n : disabled\n ? 'border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed'\n : 'border-surface-border hover:border-text-tertiary cursor-pointer'\n }`}\n >\n <span className={`text-xs font-medium ${active ? 'text-accent' : 'text-text-primary'}`}>\n {m.label}\n </span>\n <span className=\"block text-[10px] text-text-tertiary mt-0.5\">{m.hint}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Name + Description (always shown) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className={labelCls}>Name</label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value)}\n placeholder=\"e.g., vision-server\"\n className=\"input text-xs w-full\"\n disabled={isBuiltin}\n />\n </div>\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Optional description\"\n className=\"input text-xs w-full\"\n />\n </div>\n </div>\n\n {/* In-Process: read-only info */}\n {form.mode === 'in-process' && (\n <div>\n <p className={hintCls}>\n This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed.\n </p>\n </div>\n )}\n\n {/* Network: URL + transport toggle */}\n {form.mode === 'network' && (\n <>\n <div>\n <label className={labelCls}>Server URL</label>\n <input\n type=\"text\"\n value={form.url}\n onChange={(e) => set('url', e.target.value)}\n placeholder=\"https://mcp-server.example.com/sse\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Transport Protocol</label>\n <div className=\"flex gap-2 mt-1\">\n {(['sse', 'streamable-http'] as const).map((t) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => set('transport_type', t)}\n className={`px-3 py-1.5 text-xs rounded-md border transition-colors ${\n form.transport_type === t\n ? 'border-accent bg-accent/5 text-accent font-medium'\n : 'border-surface-border text-text-secondary hover:border-text-tertiary'\n }`}\n >\n {t === 'sse' ? 'SSE' : 'Streamable HTTP'}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* Local Process: command + args + env */}\n {form.mode === 'local-process' && (\n <>\n <div>\n <label className={labelCls}>Command</label>\n <input\n type=\"text\"\n value={form.command}\n onChange={(e) => set('command', e.target.value)}\n placeholder=\"e.g., npx\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Arguments (comma-separated)</label>\n <input\n type=\"text\"\n value={form.args}\n onChange={(e) => set('args', e.target.value)}\n placeholder=\"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Environment Variables (JSON)</label>\n <textarea\n value={form.env_vars}\n onChange={(e) => set('env_vars', e.target.value)}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={3}\n spellCheck={false}\n />\n </div>\n </>\n )}\n\n {/* Auto-connect */}\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.auto_connect}\n onChange={(e) => set('auto_connect', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary\">Auto-connect on startup</span>\n </label>\n </div>\n );\n}\n","import { useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { TagInput } from '../../../../components/common/form/TagInput';\nimport type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function DiscoveryStep({ form, set }: Props) {\n const [cpInput, setCpInput] = useState('');\n\n const addProvider = (raw: string) => {\n const v = raw.trim().toLowerCase();\n if (v && !form.credential_providers.includes(v)) {\n set('credential_providers', [...form.credential_providers, v]);\n }\n setCpInput('');\n };\n\n const removeProvider = (p: string) => {\n set('credential_providers', form.credential_providers.filter((x) => x !== p));\n };\n\n const handleCpKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addProvider(cpInput);\n } else if (e.key === 'Backspace' && !cpInput && form.credential_providers.length > 0) {\n removeProvider(form.credential_providers[form.credential_providers.length - 1]);\n }\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Tags */}\n <div>\n <label className={labelCls}>Tags</label>\n <TagInput\n tags={form.tags}\n onChange={(tags) => set('tags', tags)}\n placeholder=\"Add tag (e.g., database, analytics)...\"\n />\n <p className={hintCls}>\n Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools.\n </p>\n </div>\n\n {/* Compile Hints */}\n <div>\n <label className={labelCls}>Compile Hints</label>\n <textarea\n value={form.compile_hints}\n onChange={(e) => set('compile_hints', e.target.value)}\n placeholder=\"Guidance for the workflow compiler when generating YAML from this server's tools...\"\n className=\"input text-xs w-full leading-relaxed\"\n rows={4}\n spellCheck={false}\n />\n <p className={hintCls}>\n Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized.\n </p>\n </div>\n\n {/* Credential Providers */}\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary\">\n {form.credential_providers.map((p) => (\n <span\n key={p}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {p}\n <button\n type=\"button\"\n onClick={() => removeProvider(p)}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n type=\"text\"\n value={cpInput}\n onChange={(e) => setCpInput(e.target.value)}\n onKeyDown={handleCpKey}\n onBlur={() => { if (cpInput.trim()) addProvider(cpInput); }}\n placeholder={form.credential_providers.length === 0 ? 'Add provider (e.g., github, slack)...' : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n <p className={hintCls}>\n IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution.\n </p>\n </div>\n </div>\n );\n}\n","import { CheckCircle2, XCircle, Loader2 } from 'lucide-react';\nimport { useTestConnection } from '../../../../api/mcp';\nimport type { ServerFormState } from './server-form-types';\nimport { formToPayload } from './server-form-types';\nimport { hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function TestStep({ form, set }: Props) {\n const test = useTestConnection();\n const isInProcess = form.mode === 'in-process';\n\n const handleTest = () => {\n const payload = formToPayload(form);\n test.mutate(\n { transport_type: payload.transport_type, transport_config: payload.transport_config },\n {\n onSuccess: (result) => {\n if (result.success) {\n set('discovered_tools', result.tools);\n }\n },\n },\n );\n };\n\n const result = test.data;\n const tools = form.discovered_tools ?? result?.tools ?? [];\n\n return (\n <div className=\"space-y-5\">\n {isInProcess ? (\n <div>\n <p className=\"text-sm text-text-secondary\">\n In-process servers connect lazily on first tool call. No connection test needed.\n </p>\n {form.discovered_tools && form.discovered_tools.length > 0 && (\n <div className=\"mt-4\">\n <p className=\"text-xs text-text-tertiary mb-2\">\n {form.discovered_tools.length} tool{form.discovered_tools.length !== 1 ? 's' : ''} cached from last connection\n </p>\n <ToolList tools={form.discovered_tools} />\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={test.isPending}\n className=\"btn-primary text-xs\"\n >\n {test.isPending ? (\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"w-3 h-3 animate-spin\" />\n Connecting...\n </span>\n ) : (\n 'Test Connection'\n )}\n </button>\n {result?.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-success\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n Connected — {tools.length} tool{tools.length !== 1 ? 's' : ''} discovered\n </span>\n )}\n {result && !result.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-error\">\n <XCircle className=\"w-3.5 h-3.5\" />\n {result.error || 'Connection failed'}\n </span>\n )}\n </div>\n\n {tools.length > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary mb-2\">Discovered tools</p>\n <ToolList tools={tools} />\n </div>\n )}\n\n <p className={hintCls}>\n Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine.\n </p>\n </>\n )}\n </div>\n );\n}\n\nfunction ToolList({ tools }: { tools: { name: string; description?: string }[] }) {\n return (\n <div className=\"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border\">\n {tools.map((t) => (\n <div key={t.name} className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-text-primary font-mono\">{t.name}</span>\n {t.description && (\n <span className=\"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2\">{t.description}</span>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n}\n\nconst modeLabels: Record<string, string> = {\n 'in-process': 'In-Process',\n 'network': 'Network Service',\n 'local-process': 'Local Process',\n};\n\nconst transportLabels: Record<string, string> = {\n stdio: 'stdio',\n sse: 'SSE',\n 'streamable-http': 'Streamable HTTP',\n};\n\nexport function ReviewStep({ form }: Props) {\n const tools = form.discovered_tools ?? [];\n\n return (\n <div className=\"space-y-4\">\n <Row label=\"Name\" value={form.name} />\n {form.description && <Row label=\"Description\" value={form.description} />}\n <Row label=\"Mode\" value={modeLabels[form.mode] ?? form.mode} />\n\n {form.mode === 'network' && (\n <>\n <Row label=\"Transport\" value={transportLabels[form.transport_type] ?? form.transport_type} />\n <Row label=\"URL\" value={form.url} mono />\n </>\n )}\n {form.mode === 'local-process' && (\n <>\n <Row label=\"Command\" value={form.command} mono />\n {form.args && <Row label=\"Args\" value={form.args} mono />}\n </>\n )}\n\n <Row label=\"Auto-connect\" value={form.auto_connect ? 'Yes' : 'No'} />\n\n {form.tags.length > 0 && (\n <div>\n <label className={labelCls}>Tags</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.tags.map((t) => (\n <span key={t} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.credential_providers.length > 0 && (\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.credential_providers.map((p) => (\n <span key={p} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {p}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.compile_hints && <Row label=\"Compile Hints\" value={form.compile_hints} />}\n\n {tools.length > 0 && (\n <Row label=\"Discovered Tools\" value={`${tools.length} tool${tools.length !== 1 ? 's' : ''}`} />\n )}\n </div>\n );\n}\n\nfunction Row({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div>\n <label className={labelCls}>{label}</label>\n <p className={`text-xs text-text-primary mt-0.5 ${mono ? 'font-mono' : ''}`}>{value}</p>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useMcpServer, useCreateMcpServer, useUpdateMcpServer } from '../../../../api/mcp';\nimport { StepIndicator } from '../../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../../components/common/layout/PageHeader';\nimport {\n EMPTY_FORM,\n serverToForm,\n formToPayload,\n STEP_LABELS,\n isStepValid,\n} from './server-form-types';\nimport type { ServerFormState } from './server-form-types';\nimport { TransportStep } from './TransportStep';\nimport { DiscoveryStep } from './DiscoveryStep';\nimport { TestStep } from './TestStep';\nimport { ReviewStep } from './ReviewStep';\n\nexport function McpServerDetailPage() {\n const { serverId } = useParams<{ serverId: string }>();\n const isNew = !serverId;\n const navigate = useNavigate();\n const { data: existing, isLoading } = useMcpServer(serverId ?? '');\n const createServer = useCreateMcpServer();\n const updateServer = useUpdateMcpServer();\n\n const [form, setForm] = useState<ServerFormState>(EMPTY_FORM);\n const [initialized, setInitialized] = useState(false);\n const [saveError, setSaveError] = useState('');\n\n // Step via URL search param\n const [searchParams, setSearchParams] = useSearchParams();\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n // Initialize form from existing record\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(EMPTY_FORM);\n setInitialized(true);\n return;\n }\n if (existing) {\n setForm(serverToForm(existing));\n setInitialized(true);\n }\n }, [existing, isNew, initialized]);\n\n const set = (field: keyof ServerFormState, value: any) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n const isBuiltin = !!(existing?.transport_config as any)?.builtin;\n\n // Save\n const handleSave = () => {\n setSaveError('');\n const payload = formToPayload(form);\n\n if (existing) {\n updateServer.mutate(\n { id: existing.id, ...payload },\n { onSuccess: () => navigate('/mcp/servers') },\n );\n } else {\n createServer.mutate(payload, {\n onSuccess: () => navigate('/mcp/servers'),\n onError: (err) => setSaveError(err.message),\n });\n }\n };\n\n if (!isNew && isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !existing && !isLoading) {\n return <p className=\"text-sm text-text-secondary\">Server not found.</p>;\n }\n\n const isLast = step === STEP_LABELS.length;\n const isPending = createServer.isPending || updateServer.isPending;\n const error = saveError || (createServer.error as Error | null)?.message || (updateServer.error as Error | null)?.message;\n\n return (\n <div>\n <PageHeader title={isNew ? 'Register MCP Server' : existing?.name ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <TransportStep form={form} set={set} isBuiltin={isBuiltin} />}\n {step === 2 && <DiscoveryStep form={form} set={set} />}\n {step === 3 && <TestStep form={form} set={set} />}\n {step === 4 && <ReviewStep form={form} />}\n </div>\n\n {error && (\n <p className=\"text-xs text-status-error mt-4\">{error}</p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button onClick={() => setStep(step - 1)} className=\"btn-secondary text-xs\">\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/mcp/servers')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Saving...' : existing ? 'Save' : 'Register'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["EMPTY_FORM","serverToForm","config","isBuiltin","mode","formToPayload","form","transport_config","a","STEP_LABELS","isStepValid","step","labelCls","hintCls","modes","TransportStep","set","jsxDEV","m","active","disabled","e","Fragment","t","DiscoveryStep","cpInput","setCpInput","useState","addProvider","raw","v","removeProvider","p","x","handleCpKey","TagInput","tags","X","TestStep","test","useTestConnection","isInProcess","handleTest","payload","result","tools","ToolList","Loader2","CheckCircle2","XCircle","modeLabels","transportLabels","ReviewStep","Row","label","value","mono","McpServerDetailPage","serverId","useParams","isNew","navigate","useNavigate","existing","isLoading","useMcpServer","createServer","useCreateMcpServer","updateServer","useUpdateMcpServer","setForm","initialized","setInitialized","saveError","setSaveError","searchParams","setSearchParams","useSearchParams","setStep","useCallback","s","prev","next","useEffect","field","f","_a","handleSave","err","isLast","isPending","error","_b","_c","PageHeader","StepIndicator","i"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import{j as e}from"./index-sNrqYt0Q.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{e as G,i as K,u as F,j as X,b as Z}from"./workflows-BkzA4ahe.js";import{D as ee}from"./DataTable-bd2PTBJd.js";import{C as se}from"./ConfirmDeleteModal-Cy6KVLfC.js";import{F as re,b as P}from"./FilterBar-BQNzsd3A.js";import{R as oe,a as _}from"./RowActions-JqgAB0p3.js";import{u as ae}from"./useFilterParams-CGRYFw_A.js";import{P as U}from"./PageHeader-FJIemmrC.js";import{R as te}from"./RolePill-D6nMxMvp.js";import{T as ie}from"./TaskQueuePill-BzduBqwy.js";import{W as le}from"./WorkflowPill-BrD5d1AG.js";import{a3 as ne,S as ce,W as me,a8 as de,a9 as ue,U as I,X as $,g as J,D as M,d as q}from"./vendor-icons-CWl44VA6.js";import{c as B,e as fe,f as pe}from"./vendor-react-Co3Y8ikm.js";import{S as he}from"./StepIndicator-D9Xvdf18.js";import{u as be}from"./roles-Bd_sTV6I.js";import{B as Ne}from"./BotPicker-DcvILNUf.js";import"./EmptyState-BygtU-Rh.js";import"./Modal-Dir9Rlnx.js";import"./bots-fc_O_YIq.js";function ge(s,o){const l=o.toLowerCase();return s.workflow_type.toLowerCase().includes(l)||(s.description??"").toLowerCase().includes(l)}function Be(){const s=B(),{data:o,isLoading:l}=G(),d=K(),{filters:a,setFilter:n}=ae({filters:{search:"",queue:"",role:"",tier:""}}),[m,v]=u.useState(a.search),[p,y]=u.useState(null);u.useEffect(()=>{if(m===a.search)return;const r=setTimeout(()=>n("search",m),300);return()=>clearTimeout(r)},[m,n,a.search]);const i=o??[],f=u.useMemo(()=>[...new Set(i.map(r=>r.task_queue).filter(Boolean))].sort(),[i]),c=u.useMemo(()=>[...new Set(i.flatMap(r=>r.roles??[]))].sort(),[i]),t=u.useMemo(()=>{let r=i;return a.search&&(r=r.filter(b=>ge(b,a.search))),a.queue&&(r=r.filter(b=>b.task_queue===a.queue)),a.role&&(r=r.filter(b=>(b.roles??[]).includes(a.role))),a.tier&&(r=r.filter(b=>b.tier===a.tier)),r},[i,a]),D=[{key:"workflow_type",label:"Workflow",render:r=>e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV(le,{type:r.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:77,columnNumber:11},this),r.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:79,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:76,columnNumber:9},this)},{key:"task_queue",label:"Queue",render:r=>r.task_queue?e.jsxDEV(ie,{queue:r.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:41},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:84},this),className:"whitespace-nowrap"},{key:"tier",label:"Tier",render:r=>r.tier==="certified"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[e.jsxDEV(ne,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:166},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:46},this):r.tier==="configured"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-info/10 text-status-info",children:[e.jsxDEV(ce,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:177},this),"Configured"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:47},this):e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:96,columnNumber:16},this),className:"whitespace-nowrap"},{key:"roles",label:"Roles",render:r=>r.registered?e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:[(r.roles??[]).map(b=>e.jsxDEV(te,{role:b},b,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:106,columnNumber:13},this)),(!r.roles||r.roles.length===0)&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:108,columnNumber:54},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:104,columnNumber:9},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:111,columnNumber:9},this)},{key:"actions",label:"",render:r=>e.jsxDEV(oe,{children:[r.tier==="durable"&&e.jsxDEV(_,{icon:me,title:"Configure workflow",onClick:()=>s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`),colorClass:"text-text-tertiary hover:text-status-info"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:120,columnNumber:13},this),r.tier==="configured"&&e.jsxDEV(_,{icon:de,title:"Certify workflow",onClick:()=>s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:128,columnNumber:13},this),r.registered&&e.jsxDEV(_,{icon:ue,title:"Remove configuration",onClick:()=>y(r.workflow_type),colorClass:"text-text-tertiary hover:text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:136,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:118,columnNumber:9},this),className:"w-16 text-right"}],j=()=>{p&&d.mutate(p,{onSuccess:()=>y(null)})},E=r=>{r.registered?s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`):s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`)};return e.jsxDEV("div",{children:[e.jsxDEV(U,{title:"Workflow Registry",actions:e.jsxDEV("button",{onClick:()=>s("/workflows/registry/new"),className:"btn-primary text-xs",children:"Register Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:169,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:166,columnNumber:7},this),e.jsxDEV(re,{children:[e.jsxDEV("input",{type:"text",placeholder:"Search workflow type...",value:m,onChange:r=>v(r.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:179,columnNumber:9},this),e.jsxDEV(P,{label:"Queue",value:a.queue,onChange:r=>n("queue",r),options:f.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:186,columnNumber:9},this),e.jsxDEV(P,{label:"Tier",value:a.tier,onChange:r=>n("tier",r),options:[{value:"certified",label:"Certified"},{value:"configured",label:"Configured"},{value:"durable",label:"Durable"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:192,columnNumber:9},this),e.jsxDEV(P,{label:"Role",value:a.role,onChange:r=>n("role",r),options:c.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:202,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:178,columnNumber:7},this),e.jsxDEV(ee,{columns:D,data:t,keyFn:r=>r.workflow_type,onRowClick:E,isLoading:l,emptyMessage:"No workflows found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:210,columnNumber:7},this),e.jsxDEV(se,{open:!!p,onClose:()=>y(null),onConfirm:j,title:"De-certify Workflow",description:e.jsxDEV(e.Fragment,{children:["Remove certification from ",e.jsxDEV("span",{className:"font-mono font-medium text-text-primary",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:50},this),"? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:22},this),isPending:d.isPending,error:d.error},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:220,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:165,columnNumber:5},this)}function C(s){return s.split(",").map(o=>o.trim()).filter(Boolean)}const R={workflow_type:"",description:"",task_queue:"",default_role:"reviewer",invocable:!1,roles:"",invocation_roles:"",consumes:"",envelope_schema:"",resolver_schema:"",cron_schedule:"",execute_as:"",certified:!1};function xe(s){const o=(s.roles??[]).join(", "),l=(s.consumes??[]).join(", ");return{workflow_type:s.workflow_type,description:s.description??"",task_queue:s.task_queue??"",default_role:s.default_role,invocable:s.invocable,roles:o,invocation_roles:(s.invocation_roles??[]).join(", "),consumes:l,envelope_schema:s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):"",resolver_schema:s.resolver_schema?JSON.stringify(s.resolver_schema,null,2):"",cron_schedule:s.cron_schedule??"",execute_as:s.execute_as??"",certified:!!(o||l)}}const T=["Identity","Invocation","Advanced"];function V(s){if(!s.trim())return!0;try{return JSON.parse(s),!0}catch{return!1}}function L(s,o){return s===1?!!o.workflow_type.trim():s===2?V(o.envelope_schema):s===3?V(o.resolver_schema):!0}const k="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",g="text-[10px] text-text-tertiary mt-2 leading-relaxed",Q="input font-mono text-[11px] w-full leading-relaxed tabular-nums";function A({selected:s,onChange:o,single:l,placeholder:d}){const{data:a}=be(),n=(a==null?void 0:a.roles)??[],[m,v]=u.useState(!1),p=u.useRef(null);u.useEffect(()=>{const c=t=>{p.current&&!p.current.contains(t.target)&&v(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[]);const y=c=>{l?(o(s.includes(c)?[]:[c]),v(!1)):o(s.includes(c)?s.filter(t=>t!==c):[...s,c])},i=c=>{o(s.filter(t=>t!==c))},f=d??(l?"Select role...":"Add roles...");return e.jsxDEV("div",{ref:p,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>v(!m),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[s.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:f},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:55,columnNumber:11},this),s.map(c=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsxDEV(I,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:62,columnNumber:13},this),c,e.jsxDEV("span",{role:"button",onClick:t=>{t.stopPropagation(),i(c)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:69,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:64,columnNumber:13},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:58,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${m?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:49,columnNumber:7},this),m&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No roles defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:80,columnNumber:13},this):n.map(c=>{const t=s.includes(c);return e.jsxDEV("button",{type:"button",onClick:()=>y(c),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${t?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(I,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:95,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:96,columnNumber:19},this),t&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:97,columnNumber:34},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:85,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:78,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:47,columnNumber:5},this)}function we({options:s,selected:o,onChange:l,placeholder:d}){const[a,n]=u.useState(!1),m=u.useRef(null);u.useEffect(()=>{const i=f=>{m.current&&!m.current.contains(f.target)&&n(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[]);const v=i=>{l(o.includes(i)?o.filter(f=>f!==i):[...o,i])},p=i=>{l(o.filter(f=>f!==i))},y=d??"Add workflows...";return e.jsxDEV("div",{ref:m,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>n(!a),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[o.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:y},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:45,columnNumber:11},this),o.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono",children:[e.jsxDEV(q,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:52,columnNumber:13},this),i,e.jsxDEV("span",{role:"button",onClick:f=>{f.stopPropagation(),p(i)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:59,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:54,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:48,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${a?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:63,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:39,columnNumber:7},this),a&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:s.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No registered workflows"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:69,columnNumber:13},this):s.map(i=>{const f=o.includes(i);return e.jsxDEV("button",{type:"button",onClick:()=>v(i),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${f?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(q,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:84,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:i},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:85,columnNumber:19},this),f&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:86,columnNumber:34},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:74,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:38,columnNumber:5},this)}function z(s){return C(s)}function O(s){return s.join(", ")}function ke({form:s,set:o}){const{data:l}=F(),d=(l??[]).map(a=>a.workflow_type).filter(a=>a!==s.workflow_type);return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Resolver Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:31,columnNumber:9},this),e.jsxDEV("textarea",{value:s.resolver_schema,onChange:a=>o("resolver_schema",a.target.value),placeholder:`{
2
+ "properties": {
3
+ "approved": { "type": "boolean", "default": false, "description": "Approve?" },
4
+ "notes": { "type": "string", "default": "", "description": "Reviewer notes" }
5
+ }
6
+ }`,className:Q,rows:8,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:32,columnNumber:9},this),e.jsxDEV("p",{className:g,children:["Default form template for resolving escalations from this workflow. Use ",e.jsxDEV("span",{className:"font-mono",children:"properties"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:15},this)," with ",e.jsxDEV("span",{className:"font-mono",children:"type"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:66},this),", ",e.jsxDEV("span",{className:"font-mono",children:"default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:107},this),", ",e.jsxDEV("span",{className:"font-mono",children:"description"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:151},this),", ",e.jsxDEV("span",{className:"font-mono",children:"enum"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:199},this),", and ",e.jsxDEV("span",{className:"font-mono",children:"format"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:42,columnNumber:244},this)," for typed form fields."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:40,columnNumber:9},this),s.resolver_schema.trim()&&!V(s.resolver_schema)&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:"Invalid JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:45,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:30,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-6 pt-1",children:e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:s.certified,onChange:a=>o("certified",a.target.checked),className:"w-4 h-4 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:52,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-medium",children:"Certify for HITL Escalation"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:51,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:50,columnNumber:7},this),e.jsxDEV("p",{className:g,children:"Certified workflows use the interceptor to wrap executions — failures escalate to human reviewers instead of throwing."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:61,columnNumber:7},this),s.certified?e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Default Escalation Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:70,columnNumber:13},this),e.jsxDEV(A,{selected:z(s.default_role),onChange:a=>o("default_role",a[0]??""),single:!0,placeholder:"Select escalation role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:71,columnNumber:13},this),e.jsxDEV("p",{className:g,children:"When this workflow escalates, assign to users with this role"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:77,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:69,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Escalation Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:84,columnNumber:13},this),e.jsxDEV(A,{selected:z(s.roles),onChange:a=>o("roles",O(a)),placeholder:"Select who can resolve escalations..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:85,columnNumber:13},this),e.jsxDEV("p",{className:g,children:"Users with any of these roles can claim and resolve escalations from this workflow."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:90,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:83,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Consumes"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:97,columnNumber:13},this),e.jsxDEV(we,{options:d,selected:z(s.consumes),onChange:a=>o("consumes",O(a)),placeholder:"Select workflow dependencies..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:98,columnNumber:13},this),e.jsxDEV("p",{className:g,children:"Output from these upstream workflows will be injected into the input envelope for this workflow."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:104,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:96,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:67,columnNumber:9},this):e.jsxDEV("div",{className:"py-4 px-4 bg-surface-sunken/50 rounded-md text-center",children:e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["This workflow will run as standard durable without the interceptor. Enable"," ",e.jsxDEV("span",{className:"font-medium text-text-secondary",children:"Certify for HITL Escalation"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:114,columnNumber:13},this)," ","to add automatic escalation routing and role-based resolution."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:111,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:110,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:28,columnNumber:5},this)}function ve(s){return C(s)}function ye(s){return s.join(", ")}function De({form:s,set:o,editing:l,durableTypes:d=[]}){const a=!l&&d.length>0;return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Workflow Type"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:36,columnNumber:9},this),a&&!s.workflow_type?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV("p",{className:"text-xs text-text-secondary",children:"Select a durable workflow to register:"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("div",{className:"grid gap-1",children:d.map(n=>e.jsxDEV("button",{onClick:()=>o("workflow_type",n),className:"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors",children:n},n,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:44,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:42,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center gap-2 pt-1",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:"or"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:54,columnNumber:15},this),e.jsxDEV("input",{type:"text",onChange:n=>o("workflow_type",n.target.value),placeholder:"Enter a workflow type manually",className:"input font-mono text-xs flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:55,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:53,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:38,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("input",{type:"text",value:s.workflow_type,onChange:n=>o("workflow_type",n.target.value),disabled:l,placeholder:"reviewContent",className:"input font-mono text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:65,columnNumber:13},this),!l&&s.workflow_type&&d.length>0&&e.jsxDEV("button",{onClick:()=>o("workflow_type",""),className:"text-[10px] text-accent hover:underline mt-1",children:"Choose from durable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:74,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:64,columnNumber:11},this),e.jsxDEV("p",{className:g,children:"Register a workflow to configure invocation schemas and dashboard visibility. Certification for HITL escalation is optional (step 3)."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:83,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:35,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:89,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s.description,onChange:n=>o("description",n.target.value),placeholder:"AI-powered content moderation with human escalation",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:90,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:88,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Task Queue"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:100,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s.task_queue,onChange:n=>o("task_queue",n.target.value),placeholder:"lt-review",className:"input font-mono text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:101,columnNumber:9},this),e.jsxDEV("p",{className:g,children:"Durable task queue this workflow listens on"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:108,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:99,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:34,columnNumber:5},this)}function Ee({form:s,set:o}){return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{className:"flex gap-6 pt-1",children:e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:s.invocable,onChange:l=>o("invocable",l.target.checked),className:"w-4 h-4 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:124,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-medium",children:"Invocable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:130,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:123,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:122,columnNumber:7},this),e.jsxDEV("p",{className:g,children:"Allow this workflow to be started from the dashboard or API."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:133,columnNumber:7},this),s.invocable&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Run As"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:141,columnNumber:13},this),e.jsxDEV(Ne,{selected:s.execute_as,onChange:l=>o("execute_as",l)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:142,columnNumber:13},this),e.jsxDEV("p",{className:g,children:"Choose a bot to execute this workflow under its identity and credentials. Default runs as the invoking user."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:146,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Invocation Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:154,columnNumber:13},this),e.jsxDEV(A,{selected:ve(s.invocation_roles),onChange:l=>o("invocation_roles",ye(l)),placeholder:"Select who can start this workflow..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:155,columnNumber:13},this),e.jsxDEV("p",{className:g,children:"Only users with these roles can start this workflow. Leave empty to allow all authenticated users."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:160,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:153,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Envelope Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:168,columnNumber:13},this),e.jsxDEV("textarea",{value:s.envelope_schema,onChange:l=>o("envelope_schema",l.target.value),placeholder:`{
7
+ "data": {
8
+ "contentId": "example-123",
9
+ "content": "Text to review"
10
+ },
11
+ "metadata": {
12
+ "source": "dashboard"
13
+ }
14
+ }`,className:Q,rows:8,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:169,columnNumber:13},this),e.jsxDEV("p",{className:g,children:["Pre-fills the JSON editor when invoking this workflow. Should include ",e.jsxDEV("span",{className:"font-mono",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:179,columnNumber:30},this)," (workflow input) and optional ",e.jsxDEV("span",{className:"font-mono",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:179,columnNumber:100},this)," (context)."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:177,columnNumber:13},this),s.envelope_schema.trim()&&!V(s.envelope_schema)&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:"Invalid JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:182,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:167,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:138,columnNumber:9},this),!s.invocable&&e.jsxDEV("div",{className:"py-4 px-4 bg-surface-sunken/50 rounded-md text-center",children:e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Enable ",e.jsxDEV("span",{className:"font-medium text-text-secondary",children:"Invocable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:191,columnNumber:20},this)," above to configure who can start this workflow and set an input template."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:190,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:189,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:120,columnNumber:5},this)}function Qe(){const{workflowType:s}=fe(),o=!s,l=B(),{data:d,isLoading:a}=F(),n=X(),m=(d==null?void 0:d.find(h=>h.workflow_type===s))??null,v=new Set(["mcpQuery","mcpDeterministic","mcpQueryRouter","mcpTriage","mcpTriageRouter","mcpTriageDeterministic","insightQuery"]),{data:p}=Z({limit:500}),y=u.useMemo(()=>{const h=new Set((d??[]).map(N=>N.workflow_type));return[...new Set(((p==null?void 0:p.jobs)??[]).map(N=>N.entity))].filter(N=>!h.has(N)&&!v.has(N)).sort()},[d,p]),[i,f]=pe(),c=u.useMemo(()=>{if(!o)return R;const h=i.get("workflow_type")??"",w=i.get("task_queue")??"";return!h&&!w?R:{...R,workflow_type:h,task_queue:w}},[o,i]),[t,D]=u.useState(c),[j,E]=u.useState(""),[r,b]=u.useState(!1),x=parseInt(i.get("step")||"1",10),S=u.useCallback(h=>{f(w=>{const N=new URLSearchParams(w);return N.set("step",String(h)),N},{replace:!1})},[f]);u.useEffect(()=>{if(!r){if(o){D(c),b(!0);return}m&&(D(xe(m)),b(!0))}},[m,o,r,c]);const W=(h,w)=>D(N=>({...N,[h]:w})),H=()=>{if(!t.workflow_type.trim())return;E("");let h=null,w=null;try{t.envelope_schema.trim()&&(h=JSON.parse(t.envelope_schema))}catch{E("Invalid JSON in Envelope Schema");return}try{t.resolver_schema.trim()&&(w=JSON.parse(t.resolver_schema))}catch{E("Invalid JSON in Resolver Schema");return}n.mutate({workflow_type:t.workflow_type.trim(),description:t.description.trim()||null,task_queue:t.task_queue.trim()||null,default_role:t.default_role.trim()||"reviewer",invocable:t.invocable,roles:C(t.roles),invocation_roles:C(t.invocation_roles),consumes:C(t.consumes),envelope_schema:h,resolver_schema:w,cron_schedule:t.cron_schedule.trim()||null,execute_as:t.execute_as.trim()||null},{onSuccess:()=>{l("/workflows/registry")}})};if(a)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:132,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:133,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:131,columnNumber:7},this);if(!o&&!m)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Config not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:139,columnNumber:12},this);const Y=x===T.length;return e.jsxDEV("div",{children:[e.jsxDEV(U,{title:o?"Register Workflow":(m==null?void 0:m.workflow_type)??""},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:147,columnNumber:7},this),e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV(he,{steps:T,currentStep:x-1,onStepClick:h=>S(h+1)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:150,columnNumber:11},this),e.jsxDEV("div",{className:"min-h-[360px] py-2",children:[x===1&&e.jsxDEV(De,{form:t,set:W,editing:!!m,durableTypes:y},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:153,columnNumber:28},this),x===2&&e.jsxDEV(Ee,{form:t,set:W},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:154,columnNumber:28},this),x===3&&e.jsxDEV(ke,{form:t,set:W},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:155,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:152,columnNumber:11},this),(j||n.error)&&e.jsxDEV("p",{className:"text-xs text-status-error mt-4",children:j||n.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:159,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsxDEV("div",{children:x>1&&e.jsxDEV("button",{onClick:()=>S(x-1),className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:168,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:166,columnNumber:13},this),e.jsxDEV("div",{className:"flex gap-3",children:[e.jsxDEV("button",{onClick:()=>l("/workflows/registry"),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:177,columnNumber:15},this),Y?e.jsxDEV("button",{onClick:H,disabled:!L(x,t)||n.isPending,className:"btn-primary text-xs",children:n.isPending?"Saving...":m?"Save":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:181,columnNumber:17},this):e.jsxDEV("button",{onClick:()=>S(x+1),disabled:!L(x,t),className:"btn-primary text-xs",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:189,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:176,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:165,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:149,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:146,columnNumber:5},this)}export{Qe as WorkflowConfigDetailPage,Be as WorkflowConfigsPage};
15
+ //# sourceMappingURL=index-Dh0PCbR-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Dh0PCbR-.js","sources":["../../src/pages/workflows/registry/WorkflowConfigsPage.tsx","../../src/lib/parse.ts","../../src/pages/workflows/registry/config-form-types.ts","../../src/components/common/form/RolePicker.tsx","../../src/components/common/form/WorkflowPicker.tsx","../../src/pages/workflows/registry/AdvancedStep.tsx","../../src/pages/workflows/registry/ConfigWizardSteps.tsx","../../src/pages/workflows/registry/WorkflowConfigDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useDiscoveredWorkflows,\n useDeleteWorkflowConfig,\n} from '../../../api/workflows';\nimport { ShieldCheck, ShieldPlus, ShieldOff, Settings, Wrench } from 'lucide-react';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport type { DiscoveredWorkflow } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TaskQueuePill } from '../../../components/common/display/TaskQueuePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction matchesSearch(wf: DiscoveredWorkflow, search: string): boolean {\n const q = search.toLowerCase();\n return (\n wf.workflow_type.toLowerCase().includes(q) ||\n (wf.description ?? '').toLowerCase().includes(q)\n );\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigsPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useDiscoveredWorkflows();\n const deleteConfig = useDeleteWorkflowConfig();\n const { filters, setFilter } = useFilterParams({\n filters: { search: '', queue: '', role: '', tier: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n\n // Debounce search input\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const allWorkflows = data ?? [];\n\n // Derive facet options from data\n const queues = useMemo(\n () => [...new Set(allWorkflows.map((w) => w.task_queue).filter(Boolean) as string[])].sort(),\n [allWorkflows],\n );\n const roles = useMemo(\n () => [...new Set(allWorkflows.flatMap((w) => w.roles ?? []))].sort(),\n [allWorkflows],\n );\n\n // Apply client-side filters\n const workflows = useMemo(() => {\n let result = allWorkflows;\n if (filters.search) result = result.filter((w) => matchesSearch(w, filters.search));\n if (filters.queue) result = result.filter((w) => w.task_queue === filters.queue);\n if (filters.role) result = result.filter((w) => (w.roles ?? []).includes(filters.role));\n if (filters.tier) result = result.filter((w) => w.tier === filters.tier);\n return result;\n }, [allWorkflows, filters]);\n\n const columns: Column<DiscoveredWorkflow>[] = [\n {\n key: 'workflow_type',\n label: 'Workflow',\n render: (row) => (\n <div className=\"min-w-0\">\n <WorkflowPill type={row.workflow_type} />\n {row.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 truncate\">{row.description}</p>\n )}\n </div>\n ),\n },\n {\n key: 'task_queue',\n label: 'Queue',\n render: (row) => row.task_queue ? <TaskQueuePill queue={row.task_queue} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'tier',\n label: 'Tier',\n render: (row) => {\n if (row.tier === 'certified') return <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>;\n if (row.tier === 'configured') return <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-info/10 text-status-info\"><Settings className=\"w-3 h-3\" />Configured</span>;\n return <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary\">Durable</span>;\n },\n className: 'whitespace-nowrap',\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => row.registered ? (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r} role={r} />\n ))}\n {(!row.roles || row.roles.length === 0) && <span className=\"text-xs text-text-tertiary\">—</span>}\n </div>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n {row.tier === 'durable' && (\n <RowAction\n icon={Wrench}\n title=\"Configure workflow\"\n onClick={() => navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`)}\n colorClass=\"text-text-tertiary hover:text-status-info\"\n />\n )}\n {row.tier === 'configured' && (\n <RowAction\n icon={ShieldPlus}\n title=\"Certify workflow\"\n onClick={() => navigate(`/workflows/registry/${encodeURIComponent(row.workflow_type)}`)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )}\n {row.registered && (\n <RowAction\n icon={ShieldOff}\n title=\"Remove configuration\"\n onClick={() => setConfirmDelete(row.workflow_type)}\n colorClass=\"text-text-tertiary hover:text-status-warning\"\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteConfig.mutate(confirmDelete, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n const handleRowClick = (row: DiscoveredWorkflow) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.workflow_type)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`);\n }\n };\n\n return (\n <div>\n <PageHeader\n title=\"Workflow Registry\"\n actions={\n <button\n onClick={() => navigate('/workflows/registry/new')}\n className=\"btn-primary text-xs\"\n >\n Register Workflow\n </button>\n }\n />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workflow type...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Queue\"\n value={filters.queue}\n onChange={(v) => setFilter('queue', v)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n <FilterSelect\n label=\"Tier\"\n value={filters.tier}\n onChange={(v) => setFilter('tier', v)}\n options={[\n { value: 'certified', label: 'Certified' },\n { value: 'configured', label: 'Configured' },\n { value: 'durable', label: 'Durable' },\n ]}\n />\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={workflows}\n keyFn={(row) => row.workflow_type}\n onRowClick={handleRowClick}\n isLoading={isLoading}\n emptyMessage=\"No workflows found\"\n />\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"De-certify Workflow\"\n description={<>Remove certification from <span className=\"font-mono font-medium text-text-primary\">{confirmDelete}</span>? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow.</>}\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n","export function splitCsv(s: string): string[] {\n return s\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\nexport function safeParseJson<T = unknown>(\n json: string,\n): { ok: true; data: T } | { ok: false; error: string } {\n try {\n return { ok: true, data: JSON.parse(json) as T };\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : 'Invalid JSON';\n return { ok: false, error: message };\n }\n}\n","import type { LTWorkflowConfig } from '../../../api/types';\n\nexport interface ConfigFormState {\n workflow_type: string;\n description: string;\n task_queue: string;\n default_role: string;\n invocable: boolean;\n roles: string;\n invocation_roles: string;\n consumes: string;\n envelope_schema: string;\n resolver_schema: string;\n cron_schedule: string;\n execute_as: string;\n /** UI-only — gates escalation fields in the wizard. Not sent to backend. */\n certified: boolean;\n}\n\nexport const EMPTY_FORM: ConfigFormState = {\n workflow_type: '',\n description: '',\n task_queue: '',\n default_role: 'reviewer',\n invocable: false,\n roles: '',\n invocation_roles: '',\n consumes: '',\n envelope_schema: '',\n resolver_schema: '',\n cron_schedule: '',\n execute_as: '',\n certified: false,\n};\n\nexport function configToForm(c: LTWorkflowConfig): ConfigFormState {\n const roles = (c.roles ?? []).join(', ');\n const consumes = (c.consumes ?? []).join(', ');\n return {\n workflow_type: c.workflow_type,\n description: c.description ?? '',\n task_queue: c.task_queue ?? '',\n default_role: c.default_role,\n invocable: c.invocable,\n roles,\n invocation_roles: (c.invocation_roles ?? []).join(', '),\n consumes,\n envelope_schema: c.envelope_schema ? JSON.stringify(c.envelope_schema, null, 2) : '',\n resolver_schema: c.resolver_schema ? JSON.stringify(c.resolver_schema, null, 2) : '',\n cron_schedule: c.cron_schedule ?? '',\n execute_as: c.execute_as ?? '',\n certified: !!(roles || consumes),\n };\n}\n\nexport const STEP_LABELS = ['Identity', 'Invocation', 'Advanced'];\n\nexport function jsonValid(v: string): boolean {\n if (!v.trim()) return true;\n try { JSON.parse(v); return true; } catch { return false; }\n}\n\nexport function isStepValid(step: number, form: ConfigFormState): boolean {\n if (step === 1) return !!form.workflow_type.trim();\n if (step === 2) return jsonValid(form.envelope_schema);\n if (step === 3) return jsonValid(form.resolver_schema);\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\nexport const jsonCls = 'input font-mono text-[11px] w-full leading-relaxed tabular-nums';\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n","import { useState, useRef, useEffect } from 'react';\nimport { User, X, ChevronDown, Check } from 'lucide-react';\nimport { useRoles } from '../../../api/roles';\n\ninterface RolePickerProps {\n selected: string[];\n onChange: (roles: string[]) => void;\n /** Only allow one selection */\n single?: boolean;\n placeholder?: string;\n}\n\nexport function RolePicker({ selected, onChange, single, placeholder }: RolePickerProps) {\n const { data } = useRoles();\n const allRoles = data?.roles ?? [];\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (role: string) => {\n if (single) {\n onChange(selected.includes(role) ? [] : [role]);\n setOpen(false);\n } else {\n onChange(\n selected.includes(role)\n ? selected.filter((r) => r !== role)\n : [...selected, role],\n );\n }\n };\n\n const remove = (role: string) => {\n onChange(selected.filter((r) => r !== role));\n };\n\n const placeholderText = placeholder ?? (single ? 'Select role...' : 'Add roles...');\n\n return (\n <div ref={ref} className=\"relative\">\n {/* Selected pills + trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((role) => (\n <span\n key={role}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]\"\n >\n <User className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {role}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(role); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {/* Dropdown */}\n {open && (\n <div className=\"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {allRoles.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No roles defined</p>\n ) : (\n allRoles.map((role) => {\n const isSelected = selected.includes(role);\n return (\n <button\n key={role}\n type=\"button\"\n onClick={() => toggle(role)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <User className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{role}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { Workflow, X, ChevronDown, Check } from 'lucide-react';\n\ninterface WorkflowPickerProps {\n options: string[];\n selected: string[];\n onChange: (workflows: string[]) => void;\n placeholder?: string;\n}\n\nexport function WorkflowPicker({ options, selected, onChange, placeholder }: WorkflowPickerProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (wfType: string) => {\n onChange(\n selected.includes(wfType)\n ? selected.filter((t) => t !== wfType)\n : [...selected, wfType],\n );\n };\n\n const remove = (wfType: string) => {\n onChange(selected.filter((t) => t !== wfType));\n };\n\n const placeholderText = placeholder ?? 'Add workflows...';\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((wfType) => (\n <span\n key={wfType}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono\"\n >\n <Workflow className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {wfType}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(wfType); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {options.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No registered workflows</p>\n ) : (\n options.map((wfType) => {\n const isSelected = selected.includes(wfType);\n return (\n <button\n key={wfType}\n type=\"button\"\n onClick={() => toggle(wfType)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <Workflow className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{wfType}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","import { labelCls, hintCls, jsonCls, jsonValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\nimport { RolePicker } from '../../../components/common/form/RolePicker';\nimport { WorkflowPicker } from '../../../components/common/form/WorkflowPicker';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { splitCsv } from '../../../lib/parse';\n\ninterface StepProps {\n form: ConfigFormState;\n set: (field: keyof ConfigFormState, value: string | boolean) => void;\n}\n\nfunction csvToArray(csv: string): string[] {\n return splitCsv(csv);\n}\n\nfunction arrayToCsv(arr: string[]): string {\n return arr.join(', ');\n}\n\nexport function AdvancedStep({ form, set }: StepProps) {\n const { data: configs } = useWorkflowConfigs();\n const consumesOptions = (configs ?? [])\n .map((c) => c.workflow_type)\n .filter((t) => t !== form.workflow_type);\n\n return (\n <div className=\"space-y-5\">\n {/* Resolver Schema — always available */}\n <div>\n <label className={labelCls}>Resolver Schema</label>\n <textarea\n value={form.resolver_schema}\n onChange={(e) => set('resolver_schema', e.target.value)}\n placeholder={`{\\n \"properties\": {\\n \"approved\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Approve?\" },\\n \"notes\": { \"type\": \"string\", \"default\": \"\", \"description\": \"Reviewer notes\" }\\n }\\n}`}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n <p className={hintCls}>\n Default form template for resolving escalations from this workflow.\n Use <span className=\"font-mono\">properties</span> with <span className=\"font-mono\">type</span>, <span className=\"font-mono\">default</span>, <span className=\"font-mono\">description</span>, <span className=\"font-mono\">enum</span>, and <span className=\"font-mono\">format</span> for typed form fields.\n </p>\n {form.resolver_schema.trim() && !jsonValid(form.resolver_schema) && (\n <p className=\"text-[10px] text-status-error mt-1\">Invalid JSON</p>\n )}\n </div>\n\n {/* Certify toggle */}\n <div className=\"flex gap-6 pt-1\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.certified}\n onChange={(e) => set('certified', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary font-medium\">Certify for HITL Escalation</span>\n </label>\n </div>\n <p className={hintCls}>\n Certified workflows use the interceptor to wrap executions — failures\n escalate to human reviewers instead of throwing.\n </p>\n\n {form.certified ? (\n <>\n {/* Default Escalation Role */}\n <div>\n <label className={labelCls}>Default Escalation Role</label>\n <RolePicker\n selected={csvToArray(form.default_role)}\n onChange={(roles) => set('default_role', roles[0] ?? '')}\n single\n placeholder=\"Select escalation role...\"\n />\n <p className={hintCls}>\n When this workflow escalates, assign to users with this role\n </p>\n </div>\n\n {/* Escalation Roles */}\n <div>\n <label className={labelCls}>Escalation Roles</label>\n <RolePicker\n selected={csvToArray(form.roles)}\n onChange={(roles) => set('roles', arrayToCsv(roles))}\n placeholder=\"Select who can resolve escalations...\"\n />\n <p className={hintCls}>\n Users with any of these roles can claim and resolve escalations from this workflow.\n </p>\n </div>\n\n {/* Consumes */}\n <div>\n <label className={labelCls}>Consumes</label>\n <WorkflowPicker\n options={consumesOptions}\n selected={csvToArray(form.consumes)}\n onChange={(workflows) => set('consumes', arrayToCsv(workflows))}\n placeholder=\"Select workflow dependencies...\"\n />\n <p className={hintCls}>\n Output from these upstream workflows will be injected into the input envelope for this workflow.\n </p>\n </div>\n </>\n ) : (\n <div className=\"py-4 px-4 bg-surface-sunken/50 rounded-md text-center\">\n <p className=\"text-xs text-text-tertiary\">\n This workflow will run as standard durable without the interceptor.\n Enable{' '}\n <span className=\"font-medium text-text-secondary\">\n Certify for HITL Escalation\n </span>{' '}\n to add automatic escalation routing and role-based resolution.\n </p>\n </div>\n )}\n </div>\n );\n}\n","import { labelCls, hintCls, jsonCls, jsonValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\nimport { RolePicker } from '../../../components/common/form/RolePicker';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { splitCsv } from '../../../lib/parse';\nexport { AdvancedStep } from './AdvancedStep';\n\ninterface StepProps {\n form: ConfigFormState;\n set: (field: keyof ConfigFormState, value: string | boolean) => void;\n}\n\ninterface BasicsStepProps extends StepProps {\n editing: boolean;\n durableTypes?: string[];\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction csvToArray(csv: string): string[] {\n return splitCsv(csv);\n}\n\nfunction arrayToCsv(arr: string[]): string {\n return arr.join(', ');\n}\n\n// ── Step 1: Identity ────────────────────────────────────────────────────────\n\nexport function BasicsStep({ form, set, editing, durableTypes = [] }: BasicsStepProps) {\n const showPickList = !editing && durableTypes.length > 0;\n\n return (\n <div className=\"space-y-5\">\n <div>\n <label className={labelCls}>Workflow Type</label>\n {showPickList && !form.workflow_type ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs text-text-secondary\">\n Select a durable workflow to register:\n </p>\n <div className=\"grid gap-1\">\n {durableTypes.map((type) => (\n <button\n key={type}\n onClick={() => set('workflow_type', type)}\n className=\"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors\"\n >\n {type}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-2 pt-1\">\n <span className=\"text-[10px] text-text-tertiary\">or</span>\n <input\n type=\"text\"\n onChange={(e) => set('workflow_type', e.target.value)}\n placeholder=\"Enter a workflow type manually\"\n className=\"input font-mono text-xs flex-1\"\n />\n </div>\n </div>\n ) : (\n <>\n <input\n type=\"text\"\n value={form.workflow_type}\n onChange={(e) => set('workflow_type', e.target.value)}\n disabled={editing}\n placeholder=\"reviewContent\"\n className=\"input font-mono text-xs w-full\"\n />\n {!editing && form.workflow_type && durableTypes.length > 0 && (\n <button\n onClick={() => set('workflow_type', '')}\n className=\"text-[10px] text-accent hover:underline mt-1\"\n >\n Choose from durable workflows\n </button>\n )}\n </>\n )}\n <p className={hintCls}>\n Register a workflow to configure invocation schemas and dashboard visibility. Certification for HITL escalation is optional (step 3).\n </p>\n </div>\n\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"AI-powered content moderation with human escalation\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n <div>\n <label className={labelCls}>Task Queue</label>\n <input\n type=\"text\"\n value={form.task_queue}\n onChange={(e) => set('task_queue', e.target.value)}\n placeholder=\"lt-review\"\n className=\"input font-mono text-xs w-full\"\n />\n <p className={hintCls}>\n Durable task queue this workflow listens on\n </p>\n </div>\n </div>\n );\n}\n\n// ── Step 2: Invocation ─────────────────────────────────────────────────────\n\nexport function InvocationStep({ form, set }: StepProps) {\n return (\n <div className=\"space-y-5\">\n {/* Invocable toggle */}\n <div className=\"flex gap-6 pt-1\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.invocable}\n onChange={(e) => set('invocable', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary font-medium\">Invocable</span>\n </label>\n </div>\n <p className={hintCls}>\n Allow this workflow to be started from the dashboard or API.\n </p>\n\n {form.invocable && (\n <>\n {/* Run As */}\n <div>\n <label className={labelCls}>Run As</label>\n <BotPicker\n selected={form.execute_as}\n onChange={(botId) => set('execute_as', botId)}\n />\n <p className={hintCls}>\n Choose a bot to execute this workflow under its identity and credentials.\n Default runs as the invoking user.\n </p>\n </div>\n\n {/* Invocation roles */}\n <div>\n <label className={labelCls}>Invocation Roles</label>\n <RolePicker\n selected={csvToArray(form.invocation_roles)}\n onChange={(roles) => set('invocation_roles', arrayToCsv(roles))}\n placeholder=\"Select who can start this workflow...\"\n />\n <p className={hintCls}>\n Only users with these roles can start this workflow.\n Leave empty to allow all authenticated users.\n </p>\n </div>\n\n {/* Envelope schema */}\n <div>\n <label className={labelCls}>Envelope Schema</label>\n <textarea\n value={form.envelope_schema}\n onChange={(e) => set('envelope_schema', e.target.value)}\n placeholder={`{\\n \"data\": {\\n \"contentId\": \"example-123\",\\n \"content\": \"Text to review\"\\n },\\n \"metadata\": {\\n \"source\": \"dashboard\"\\n }\\n}`}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n <p className={hintCls}>\n Pre-fills the JSON editor when invoking this workflow.\n Should include <span className=\"font-mono\">data</span> (workflow input) and optional <span className=\"font-mono\">metadata</span> (context).\n </p>\n {form.envelope_schema.trim() && !jsonValid(form.envelope_schema) && (\n <p className=\"text-[10px] text-status-error mt-1\">Invalid JSON</p>\n )}\n </div>\n </>\n )}\n\n {!form.invocable && (\n <div className=\"py-4 px-4 bg-surface-sunken/50 rounded-md text-center\">\n <p className=\"text-xs text-text-tertiary\">\n Enable <span className=\"font-medium text-text-secondary\">Invocable</span> above to configure who can start this workflow and set an input template.\n </p>\n </div>\n )}\n </div>\n );\n}\n\n","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useUpsertWorkflowConfig, useJobs } from '../../../api/workflows';\nimport { StepIndicator } from '../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { splitCsv } from '../../../lib/parse';\nimport { EMPTY_FORM, configToForm, STEP_LABELS, isStepValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\nimport { BasicsStep, InvocationStep, AdvancedStep } from './ConfigWizardSteps';\n\nexport function WorkflowConfigDetailPage() {\n const { workflowType } = useParams<{ workflowType: string }>();\n const isNew = !workflowType;\n const navigate = useNavigate();\n const { data: configs, isLoading } = useWorkflowConfigs();\n const upsert = useUpsertWorkflowConfig();\n\n const editing = configs?.find((c) => c.workflow_type === workflowType) ?? null;\n\n // Fetch known workflow types from jobs to build the pick-list.\n // System workflows (triage, query, routing pipelines) are excluded —\n // they serve the discovery/compilation layer, not user-authored flows.\n const SYSTEM_WORKFLOWS = new Set([\n 'mcpQuery',\n 'mcpDeterministic',\n 'mcpQueryRouter',\n 'mcpTriage',\n 'mcpTriageRouter',\n 'mcpTriageDeterministic',\n 'insightQuery',\n ]);\n const { data: jobsData } = useJobs({ limit: 500 });\n const unregisteredTypes = useMemo(() => {\n const registeredSet = new Set((configs ?? []).map((c) => c.workflow_type));\n const allEntities = new Set((jobsData?.jobs ?? []).map((j) => j.entity));\n return [...allEntities]\n .filter((e) => !registeredSet.has(e) && !SYSTEM_WORKFLOWS.has(e))\n .sort();\n }, [configs, jobsData]);\n\n // Step via URL search param for browser history\n const [searchParams, setSearchParams] = useSearchParams();\n\n // Pre-fill from URL search params when creating new\n const prefillForm = useMemo((): ConfigFormState => {\n if (!isNew) return EMPTY_FORM;\n const prefillType = searchParams.get('workflow_type') ?? '';\n const prefillQueue = searchParams.get('task_queue') ?? '';\n if (!prefillType && !prefillQueue) return EMPTY_FORM;\n return { ...EMPTY_FORM, workflow_type: prefillType, task_queue: prefillQueue };\n }, [isNew, searchParams]);\n\n const [form, setForm] = useState<ConfigFormState>(prefillForm);\n const [schemaError, setSchemaError] = useState('');\n const [initialized, setInitialized] = useState(false);\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(prefillForm);\n setInitialized(true);\n return;\n }\n if (editing) {\n setForm(configToForm(editing));\n setInitialized(true);\n }\n }, [editing, isNew, initialized, prefillForm]);\n\n const set = (field: keyof ConfigFormState, value: string | boolean) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n // ── Save ────────────────────────────────────────────────────────────────\n\n const handleSave = () => {\n if (!form.workflow_type.trim()) return;\n setSchemaError('');\n\n let envelope_schema: Record<string, unknown> | null = null;\n let resolver_schema: Record<string, unknown> | null = null;\n\n try {\n if (form.envelope_schema.trim()) envelope_schema = JSON.parse(form.envelope_schema);\n } catch {\n setSchemaError('Invalid JSON in Envelope Schema');\n return;\n }\n try {\n if (form.resolver_schema.trim()) resolver_schema = JSON.parse(form.resolver_schema);\n } catch {\n setSchemaError('Invalid JSON in Resolver Schema');\n return;\n }\n\n upsert.mutate(\n {\n workflow_type: form.workflow_type.trim(),\n description: form.description.trim() || null,\n task_queue: form.task_queue.trim() || null,\n default_role: form.default_role.trim() || 'reviewer',\n invocable: form.invocable,\n roles: splitCsv(form.roles),\n invocation_roles: splitCsv(form.invocation_roles),\n consumes: splitCsv(form.consumes),\n envelope_schema,\n resolver_schema,\n cron_schedule: form.cron_schedule.trim() || null,\n execute_as: form.execute_as.trim() || null,\n },\n {\n onSuccess: () => {\n navigate('/workflows/registry');\n },\n },\n );\n };\n\n // ── Loading / Not found ──────────────────────────────────────────────────\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !editing) {\n return <p className=\"text-sm text-text-secondary\">Config not found.</p>;\n }\n\n // ── Render ──────────────────────────────────────────────────────────────\n\n const isLast = step === STEP_LABELS.length;\n return (\n <div>\n <PageHeader title={isNew ? 'Register Workflow' : editing?.workflow_type ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <BasicsStep form={form} set={set} editing={!!editing} durableTypes={unregisteredTypes} />}\n {step === 2 && <InvocationStep form={form} set={set} />}\n {step === 3 && <AdvancedStep form={form} set={set} />}\n </div>\n\n {(schemaError || upsert.error) && (\n <p className=\"text-xs text-status-error mt-4\">\n {schemaError || (upsert.error as Error).message}\n </p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button\n onClick={() => setStep(step - 1)}\n className=\"btn-secondary text-xs\"\n >\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/workflows/registry')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || upsert.isPending}\n className=\"btn-primary text-xs\"\n >\n {upsert.isPending ? 'Saving...' : editing ? 'Save' : 'Create'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n\n </div>\n </div>\n );\n}\n"],"names":["matchesSearch","wf","search","q","WorkflowConfigsPage","navigate","useNavigate","data","isLoading","useDiscoveredWorkflows","deleteConfig","useDeleteWorkflowConfig","filters","setFilter","useFilterParams","searchInput","setSearchInput","useState","confirmDelete","setConfirmDelete","useEffect","timer","allWorkflows","queues","useMemo","w","roles","workflows","result","columns","row","jsxDEV","WorkflowPill","TaskQueuePill","ShieldCheck","Settings","r","RolePill","RowActionGroup","RowAction","Wrench","ShieldPlus","ShieldOff","handleDelete","handleRowClick","PageHeader","FilterBar","e","FilterSelect","v","DataTable","ConfirmDeleteModal","Fragment","splitCsv","EMPTY_FORM","configToForm","c","consumes","STEP_LABELS","jsonValid","isStepValid","step","form","labelCls","hintCls","jsonCls","RolePicker","selected","onChange","single","placeholder","useRoles","allRoles","open","setOpen","ref","useRef","handler","toggle","role","remove","placeholderText","User","X","ChevronDown","isSelected","Check","WorkflowPicker","options","wfType","t","Workflow","csvToArray","csv","arrayToCsv","arr","AdvancedStep","set","configs","useWorkflowConfigs","consumesOptions","BasicsStep","editing","durableTypes","showPickList","type","InvocationStep","BotPicker","botId","WorkflowConfigDetailPage","workflowType","useParams","isNew","upsert","useUpsertWorkflowConfig","SYSTEM_WORKFLOWS","jobsData","useJobs","unregisteredTypes","registeredSet","j","searchParams","setSearchParams","useSearchParams","prefillForm","prefillType","prefillQueue","setForm","schemaError","setSchemaError","initialized","setInitialized","setStep","useCallback","s","prev","next","field","value","f","handleSave","envelope_schema","resolver_schema","isLast","StepIndicator","i"],"mappings":"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"}