@jiggai/kitchen 0.3.33 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/build-manifest.json +5 -5
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +4 -4
  6. package/.next/required-server-files.json +4 -4
  7. package/.next/routes-manifest.json +24 -0
  8. package/.next/server/app/_global-error/page/build-manifest.json +3 -3
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/server/app/_global-error.html +2 -2
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page/build-manifest.json +3 -3
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +5 -5
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  30. package/.next/server/app/agents/[agentId]/page/build-manifest.json +3 -3
  31. package/.next/server/app/agents/[agentId]/page.js +2 -2
  32. package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
  33. package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/agents/[id]/route.js +1 -1
  35. package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
  36. package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
  37. package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
  38. package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
  39. package/.next/server/app/api/agents/route.js +1 -1
  40. package/.next/server/app/api/agents/route.js.nft.json +1 -1
  41. package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
  42. package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
  43. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  44. package/.next/server/app/api/channels/bindings/route.js +1 -1
  45. package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
  46. package/.next/server/app/api/cron/bulk/route/app-paths-manifest.json +3 -0
  47. package/.next/server/app/api/cron/bulk/route/build-manifest.json +11 -0
  48. package/.next/server/app/api/cron/bulk/route/server-reference-manifest.json +4 -0
  49. package/.next/server/app/api/cron/bulk/route.js +6 -0
  50. package/.next/server/app/api/cron/bulk/route.js.map +5 -0
  51. package/.next/server/app/api/cron/bulk/route.js.nft.json +1 -0
  52. package/.next/server/app/api/cron/bulk/route_client-reference-manifest.js +2 -0
  53. package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
  54. package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
  55. package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
  56. package/.next/server/app/api/cron/worker/route.js +2 -1
  57. package/.next/server/app/api/cron/worker/route.js.nft.json +1 -1
  58. package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
  59. package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  60. package/.next/server/app/api/goals/route.js.nft.json +1 -1
  61. package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
  62. package/.next/server/app/api/manifest/route/app-paths-manifest.json +3 -0
  63. package/.next/server/app/api/manifest/route/build-manifest.json +11 -0
  64. package/.next/server/app/api/manifest/route/server-reference-manifest.json +4 -0
  65. package/.next/server/app/api/manifest/route.js +6 -0
  66. package/.next/server/app/api/manifest/route.js.map +5 -0
  67. package/.next/server/app/api/manifest/route.js.nft.json +1 -0
  68. package/.next/server/app/api/manifest/route_client-reference-manifest.js +2 -0
  69. package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
  70. package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/marketplace/recipes/route.js +1 -1
  72. package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
  73. package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js +2 -2
  74. package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js +1 -1
  76. package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/plugins/route.js +1 -1
  78. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  79. package/.next/server/app/api/plugins/test/route.js +1 -1
  80. package/.next/server/app/api/plugins/test/route.js.nft.json +1 -1
  81. package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
  82. package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
  83. package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -1
  84. package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
  85. package/.next/server/app/api/recipes/local-agent-catalog/route.js.nft.json +1 -1
  86. package/.next/server/app/api/recipes/route.js +1 -1
  87. package/.next/server/app/api/recipes/route.js.nft.json +1 -1
  88. package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
  89. package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
  90. package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
  91. package/.next/server/app/api/settings/model-options/route.js +1 -1
  92. package/.next/server/app/api/settings/model-options/route.js.nft.json +1 -1
  93. package/.next/server/app/api/swarms/start/route.js +1 -1
  94. package/.next/server/app/api/swarms/start/route.js.nft.json +1 -1
  95. package/.next/server/app/api/swarms/status/route.js +1 -1
  96. package/.next/server/app/api/swarms/status/route.js.nft.json +1 -1
  97. package/.next/server/app/api/teams/[teamId]/media-providers/route.js +1 -1
  98. package/.next/server/app/api/teams/[teamId]/media-providers/route.js.nft.json +1 -1
  99. package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -1
  100. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -1
  101. package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js.nft.json +1 -1
  102. package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -1
  103. package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -1
  104. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -1
  105. package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
  106. package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
  107. package/.next/server/app/api/teams/list/route/app-paths-manifest.json +3 -0
  108. package/.next/server/app/api/teams/list/route/build-manifest.json +11 -0
  109. package/.next/server/app/api/teams/list/route/server-reference-manifest.json +4 -0
  110. package/.next/server/app/api/teams/list/route.js +6 -0
  111. package/.next/server/app/api/teams/list/route.js.map +5 -0
  112. package/.next/server/app/api/teams/list/route.js.nft.json +1 -0
  113. package/.next/server/app/api/teams/list/route_client-reference-manifest.js +2 -0
  114. package/.next/server/app/api/teams/memory/route.js.nft.json +1 -1
  115. package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
  116. package/.next/server/app/api/teams/orchestrator/route.js +1 -1
  117. package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -1
  118. package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
  119. package/.next/server/app/api/teams/skills/install/route.js.nft.json +1 -1
  120. package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
  121. package/.next/server/app/api/teams/workflow-deliverables/file/route.js +1 -1
  122. package/.next/server/app/api/teams/workflow-deliverables/file/route.js.nft.json +1 -1
  123. package/.next/server/app/api/teams/workflow-deliverables/route.js.nft.json +1 -1
  124. package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -1
  125. package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -1
  126. package/.next/server/app/api/teams/workflow-triggers/route/app-paths-manifest.json +3 -0
  127. package/.next/server/app/api/teams/workflow-triggers/route/build-manifest.json +11 -0
  128. package/.next/server/app/api/teams/workflow-triggers/route/server-reference-manifest.json +4 -0
  129. package/.next/server/app/api/teams/workflow-triggers/route.js +6 -0
  130. package/.next/server/app/api/teams/workflow-triggers/route.js.map +5 -0
  131. package/.next/server/app/api/teams/workflow-triggers/route.js.nft.json +1 -0
  132. package/.next/server/app/api/teams/workflow-triggers/route_client-reference-manifest.js +2 -0
  133. package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -1
  134. package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -1
  135. package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -1
  136. package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
  137. package/.next/server/app/channels/page/build-manifest.json +3 -3
  138. package/.next/server/app/channels/page.js +2 -2
  139. package/.next/server/app/channels/page.js.nft.json +1 -1
  140. package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
  141. package/.next/server/app/channels.html +2 -2
  142. package/.next/server/app/channels.rsc +6 -6
  143. package/.next/server/app/channels.segments/_full.segment.rsc +6 -6
  144. package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
  145. package/.next/server/app/channels.segments/_index.segment.rsc +3 -3
  146. package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
  147. package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +2 -2
  148. package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
  149. package/.next/server/app/cron-jobs/page/build-manifest.json +3 -3
  150. package/.next/server/app/cron-jobs/page.js +2 -2
  151. package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
  152. package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
  153. package/.next/server/app/goals/[id]/page/build-manifest.json +3 -3
  154. package/.next/server/app/goals/[id]/page.js +2 -2
  155. package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
  156. package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/goals/new/page/build-manifest.json +3 -3
  158. package/.next/server/app/goals/new/page.js +2 -2
  159. package/.next/server/app/goals/new/page.js.nft.json +1 -1
  160. package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/goals/new.html +2 -2
  162. package/.next/server/app/goals/new.rsc +6 -6
  163. package/.next/server/app/goals/new.segments/_full.segment.rsc +6 -6
  164. package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
  165. package/.next/server/app/goals/new.segments/_index.segment.rsc +3 -3
  166. package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
  167. package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +2 -2
  168. package/.next/server/app/goals/new.segments/goals/new.segment.rsc +1 -1
  169. package/.next/server/app/goals/new.segments/goals.segment.rsc +1 -1
  170. package/.next/server/app/goals/page/build-manifest.json +3 -3
  171. package/.next/server/app/goals/page.js +2 -2
  172. package/.next/server/app/goals/page.js.nft.json +1 -1
  173. package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/goals.html +1 -1
  175. package/.next/server/app/goals.rsc +6 -6
  176. package/.next/server/app/goals.segments/_full.segment.rsc +6 -6
  177. package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
  178. package/.next/server/app/goals.segments/_index.segment.rsc +3 -3
  179. package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
  180. package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +2 -2
  181. package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
  182. package/.next/server/app/page/build-manifest.json +3 -3
  183. package/.next/server/app/page.js +4 -4
  184. package/.next/server/app/page.js.nft.json +1 -1
  185. package/.next/server/app/page_client-reference-manifest.js +1 -1
  186. package/.next/server/app/recipes/[id]/page/build-manifest.json +3 -3
  187. package/.next/server/app/recipes/[id]/page.js +4 -4
  188. package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
  189. package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/recipes/page/build-manifest.json +3 -3
  191. package/.next/server/app/recipes/page.js +4 -4
  192. package/.next/server/app/recipes/page.js.nft.json +1 -1
  193. package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
  194. package/.next/server/app/runs/page/build-manifest.json +3 -3
  195. package/.next/server/app/runs/page.js +5 -7
  196. package/.next/server/app/runs/page.js.nft.json +1 -1
  197. package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/settings/page/build-manifest.json +3 -3
  199. package/.next/server/app/settings/page.js +2 -2
  200. package/.next/server/app/settings/page.js.nft.json +1 -1
  201. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/settings.html +1 -1
  203. package/.next/server/app/settings.rsc +6 -6
  204. package/.next/server/app/settings.segments/_full.segment.rsc +6 -6
  205. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  206. package/.next/server/app/settings.segments/_index.segment.rsc +3 -3
  207. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  209. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  210. package/.next/server/app/teams/[teamId]/deliverables/page/build-manifest.json +3 -3
  211. package/.next/server/app/teams/[teamId]/deliverables/page.js +5 -5
  212. package/.next/server/app/teams/[teamId]/deliverables/page.js.nft.json +1 -1
  213. package/.next/server/app/teams/[teamId]/deliverables/page_client-reference-manifest.js +1 -1
  214. package/.next/server/app/teams/[teamId]/page/build-manifest.json +3 -3
  215. package/.next/server/app/teams/[teamId]/page.js +5 -6
  216. package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
  217. package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
  218. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page/build-manifest.json +3 -3
  219. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js +5 -6
  220. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js.nft.json +1 -1
  221. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page_client-reference-manifest.js +1 -1
  222. package/.next/server/app/teams/[teamId]/runs/page/build-manifest.json +3 -3
  223. package/.next/server/app/teams/[teamId]/runs/page.js +2 -2
  224. package/.next/server/app/teams/[teamId]/runs/page.js.nft.json +1 -1
  225. package/.next/server/app/teams/[teamId]/runs/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +3 -3
  227. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +2 -2
  228. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -1
  229. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +1 -1
  230. package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +3 -3
  231. package/.next/server/app/teams/[teamId]/tickets/page.js +2 -2
  232. package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -1
  233. package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +3 -3
  235. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +5 -5
  236. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -1
  237. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +3 -3
  239. package/.next/server/app/teams/[teamId]/workflows/page.js +5 -5
  240. package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -1
  241. package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/tickets/[ticket]/page/build-manifest.json +3 -3
  243. package/.next/server/app/tickets/[ticket]/page.js +2 -2
  244. package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
  245. package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/tickets/page/build-manifest.json +3 -3
  247. package/.next/server/app/tickets/page.js +2 -2
  248. package/.next/server/app/tickets/page.js.nft.json +1 -1
  249. package/.next/server/app/tickets/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app-paths-manifest.json +4 -0
  251. package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js +3 -0
  252. package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js.map +1 -0
  253. package/.next/server/chunks/[root-of-the-server]__00a30f40._.js +1 -1
  254. package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js +3 -0
  255. package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js.map +1 -0
  256. package/.next/server/chunks/[root-of-the-server]__04f289da._.js +1 -1
  257. package/.next/server/chunks/[root-of-the-server]__08b4c8f2._.js +1 -1
  258. package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js +3 -0
  259. package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js.map +1 -0
  260. package/.next/server/chunks/[root-of-the-server]__0f55461f._.js +1 -1
  261. package/.next/server/chunks/[root-of-the-server]__1311d7a3._.js +1 -1
  262. package/.next/server/chunks/[root-of-the-server]__1480ffda._.js +1 -1
  263. package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js → [root-of-the-server]__17fa6089._.js} +2 -2
  264. package/.next/server/chunks/[root-of-the-server]__1873f417._.js +1 -1
  265. package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js +3 -0
  266. package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js.map +1 -0
  267. package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js +3 -0
  268. package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js.map +1 -0
  269. package/.next/server/chunks/[root-of-the-server]__1f1e62ac._.js +1 -1
  270. package/.next/server/chunks/[root-of-the-server]__20b1f42d._.js +1 -1
  271. package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js +1 -1
  272. package/.next/server/chunks/[root-of-the-server]__2c207e60._.js +1 -1
  273. package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +1 -1
  274. package/.next/server/chunks/[root-of-the-server]__3021a250._.js +1 -1
  275. package/.next/server/chunks/[root-of-the-server]__30cd38e9._.js +1 -1
  276. package/.next/server/chunks/[root-of-the-server]__392e585d._.js +2 -2
  277. package/.next/server/chunks/[root-of-the-server]__3bfad714._.js +1 -1
  278. package/.next/server/chunks/[root-of-the-server]__3d15e850._.js +1 -1
  279. package/.next/server/chunks/[root-of-the-server]__3f648b9b._.js +1 -1
  280. package/.next/server/chunks/[root-of-the-server]__482575d2._.js +1 -1
  281. package/.next/server/chunks/[root-of-the-server]__4898071c._.js +4 -4
  282. package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js +22 -0
  283. package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js.map +1 -0
  284. package/.next/server/chunks/[root-of-the-server]__4ee12514._.js +1 -1
  285. package/.next/server/chunks/[root-of-the-server]__55defc7c._.js +1 -1
  286. package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js → [root-of-the-server]__5792c29e._.js} +2 -2
  287. package/.next/server/chunks/[root-of-the-server]__5aa1dc93._.js +1 -1
  288. package/.next/server/chunks/[root-of-the-server]__5c5990a6._.js +1 -1
  289. package/.next/server/chunks/[root-of-the-server]__603cb0fa._.js +1 -1
  290. package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js +1 -1
  291. package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js.map +1 -1
  292. package/.next/server/chunks/[root-of-the-server]__636919a0._.js +1 -1
  293. package/.next/server/chunks/[root-of-the-server]__653d42f0._.js +3 -0
  294. package/.next/server/chunks/[root-of-the-server]__653d42f0._.js.map +1 -0
  295. package/.next/server/chunks/[root-of-the-server]__663e79ff._.js +1 -1
  296. package/.next/server/chunks/{[root-of-the-server]__0883634a._.js → [root-of-the-server]__68a21bb1._.js} +2 -2
  297. package/.next/server/chunks/{[root-of-the-server]__0883634a._.js.map → [root-of-the-server]__68a21bb1._.js.map} +1 -1
  298. package/.next/server/chunks/[root-of-the-server]__69c065ce._.js +1 -1
  299. package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js +3 -0
  300. package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js.map +1 -0
  301. package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js → [root-of-the-server]__7194dfe2._.js} +3 -3
  302. package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js → [root-of-the-server]__7347e39f._.js} +2 -2
  303. package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js.map → [root-of-the-server]__7347e39f._.js.map} +1 -1
  304. package/.next/server/chunks/[root-of-the-server]__74e2a9ba._.js +1 -1
  305. package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js +1 -1
  306. package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js.map +1 -1
  307. package/.next/server/chunks/[root-of-the-server]__7e12b9f4._.js +1 -1
  308. package/.next/server/chunks/[root-of-the-server]__87875179._.js +1 -1
  309. package/.next/server/chunks/{[root-of-the-server]__17124952._.js → [root-of-the-server]__89f2190c._.js} +3 -3
  310. package/.next/server/chunks/[root-of-the-server]__8f8e110f._.js +1 -1
  311. package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js +1 -1
  312. package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js.map +1 -1
  313. package/.next/server/chunks/[root-of-the-server]__937b40e2._.js +3 -0
  314. package/.next/server/chunks/[root-of-the-server]__937b40e2._.js.map +1 -0
  315. package/.next/server/chunks/[root-of-the-server]__9853b72d._.js +1 -1
  316. package/.next/server/chunks/[root-of-the-server]__9dba20b3._.js +1 -1
  317. package/.next/server/chunks/[root-of-the-server]__9e96d37b._.js +1 -1
  318. package/.next/server/chunks/[root-of-the-server]__aba68368._.js +1 -1
  319. package/.next/server/chunks/[root-of-the-server]__aed4e4f2._.js +1 -1
  320. package/.next/server/chunks/[root-of-the-server]__b6cff26d._.js +1 -1
  321. package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js → [root-of-the-server]__b986660c._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js.map → [root-of-the-server]__b986660c._.js.map} +1 -1
  323. package/.next/server/chunks/{[root-of-the-server]__343776df._.js → [root-of-the-server]__bbed0e46._.js} +2 -2
  324. package/.next/server/chunks/[root-of-the-server]__c15c5141._.js +1 -1
  325. package/.next/server/chunks/[root-of-the-server]__c50e4bc4._.js +1 -1
  326. package/.next/server/chunks/[root-of-the-server]__cc0860cb._.js +1 -1
  327. package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js +3 -0
  328. package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js.map +1 -0
  329. package/.next/server/chunks/[root-of-the-server]__d302afb4._.js +1 -1
  330. package/.next/server/chunks/[root-of-the-server]__d4a8660e._.js +1 -1
  331. package/.next/server/chunks/[root-of-the-server]__e1432bba._.js +3 -0
  332. package/.next/server/chunks/[root-of-the-server]__e1432bba._.js.map +1 -0
  333. package/.next/server/chunks/[root-of-the-server]__e478ef0d._.js +1 -1
  334. package/.next/server/chunks/[root-of-the-server]__e9acbabd._.js +1 -1
  335. package/.next/server/chunks/[root-of-the-server]__e9d9d570._.js +1 -1
  336. package/.next/server/chunks/[root-of-the-server]__f408c708._.js +2 -2
  337. package/.next/server/chunks/[root-of-the-server]__f4cbadf7._.js +1 -1
  338. package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js +1 -1
  339. package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js +3 -0
  340. package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js.map +1 -0
  341. package/.next/server/chunks/[root-of-the-server]__f994dc62._.js +1 -1
  342. package/.next/server/chunks/[root-of-the-server]__fb22e719._.js +3 -0
  343. package/.next/server/chunks/[root-of-the-server]__fb22e719._.js.map +1 -0
  344. package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js +3 -0
  345. package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js.map +1 -0
  346. package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js +3 -0
  347. package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js.map +1 -0
  348. package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js +3 -0
  349. package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js.map +1 -0
  350. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js +3 -0
  351. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js.map +1 -0
  352. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
  353. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
  354. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js +1 -1
  355. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js +13 -0
  356. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js.map +1 -0
  357. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f5680d9e.js +1 -1
  358. package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js +1 -1
  359. package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js.map +1 -1
  360. package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js +2 -2
  361. package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js.map +1 -1
  362. package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js +3 -0
  363. package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js.map +1 -0
  364. package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
  365. package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
  366. package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js +3 -0
  367. package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js.map +1 -0
  368. package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js +1 -1
  369. package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js.map +1 -1
  370. package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js +3 -0
  371. package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js.map +1 -0
  372. package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js +3 -0
  373. package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js.map +1 -0
  374. package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js +3 -0
  375. package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js.map +1 -0
  376. package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js +3 -0
  377. package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js.map +1 -0
  378. package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js +3 -0
  379. package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js.map +1 -0
  380. package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js → [root-of-the-server]__8e8f535b._.js} +2 -2
  381. package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js.map → [root-of-the-server]__8e8f535b._.js.map} +1 -1
  382. package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +1 -1
  383. package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js.map +1 -1
  384. package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js +1 -1
  385. package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js.map +1 -1
  386. package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js +3 -0
  387. package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js.map +1 -0
  388. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +1 -1
  389. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -1
  390. package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js +3 -0
  391. package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js.map +1 -0
  392. package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js +1 -1
  393. package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js.map +1 -1
  394. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +1 -1
  395. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -1
  396. package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js +3 -0
  397. package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js.map +1 -0
  398. package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js +3 -0
  399. package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js.map +1 -0
  400. package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js +3 -0
  401. package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js.map +1 -0
  402. package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js +3 -0
  403. package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js.map +1 -0
  404. package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +1 -1
  405. package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js.map +1 -1
  406. package/.next/server/chunks/ssr/_1ee3bd7b._.js +1 -1
  407. package/.next/server/chunks/ssr/_1ee3bd7b._.js.map +1 -1
  408. package/.next/server/chunks/ssr/{_deb7a691._.js → _2ab986a4._.js} +2 -2
  409. package/.next/server/chunks/ssr/_2ab986a4._.js.map +1 -0
  410. package/.next/server/chunks/ssr/_2d8d7232._.js +1 -1
  411. package/.next/server/chunks/ssr/_2d8d7232._.js.map +1 -1
  412. package/.next/server/chunks/ssr/_43a80c61._.js +1 -1
  413. package/.next/server/chunks/ssr/_43a80c61._.js.map +1 -1
  414. package/.next/server/chunks/ssr/_641f29bc._.js +3 -0
  415. package/.next/server/chunks/ssr/_641f29bc._.js.map +1 -0
  416. package/.next/server/chunks/ssr/_ac993243._.js +3 -0
  417. package/.next/server/chunks/ssr/_ac993243._.js.map +1 -0
  418. package/.next/server/chunks/ssr/_f636ce67._.js +3 -0
  419. package/.next/server/chunks/ssr/_f636ce67._.js.map +1 -0
  420. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +7 -1
  421. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -1
  422. package/.next/server/chunks/ssr/{_7f9e89d2._.js → node_modules_next_10fb6ad9._.js} +3 -3
  423. package/.next/server/chunks/ssr/node_modules_next_10fb6ad9._.js.map +1 -0
  424. package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js +1 -1
  425. package/.next/server/chunks/ssr/node_modules_next_dist_compiled_bc6b8ddf._.js +1 -1
  426. package/.next/server/chunks/ssr/node_modules_yaml_dist_18db9ed7._.js +2 -2
  427. package/.next/server/chunks/ssr/src_13139e3d._.js +1 -1
  428. package/.next/server/chunks/ssr/src_13139e3d._.js.map +1 -1
  429. package/.next/server/chunks/ssr/src_2a73b867._.js +1 -1
  430. package/.next/server/chunks/ssr/src_2a73b867._.js.map +1 -1
  431. package/.next/server/chunks/ssr/src_2dbb3b7f._.js +1 -1
  432. package/.next/server/chunks/ssr/src_2dbb3b7f._.js.map +1 -1
  433. package/.next/server/chunks/ssr/src_417bc4a6._.js +1 -1
  434. package/.next/server/chunks/ssr/src_417bc4a6._.js.map +1 -1
  435. package/.next/server/chunks/ssr/src_59477309._.js +1 -1
  436. package/.next/server/chunks/ssr/src_59477309._.js.map +1 -1
  437. package/.next/server/chunks/ssr/src_79d55c05._.js +1 -1
  438. package/.next/server/chunks/ssr/src_79d55c05._.js.map +1 -1
  439. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js +1 -1
  440. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js.map +1 -1
  441. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js +1 -1
  442. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js.map +1 -1
  443. package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js +1 -1
  444. package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js.map +1 -1
  445. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js +1 -1
  446. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js.map +1 -1
  447. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js +1 -1
  448. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map +1 -1
  449. package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js +3 -0
  450. package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js.map +1 -0
  451. package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js +1 -1
  452. package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js.map +1 -1
  453. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js +1 -1
  454. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js.map +1 -1
  455. package/.next/server/middleware-build-manifest.js +3 -3
  456. package/.next/server/pages/404.html +1 -1
  457. package/.next/server/pages/500.html +2 -2
  458. package/.next/server/server-reference-manifest.js +1 -1
  459. package/.next/server/server-reference-manifest.json +1 -1
  460. package/.next/static/chunks/001f840e2d5598af.js +10 -0
  461. package/.next/static/chunks/212477db59154fa7.js +3 -0
  462. package/.next/static/chunks/242fee5849d79d1b.js +1 -0
  463. package/.next/static/chunks/26d8587a145bded7.js +1 -0
  464. package/.next/static/chunks/{b83c1ca03c3b8c6d.js → 372ac1d07db9969a.js} +1 -1
  465. package/.next/static/chunks/4a0d27f3023676a5.js +1 -0
  466. package/.next/static/chunks/4ad57cfc54e20abd.js +1 -0
  467. package/.next/static/chunks/4e8866ad8f1f6b2b.js +1 -0
  468. package/.next/static/chunks/7d9e7a36b92578fd.js +1 -0
  469. package/.next/static/chunks/87f63f654bc046a2.js +3 -0
  470. package/.next/static/chunks/8aac543d98940eb3.js +2 -0
  471. package/.next/static/chunks/8acd42df55d57556.js +1 -0
  472. package/.next/static/chunks/95b7564f2360e762.js +1 -0
  473. package/.next/static/chunks/9801fc48f532d076.js +1 -0
  474. package/.next/static/chunks/{d6e1b7307a9274ce.js → 9c627cb11f73ac4c.js} +1 -1
  475. package/.next/static/chunks/ad652e4b50e1fb17.js +1 -0
  476. package/.next/static/chunks/aff32612e6b9d901.js +1 -0
  477. package/.next/static/chunks/c6c561355e97baa8.js +7 -0
  478. package/.next/static/chunks/d4c855575c079ffc.js +3 -0
  479. package/.next/static/chunks/d593ea5e91e81b45.js +1 -0
  480. package/.next/static/chunks/{87879d67a1601ee0.js → e0984ec981f01c0d.js} +1 -1
  481. package/.next/static/chunks/f5039461b97678c7.js +1 -0
  482. package/.next/static/chunks/f51763a2aea0a4b6.js +1 -0
  483. package/.next/static/chunks/f7f157ba542e1ae5.js +1 -0
  484. package/.next/static/chunks/fb008837ba324b34.css +3 -0
  485. package/.next/static/chunks/{turbopack-dbf3078dbf5863bd.js → turbopack-bdd9478663f034d6.js} +1 -1
  486. package/LICENSE +192 -0
  487. package/README.md +19 -5
  488. package/openclaw/index.ts +154 -5
  489. package/openclaw.plugin.json +2 -8
  490. package/package.json +5 -2
  491. package/.next/server/chunks/[root-of-the-server]__18423bab._.js +0 -3
  492. package/.next/server/chunks/[root-of-the-server]__18423bab._.js.map +0 -1
  493. package/.next/server/chunks/[root-of-the-server]__35ec765d._.js +0 -13
  494. package/.next/server/chunks/[root-of-the-server]__35ec765d._.js.map +0 -1
  495. package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js +0 -3
  496. package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js.map +0 -1
  497. package/.next/server/chunks/[root-of-the-server]__813dd669._.js +0 -3
  498. package/.next/server/chunks/[root-of-the-server]__813dd669._.js.map +0 -1
  499. package/.next/server/chunks/[root-of-the-server]__b457b884._.js +0 -22
  500. package/.next/server/chunks/[root-of-the-server]__b457b884._.js.map +0 -1
  501. package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js +0 -3
  502. package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js.map +0 -1
  503. package/.next/server/chunks/[root-of-the-server]__da7df58d._.js +0 -3
  504. package/.next/server/chunks/[root-of-the-server]__da7df58d._.js.map +0 -1
  505. package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js +0 -3
  506. package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js.map +0 -1
  507. package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js +0 -3
  508. package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js.map +0 -1
  509. package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js +0 -3
  510. package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js.map +0 -1
  511. package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js +0 -3
  512. package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js.map +0 -1
  513. package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js +0 -3
  514. package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js.map +0 -1
  515. package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js +0 -3
  516. package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js.map +0 -1
  517. package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js +0 -3
  518. package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js.map +0 -1
  519. package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js +0 -3
  520. package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js.map +0 -1
  521. package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js +0 -3
  522. package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js.map +0 -1
  523. package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js +0 -3
  524. package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js.map +0 -1
  525. package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js +0 -3
  526. package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js.map +0 -1
  527. package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js +0 -3
  528. package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js.map +0 -1
  529. package/.next/server/chunks/ssr/_32beff4b._.js +0 -3
  530. package/.next/server/chunks/ssr/_32beff4b._.js.map +0 -1
  531. package/.next/server/chunks/ssr/_7f9e89d2._.js.map +0 -1
  532. package/.next/server/chunks/ssr/_8538617d._.js +0 -3
  533. package/.next/server/chunks/ssr/_8538617d._.js.map +0 -1
  534. package/.next/server/chunks/ssr/_a506fcf8._.js +0 -3
  535. package/.next/server/chunks/ssr/_a506fcf8._.js.map +0 -1
  536. package/.next/server/chunks/ssr/_deb7a691._.js.map +0 -1
  537. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +0 -3
  538. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +0 -1
  539. package/.next/server/chunks/ssr/src_app_21685f67._.js +0 -3
  540. package/.next/server/chunks/ssr/src_app_21685f67._.js.map +0 -1
  541. package/.next/static/chunks/0edab8a24d59a626.js +0 -2
  542. package/.next/static/chunks/410dc851d0e3033d.js +0 -1
  543. package/.next/static/chunks/4e38b3f280ced64c.js +0 -1
  544. package/.next/static/chunks/4f2b8a07ace7e02b.js +0 -1
  545. package/.next/static/chunks/57ad5290f7e92ffd.css +0 -3
  546. package/.next/static/chunks/8a919077b73862da.js +0 -1
  547. package/.next/static/chunks/9906444fb1191bb4.js +0 -1
  548. package/.next/static/chunks/a625725b4cd85ea3.js +0 -1
  549. package/.next/static/chunks/ac32974713c57cb3.js +0 -1
  550. package/.next/static/chunks/bdb7ebd88ea13111.js +0 -1
  551. package/.next/static/chunks/bfcfbe145220d365.js +0 -1
  552. package/.next/static/chunks/c0d9f53d91cc65c5.js +0 -10
  553. package/.next/static/chunks/c0e2f959abc4cc13.js +0 -1
  554. package/.next/static/chunks/c822e53f79a492c7.js +0 -1
  555. package/.next/static/chunks/ce6b2024d13b4333.js +0 -1
  556. package/.next/static/chunks/d13249af74d111cf.js +0 -3
  557. package/.next/static/chunks/d16f64ca3a8ed208.js +0 -1
  558. package/.next/static/chunks/d7541a171116ec9c.js +0 -1
  559. package/.next/static/chunks/e03137fd069b1514.js +0 -1
  560. package/.next/static/chunks/e10faa9296c8b246.js +0 -1
  561. package/.next/static/chunks/ec24877f7b7f82c5.js +0 -3
  562. package/.next/static/chunks/ff3bbb5df40b2cc4.js +0 -1
  563. /package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js.map → [root-of-the-server]__17fa6089._.js.map} +0 -0
  564. /package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js.map → [root-of-the-server]__5792c29e._.js.map} +0 -0
  565. /package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js.map → [root-of-the-server]__7194dfe2._.js.map} +0 -0
  566. /package/.next/server/chunks/{[root-of-the-server]__17124952._.js.map → [root-of-the-server]__89f2190c._.js.map} +0 -0
  567. /package/.next/server/chunks/{[root-of-the-server]__343776df._.js.map → [root-of-the-server]__bbed0e46._.js.map} +0 -0
  568. /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_buildManifest.js +0 -0
  569. /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_clientMiddlewareManifest.json +0 -0
  570. /package/.next/static/{F0PhVXEIb3LrF9XQem5EQ → QPNWZUPFu-1zEy4dGcXv5}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[68236,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(74621),f=a.i(51200),g=a.i(56635),h=a.i(1760);function i(a){if(0!==a.indexOf("---\n"))return{fm:null};let b=a.indexOf("\n---\n",4);if(-1===b)return{fm:null};let c=a.slice(4,b);try{let a=(0,h.parse)(c);if(!a||"object"!=typeof a)return{fm:null};return{fm:a}}catch(a){return{fm:null,error:(0,e.errorMessage)(a)}}}function j(a,b){let c=b?a.split(".").slice(1).join("."):a;switch(c){case"soul":return"SOUL.md";case"agents":return"AGENTS.md";case"tools":return"TOOLS.md";case"identity":return"IDENTITY.md";case"install":return"INSTALL.md";case"status":return"STATUS.md";default:return c?`${c.toUpperCase()}`:a}}function k(a,b){return a&&b&&a.templates?[...new Set(Object.keys(a.templates).filter(a=>a.startsWith(`${b}.`)).map(a=>j(a,!0)))]:[]}function l({title:a,description:c,buttonLabel:d,onButtonClick:e,error:f,children:g}){return(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:a}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:c})]}),(0,b.jsx)("button",{type:"button",onClick:e,className:"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]",children:d})]}),f?(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]",children:["Frontmatter parse error: ",f]}):null,g]})}function m({fm:a,recipe:c}){return(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",a?.id??c.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",a?.version??"(unknown)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Team id:"})," ",a?.team?.teamId??"(not set)"]}),a?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:a.description}):null]})]}),(0,b.jsx)(n,{fm:a}),(0,b.jsx)(o,{fm:a})]})}function n({fm:a}){return(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Agents (",a?.agents?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(a?.agents??[]).map((c,d)=>(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:c.name??c.role??"(unnamed)"}),c.role?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",c.role]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Role:"})," ",c.role??"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Tools profile:"})," ",c.tools?.profile??"(default)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Allow:"})," ",(c.tools?.allow??[]).length?(c.tools?.allow??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Deny:"})," ",(c.tools?.deny??[]).length?(c.tools?.deny??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{className:"pt-1",children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Expected files:"})," ",k(a,c.role).length?k(a,c.role).join(", "):"(not listed)"]})]})]},`${c.role??"agent"}:${d}`)),a?.agents&&0!==a.agents.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No agents listed in frontmatter)"})]})]})}function o({fm:a}){return(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Cron jobs (",a?.cronJobs?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(a?.cronJobs??[]).map((a,c)=>(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.name??a.id??"(unnamed)"}),a.schedule?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",a.schedule]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[a.agentId?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Agent:"})," ",a.agentId]}):null,a.channel?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Channel:"})," ",a.channel]}):null,"boolean"==typeof a.enabledByDefault?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Enabled by default:"})," ",a.enabledByDefault?"yes":"no"]}):null,a.message?(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-primary)]",children:a.message}):null]})]},`${a.id??"cron"}:${c}`)),a?.cronJobs&&0!==a.cronJobs.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No cron jobs listed in frontmatter)"})]})]})}function p({recipe:a,fm:c,fmErr:d,onOpenCreateTeam:e}){return(0,b.jsx)(l,{title:"Team recipe",description:(0,b.jsxs)(b.Fragment,{children:["Create a team from this recipe. Creating a Team runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold-team"})," with"," ",(0,b.jsx)("code",{children:"--apply-config"}),"."]}),buttonLabel:"Create Team",onButtonClick:e,error:d,children:(0,b.jsx)(m,{fm:c,recipe:a})})}function q({recipe:a,afm:c,afmErr:d,onOpenCreateAgent:e}){return(0,b.jsx)(l,{title:"Agent recipe",description:(0,b.jsxs)(b.Fragment,{children:["Create an agent from this recipe. Creating an Agent runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold"})," with"," ",(0,b.jsx)("code",{children:"--apply-config"}),"."]}),buttonLabel:"Create Agent",onButtonClick:e,error:d,children:(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",c?.id??a.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",c?.version??"(unknown)"]}),c?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:c.description}):null]})]}),(0,b.jsxs)("details",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Files (",Object.keys(c?.templates??{}).length,")"]}),(0,b.jsx)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:Object.keys(c?.templates??{}).length?(0,b.jsx)("ul",{className:"list-disc space-y-1 pl-5",children:Object.keys(c?.templates??{}).map(a=>(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-[11px]",children:a}),(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:" → "}),(0,b.jsx)("span",{className:"font-mono text-[11px]",children:j(a)})]},a))}):(0,b.jsx)("div",{className:"text-[color:var(--ck-text-tertiary)]",children:"(No templates listed in frontmatter)"})})]})]})})}function r({open:a,title:c,recipeId:d,children:e,error:f,busy:g,onClose:h,onConfirm:i,confirmLabel:j}){return a?(0,b.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4",role:"dialog","aria-modal":"true",children:(0,b.jsxs)("div",{className:"ck-glass w-full max-w-lg p-5",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-lg font-semibold tracking-tight",children:c}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["From recipe: ",d]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>g?void 0:h(),className:"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]",children:"Close"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[e,f?(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm",children:f}):null,(0,b.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,b.jsx)("button",{type:"button",disabled:g,onClick:h,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:g,onClick:i,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:g?"Creating":j})]})]})]})}):null}function s({recipeId:a}){let h=(0,d.useRouter)(),[j,k]=(0,c.useState)(!0),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(null),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(""),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)("no"),[E,F]=(0,c.useState)(!1),[G,H]=(0,c.useState)("");(0,c.useEffect)(()=>{(async()=>{k(!0),v("");try{let b=(await (0,f.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"})).recipe;o(b),t(b.content)}catch(a){v((0,e.errorMessage)(a))}finally{k(!1)}})()},[a]);let I=(0,c.useMemo)(()=>!!n&&null!==n.filePath,[n]),J=(0,c.useMemo)(()=>n&&"team"===n.kind?i(s):{fm:null,error:void 0},[n,s]),K=(0,c.useMemo)(()=>n&&"agent"===n.kind?i(s):{fm:null,error:void 0},[n,s]);async function L(){m(!0),v("");try{let b=await (0,f.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:s})});v(`Saved to ${b.filePath}`)}catch(a){v((0,e.errorMessage)(a))}finally{m(!1)}}async function M(){if(!n||!w)return;let a=function(a,b,c){if(!a)return null;let d=b.trim(),e="team"===c?"Team id":"Agent id";return d?d===a.id?`${e} cannot be the same as the recipe id (${a.id}). Choose a new ${c} id.`:null:`${e} is required.`}(n,y,w);if(a)return void H(a);let b=y.trim();F(!0),H("");try{if("team"===w){let{res:a,json:c}=await (0,g.fetchScaffold)({kind:"team",recipeId:n.id,teamId:b,cronInstallChoice:C});if(!a.ok)throw Error(c.error||"Create Team failed");x(null),h.push(`/teams/${encodeURIComponent(b)}`)}else{let{res:a,json:c}=await (0,g.fetchScaffold)({kind:"agent",recipeId:n.id,agentId:b,name:A.trim()||void 0});if(!a.ok)throw Error(c.error||"Create Agent failed");x(null),h.push(`/agents/${encodeURIComponent(b)}`)}h.refresh()}catch(a){H((0,e.errorMessage)(a))}finally{F(!1)}}if(j)return(0,b.jsx)("div",{className:"ck-glass mx-auto max-w-4xl p-6",children:"Loading"});if(!n)return(0,b.jsx)("div",{className:"ck-glass mx-auto max-w-4xl p-6",children:"Not found."});let N="team"===n.kind?J.fm:null,O="team"===n.kind?J.error:void 0,P="agent"===n.kind?K.fm:null,Q="agent"===n.kind?K.error:void 0;return(0,b.jsxs)("div",{className:"ck-glass mx-auto max-w-6xl p-6 sm:p-8",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight",children:n.name}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:[n.id," • ",n.kind," • ",n.source]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Path: ",n.filePath??"(unknown / not writable)"]})]}),(0,b.jsx)("div",{className:"flex gap-2",children:(0,b.jsx)("button",{disabled:!I||l,onClick:L,className:"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:l?"Saving":"Save"})})]}),u?(0,b.jsx)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-primary)]",children:u}):null,(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe markdown"}),(0,b.jsx)("textarea",{value:s,onChange:a=>t(a.target.value),className:"mt-2 h-[70vh] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",spellCheck:!1})]}),"team"===n.kind?(0,b.jsx)(p,{recipe:n,fm:N,fmErr:O,onOpenCreateTeam:function(){H(""),z(""),D("no"),x("team")}}):(0,b.jsx)(q,{recipe:n,afm:P,afmErr:Q,onOpenCreateAgent:function(){H(""),z(""),B((K.fm?.name||n?.name||"").trim()),x("agent")}})]}),(0,b.jsx)(r,{open:null!==w,title:"team"===w?"Create Team":"Create Agent",recipeId:n.id,busy:E,error:G||void 0,onClose:()=>x(null),onConfirm:M,confirmLabel:"team"===w?"Create Team":"Create Agent",children:"team"===w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team id"}),(0,b.jsx)("input",{value:y,onChange:a=>z(a.target.value),placeholder:"e.g. acme",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Install cron jobs"}),(0,b.jsxs)("select",{value:C,onChange:a=>D(a.target.value),className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E,children:[(0,b.jsx)("option",{value:"no",children:"No (recommended)"}),(0,b.jsx)("option",{value:"yes",children:"Yes"})]}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run."})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Agent id"}),(0,b.jsx)("input",{value:y,onChange:a=>z(a.target.value),placeholder:"e.g. larry",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Name (optional)"}),(0,b.jsx)("input",{value:A,onChange:a=>B(a.target.value),placeholder:"e.g. Larry",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]})]})}),(0,b.jsxs)("p",{className:"mt-6 text-xs text-[color:var(--ck-text-tertiary)]",children:["This page edits the recipe markdown and previews what will be created when you click"," ","team"===n.kind?"Create Team":"Create Agent","."]})]})}a.s(["default",()=>s],68236)}];
