@hotmeshio/long-tail 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) 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 +16 -0
  19. package/build/api/files.js +61 -0
  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/mcp-runs.d.ts +2 -0
  29. package/build/api/mcp-runs.js +2 -0
  30. package/build/api/settings.js +9 -1
  31. package/build/api/workflow-sets.d.ts +11 -0
  32. package/build/api/workflow-sets.js +62 -0
  33. package/build/api/workflows/config.d.ts +64 -0
  34. package/build/api/workflows/config.js +142 -0
  35. package/build/api/workflows/discovery.d.ts +29 -0
  36. package/build/api/workflows/discovery.js +153 -0
  37. package/build/api/workflows/index.d.ts +3 -0
  38. package/build/api/workflows/index.js +18 -0
  39. package/build/api/workflows/invocation.d.ts +67 -0
  40. package/build/api/workflows/invocation.js +188 -0
  41. package/build/api/yaml-workflows/cron.d.ts +39 -0
  42. package/build/api/yaml-workflows/cron.js +127 -0
  43. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -137
  44. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
  45. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  46. package/build/api/yaml-workflows/deploy.js +223 -0
  47. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  48. package/build/api/yaml-workflows/helpers.js +8 -0
  49. package/build/api/yaml-workflows/index.d.ts +4 -0
  50. package/build/api/yaml-workflows/index.js +27 -0
  51. package/build/api/yaml-workflows/versions.d.ts +43 -0
  52. package/build/api/yaml-workflows/versions.js +124 -0
  53. package/build/bin/ltc.d.ts +2 -0
  54. package/build/bin/ltc.js +220 -0
  55. package/build/examples/seed-data.d.ts +55 -0
  56. package/build/examples/seed-data.js +161 -0
  57. package/build/examples/seed.js +7 -164
  58. package/build/lib/cli/auth.d.ts +23 -0
  59. package/build/lib/cli/auth.js +167 -0
  60. package/build/lib/cli/client.d.ts +6 -0
  61. package/build/lib/cli/client.js +31 -0
  62. package/build/lib/cli/commands/escalations.d.ts +19 -0
  63. package/build/lib/cli/commands/escalations.js +69 -0
  64. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  65. package/build/lib/cli/commands/knowledge.js +87 -0
  66. package/build/lib/cli/commands/mcp.d.ts +8 -0
  67. package/build/lib/cli/commands/mcp.js +33 -0
  68. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  69. package/build/lib/cli/commands/pipelines.js +67 -0
  70. package/build/lib/cli/commands/status.d.ts +1 -0
  71. package/build/lib/cli/commands/status.js +28 -0
  72. package/build/lib/cli/commands/users.d.ts +7 -0
  73. package/build/lib/cli/commands/users.js +25 -0
  74. package/build/lib/cli/commands/workflows.d.ts +16 -0
  75. package/build/lib/cli/commands/workflows.js +104 -0
  76. package/build/lib/cli/compile.d.ts +2 -0
  77. package/build/lib/cli/compile.js +165 -0
  78. package/build/lib/cli/format.d.ts +23 -0
  79. package/build/lib/cli/format.js +94 -0
  80. package/build/lib/cli/init.d.ts +1 -0
  81. package/build/lib/cli/init.js +61 -0
  82. package/build/lib/cli/output.d.ts +27 -0
  83. package/build/lib/cli/output.js +126 -0
  84. package/build/lib/cli/scanner.d.ts +10 -0
  85. package/build/lib/cli/scanner.js +164 -0
  86. package/build/lib/cli/types.d.ts +16 -0
  87. package/build/lib/cli/types.js +2 -0
  88. package/build/lib/logger/index.d.ts +0 -9
  89. package/build/lib/logger/index.js +9 -4
  90. package/build/lib/storage/index.js +2 -2
  91. package/build/lib/storage/local.d.ts +15 -0
  92. package/build/lib/storage/local.js +63 -0
  93. package/build/lib/storage/mime.d.ts +4 -0
  94. package/build/lib/storage/mime.js +31 -0
  95. package/build/lib/storage/s3.d.ts +16 -0
  96. package/build/lib/storage/s3.js +70 -0
  97. package/build/lib/storage/types.d.ts +18 -0
  98. package/build/modules/utils.d.ts +73 -0
  99. package/build/modules/utils.js +84 -0
  100. package/build/routes/file-browser.d.ts +2 -0
  101. package/build/routes/file-browser.js +126 -0
  102. package/build/routes/files.js +25 -17
  103. package/build/routes/index.js +4 -0
  104. package/build/routes/knowledge.d.ts +2 -0
  105. package/build/routes/knowledge.js +141 -0
  106. package/build/routes/mcp-runs.js +2 -0
  107. package/build/routes/workflow-sets.js +9 -0
  108. package/build/routes/yaml-workflows/crud.js +9 -0
  109. package/build/routes/yaml-workflows/deployment.js +8 -0
  110. package/build/sdk/index.d.ts +17 -0
  111. package/build/sdk/index.js +19 -0
  112. package/build/services/insight/index.d.ts +13 -0
  113. package/build/services/insight/index.js +4 -7
  114. package/build/services/insight/prompts.d.ts +1 -1
  115. package/build/services/insight/prompts.js +1 -1
  116. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  117. package/build/services/mcp/client/connection-dispatch.js +78 -0
  118. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  119. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  120. package/build/services/mcp/client/connection-test.d.ts +10 -0
  121. package/build/services/mcp/client/connection-test.js +49 -0
  122. package/build/services/mcp/client/connection.d.ts +3 -68
  123. package/build/services/mcp/client/connection.js +15 -393
  124. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  125. package/build/services/mcp/server-lifecycle.js +49 -0
  126. package/build/services/mcp/server-tools.d.ts +13 -0
  127. package/build/services/mcp/server-tools.js +287 -0
  128. package/build/services/mcp/server.d.ts +2 -26
  129. package/build/services/mcp/server.js +7 -315
  130. package/build/services/mcp-runs/queries.d.ts +2 -0
  131. package/build/services/mcp-runs/queries.js +11 -1
  132. package/build/services/mcp-runs/sql.d.ts +1 -1
  133. package/build/services/mcp-runs/sql.js +2 -2
  134. package/build/services/workflow-sets/db.d.ts +1 -0
  135. package/build/services/workflow-sets/db.js +6 -0
  136. package/build/services/workflow-sets/index.d.ts +1 -1
  137. package/build/services/workflow-sets/index.js +2 -1
  138. package/build/services/workflow-sets/sql.d.ts +1 -0
  139. package/build/services/workflow-sets/sql.js +6 -1
  140. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  141. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  142. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  143. package/build/services/yaml-workflow/db-versions.js +76 -0
  144. package/build/services/yaml-workflow/db.d.ts +14 -12
  145. package/build/services/yaml-workflow/db.js +32 -70
  146. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  147. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  148. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  149. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  150. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  151. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  152. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  153. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  154. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  155. package/build/services/yaml-workflow/generator.js +4 -4
  156. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  157. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  158. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  159. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  160. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  161. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  162. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  163. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  164. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  165. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  166. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  167. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  168. package/build/services/yaml-workflow/sql.d.ts +2 -1
  169. package/build/services/yaml-workflow/sql.js +10 -3
  170. package/build/start/workers.js +6 -5
  171. package/build/system/activities/file-storage.d.ts +4 -0
  172. package/build/system/activities/file-storage.js +7 -1
  173. package/build/system/activities/knowledge.d.ts +23 -0
  174. package/build/system/activities/knowledge.js +50 -10
  175. package/build/system/activities/schema-exchange.d.ts +50 -0
  176. package/build/system/activities/schema-exchange.js +210 -0
  177. package/build/system/activities/sql.d.ts +4 -1
  178. package/build/system/activities/sql.js +37 -2
  179. package/build/system/index.js +1 -0
  180. package/build/system/mcp-servers/file-storage.js +3 -1
  181. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  182. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  183. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  184. package/build/system/mcp-servers/human-queue.js +9 -51
  185. package/build/system/mcp-servers/knowledge.js +69 -6
  186. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  187. package/build/system/mcp-servers/schema-exchange.js +93 -0
  188. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  189. package/build/system/seed/server-definitions.d.ts +112 -1
  190. package/build/system/seed/server-definitions.js +37 -0
  191. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  192. package/build/system/seed/tool-manifests-data.js +37 -1
  193. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  194. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  195. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  196. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  197. package/build/system/workflows/mcp-triage/index.js +17 -75
  198. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  199. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  200. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
  201. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
  202. package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
  203. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  204. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  205. package/build/tsconfig.tsbuildinfo +1 -1
  206. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
  207. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  208. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  209. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  210. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
  211. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  212. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  213. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  214. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  215. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  216. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
  217. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  218. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
  219. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  220. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  221. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  222. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
  223. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
  224. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
  225. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  226. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
  227. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  228. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  229. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  230. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
  231. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  232. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
  233. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  234. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
  235. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  236. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
  237. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  238. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  239. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  240. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +2 -0
  241. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  242. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
  243. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
  244. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
  245. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
  246. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
  247. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
  248. package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
  249. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  250. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
  251. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  252. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  253. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  254. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
  255. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  256. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  257. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  258. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  259. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  260. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
  261. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  262. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
  263. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  264. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
  265. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DurFwIwe.js.map} +1 -1
  266. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  267. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  268. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
  269. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
  270. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
  271. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  272. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
  273. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  274. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
  275. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  276. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  277. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  278. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
  279. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  280. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
  281. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  282. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  283. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  284. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
  285. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  286. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
  287. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  288. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
  289. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  290. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
  291. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
  292. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  293. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  294. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
  295. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
  296. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  297. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  298. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  299. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  300. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  301. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  302. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
  303. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
  304. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
  305. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
  306. package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
  307. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  308. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
  309. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-CmznCuAx.js.map} +1 -1
  310. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  311. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  312. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  313. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  314. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  315. package/dashboard/dist/assets/index-C8-UaN4N.js +2 -0
  316. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-C8-UaN4N.js.map} +1 -1
  317. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  318. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  319. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  320. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-CjxHCVxl.js.map} +1 -1
  321. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  322. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  323. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  324. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
  325. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
  326. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
  327. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
  328. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-XGOmZ117.js.map} +1 -1
  329. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  330. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  331. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
  332. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  333. package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
  334. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
  335. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
  336. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
  337. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
  338. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
  339. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
  340. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
  341. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
  342. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  343. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
  344. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  345. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
  346. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
  347. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
  348. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
  349. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  350. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  351. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  352. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  353. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  354. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
  355. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
  356. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
  357. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
  358. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  359. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
  360. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
  361. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
  362. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
  363. package/dashboard/dist/index.html +3 -3
  364. package/docs/api/http/file-browser.md +101 -0
  365. package/docs/api/http/knowledge.md +203 -0
  366. package/docs/api/http/settings.md +6 -4
  367. package/docs/api/sdk/files.md +68 -0
  368. package/docs/api/sdk/knowledge.md +126 -0
  369. package/docs/api/sdk/settings.md +3 -2
  370. package/docs/cli.md +171 -0
  371. package/docs/compilation.md +16 -0
  372. package/docs/compiler.md +311 -0
  373. package/docs/events.md +19 -0
  374. package/docs/schema-exchange.md +173 -0
  375. package/docs/self-test.md +106 -0
  376. package/docs/workflows.md +19 -0
  377. package/package.json +15 -2
  378. package/build/api/escalations.d.ts +0 -271
  379. package/build/api/escalations.js +0 -932
  380. package/build/api/workflows.d.ts +0 -158
  381. package/build/api/workflows.js +0 -414
  382. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js +0 -2
  383. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
  384. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  385. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  386. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  387. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  388. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  389. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  390. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  391. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  392. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  393. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
  394. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
  395. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  396. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  397. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  398. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  399. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  400. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  401. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  402. package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
  403. package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
  404. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  405. package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
  406. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  407. package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
  408. package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
  409. package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
  410. package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
  411. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  412. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  413. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  414. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  415. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  416. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  417. package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
  418. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  419. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  420. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  421. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  422. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  423. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  424. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import{j as e,S as D,i as T}from"./index-BYZX9tOb.js";import{a as f}from"./vendor-query-DLp59M9_.js";import{c as R,d as A,b as $,u as q,e as B,f as z}from"./workflows-CeRci9z3.js";import{P as H}from"./PageHeader-BcTVF9ul.js";import{P as U,Z,a1 as G,S as K,e as Q,a2 as I,a3 as X}from"./vendor-icons-T4r2DSPD.js";import{B as Y}from"./BotPicker-Cg5iNEkm.js";import{L as ee,c as F,f as se}from"./vendor-react-Co3Y8ikm.js";import{D as ae}from"./DataTable-CTRhTAfT.js";import{e as te,d as M,C as re,j as oe}from"./helpers-B1BDxBZd.js";import"./bots-DIM6lBoY.js";import"./EmptyState-joNbd4gg.js";import"./TimeAgo-BZdLdrIh.js";import"./StatusBadge-xgb-lZku.js";function le({mode:s,onChange:r}){const h=(o,a,u)=>e.jsxDEV("button",{onClick:()=>r(o),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${s===o?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[a,u]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[h("now",e.jsxDEV(U,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:22,columnNumber:19},this),"Start Now"),h("schedule",e.jsxDEV(Z,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:23,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:21,columnNumber:5},this)}function ie({configs:s,selectedType:r,onSelect:h,tierMap:o}){return e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-6",children:"Select Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:19,columnNumber:7},this),e.jsxDEV("div",{children:s.map(a=>{const u=r===a.workflow_type,m=o.get(a.workflow_type)??"durable";return e.jsxDEV("button",{onClick:()=>h(a),className:`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${u?"border-l-2 border-l-accent pl-4":"pl-0 hover:text-text-primary"}`,children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[m==="certified"&&e.jsxDEV(G,{className:"w-3.5 h-3.5 shrink-0 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:35,columnNumber:42},this),m==="configured"&&e.jsxDEV(K,{className:"w-3.5 h-3.5 shrink-0 text-status-info"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:36,columnNumber:43},this),m==="durable"&&e.jsxDEV(Q,{className:"w-3.5 h-3.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:37,columnNumber:40},this),e.jsxDEV("p",{className:`text-sm font-mono ${u?"font-medium text-accent":"text-text-secondary"}`,children:a.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:38,columnNumber:17},this),a.execute_as&&e.jsxDEV("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded",children:[e.jsxDEV(I,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:43,columnNumber:21},this),a.execute_as]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:42,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:34,columnNumber:15},this),a.description&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary mt-1 leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:49,columnNumber:17},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1 opacity-60",children:a.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:53,columnNumber:15},this)]},a.workflow_type,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:25,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:20,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:18,columnNumber:5},this)}function L({children:s,className:r=""}){return e.jsxDEV("span",{className:`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${r}`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/Pill.tsx",lineNumber:10,columnNumber:5},this)}const C=`{
1
+ import{j as e,S as D,i as T}from"./index-puKKZ5l8.js";import{a as f}from"./vendor-query-DLp59M9_.js";import{c as R,d as $,b as A,u as q,e as B,f as z}from"./workflows-2QAXh3UD.js";import{P as H}from"./PageHeader-CZ9a8cpr.js";import{P as U,$ as G,a3 as K,S as Q,d as X,a4 as I,a5 as Y}from"./vendor-icons-CWl44VA6.js";import{B as Z}from"./BotPicker-DWhn0tr1.js";import{L as ee,c as F,f as se}from"./vendor-react-Co3Y8ikm.js";import{D as ae}from"./DataTable-DXSUbA26.js";import{e as te,d as M,C as re,j as oe}from"./helpers-CmznCuAx.js";import"./bots-Dqos20NE.js";import"./EmptyState-Dep92Wkg.js";import"./TimeAgo-B5LXB2aj.js";import"./StatusBadge-Dm0V1dNN.js";function le({mode:s,onChange:r}){const h=(o,a,u)=>e.jsxDEV("button",{onClick:()=>r(o),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${s===o?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[a,u]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[h("now",e.jsxDEV(U,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:22,columnNumber:19},this),"Start Now"),h("schedule",e.jsxDEV(G,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:23,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:21,columnNumber:5},this)}function ie({configs:s,selectedType:r,onSelect:h,tierMap:o}){return e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-6",children:"Select Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:19,columnNumber:7},this),e.jsxDEV("div",{children:s.map(a=>{const u=r===a.workflow_type,m=o.get(a.workflow_type)??"durable";return e.jsxDEV("button",{onClick:()=>h(a),className:`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${u?"border-l-2 border-l-accent pl-4":"pl-0 hover:text-text-primary"}`,children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[m==="certified"&&e.jsxDEV(K,{className:"w-3.5 h-3.5 shrink-0 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:35,columnNumber:42},this),m==="configured"&&e.jsxDEV(Q,{className:"w-3.5 h-3.5 shrink-0 text-status-info"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:36,columnNumber:43},this),m==="durable"&&e.jsxDEV(X,{className:"w-3.5 h-3.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:37,columnNumber:40},this),e.jsxDEV("p",{className:`text-sm font-mono ${u?"font-medium text-accent":"text-text-secondary"}`,children:a.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:38,columnNumber:17},this),a.execute_as&&e.jsxDEV("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded",children:[e.jsxDEV(I,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:43,columnNumber:21},this),a.execute_as]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:42,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:34,columnNumber:15},this),a.description&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary mt-1 leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:49,columnNumber:17},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1 opacity-60",children:a.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:53,columnNumber:15},this)]},a.workflow_type,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:25,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:20,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:18,columnNumber:5},this)}function L({children:s,className:r=""}){return e.jsxDEV("span",{className:`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${r}`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/Pill.tsx",lineNumber:10,columnNumber:5},this)}const C=`{
2
2
  "data": {},
3
3
  "metadata": {}
4
- }`;function ne(s){return typeof s=="boolean"?"boolean":typeof s=="number"?"number":Array.isArray(s)?"array":s!==null&&typeof s=="object"?"object":"string"}function O(s){if(!s)return[];const r=s.data;return!r||typeof r!="object"?[]:Object.entries(r).map(([h,o])=>({key:h,type:ne(o),defaultValue:o}))}function W(s){return{...s}}function J(s,r){return JSON.stringify({data:s,metadata:r},null,2)}function me({config:s,overrideBot:r,onOverrideChange:h,showOverride:o}){const{user:a}=T(),u=r||s.execute_as;return e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-2",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:23,columnNumber:9},this),u&&!r&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"configured default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:25,columnNumber:11},this),r&&e.jsxDEV("span",{className:"text-[9px] text-accent",children:"admin override"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:28,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:u?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(I,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:34,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:35,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:33,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(X,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:(a==null?void 0:a.displayName)||(a==null?void 0:a.username)||"you"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:40,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:31,columnNumber:7},this),o&&h&&e.jsxDEV("div",{className:"pt-1 border-t border-surface-border",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary mb-1 block",children:"Override identity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV(Y,{selected:r??"",onChange:h,placeholder:s.execute_as?`Default: ${s.execute_as}`:"Invoking user (default)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:21,columnNumber:5},this)}function ce({selectedConfig:s,isJsonMode:r,hasFormView:h,jsonInput:o,formFields:a,dataFields:u,onJsonChange:m,onToggleMode:b,onUpdateFormField:N,onSetFormFields:w}){return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV("label",{className:"block text-xs text-text-secondary",children:"Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[h&&e.jsxDEV("button",{type:"button",onClick:b,className:"text-[10px] text-accent hover:underline",children:r?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:41,columnNumber:13},this),s.envelope_schema?e.jsxDEV("span",{className:"text-[10px] text-accent",children:"Pre-filled from workflow config"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:50,columnNumber:13},this):e.jsxDEV("span",{className:"text-[10px] text-status-warning",children:"No template"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:39,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:35,columnNumber:7},this),!s.envelope_schema&&e.jsxDEV("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or register it as a ",e.jsxDEV(ee,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"certified workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:64,columnNumber:100},this)," in the Workflow Registry for pre-filled fields and form-based input."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:62,columnNumber:9},this),r||!h?e.jsxDEV("textarea",{value:o,onChange:c=>m(c.target.value),className:"input font-mono text-xs",rows:12,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:71,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-3",children:u.map(({key:c,type:n})=>{var E,S;const p=a[c],x=typeof p=="string"?p:JSON.stringify(p??(n==="array"?[]:{}),null,2),g=Math.min(20,Math.max(4,((S=(E=x==null?void 0:x.split)==null?void 0:E.call(x,`
5
- `))==null?void 0:S.length)??4));return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[c,e.jsxDEV("span",{className:"ml-2 font-normal normal-case",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:99,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:97,columnNumber:17},this),n==="boolean"?e.jsxDEV("select",{value:String(p??!1),onChange:l=>N(c,l.target.value,n),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:111,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:112,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:104,columnNumber:19},this):n==="object"||n==="array"?e.jsxDEV("textarea",{value:x,onChange:l=>{try{N(c,JSON.parse(l.target.value),n)}catch{w({...a,[c]:l.target.value})}},className:"input font-mono text-[11px] w-full leading-relaxed",rows:g,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:115,columnNumber:19},this):e.jsxDEV("input",{type:n==="number"?"number":"text",value:String(p??""),onChange:l=>N(c,l.target.value,n),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:137,columnNumber:19},this)]},c,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:96,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",e.jsxDEV("code",{className:"text-accent/80",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:49},this)," holds workflow-specific fields; ",e.jsxDEV("code",{className:"text-accent/80",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:126},this)," is optional context."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:151,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:34,columnNumber:5},this)}function de({selected:s,executionsPath:r}){const h=F(),{isSuperAdmin:o,hasRoleType:a}=T(),u=o||a("admin"),m=R(),[b,N]=f.useState(C),[w,c]=f.useState(""),[n,p]=f.useState({}),[x,g]=f.useState(!1),[E,S]=f.useState(""),l=f.useMemo(()=>O(s.envelope_schema??null),[s.envelope_schema]),j=l.length>0,P=f.useMemo(()=>{if(!s.envelope_schema)return{};const t=s.envelope_schema.metadata;return t&&typeof t=="object"?t:{}},[s.envelope_schema]);f.useEffect(()=>{var k;c(""),m.reset();const t=sessionStorage.getItem("lt:invoke:prefill");if(t){sessionStorage.removeItem("lt:invoke:prefill"),N(t);try{const y=JSON.parse(t),V=(y==null?void 0:y.data)??y;V&&typeof V=="object"&&p(W(V))}catch{}g(!0),S("");return}const d=s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C;N(d),(k=s.envelope_schema)!=null&&k.data&&typeof s.envelope_schema.data=="object"?p(W(s.envelope_schema.data)):p({}),g(!O(s.envelope_schema??null).length),S("")},[s.workflow_type]);const _=()=>{if(x)try{const t=JSON.parse(b);t.data&&typeof t.data=="object"&&p(W(t.data))}catch{}else N(J(n,P));g(!x)},v=(t,d,k)=>{let y=d;k==="number"?y=d===""?0:Number(d):k==="boolean"&&(y=d==="true"||d===!0);const V={...n,[t]:y};p(V),N(J(V,P))},i=async()=>{c("");let t;try{t=JSON.parse(b)}catch{c("Invalid JSON");return}const{data:d,metadata:k}=t;if(!d||typeof d!="object"){c('Envelope must include a "data" object');return}try{await m.mutateAsync({workflowType:s.workflow_type,data:d,metadata:k??void 0,...E?{execute_as:E}:{}}),h(r)}catch{}};return e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV(D,{children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("div",{className:"flex gap-2",children:s.roles.map(t=>e.jsxDEV(L,{children:t},t,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:124,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:122,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:120,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-sm text-text-secondary mt-2 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:129,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:119,columnNumber:7},this),e.jsxDEV(me,{config:s,overrideBot:E,onOverrideChange:S,showOverride:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:135,columnNumber:7},this),e.jsxDEV(ce,{selectedConfig:s,isJsonMode:x,hasFormView:j,jsonInput:b,formFields:n,dataFields:l,onJsonChange:t=>{N(t),c("")},onToggleMode:_,onUpdateFormField:v,onSetFormFields:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:142,columnNumber:7},this),w&&e.jsxDEV("p",{className:"text-xs text-status-error",children:w},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:155,columnNumber:22},this),m.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:m.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:156,columnNumber:32},this),m.isSuccess&&e.jsxDEV("p",{className:"text-xs text-status-success",children:"Workflow started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:157,columnNumber:36},this),e.jsxDEV("button",{onClick:i,disabled:m.isPending,className:"btn-primary",children:m.isPending?"Starting...":"Start Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:118,columnNumber:5},this)}function ue({selected:s,activeTypes:r}){const h=F(),o=A(),[a,u]=f.useState(""),[m,b]=f.useState(""),[N,w]=f.useState(""),[c,n]=f.useState("json"),p=f.useMemo(()=>s!=null&&s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C,[s==null?void 0:s.envelope_schema]),x=m!==p,g=f.useMemo(()=>{try{return JSON.parse(m)}catch{return null}},[m]),E=f.useMemo(()=>g?te(g):null,[g]);f.useEffect(()=>{u(s.cron_schedule??""),b(s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C),w(""),n("json"),o.reset()},[s.workflow_type]);const{data:S,isLoading:l}=$({entity:s.workflow_type,limit:10}),j=()=>{let i;try{i=JSON.parse(m)}catch{w("Invalid JSON in envelope");return}w(""),o.mutate({config:s,cron_schedule:a.trim()||null,envelope_schema:i})},P=()=>{u(""),o.mutate({config:s,cron_schedule:null})},_=()=>{b(p),w("")},v=(i,t)=>{if(!g)return;const d={...g.data??{}},k=d[i];typeof k=="number"?d[i]=t===""?0:Number(t):typeof k=="boolean"?d[i]=t==="true":d[i]=t,b(JSON.stringify({...g,data:d},null,2))};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV(D,{children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:105,columnNumber:11},this),s.cron_schedule&&e.jsxDEV(L,{className:r.has(s.workflow_type)?"bg-status-success/10 text-status-success":"bg-surface-sunken text-text-tertiary",children:r.has(s.workflow_type)?"active":"inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:107,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:104,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-2 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:103,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3",children:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2",children:"Cron runs as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(I,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:s.execute_as??"lt-system"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:127,columnNumber:11},this),!s.execute_as&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary ml-1",children:"system bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:124,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:138,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:a,onChange:i=>{u(i.target.value),o.reset()},placeholder:"0 */6 * * *",className:"input font-mono text-sm w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:141,columnNumber:13},this),a.trim()&&M(a.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:M(a.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:149,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("button",{onClick:j,disabled:o.isPending,className:"btn-primary text-xs shrink-0",children:o.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:154,columnNumber:11},this),s.cron_schedule&&e.jsxDEV("button",{onClick:P,disabled:o.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:158,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:139,columnNumber:9},this),o.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:163,columnNumber:31},this),o.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:o.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:164,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:137,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(D,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:re.map(([i,t])=>e.jsxDEV("button",{type:"button",onClick:()=>{u(i),o.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:178,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:179,columnNumber:15},this)]},i,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:172,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:170,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV(D,{children:"Cron Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:188,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[x&&e.jsxDEV("button",{type:"button",onClick:_,className:"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors",children:"Reset to default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:191,columnNumber:15},this),E&&e.jsxDEV("div",{className:"flex rounded overflow-hidden border border-surface-border",children:[e.jsxDEV("button",{type:"button",onClick:()=>n("form"),className:`px-2 py-0.5 text-[10px] transition-colors ${c==="form"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:197,columnNumber:17},this),e.jsxDEV("button",{type:"button",onClick:()=>n("json"),className:`px-2 py-0.5 text-[10px] transition-colors ${c==="json"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:198,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:187,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mb-3",children:"This envelope is sent as the workflow input on each cron invocation."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:203,columnNumber:9},this),c==="form"&&E?e.jsxDEV("div",{className:"space-y-3",children:E.map(({key:i,value:t,type:d})=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[11px] text-text-secondary mb-1 font-mono",children:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:211,columnNumber:17},this),d==="boolean"?e.jsxDEV("select",{value:t,onChange:k=>v(i,k.target.value),className:"input text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:214,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:215,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:213,columnNumber:19},this):e.jsxDEV("input",{type:d==="number"?"number":"text",value:t,onChange:k=>v(i,k.target.value),className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:218,columnNumber:19},this)]},i,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:208,columnNumber:11},this):e.jsxDEV("textarea",{value:m,onChange:i=>{b(i.target.value),w("")},className:"input font-mono text-xs w-full",rows:10,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:224,columnNumber:11},this),N&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:N},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:233,columnNumber:27},this),x&&e.jsxDEV("p",{className:"text-[10px] text-accent mt-1.5",children:"Envelope has been customized. Changes will be saved with the schedule."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:234,columnNumber:32},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:186,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Recent Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:239,columnNumber:9},this),e.jsxDEV(ae,{columns:oe,data:(S==null?void 0:S.jobs)??[],keyFn:i=>i.workflow_id,onRowClick:i=>h(`/workflows/executions/${i.workflow_id}`),isLoading:l,emptyMessage:"No executions yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:240,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:238,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:101,columnNumber:5},this)}function pe(){const[s,r]=se(),{data:h,isLoading:o}=q(),{data:a,isLoading:u}=B(),{data:m}=z(),b=s.get("mode")||"now",N=s.get("type")??"",w=h??[],c=f.useMemo(()=>{const l=new Map;for(const j of a??[])l.set(j.workflow_type,j.tier??"durable");return l},[a]),n=f.useMemo(()=>{const l=w.filter(v=>v.invocable),j=new Set(w.map(v=>v.workflow_type)),_=(a??[]).filter(v=>v.active&&!j.has(v.workflow_type)).map(v=>({workflow_type:v.workflow_type,task_queue:v.task_queue??"",invocable:!0,description:null,default_role:"reviewer",roles:[],invocation_roles:[],consumes:[],envelope_schema:null,resolver_schema:null,cron_schedule:null,execute_as:null}));return[...l,..._]},[w,a]),p=n.find(l=>l.workflow_type===N),x=new Set((m??[]).filter(l=>l.active).map(l=>l.workflow_type)),g="/workflows/executions";f.useEffect(()=>{n.length===1&&!s.get("type")&&r({type:n[0].workflow_type,mode:b},{replace:!0})},[n.length]);const E=l=>{const j={mode:l};N&&(j.type=N),r(j,{replace:!0})},S=l=>{r({type:l.workflow_type,mode:b},{replace:!0})};return o||u?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/start/StartWorkflowPage.tsx",lineNumber:81,columnNumber:9},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:82,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:80,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(H,{title:"Invoke Workflow",actions:e.jsxDEV(le,{mode:b,onChange:E},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:91,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:89,columnNumber:7},this),n.length===0?e.jsxDEV("div",{className:"py-16 text-center",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:"No invocable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:96,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:97,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:95,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-12",children:[e.jsxDEV(ie,{configs:n,selectedType:N,onSelect:S,tierMap:c},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:101,columnNumber:11},this),e.jsxDEV("div",{className:"lg:col-span-2",children:N&&p?b==="now"?e.jsxDEV(de,{selected:p,executionsPath:g},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:111,columnNumber:17},this):e.jsxDEV(ue,{selected:p,activeTypes:x},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:113,columnNumber:17},this):e.jsxDEV("div",{className:"py-16 text-center",children:e.jsxDEV("p",{className:"text-sm text-text-tertiary",children:"Select a workflow to begin"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:117,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:116,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:108,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:88,columnNumber:5},this)}function De(){return e.jsxDEV(pe,{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/DurableInvokePage.tsx",lineNumber:4,columnNumber:10},this)}export{De as DurableInvokePage,pe as StartWorkflowPage};
6
- //# sourceMappingURL=index-BizfauqT.js.map
4
+ }`;function ne(s){return typeof s=="boolean"?"boolean":typeof s=="number"?"number":Array.isArray(s)?"array":s!==null&&typeof s=="object"?"object":"string"}function O(s){if(!s)return[];const r=s.data;return!r||typeof r!="object"?[]:Object.entries(r).map(([h,o])=>({key:h,type:ne(o),defaultValue:o}))}function W(s){return{...s}}function J(s,r){return JSON.stringify({data:s,metadata:r},null,2)}function me({config:s,overrideBot:r,onOverrideChange:h,showOverride:o}){const{user:a}=T(),u=r||s.execute_as;return e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-2",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:23,columnNumber:9},this),u&&!r&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"configured default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:25,columnNumber:11},this),r&&e.jsxDEV("span",{className:"text-[9px] text-accent",children:"admin override"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:28,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:u?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(I,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:34,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:35,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:33,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Y,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:(a==null?void 0:a.displayName)||(a==null?void 0:a.username)||"you"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:40,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:31,columnNumber:7},this),o&&h&&e.jsxDEV("div",{className:"pt-1 border-t border-surface-border",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary mb-1 block",children:"Override identity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV(Z,{selected:r??"",onChange:h,placeholder:s.execute_as?`Default: ${s.execute_as}`:"Invoking user (default)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:21,columnNumber:5},this)}function ce({selectedConfig:s,isJsonMode:r,hasFormView:h,jsonInput:o,formFields:a,dataFields:u,onJsonChange:m,onToggleMode:b,onUpdateFormField:N,onSetFormFields:w}){return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV("label",{className:"block text-xs text-text-secondary",children:"Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[h&&e.jsxDEV("button",{type:"button",onClick:b,className:"text-[10px] text-accent hover:underline",children:r?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:41,columnNumber:13},this),s.envelope_schema?e.jsxDEV("span",{className:"text-[10px] text-accent",children:"Pre-filled from workflow config"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:50,columnNumber:13},this):e.jsxDEV("span",{className:"text-[10px] text-status-warning",children:"No template"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:39,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:35,columnNumber:7},this),!s.envelope_schema&&e.jsxDEV("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or register it as a ",e.jsxDEV(ee,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"certified workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:64,columnNumber:100},this)," in the Workflow Registry for pre-filled fields and form-based input."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:62,columnNumber:9},this),r||!h?e.jsxDEV("textarea",{value:o,onChange:c=>m(c.target.value),className:"input font-mono text-xs",rows:12,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:71,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-3",children:u.map(({key:c,type:n})=>{var E,S;const p=a[c],x=typeof p=="string"?p:JSON.stringify(p??(n==="array"?[]:{}),null,2),g=Math.min(20,Math.max(4,((S=(E=x==null?void 0:x.split)==null?void 0:E.call(x,`
5
+ `))==null?void 0:S.length)??4));return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[c,e.jsxDEV("span",{className:"ml-2 font-normal normal-case",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:99,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:97,columnNumber:17},this),n==="boolean"?e.jsxDEV("select",{value:String(p??!1),onChange:l=>N(c,l.target.value,n),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:111,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:112,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:104,columnNumber:19},this):n==="object"||n==="array"?e.jsxDEV("textarea",{value:x,onChange:l=>{try{N(c,JSON.parse(l.target.value),n)}catch{w({...a,[c]:l.target.value})}},className:"input font-mono text-[11px] w-full leading-relaxed",rows:g,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:115,columnNumber:19},this):e.jsxDEV("input",{type:n==="number"?"number":"text",value:String(p??""),onChange:l=>N(c,l.target.value,n),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:137,columnNumber:19},this)]},c,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:96,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",e.jsxDEV("code",{className:"text-accent/80",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:49},this)," holds workflow-specific fields; ",e.jsxDEV("code",{className:"text-accent/80",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:126},this)," is optional context."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:151,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:34,columnNumber:5},this)}function de({selected:s,executionsPath:r}){const h=F(),{isSuperAdmin:o,hasRoleType:a}=T(),u=o||a("admin"),m=R(),[b,N]=f.useState(C),[w,c]=f.useState(""),[n,p]=f.useState({}),[x,g]=f.useState(!1),[E,S]=f.useState(""),l=f.useMemo(()=>O(s.envelope_schema??null),[s.envelope_schema]),j=l.length>0,P=f.useMemo(()=>{if(!s.envelope_schema)return{};const t=s.envelope_schema.metadata;return t&&typeof t=="object"?t:{}},[s.envelope_schema]);f.useEffect(()=>{var k;c(""),m.reset();const t=sessionStorage.getItem("lt:invoke:prefill");if(t){sessionStorage.removeItem("lt:invoke:prefill"),N(t);try{const y=JSON.parse(t),V=(y==null?void 0:y.data)??y;V&&typeof V=="object"&&p(W(V))}catch{}g(!0),S("");return}const d=s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C;N(d),(k=s.envelope_schema)!=null&&k.data&&typeof s.envelope_schema.data=="object"?p(W(s.envelope_schema.data)):p({}),g(!O(s.envelope_schema??null).length),S("")},[s.workflow_type]);const _=()=>{if(x)try{const t=JSON.parse(b);t.data&&typeof t.data=="object"&&p(W(t.data))}catch{}else N(J(n,P));g(!x)},v=(t,d,k)=>{let y=d;k==="number"?y=d===""?0:Number(d):k==="boolean"&&(y=d==="true"||d===!0);const V={...n,[t]:y};p(V),N(J(V,P))},i=async()=>{c("");let t;try{t=JSON.parse(b)}catch{c("Invalid JSON");return}const{data:d,metadata:k}=t;if(!d||typeof d!="object"){c('Envelope must include a "data" object');return}try{await m.mutateAsync({workflowType:s.workflow_type,data:d,metadata:k??void 0,...E?{execute_as:E}:{}}),h(r)}catch{}};return e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV(D,{children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("div",{className:"flex gap-2",children:s.roles.map(t=>e.jsxDEV(L,{children:t},t,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:124,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:122,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:120,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-sm text-text-secondary mt-2 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:129,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:119,columnNumber:7},this),e.jsxDEV(me,{config:s,overrideBot:E,onOverrideChange:S,showOverride:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:135,columnNumber:7},this),e.jsxDEV(ce,{selectedConfig:s,isJsonMode:x,hasFormView:j,jsonInput:b,formFields:n,dataFields:l,onJsonChange:t=>{N(t),c("")},onToggleMode:_,onUpdateFormField:v,onSetFormFields:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:142,columnNumber:7},this),w&&e.jsxDEV("p",{className:"text-xs text-status-error",children:w},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:155,columnNumber:22},this),m.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:m.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:156,columnNumber:32},this),m.isSuccess&&e.jsxDEV("p",{className:"text-xs text-status-success",children:"Workflow started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:157,columnNumber:36},this),e.jsxDEV("button",{onClick:i,disabled:m.isPending,className:"btn-primary",children:m.isPending?"Starting...":"Start Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:118,columnNumber:5},this)}function ue({selected:s,activeTypes:r}){const h=F(),o=$(),[a,u]=f.useState(""),[m,b]=f.useState(""),[N,w]=f.useState(""),[c,n]=f.useState("json"),p=f.useMemo(()=>s!=null&&s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C,[s==null?void 0:s.envelope_schema]),x=m!==p,g=f.useMemo(()=>{try{return JSON.parse(m)}catch{return null}},[m]),E=f.useMemo(()=>g?te(g):null,[g]);f.useEffect(()=>{u(s.cron_schedule??""),b(s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):C),w(""),n("json"),o.reset()},[s.workflow_type]);const{data:S,isLoading:l}=A({entity:s.workflow_type,limit:10}),j=()=>{let i;try{i=JSON.parse(m)}catch{w("Invalid JSON in envelope");return}w(""),o.mutate({config:s,cron_schedule:a.trim()||null,envelope_schema:i})},P=()=>{u(""),o.mutate({config:s,cron_schedule:null})},_=()=>{b(p),w("")},v=(i,t)=>{if(!g)return;const d={...g.data??{}},k=d[i];typeof k=="number"?d[i]=t===""?0:Number(t):typeof k=="boolean"?d[i]=t==="true":d[i]=t,b(JSON.stringify({...g,data:d},null,2))};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV(D,{children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:105,columnNumber:11},this),s.cron_schedule&&e.jsxDEV(L,{className:r.has(s.workflow_type)?"bg-status-success/10 text-status-success":"bg-surface-sunken text-text-tertiary",children:r.has(s.workflow_type)?"active":"inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:107,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:104,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-2 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:103,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3",children:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2",children:"Cron runs as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(I,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:s.execute_as??"lt-system"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:127,columnNumber:11},this),!s.execute_as&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary ml-1",children:"system bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:124,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:138,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:a,onChange:i=>{u(i.target.value),o.reset()},placeholder:"0 */6 * * *",className:"input font-mono text-sm w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:141,columnNumber:13},this),a.trim()&&M(a.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:M(a.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:149,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("button",{onClick:j,disabled:o.isPending,className:"btn-primary text-xs shrink-0",children:o.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:154,columnNumber:11},this),s.cron_schedule&&e.jsxDEV("button",{onClick:P,disabled:o.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:158,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:139,columnNumber:9},this),o.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:163,columnNumber:31},this),o.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:o.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:164,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:137,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(D,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:re.map(([i,t])=>e.jsxDEV("button",{type:"button",onClick:()=>{u(i),o.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:178,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:179,columnNumber:15},this)]},i,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:172,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:170,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV(D,{children:"Cron Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:188,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[x&&e.jsxDEV("button",{type:"button",onClick:_,className:"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors",children:"Reset to default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:191,columnNumber:15},this),E&&e.jsxDEV("div",{className:"flex rounded overflow-hidden border border-surface-border",children:[e.jsxDEV("button",{type:"button",onClick:()=>n("form"),className:`px-2 py-0.5 text-[10px] transition-colors ${c==="form"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:197,columnNumber:17},this),e.jsxDEV("button",{type:"button",onClick:()=>n("json"),className:`px-2 py-0.5 text-[10px] transition-colors ${c==="json"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:198,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:187,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mb-3",children:"This envelope is sent as the workflow input on each cron invocation."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:203,columnNumber:9},this),c==="form"&&E?e.jsxDEV("div",{className:"space-y-3",children:E.map(({key:i,value:t,type:d})=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[11px] text-text-secondary mb-1 font-mono",children:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:211,columnNumber:17},this),d==="boolean"?e.jsxDEV("select",{value:t,onChange:k=>v(i,k.target.value),className:"input text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:214,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:215,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:213,columnNumber:19},this):e.jsxDEV("input",{type:d==="number"?"number":"text",value:t,onChange:k=>v(i,k.target.value),className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:218,columnNumber:19},this)]},i,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:208,columnNumber:11},this):e.jsxDEV("textarea",{value:m,onChange:i=>{b(i.target.value),w("")},className:"input font-mono text-xs w-full",rows:10,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:224,columnNumber:11},this),N&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:N},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:233,columnNumber:27},this),x&&e.jsxDEV("p",{className:"text-[10px] text-accent mt-1.5",children:"Envelope has been customized. Changes will be saved with the schedule."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:234,columnNumber:32},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:186,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Recent Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:239,columnNumber:9},this),e.jsxDEV(ae,{columns:oe,data:(S==null?void 0:S.jobs)??[],keyFn:i=>i.workflow_id,onRowClick:i=>h(`/workflows/executions/${i.workflow_id}`),isLoading:l,emptyMessage:"No executions yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:240,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:238,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:101,columnNumber:5},this)}function pe(){const[s,r]=se(),{data:h,isLoading:o}=q(),{data:a,isLoading:u}=B(),{data:m}=z(),b=s.get("mode")||"now",N=s.get("type")??"",w=h??[],c=f.useMemo(()=>{const l=new Map;for(const j of a??[])l.set(j.workflow_type,j.tier??"durable");return l},[a]),n=f.useMemo(()=>{const l=w.filter(v=>v.invocable),j=new Set(w.map(v=>v.workflow_type)),_=(a??[]).filter(v=>v.active&&!j.has(v.workflow_type)).map(v=>({workflow_type:v.workflow_type,task_queue:v.task_queue??"",invocable:!0,description:null,default_role:"reviewer",roles:[],invocation_roles:[],consumes:[],envelope_schema:null,resolver_schema:null,cron_schedule:null,execute_as:null}));return[...l,..._]},[w,a]),p=n.find(l=>l.workflow_type===N),x=new Set((m??[]).filter(l=>l.active).map(l=>l.workflow_type)),g="/workflows/executions";f.useEffect(()=>{n.length===1&&!s.get("type")&&r({type:n[0].workflow_type,mode:b},{replace:!0})},[n.length]);const E=l=>{const j={mode:l};N&&(j.type=N),r(j,{replace:!0})},S=l=>{r({type:l.workflow_type,mode:b},{replace:!0})};return o||u?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/start/StartWorkflowPage.tsx",lineNumber:81,columnNumber:9},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:82,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:80,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(H,{title:"Invoke Workflow",actions:e.jsxDEV(le,{mode:b,onChange:E},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:91,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:89,columnNumber:7},this),n.length===0?e.jsxDEV("div",{className:"py-16 text-center",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:"No invocable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:96,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:97,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:95,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-12",children:[e.jsxDEV(ie,{configs:n,selectedType:N,onSelect:S,tierMap:c},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:101,columnNumber:11},this),e.jsxDEV("div",{className:"lg:col-span-2",children:N&&p?b==="now"?e.jsxDEV(de,{selected:p,executionsPath:g},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:111,columnNumber:17},this):e.jsxDEV(ue,{selected:p,activeTypes:x},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:113,columnNumber:17},this):e.jsxDEV("div",{className:"py-16 text-center",children:e.jsxDEV("p",{className:"text-sm text-text-tertiary",children:"Select a workflow to begin"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:117,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:116,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:108,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:88,columnNumber:5},this)}function De(){return e.jsxDEV(pe,{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/DurableInvokePage.tsx",lineNumber:4,columnNumber:10},this)}export{De as DurableInvokePage,pe as StartWorkflowPage};
6
+ //# sourceMappingURL=index-t5frSddy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BizfauqT.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, ShieldCheck, Settings, Workflow } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-6\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent pl-4'\n : 'pl-0 hover:text-text-primary'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n {tier === 'certified' && <ShieldCheck className=\"w-3.5 h-3.5 shrink-0 text-status-success\" />}\n {tier === 'configured' && <Settings className=\"w-3.5 h-3.5 shrink-0 text-status-info\" />}\n {tier === 'durable' && <Workflow className=\"w-3.5 h-3.5 shrink-0 text-accent/75\" />}\n <p className={`text-sm font-mono ${isSelected ? 'font-medium text-accent' : 'text-text-secondary'}`}>\n {config.workflow_type}\n </p>\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[11px] text-text-tertiary mt-1 leading-relaxed\">\n {config.description}\n </p>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1 opacity-60\">\n {config.task_queue}\n </p>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input font-mono text-xs\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: (metadata as Record<string, unknown>) ?? undefined,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <div className=\"flex items-center justify-between\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n <div className=\"flex gap-2\">\n {selected.roles.map((r) => (\n <Pill key={r}>{r}</Pill>\n ))}\n </div>\n </div>\n {selected.description && (\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-tertiary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => { setCronInput(expr); setCron.reset(); }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input font-mono text-xs w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\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-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n />\n\n <div className=\"lg:col-span-2\">\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n Select a workflow to begin\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxDEV","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","SectionLabel","config","isSelected","tier","ShieldCheck","Settings","Workflow","Bot","Pill","children","className","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","r","v","SchedulePanel","activeTypes","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","certified","c","registeredTypes","durable","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"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"}
1
+ {"version":3,"file":"index-t5frSddy.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, ShieldCheck, Settings, Workflow } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-6\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent pl-4'\n : 'pl-0 hover:text-text-primary'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n {tier === 'certified' && <ShieldCheck className=\"w-3.5 h-3.5 shrink-0 text-status-success\" />}\n {tier === 'configured' && <Settings className=\"w-3.5 h-3.5 shrink-0 text-status-info\" />}\n {tier === 'durable' && <Workflow className=\"w-3.5 h-3.5 shrink-0 text-accent/75\" />}\n <p className={`text-sm font-mono ${isSelected ? 'font-medium text-accent' : 'text-text-secondary'}`}>\n {config.workflow_type}\n </p>\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[11px] text-text-tertiary mt-1 leading-relaxed\">\n {config.description}\n </p>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1 opacity-60\">\n {config.task_queue}\n </p>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input font-mono text-xs\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: (metadata as Record<string, unknown>) ?? undefined,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <div className=\"flex items-center justify-between\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n <div className=\"flex gap-2\">\n {selected.roles.map((r) => (\n <Pill key={r}>{r}</Pill>\n ))}\n </div>\n </div>\n {selected.description && (\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-tertiary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => { setCronInput(expr); setCron.reset(); }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input font-mono text-xs w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\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-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n />\n\n <div className=\"lg:col-span-2\">\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n Select a workflow to begin\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxDEV","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","SectionLabel","config","isSelected","tier","ShieldCheck","Settings","Workflow","Bot","Pill","children","className","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","r","v","SchedulePanel","activeTypes","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","certified","c","registeredTypes","durable","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as c,b as u,c as t}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-BYZX9tOb.js";function m(e={}){const r=new URLSearchParams;e.status&&r.set("status",e.status),e.search&&r.set("search",e.search),e.tags&&r.set("tags",e.tags);const n=r.toString();return c({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers${n?`?${n}`:""}`)})}function y(e){return c({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers/${e}`),enabled:!!e})}function p(){const e=u();return t({mutationFn:r=>s("/mcp/servers",{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function S(){const e=u();return t({mutationFn:({id:r,...n})=>s(`/mcp/servers/${r}`,{method:"PUT",body:JSON.stringify(n)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function v(){return t({mutationFn:e=>s("/mcp/servers/test-connection",{method:"POST",body:JSON.stringify(e)})})}function d(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function l(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}/connect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function q(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}/disconnect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function f(e){return c({queryKey:["mcpCredentialStatus",e],queryFn:()=>s(`/mcp/servers/${e}/credential-status`),enabled:!!e,staleTime:3e4})}function h(){return t({mutationFn:({serverId:e,toolName:r,arguments:n,execute_as:a})=>s(`/mcp/servers/${e}/tools/${r}/call`,{method:"POST",body:JSON.stringify({arguments:n,...a?{execute_as:a}:{}})})})}export{h as a,f as b,l as c,q as d,d as e,v as f,y as g,p as h,S as i,m as u};
2
- //# sourceMappingURL=mcp-B_xbczAt.js.map
1
+ import{u as c,b as u,c as t}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-puKKZ5l8.js";function m(e={}){const r=new URLSearchParams;e.status&&r.set("status",e.status),e.search&&r.set("search",e.search),e.tags&&r.set("tags",e.tags);const n=r.toString();return c({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers${n?`?${n}`:""}`)})}function y(e){return c({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers/${e}`),enabled:!!e})}function p(){const e=u();return t({mutationFn:r=>s("/mcp/servers",{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function S(){const e=u();return t({mutationFn:({id:r,...n})=>s(`/mcp/servers/${r}`,{method:"PUT",body:JSON.stringify(n)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function v(){return t({mutationFn:e=>s("/mcp/servers/test-connection",{method:"POST",body:JSON.stringify(e)})})}function d(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function l(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}/connect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function q(){const e=u();return t({mutationFn:r=>s(`/mcp/servers/${r}/disconnect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function f(e){return c({queryKey:["mcpCredentialStatus",e],queryFn:()=>s(`/mcp/servers/${e}/credential-status`),enabled:!!e,staleTime:3e4})}function h(){return t({mutationFn:({serverId:e,toolName:r,arguments:n,execute_as:a})=>s(`/mcp/servers/${e}/tools/${r}/call`,{method:"POST",body:JSON.stringify({arguments:n,...a?{execute_as:a}:{}})})})}export{h as a,f as b,l as c,q as d,d as e,v as f,y as g,p as h,S as i,m as u};
2
+ //# sourceMappingURL=mcp-DrWymhSu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-B_xbczAt.js","sources":["../../src/api/mcp.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { McpServerRecord, McpToolManifest } from './types';\n\ninterface McpServerListResponse {\n servers: McpServerRecord[];\n total: number;\n}\n\ninterface McpServerFilters {\n status?: string;\n search?: string;\n tags?: string;\n}\n\nexport function useMcpServers(filters: McpServerFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.tags) params.set('tags', filters.tags);\n const qs = params.toString();\n\n return useQuery<McpServerListResponse>({\n queryKey: ['mcpServers', filters],\n queryFn: () => apiFetch(`/mcp/servers${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useMcpServer(id: string) {\n return useQuery<McpServerRecord>({\n queryKey: ['mcpServers', id],\n queryFn: () => apiFetch(`/mcp/servers/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n transport_type: string;\n transport_config: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch('/mcp/servers', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useUpdateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n name?: string;\n description?: string;\n transport_type?: string;\n transport_config?: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch(`/mcp/servers/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport interface TestConnectionResult {\n success: boolean;\n tools: McpToolManifest[];\n error?: string;\n}\n\nexport function useTestConnection() {\n return useMutation<TestConnectionResult, Error, { transport_type: string; transport_config: Record<string, unknown> }>({\n mutationFn: (data) =>\n apiFetch('/mcp/servers/test-connection', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useConnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/connect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useDisconnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/disconnect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useMcpTools(serverId: string) {\n return useQuery<{ tools: McpToolManifest[] }>({\n queryKey: ['mcpTools', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/tools`),\n enabled: !!serverId,\n });\n}\n\nexport interface CredentialStatus {\n required: string[];\n registered: string[];\n missing: string[];\n}\n\nexport function useCredentialStatus(serverId: string) {\n return useQuery<CredentialStatus>({\n queryKey: ['mcpCredentialStatus', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/credential-status`),\n enabled: !!serverId,\n staleTime: 30_000,\n });\n}\n\nexport function useCallMcpTool() {\n return useMutation({\n mutationFn: ({\n serverId,\n toolName,\n arguments: args,\n execute_as,\n }: {\n serverId: string;\n toolName: string;\n arguments: Record<string, unknown>;\n execute_as?: string;\n }) =>\n apiFetch(`/mcp/servers/${serverId}/tools/${toolName}/call`, {\n method: 'POST',\n body: JSON.stringify({ arguments: args, ...(execute_as ? { execute_as } : {}) }),\n }),\n });\n}\n"],"names":["useMcpServers","filters","params","qs","useQuery","apiFetch","useMcpServer","id","useCreateMcpServer","queryClient","useQueryClient","useMutation","data","useUpdateMcpServer","useTestConnection","useDeleteMcpServer","useConnectMcpServer","useDisconnectMcpServer","useCredentialStatus","serverId","useCallMcpTool","toolName","args","execute_as"],"mappings":"qGAeO,SAASA,EAAcC,EAA4B,GAAI,CAC5D,MAAMC,EAAS,IAAI,gBACfD,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EACjD,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAgC,CACrC,SAAU,CAAC,aAAcH,CAAO,EAChC,QAAS,IAAMI,EAAS,eAAeF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC5D,CACH,CAEO,SAASG,EAAaC,EAAY,CACvC,OAAOH,EAA0B,CAC/B,SAAU,CAAC,aAAcG,CAAE,EAC3B,QAAS,IAAMF,EAAS,gBAAgBE,CAAE,EAAE,EAC5C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXP,EAAS,eAAgB,CACvB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASI,GAAqB,CACnC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAaHP,EAAS,gBAAgBE,CAAE,GAAI,CAC7B,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAQO,SAASK,GAAoB,CAClC,OAAOH,EAAgH,CACrH,WAAaC,GACXP,EAAS,+BAAgC,CACvC,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,GAAI,CAAE,OAAQ,SAAU,EACrD,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASO,GAAsB,CACpC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,WAAY,CAAE,OAAQ,OAAQ,EAC3D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASQ,GAAyB,CACvC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,cAAe,CAAE,OAAQ,OAAQ,EAC9D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAgBO,SAASS,EAAoBC,EAAkB,CACpD,OAAOf,EAA2B,CAChC,SAAU,CAAC,sBAAuBe,CAAQ,EAC1C,QAAS,IAAMd,EAAS,gBAAgBc,CAAQ,oBAAoB,EACpE,QAAS,CAAC,CAACA,EACX,UAAW,GAAA,CACZ,CACH,CAEO,SAASC,GAAiB,CAC/B,OAAOT,EAAY,CACjB,WAAY,CAAC,CACX,SAAAQ,EACA,SAAAE,EACA,UAAWC,EACX,WAAAC,CAAA,IAOAlB,EAAS,gBAAgBc,CAAQ,UAAUE,CAAQ,QAAS,CAC1D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAChF,CAAA,CACJ,CACH"}
1
+ {"version":3,"file":"mcp-DrWymhSu.js","sources":["../../src/api/mcp.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { McpServerRecord, McpToolManifest } from './types';\n\ninterface McpServerListResponse {\n servers: McpServerRecord[];\n total: number;\n}\n\ninterface McpServerFilters {\n status?: string;\n search?: string;\n tags?: string;\n}\n\nexport function useMcpServers(filters: McpServerFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.tags) params.set('tags', filters.tags);\n const qs = params.toString();\n\n return useQuery<McpServerListResponse>({\n queryKey: ['mcpServers', filters],\n queryFn: () => apiFetch(`/mcp/servers${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useMcpServer(id: string) {\n return useQuery<McpServerRecord>({\n queryKey: ['mcpServers', id],\n queryFn: () => apiFetch(`/mcp/servers/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n transport_type: string;\n transport_config: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch('/mcp/servers', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useUpdateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n name?: string;\n description?: string;\n transport_type?: string;\n transport_config?: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch(`/mcp/servers/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport interface TestConnectionResult {\n success: boolean;\n tools: McpToolManifest[];\n error?: string;\n}\n\nexport function useTestConnection() {\n return useMutation<TestConnectionResult, Error, { transport_type: string; transport_config: Record<string, unknown> }>({\n mutationFn: (data) =>\n apiFetch('/mcp/servers/test-connection', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useConnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/connect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useDisconnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/disconnect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useMcpTools(serverId: string) {\n return useQuery<{ tools: McpToolManifest[] }>({\n queryKey: ['mcpTools', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/tools`),\n enabled: !!serverId,\n });\n}\n\nexport interface CredentialStatus {\n required: string[];\n registered: string[];\n missing: string[];\n}\n\nexport function useCredentialStatus(serverId: string) {\n return useQuery<CredentialStatus>({\n queryKey: ['mcpCredentialStatus', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/credential-status`),\n enabled: !!serverId,\n staleTime: 30_000,\n });\n}\n\nexport function useCallMcpTool() {\n return useMutation({\n mutationFn: ({\n serverId,\n toolName,\n arguments: args,\n execute_as,\n }: {\n serverId: string;\n toolName: string;\n arguments: Record<string, unknown>;\n execute_as?: string;\n }) =>\n apiFetch(`/mcp/servers/${serverId}/tools/${toolName}/call`, {\n method: 'POST',\n body: JSON.stringify({ arguments: args, ...(execute_as ? { execute_as } : {}) }),\n }),\n });\n}\n"],"names":["useMcpServers","filters","params","qs","useQuery","apiFetch","useMcpServer","id","useCreateMcpServer","queryClient","useQueryClient","useMutation","data","useUpdateMcpServer","useTestConnection","useDeleteMcpServer","useConnectMcpServer","useDisconnectMcpServer","useCredentialStatus","serverId","useCallMcpTool","toolName","args","execute_as"],"mappings":"qGAeO,SAASA,EAAcC,EAA4B,GAAI,CAC5D,MAAMC,EAAS,IAAI,gBACfD,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EACjD,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAgC,CACrC,SAAU,CAAC,aAAcH,CAAO,EAChC,QAAS,IAAMI,EAAS,eAAeF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC5D,CACH,CAEO,SAASG,EAAaC,EAAY,CACvC,OAAOH,EAA0B,CAC/B,SAAU,CAAC,aAAcG,CAAE,EAC3B,QAAS,IAAMF,EAAS,gBAAgBE,CAAE,EAAE,EAC5C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXP,EAAS,eAAgB,CACvB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASI,GAAqB,CACnC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAaHP,EAAS,gBAAgBE,CAAE,GAAI,CAC7B,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAQO,SAASK,GAAoB,CAClC,OAAOH,EAAgH,CACrH,WAAaC,GACXP,EAAS,+BAAgC,CACvC,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,GAAI,CAAE,OAAQ,SAAU,EACrD,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASO,GAAsB,CACpC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,WAAY,CAAE,OAAQ,OAAQ,EAC3D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASQ,GAAyB,CACvC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,cAAe,CAAE,OAAQ,OAAQ,EAC9D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAgBO,SAASS,EAAoBC,EAAkB,CACpD,OAAOf,EAA2B,CAChC,SAAU,CAAC,sBAAuBe,CAAQ,EAC1C,QAAS,IAAMd,EAAS,gBAAgBc,CAAQ,oBAAoB,EACpE,QAAS,CAAC,CAACA,EACX,UAAW,GAAA,CACZ,CACH,CAEO,SAASC,GAAiB,CAC/B,OAAOT,EAAY,CACjB,WAAY,CAAC,CACX,SAAAQ,EACA,SAAAE,EACA,UAAWC,EACX,WAAAC,CAAA,IAOAlB,EAAS,gBAAgBc,CAAQ,UAAUE,CAAQ,QAAS,CAC1D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAChF,CAAA,CACJ,CACH"}