1
+ module.exports=[68236,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(74621),f=a.i(51200),g=a.i(56635),h=a.i(1760);function i(a){if(0!==a.indexOf("---\n"))return{fm:null};let b=a.indexOf("\n---\n",4);if(-1===b)return{fm:null};let c=a.slice(4,b);try{let a=(0,h.parse)(c);if(!a||"object"!=typeof a)return{fm:null};return{fm:a}}catch(a){return{fm:null,error:(0,e.errorMessage)(a)}}}function j(a,b){let c=b?a.split(".").slice(1).join("."):a;switch(c){case"soul":return"SOUL.md";case"agents":return"AGENTS.md";case"tools":return"TOOLS.md";case"identity":return"IDENTITY.md";case"install":return"INSTALL.md";case"status":return"STATUS.md";default:return c?`${c.toUpperCase()}`:a}}function k(a,b){return a&&b&&a.templates?[...new Set(Object.keys(a.templates).filter(a=>a.startsWith(`${b}.`)).map(a=>j(a,!0)))]:[]}function l({title:a,description:c,buttonLabel:d,onButtonClick:e,error:f,children:g}){return(0,b.jsxs)("div",{className:"ck-card p-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:a}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:c})]}),(0,b.jsx)("button",{type:"button",onClick:e,className:"shrink-0 rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]",children:d})]}),f?(0,b.jsxs)("div",{className:"mt-4 rounded-lg border border-white/10 bg-white/5 p-3 text-xs text-[color:var(--ck-text-primary)]",children:["Frontmatter parse error: ",f]}):null,g]})}function m({fm:a,recipe:c}){return(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",a?.id??c.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",a?.version??"(unknown)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Team id:"})," ",a?.team?.teamId??"(not set)"]}),a?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:a.description}):null]})]}),(0,b.jsx)(n,{fm:a}),(0,b.jsx)(o,{fm:a})]})}function n({fm:a}){return(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Agents (",a?.agents?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(a?.agents??[]).map((c,d)=>(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:c.name??c.role??"(unnamed)"}),c.role?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",c.role]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Role:"})," ",c.role??"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Tools profile:"})," ",c.tools?.profile??"(default)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Allow:"})," ",(c.tools?.allow??[]).length?(c.tools?.allow??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Deny:"})," ",(c.tools?.deny??[]).length?(c.tools?.deny??[]).join(", "):"(none)"]}),(0,b.jsxs)("div",{className:"pt-1",children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Expected files:"})," ",k(a,c.role).length?k(a,c.role).join(", "):"(not listed)"]})]})]},`${c.role??"agent"}:${d}`)),a?.agents&&0!==a.agents.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No agents listed in frontmatter)"})]})]})}function o({fm:a}){return(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Cron jobs (",a?.cronJobs?.length??0,")"]}),(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(a?.cronJobs??[]).map((a,c)=>(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm text-[color:var(--ck-text-primary)]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.name??a.id??"(unnamed)"}),a.schedule?(0,b.jsxs)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:[" — ",a.schedule]}):null]}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[a.agentId?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Agent:"})," ",a.agentId]}):null,a.channel?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Channel:"})," ",a.channel]}):null,"boolean"==typeof a.enabledByDefault?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Enabled by default:"})," ",a.enabledByDefault?"yes":"no"]}):null,a.message?(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap rounded-lg border border-white/10 bg-white/5 p-2 text-[11px] text-[color:var(--ck-text-primary)]",children:a.message}):null]})]},`${a.id??"cron"}:${c}`)),a?.cronJobs&&0!==a.cronJobs.length?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(No cron jobs listed in frontmatter)"})]})]})}function p({recipe:a,fm:c,fmErr:d,onOpenCreateTeam:e}){return(0,b.jsx)(l,{title:"Team recipe",description:(0,b.jsxs)(b.Fragment,{children:["Create a team from this recipe. Creating a Team runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold-team"})," with"," ",(0,b.jsx)("code",{children:"--apply-config"}),"."]}),buttonLabel:"Create Team",onButtonClick:e,error:d,children:(0,b.jsx)(m,{fm:c,recipe:a})})}function q({recipe:a,afm:c,afmErr:d,onOpenCreateAgent:e}){return(0,b.jsx)(l,{title:"Agent recipe",description:(0,b.jsxs)(b.Fragment,{children:["Create an agent from this recipe. Creating an Agent runs ",(0,b.jsx)("code",{children:"openclaw recipes scaffold"})," with"," ",(0,b.jsx)("code",{children:"--apply-config"}),"."]}),buttonLabel:"Create Agent",onButtonClick:e,error:d,children:(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",open:!0,children:[(0,b.jsx)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe information"}),(0,b.jsxs)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Recipe id:"})," ",c?.id??a.id]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:"Version:"})," ",c?.version??"(unknown)"]}),c?.description?(0,b.jsx)("div",{className:"whitespace-pre-wrap",children:c.description}):null]})]}),(0,b.jsxs)("details",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Files (",Object.keys(c?.templates??{}).length,")"]}),(0,b.jsx)("div",{className:"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:Object.keys(c?.templates??{}).length?(0,b.jsx)("ul",{className:"list-disc space-y-1 pl-5",children:Object.keys(c?.templates??{}).map(a=>(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-[11px]",children:a}),(0,b.jsx)("span",{className:"text-[color:var(--ck-text-tertiary)]",children:" → "}),(0,b.jsx)("span",{className:"font-mono text-[11px]",children:j(a)})]},a))}):(0,b.jsx)("div",{className:"text-[color:var(--ck-text-tertiary)]",children:"(No templates listed in frontmatter)"})})]})]})})}function r({open:a,title:c,recipeId:d,children:e,error:f,busy:g,onClose:h,onConfirm:i,confirmLabel:j}){return a?(0,b.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4",role:"dialog","aria-modal":"true",children:(0,b.jsxs)("div",{className:"ck-card w-full max-w-lg p-5",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-lg font-semibold tracking-tight",children:c}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["From recipe: ",d]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>g?void 0:h(),className:"rounded-lg px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]",children:"Close"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-3",children:[e,f?(0,b.jsx)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-3 text-sm",children:f}):null,(0,b.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,b.jsx)("button",{type:"button",disabled:g,onClick:h,className:"rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:g,onClick:i,className:"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:g?"Creating":j})]})]})]})}):null}function s({recipeId:a}){let h=(0,d.useRouter)(),[j,k]=(0,c.useState)(!0),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(null),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(""),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)("no"),[E,F]=(0,c.useState)(!1),[G,H]=(0,c.useState)("");(0,c.useEffect)(()=>{(async()=>{k(!0),v("");try{let b=(await (0,f.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"})).recipe;o(b),t(b.content)}catch(a){v((0,e.errorMessage)(a))}finally{k(!1)}})()},[a]);let I=(0,c.useMemo)(()=>!!n&&null!==n.filePath,[n]),J=(0,c.useMemo)(()=>n&&"team"===n.kind?i(s):{fm:null,error:void 0},[n,s]),K=(0,c.useMemo)(()=>n&&"agent"===n.kind?i(s):{fm:null,error:void 0},[n,s]);async function L(){m(!0),v("");try{let b=await (0,f.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:s})});v(`Saved to ${b.filePath}`)}catch(a){v((0,e.errorMessage)(a))}finally{m(!1)}}async function M(){if(!n||!w)return;let a=function(a,b,c){if(!a)return null;let d=b.trim(),e="team"===c?"Team id":"Agent id";return d?d===a.id?`${e} cannot be the same as the recipe id (${a.id}). Choose a new ${c} id.`:null:`${e} is required.`}(n,y,w);if(a)return void H(a);let b=y.trim();F(!0),H("");try{if("team"===w){let{res:a,json:c}=await (0,g.fetchScaffold)({kind:"team",recipeId:n.id,teamId:b,cronInstallChoice:C});if(!a.ok)throw Error(c.error||"Create Team failed");x(null),h.push(`/teams/${encodeURIComponent(b)}`)}else{let{res:a,json:c}=await (0,g.fetchScaffold)({kind:"agent",recipeId:n.id,agentId:b,name:A.trim()||void 0});if(!a.ok)throw Error(c.error||"Create Agent failed");x(null),h.push(`/agents/${encodeURIComponent(b)}`)}h.refresh()}catch(a){H((0,e.errorMessage)(a))}finally{F(!1)}}if(j)return(0,b.jsx)("div",{className:"ck-card mx-auto max-w-4xl p-6",children:"Loading"});if(!n)return(0,b.jsx)("div",{className:"ck-card mx-auto max-w-4xl p-6",children:"Not found."});let N="team"===n.kind?J.fm:null,O="team"===n.kind?J.error:void 0,P="agent"===n.kind?K.fm:null,Q="agent"===n.kind?K.error:void 0;return(0,b.jsxs)("div",{className:"ck-card mx-auto max-w-6xl p-6 sm:p-8",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight",children:n.name}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:[n.id," • ",n.kind," • ",n.source]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Path: ",n.filePath??"(unknown / not writable)"]})]}),(0,b.jsx)("div",{className:"flex gap-2",children:(0,b.jsx)("button",{disabled:!I||l,onClick:L,className:"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:l?"Saving":"Save"})})]}),u?(0,b.jsx)("div",{className:"mt-4 rounded-lg border border-white/10 bg-white/5 p-3 text-sm text-[color:var(--ck-text-primary)]",children:u}):null,(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("div",{className:"ck-card p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe markdown"}),(0,b.jsx)("textarea",{value:s,onChange:a=>t(a.target.value),className:"mt-2 h-[70vh] w-full resize-none rounded-lg border border-white/10 bg-white/5 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",spellCheck:!1})]}),"team"===n.kind?(0,b.jsx)(p,{recipe:n,fm:N,fmErr:O,onOpenCreateTeam:function(){H(""),z(""),D("no"),x("team")}}):(0,b.jsx)(q,{recipe:n,afm:P,afmErr:Q,onOpenCreateAgent:function(){H(""),z(""),B((K.fm?.name||n?.name||"").trim()),x("agent")}})]}),(0,b.jsx)(r,{open:null!==w,title:"team"===w?"Create Team":"Create Agent",recipeId:n.id,busy:E,error:G||void 0,onClose:()=>x(null),onConfirm:M,confirmLabel:"team"===w?"Create Team":"Create Agent",children:"team"===w?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team id"}),(0,b.jsx)("input",{value:y,onChange:a=>z(a.target.value),placeholder:"e.g. acme",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Install cron jobs"}),(0,b.jsxs)("select",{value:C,onChange:a=>D(a.target.value),className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E,children:[(0,b.jsx)("option",{value:"no",children:"No (recommended)"}),(0,b.jsx)("option",{value:"yes",children:"Yes"})]}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run."})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Agent id"}),(0,b.jsx)("input",{value:y,onChange:a=>z(a.target.value),placeholder:"e.g. larry",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Name (optional)"}),(0,b.jsx)("input",{value:A,onChange:a=>B(a.target.value),placeholder:"e.g. Larry",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]",disabled:E})]})]})}),(0,b.jsxs)("p",{className:"mt-6 text-xs text-[color:var(--ck-text-tertiary)]",children:["This page edits the recipe markdown and previews what will be created when you click"," ","team"===n.kind?"Create Team":"Create Agent","."]})]})}a.s(["default",()=>s],68236)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_recipes_%5Bid%5D_RecipeEditor_index_tsx_98393217._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/recipes/%5Bid%5D/RecipeEditor/index.tsx","../../../../src/lib/recipe-team-agents.ts","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/recipe-editor-utils.ts","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/RecipeEditorPanel.tsx","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/RecipeEditorCreateModal.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { errorMessage } from \"@/lib/errors\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { validateCreateId } from \"@/lib/recipe-team-agents\";\nimport { fetchScaffold } from \"@/lib/scaffold-client\";\nimport type { AgentRecipeFrontmatter, Recipe, TeamRecipeFrontmatter } from \"./types\";\nimport { parseFrontmatter } from \"./recipe-editor-utils\";\nimport { TeamRecipePanelContent, AgentRecipePanelContent } from \"./RecipeEditorPanel\";\nimport { RecipeEditorCreateModal } from \"./RecipeEditorCreateModal\";\n\ntype CreateModalKind = \"team\" | \"agent\" | null;\n\nexport default function RecipeEditor({ recipeId }: { recipeId: string }) {\n const router = useRouter();\n\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [recipe, setRecipe] = useState<Recipe | null>(null);\n const [content, setContent] = useState<string>(\"\");\n const [message, setMessage] = useState<string>(\"\");\n\n const [createModalKind, setCreateModalKind] = useState<CreateModalKind>(null);\n const [createId, setCreateId] = useState(\"\");\n const [createName, setCreateName] = useState(\"\");\n const [cronInstallChoice, setCronInstallChoice] = useState<\"yes\" | \"no\">(\"no\");\n const [createBusy, setCreateBusy] = useState(false);\n const [createError, setCreateError] = useState(\"\");\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n setMessage(\"\");\n try {\n const json = await fetchJson<{ recipe: Recipe }>(\n `/api/recipes/${encodeURIComponent(recipeId)}`,\n { cache: \"no-store\" }\n );\n const r = json.recipe;\n setRecipe(r);\n setContent(r.content);\n } catch (e: unknown) {\n setMessage(errorMessage(e));\n } finally {\n setLoading(false);\n }\n })();\n }, [recipeId]);\n\n const canSave = useMemo(() => {\n if (!recipe) return false;\n return recipe.filePath !== null;\n }, [recipe]);\n\n const teamFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"team\") return { fm: null as TeamRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n const agentFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"agent\") return { fm: null as AgentRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n async function onSave() {\n setSaving(true);\n setMessage(\"\");\n try {\n const json = await fetchJson<{ filePath: string }>(\n `/api/recipes/${encodeURIComponent(recipeId)}`,\n {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content }),\n }\n );\n setMessage(`Saved to ${json.filePath}`);\n } catch (e: unknown) {\n setMessage(errorMessage(e));\n } finally {\n setSaving(false);\n }\n }\n\n function openCreateTeam() {\n setCreateError(\"\");\n setCreateId(\"\");\n setCronInstallChoice(\"no\");\n setCreateModalKind(\"team\");\n }\n\n function openCreateAgent() {\n setCreateError(\"\");\n setCreateId(\"\");\n setCreateName((agentFrontmatter.fm?.name || recipe?.name || \"\").trim());\n setCreateModalKind(\"agent\");\n }\n\n async function onSubmitCreate() {\n if (!recipe || !createModalKind) return;\n const kind = createModalKind;\n const err = validateCreateId(recipe, createId, kind);\n if (err) {\n setCreateError(err);\n return;\n }\n\n const id = createId.trim();\n setCreateBusy(true);\n setCreateError(\"\");\n\n try {\n if (kind === \"team\") {\n const { res, json } = await fetchScaffold({\n kind: \"team\",\n recipeId: recipe.id,\n teamId: id,\n cronInstallChoice,\n });\n if (!res.ok) throw new Error((json as { error?: string }).error || \"Create Team failed\");\n setCreateModalKind(null);\n router.push(`/teams/${encodeURIComponent(id)}`);\n } else {\n const { res, json } = await fetchScaffold({\n kind: \"agent\",\n recipeId: recipe.id,\n agentId: id,\n name: createName.trim() || undefined,\n });\n if (!res.ok) throw new Error((json as { error?: string }).error || \"Create Agent failed\");\n setCreateModalKind(null);\n router.push(`/agents/${encodeURIComponent(id)}`);\n }\n router.refresh();\n } catch (e: unknown) {\n setCreateError(errorMessage(e));\n } finally {\n setCreateBusy(false);\n }\n }\n\n if (loading) return <div className=\"ck-glass mx-auto max-w-4xl p-6\">Loading</div>;\n if (!recipe) return <div className=\"ck-glass mx-auto max-w-4xl p-6\">Not found.</div>;\n\n const fm = recipe.kind === \"team\" ? teamFrontmatter.fm : null;\n const fmErr = recipe.kind === \"team\" ? teamFrontmatter.error : undefined;\n\n const afm = recipe.kind === \"agent\" ? agentFrontmatter.fm : null;\n const afmErr = recipe.kind === \"agent\" ? agentFrontmatter.error : undefined;\n\n return (\n <div className=\"ck-glass mx-auto max-w-6xl p-6 sm:p-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6\">\n <div className=\"min-w-0\">\n <h1 className=\"truncate text-2xl font-semibold tracking-tight\">{recipe.name}</h1>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {recipe.id} • {recipe.kind} • {recipe.source}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Path: {recipe.filePath ?? \"(unknown / not writable)\"}\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <button\n disabled={!canSave || saving}\n onClick={onSave}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {saving ? \"Saving\" : \"Save\"}\n </button>\n </div>\n </div>\n\n {message ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-primary)]\">\n {message}\n </div>\n ) : null}\n\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe markdown</div>\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n className=\"mt-2 h-[70vh] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]\"\n spellCheck={false}\n />\n </div>\n\n {recipe.kind === \"team\" ? (\n <TeamRecipePanelContent recipe={recipe} fm={fm as TeamRecipeFrontmatter | null} fmErr={fmErr} onOpenCreateTeam={openCreateTeam} />\n ) : (\n <AgentRecipePanelContent recipe={recipe} afm={afm as AgentRecipeFrontmatter | null} afmErr={afmErr} onOpenCreateAgent={openCreateAgent} />\n )}\n </div>\n\n <RecipeEditorCreateModal\n open={createModalKind !== null}\n title={createModalKind === \"team\" ? \"Create Team\" : \"Create Agent\"}\n recipeId={recipe.id}\n busy={createBusy}\n error={createError || undefined}\n onClose={() => setCreateModalKind(null)}\n onConfirm={onSubmitCreate}\n confirmLabel={createModalKind === \"team\" ? \"Create Team\" : \"Create Agent\"}\n >\n {createModalKind === \"team\" ? (\n <>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team id</div>\n <input\n value={createId}\n onChange={(e) => setCreateId(e.target.value)}\n placeholder=\"e.g. acme\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Install cron jobs</div>\n <select\n value={cronInstallChoice}\n onChange={(e) => setCronInstallChoice(e.target.value as \"yes\" | \"no\")}\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n >\n <option value=\"no\">No (recommended)</option>\n <option value=\"yes\">Yes</option>\n </select>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run.\n </div>\n </label>\n </>\n ) : (\n <>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Agent id</div>\n <input\n value={createId}\n onChange={(e) => setCreateId(e.target.value)}\n placeholder=\"e.g. larry\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Name (optional)</div>\n <input\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Larry\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n </>\n )}\n </RecipeEditorCreateModal>\n\n <p className=\"mt-6 text-xs text-[color:var(--ck-text-tertiary)]\">\n This page edits the recipe markdown and previews what will be created when you click{\" \"}\n {recipe.kind === \"team\" ? \"Create Team\" : \"Create Agent\"}.\n </p>\n </div>\n );\n}\n","export function splitRecipeFrontmatter(md: string): { yamlText: string; rest: string } {\n if (!md.startsWith(\"---\\n\")) throw new Error(\"Recipe markdown must start with YAML frontmatter (---)\");\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) throw new Error(\"Recipe frontmatter not terminated (---)\");\n const yamlText = md.slice(4, end + 1);\n const rest = md.slice(end + 5);\n return { yamlText, rest };\n}\n\nexport function normalizeRole(role: string): string {\n const r = role.trim();\n if (!r) throw new Error(\"role is required\");\n if (!/^[a-z][a-z0-9-]{0,62}$/i.test(r)) throw new Error(\"role must be alphanumeric/dash\");\n return r;\n}\n\n/** Validates create-team or create-agent id. Returns error message or null. */\nexport function validateCreateId(\n recipe: { id: string } | null,\n id: string,\n entityLabel: \"team\" | \"agent\"\n): string | null {\n if (!recipe) return null;\n const t = id.trim();\n const label = entityLabel === \"team\" ? \"Team id\" : \"Agent id\";\n if (!t) return `${label} is required.`;\n if (t === recipe.id)\n return `${label} cannot be the same as the recipe id (${recipe.id}). Choose a new ${entityLabel} id.`;\n return null;\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { errorMessage } from \"@/lib/errors\";\nimport type { AgentRecipeFrontmatter, TeamRecipeFrontmatter } from \"./types\";\n\nexport function parseFrontmatter(raw: string): { fm: TeamRecipeFrontmatter | AgentRecipeFrontmatter | null; error?: string } {\n const start = raw.indexOf(\"---\\n\");\n if (start !== 0) return { fm: null };\n const end = raw.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return { fm: null };\n const yamlText = raw.slice(4, end);\n\n try {\n const fm = parseYaml(yamlText) as TeamRecipeFrontmatter | AgentRecipeFrontmatter;\n if (!fm || typeof fm !== \"object\") return { fm: null };\n return { fm };\n } catch (e) {\n return { fm: null, error: errorMessage(e) };\n }\n}\n\nexport function templateKeyToFileName(key: string, stripRolePrefix?: boolean): string {\n const suffix = stripRolePrefix ? key.split(\".\").slice(1).join(\".\") : key;\n switch (suffix) {\n case \"soul\":\n return \"SOUL.md\";\n case \"agents\":\n return \"AGENTS.md\";\n case \"tools\":\n return \"TOOLS.md\";\n case \"identity\":\n return \"IDENTITY.md\";\n case \"install\":\n return \"INSTALL.md\";\n case \"status\":\n return \"STATUS.md\";\n default:\n return suffix ? `${suffix.toUpperCase()}` : key;\n }\n}\n\nexport function expectedFilesForRole(fm: TeamRecipeFrontmatter | null, role: string | undefined): string[] {\n if (!fm || !role || !fm.templates) return [];\n const keys = Object.keys(fm.templates).filter((k) => k.startsWith(`${role}.`));\n const files = keys.map((k) => templateKeyToFileName(k, true));\n return [...new Set(files)];\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { expectedFilesForRole, templateKeyToFileName } from \"./recipe-editor-utils\";\nimport type { AgentRecipeFrontmatter, TeamRecipeFrontmatter } from \"./types\";\n\nfunction RecipePanelCard({\n title,\n description,\n buttonLabel,\n onButtonClick,\n error,\n children,\n}: {\n title: string;\n description: ReactNode;\n buttonLabel: string;\n onButtonClick: () => void;\n error?: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"ck-glass-strong p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">{title}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">{description}</div>\n </div>\n <button\n type=\"button\"\n onClick={onButtonClick}\n className=\"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]\"\n >\n {buttonLabel}\n </button>\n </div>\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]\">\n Frontmatter parse error: {error}\n </div>\n ) : null}\n {children}\n </div>\n );\n}\n\nfunction TeamRecipeDetails({ fm, recipe }: { fm: TeamRecipeFrontmatter | null; recipe: { id: string } }) {\n return (\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe information</summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {fm?.id ?? recipe.id}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {fm?.version ?? \"(unknown)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Team id:</span> {fm?.team?.teamId ?? \"(not set)\"}</div>\n {fm?.description ? <div className=\"whitespace-pre-wrap\">{fm.description}</div> : null}\n </div>\n </details>\n <TeamAgentsDetails fm={fm} />\n <TeamCronDetails fm={fm} />\n </div>\n );\n}\n\nfunction TeamAgentsDetails({ fm }: { fm: TeamRecipeFrontmatter | null }) {\n return (\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Agents ({fm?.agents?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.agents ?? []).map((a, idx) => (\n <details key={`${a.role ?? \"agent\"}:${idx}`} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{a.name ?? a.role ?? \"(unnamed)\"}</span>\n {a.role ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {a.role}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Role:</span> {a.role ?? \"(none)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Tools profile:</span> {a.tools?.profile ?? \"(default)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Allow:</span> {(a.tools?.allow ?? []).length ? (a.tools?.allow ?? []).join(\", \") : \"(none)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Deny:</span> {(a.tools?.deny ?? []).length ? (a.tools?.deny ?? []).join(\", \") : \"(none)\"}</div>\n <div className=\"pt-1\">\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Expected files:</span>{\" \"}\n {expectedFilesForRole(fm, a.role).length ? expectedFilesForRole(fm, a.role).join(\", \") : \"(not listed)\"}\n </div>\n </div>\n </details>\n ))}\n {(!fm?.agents || fm.agents.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No agents listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n );\n}\n\nfunction TeamCronDetails({ fm }: { fm: TeamRecipeFrontmatter | null }) {\n return (\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Cron jobs ({fm?.cronJobs?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.cronJobs ?? []).map((c, idx) => (\n <details key={`${c.id ?? \"cron\"}:${idx}`} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{c.name ?? c.id ?? \"(unnamed)\"}</span>\n {c.schedule ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {c.schedule}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {c.agentId ? <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Agent:</span> {c.agentId}</div> : null}\n {c.channel ? <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Channel:</span> {c.channel}</div> : null}\n {typeof c.enabledByDefault === \"boolean\" ? (\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Enabled by default:</span> {c.enabledByDefault ? \"yes\" : \"no\"}</div>\n ) : null}\n {c.message ? (\n <div className=\"mt-2 whitespace-pre-wrap rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-primary)]\">{c.message}</div>\n ) : null}\n </div>\n </details>\n ))}\n {(!fm?.cronJobs || fm.cronJobs.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No cron jobs listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n );\n}\n\nexport function TeamRecipePanelContent({\n recipe,\n fm,\n fmErr,\n onOpenCreateTeam,\n}: {\n recipe: { id: string };\n fm: TeamRecipeFrontmatter | null;\n fmErr?: string;\n onOpenCreateTeam: () => void;\n}) {\n return (\n <RecipePanelCard\n title=\"Team recipe\"\n description={\n <>\n Create a team from this recipe. Creating a Team runs <code>openclaw recipes scaffold-team</code> with{\" \"}\n <code>--apply-config</code>.\n </>\n }\n buttonLabel=\"Create Team\"\n onButtonClick={onOpenCreateTeam}\n error={fmErr}\n >\n <TeamRecipeDetails fm={fm} recipe={recipe} />\n </RecipePanelCard>\n );\n}\n\nexport function AgentRecipePanelContent({\n recipe,\n afm,\n afmErr,\n onOpenCreateAgent,\n}: {\n recipe: { id: string };\n afm: AgentRecipeFrontmatter | null;\n afmErr?: string;\n onOpenCreateAgent: () => void;\n}) {\n return (\n <RecipePanelCard\n title=\"Agent recipe\"\n description={\n <>\n Create an agent from this recipe. Creating an Agent runs <code>openclaw recipes scaffold</code> with{\" \"}\n <code>--apply-config</code>.\n </>\n }\n buttonLabel=\"Create Agent\"\n onButtonClick={onOpenCreateAgent}\n error={afmErr}\n >\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe information</summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {afm?.id ?? recipe.id}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {afm?.version ?? \"(unknown)\"}</div>\n {afm?.description ? <div className=\"whitespace-pre-wrap\">{afm.description}</div> : null}\n </div>\n </details>\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Files ({Object.keys(afm?.templates ?? {}).length})\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {Object.keys(afm?.templates ?? {}).length ? (\n <ul className=\"list-disc space-y-1 pl-5\">\n {Object.keys(afm?.templates ?? {}).map((k) => (\n <li key={k}>\n <span className=\"font-mono text-[11px]\">{k}</span>\n <span className=\"text-[color:var(--ck-text-tertiary)]\"> → </span>\n <span className=\"font-mono text-[11px]\">{templateKeyToFileName(k)}</span>\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"text-[color:var(--ck-text-tertiary)]\">(No templates listed in frontmatter)</div>\n )}\n </div>\n </details>\n </div>\n </RecipePanelCard>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\n\ntype RecipeEditorCreateModalProps = {\n open: boolean;\n title: string;\n recipeId: string;\n children: ReactNode;\n error?: string;\n busy: boolean;\n onClose: () => void;\n onConfirm: () => void;\n confirmLabel: string;\n};\n\nexport function RecipeEditorCreateModal({\n open,\n title,\n recipeId,\n children,\n error,\n busy,\n onClose,\n onConfirm,\n confirmLabel,\n}: RecipeEditorCreateModalProps) {\n if (!open) return null;\n return (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4\" role=\"dialog\" aria-modal=\"true\">\n <div className=\"ck-glass w-full max-w-lg p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold tracking-tight\">{title}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">From recipe: {recipeId}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => (!busy ? onClose() : undefined)}\n className=\"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]\"\n >\n Close\n </button>\n </div>\n <div className=\"mt-4 space-y-3\">\n {children}\n {error ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm\">{error}</div>\n ) : null}\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n disabled={busy}\n onClick={onClose}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={busy}\n onClick={onConfirm}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {busy ? \"Creating\" : confirmLabel}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/app/recipes/%5Bid%5D/RecipeEditor/index.tsx","../../../../src/lib/recipe-team-agents.ts","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/recipe-editor-utils.ts","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/RecipeEditorPanel.tsx","../../../../src/app/recipes/%5Bid%5D/RecipeEditor/RecipeEditorCreateModal.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { errorMessage } from \"@/lib/errors\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { validateCreateId } from \"@/lib/recipe-team-agents\";\nimport { fetchScaffold } from \"@/lib/scaffold-client\";\nimport type { AgentRecipeFrontmatter, Recipe, TeamRecipeFrontmatter } from \"./types\";\nimport { parseFrontmatter } from \"./recipe-editor-utils\";\nimport { TeamRecipePanelContent, AgentRecipePanelContent } from \"./RecipeEditorPanel\";\nimport { RecipeEditorCreateModal } from \"./RecipeEditorCreateModal\";\n\ntype CreateModalKind = \"team\" | \"agent\" | null;\n\nexport default function RecipeEditor({ recipeId }: { recipeId: string }) {\n const router = useRouter();\n\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [recipe, setRecipe] = useState<Recipe | null>(null);\n const [content, setContent] = useState<string>(\"\");\n const [message, setMessage] = useState<string>(\"\");\n\n const [createModalKind, setCreateModalKind] = useState<CreateModalKind>(null);\n const [createId, setCreateId] = useState(\"\");\n const [createName, setCreateName] = useState(\"\");\n const [cronInstallChoice, setCronInstallChoice] = useState<\"yes\" | \"no\">(\"no\");\n const [createBusy, setCreateBusy] = useState(false);\n const [createError, setCreateError] = useState(\"\");\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n setMessage(\"\");\n try {\n const json = await fetchJson<{ recipe: Recipe }>(\n `/api/recipes/${encodeURIComponent(recipeId)}`,\n { cache: \"no-store\" }\n );\n const r = json.recipe;\n setRecipe(r);\n setContent(r.content);\n } catch (e: unknown) {\n setMessage(errorMessage(e));\n } finally {\n setLoading(false);\n }\n })();\n }, [recipeId]);\n\n const canSave = useMemo(() => {\n if (!recipe) return false;\n return recipe.filePath !== null;\n }, [recipe]);\n\n const teamFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"team\") return { fm: null as TeamRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n const agentFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"agent\") return { fm: null as AgentRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n async function onSave() {\n setSaving(true);\n setMessage(\"\");\n try {\n const json = await fetchJson<{ filePath: string }>(\n `/api/recipes/${encodeURIComponent(recipeId)}`,\n {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content }),\n }\n );\n setMessage(`Saved to ${json.filePath}`);\n } catch (e: unknown) {\n setMessage(errorMessage(e));\n } finally {\n setSaving(false);\n }\n }\n\n function openCreateTeam() {\n setCreateError(\"\");\n setCreateId(\"\");\n setCronInstallChoice(\"no\");\n setCreateModalKind(\"team\");\n }\n\n function openCreateAgent() {\n setCreateError(\"\");\n setCreateId(\"\");\n setCreateName((agentFrontmatter.fm?.name || recipe?.name || \"\").trim());\n setCreateModalKind(\"agent\");\n }\n\n async function onSubmitCreate() {\n if (!recipe || !createModalKind) return;\n const kind = createModalKind;\n const err = validateCreateId(recipe, createId, kind);\n if (err) {\n setCreateError(err);\n return;\n }\n\n const id = createId.trim();\n setCreateBusy(true);\n setCreateError(\"\");\n\n try {\n if (kind === \"team\") {\n const { res, json } = await fetchScaffold({\n kind: \"team\",\n recipeId: recipe.id,\n teamId: id,\n cronInstallChoice,\n });\n if (!res.ok) throw new Error((json as { error?: string }).error || \"Create Team failed\");\n setCreateModalKind(null);\n router.push(`/teams/${encodeURIComponent(id)}`);\n } else {\n const { res, json } = await fetchScaffold({\n kind: \"agent\",\n recipeId: recipe.id,\n agentId: id,\n name: createName.trim() || undefined,\n });\n if (!res.ok) throw new Error((json as { error?: string }).error || \"Create Agent failed\");\n setCreateModalKind(null);\n router.push(`/agents/${encodeURIComponent(id)}`);\n }\n router.refresh();\n } catch (e: unknown) {\n setCreateError(errorMessage(e));\n } finally {\n setCreateBusy(false);\n }\n }\n\n if (loading) return <div className=\"ck-card mx-auto max-w-4xl p-6\">Loading</div>;\n if (!recipe) return <div className=\"ck-card mx-auto max-w-4xl p-6\">Not found.</div>;\n\n const fm = recipe.kind === \"team\" ? teamFrontmatter.fm : null;\n const fmErr = recipe.kind === \"team\" ? teamFrontmatter.error : undefined;\n\n const afm = recipe.kind === \"agent\" ? agentFrontmatter.fm : null;\n const afmErr = recipe.kind === \"agent\" ? agentFrontmatter.error : undefined;\n\n return (\n <div className=\"ck-card mx-auto max-w-6xl p-6 sm:p-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6\">\n <div className=\"min-w-0\">\n <h1 className=\"truncate text-2xl font-semibold tracking-tight\">{recipe.name}</h1>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {recipe.id} • {recipe.kind} • {recipe.source}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Path: {recipe.filePath ?? \"(unknown / not writable)\"}\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <button\n disabled={!canSave || saving}\n onClick={onSave}\n className=\"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {saving ? \"Saving\" : \"Save\"}\n </button>\n </div>\n </div>\n\n {message ? (\n <div className=\"mt-4 rounded-lg border border-white/10 bg-white/5 p-3 text-sm text-[color:var(--ck-text-primary)]\">\n {message}\n </div>\n ) : null}\n\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"ck-card p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe markdown</div>\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n className=\"mt-2 h-[70vh] w-full resize-none rounded-lg border border-white/10 bg-white/5 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]\"\n spellCheck={false}\n />\n </div>\n\n {recipe.kind === \"team\" ? (\n <TeamRecipePanelContent recipe={recipe} fm={fm as TeamRecipeFrontmatter | null} fmErr={fmErr} onOpenCreateTeam={openCreateTeam} />\n ) : (\n <AgentRecipePanelContent recipe={recipe} afm={afm as AgentRecipeFrontmatter | null} afmErr={afmErr} onOpenCreateAgent={openCreateAgent} />\n )}\n </div>\n\n <RecipeEditorCreateModal\n open={createModalKind !== null}\n title={createModalKind === \"team\" ? \"Create Team\" : \"Create Agent\"}\n recipeId={recipe.id}\n busy={createBusy}\n error={createError || undefined}\n onClose={() => setCreateModalKind(null)}\n onConfirm={onSubmitCreate}\n confirmLabel={createModalKind === \"team\" ? \"Create Team\" : \"Create Agent\"}\n >\n {createModalKind === \"team\" ? (\n <>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team id</div>\n <input\n value={createId}\n onChange={(e) => setCreateId(e.target.value)}\n placeholder=\"e.g. acme\"\n className=\"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Install cron jobs</div>\n <select\n value={cronInstallChoice}\n onChange={(e) => setCronInstallChoice(e.target.value as \"yes\" | \"no\")}\n className=\"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n >\n <option value=\"no\">No (recommended)</option>\n <option value=\"yes\">Yes</option>\n </select>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run.\n </div>\n </label>\n </>\n ) : (\n <>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Agent id</div>\n <input\n value={createId}\n onChange={(e) => setCreateId(e.target.value)}\n placeholder=\"e.g. larry\"\n className=\"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Name (optional)</div>\n <input\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Larry\"\n className=\"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={createBusy}\n />\n </label>\n </>\n )}\n </RecipeEditorCreateModal>\n\n <p className=\"mt-6 text-xs text-[color:var(--ck-text-tertiary)]\">\n This page edits the recipe markdown and previews what will be created when you click{\" \"}\n {recipe.kind === \"team\" ? \"Create Team\" : \"Create Agent\"}.\n </p>\n </div>\n );\n}\n","export function splitRecipeFrontmatter(md: string): { yamlText: string; rest: string } {\n if (!md.startsWith(\"---\\n\")) throw new Error(\"Recipe markdown must start with YAML frontmatter (---)\");\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) throw new Error(\"Recipe frontmatter not terminated (---)\");\n const yamlText = md.slice(4, end + 1);\n const rest = md.slice(end + 5);\n return { yamlText, rest };\n}\n\nexport function normalizeRole(role: string): string {\n const r = role.trim();\n if (!r) throw new Error(\"role is required\");\n if (!/^[a-z][a-z0-9-]{0,62}$/i.test(r)) throw new Error(\"role must be alphanumeric/dash\");\n return r;\n}\n\n/** Validates create-team or create-agent id. Returns error message or null. */\nexport function validateCreateId(\n recipe: { id: string } | null,\n id: string,\n entityLabel: \"team\" | \"agent\"\n): string | null {\n if (!recipe) return null;\n const t = id.trim();\n const label = entityLabel === \"team\" ? \"Team id\" : \"Agent id\";\n if (!t) return `${label} is required.`;\n if (t === recipe.id)\n return `${label} cannot be the same as the recipe id (${recipe.id}). Choose a new ${entityLabel} id.`;\n return null;\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { errorMessage } from \"@/lib/errors\";\nimport type { AgentRecipeFrontmatter, TeamRecipeFrontmatter } from \"./types\";\n\nexport function parseFrontmatter(raw: string): { fm: TeamRecipeFrontmatter | AgentRecipeFrontmatter | null; error?: string } {\n const start = raw.indexOf(\"---\\n\");\n if (start !== 0) return { fm: null };\n const end = raw.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return { fm: null };\n const yamlText = raw.slice(4, end);\n\n try {\n const fm = parseYaml(yamlText) as TeamRecipeFrontmatter | AgentRecipeFrontmatter;\n if (!fm || typeof fm !== \"object\") return { fm: null };\n return { fm };\n } catch (e) {\n return { fm: null, error: errorMessage(e) };\n }\n}\n\nexport function templateKeyToFileName(key: string, stripRolePrefix?: boolean): string {\n const suffix = stripRolePrefix ? key.split(\".\").slice(1).join(\".\") : key;\n switch (suffix) {\n case \"soul\":\n return \"SOUL.md\";\n case \"agents\":\n return \"AGENTS.md\";\n case \"tools\":\n return \"TOOLS.md\";\n case \"identity\":\n return \"IDENTITY.md\";\n case \"install\":\n return \"INSTALL.md\";\n case \"status\":\n return \"STATUS.md\";\n default:\n return suffix ? `${suffix.toUpperCase()}` : key;\n }\n}\n\nexport function expectedFilesForRole(fm: TeamRecipeFrontmatter | null, role: string | undefined): string[] {\n if (!fm || !role || !fm.templates) return [];\n const keys = Object.keys(fm.templates).filter((k) => k.startsWith(`${role}.`));\n const files = keys.map((k) => templateKeyToFileName(k, true));\n return [...new Set(files)];\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { expectedFilesForRole, templateKeyToFileName } from \"./recipe-editor-utils\";\nimport type { AgentRecipeFrontmatter, TeamRecipeFrontmatter } from \"./types\";\n\nfunction RecipePanelCard({\n title,\n description,\n buttonLabel,\n onButtonClick,\n error,\n children,\n}: {\n title: string;\n description: ReactNode;\n buttonLabel: string;\n onButtonClick: () => void;\n error?: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"ck-card p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">{title}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">{description}</div>\n </div>\n <button\n type=\"button\"\n onClick={onButtonClick}\n className=\"shrink-0 rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]\"\n >\n {buttonLabel}\n </button>\n </div>\n {error ? (\n <div className=\"mt-4 rounded-lg border border-white/10 bg-white/5 p-3 text-xs text-[color:var(--ck-text-primary)]\">\n Frontmatter parse error: {error}\n </div>\n ) : null}\n {children}\n </div>\n );\n}\n\nfunction TeamRecipeDetails({ fm, recipe }: { fm: TeamRecipeFrontmatter | null; recipe: { id: string } }) {\n return (\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-lg border border-white/10 bg-white/5 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe information</summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {fm?.id ?? recipe.id}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {fm?.version ?? \"(unknown)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Team id:</span> {fm?.team?.teamId ?? \"(not set)\"}</div>\n {fm?.description ? <div className=\"whitespace-pre-wrap\">{fm.description}</div> : null}\n </div>\n </details>\n <TeamAgentsDetails fm={fm} />\n <TeamCronDetails fm={fm} />\n </div>\n );\n}\n\nfunction TeamAgentsDetails({ fm }: { fm: TeamRecipeFrontmatter | null }) {\n return (\n <details className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Agents ({fm?.agents?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.agents ?? []).map((a, idx) => (\n <details key={`${a.role ?? \"agent\"}:${idx}`} className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{a.name ?? a.role ?? \"(unnamed)\"}</span>\n {a.role ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {a.role}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Role:</span> {a.role ?? \"(none)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Tools profile:</span> {a.tools?.profile ?? \"(default)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Allow:</span> {(a.tools?.allow ?? []).length ? (a.tools?.allow ?? []).join(\", \") : \"(none)\"}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Deny:</span> {(a.tools?.deny ?? []).length ? (a.tools?.deny ?? []).join(\", \") : \"(none)\"}</div>\n <div className=\"pt-1\">\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Expected files:</span>{\" \"}\n {expectedFilesForRole(fm, a.role).length ? expectedFilesForRole(fm, a.role).join(\", \") : \"(not listed)\"}\n </div>\n </div>\n </details>\n ))}\n {(!fm?.agents || fm.agents.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No agents listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n );\n}\n\nfunction TeamCronDetails({ fm }: { fm: TeamRecipeFrontmatter | null }) {\n return (\n <details className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Cron jobs ({fm?.cronJobs?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.cronJobs ?? []).map((c, idx) => (\n <details key={`${c.id ?? \"cron\"}:${idx}`} className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{c.name ?? c.id ?? \"(unnamed)\"}</span>\n {c.schedule ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {c.schedule}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {c.agentId ? <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Agent:</span> {c.agentId}</div> : null}\n {c.channel ? <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Channel:</span> {c.channel}</div> : null}\n {typeof c.enabledByDefault === \"boolean\" ? (\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Enabled by default:</span> {c.enabledByDefault ? \"yes\" : \"no\"}</div>\n ) : null}\n {c.message ? (\n <div className=\"mt-2 whitespace-pre-wrap rounded-lg border border-white/10 bg-white/5 p-2 text-[11px] text-[color:var(--ck-text-primary)]\">{c.message}</div>\n ) : null}\n </div>\n </details>\n ))}\n {(!fm?.cronJobs || fm.cronJobs.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No cron jobs listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n );\n}\n\nexport function TeamRecipePanelContent({\n recipe,\n fm,\n fmErr,\n onOpenCreateTeam,\n}: {\n recipe: { id: string };\n fm: TeamRecipeFrontmatter | null;\n fmErr?: string;\n onOpenCreateTeam: () => void;\n}) {\n return (\n <RecipePanelCard\n title=\"Team recipe\"\n description={\n <>\n Create a team from this recipe. Creating a Team runs <code>openclaw recipes scaffold-team</code> with{\" \"}\n <code>--apply-config</code>.\n </>\n }\n buttonLabel=\"Create Team\"\n onButtonClick={onOpenCreateTeam}\n error={fmErr}\n >\n <TeamRecipeDetails fm={fm} recipe={recipe} />\n </RecipePanelCard>\n );\n}\n\nexport function AgentRecipePanelContent({\n recipe,\n afm,\n afmErr,\n onOpenCreateAgent,\n}: {\n recipe: { id: string };\n afm: AgentRecipeFrontmatter | null;\n afmErr?: string;\n onOpenCreateAgent: () => void;\n}) {\n return (\n <RecipePanelCard\n title=\"Agent recipe\"\n description={\n <>\n Create an agent from this recipe. Creating an Agent runs <code>openclaw recipes scaffold</code> with{\" \"}\n <code>--apply-config</code>.\n </>\n }\n buttonLabel=\"Create Agent\"\n onButtonClick={onOpenCreateAgent}\n error={afmErr}\n >\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-lg border border-white/10 bg-white/5 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe information</summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {afm?.id ?? recipe.id}</div>\n <div><span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {afm?.version ?? \"(unknown)\"}</div>\n {afm?.description ? <div className=\"whitespace-pre-wrap\">{afm.description}</div> : null}\n </div>\n </details>\n <details className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Files ({Object.keys(afm?.templates ?? {}).length})\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {Object.keys(afm?.templates ?? {}).length ? (\n <ul className=\"list-disc space-y-1 pl-5\">\n {Object.keys(afm?.templates ?? {}).map((k) => (\n <li key={k}>\n <span className=\"font-mono text-[11px]\">{k}</span>\n <span className=\"text-[color:var(--ck-text-tertiary)]\"> → </span>\n <span className=\"font-mono text-[11px]\">{templateKeyToFileName(k)}</span>\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"text-[color:var(--ck-text-tertiary)]\">(No templates listed in frontmatter)</div>\n )}\n </div>\n </details>\n </div>\n </RecipePanelCard>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\n\ntype RecipeEditorCreateModalProps = {\n open: boolean;\n title: string;\n recipeId: string;\n children: ReactNode;\n error?: string;\n busy: boolean;\n onClose: () => void;\n onConfirm: () => void;\n confirmLabel: string;\n};\n\nexport function RecipeEditorCreateModal({\n open,\n title,\n recipeId,\n children,\n error,\n busy,\n onClose,\n onConfirm,\n confirmLabel,\n}: RecipeEditorCreateModalProps) {\n if (!open) return null;\n return (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4\" role=\"dialog\" aria-modal=\"true\">\n <div className=\"ck-card w-full max-w-lg p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold tracking-tight\">{title}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">From recipe: {recipeId}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => (!busy ? onClose() : undefined)}\n className=\"rounded-lg px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]\"\n >\n Close\n </button>\n </div>\n <div className=\"mt-4 space-y-3\">\n {children}\n {error ? (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-3 text-sm\">{error}</div>\n ) : null}\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n disabled={busy}\n onClick={onClose}\n className=\"rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={busy}\n onClick={onConfirm}\n className=\"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {busy ? \"Creating\" : confirmLabel}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[55408,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(72131),f=a.i(35112);let g={1:"Ordering team…",2:"Cooking up agents…",3:"Serving them up hot…"};function h({open:a,step:c,onDismiss:d}){return a?(0,f.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[9999]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-[color:var(--ck-bg-base)]/90 pointer-events-none"}),d?(0,b.jsx)("button",{type:"button",onClick:a=>{a.preventDefault(),a.stopPropagation(),d()},className:"fixed right-4 top-4 z-[10000] rounded-full border border-white/10 bg-[color:var(--ck-bg-glass)] px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] hover:bg-[color:var(--ck-bg-glass-strong)]","aria-label":"Dismiss loading overlay",title:"Dismiss",children:"Esc"}):null,(0,b.jsx)("div",{className:"fixed inset-0 flex items-center justify-center p-6 sm:p-10",children:(0,b.jsxs)("div",{className:"w-full max-w-2xl rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-8 sm:p-10 shadow-[var(--ck-shadow-2)]",children:[(0,b.jsx)("div",{className:"text-2xl font-semibold text-[color:var(--ck-text-primary)]",children:"Claw Kitchen"}),(0,b.jsx)("div",{className:"mt-3 text-base text-[color:var(--ck-text-secondary)]",children:"Hang tight — we’re updating your OpenClaw install."}),(0,b.jsx)("div",{className:"mt-8 space-y-4 text-base",children:[1,2,3].map(a=>{let d=a===c,e=a<c;return(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"h-4 w-4 rounded-full "+(e?"bg-emerald-400":d?"bg-[var(--ck-accent-red)] animate-pulse":"bg-white/20")}),(0,b.jsx)("div",{className:e?"text-[color:var(--ck-text-secondary)] line-through":"text-[color:var(--ck-text-primary)]",children:g[a]})]},a)})})]})})]}),document.body):null}var i=a.i(51200);async function j(a,b){let c=b.intervalMs??500,d=Date.now();for(;Date.now()-d<b.timeoutMs;){let b=await a();if(null!==b)return b;await new Promise(a=>setTimeout(a,c))}return null}var k=a.i(56635),l=a.i(61889),m=a.i(40211);function n(a){let{open:b,name:c,setName:d,id:f,setId:g,idTouched:h,setIdTouched:i,slugify:j=m.slugifyId}=a,k=(0,e.useMemo)(()=>j(c),[c,j]),l=h?f:k;return(0,e.useEffect)(()=>{b&&(h||g(k))},[k,b,h,g]),(0,e.useEffect)(()=>{b||(i(!1),d(""),g(""))},[b,i,d,g]),{derivedId:k,effectiveId:l}}var o=a.i(66063);function p({open:a,title:c,recipeId:d,recipeName:e,children:f,error:g,busy:h,canConfirm:i,onClose:j,onConfirm:k,confirmLabel:l}){return(0,b.jsxs)(o.ConfirmationModal,{open:a,onClose:j,title:c,error:g,confirmLabel:l,confirmBusyLabel:"Creating…",confirmDisabled:!i,busy:h,onConfirm:k,children:[(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Create a new ",c.toLowerCase().replace("create ","")," from recipe"," ",(0,b.jsx)("code",{className:"font-mono",children:d}),e?(0,b.jsxs)(b.Fragment,{children:[" ","(",(0,b.jsx)("span",{className:"font-medium",children:e}),")"]}):null,"."]}),f]})}function q({open:a,recipeId:c,recipeName:d,teamId:f,setTeamId:g,installCron:h,setInstallCron:i,busy:j,error:k,onClose:l,onConfirm:m}){let[o,q]=(0,e.useState)(""),[r,s]=(0,e.useState)(!1),{effectiveId:t}=n({open:a,name:o,setName:q,id:f,setId:g,idTouched:r,setIdTouched:s});return(0,b.jsxs)(p,{open:a,title:"Create team",recipeId:c,recipeName:d,error:k,busy:j,canConfirm:!!t.trim(),onClose:l,onConfirm:m,confirmLabel:"Create team",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team name"}),(0,b.jsx)("input",{value:o,onChange:a=>q(a.target.value),placeholder:"e.g. Crypto Team",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0})]}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team id"}),(0,b.jsx)("input",{value:t,onChange:a=>{s(!0),g(a.target.value)},placeholder:"e.g. my-team",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]"}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"This will scaffold ~/.openclaw/workspace-<teamId> and add the team to config."})]}),(0,b.jsxs)("label",{className:"mt-4 flex items-center gap-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:h,onChange:a=>i(a.target.checked)}),"Install cron jobs from this recipe"]})]})}function r(a){return/^[a-z0-9][a-z0-9_-]{1,62}$/.test(a)}function s({open:a,teamId:c,setTeamId:d,busy:f,error:g,onClose:h,onConfirm:j,onRolesChange:k}){let[l,m]=(0,e.useState)([]),[n,o]=(0,e.useState)(null),[q,s]=(0,e.useState)(""),[t,u]=(0,e.useState)({}),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(null);(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b=await (0,i.fetchJsonWithStatus)("/api/recipes/local-agent-catalog",{cache:"no-store"});if(!a){if(!b.ok)return o(b.error||"Failed to load local agent catalog");if(!b.data.ok)return o(b.data.error||"Failed to load local agent catalog");m(Array.isArray(b.data.items)?b.data.items:[])}})(),()=>{a=!0}},[]);let[B,C]=(0,e.useState)({state:"unknown"}),D=(0,e.useMemo)(()=>{let a=q.trim().toLowerCase(),b=l.map(a=>{var b;let c;if("team-role"===a.kind){let b=`team:${a.recipeId}:${a.roleId}`,c=a.recipeName||a.recipeId,d=a.roleName?`${a.roleName} (${a.roleId})`:a.roleId;return{id:b,label:`${c} → ${d}`,roleId:a.roleId,displayName:a.roleName||`${c} ${a.roleId}`,haystack:`${a.recipeId} ${a.recipeName||""} ${a.roleId} ${a.roleName||""}`.toLowerCase()}}let d=`agent:${a.recipeId}`,e=a.recipeName||a.recipeId,f=a.description?` — ${a.description}`:"";return{id:d,label:`${e} (agent recipe: ${a.recipeId})${f}`,roleId:((c=(b=a.recipeId).split("/").pop()||b).split("-").slice(-1)[0]||c).toLowerCase().replace(/[^a-z0-9_-]+/g,"-"),displayName:e,haystack:`${a.recipeId} ${a.recipeName||""} ${a.description||""}`.toLowerCase()}});return(a?b.filter(b=>b.haystack.includes(a)):b).slice().sort((a,b)=>a.label.localeCompare(b.label)).map(({haystack:a,...b})=>b)},[l,q]),E=(0,e.useMemo)(()=>Object.values(t),[t]),F=c.trim(),G=(0,e.useMemo)(()=>a?F?r(F)?F.endsWith("-team")?"taken"===B.state?`Team id is already taken: ${F}`:null:"Team id must end with -team.":"Invalid team id. Use lowercase letters/numbers with - or _ (2-63 chars).":"Team id is required.":null,[a,F,B.state]),H=(0,e.useMemo)(()=>{let a=new Map;for(let b of E){let c=String(b.roleId??"").trim();if(!c){a.set(b.agentId,"Role id is required.");continue}r(c)||a.set(b.agentId,"Invalid role id (lowercase letters/numbers with - or _).")}return a},[E]),I=!G&&"checking"!==B.state&&"unknown"!==B.state&&E.length>0&&0===H.size;return(0,e.useEffect)(()=>{a&&k(E)},[a,E,k]),(0,e.useEffect)(()=>{if(!a)return;let b=!1,c=setTimeout(async()=>{if(!F||!(r(F)&&F.endsWith("-team")))return void C({state:"unknown"});C({state:"checking"});let a=await (0,i.fetchJsonWithStatus)(`/api/ids/check?kind=team&id=${encodeURIComponent(F)}`,{cache:"no-store"});if(!b){if(!a.ok)return void C({state:"unknown"});if(a.data.ok&&!0===a.data.available)return void C({state:"available"});C({state:"taken",reason:a.data.reason})}},250);return()=>{b=!0,clearTimeout(c)}},[a,F]),(0,e.useEffect)(()=>{if(!a||!I)return;let b=!1,c=setTimeout(async()=>{let a=F.endsWith("-team")?F.slice(0,-5):F,c=await (0,i.fetchJsonWithStatus)("/api/recipes/custom-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({dryRun:!0,recipeId:a,teamId:F,roles:E.map(a=>({roleId:a.roleId,displayName:a.displayName}))})});if(!b){if(!c.ok){A(c.error),w(null),y(null);return}if(!c.data.ok){A(c.data.error||"Failed to generate preview"),w(null),y(null);return}A(null),w("string"==typeof c.data.md?c.data.md:null),y("string"==typeof c.data.filePath?c.data.filePath:null)}},250);return()=>{b=!0,clearTimeout(c)}},[a,I,F,E]),(0,b.jsxs)(p,{open:a,title:"Create custom team",recipeId:"(new recipe)",recipeName:"Custom Team",error:g||n,busy:f,canConfirm:I,onClose:h,onConfirm:j,confirmLabel:"Create team",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team id"}),(0,b.jsx)("input",{value:c,onChange:a=>d(a.target.value.toLowerCase().replace(/\s+/g,"-")),placeholder:"e.g. my-team",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0}),G?(0,b.jsx)("div",{className:"mt-2 text-xs text-red-300",children:G}):null,!G&&F?(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["checking"===B.state?"Checking availability…":null,"available"===B.state?"Available.":null]}):null]}),(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Select agents"}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"MVP: this creates new team roles that mirror the selected agents' names. You can edit the resulting team recipe later."}),(0,b.jsxs)("div",{className:"mt-3",children:[(0,b.jsx)("input",{value:q,onChange:a=>s(a.target.value),placeholder:"Search local roles/agents (recipe id, name, role)",className:"w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]"}),(0,b.jsxs)("div",{className:"mt-3 max-h-[220px] overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 p-3",children:[n?(0,b.jsx)("div",{className:"text-sm text-red-300",children:n}):null,n||0!==D.length?null:(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No local roles/agents found."}),!n&&D.length?(0,b.jsx)("div",{className:"space-y-2",children:D.map(a=>{let c=!!t[a.id];return(0,b.jsxs)("label",{className:"flex items-start gap-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:c,onChange:b=>{let c={...t};b.target.checked?c[a.id]={agentId:a.id,roleId:a.roleId,displayName:a.displayName}:delete c[a.id],u(c)}}),(0,b.jsx)("span",{className:"min-w-0 break-words",children:a.label})]},a.id)})}):null]})]})]}),E.length?(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Role mapping"}),(0,b.jsx)("div",{className:"mt-3 space-y-3",children:E.map(a=>{let c=H.get(a.agentId);return(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 p-3",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:a.agentId}),(0,b.jsxs)("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Role id"}),(0,b.jsx)("input",{value:a.roleId,onChange:b=>{u(c=>({...c,[a.agentId]:{...c[a.agentId],roleId:b.target.value}}))},className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]"}),c?(0,b.jsx)("div",{className:"mt-1 text-xs text-red-300",children:c}):null]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Display name"}),(0,b.jsx)("input",{value:a.displayName,onChange:b=>{u(c=>({...c,[a.agentId]:{...c[a.agentId],displayName:b.target.value}}))},className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]"})]})]})]},a.agentId)})})]}):null,(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Preview"}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Generated recipe preview (best-effort). This is what will be written to",(0,b.jsx)("code",{className:"ml-1",children:"~/.openclaw/workspace/recipes/<teamId>.md"}),"."]}),I&&z?(0,b.jsx)("div",{className:"mt-2 text-xs text-red-300",children:z}):null,I&&x?(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Target path: ",(0,b.jsx)("code",{children:x})]}):null,(0,b.jsx)("pre",{className:"mt-3 max-h-[260px] overflow-auto whitespace-pre-wrap rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-3 text-xs text-[color:var(--ck-text-secondary)]",children:I?v||"(Loading preview…)":"(Select a valid team id and at least one agent to preview.)"})]})]})}function t({open:a,recipeId:c,recipeName:d,agentId:f,setAgentId:g,agentName:h,setAgentName:j,existingRecipeIds:k,existingAgentIds:l,busy:m,error:o,onClose:q,onConfirm:r}){var s,t;let[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(null),{effectiveId:y}=n({open:a,name:h,setName:j,id:f,setId:g,idTouched:u,setIdTouched:v}),z=String(y??"").trim(),A=(0,e.useMemo)(()=>a?z?k.includes(z)?{state:"taken",reason:"recipe-id-collision"}:l.includes(z)?{state:"taken",reason:"agent-exists"}:null:{state:"empty"}:{state:"empty"},[a,z,k,l]),B=A??w??{state:"available"};return(0,e.useEffect)(()=>{if(!a||null!==A)return;let b=setTimeout(()=>{(async()=>{x({state:"checking"});try{let a=await (0,i.fetchJson)(`/api/ids/check?kind=agent&id=${encodeURIComponent(z)}`,{cache:"no-store"});a.available?x({state:"available"}):x({state:"taken",reason:a.reason})}catch{x({state:"available"})}})()},250);return()=>clearTimeout(b)},[a,A,z]),(0,b.jsxs)(p,{open:a,title:"Create agent",recipeId:c,recipeName:d,error:o,busy:m,canConfirm:!!y.trim()&&"taken"!==B.state&&"checking"!==B.state,onClose:q,onConfirm:r,confirmLabel:"Create agent",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agent name"}),(0,b.jsx)("input",{value:h,onChange:a=>j(a.target.value),placeholder:"e.g. Crypto Onchain",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0})]}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agent id"}),(0,b.jsx)("input",{value:y,onChange:a=>{v(!0),g(a.target.value)},placeholder:"e.g. crypto-onchain",className:"mt-2 w-full rounded-[var(--ck-radius-sm)] border bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)] "+("available"===(s=B.state)?"border-emerald-400/50":"taken"===s?"border-red-400/60":"border-white/10")}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"taken"===(t=B.state)?"That id is already taken.":"available"===t?"Id is available.":"This will scaffold ~/.openclaw/workspace/agents/<agentId> and add the agent to config."})]})]})}var u=a.i(88764),v=a.i(74621);function w({title:a,items:d,onDelete:e,onCreateTeam:f,onCreateAgent:g,installedAgentIds:h}){return(0,b.jsxs)("section",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:a}),0===d.length?(0,b.jsx)("div",{className:"mt-3 ck-glass px-4 py-3 text-sm text-[color:var(--ck-text-secondary)]",children:"None yet."}):(0,b.jsx)("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:d.map(a=>{var d;let i="agent"===a.kind&&h.includes(a.id),j=i?`/agents/${encodeURIComponent(a.id)}`:`/recipes/${encodeURIComponent(a.id)}`,k=(d=a.source,i?"Edit agent":"builtin"===d?"View recipe":"Edit recipe");return(0,b.jsxs)("div",{className:"ck-glass flex flex-col gap-3 px-4 py-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"font-medium text-[color:var(--ck-text-primary)] whitespace-normal break-words",children:a.name}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.id})," • ",a.kind," • ",a.source]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:["team"===a.kind&&f?(0,b.jsx)("button",{type:"button",onClick:()=>f(a),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create team"}):null,"agent"===a.kind&&g?(0,b.jsx)("button",{type:"button",onClick:()=>g(a),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create agent"}):null,(0,b.jsx)(c.default,{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",href:j,children:k}),e?(0,b.jsx)("button",{type:"button",onClick:()=>e(a.id),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10",children:"Delete"}):null]})]},`${a.source}:${a.id}`)})})]})}function x({builtin:a,customTeamRecipes:c,customAgentRecipes:f,installedAgentIds:g,initialOpenCustomTeam:m=!1}){let n=(0,l.useToast)(),[o,p]=(0,e.useState)(!1),[r,x]=(0,e.useState)(1),y=(0,d.useRouter)(),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(!1),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(null),[L,M]=(0,e.useState)(""),[N,O]=(0,e.useState)(!0),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(null),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(""),[Z,$]=(0,e.useState)(""),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(null),[ad,ae]=(0,e.useState)(m),[af,ag]=(0,e.useState)(""),[ah,ai]=(0,e.useState)(!1),[aj,ak]=(0,e.useState)(null),[al,am]=(0,e.useState)([]),an=a=>{C(a),G(null),A(!0)},ao=a=>{K(a),M(""),O(!0),S(null),I(!0)},ap=a=>{W(a),Y(""),$(""),ac(null),U(!0)};async function aq(){E(!0),G(null);try{let a=await (0,i.fetchJsonWithStatus)("/api/recipes/delete",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:B})});if(!a.ok){if(409===a.status)return void G(a.error);throw Error(a.error)}if(!a.data.ok)return void G(a.data.error??"Delete failed");n.push({kind:"success",message:`Deleted recipe: ${B}`}),A(!1),window.location.reload()}catch(a){n.push({kind:"error",message:(0,v.errorMessage)(a)})}finally{E(!1)}}async function ar(a){let b=a?.timeoutMs??3e4;return await j(async()=>{try{return!!(await fetch("/healthz",{cache:"no-store"})).ok||null}catch{return null}},{timeoutMs:b})??!1}async function as(a,b){let c=b?.timeoutMs??3e4;return await j(async()=>{try{let[b,c]=await Promise.all([fetch("/api/recipes",{cache:"no-store"}),fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"})]),d=await b.json(),e=(Array.isArray(d.recipes)?d.recipes:[]).some(b=>String(b.id??"")===a&&"team"===String(b.kind??"")),f=await c.json(),g=!!(c.ok&&f.ok&&!f.missing);return!!e&&!!g||null}catch{return null}},{timeoutMs:c})??!1}async function at(a,b,c){let d=await (0,i.fetchJsonWithStatus)("/api/teams/meta",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,recipeId:b,recipeName:c})});if(!d.ok)throw Error(d.error);if(!d.data.ok)throw Error(d.data.error||"Failed to attach team meta")}async function au(a){let{kind:b,recipeId:c,teamId:d,agentId:e,name:f,cronInstallChoice:g,setBusy:h,setError:i,setModalOpen:j,setOverlayOpen:l,setOverlayStep:m,successMessage:o,navigateTo:p,waitBeforeNavigate:q}=a;h(!0),i(null),j(!1),l(!0),m(1);let r=null;try{let{res:a,json:h}=await (0,k.fetchScaffold)("team"===b?{kind:"team",recipeId:c,teamId:d,cronInstallChoice:g}:{kind:"agent",recipeId:c,agentId:e,name:f});if(!a.ok||!h.ok)throw Error(String(h.error||("team"===b?"Create team failed":"Create agent failed")));m(2),r=setTimeout(()=>{m(a=>a<3?3:a)},2e4);let i="string"==typeof h.stderr?h.stderr:"";if(/Failed to start CLI:/i.test(i)||/\bError: /i.test(i))throw Error(i.trim()||"Scaffold failed");if(/Restart required:/i.test(i)){m(3);try{await fetch("/api/gateway/restart",{method:"POST"})}catch{}await ar({timeoutMs:6e4})}q&&await q(),r&&clearTimeout(r),n.push({kind:"success",message:o}),j(!1),y.push(p),setTimeout(()=>l(!1),500)}catch(b){r&&clearTimeout(r),l(!1);let a=(0,v.errorMessage)(b);i(a),n.push({kind:"error",message:a})}finally{h(!1)}}async function av(){let a=function(a,b){if(!a)return null;let c=b.trim();return c?c.endsWith("-team")?c===a.id?`Team id cannot be the same as the recipe id (${a.id}). Choose a new team id.`:null:"Team id must end with -team.":"Team id is required."}(J,L);if(a)return void S(a);if(!J)return;let b=L.trim();await au({kind:"team",recipeId:J.id,teamId:b,cronInstallChoice:N?"yes":"no",setBusy:Q,setError:S,setModalOpen:I,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created team: ${b}`,navigateTo:`/teams/${encodeURIComponent(b)}`,waitBeforeNavigate:()=>as(b,{timeoutMs:6e4})})}async function aw(){if(!V)return;let a=X.trim();a?a===V.id?ac(`Agent id cannot be the same as the recipe id (${V.id}). Choose a new agent id.`):await au({kind:"agent",recipeId:V.id,agentId:a,name:Z.trim()||void 0,setBusy:aa,setError:ac,setModalOpen:U,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created agent: ${a}`,navigateTo:`/agents/${encodeURIComponent(a)}`}):ac("Agent id is required.")}async function ax(){let a=af.trim();if(!a)return void ak("Team id is required.");let b=a.endsWith("-team")?a.slice(0,-5):a;if(!b)return void ak("Team id is invalid.");if(al.length<1)return void ak("Select at least one agent.");ak(null);try{ai(!0);let c=await (0,i.fetchJsonWithStatus)("/api/recipes/custom-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({recipeId:b,teamId:a,roles:al.map(a=>({roleId:a.roleId,displayName:a.displayName}))})});if(ai(!1),!c.ok)throw Error(c.error);if(!c.data.ok)throw Error(c.data.error||"Failed to create custom team recipe");await au({kind:"team",recipeId:b,teamId:a,cronInstallChoice:"no",setBusy:ai,setError:ak,setModalOpen:ae,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created team: ${a}`,navigateTo:`/teams/${encodeURIComponent(a)}`,waitBeforeNavigate:async()=>{await at(a,b,"Custom Team"),await as(a,{timeoutMs:6e4})}})}catch(b){ai(!1);let a=(0,v.errorMessage)(b);ak(a),n.push({kind:"error",message:a})}}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h,{open:o,step:r,onDismiss:()=>{p(!1)}}),(0,b.jsxs)("div",{className:"mt-8 space-y-10",children:[(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:"Custom recipes"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Workspace recipes (editable) — stored under ",(0,b.jsx)("code",{className:"font-mono",children:"~/.openclaw/workspace/recipes/"}),"."]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>{ag(""),am([]),ak(null),ae(!0)},className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create custom team"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-8",children:[(0,b.jsx)(w,{title:`Teams (${c.length})`,items:c,onDelete:an,onCreateTeam:ao,installedAgentIds:g}),(0,b.jsx)(w,{title:`Agents (${f.length})`,items:f,onDelete:an,onCreateAgent:ap,installedAgentIds:g})]})]}),(0,b.jsxs)("section",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:"Builtin recipes"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:"Bundled recipes shipped with the plugin."}),(0,b.jsx)("div",{className:"mt-4",children:(0,b.jsx)(w,{title:`All (${a.length})`,items:a,onCreateTeam:ao,onCreateAgent:ap,installedAgentIds:g})})]})]}),(0,b.jsx)(u.DeleteRecipeModal,{open:z,recipeId:B,busy:D,error:F,onClose:()=>A(!1),onConfirm:aq}),(0,b.jsx)(s,{open:ad,teamId:af,setTeamId:ag,busy:ah,error:aj,onRolesChange:am,onClose:()=>ae(!1),onConfirm:ax}),(0,b.jsx)(q,{open:H,recipeId:J?.id??"",recipeName:J?.name??"",teamId:L,setTeamId:M,installCron:N,setInstallCron:O,busy:P,error:R,onClose:()=>I(!1),onConfirm:av}),(0,b.jsx)(t,{open:T,recipeId:V?.id??"",recipeName:V?.name??"",agentId:X,setAgentId:Y,agentName:Z,setAgentName:$,existingRecipeIds:[...a,...c,...f].map(a=>a.id),existingAgentIds:g,busy:_,error:ab,onClose:()=>U(!1),onConfirm:aw})]})}a.s(["default",()=>x],55408)}];
1
+ module.exports=[55408,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(72131),f=a.i(35112);let g={1:"Ordering team…",2:"Cooking up agents…",3:"Serving them up hot…"};function h({open:a,step:c,onDismiss:d}){return a?(0,f.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[9999]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-[color:var(--ck-bg-base)]/90 pointer-events-none"}),d?(0,b.jsx)("button",{type:"button",onClick:a=>{a.preventDefault(),a.stopPropagation(),d()},className:"fixed right-4 top-4 z-[10000] rounded-full border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] hover:bg-[color:var(--ck-bg-soft)]","aria-label":"Dismiss loading overlay",title:"Dismiss",children:"Esc"}):null,(0,b.jsx)("div",{className:"fixed inset-0 flex items-center justify-center p-6 sm:p-10",children:(0,b.jsxs)("div",{className:"w-full max-w-2xl rounded-2xl border border-white/10 bg-[color:var(--ck-bg-soft)] p-8 sm:p-10 shadow-[var(--ck-shadow-2)]",children:[(0,b.jsx)("div",{className:"text-2xl font-semibold text-[color:var(--ck-text-primary)]",children:"Claw Kitchen"}),(0,b.jsx)("div",{className:"mt-3 text-base text-[color:var(--ck-text-secondary)]",children:"Hang tight — we’re updating your OpenClaw install."}),(0,b.jsx)("div",{className:"mt-8 space-y-4 text-base",children:[1,2,3].map(a=>{let d=a===c,e=a<c;return(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"h-4 w-4 rounded-full "+(e?"bg-emerald-400":d?"bg-[var(--ck-accent-red)] animate-pulse":"bg-white/20")}),(0,b.jsx)("div",{className:e?"text-[color:var(--ck-text-secondary)] line-through":"text-[color:var(--ck-text-primary)]",children:g[a]})]},a)})})]})})]}),document.body):null}var i=a.i(51200);async function j(a,b){let c=b.intervalMs??500,d=Date.now();for(;Date.now()-d<b.timeoutMs;){let b=await a();if(null!==b)return b;await new Promise(a=>setTimeout(a,c))}return null}var k=a.i(56635),l=a.i(61889),m=a.i(40211);function n(a){let{open:b,name:c,setName:d,id:f,setId:g,idTouched:h,setIdTouched:i,slugify:j=m.slugifyId}=a,k=(0,e.useMemo)(()=>j(c),[c,j]),l=h?f:k;return(0,e.useEffect)(()=>{b&&(h||g(k))},[k,b,h,g]),(0,e.useEffect)(()=>{b||(i(!1),d(""),g(""))},[b,i,d,g]),{derivedId:k,effectiveId:l}}var o=a.i(66063);function p({open:a,title:c,recipeId:d,recipeName:e,children:f,error:g,busy:h,canConfirm:i,onClose:j,onConfirm:k,confirmLabel:l}){return(0,b.jsxs)(o.ConfirmationModal,{open:a,onClose:j,title:c,error:g,confirmLabel:l,confirmBusyLabel:"Creating…",confirmDisabled:!i,busy:h,onConfirm:k,children:[(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Create a new ",c.toLowerCase().replace("create ","")," from recipe"," ",(0,b.jsx)("code",{className:"font-mono",children:d}),e?(0,b.jsxs)(b.Fragment,{children:[" ","(",(0,b.jsx)("span",{className:"font-medium",children:e}),")"]}):null,"."]}),f]})}function q({open:a,recipeId:c,recipeName:d,teamId:f,setTeamId:g,installCron:h,setInstallCron:i,busy:j,error:k,onClose:l,onConfirm:m}){let[o,q]=(0,e.useState)(""),[r,s]=(0,e.useState)(!1),{effectiveId:t}=n({open:a,name:o,setName:q,id:f,setId:g,idTouched:r,setIdTouched:s});return(0,b.jsxs)(p,{open:a,title:"Create team",recipeId:c,recipeName:d,error:k,busy:j,canConfirm:!!t.trim(),onClose:l,onConfirm:m,confirmLabel:"Create team",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team name"}),(0,b.jsx)("input",{value:o,onChange:a=>q(a.target.value),placeholder:"e.g. Crypto Team",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0})]}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team id"}),(0,b.jsx)("input",{value:t,onChange:a=>{s(!0),g(a.target.value)},placeholder:"e.g. my-team",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]"}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"This will scaffold ~/.openclaw/workspace-<teamId> and add the team to config."})]}),(0,b.jsxs)("label",{className:"mt-4 flex items-center gap-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:h,onChange:a=>i(a.target.checked)}),"Install cron jobs from this recipe"]})]})}function r(a){return/^[a-z0-9][a-z0-9_-]{1,62}$/.test(a)}function s({open:a,teamId:c,setTeamId:d,busy:f,error:g,onClose:h,onConfirm:j,onRolesChange:k}){let[l,m]=(0,e.useState)([]),[n,o]=(0,e.useState)(null),[q,s]=(0,e.useState)(""),[t,u]=(0,e.useState)({}),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(null);(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b=await (0,i.fetchJsonWithStatus)("/api/recipes/local-agent-catalog",{cache:"no-store"});if(!a){if(!b.ok)return o(b.error||"Failed to load local agent catalog");if(!b.data.ok)return o(b.data.error||"Failed to load local agent catalog");m(Array.isArray(b.data.items)?b.data.items:[])}})(),()=>{a=!0}},[]);let[B,C]=(0,e.useState)({state:"unknown"}),D=(0,e.useMemo)(()=>{let a=q.trim().toLowerCase(),b=l.map(a=>{var b;let c;if("team-role"===a.kind){let b=`team:${a.recipeId}:${a.roleId}`,c=a.recipeName||a.recipeId,d=a.roleName?`${a.roleName} (${a.roleId})`:a.roleId;return{id:b,label:`${c} → ${d}`,roleId:a.roleId,displayName:a.roleName||`${c} ${a.roleId}`,haystack:`${a.recipeId} ${a.recipeName||""} ${a.roleId} ${a.roleName||""}`.toLowerCase()}}let d=`agent:${a.recipeId}`,e=a.recipeName||a.recipeId,f=a.description?` — ${a.description}`:"";return{id:d,label:`${e} (agent recipe: ${a.recipeId})${f}`,roleId:((c=(b=a.recipeId).split("/").pop()||b).split("-").slice(-1)[0]||c).toLowerCase().replace(/[^a-z0-9_-]+/g,"-"),displayName:e,haystack:`${a.recipeId} ${a.recipeName||""} ${a.description||""}`.toLowerCase()}});return(a?b.filter(b=>b.haystack.includes(a)):b).slice().sort((a,b)=>a.label.localeCompare(b.label)).map(({haystack:a,...b})=>b)},[l,q]),E=(0,e.useMemo)(()=>Object.values(t),[t]),F=c.trim(),G=(0,e.useMemo)(()=>a?F?r(F)?F.endsWith("-team")?"taken"===B.state?`Team id is already taken: ${F}`:null:"Team id must end with -team.":"Invalid team id. Use lowercase letters/numbers with - or _ (2-63 chars).":"Team id is required.":null,[a,F,B.state]),H=(0,e.useMemo)(()=>{let a=new Map;for(let b of E){let c=String(b.roleId??"").trim();if(!c){a.set(b.agentId,"Role id is required.");continue}r(c)||a.set(b.agentId,"Invalid role id (lowercase letters/numbers with - or _).")}return a},[E]),I=!G&&"checking"!==B.state&&"unknown"!==B.state&&E.length>0&&0===H.size;return(0,e.useEffect)(()=>{a&&k(E)},[a,E,k]),(0,e.useEffect)(()=>{if(!a)return;let b=!1,c=setTimeout(async()=>{if(!F||!(r(F)&&F.endsWith("-team")))return void C({state:"unknown"});C({state:"checking"});let a=await (0,i.fetchJsonWithStatus)(`/api/ids/check?kind=team&id=${encodeURIComponent(F)}`,{cache:"no-store"});if(!b){if(!a.ok)return void C({state:"unknown"});if(a.data.ok&&!0===a.data.available)return void C({state:"available"});C({state:"taken",reason:a.data.reason})}},250);return()=>{b=!0,clearTimeout(c)}},[a,F]),(0,e.useEffect)(()=>{if(!a||!I)return;let b=!1,c=setTimeout(async()=>{let a=F.endsWith("-team")?F.slice(0,-5):F,c=await (0,i.fetchJsonWithStatus)("/api/recipes/custom-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({dryRun:!0,recipeId:a,teamId:F,roles:E.map(a=>({roleId:a.roleId,displayName:a.displayName}))})});if(!b){if(!c.ok){A(c.error),w(null),y(null);return}if(!c.data.ok){A(c.data.error||"Failed to generate preview"),w(null),y(null);return}A(null),w("string"==typeof c.data.md?c.data.md:null),y("string"==typeof c.data.filePath?c.data.filePath:null)}},250);return()=>{b=!0,clearTimeout(c)}},[a,I,F,E]),(0,b.jsxs)(p,{open:a,title:"Create custom team",recipeId:"(new recipe)",recipeName:"Custom Team",error:g||n,busy:f,canConfirm:I,onClose:h,onConfirm:j,confirmLabel:"Create team",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Team id"}),(0,b.jsx)("input",{value:c,onChange:a=>d(a.target.value.toLowerCase().replace(/\s+/g,"-")),placeholder:"e.g. my-team",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0}),G?(0,b.jsx)("div",{className:"mt-2 text-xs text-red-300",children:G}):null,!G&&F?(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["checking"===B.state?"Checking availability…":null,"available"===B.state?"Available.":null]}):null]}),(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Select agents"}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"MVP: this creates new team roles that mirror the selected agents' names. You can edit the resulting team recipe later."}),(0,b.jsxs)("div",{className:"mt-3",children:[(0,b.jsx)("input",{value:q,onChange:a=>s(a.target.value),placeholder:"Search local roles/agents (recipe id, name, role)",className:"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]"}),(0,b.jsxs)("div",{className:"mt-3 max-h-[220px] overflow-auto rounded-lg border border-white/10 bg-white/5 p-3",children:[n?(0,b.jsx)("div",{className:"text-sm text-red-300",children:n}):null,n||0!==D.length?null:(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No local roles/agents found."}),!n&&D.length?(0,b.jsx)("div",{className:"space-y-2",children:D.map(a=>{let c=!!t[a.id];return(0,b.jsxs)("label",{className:"flex items-start gap-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:c,onChange:b=>{let c={...t};b.target.checked?c[a.id]={agentId:a.id,roleId:a.roleId,displayName:a.displayName}:delete c[a.id],u(c)}}),(0,b.jsx)("span",{className:"min-w-0 break-words",children:a.label})]},a.id)})}):null]})]})]}),E.length?(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Role mapping"}),(0,b.jsx)("div",{className:"mt-3 space-y-3",children:E.map(a=>{let c=H.get(a.agentId);return(0,b.jsxs)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:a.agentId}),(0,b.jsxs)("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Role id"}),(0,b.jsx)("input",{value:a.roleId,onChange:b=>{u(c=>({...c,[a.agentId]:{...c[a.agentId],roleId:b.target.value}}))},className:"mt-1 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]"}),c?(0,b.jsx)("div",{className:"mt-1 text-xs text-red-300",children:c}):null]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Display name"}),(0,b.jsx)("input",{value:a.displayName,onChange:b=>{u(c=>({...c,[a.agentId]:{...c[a.agentId],displayName:b.target.value}}))},className:"mt-1 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]"})]})]})]},a.agentId)})})]}):null,(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Preview"}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Generated recipe preview (best-effort). This is what will be written to",(0,b.jsx)("code",{className:"ml-1",children:"~/.openclaw/workspace/recipes/<teamId>.md"}),"."]}),I&&z?(0,b.jsx)("div",{className:"mt-2 text-xs text-red-300",children:z}):null,I&&x?(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Target path: ",(0,b.jsx)("code",{children:x})]}):null,(0,b.jsx)("pre",{className:"mt-3 max-h-[260px] overflow-auto whitespace-pre-wrap rounded-lg border border-white/10 bg-black/30 p-3 text-xs text-[color:var(--ck-text-secondary)]",children:I?v||"(Loading preview…)":"(Select a valid team id and at least one agent to preview.)"})]})]})}function t({open:a,recipeId:c,recipeName:d,agentId:f,setAgentId:g,agentName:h,setAgentName:j,existingRecipeIds:k,existingAgentIds:l,busy:m,error:o,onClose:q,onConfirm:r}){var s,t;let[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(null),{effectiveId:y}=n({open:a,name:h,setName:j,id:f,setId:g,idTouched:u,setIdTouched:v}),z=String(y??"").trim(),A=(0,e.useMemo)(()=>a?z?k.includes(z)?{state:"taken",reason:"recipe-id-collision"}:l.includes(z)?{state:"taken",reason:"agent-exists"}:null:{state:"empty"}:{state:"empty"},[a,z,k,l]),B=A??w??{state:"available"};return(0,e.useEffect)(()=>{if(!a||null!==A)return;let b=setTimeout(()=>{(async()=>{x({state:"checking"});try{let a=await (0,i.fetchJson)(`/api/ids/check?kind=agent&id=${encodeURIComponent(z)}`,{cache:"no-store"});a.available?x({state:"available"}):x({state:"taken",reason:a.reason})}catch{x({state:"available"})}})()},250);return()=>clearTimeout(b)},[a,A,z]),(0,b.jsxs)(p,{open:a,title:"Create agent",recipeId:c,recipeName:d,error:o,busy:m,canConfirm:!!y.trim()&&"taken"!==B.state&&"checking"!==B.state,onClose:q,onConfirm:r,confirmLabel:"Create agent",children:[(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agent name"}),(0,b.jsx)("input",{value:h,onChange:a=>j(a.target.value),placeholder:"e.g. Crypto Onchain",className:"mt-2 w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]",autoFocus:!0})]}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("label",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agent id"}),(0,b.jsx)("input",{value:y,onChange:a=>{v(!0),g(a.target.value)},placeholder:"e.g. crypto-onchain",className:"mt-2 w-full rounded-lg border bg-white/5 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)] "+("available"===(s=B.state)?"border-emerald-400/50":"taken"===s?"border-red-400/60":"border-white/10")}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"taken"===(t=B.state)?"That id is already taken.":"available"===t?"Id is available.":"This will scaffold ~/.openclaw/workspace/agents/<agentId> and add the agent to config."})]})]})}var u=a.i(88764),v=a.i(74621);function w({title:a,items:d,onDelete:e,onCreateTeam:f,onCreateAgent:g,installedAgentIds:h}){return(0,b.jsxs)("section",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:a}),0===d.length?(0,b.jsx)("div",{className:"mt-3 ck-glass px-4 py-3 text-sm text-[color:var(--ck-text-secondary)]",children:"None yet."}):(0,b.jsx)("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:d.map(a=>{var d;let i="agent"===a.kind&&h.includes(a.id),j=i?`/agents/${encodeURIComponent(a.id)}`:`/recipes/${encodeURIComponent(a.id)}`,k=(d=a.source,i?"Edit agent":"builtin"===d?"View recipe":"Edit recipe");return(0,b.jsxs)("div",{className:"ck-card flex flex-col gap-3 px-4 py-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"font-medium text-[color:var(--ck-text-primary)] whitespace-normal break-words",children:a.name}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.id})," • ",a.kind," • ",a.source]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:["team"===a.kind&&f?(0,b.jsx)("button",{type:"button",onClick:()=>f(a),className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create team"}):null,"agent"===a.kind&&g?(0,b.jsx)("button",{type:"button",onClick:()=>g(a),className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create agent"}):null,(0,b.jsx)(c.default,{className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",href:j,children:k}),e?(0,b.jsx)("button",{type:"button",onClick:()=>e(a.id),className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10",children:"Delete"}):null]})]},`${a.source}:${a.id}`)})})]})}function x({builtin:a,customTeamRecipes:c,customAgentRecipes:f,installedAgentIds:g,initialOpenCustomTeam:m=!1}){let n=(0,l.useToast)(),[o,p]=(0,e.useState)(!1),[r,x]=(0,e.useState)(1),y=(0,d.useRouter)(),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(!1),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(null),[L,M]=(0,e.useState)(""),[N,O]=(0,e.useState)(!0),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(null),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(""),[Z,$]=(0,e.useState)(""),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(null),[ad,ae]=(0,e.useState)(m),[af,ag]=(0,e.useState)(""),[ah,ai]=(0,e.useState)(!1),[aj,ak]=(0,e.useState)(null),[al,am]=(0,e.useState)([]),an=a=>{C(a),G(null),A(!0)},ao=a=>{K(a),M(""),O(!0),S(null),I(!0)},ap=a=>{W(a),Y(""),$(""),ac(null),U(!0)};async function aq(){E(!0),G(null);try{let a=await (0,i.fetchJsonWithStatus)("/api/recipes/delete",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:B})});if(!a.ok){if(409===a.status)return void G(a.error);throw Error(a.error)}if(!a.data.ok)return void G(a.data.error??"Delete failed");n.push({kind:"success",message:`Deleted recipe: ${B}`}),A(!1),window.location.reload()}catch(a){n.push({kind:"error",message:(0,v.errorMessage)(a)})}finally{E(!1)}}async function ar(a){let b=a?.timeoutMs??3e4;return await j(async()=>{try{return!!(await fetch("/healthz",{cache:"no-store"})).ok||null}catch{return null}},{timeoutMs:b})??!1}async function as(a,b){let c=b?.timeoutMs??3e4;return await j(async()=>{try{let[b,c]=await Promise.all([fetch("/api/recipes",{cache:"no-store"}),fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"})]),d=await b.json(),e=(Array.isArray(d.recipes)?d.recipes:[]).some(b=>String(b.id??"")===a&&"team"===String(b.kind??"")),f=await c.json(),g=!!(c.ok&&f.ok&&!f.missing);return!!e&&!!g||null}catch{return null}},{timeoutMs:c})??!1}async function at(a,b,c){let d=await (0,i.fetchJsonWithStatus)("/api/teams/meta",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,recipeId:b,recipeName:c})});if(!d.ok)throw Error(d.error);if(!d.data.ok)throw Error(d.data.error||"Failed to attach team meta")}async function au(a){let{kind:b,recipeId:c,teamId:d,agentId:e,name:f,cronInstallChoice:g,setBusy:h,setError:i,setModalOpen:j,setOverlayOpen:l,setOverlayStep:m,successMessage:o,navigateTo:p,waitBeforeNavigate:q}=a;h(!0),i(null),j(!1),l(!0),m(1);let r=null;try{let{res:a,json:h}=await (0,k.fetchScaffold)("team"===b?{kind:"team",recipeId:c,teamId:d,cronInstallChoice:g}:{kind:"agent",recipeId:c,agentId:e,name:f});if(!a.ok||!h.ok)throw Error(String(h.error||("team"===b?"Create team failed":"Create agent failed")));m(2),r=setTimeout(()=>{m(a=>a<3?3:a)},2e4);let i="string"==typeof h.stderr?h.stderr:"";if(/Failed to start CLI:/i.test(i)||/\bError: /i.test(i))throw Error(i.trim()||"Scaffold failed");if(/Restart required:/i.test(i)){m(3);try{await fetch("/api/gateway/restart",{method:"POST"})}catch{}await ar({timeoutMs:6e4})}q&&await q(),r&&clearTimeout(r),n.push({kind:"success",message:o}),j(!1),y.push(p),setTimeout(()=>l(!1),500)}catch(b){r&&clearTimeout(r),l(!1);let a=(0,v.errorMessage)(b);i(a),n.push({kind:"error",message:a})}finally{h(!1)}}async function av(){let a=function(a,b){if(!a)return null;let c=b.trim();return c?c.endsWith("-team")?c===a.id?`Team id cannot be the same as the recipe id (${a.id}). Choose a new team id.`:null:"Team id must end with -team.":"Team id is required."}(J,L);if(a)return void S(a);if(!J)return;let b=L.trim();await au({kind:"team",recipeId:J.id,teamId:b,cronInstallChoice:N?"yes":"no",setBusy:Q,setError:S,setModalOpen:I,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created team: ${b}`,navigateTo:`/teams/${encodeURIComponent(b)}`,waitBeforeNavigate:()=>as(b,{timeoutMs:6e4})})}async function aw(){if(!V)return;let a=X.trim();a?a===V.id?ac(`Agent id cannot be the same as the recipe id (${V.id}). Choose a new agent id.`):await au({kind:"agent",recipeId:V.id,agentId:a,name:Z.trim()||void 0,setBusy:aa,setError:ac,setModalOpen:U,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created agent: ${a}`,navigateTo:`/agents/${encodeURIComponent(a)}`}):ac("Agent id is required.")}async function ax(){let a=af.trim();if(!a)return void ak("Team id is required.");let b=a.endsWith("-team")?a.slice(0,-5):a;if(!b)return void ak("Team id is invalid.");if(al.length<1)return void ak("Select at least one agent.");ak(null);try{ai(!0);let c=await (0,i.fetchJsonWithStatus)("/api/recipes/custom-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({recipeId:b,teamId:a,roles:al.map(a=>({roleId:a.roleId,displayName:a.displayName}))})});if(ai(!1),!c.ok)throw Error(c.error);if(!c.data.ok)throw Error(c.data.error||"Failed to create custom team recipe");await au({kind:"team",recipeId:b,teamId:a,cronInstallChoice:"no",setBusy:ai,setError:ak,setModalOpen:ae,setOverlayOpen:p,setOverlayStep:x,successMessage:`Created team: ${a}`,navigateTo:`/teams/${encodeURIComponent(a)}`,waitBeforeNavigate:async()=>{await at(a,b,"Custom Team"),await as(a,{timeoutMs:6e4})}})}catch(b){ai(!1);let a=(0,v.errorMessage)(b);ak(a),n.push({kind:"error",message:a})}}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h,{open:o,step:r,onDismiss:()=>{p(!1)}}),(0,b.jsxs)("div",{className:"mt-8 space-y-10",children:[(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:"Custom recipes"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Workspace recipes (editable) — stored under ",(0,b.jsx)("code",{className:"font-mono",children:"~/.openclaw/workspace/recipes/"}),"."]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>{ag(""),am([]),ak(null),ae(!0)},className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15",children:"Create custom team"})]}),(0,b.jsxs)("div",{className:"mt-4 space-y-8",children:[(0,b.jsx)(w,{title:`Teams (${c.length})`,items:c,onDelete:an,onCreateTeam:ao,installedAgentIds:g}),(0,b.jsx)(w,{title:`Agents (${f.length})`,items:f,onDelete:an,onCreateAgent:ap,installedAgentIds:g})]})]}),(0,b.jsxs)("section",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]",children:"Builtin recipes"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:"Bundled recipes shipped with the plugin."}),(0,b.jsx)("div",{className:"mt-4",children:(0,b.jsx)(w,{title:`All (${a.length})`,items:a,onCreateTeam:ao,onCreateAgent:ap,installedAgentIds:g})})]})]}),(0,b.jsx)(u.DeleteRecipeModal,{open:z,recipeId:B,busy:D,error:F,onClose:()=>A(!1),onConfirm:aq}),(0,b.jsx)(s,{open:ad,teamId:af,setTeamId:ag,busy:ah,error:aj,onRolesChange:am,onClose:()=>ae(!1),onConfirm:ax}),(0,b.jsx)(q,{open:H,recipeId:J?.id??"",recipeName:J?.name??"",teamId:L,setTeamId:M,installCron:N,setInstallCron:O,busy:P,error:R,onClose:()=>I(!1),onConfirm:av}),(0,b.jsx)(t,{open:T,recipeId:V?.id??"",recipeName:V?.name??"",agentId:X,setAgentId:Y,agentName:Z,setAgentName:$,existingRecipeIds:[...a,...c,...f].map(a=>a.id),existingAgentIds:g,busy:_,error:ab,onClose:()=>U(!1),onConfirm:aw})]})}a.s(["default",()=>x],55408)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map