@jiggai/kitchen 0.1.12 → 0.2.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 (1083) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +21 -0
  3. package/.next/build-manifest.json +6 -6
  4. package/.next/prerender-manifest.json +11 -6
  5. package/.next/routes-manifest.json +146 -0
  6. package/.next/server/app/_global-error/page/build-manifest.json +4 -4
  7. package/.next/server/app/_global-error/page.js +3 -3
  8. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +2 -2
  11. package/.next/server/app/_global-error.rsc +2 -2
  12. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  14. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/server/app/_not-found/page/build-manifest.json +4 -4
  18. package/.next/server/app/_not-found/page.js +10 -9
  19. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +5 -5
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  26. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/agents/[agentId]/page/build-manifest.json +4 -4
  30. package/.next/server/app/agents/[agentId]/page.js +8 -8
  31. package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
  32. package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/agents/[id]/route.js +1 -1
  34. package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/agents/add/route.js +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 +1 -1
  38. package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
  39. package/.next/server/app/api/agents/files/route.js +1 -1
  40. package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
  41. package/.next/server/app/api/agents/identity/route.js +1 -1
  42. package/.next/server/app/api/agents/identity/route.js.nft.json +1 -1
  43. package/.next/server/app/api/agents/route.js +1 -1
  44. package/.next/server/app/api/agents/route.js.nft.json +1 -1
  45. package/.next/server/app/api/agents/skills/install/route.js +1 -1
  46. package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
  47. package/.next/server/app/api/agents/skills/route.js +1 -1
  48. package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
  49. package/.next/server/app/api/agents/update/route.js +1 -1
  50. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  51. package/.next/server/app/api/channels/bindings/route.js +1 -1
  52. package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
  53. package/.next/server/app/api/cron/delete/route.js +1 -1
  54. package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
  55. package/.next/server/app/api/cron/job/route.js +1 -1
  56. package/.next/server/app/api/cron/job/route.js.nft.json +1 -1
  57. package/.next/server/app/api/cron/jobs/route.js +1 -1
  58. package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
  59. package/.next/server/app/api/cron/recipe-installed/route.js +1 -1
  60. package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
  61. package/.next/server/app/api/gateway/restart/route.js +1 -1
  62. package/.next/server/app/api/gateway/restart/route.js.nft.json +1 -1
  63. package/.next/server/app/api/goals/[id]/promote/route.js +1 -1
  64. package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
  65. package/.next/server/app/api/goals/[id]/route.js +1 -1
  66. package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  67. package/.next/server/app/api/goals/route.js +1 -1
  68. package/.next/server/app/api/goals/route.js.nft.json +1 -1
  69. package/.next/server/app/api/ids/check/route.js +1 -1
  70. package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
  71. package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
  72. package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
  73. package/.next/server/app/api/marketplace/recipes/route.js +1 -1
  74. package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
  75. package/.next/server/app/api/recipes/[id]/route.js +1 -1
  76. package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/recipes/clone/route.js +1 -1
  78. package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
  79. package/.next/server/app/api/recipes/custom-team/route/app-paths-manifest.json +3 -0
  80. package/.next/server/app/api/recipes/custom-team/route/build-manifest.json +11 -0
  81. package/.next/server/app/api/recipes/custom-team/route/server-reference-manifest.json +4 -0
  82. package/.next/server/app/api/recipes/custom-team/route.js +6 -0
  83. package/.next/server/app/api/recipes/custom-team/route.js.map +5 -0
  84. package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -0
  85. package/.next/server/app/api/recipes/custom-team/route_client-reference-manifest.js +2 -0
  86. package/.next/server/app/api/recipes/delete/route.js +1 -1
  87. package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
  88. package/.next/server/app/api/recipes/route.js +1 -1
  89. package/.next/server/app/api/recipes/route.js.nft.json +1 -1
  90. package/.next/server/app/api/recipes/team-agents/route.js +1 -1
  91. package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
  92. package/.next/server/app/api/scaffold/route.js +1 -2
  93. package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
  94. package/.next/server/app/api/settings/cron-installation/route.js +1 -1
  95. package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
  96. package/.next/server/app/api/skills/available/route.js +1 -1
  97. package/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  98. package/.next/server/app/api/swarms/start/route/app-paths-manifest.json +3 -0
  99. package/.next/server/app/api/swarms/start/route/build-manifest.json +11 -0
  100. package/.next/server/app/api/swarms/start/route/server-reference-manifest.json +4 -0
  101. package/.next/server/app/api/swarms/start/route.js +6 -0
  102. package/.next/server/app/api/swarms/start/route.js.map +5 -0
  103. package/.next/server/app/api/swarms/start/route.js.nft.json +1 -0
  104. package/.next/server/app/api/swarms/start/route_client-reference-manifest.js +2 -0
  105. package/.next/server/app/api/swarms/status/route/app-paths-manifest.json +3 -0
  106. package/.next/server/app/api/swarms/status/route/build-manifest.json +11 -0
  107. package/.next/server/app/api/swarms/status/route/server-reference-manifest.json +4 -0
  108. package/.next/server/app/api/swarms/status/route.js +6 -0
  109. package/.next/server/app/api/swarms/status/route.js.map +5 -0
  110. package/.next/server/app/api/swarms/status/route.js.nft.json +1 -0
  111. package/.next/server/app/api/swarms/status/route_client-reference-manifest.js +2 -0
  112. package/.next/server/app/api/teams/[teamId]/tickets/assign/route/app-paths-manifest.json +3 -0
  113. package/.next/server/app/api/teams/[teamId]/tickets/assign/route/build-manifest.json +11 -0
  114. package/.next/server/app/api/teams/[teamId]/tickets/assign/route/server-reference-manifest.json +4 -0
  115. package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js +6 -0
  116. package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.map +5 -0
  117. package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -0
  118. package/.next/server/app/api/teams/[teamId]/tickets/assign/route_client-reference-manifest.js +2 -0
  119. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/app-paths-manifest.json +3 -0
  120. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/build-manifest.json +11 -0
  121. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route/server-reference-manifest.json +4 -0
  122. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js +6 -0
  123. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.map +5 -0
  124. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -0
  125. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route_client-reference-manifest.js +2 -0
  126. package/.next/server/app/api/teams/[teamId]/tickets/delete/route/app-paths-manifest.json +3 -0
  127. package/.next/server/app/api/teams/[teamId]/tickets/delete/route/build-manifest.json +11 -0
  128. package/.next/server/app/api/teams/[teamId]/tickets/delete/route/server-reference-manifest.json +4 -0
  129. package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js +6 -0
  130. package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.map +5 -0
  131. package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -0
  132. package/.next/server/app/api/teams/[teamId]/tickets/delete/route_client-reference-manifest.js +2 -0
  133. package/.next/server/app/api/teams/[teamId]/tickets/move/route/app-paths-manifest.json +3 -0
  134. package/.next/server/app/api/teams/[teamId]/tickets/move/route/build-manifest.json +11 -0
  135. package/.next/server/app/api/teams/[teamId]/tickets/move/route/server-reference-manifest.json +4 -0
  136. package/.next/server/app/api/teams/[teamId]/tickets/move/route.js +6 -0
  137. package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.map +5 -0
  138. package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -0
  139. package/.next/server/app/api/teams/[teamId]/tickets/move/route_client-reference-manifest.js +2 -0
  140. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/app-paths-manifest.json +3 -0
  141. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/build-manifest.json +11 -0
  142. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route/server-reference-manifest.json +4 -0
  143. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js +6 -0
  144. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.map +5 -0
  145. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -0
  146. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route_client-reference-manifest.js +2 -0
  147. package/.next/server/app/api/teams/file/route.js +1 -1
  148. package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
  149. package/.next/server/app/api/teams/files/route.js +1 -1
  150. package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
  151. package/.next/server/app/api/teams/memory/route/app-paths-manifest.json +3 -0
  152. package/.next/server/app/api/teams/memory/route/build-manifest.json +11 -0
  153. package/.next/server/app/api/teams/memory/route/server-reference-manifest.json +4 -0
  154. package/.next/server/app/api/teams/memory/route.js +6 -0
  155. package/.next/server/app/api/teams/memory/route.js.map +5 -0
  156. package/.next/server/app/api/teams/memory/route.js.nft.json +1 -0
  157. package/.next/server/app/api/teams/memory/route_client-reference-manifest.js +2 -0
  158. package/.next/server/app/api/teams/meta/route.js +1 -1
  159. package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
  160. package/.next/server/app/api/teams/orchestrator/install/route/app-paths-manifest.json +3 -0
  161. package/.next/server/app/api/teams/orchestrator/install/route/build-manifest.json +11 -0
  162. package/.next/server/app/api/teams/orchestrator/install/route/server-reference-manifest.json +4 -0
  163. package/.next/server/app/api/teams/orchestrator/install/route.js +6 -0
  164. package/.next/server/app/api/teams/orchestrator/install/route.js.map +5 -0
  165. package/.next/server/app/api/teams/orchestrator/install/route.js.nft.json +1 -0
  166. package/.next/server/app/api/teams/orchestrator/install/route_client-reference-manifest.js +2 -0
  167. package/.next/server/app/api/teams/orchestrator/route/app-paths-manifest.json +3 -0
  168. package/.next/server/app/api/teams/orchestrator/route/build-manifest.json +11 -0
  169. package/.next/server/app/api/teams/orchestrator/route/server-reference-manifest.json +4 -0
  170. package/.next/server/app/api/teams/orchestrator/route.js +6 -0
  171. package/.next/server/app/api/teams/orchestrator/route.js.map +5 -0
  172. package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -0
  173. package/.next/server/app/api/teams/orchestrator/route_client-reference-manifest.js +2 -0
  174. package/.next/server/app/api/teams/remove-team/route.js +2 -1
  175. package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
  176. package/.next/server/app/api/teams/skills/install/route.js +1 -1
  177. package/.next/server/app/api/teams/skills/install/route.js.nft.json +1 -1
  178. package/.next/server/app/api/teams/skills/route.js +1 -1
  179. package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
  180. package/.next/server/app/api/teams/workflow-runs/route/app-paths-manifest.json +3 -0
  181. package/.next/server/app/api/teams/workflow-runs/route/build-manifest.json +11 -0
  182. package/.next/server/app/api/teams/workflow-runs/route/server-reference-manifest.json +4 -0
  183. package/.next/server/app/api/teams/workflow-runs/route.js +7 -0
  184. package/.next/server/app/api/teams/workflow-runs/route.js.map +5 -0
  185. package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -0
  186. package/.next/server/app/api/teams/workflow-runs/route_client-reference-manifest.js +2 -0
  187. package/.next/server/app/api/teams/workflow-templates/route/app-paths-manifest.json +3 -0
  188. package/.next/server/app/api/teams/workflow-templates/route/build-manifest.json +11 -0
  189. package/.next/server/app/api/teams/workflow-templates/route/server-reference-manifest.json +4 -0
  190. package/.next/server/app/api/teams/workflow-templates/route.js +6 -0
  191. package/.next/server/app/api/teams/workflow-templates/route.js.map +5 -0
  192. package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -0
  193. package/.next/server/app/api/teams/workflow-templates/route_client-reference-manifest.js +2 -0
  194. package/.next/server/app/api/teams/workflows/route/app-paths-manifest.json +3 -0
  195. package/.next/server/app/api/teams/workflows/route/build-manifest.json +11 -0
  196. package/.next/server/app/api/teams/workflows/route/server-reference-manifest.json +4 -0
  197. package/.next/server/app/api/teams/workflows/route.js +6 -0
  198. package/.next/server/app/api/teams/workflows/route.js.map +5 -0
  199. package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -0
  200. package/.next/server/app/api/teams/workflows/route_client-reference-manifest.js +2 -0
  201. package/.next/server/app/api/tickets/assign/route/app-paths-manifest.json +3 -0
  202. package/.next/server/app/api/tickets/assign/route/build-manifest.json +11 -0
  203. package/.next/server/app/api/tickets/assign/route/server-reference-manifest.json +4 -0
  204. package/.next/server/app/api/tickets/assign/route.js +6 -0
  205. package/.next/server/app/api/tickets/assign/route.js.map +5 -0
  206. package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -0
  207. package/.next/server/app/api/tickets/assign/route_client-reference-manifest.js +2 -0
  208. package/.next/server/app/api/tickets/assignees/route/app-paths-manifest.json +3 -0
  209. package/.next/server/app/api/tickets/assignees/route/build-manifest.json +11 -0
  210. package/.next/server/app/api/tickets/assignees/route/server-reference-manifest.json +4 -0
  211. package/.next/server/app/api/tickets/assignees/route.js +6 -0
  212. package/.next/server/app/api/tickets/assignees/route.js.map +5 -0
  213. package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -0
  214. package/.next/server/app/api/tickets/assignees/route_client-reference-manifest.js +2 -0
  215. package/.next/server/app/api/tickets/move/route.js +1 -1
  216. package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
  217. package/.next/server/app/channels/page/build-manifest.json +4 -4
  218. package/.next/server/app/channels/page.js +8 -8
  219. package/.next/server/app/channels/page.js.nft.json +1 -1
  220. package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
  221. package/.next/server/app/channels.html +2 -2
  222. package/.next/server/app/channels.rsc +6 -6
  223. package/.next/server/app/channels.segments/_full.segment.rsc +6 -6
  224. package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
  225. package/.next/server/app/channels.segments/_index.segment.rsc +3 -3
  226. package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
  227. package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +2 -2
  228. package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
  229. package/.next/server/app/cron-jobs/page/build-manifest.json +4 -4
  230. package/.next/server/app/cron-jobs/page.js +8 -8
  231. package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
  232. package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
  233. package/.next/server/app/cron-jobs.html +1 -1
  234. package/.next/server/app/cron-jobs.rsc +7 -7
  235. package/.next/server/app/cron-jobs.segments/_full.segment.rsc +7 -7
  236. package/.next/server/app/cron-jobs.segments/_head.segment.rsc +1 -1
  237. package/.next/server/app/cron-jobs.segments/_index.segment.rsc +3 -3
  238. package/.next/server/app/cron-jobs.segments/_tree.segment.rsc +2 -2
  239. package/.next/server/app/cron-jobs.segments/cron-jobs/__PAGE__.segment.rsc +3 -3
  240. package/.next/server/app/cron-jobs.segments/cron-jobs.segment.rsc +1 -1
  241. package/.next/server/app/goals/[id]/page/build-manifest.json +4 -4
  242. package/.next/server/app/goals/[id]/page.js +8 -8
  243. package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
  244. package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/goals/new/page/build-manifest.json +4 -4
  246. package/.next/server/app/goals/new/page.js +8 -8
  247. package/.next/server/app/goals/new/page.js.nft.json +1 -1
  248. package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app/goals/new.html +2 -2
  250. package/.next/server/app/goals/new.rsc +6 -6
  251. package/.next/server/app/goals/new.segments/_full.segment.rsc +6 -6
  252. package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
  253. package/.next/server/app/goals/new.segments/_index.segment.rsc +3 -3
  254. package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
  255. package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +2 -2
  256. package/.next/server/app/goals/new.segments/goals/new.segment.rsc +1 -1
  257. package/.next/server/app/goals/new.segments/goals.segment.rsc +1 -1
  258. package/.next/server/app/goals/page/build-manifest.json +4 -4
  259. package/.next/server/app/goals/page.js +8 -8
  260. package/.next/server/app/goals/page.js.nft.json +1 -1
  261. package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  262. package/.next/server/app/goals.html +1 -1
  263. package/.next/server/app/goals.rsc +6 -6
  264. package/.next/server/app/goals.segments/_full.segment.rsc +6 -6
  265. package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
  266. package/.next/server/app/goals.segments/_index.segment.rsc +3 -3
  267. package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
  268. package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +2 -2
  269. package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
  270. package/.next/server/app/manifest.webmanifest/route/app-paths-manifest.json +3 -0
  271. package/.next/server/app/manifest.webmanifest/route/build-manifest.json +11 -0
  272. package/.next/server/app/manifest.webmanifest/route/server-reference-manifest.json +4 -0
  273. package/.next/server/app/manifest.webmanifest/route.js +6 -0
  274. package/.next/server/app/manifest.webmanifest/route.js.map +5 -0
  275. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  276. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +2 -0
  277. package/.next/server/app/manifest.webmanifest.body +1 -0
  278. package/.next/server/app/manifest.webmanifest.meta +1 -0
  279. package/.next/server/app/page/build-manifest.json +4 -4
  280. package/.next/server/app/page.js +10 -9
  281. package/.next/server/app/page.js.nft.json +1 -1
  282. package/.next/server/app/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/recipes/[id]/page/build-manifest.json +4 -4
  284. package/.next/server/app/recipes/[id]/page.js +10 -9
  285. package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
  286. package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
  287. package/.next/server/app/recipes/page/build-manifest.json +4 -4
  288. package/.next/server/app/recipes/page.js +9 -9
  289. package/.next/server/app/recipes/page.js.nft.json +1 -1
  290. package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
  291. package/.next/server/app/settings/page/build-manifest.json +4 -4
  292. package/.next/server/app/settings/page.js +8 -8
  293. package/.next/server/app/settings/page.js.nft.json +1 -1
  294. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  295. package/.next/server/app/settings.html +1 -1
  296. package/.next/server/app/settings.rsc +6 -6
  297. package/.next/server/app/settings.segments/_full.segment.rsc +6 -6
  298. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  299. package/.next/server/app/settings.segments/_index.segment.rsc +3 -3
  300. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  301. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  302. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  303. package/.next/server/app/teams/[teamId]/page/build-manifest.json +4 -4
  304. package/.next/server/app/teams/[teamId]/page.js +10 -9
  305. package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
  306. package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/app-paths-manifest.json +3 -0
  308. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +17 -0
  309. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/next-font-manifest.json +11 -0
  310. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/react-loadable-manifest.json +1 -0
  311. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/server-reference-manifest.json +4 -0
  312. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +18 -0
  313. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.map +5 -0
  314. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -0
  315. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +2 -0
  316. package/.next/server/app/teams/[teamId]/tickets/page/app-paths-manifest.json +3 -0
  317. package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +17 -0
  318. package/.next/server/app/teams/[teamId]/tickets/page/next-font-manifest.json +11 -0
  319. package/.next/server/app/teams/[teamId]/tickets/page/react-loadable-manifest.json +1 -0
  320. package/.next/server/app/teams/[teamId]/tickets/page/server-reference-manifest.json +4 -0
  321. package/.next/server/app/teams/[teamId]/tickets/page.js +18 -0
  322. package/.next/server/app/teams/[teamId]/tickets/page.js.map +5 -0
  323. package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -0
  324. package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +2 -0
  325. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/app-paths-manifest.json +3 -0
  326. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +17 -0
  327. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/next-font-manifest.json +11 -0
  328. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/react-loadable-manifest.json +1 -0
  329. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/server-reference-manifest.json +4 -0
  330. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +19 -0
  331. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.map +5 -0
  332. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -0
  333. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +2 -0
  334. package/.next/server/app/teams/[teamId]/workflows/page/app-paths-manifest.json +3 -0
  335. package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +17 -0
  336. package/.next/server/app/teams/[teamId]/workflows/page/next-font-manifest.json +11 -0
  337. package/.next/server/app/teams/[teamId]/workflows/page/react-loadable-manifest.json +1 -0
  338. package/.next/server/app/teams/[teamId]/workflows/page/server-reference-manifest.json +4 -0
  339. package/.next/server/app/teams/[teamId]/workflows/page.js +20 -0
  340. package/.next/server/app/teams/[teamId]/workflows/page.js.map +5 -0
  341. package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -0
  342. package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +2 -0
  343. package/.next/server/app/tickets/[ticket]/page/build-manifest.json +4 -4
  344. package/.next/server/app/tickets/[ticket]/page.js +8 -8
  345. package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
  346. package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
  347. package/.next/server/app/tickets/page/build-manifest.json +4 -4
  348. package/.next/server/app/tickets/page.js +8 -8
  349. package/.next/server/app/tickets/page.js.nft.json +1 -1
  350. package/.next/server/app/tickets/page_client-reference-manifest.js +1 -1
  351. package/.next/server/app-paths-manifest.json +21 -0
  352. package/.next/server/chunks/[root-of-the-server]__04d535a1._.js +3 -0
  353. package/.next/server/chunks/[root-of-the-server]__04d535a1._.js.map +1 -0
  354. package/.next/server/chunks/[root-of-the-server]__0554d494._.js +3 -0
  355. package/.next/server/chunks/[root-of-the-server]__0554d494._.js.map +1 -0
  356. package/.next/server/chunks/[root-of-the-server]__05f5e243._.js +3 -0
  357. package/.next/server/chunks/[root-of-the-server]__05f5e243._.js.map +1 -0
  358. package/.next/server/chunks/[root-of-the-server]__0e5f94e2._.js +3 -0
  359. package/.next/server/chunks/[root-of-the-server]__0e5f94e2._.js.map +1 -0
  360. package/.next/server/chunks/[root-of-the-server]__107d374d._.js +3 -0
  361. package/.next/server/chunks/[root-of-the-server]__107d374d._.js.map +1 -0
  362. package/.next/server/chunks/[root-of-the-server]__1106aaf7._.js +8 -0
  363. package/.next/server/chunks/[root-of-the-server]__1106aaf7._.js.map +1 -0
  364. package/.next/server/chunks/[root-of-the-server]__1805932c._.js +3 -0
  365. package/.next/server/chunks/[root-of-the-server]__1805932c._.js.map +1 -0
  366. package/.next/server/chunks/[root-of-the-server]__26c618a3._.js +3 -0
  367. package/.next/server/chunks/[root-of-the-server]__26c618a3._.js.map +1 -0
  368. package/.next/server/chunks/[root-of-the-server]__2fa553db._.js +3 -0
  369. package/.next/server/chunks/[root-of-the-server]__2fa553db._.js.map +1 -0
  370. package/.next/server/chunks/[root-of-the-server]__392e585d._.js +18 -0
  371. package/.next/server/chunks/[root-of-the-server]__392e585d._.js.map +1 -0
  372. package/.next/server/chunks/[root-of-the-server]__3cddf0a5._.js +3 -0
  373. package/.next/server/chunks/[root-of-the-server]__3cddf0a5._.js.map +1 -0
  374. package/.next/server/chunks/[root-of-the-server]__3f7058b4._.js +3 -0
  375. package/.next/server/chunks/[root-of-the-server]__3f7058b4._.js.map +1 -0
  376. package/.next/server/chunks/[root-of-the-server]__477c3d5b._.js +3 -0
  377. package/.next/server/chunks/[root-of-the-server]__477c3d5b._.js.map +1 -0
  378. package/.next/server/chunks/[root-of-the-server]__47eb3111._.js +3 -0
  379. package/.next/server/chunks/[root-of-the-server]__47eb3111._.js.map +1 -0
  380. package/.next/server/chunks/[root-of-the-server]__4898071c._.js +2 -2
  381. package/.next/server/chunks/[root-of-the-server]__59a6cf09._.js +3 -0
  382. package/.next/server/chunks/[root-of-the-server]__59a6cf09._.js.map +1 -0
  383. package/.next/server/chunks/[root-of-the-server]__5ea38a67._.js +3 -0
  384. package/.next/server/chunks/[root-of-the-server]__5ea38a67._.js.map +1 -0
  385. package/.next/server/chunks/[root-of-the-server]__6629e914._.js +3 -0
  386. package/.next/server/chunks/[root-of-the-server]__6629e914._.js.map +1 -0
  387. package/.next/server/chunks/[root-of-the-server]__667c3a2d._.js +3 -0
  388. package/.next/server/chunks/[root-of-the-server]__667c3a2d._.js.map +1 -0
  389. package/.next/server/chunks/[root-of-the-server]__691a8e5d._.js +6 -0
  390. package/.next/server/chunks/[root-of-the-server]__691a8e5d._.js.map +1 -0
  391. package/.next/server/chunks/[root-of-the-server]__698cf062._.js +3 -0
  392. package/.next/server/chunks/[root-of-the-server]__698cf062._.js.map +1 -0
  393. package/.next/server/chunks/[root-of-the-server]__69be1758._.js +3 -0
  394. package/.next/server/chunks/[root-of-the-server]__69be1758._.js.map +1 -0
  395. package/.next/server/chunks/[root-of-the-server]__6d8e7b75._.js +6 -0
  396. package/.next/server/chunks/[root-of-the-server]__6d8e7b75._.js.map +1 -0
  397. package/.next/server/chunks/[root-of-the-server]__6e5826c5._.js +3 -0
  398. package/.next/server/chunks/[root-of-the-server]__6e5826c5._.js.map +1 -0
  399. package/.next/server/chunks/[root-of-the-server]__795578f0._.js +3 -0
  400. package/.next/server/chunks/[root-of-the-server]__795578f0._.js.map +1 -0
  401. package/.next/server/chunks/[root-of-the-server]__7a331e51._.js +8 -0
  402. package/.next/server/chunks/[root-of-the-server]__7a331e51._.js.map +1 -0
  403. package/.next/server/chunks/[root-of-the-server]__7e46fb06._.js +3 -0
  404. package/.next/server/chunks/[root-of-the-server]__7e46fb06._.js.map +1 -0
  405. package/.next/server/chunks/[root-of-the-server]__864a08dd._.js +10 -0
  406. package/.next/server/chunks/[root-of-the-server]__864a08dd._.js.map +1 -0
  407. package/.next/server/chunks/[root-of-the-server]__8a811a30._.js +3 -0
  408. package/.next/server/chunks/[root-of-the-server]__8a811a30._.js.map +1 -0
  409. package/.next/server/chunks/[root-of-the-server]__8e27e9f7._.js +8 -0
  410. package/.next/server/chunks/[root-of-the-server]__8e27e9f7._.js.map +1 -0
  411. package/.next/server/chunks/[root-of-the-server]__8ea22d0a._.js +3 -0
  412. package/.next/server/chunks/[root-of-the-server]__8ea22d0a._.js.map +1 -0
  413. package/.next/server/chunks/[root-of-the-server]__904a6d9f._.js +3 -0
  414. package/.next/server/chunks/[root-of-the-server]__904a6d9f._.js.map +1 -0
  415. package/.next/server/chunks/[root-of-the-server]__a12dc320._.js +3 -0
  416. package/.next/server/chunks/[root-of-the-server]__a12dc320._.js.map +1 -0
  417. package/.next/server/chunks/[root-of-the-server]__a6ade549._.js +3 -0
  418. package/.next/server/chunks/[root-of-the-server]__a6ade549._.js.map +1 -0
  419. package/.next/server/chunks/[root-of-the-server]__abcda400._.js +6 -0
  420. package/.next/server/chunks/[root-of-the-server]__abcda400._.js.map +1 -0
  421. package/.next/server/chunks/[root-of-the-server]__b002764e._.js +3 -0
  422. package/.next/server/chunks/[root-of-the-server]__b002764e._.js.map +1 -0
  423. package/.next/server/chunks/[root-of-the-server]__bc3630f4._.js +3 -0
  424. package/.next/server/chunks/[root-of-the-server]__bc3630f4._.js.map +1 -0
  425. package/.next/server/chunks/[root-of-the-server]__befb8c19._.js +3 -0
  426. package/.next/server/chunks/[root-of-the-server]__befb8c19._.js.map +1 -0
  427. package/.next/server/chunks/[root-of-the-server]__bf608f29._.js +3 -0
  428. package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js.map → [root-of-the-server]__bf608f29._.js.map} +1 -1
  429. package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js → [root-of-the-server]__c63a9f28._.js} +2 -2
  430. package/.next/server/chunks/[root-of-the-server]__c86c0469._.js +3 -0
  431. package/.next/server/chunks/[root-of-the-server]__c86c0469._.js.map +1 -0
  432. package/.next/server/chunks/[root-of-the-server]__c9e4c772._.js +3 -0
  433. package/.next/server/chunks/[root-of-the-server]__c9e4c772._.js.map +1 -0
  434. package/.next/server/chunks/[root-of-the-server]__cbe01b74._.js +3 -0
  435. package/.next/server/chunks/[root-of-the-server]__cbe01b74._.js.map +1 -0
  436. package/.next/server/chunks/[root-of-the-server]__ce9cfa39._.js +3 -0
  437. package/.next/server/chunks/[root-of-the-server]__ce9cfa39._.js.map +1 -0
  438. package/.next/server/chunks/[root-of-the-server]__d924e5ac._.js +3 -0
  439. package/.next/server/chunks/[root-of-the-server]__d924e5ac._.js.map +1 -0
  440. package/.next/server/chunks/[root-of-the-server]__e40409a2._.js +3 -0
  441. package/.next/server/chunks/[root-of-the-server]__e40409a2._.js.map +1 -0
  442. package/.next/server/chunks/[root-of-the-server]__e6fa5823._.js +3 -0
  443. package/.next/server/chunks/[root-of-the-server]__e6fa5823._.js.map +1 -0
  444. package/.next/server/chunks/[root-of-the-server]__e8bfeaba._.js +3 -0
  445. package/.next/server/chunks/[root-of-the-server]__e8bfeaba._.js.map +1 -0
  446. package/.next/server/chunks/[root-of-the-server]__e8f8017b._.js +3 -0
  447. package/.next/server/chunks/[root-of-the-server]__e8f8017b._.js.map +1 -0
  448. package/.next/server/chunks/[root-of-the-server]__ee5cefd8._.js +3 -0
  449. package/.next/server/chunks/[root-of-the-server]__ee5cefd8._.js.map +1 -0
  450. package/.next/server/chunks/[root-of-the-server]__ef60acef._.js +3 -0
  451. package/.next/server/chunks/[root-of-the-server]__ef60acef._.js.map +1 -0
  452. package/.next/server/chunks/[root-of-the-server]__fdda9176._.js +3 -0
  453. package/.next/server/chunks/{[root-of-the-server]__a6ac3ddf._.js.map → [root-of-the-server]__fdda9176._.js.map} +1 -1
  454. package/.next/server/chunks/[root-of-the-server]__fec14c75._.js +3 -0
  455. package/.next/server/chunks/[root-of-the-server]__fec14c75._.js.map +1 -0
  456. package/.next/server/chunks/[root-of-the-server]__fef7183d._.js +3 -0
  457. package/.next/server/chunks/[root-of-the-server]__fef7183d._.js.map +1 -0
  458. package/.next/server/chunks/_next-internal_server_app_api_recipes_custom-team_route_actions_861b1489.js +3 -0
  459. package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js +3 -0
  460. package/.next/server/chunks/_next-internal_server_app_api_swarms_start_route_actions_b79e9029.js.map +1 -0
  461. package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js +3 -0
  462. package/.next/server/chunks/_next-internal_server_app_api_swarms_status_route_actions_54826df0.js.map +1 -0
  463. package/.next/server/chunks/_next-internal_server_app_api_teams_[teamId]_tickets_move_route_actions_b47d8708.js +3 -0
  464. package/.next/server/chunks/_next-internal_server_app_api_teams_[teamId]_tickets_move_route_actions_b47d8708.js.map +1 -0
  465. package/.next/server/chunks/_next-internal_server_app_api_teams_memory_route_actions_5b7dc699.js +3 -0
  466. package/.next/server/chunks/_next-internal_server_app_api_teams_memory_route_actions_5b7dc699.js.map +1 -0
  467. package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_install_route_actions_49b6602b.js +3 -0
  468. package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_install_route_actions_49b6602b.js.map +1 -0
  469. package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js +3 -0
  470. package/.next/server/chunks/_next-internal_server_app_api_teams_orchestrator_route_actions_1949c463.js.map +1 -0
  471. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js +3 -0
  472. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-runs_route_actions_8327ac7d.js.map +1 -0
  473. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-templates_route_actions_87b51d57.js +3 -0
  474. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-templates_route_actions_87b51d57.js.map +1 -0
  475. package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js +3 -0
  476. package/.next/server/chunks/_next-internal_server_app_api_teams_workflows_route_actions_43dd6e07.js.map +1 -0
  477. package/.next/server/chunks/_next-internal_server_app_api_tickets_assign_route_actions_629cc773.js +3 -0
  478. package/.next/server/chunks/_next-internal_server_app_api_tickets_assign_route_actions_629cc773.js.map +1 -0
  479. package/.next/server/chunks/_next-internal_server_app_api_tickets_assignees_route_actions_64d3d63e.js +3 -0
  480. package/.next/server/chunks/_next-internal_server_app_api_tickets_assignees_route_actions_64d3d63e.js.map +1 -0
  481. package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_1bff3fca.js +3 -0
  482. package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_1bff3fca.js.map +1 -0
  483. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assign_route_actions_50521c46.js +3 -0
  484. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assign_route_actions_50521c46.js.map +1 -0
  485. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assignees_route_actions_75675d78.js +3 -0
  486. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_assignees_route_actions_75675d78.js.map +1 -0
  487. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_delete_route_actions_9d6ca9f4.js +3 -0
  488. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_delete_route_actions_9d6ca9f4.js.map +1 -0
  489. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_move-to-goals_route_actions_760612ca.js +3 -0
  490. package/.next/server/chunks/ce889_server_app_api_teams_[teamId]_tickets_move-to-goals_route_actions_760612ca.js.map +1 -0
  491. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +16 -0
  492. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -0
  493. package/.next/server/chunks/ssr/[root-of-the-server]__0d4cb2ba._.js +3 -0
  494. package/.next/server/chunks/ssr/[root-of-the-server]__285ae6b7._.js +3 -0
  495. package/.next/server/chunks/ssr/{[root-of-the-server]__46e08d44._.js.map → [root-of-the-server]__285ae6b7._.js.map} +1 -1
  496. package/.next/server/chunks/ssr/[root-of-the-server]__28f5d174._.js +3 -0
  497. package/.next/server/chunks/ssr/[root-of-the-server]__28f5d174._.js.map +1 -0
  498. package/.next/server/chunks/ssr/[root-of-the-server]__2bef6884._.js +3 -0
  499. package/.next/server/chunks/ssr/{[root-of-the-server]__15600e29._.js.map → [root-of-the-server]__2bef6884._.js.map} +1 -1
  500. package/.next/server/chunks/ssr/[root-of-the-server]__37c705d4._.js +3 -0
  501. package/.next/server/chunks/ssr/[root-of-the-server]__37c705d4._.js.map +1 -0
  502. package/.next/server/chunks/ssr/[root-of-the-server]__3ec61b25._.js +3 -0
  503. package/.next/server/chunks/ssr/[root-of-the-server]__3ec61b25._.js.map +1 -0
  504. package/.next/server/chunks/ssr/[root-of-the-server]__3efd25c4._.js +3 -0
  505. package/.next/server/chunks/ssr/{[root-of-the-server]__2a6f1e3e._.js.map → [root-of-the-server]__3efd25c4._.js.map} +1 -1
  506. package/.next/server/chunks/ssr/[root-of-the-server]__44d2d5fa._.js +3 -0
  507. package/.next/server/chunks/ssr/[root-of-the-server]__44d2d5fa._.js.map +1 -0
  508. package/.next/server/chunks/ssr/[root-of-the-server]__49281b4c._.js +3 -0
  509. package/.next/server/chunks/ssr/[root-of-the-server]__49281b4c._.js.map +1 -0
  510. package/.next/server/chunks/ssr/[root-of-the-server]__4c4391c1._.js +3 -0
  511. package/.next/server/chunks/ssr/[root-of-the-server]__4c4391c1._.js.map +1 -0
  512. package/.next/server/chunks/ssr/[root-of-the-server]__4c6592ca._.js +3 -0
  513. package/.next/server/chunks/ssr/[root-of-the-server]__4c6592ca._.js.map +1 -0
  514. package/.next/server/chunks/ssr/[root-of-the-server]__682758bd._.js +3 -0
  515. package/.next/server/chunks/ssr/[root-of-the-server]__682758bd._.js.map +1 -0
  516. package/.next/server/chunks/ssr/[root-of-the-server]__6bd48d33._.js +1 -1
  517. package/.next/server/chunks/ssr/[root-of-the-server]__6bd48d33._.js.map +1 -1
  518. package/.next/server/chunks/ssr/[root-of-the-server]__78972f52._.js +3 -0
  519. package/.next/server/chunks/ssr/[root-of-the-server]__78972f52._.js.map +1 -0
  520. package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js → [root-of-the-server]__78cdd31e._.js} +2 -2
  521. package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +3 -0
  522. package/.next/server/chunks/ssr/{[root-of-the-server]__247198dc._.js.map → [root-of-the-server]__92524828._.js.map} +1 -1
  523. package/.next/server/chunks/ssr/[root-of-the-server]__9a7d79aa._.js +3 -0
  524. package/.next/server/chunks/ssr/[root-of-the-server]__9a7d79aa._.js.map +1 -0
  525. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +3 -0
  526. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -0
  527. package/.next/server/chunks/ssr/[root-of-the-server]__ad654f09._.js +3 -0
  528. package/.next/server/chunks/ssr/[root-of-the-server]__ad654f09._.js.map +1 -0
  529. package/.next/server/chunks/ssr/[root-of-the-server]__b2617fbf._.js +3 -0
  530. package/.next/server/chunks/ssr/{[root-of-the-server]__fd669584._.js.map → [root-of-the-server]__b2617fbf._.js.map} +1 -1
  531. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +3 -0
  532. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -0
  533. package/.next/server/chunks/ssr/{[root-of-the-server]__4c6cc96d._.js → [root-of-the-server]__de18d058._.js} +2 -2
  534. package/.next/server/chunks/ssr/{[root-of-the-server]__4c6cc96d._.js.map → [root-of-the-server]__de18d058._.js.map} +1 -1
  535. package/.next/server/chunks/ssr/{[root-of-the-server]__7180d770._.js → [root-of-the-server]__e364449b._.js} +2 -2
  536. package/.next/server/chunks/ssr/[root-of-the-server]__e364449b._.js.map +1 -0
  537. package/.next/server/chunks/ssr/[root-of-the-server]__e5d416d5._.js +3 -0
  538. package/.next/server/chunks/ssr/{[root-of-the-server]__3ad3e5b1._.js.map → [root-of-the-server]__e5d416d5._.js.map} +1 -1
  539. package/.next/server/chunks/ssr/[root-of-the-server]__e94ab521._.js +3 -0
  540. package/.next/server/chunks/ssr/[root-of-the-server]__e94ab521._.js.map +1 -0
  541. package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js → [root-of-the-server]__f62d412e._.js} +2 -2
  542. package/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js.map → [root-of-the-server]__f62d412e._.js.map} +1 -1
  543. package/.next/server/chunks/ssr/[root-of-the-server]__f8a2f82d._.js +3 -0
  544. package/.next/server/chunks/ssr/[root-of-the-server]__f8a2f82d._.js.map +1 -0
  545. package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +3 -0
  546. package/.next/server/chunks/ssr/{[root-of-the-server]__3575e6da._.js.map → [root-of-the-server]__fbe5ff69._.js.map} +1 -1
  547. package/.next/server/chunks/ssr/_018dfe6b._.js +27 -0
  548. package/.next/server/chunks/ssr/_018dfe6b._.js.map +1 -0
  549. package/.next/server/chunks/ssr/{_8c45edba._.js → _0bdae23a._.js} +3 -3
  550. package/.next/server/chunks/ssr/_0bdae23a._.js.map +1 -0
  551. package/.next/server/chunks/ssr/{_d27483a1._.js → _19aa68d3._.js} +3 -3
  552. package/.next/server/chunks/ssr/_19aa68d3._.js.map +1 -0
  553. package/.next/server/chunks/ssr/{_25e6aab8._.js → _347e2d56._.js} +3 -3
  554. package/.next/server/chunks/ssr/_347e2d56._.js.map +1 -0
  555. package/.next/server/chunks/ssr/_3c9015dc._.js +4 -0
  556. package/.next/server/chunks/ssr/_3c9015dc._.js.map +1 -0
  557. package/.next/server/chunks/ssr/_41ca4e70._.js +3 -0
  558. package/.next/server/chunks/ssr/_41ca4e70._.js.map +1 -0
  559. package/.next/server/chunks/ssr/{node_modules_next_dist_12287b3d._.js → _49fb12c2._.js} +3 -3
  560. package/.next/server/chunks/ssr/_49fb12c2._.js.map +1 -0
  561. package/.next/server/chunks/ssr/{_3c8b2df6._.js → _536983a4._.js} +3 -3
  562. package/.next/server/chunks/ssr/_536983a4._.js.map +1 -0
  563. package/.next/server/chunks/ssr/_5443093b._.js +3 -0
  564. package/.next/server/chunks/ssr/_5443093b._.js.map +1 -0
  565. package/.next/server/chunks/ssr/{_cd23c5af._.js → _5b282394._.js} +3 -3
  566. package/.next/server/chunks/ssr/_5b282394._.js.map +1 -0
  567. package/.next/server/chunks/ssr/{_6e70b5a4._.js → _5cc24343._.js} +3 -3
  568. package/.next/server/chunks/ssr/_5cc24343._.js.map +1 -0
  569. package/.next/server/chunks/ssr/_67830ad6._.js +3 -0
  570. package/.next/server/chunks/ssr/_67830ad6._.js.map +1 -0
  571. package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_68c68167.js → _7eac37fb._.js} +3 -3
  572. package/.next/server/chunks/ssr/_7eac37fb._.js.map +1 -0
  573. package/.next/server/chunks/ssr/{_92140ca3._.js → _802ee40f._.js} +3 -3
  574. package/.next/server/chunks/ssr/{_25e6aab8._.js.map → _802ee40f._.js.map} +1 -1
  575. package/.next/server/chunks/ssr/{_8c8207c1._.js → _8062e992._.js} +3 -3
  576. package/.next/server/chunks/ssr/_8062e992._.js.map +1 -0
  577. package/.next/server/chunks/ssr/{_0808c2b9._.js → _99994c05._.js} +3 -3
  578. package/.next/server/chunks/ssr/_99994c05._.js.map +1 -0
  579. package/.next/server/chunks/ssr/{_b5e9afcc._.js → _aafc99aa._.js} +3 -3
  580. package/.next/server/chunks/ssr/_aafc99aa._.js.map +1 -0
  581. package/.next/server/chunks/ssr/{_39e6e769._.js → _b7f3caf7._.js} +3 -3
  582. package/.next/server/chunks/ssr/_b7f3caf7._.js.map +1 -0
  583. package/.next/server/chunks/ssr/_c2041f88._.js +4 -0
  584. package/.next/server/chunks/ssr/_c2041f88._.js.map +1 -0
  585. package/.next/server/chunks/ssr/_d2e9dda9._.js +4 -0
  586. package/.next/server/chunks/ssr/_d2e9dda9._.js.map +1 -0
  587. package/.next/server/chunks/ssr/{_3158c108._.js → _f4d8af3b._.js} +3 -3
  588. package/.next/server/chunks/ssr/_f4d8af3b._.js.map +1 -0
  589. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_[ticket]_page_actions_25ad633d.js +3 -0
  590. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_[ticket]_page_actions_25ad633d.js.map +1 -0
  591. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_page_actions_dffb2525.js +3 -0
  592. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_tickets_page_actions_dffb2525.js.map +1 -0
  593. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_workflows_page_actions_3defde35.js +3 -0
  594. package/.next/server/chunks/ssr/_next-internal_server_app_teams_[teamId]_workflows_page_actions_3defde35.js.map +1 -0
  595. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +3 -0
  596. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -0
  597. package/.next/server/chunks/ssr/ce889_server_app_teams_[teamId]_workflows_[workflowId]_page_actions_880cbbc3.js +3 -0
  598. package/.next/server/chunks/ssr/ce889_server_app_teams_[teamId]_workflows_[workflowId]_page_actions_880cbbc3.js.map +1 -0
  599. package/.next/server/chunks/ssr/node_modules_ea845e5f._.js +3 -0
  600. package/.next/server/chunks/ssr/node_modules_ea845e5f._.js.map +1 -0
  601. package/.next/server/chunks/ssr/{_da6f800e._.js → node_modules_next_aefa2538._.js} +2 -2
  602. package/.next/server/chunks/ssr/node_modules_next_aefa2538._.js.map +1 -0
  603. package/.next/server/chunks/ssr/node_modules_next_dist_8a37abed._.js +4 -0
  604. package/.next/server/chunks/ssr/node_modules_next_dist_8a37abed._.js.map +1 -0
  605. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js → node_modules_next_dist_client_components_2fffaa3a._.js} +2 -2
  606. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_9774470f._.js.map → node_modules_next_dist_client_components_2fffaa3a._.js.map} +1 -1
  607. package/.next/server/chunks/ssr/{_68793c1f._.js → node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js} +3 -3
  608. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_b5ef32b4.js.map +1 -0
  609. package/.next/server/chunks/ssr/src_13139e3d._.js +3 -0
  610. package/.next/server/chunks/ssr/src_13139e3d._.js.map +1 -0
  611. package/.next/server/chunks/ssr/src_2a73b867._.js +3 -0
  612. package/.next/server/chunks/ssr/src_2a73b867._.js.map +1 -0
  613. package/.next/server/chunks/ssr/src_2dbb3b7f._.js +3 -0
  614. package/.next/server/chunks/ssr/src_2dbb3b7f._.js.map +1 -0
  615. package/.next/server/chunks/ssr/src_417bc4a6._.js +3 -0
  616. package/.next/server/chunks/ssr/src_417bc4a6._.js.map +1 -0
  617. package/.next/server/chunks/ssr/src_59477309._.js +3 -0
  618. package/.next/server/chunks/ssr/src_59477309._.js.map +1 -0
  619. package/.next/server/chunks/ssr/src_79d55c05._.js +3 -0
  620. package/.next/server/chunks/ssr/src_79d55c05._.js.map +1 -0
  621. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js +1 -1
  622. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js.map +1 -1
  623. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js +1 -1
  624. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js.map +1 -1
  625. package/.next/server/chunks/ssr/src_app_global-error_tsx_aa661ba4._.js +3 -0
  626. package/.next/server/chunks/ssr/src_app_global-error_tsx_aa661ba4._.js.map +1 -0
  627. package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js +3 -0
  628. package/.next/server/chunks/ssr/src_app_not-found_tsx_3f23d179._.js.map +1 -0
  629. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js +3 -0
  630. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js.map +1 -0
  631. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js +1 -1
  632. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map +1 -1
  633. package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js +12 -0
  634. package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_index_tsx_e68e9cbc._.js.map +1 -0
  635. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js +1 -1
  636. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js.map +1 -1
  637. package/.next/server/chunks/ssr/src_e54f24fb._.js +3 -0
  638. package/.next/server/chunks/ssr/src_e54f24fb._.js.map +1 -0
  639. package/.next/server/middleware-build-manifest.js +4 -4
  640. package/.next/server/next-font-manifest.js +1 -1
  641. package/.next/server/next-font-manifest.json +16 -0
  642. package/.next/server/pages/404.html +1 -1
  643. package/.next/server/pages/500.html +2 -2
  644. package/.next/static/chunks/0edab8a24d59a626.js +2 -0
  645. package/.next/static/chunks/11da0a52793b005a.js +1 -0
  646. package/.next/static/chunks/150338287c7dae30.js +1 -0
  647. package/.next/static/chunks/236ef28eb649c432.js +1 -0
  648. package/.next/static/chunks/3e1fe6be993c61fb.js +1 -0
  649. package/.next/static/chunks/55a88f2071ebe766.js +1 -0
  650. package/.next/static/chunks/5cf42ef49ad071af.js +10 -0
  651. package/.next/static/chunks/62e0c437eb8fc2da.js +1 -0
  652. package/.next/static/chunks/{82abf2d65f5428ae.js → 68a088aa49e6124a.js} +3 -3
  653. package/.next/static/chunks/7bb0aafbf73524bf.js +1 -0
  654. package/.next/static/chunks/8d359fbce4ebb835.js +1 -0
  655. package/.next/static/chunks/9197ecb9606557f3.js +1 -0
  656. package/.next/static/chunks/93719e85369dd453.js +1 -0
  657. package/.next/static/chunks/b244476ded155cf9.css +3 -0
  658. package/.next/static/chunks/c75e00652e6b7d85.js +1 -0
  659. package/.next/static/chunks/c84580993f22c17a.js +1 -0
  660. package/.next/static/chunks/d73a47fc8def319c.js +1 -0
  661. package/.next/static/chunks/daa78a9d669e23f5.js +1 -0
  662. package/.next/static/chunks/db4da5ee45033817.js +1 -0
  663. package/.next/static/chunks/e8021fea9aee6b63.js +1 -0
  664. package/.next/static/chunks/e854e56ea8cb6236.js +1 -0
  665. package/.next/static/chunks/ffff6b5105288d2c.js +1 -0
  666. package/.next/static/chunks/{turbopack-ae1340e658f67df8.js → turbopack-0236a74c4f471967.js} +1 -1
  667. package/README.md +22 -1
  668. package/openclaw/index.ts +133 -26
  669. package/openclaw.plugin.json +9 -1
  670. package/package.json +24 -3
  671. package/public/android-chrome-192x192.png +0 -0
  672. package/public/android-chrome-512x512.png +0 -0
  673. package/public/apple-touch-icon.png +0 -0
  674. package/public/chef.jpg +0 -0
  675. package/public/favicon-16x16.png +0 -0
  676. package/public/favicon-32x32.png +0 -0
  677. package/public/favicon.ico +0 -0
  678. package/src/app/HomeClient.tsx +8 -9
  679. package/src/app/agents/[agentId]/agent-editor-tabs.tsx +298 -0
  680. package/src/app/agents/[agentId]/agent-editor.tsx +200 -428
  681. package/src/app/api/__tests__/agents-add-route.test.ts +143 -0
  682. package/src/app/api/__tests__/agents-file-route.test.ts +117 -0
  683. package/src/app/api/__tests__/agents-files-route.test.ts +61 -0
  684. package/src/app/api/__tests__/agents-id-route.test.ts +104 -0
  685. package/src/app/api/__tests__/agents-identity-route.test.ts +92 -0
  686. package/src/app/api/__tests__/agents-route.test.ts +54 -0
  687. package/src/app/api/__tests__/agents-skills-install-route.test.ts +131 -0
  688. package/src/app/api/__tests__/agents-skills-route.test.ts +64 -0
  689. package/src/app/api/__tests__/agents-update-route.test.ts +95 -0
  690. package/src/app/api/__tests__/channels-bindings-route.test.ts +143 -0
  691. package/src/app/api/__tests__/cron-delete-route.test.ts +93 -0
  692. package/src/app/api/__tests__/cron-job-route.test.ts +78 -0
  693. package/src/app/api/__tests__/cron-jobs-route.test.ts +116 -0
  694. package/src/app/api/__tests__/cron-recipe-installed-route.test.ts +114 -0
  695. package/src/app/api/__tests__/gateway-restart-route.test.ts +36 -0
  696. package/src/app/api/__tests__/goals-promote-route.test.ts +200 -0
  697. package/src/app/api/__tests__/goals-route.test.ts +184 -0
  698. package/src/app/api/__tests__/ids-check-route.test.ts +188 -0
  699. package/src/app/api/__tests__/marketplace-recipes-route.test.ts +123 -0
  700. package/src/app/api/__tests__/recipes-clone-route.test.ts +221 -0
  701. package/src/app/api/__tests__/recipes-delete-route.test.ts +248 -0
  702. package/src/app/api/__tests__/recipes-id-route.test.ts +166 -0
  703. package/src/app/api/__tests__/recipes-route.test.ts +57 -0
  704. package/src/app/api/__tests__/recipes-team-agents-route.test.ts +135 -0
  705. package/src/app/api/__tests__/scaffold-route.test.ts +173 -0
  706. package/src/app/api/__tests__/settings-cron-installation-route.test.ts +82 -0
  707. package/src/app/api/__tests__/skills-available-route.test.ts +47 -0
  708. package/src/app/api/__tests__/swarms-start-route.test.ts +79 -0
  709. package/src/app/api/__tests__/swarms-status-route.test.ts +42 -0
  710. package/src/app/api/__tests__/teams-file-route.test.ts +129 -0
  711. package/src/app/api/__tests__/teams-files-route.test.ts +57 -0
  712. package/src/app/api/__tests__/teams-meta-route.test.ts +113 -0
  713. package/src/app/api/__tests__/teams-orchestrator-install-route.test.ts +66 -0
  714. package/src/app/api/__tests__/teams-orchestrator-route.test.ts +59 -0
  715. package/src/app/api/__tests__/teams-remove-team-route.test.ts +122 -0
  716. package/src/app/api/__tests__/teams-skills-install-route.test.ts +78 -0
  717. package/src/app/api/__tests__/teams-skills-route.test.ts +73 -0
  718. package/src/app/api/__tests__/teams-workflow-runs-route.test.ts +85 -0
  719. package/src/app/api/__tests__/teams-workflows-route.test.ts +110 -0
  720. package/src/app/api/__tests__/tickets-move-route.test.ts +60 -0
  721. package/src/app/api/agents/[id]/route.ts +33 -29
  722. package/src/app/api/agents/add/route.ts +38 -33
  723. package/src/app/api/agents/file/route.ts +14 -27
  724. package/src/app/api/agents/files/route.ts +7 -62
  725. package/src/app/api/agents/route.ts +3 -10
  726. package/src/app/api/agents/skills/install/route.ts +2 -14
  727. package/src/app/api/agents/skills/route.ts +6 -18
  728. package/src/app/api/channels/bindings/route.ts +6 -15
  729. package/src/app/api/cron/__tests__/helpers.test.ts +164 -0
  730. package/src/app/api/cron/delete/route.ts +4 -63
  731. package/src/app/api/cron/helpers.ts +172 -0
  732. package/src/app/api/cron/jobs/route.ts +24 -113
  733. package/src/app/api/cron/recipe-installed/route.ts +6 -4
  734. package/src/app/api/gateway/restart/route.ts +2 -1
  735. package/src/app/api/goals/[id]/promote/route.ts +10 -43
  736. package/src/app/api/goals/[id]/route.ts +10 -16
  737. package/src/app/api/goals/route.ts +3 -6
  738. package/src/app/api/ids/check/route.ts +18 -26
  739. package/src/app/api/marketplace/recipes/[slug]/route.ts +2 -2
  740. package/src/app/api/recipes/[id]/route.ts +3 -9
  741. package/src/app/api/recipes/clone/route.ts +3 -38
  742. package/src/app/api/recipes/custom-team/route.ts +193 -0
  743. package/src/app/api/recipes/delete/helpers.ts +65 -0
  744. package/src/app/api/recipes/delete/route.ts +11 -78
  745. package/src/app/api/recipes/team-agents/__tests__/helpers.test.ts +156 -0
  746. package/src/app/api/recipes/team-agents/helpers.ts +151 -0
  747. package/src/app/api/recipes/team-agents/route.ts +27 -125
  748. package/src/app/api/scaffold/__tests__/helpers.test.ts +186 -0
  749. package/src/app/api/scaffold/helpers.ts +214 -0
  750. package/src/app/api/scaffold/route.ts +40 -274
  751. package/src/app/api/settings/cron-installation/route.ts +3 -2
  752. package/src/app/api/skills/available/route.ts +2 -1
  753. package/src/app/api/swarms/start/route.ts +100 -0
  754. package/src/app/api/swarms/status/route.ts +31 -0
  755. package/src/app/api/teams/[teamId]/tickets/assign/route.ts +105 -0
  756. package/src/app/api/teams/[teamId]/tickets/assignees/route.ts +27 -0
  757. package/src/app/api/teams/[teamId]/tickets/delete/route.ts +55 -0
  758. package/src/app/api/teams/[teamId]/tickets/move/route.ts +70 -0
  759. package/src/app/api/teams/[teamId]/tickets/move-to-goals/route.ts +56 -0
  760. package/src/app/api/teams/file/route.ts +26 -47
  761. package/src/app/api/teams/files/route.ts +13 -45
  762. package/src/app/api/teams/memory/route.ts +250 -0
  763. package/src/app/api/teams/meta/route.ts +16 -35
  764. package/src/app/api/teams/orchestrator/install/route.ts +129 -0
  765. package/src/app/api/teams/orchestrator/route.ts +216 -0
  766. package/src/app/api/teams/remove-team/route.ts +7 -15
  767. package/src/app/api/teams/skills/install/route.ts +2 -13
  768. package/src/app/api/teams/skills/route.ts +6 -17
  769. package/src/app/api/teams/workflow-runs/route.ts +534 -0
  770. package/src/app/api/teams/workflow-templates/route.ts +71 -0
  771. package/src/app/api/teams/workflows/route.ts +55 -0
  772. package/src/app/api/tickets/assign/route.ts +94 -0
  773. package/src/app/api/tickets/assignees/route.ts +24 -0
  774. package/src/app/api/tickets/move/route.ts +31 -0
  775. package/src/app/channels/channels-client.tsx +48 -47
  776. package/src/app/cron-jobs/cron-jobs-client.tsx +11 -14
  777. package/src/app/cron-jobs/page.tsx +1 -1
  778. package/src/app/global-error.tsx +50 -0
  779. package/src/app/goals/[id]/goal-editor.tsx +74 -179
  780. package/src/app/goals/goals-client.tsx +30 -39
  781. package/src/app/goals/new/page.tsx +45 -124
  782. package/src/app/layout.tsx +8 -0
  783. package/src/app/manifest.ts +15 -0
  784. package/src/app/not-found.tsx +8 -0
  785. package/src/app/page.tsx +4 -31
  786. package/src/app/recipes/CreateAgentModal.tsx +98 -153
  787. package/src/app/recipes/CreateCustomTeamModal.tsx +375 -0
  788. package/src/app/recipes/CreateModalShell.tsx +55 -0
  789. package/src/app/recipes/CreateTeamModal.tsx +54 -105
  790. package/src/app/recipes/[id]/RecipeEditor/RecipeEditorCreateModal.tsx +72 -0
  791. package/src/app/recipes/[id]/RecipeEditor/RecipeEditorPanel.tsx +216 -0
  792. package/src/app/recipes/[id]/RecipeEditor/index.tsx +271 -0
  793. package/src/app/recipes/[id]/RecipeEditor/recipe-editor-utils.ts +46 -0
  794. package/src/app/recipes/[id]/RecipeEditor/types.ts +52 -0
  795. package/src/app/recipes/[id]/page.tsx +4 -18
  796. package/src/app/recipes/page.tsx +9 -2
  797. package/src/app/recipes/recipes-client.tsx +266 -156
  798. package/src/app/settings/page.tsx +1 -1
  799. package/src/app/settings/settings-client.tsx +11 -10
  800. package/src/app/teams/[teamId]/CloneTeamModal.tsx +77 -111
  801. package/src/app/teams/[teamId]/OrchestratorPanel.tsx +255 -0
  802. package/src/app/teams/[teamId]/OrchestratorSetupModal.tsx +184 -0
  803. package/src/app/teams/[teamId]/PublishChangesModal.tsx +21 -42
  804. package/src/app/teams/[teamId]/page.tsx +27 -49
  805. package/src/app/teams/[teamId]/team-editor/TeamAgentsTab.tsx +145 -0
  806. package/src/app/teams/[teamId]/team-editor/TeamCronTab.tsx +72 -0
  807. package/src/app/teams/[teamId]/team-editor/TeamFilesTab.tsx +74 -0
  808. package/src/app/teams/[teamId]/team-editor/TeamMemoryTab.tsx +349 -0
  809. package/src/app/teams/[teamId]/team-editor/TeamRecipeTab.tsx +151 -0
  810. package/src/app/teams/[teamId]/team-editor/TeamSkillsTab.tsx +68 -0
  811. package/src/app/teams/[teamId]/team-editor/index.tsx +558 -0
  812. package/src/app/teams/[teamId]/team-editor/team-editor-data.ts +255 -0
  813. package/src/app/teams/[teamId]/team-editor/team-editor-utils.ts +78 -0
  814. package/src/app/teams/[teamId]/team-editor/types.ts +34 -0
  815. package/src/app/teams/[teamId]/tickets/[ticket]/page.tsx +35 -0
  816. package/src/app/teams/[teamId]/tickets/page.tsx +15 -0
  817. package/src/app/teams/[teamId]/workflows/[workflowId]/WorkflowCanvas.tsx +111 -0
  818. package/src/app/teams/[teamId]/workflows/[workflowId]/page.tsx +27 -0
  819. package/src/app/teams/[teamId]/workflows/[workflowId]/workflows-editor-client.tsx +1608 -0
  820. package/src/app/teams/[teamId]/workflows/page.tsx +40 -0
  821. package/src/app/teams/[teamId]/workflows/workflows-client.tsx +494 -0
  822. package/src/app/tickets/TicketDetailClient.tsx +147 -0
  823. package/src/app/tickets/TicketsBoardClient.tsx +11 -57
  824. package/src/app/tickets/[ticket]/TicketAssignControl.tsx +112 -0
  825. package/src/app/tickets/[ticket]/page.tsx +13 -21
  826. package/src/app/tickets/page.tsx +5 -2
  827. package/src/components/AppShell.tsx +252 -31
  828. package/src/{app/cron-jobs/DeleteCronJobModal.tsx → components/ConfirmationModal.tsx} +35 -17
  829. package/src/components/DeleteEntityModal.tsx +41 -0
  830. package/src/components/ErrorBoundary.tsx +70 -0
  831. package/src/components/FileListWithOptionalToggle.tsx +86 -0
  832. package/src/components/GoalFormFields.tsx +163 -0
  833. package/src/components/ScaffoldOverlay.tsx +7 -10
  834. package/src/components/ToastProvider.tsx +22 -18
  835. package/src/components/__tests__/ConfirmationModal.test.tsx +109 -0
  836. package/src/components/__tests__/ErrorBoundary.test.tsx +39 -0
  837. package/src/components/__tests__/FileListWithOptionalToggle.test.tsx +109 -0
  838. package/src/components/__tests__/GoalFormFields.test.tsx +117 -0
  839. package/src/components/delete-modals.tsx +59 -0
  840. package/src/components/icons.tsx +12 -10
  841. package/src/lib/__tests__/agent-workspace.test.ts +44 -0
  842. package/src/lib/__tests__/agents.test.ts +36 -0
  843. package/src/lib/__tests__/api-route-helpers.test.ts +188 -0
  844. package/src/lib/__tests__/cron.test.ts +45 -0
  845. package/src/lib/__tests__/editor-utils.test.ts +38 -0
  846. package/src/lib/__tests__/errors.test.ts +15 -0
  847. package/src/lib/__tests__/exec.test.ts +13 -0
  848. package/src/lib/__tests__/fetch-json.test.ts +118 -0
  849. package/src/lib/__tests__/gateway.test.ts +234 -0
  850. package/src/lib/__tests__/goal-promote.test.ts +39 -0
  851. package/src/lib/__tests__/goals-client.test.ts +26 -0
  852. package/src/lib/__tests__/goals.test.ts +275 -0
  853. package/src/lib/__tests__/json.test.ts +15 -0
  854. package/src/lib/__tests__/kitchen-api.test.ts +32 -0
  855. package/src/lib/__tests__/marketplace.test.ts +116 -0
  856. package/src/lib/__tests__/openclaw.test.ts +129 -0
  857. package/src/lib/__tests__/paths.test.ts +136 -0
  858. package/src/lib/__tests__/poll.test.ts +26 -0
  859. package/src/lib/__tests__/recipe-clone.test.ts +85 -0
  860. package/src/lib/__tests__/recipe-team-agents.test.ts +70 -0
  861. package/src/lib/__tests__/recipes.test.ts +199 -0
  862. package/src/lib/__tests__/scaffold-client.test.ts +106 -0
  863. package/src/lib/__tests__/scaffold.test.ts +64 -0
  864. package/src/lib/__tests__/slugify.test.ts +23 -0
  865. package/src/lib/__tests__/tickets.test.ts +158 -0
  866. package/src/lib/__tests__/type-guards.test.ts +18 -0
  867. package/src/lib/__tests__/use-slugified-id.test.tsx +120 -0
  868. package/src/lib/agents.ts +17 -0
  869. package/src/lib/api-route-helpers.ts +157 -0
  870. package/src/lib/cron.ts +40 -0
  871. package/src/lib/editor-utils.ts +18 -0
  872. package/src/lib/errors.ts +7 -0
  873. package/src/lib/exec.ts +4 -0
  874. package/src/lib/fetch-json.ts +29 -0
  875. package/src/lib/gateway.ts +5 -1
  876. package/src/lib/goal-promote.ts +27 -0
  877. package/src/lib/goals-client.ts +69 -0
  878. package/src/lib/goals.ts +22 -3
  879. package/src/lib/json.ts +10 -0
  880. package/src/lib/openclaw.ts +28 -13
  881. package/src/lib/paths.ts +12 -0
  882. package/src/lib/poll.ts +18 -0
  883. package/src/lib/recipe-clone.ts +42 -0
  884. package/src/lib/recipe-team-agents.ts +30 -0
  885. package/src/lib/recipes.ts +47 -0
  886. package/src/lib/scaffold-client.ts +31 -0
  887. package/src/lib/scaffold.ts +37 -0
  888. package/src/lib/slugify.ts +25 -0
  889. package/src/lib/swarms.ts +25 -0
  890. package/src/lib/tickets.ts +81 -25
  891. package/src/lib/type-guards.ts +3 -0
  892. package/src/lib/use-slugified-id.ts +35 -0
  893. package/src/lib/workflows/README.md +11 -0
  894. package/src/lib/workflows/__tests__/storage.test.ts +129 -0
  895. package/src/lib/workflows/__tests__/validate.test.ts +92 -0
  896. package/src/lib/workflows/api-handlers.ts +35 -0
  897. package/src/lib/workflows/readdir.ts +23 -0
  898. package/src/lib/workflows/runs-storage.ts +59 -0
  899. package/src/lib/workflows/runs-types.ts +42 -0
  900. package/src/lib/workflows/storage.ts +70 -0
  901. package/src/lib/workflows/templates/index.ts +1 -0
  902. package/src/lib/workflows/templates/marketing-cadence-v1.ts +142 -0
  903. package/src/lib/workflows/types.ts +48 -0
  904. package/src/lib/workflows/validate.ts +92 -0
  905. package/.next/server/app/tickets.html +0 -1
  906. package/.next/server/app/tickets.meta +0 -15
  907. package/.next/server/app/tickets.rsc +0 -19
  908. package/.next/server/app/tickets.segments/_full.segment.rsc +0 -19
  909. package/.next/server/app/tickets.segments/_head.segment.rsc +0 -6
  910. package/.next/server/app/tickets.segments/_index.segment.rsc +0 -6
  911. package/.next/server/app/tickets.segments/_tree.segment.rsc +0 -4
  912. package/.next/server/app/tickets.segments/tickets/__PAGE__.segment.rsc +0 -8
  913. package/.next/server/app/tickets.segments/tickets.segment.rsc +0 -4
  914. package/.next/server/chunks/[root-of-the-server]__055885ce._.js +0 -3
  915. package/.next/server/chunks/[root-of-the-server]__055885ce._.js.map +0 -1
  916. package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js +0 -10
  917. package/.next/server/chunks/[root-of-the-server]__0c01c5c7._.js.map +0 -1
  918. package/.next/server/chunks/[root-of-the-server]__1398a33a._.js +0 -3
  919. package/.next/server/chunks/[root-of-the-server]__1398a33a._.js.map +0 -1
  920. package/.next/server/chunks/[root-of-the-server]__159c002b._.js +0 -8
  921. package/.next/server/chunks/[root-of-the-server]__159c002b._.js.map +0 -1
  922. package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js +0 -3
  923. package/.next/server/chunks/[root-of-the-server]__20c60fb7._.js.map +0 -1
  924. package/.next/server/chunks/[root-of-the-server]__2588560d._.js +0 -6
  925. package/.next/server/chunks/[root-of-the-server]__2588560d._.js.map +0 -1
  926. package/.next/server/chunks/[root-of-the-server]__27293e91._.js +0 -3
  927. package/.next/server/chunks/[root-of-the-server]__27293e91._.js.map +0 -1
  928. package/.next/server/chunks/[root-of-the-server]__29c85a51._.js +0 -3
  929. package/.next/server/chunks/[root-of-the-server]__29c85a51._.js.map +0 -1
  930. package/.next/server/chunks/[root-of-the-server]__29fa8108._.js +0 -3
  931. package/.next/server/chunks/[root-of-the-server]__29fa8108._.js.map +0 -1
  932. package/.next/server/chunks/[root-of-the-server]__2bd44067._.js +0 -3
  933. package/.next/server/chunks/[root-of-the-server]__2bd44067._.js.map +0 -1
  934. package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +0 -3
  935. package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js.map +0 -1
  936. package/.next/server/chunks/[root-of-the-server]__401ab759._.js +0 -3
  937. package/.next/server/chunks/[root-of-the-server]__401ab759._.js.map +0 -1
  938. package/.next/server/chunks/[root-of-the-server]__422c7160._.js +0 -3
  939. package/.next/server/chunks/[root-of-the-server]__422c7160._.js.map +0 -1
  940. package/.next/server/chunks/[root-of-the-server]__4670294e._.js +0 -3
  941. package/.next/server/chunks/[root-of-the-server]__4670294e._.js.map +0 -1
  942. package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js +0 -3
  943. package/.next/server/chunks/[root-of-the-server]__4eda99a9._.js.map +0 -1
  944. package/.next/server/chunks/[root-of-the-server]__54478298._.js +0 -8
  945. package/.next/server/chunks/[root-of-the-server]__54478298._.js.map +0 -1
  946. package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js +0 -3
  947. package/.next/server/chunks/[root-of-the-server]__6dbdb384._.js.map +0 -1
  948. package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js +0 -3
  949. package/.next/server/chunks/[root-of-the-server]__94d68aa3._.js.map +0 -1
  950. package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js +0 -3
  951. package/.next/server/chunks/[root-of-the-server]__9ecbb339._.js.map +0 -1
  952. package/.next/server/chunks/[root-of-the-server]__a27f8405._.js +0 -3
  953. package/.next/server/chunks/[root-of-the-server]__a27f8405._.js.map +0 -1
  954. package/.next/server/chunks/[root-of-the-server]__a6ac3ddf._.js +0 -3
  955. package/.next/server/chunks/[root-of-the-server]__b11231a9._.js +0 -3
  956. package/.next/server/chunks/[root-of-the-server]__b11231a9._.js.map +0 -1
  957. package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js +0 -3
  958. package/.next/server/chunks/[root-of-the-server]__b59b3cdd._.js.map +0 -1
  959. package/.next/server/chunks/[root-of-the-server]__b5c2b370._.js +0 -3
  960. package/.next/server/chunks/[root-of-the-server]__b5c2b370._.js.map +0 -1
  961. package/.next/server/chunks/[root-of-the-server]__b955e35a._.js +0 -3
  962. package/.next/server/chunks/[root-of-the-server]__b955e35a._.js.map +0 -1
  963. package/.next/server/chunks/[root-of-the-server]__be5f57b2._.js +0 -3
  964. package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js +0 -3
  965. package/.next/server/chunks/[root-of-the-server]__c4ff0427._.js.map +0 -1
  966. package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js +0 -3
  967. package/.next/server/chunks/[root-of-the-server]__c4ffbb03._.js.map +0 -1
  968. package/.next/server/chunks/[root-of-the-server]__d737ca42._.js +0 -3
  969. package/.next/server/chunks/[root-of-the-server]__d737ca42._.js.map +0 -1
  970. package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js +0 -3
  971. package/.next/server/chunks/[root-of-the-server]__df7df3ac._.js.map +0 -1
  972. package/.next/server/chunks/[root-of-the-server]__dfca6557._.js +0 -3
  973. package/.next/server/chunks/[root-of-the-server]__dfca6557._.js.map +0 -1
  974. package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js +0 -3
  975. package/.next/server/chunks/[root-of-the-server]__e6184ba3._.js.map +0 -1
  976. package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js +0 -8
  977. package/.next/server/chunks/[root-of-the-server]__ed0323e9._.js.map +0 -1
  978. package/.next/server/chunks/[root-of-the-server]__f585823b._.js +0 -6
  979. package/.next/server/chunks/[root-of-the-server]__f585823b._.js.map +0 -1
  980. package/.next/server/chunks/[root-of-the-server]__ff940674._.js +0 -3
  981. package/.next/server/chunks/[root-of-the-server]__ff940674._.js.map +0 -1
  982. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5a9305ea.js +0 -6
  983. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5a9305ea.js.map +0 -1
  984. package/.next/server/chunks/src_lib_d2210cbf._.js +0 -3
  985. package/.next/server/chunks/src_lib_d2210cbf._.js.map +0 -1
  986. package/.next/server/chunks/ssr/[externals]__c37e9f91._.js +0 -3
  987. package/.next/server/chunks/ssr/[root-of-the-server]__15600e29._.js +0 -3
  988. package/.next/server/chunks/ssr/[root-of-the-server]__247198dc._.js +0 -3
  989. package/.next/server/chunks/ssr/[root-of-the-server]__2a6f1e3e._.js +0 -3
  990. package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js +0 -3
  991. package/.next/server/chunks/ssr/[root-of-the-server]__346f79e5._.js.map +0 -1
  992. package/.next/server/chunks/ssr/[root-of-the-server]__3575e6da._.js +0 -3
  993. package/.next/server/chunks/ssr/[root-of-the-server]__3ad3e5b1._.js +0 -3
  994. package/.next/server/chunks/ssr/[root-of-the-server]__3bc7ad0a._.js +0 -3
  995. package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js +0 -3
  996. package/.next/server/chunks/ssr/[root-of-the-server]__4393e897._.js.map +0 -1
  997. package/.next/server/chunks/ssr/[root-of-the-server]__46e08d44._.js +0 -3
  998. package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js +0 -3
  999. package/.next/server/chunks/ssr/[root-of-the-server]__491e06fa._.js.map +0 -1
  1000. package/.next/server/chunks/ssr/[root-of-the-server]__507d2fc9._.js +0 -3
  1001. package/.next/server/chunks/ssr/[root-of-the-server]__507d2fc9._.js.map +0 -1
  1002. package/.next/server/chunks/ssr/[root-of-the-server]__5d24d429._.js +0 -3
  1003. package/.next/server/chunks/ssr/[root-of-the-server]__5d24d429._.js.map +0 -1
  1004. package/.next/server/chunks/ssr/[root-of-the-server]__7180d770._.js.map +0 -1
  1005. package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js +0 -3
  1006. package/.next/server/chunks/ssr/[root-of-the-server]__82ce3aee._.js.map +0 -1
  1007. package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js +0 -3
  1008. package/.next/server/chunks/ssr/[root-of-the-server]__8d24c9c3._.js.map +0 -1
  1009. package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +0 -3
  1010. package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js.map +0 -1
  1011. package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js +0 -3
  1012. package/.next/server/chunks/ssr/[root-of-the-server]__bc3b27b0._.js.map +0 -1
  1013. package/.next/server/chunks/ssr/[root-of-the-server]__f75a61bf._.js +0 -3
  1014. package/.next/server/chunks/ssr/[root-of-the-server]__f75a61bf._.js.map +0 -1
  1015. package/.next/server/chunks/ssr/[root-of-the-server]__fd669584._.js +0 -3
  1016. package/.next/server/chunks/ssr/_0808c2b9._.js.map +0 -1
  1017. package/.next/server/chunks/ssr/_1aad1d9b._.js +0 -24
  1018. package/.next/server/chunks/ssr/_1aad1d9b._.js.map +0 -1
  1019. package/.next/server/chunks/ssr/_3158c108._.js.map +0 -1
  1020. package/.next/server/chunks/ssr/_39e6e769._.js.map +0 -1
  1021. package/.next/server/chunks/ssr/_3c8b2df6._.js.map +0 -1
  1022. package/.next/server/chunks/ssr/_5070929e._.js +0 -3
  1023. package/.next/server/chunks/ssr/_5070929e._.js.map +0 -1
  1024. package/.next/server/chunks/ssr/_68793c1f._.js.map +0 -1
  1025. package/.next/server/chunks/ssr/_6e70b5a4._.js.map +0 -1
  1026. package/.next/server/chunks/ssr/_8c45edba._.js.map +0 -1
  1027. package/.next/server/chunks/ssr/_8c8207c1._.js.map +0 -1
  1028. package/.next/server/chunks/ssr/_92140ca3._.js.map +0 -1
  1029. package/.next/server/chunks/ssr/_b5e9afcc._.js.map +0 -1
  1030. package/.next/server/chunks/ssr/_cd23c5af._.js.map +0 -1
  1031. package/.next/server/chunks/ssr/_d27483a1._.js.map +0 -1
  1032. package/.next/server/chunks/ssr/_da6f800e._.js.map +0 -1
  1033. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +0 -3
  1034. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +0 -1
  1035. package/.next/server/chunks/ssr/node_modules_next_dist_12287b3d._.js.map +0 -1
  1036. package/.next/server/chunks/ssr/node_modules_next_dist_852965c2._.js +0 -3
  1037. package/.next/server/chunks/ssr/node_modules_next_dist_852965c2._.js.map +0 -1
  1038. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +0 -3
  1039. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map +0 -1
  1040. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +0 -3
  1041. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +0 -1
  1042. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_68c68167.js.map +0 -1
  1043. package/.next/server/chunks/ssr/src_app_channels_channels-client_tsx_8c8be116._.js +0 -3
  1044. package/.next/server/chunks/ssr/src_app_channels_channels-client_tsx_8c8be116._.js.map +0 -1
  1045. package/.next/server/chunks/ssr/src_app_goals_[id]_goal-editor_tsx_7df8193f._.js +0 -3
  1046. package/.next/server/chunks/ssr/src_app_goals_[id]_goal-editor_tsx_7df8193f._.js.map +0 -1
  1047. package/.next/server/chunks/ssr/src_app_goals_goals-client_tsx_a45eeff4._.js +0 -3
  1048. package/.next/server/chunks/ssr/src_app_goals_goals-client_tsx_a45eeff4._.js.map +0 -1
  1049. package/.next/server/chunks/ssr/src_app_goals_new_page_tsx_8f749229._.js +0 -3
  1050. package/.next/server/chunks/ssr/src_app_goals_new_page_tsx_8f749229._.js.map +0 -1
  1051. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_tsx_c6d38350._.js +0 -3
  1052. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_tsx_c6d38350._.js.map +0 -1
  1053. package/.next/server/chunks/ssr/src_app_settings_settings-client_tsx_279084f8._.js +0 -3
  1054. package/.next/server/chunks/ssr/src_app_settings_settings-client_tsx_279084f8._.js.map +0 -1
  1055. package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js +0 -12
  1056. package/.next/server/chunks/ssr/src_app_teams_[teamId]_team-editor_tsx_2900b91d._.js.map +0 -1
  1057. package/.next/static/chunks/10cbf02e6fc36465.js +0 -2
  1058. package/.next/static/chunks/1ce21af6dfb18ee3.js +0 -1
  1059. package/.next/static/chunks/40f7fde35327d214.js +0 -1
  1060. package/.next/static/chunks/54beb791bcc086ae.js +0 -1
  1061. package/.next/static/chunks/55866d57aa2c7a9c.js +0 -1
  1062. package/.next/static/chunks/6a7862e37c616cc3.js +0 -1
  1063. package/.next/static/chunks/817ae077ec8c6255.js +0 -1
  1064. package/.next/static/chunks/8484c54dc9a377e8.js +0 -10
  1065. package/.next/static/chunks/8662fcc3cdff66f3.js +0 -1
  1066. package/.next/static/chunks/99208ebf7e47471d.js +0 -1
  1067. package/.next/static/chunks/a4e69b85b74277a7.css +0 -3
  1068. package/.next/static/chunks/a9ed074e89b16a5e.js +0 -1
  1069. package/.next/static/chunks/c6dfa918cafb6c0c.js +0 -1
  1070. package/.next/static/chunks/d1c5f764e5fd615a.js +0 -1
  1071. package/.next/static/chunks/d4ce2f908d8c4dea.js +0 -1
  1072. package/.next/static/chunks/de9e30e86ef31e72.js +0 -1
  1073. package/src/app/recipes/DeleteRecipeModal.tsx +0 -62
  1074. package/src/app/recipes/[id]/RecipeEditor.tsx +0 -697
  1075. package/src/app/teams/[teamId]/DeleteTeamModal.tsx +0 -54
  1076. package/src/app/teams/[teamId]/team-editor.tsx +0 -1195
  1077. /package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js.map → [root-of-the-server]__c63a9f28._.js.map} +0 -0
  1078. /package/.next/server/chunks/{ssr/[externals]__c37e9f91._.js.map → _next-internal_server_app_api_recipes_custom-team_route_actions_861b1489.js.map} +0 -0
  1079. /package/.next/server/chunks/ssr/{[root-of-the-server]__3bc7ad0a._.js.map → [root-of-the-server]__0d4cb2ba._.js.map} +0 -0
  1080. /package/.next/server/chunks/ssr/{[root-of-the-server]__e2e52c6e._.js.map → [root-of-the-server]__78cdd31e._.js.map} +0 -0
  1081. /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_buildManifest.js +0 -0
  1082. /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_clientMiddlewareManifest.json +0 -0
  1083. /package/.next/static/{QOy0ilqTW1kHfmpls_oWp → z9yFlFZ5f_hw9mm0nfMJl}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/recipes/recipes-client.tsx","../../../../src/components/ScaffoldOverlay.tsx","../../../../src/app/recipes/CreateTeamModal.tsx","../../../../src/app/recipes/CreateAgentModal.tsx","../../../../src/app/recipes/DeleteRecipeModal.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useState } from \"react\";\nimport { ScaffoldOverlay, type ScaffoldOverlayStep } from \"@/components/ScaffoldOverlay\";\nimport { useToast } from \"@/components/ToastProvider\";\nimport { CreateTeamModal } from \"./CreateTeamModal\";\nimport { CreateAgentModal } from \"./CreateAgentModal\";\nimport { DeleteRecipeModal } from \"./DeleteRecipeModal\";\n\ntype Recipe = {\n id: string;\n name: string;\n kind: \"agent\" | \"team\";\n source: \"builtin\" | \"workspace\";\n};\n\nfunction RecipesSection({\n title,\n items,\n onDelete,\n onCreateTeam,\n onCreateAgent,\n installedAgentIds,\n}: {\n title: string;\n items: Recipe[];\n onDelete?: (id: string) => void;\n onCreateTeam?: (r: Recipe) => void;\n onCreateAgent?: (r: Recipe) => void;\n installedAgentIds: string[];\n}) {\n return (\n <section>\n <h2 className=\"text-lg font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">{title}</h2>\n\n {items.length === 0 ? (\n <div className=\"mt-3 ck-glass px-4 py-3 text-sm text-[color:var(--ck-text-secondary)]\">None yet.</div>\n ) : (\n <div className=\"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {items.map((r) => {\n const isInstalledAgent = r.kind === \"agent\" && installedAgentIds.includes(r.id);\n const editHref = isInstalledAgent\n ? `/agents/${encodeURIComponent(r.id)}`\n : `/recipes/${encodeURIComponent(r.id)}`;\n const editLabel = isInstalledAgent\n ? \"Edit agent\"\n : r.source === \"builtin\"\n ? \"View recipe\"\n : \"Edit recipe\";\n\n return (\n <div\n key={`${r.source}:${r.id}`}\n className=\"ck-glass flex flex-col gap-3 px-4 py-3\"\n >\n <div>\n <div className=\"font-medium text-[color:var(--ck-text-primary)] whitespace-normal break-words\">\n {r.name}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <span className=\"font-mono\">{r.id}</span> • {r.kind} • {r.source}\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {r.kind === \"team\" && onCreateTeam ? (\n <button\n type=\"button\"\n onClick={() => onCreateTeam(r)}\n 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\"\n >\n Create team\n </button>\n ) : null}\n\n {r.kind === \"agent\" && onCreateAgent ? (\n <button\n type=\"button\"\n onClick={() => onCreateAgent(r)}\n 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\"\n >\n Create agent\n </button>\n ) : null}\n\n <Link\n 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\"\n href={editHref}\n >\n {editLabel}\n </Link>\n\n {onDelete ? (\n <button\n type=\"button\"\n onClick={() => onDelete(r.id)}\n 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\"\n >\n Delete\n </button>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </section>\n );\n}\n\nexport default function RecipesClient({\n builtin,\n customTeamRecipes,\n customAgentRecipes,\n installedAgentIds,\n}: {\n builtin: Recipe[];\n customTeamRecipes: Recipe[];\n customAgentRecipes: Recipe[];\n installedAgentIds: string[];\n}) {\n const toast = useToast();\n\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [overlayStep, setOverlayStep] = useState<ScaffoldOverlayStep>(1);\n const router = useRouter();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [deleteId, setDeleteId] = useState<string>(\"\");\n const [busy, setBusy] = useState(false);\n const [modalError, setModalError] = useState<string | null>(null);\n\n const [createOpen, setCreateOpen] = useState(false);\n const [createRecipe, setCreateRecipe] = useState<Recipe | null>(null);\n const [createTeamId, setCreateTeamId] = useState<string>(\"\");\n const [installCron, setInstallCron] = useState(true);\n const [createBusy, setCreateBusy] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const [createAgentOpen, setCreateAgentOpen] = useState(false);\n const [createAgentRecipe, setCreateAgentRecipe] = useState<Recipe | null>(null);\n const [createAgentId, setCreateAgentId] = useState<string>(\"\");\n const [createAgentName, setCreateAgentName] = useState<string>(\"\");\n const [createAgentBusy, setCreateAgentBusy] = useState(false);\n const [createAgentError, setCreateAgentError] = useState<string | null>(null);\n\n const onDelete = (id: string) => {\n setDeleteId(id);\n setModalError(null);\n setDeleteOpen(true);\n };\n\n const onCreateTeam = (r: Recipe) => {\n setCreateRecipe(r);\n setCreateTeamId(\"\");\n setInstallCron(true);\n setCreateError(null);\n setCreateOpen(true);\n };\n\n const onCreateAgent = (r: Recipe) => {\n setCreateAgentRecipe(r);\n setCreateAgentId(\"\");\n setCreateAgentName(\"\");\n setCreateAgentError(null);\n setCreateAgentOpen(true);\n };\n\n async function confirmDelete() {\n setBusy(true);\n setModalError(null);\n try {\n const res = await fetch(\"/api/recipes/delete\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ id: deleteId }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) {\n const msg = String(json.error || \"Delete failed\");\n if (res.status === 409) {\n setModalError(msg);\n return;\n }\n throw new Error(msg);\n }\n toast.push({ kind: \"success\", message: `Deleted recipe: ${deleteId}` });\n setDeleteOpen(false);\n window.location.reload();\n } catch (e: unknown) {\n toast.push({ kind: \"error\", message: e instanceof Error ? e.message : String(e) });\n } finally {\n setBusy(false);\n }\n }\n\n async function waitForKitchenHealthy(opts?: { timeoutMs?: number }) {\n const timeoutMs = opts?.timeoutMs ?? 30_000;\n const started = Date.now();\n\n while (Date.now() - started < timeoutMs) {\n try {\n const res = await fetch(\"/healthz\", { cache: \"no-store\" });\n if (res.ok) return true;\n } catch {\n // ignore\n }\n await new Promise((r) => setTimeout(r, 500));\n }\n\n return false;\n }\n\n async function waitForTeamPageReady(teamId: string, opts?: { timeoutMs?: number }) {\n const timeoutMs = opts?.timeoutMs ?? 30_000;\n const started = Date.now();\n\n while (Date.now() - started < timeoutMs) {\n try {\n const [recipesRes, metaRes] = await Promise.all([\n fetch(\"/api/recipes\", { cache: \"no-store\" }),\n fetch(`/api/teams/meta?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n ]);\n\n const recipesJson = (await recipesRes.json()) as { recipes?: Array<{ id?: unknown; kind?: unknown }> };\n const list = Array.isArray(recipesJson.recipes) ? recipesJson.recipes : [];\n const hasRecipe = list.some((r) => String(r.id ?? \"\") === teamId && String(r.kind ?? \"\") === \"team\");\n\n const metaJson = (await metaRes.json()) as { ok?: boolean; missing?: boolean };\n const hasMeta = Boolean(metaRes.ok && metaJson.ok && !metaJson.missing);\n\n if (hasRecipe && hasMeta) return true;\n } catch {\n // ignore\n }\n\n await new Promise((r) => setTimeout(r, 500));\n }\n\n return false;\n }\n\n async function confirmCreateTeam() {\n const recipe = createRecipe;\n if (!recipe) return;\n\n const t = createTeamId.trim();\n if (!t) {\n setCreateError(\"Team id is required.\");\n return;\n }\n if (t === recipe.id) {\n setCreateError(`Team id cannot be the same as the recipe id (${recipe.id}). Choose a new team id.`);\n return;\n }\n\n setCreateBusy(true);\n setCreateError(null);\n\n // Hide the modal immediately so the overlay is the only visible UI during scaffold.\n setCreateOpen(false);\n\n setOverlayOpen(true);\n setOverlayStep(1);\n\n let serveTimer: ReturnType<typeof setTimeout> | null = null;\n\n try {\n const res = await fetch(\"/api/scaffold\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n kind: \"team\",\n recipeId: recipe.id,\n teamId: t,\n applyConfig: true,\n overwrite: false,\n cronInstallChoice: installCron ? \"yes\" : \"no\",\n }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(String(json.error || \"Create team failed\"));\n\n setOverlayStep(2);\n\n // If scaffolding takes a while, switch copy to \"Serving...\" so users know we're in the\n // apply/restart phase even if the CLI didn't print the restart hint yet.\n serveTimer = setTimeout(() => {\n setOverlayStep((prev) => (prev < 3 ? 3 : prev));\n }, 20_000);\n\n const stderr = typeof json.stderr === \"string\" ? json.stderr : \"\";\n\n // Some CLI failures currently still surface as { ok: true, stderr: \"...Error: ...\" }.\n // Treat those as hard failures so we don't navigate into a broken team page.\n if (/Failed to start CLI:/i.test(stderr) || /\\bError: /i.test(stderr)) {\n throw new Error(stderr.trim() || \"Scaffold failed\");\n }\n\n // If scaffolding changed config, the gateway may need a restart. During restart, new pages\n // will throw transient errors (RSC/markdown fetches/etc.), so keep the overlay up.\n if (/Restart required:/i.test(stderr)) {\n setOverlayStep(3);\n try {\n await fetch(\"/api/gateway/restart\", { method: \"POST\" });\n } catch {\n // best-effort\n }\n await waitForKitchenHealthy({ timeoutMs: 60_000 });\n }\n\n // Also wait until the new team's recipe+provenance exist before navigating.\n // This avoids the destination page throwing \"raw markdown\" load errors.\n await waitForTeamPageReady(t, { timeoutMs: 60_000 });\n\n if (serveTimer) clearTimeout(serveTimer);\n\n toast.push({ kind: \"success\", message: `Created team: ${t}` });\n setCreateOpen(false);\n\n // Navigate only after restart/readiness to avoid the ugly error+reload UX.\n router.push(`/teams/${encodeURIComponent(t)}`);\n\n // Give the next page a beat to mount before removing the overlay.\n setTimeout(() => setOverlayOpen(false), 500);\n } catch (e: unknown) {\n if (serveTimer) clearTimeout(serveTimer);\n setOverlayOpen(false);\n const msg = e instanceof Error ? e.message : String(e);\n setCreateError(msg);\n toast.push({ kind: \"error\", message: msg });\n } finally {\n setCreateBusy(false);\n }\n }\n\n async function confirmCreateAgent() {\n const recipe = createAgentRecipe;\n if (!recipe) return;\n\n const a = createAgentId.trim();\n if (!a) {\n setCreateAgentError(\"Agent id is required.\");\n return;\n }\n if (a === recipe.id) {\n setCreateAgentError(`Agent id cannot be the same as the recipe id (${recipe.id}). Choose a new agent id.`);\n return;\n }\n\n setCreateAgentBusy(true);\n setCreateAgentError(null);\n\n setCreateAgentOpen(false);\n\n setOverlayOpen(true);\n setOverlayStep(1);\n\n let serveTimer: ReturnType<typeof setTimeout> | null = null;\n\n try {\n const res = await fetch(\"/api/scaffold\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n kind: \"agent\",\n recipeId: recipe.id,\n agentId: a,\n name: createAgentName.trim() || undefined,\n applyConfig: true,\n overwrite: false,\n }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(String(json.error || \"Create agent failed\"));\n\n setOverlayStep(2);\n\n serveTimer = setTimeout(() => {\n setOverlayStep((prev) => (prev < 3 ? 3 : prev));\n }, 20_000);\n\n const stderr = typeof json.stderr === \"string\" ? json.stderr : \"\";\n\n if (/Failed to start CLI:/i.test(stderr) || /\\bError: /i.test(stderr)) {\n throw new Error(stderr.trim() || \"Scaffold failed\");\n }\n\n if (/Restart required:/i.test(stderr)) {\n setOverlayStep(3);\n try {\n await fetch(\"/api/gateway/restart\", { method: \"POST\" });\n } catch {\n // best-effort\n }\n await waitForKitchenHealthy({ timeoutMs: 60_000 });\n }\n\n if (serveTimer) clearTimeout(serveTimer);\n\n toast.push({ kind: \"success\", message: `Created agent: ${a}` });\n setCreateAgentOpen(false);\n\n router.push(`/agents/${encodeURIComponent(a)}`);\n setTimeout(() => setOverlayOpen(false), 500);\n } catch (e: unknown) {\n if (serveTimer) clearTimeout(serveTimer);\n setOverlayOpen(false);\n const msg = e instanceof Error ? e.message : String(e);\n setCreateAgentError(msg);\n toast.push({ kind: \"error\", message: msg });\n } finally {\n setCreateAgentBusy(false);\n }\n }\n\n return (\n <>\n <ScaffoldOverlay\n open={overlayOpen}\n step={overlayStep}\n onDismiss={() => {\n setOverlayOpen(false);\n }}\n />\n <div className=\"mt-8 space-y-10\">\n <section>\n <h2 className=\"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">Custom recipes</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Workspace recipes (editable) — stored under <code className=\"font-mono\">~/.openclaw/workspace/recipes/</code>.\n </p>\n\n <div className=\"mt-4 space-y-8\">\n <RecipesSection\n title={`Teams (${customTeamRecipes.length})`}\n items={customTeamRecipes}\n onDelete={onDelete}\n onCreateTeam={onCreateTeam}\n installedAgentIds={installedAgentIds}\n />\n <RecipesSection\n title={`Agents (${customAgentRecipes.length})`}\n items={customAgentRecipes}\n onDelete={onDelete}\n onCreateAgent={onCreateAgent}\n installedAgentIds={installedAgentIds}\n />\n </div>\n </section>\n\n <section>\n <h2 className=\"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">Builtin recipes</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">Bundled recipes shipped with the plugin.</p>\n\n <div className=\"mt-4\">\n <RecipesSection\n title={`All (${builtin.length})`}\n items={builtin}\n onCreateTeam={onCreateTeam}\n onCreateAgent={onCreateAgent}\n installedAgentIds={installedAgentIds}\n />\n </div>\n </section>\n </div>\n\n <DeleteRecipeModal\n open={deleteOpen}\n recipeId={deleteId}\n busy={busy}\n error={modalError}\n onClose={() => setDeleteOpen(false)}\n onConfirm={confirmDelete}\n />\n\n <CreateTeamModal\n open={createOpen}\n recipeId={createRecipe?.id ?? \"\"}\n recipeName={createRecipe?.name ?? \"\"}\n teamId={createTeamId}\n setTeamId={setCreateTeamId}\n installCron={installCron}\n setInstallCron={setInstallCron}\n busy={createBusy}\n error={createError}\n onClose={() => setCreateOpen(false)}\n onConfirm={confirmCreateTeam}\n />\n\n <CreateAgentModal\n open={createAgentOpen}\n recipeId={createAgentRecipe?.id ?? \"\"}\n recipeName={createAgentRecipe?.name ?? \"\"}\n agentId={createAgentId}\n setAgentId={setCreateAgentId}\n agentName={createAgentName}\n setAgentName={setCreateAgentName}\n existingRecipeIds={[...builtin, ...customTeamRecipes, ...customAgentRecipes].map((r) => r.id)}\n existingAgentIds={installedAgentIds}\n busy={createAgentBusy}\n error={createAgentError}\n onClose={() => setCreateAgentOpen(false)}\n onConfirm={confirmCreateAgent}\n />\n </>\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\n\nexport type ScaffoldOverlayStep = 1 | 2 | 3;\n\nconst stepLabel: Record<ScaffoldOverlayStep, string> = {\n 1: \"Ordering team…\",\n 2: \"Cooking up agents…\",\n 3: \"Serving them up hot…\",\n};\n\nexport function ScaffoldOverlay({\n open,\n step,\n onDismiss,\n}: {\n open: boolean;\n step: ScaffoldOverlayStep;\n onDismiss?: () => void;\n}) {\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[9999]\">\n {/* Slightly transparent full-screen overlay so we hide the app while still showing a hint of context. */}\n <div className=\"fixed inset-0 bg-white/90 dark:bg-black/90 pointer-events-none\" />\n\n {onDismiss ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDismiss();\n }}\n 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)]\"\n aria-label=\"Dismiss loading overlay\"\n title=\"Dismiss\"\n >\n Esc\n </button>\n ) : null}\n\n <div className=\"fixed inset-0 flex items-center justify-center p-6 sm:p-10\">\n <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)]\">\n <div className=\"text-2xl font-semibold text-[color:var(--ck-text-primary)]\">Claw Kitchen</div>\n <div className=\"mt-3 text-base text-[color:var(--ck-text-secondary)]\">Hang tight — we’re updating your OpenClaw install.</div>\n\n <div className=\"mt-8 space-y-4 text-base\">\n {[1, 2, 3].map((n) => {\n const s = n as ScaffoldOverlayStep;\n const active = s === step;\n const done = s < step;\n return (\n <div key={s} className=\"flex items-center gap-4\">\n <div\n className={\n \"h-4 w-4 rounded-full \" +\n (done\n ? \"bg-emerald-400\"\n : active\n ? \"bg-[var(--ck-accent-red)] animate-pulse\"\n : \"bg-white/20\")\n }\n />\n <div className={done ? \"text-[color:var(--ck-text-secondary)] line-through\" : \"text-[color:var(--ck-text-primary)]\"}>\n {stepLabel[s]}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Details removed — avoid noisy/scrolling stderr in the primary UX. */}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nfunction slugifyId(input: string) {\n return String(input ?? \"\")\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/--+/g, \"-\");\n}\n\nexport function CreateTeamModal({\n open,\n recipeId,\n recipeName,\n teamId,\n setTeamId,\n installCron,\n setInstallCron,\n busy,\n error,\n onClose,\n onConfirm,\n}: {\n open: boolean;\n recipeId: string;\n recipeName: string;\n teamId: string;\n setTeamId: (v: string) => void;\n installCron: boolean;\n setInstallCron: (v: boolean) => void;\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n const [teamName, setTeamName] = useState(\"\");\n const [idTouched, setIdTouched] = useState(false);\n\n const derivedId = useMemo(() => slugifyId(teamName), [teamName]);\n const effectiveId = idTouched ? teamId : derivedId;\n\n // Keep parent state in sync so the confirm handler uses the effective id.\n useEffect(() => {\n if (!open) return;\n if (!idTouched) setTeamId(derivedId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [derivedId, open, idTouched]);\n\n // Reset modal-local state when opened.\n useEffect(() => {\n if (!open) return;\n setIdTouched(false);\n setTeamName(\"\");\n setTeamId(\"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[200]\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={onClose} />\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div className=\"w-full max-w-lg rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]\">\n <div className=\"text-lg font-semibold text-[color:var(--ck-text-primary)]\">Create team</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Create a new team from recipe <code className=\"font-mono\">{recipeId}</code>\n {recipeName ? (\n <>\n {\" \"}(<span className=\"font-medium\">{recipeName}</span>)\n </>\n ) : null}\n .\n </p>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team name</label>\n <input\n value={teamName}\n onChange={(e) => setTeamName(e.target.value)}\n placeholder=\"e.g. Crypto Team\"\n 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)]\"\n autoFocus\n />\n </div>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team id</label>\n <input\n value={effectiveId}\n onChange={(e) => {\n setIdTouched(true);\n setTeamId(e.target.value);\n }}\n placeholder=\"e.g. my-team\"\n 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)]\"\n />\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n This will scaffold ~/.openclaw/workspace-&lt;teamId&gt; and add the team to config.\n </div>\n </div>\n\n <label className=\"mt-4 flex items-center gap-2 text-sm text-[color:var(--ck-text-secondary)]\">\n <input type=\"checkbox\" checked={installCron} onChange={(e) => setInstallCron(e.target.checked)} />\n Install cron jobs from this recipe\n </label>\n\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {error}\n </div>\n ) : null}\n\n <div className=\"mt-6 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\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)] hover:bg-white/10\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={busy || !effectiveId.trim()}\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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50\"\n >\n {busy ? \"Creating…\" : \"Create team\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nfunction slugifyId(input: string) {\n return String(input ?? \"\")\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/--+/g, \"-\");\n}\n\ntype Availability =\n | { state: \"empty\" }\n | { state: \"checking\" }\n | { state: \"available\" }\n | { state: \"taken\"; reason?: string };\n\nexport function CreateAgentModal({\n open,\n recipeId,\n recipeName,\n agentId,\n setAgentId,\n agentName,\n setAgentName,\n existingRecipeIds,\n existingAgentIds,\n busy,\n error,\n onClose,\n onConfirm,\n}: {\n open: boolean;\n recipeId: string;\n recipeName: string;\n agentId: string;\n setAgentId: (v: string) => void;\n agentName: string;\n setAgentName: (v: string) => void;\n existingRecipeIds: string[];\n existingAgentIds: string[];\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n const [idTouched, setIdTouched] = useState(false);\n const [availability, setAvailability] = useState<Availability>({ state: \"empty\" });\n\n const derivedId = useMemo(() => slugifyId(agentName), [agentName]);\n const effectiveId = idTouched ? agentId : derivedId;\n\n // Keep parent state in sync so the confirm handler uses the effective id.\n useEffect(() => {\n if (!open) return;\n if (!idTouched) setAgentId(derivedId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [derivedId, open, idTouched]);\n\n // Reset modal-local state when opened.\n useEffect(() => {\n if (!open) return;\n setIdTouched(false);\n setAvailability({ state: \"empty\" });\n setAgentName(\"\");\n setAgentId(\"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // Check id availability.\n // Fast path: local check (recipes list + agent list already in memory).\n // Slow path: server check for any edge cases.\n useEffect(() => {\n if (!open) return;\n const v = String(effectiveId ?? \"\").trim();\n if (!v) {\n setAvailability({ state: \"empty\" });\n return;\n }\n\n // Local rules (instant)\n if (existingRecipeIds.includes(v)) {\n setAvailability({ state: \"taken\", reason: \"recipe-id-collision\" });\n return;\n }\n if (existingAgentIds.includes(v)) {\n setAvailability({ state: \"taken\", reason: \"agent-exists\" });\n return;\n }\n\n setAvailability({ state: \"available\" });\n\n // Server confirm (debounced)\n const t = setTimeout(() => {\n void (async () => {\n setAvailability({ state: \"checking\" });\n try {\n const res = await fetch(`/api/ids/check?kind=agent&id=${encodeURIComponent(v)}`, { cache: \"no-store\" });\n const json = (await res.json()) as { ok?: boolean; available?: boolean; reason?: string };\n if (!res.ok || !json.ok) throw new Error(String((json as { error?: unknown }).error ?? \"Failed to check id\"));\n if (json.available) setAvailability({ state: \"available\" });\n else setAvailability({ state: \"taken\", reason: json.reason });\n } catch {\n setAvailability({ state: \"available\" });\n }\n })();\n }, 250);\n\n return () => clearTimeout(t);\n }, [effectiveId, open, existingRecipeIds, existingAgentIds]);\n\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[200]\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={onClose} />\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div className=\"w-full max-w-lg rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]\">\n <div className=\"text-lg font-semibold text-[color:var(--ck-text-primary)]\">Create agent</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Create a new agent from recipe <code className=\"font-mono\">{recipeId}</code>\n {recipeName ? (\n <>\n {\" \"}(<span className=\"font-medium\">{recipeName}</span>)\n </>\n ) : null}\n .\n </p>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agent name</label>\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n placeholder=\"e.g. Crypto Onchain\"\n 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)]\"\n autoFocus\n />\n </div>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agent id</label>\n <input\n value={effectiveId}\n onChange={(e) => {\n setIdTouched(true);\n setAgentId(e.target.value);\n }}\n placeholder=\"e.g. crypto-onchain\"\n className={\n \"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)] \" +\n (availability.state === \"available\"\n ? \"border-emerald-400/50\"\n : availability.state === \"taken\"\n ? \"border-red-400/60\"\n : \"border-white/10\")\n }\n />\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n {availability.state === \"taken\"\n ? \"That id is already taken.\"\n : availability.state === \"available\"\n ? \"Id is available.\"\n : \"This will scaffold ~/.openclaw/workspace/agents/<agentId> and add the agent to config.\"}\n </div>\n </div>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Name (optional)</label>\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n placeholder=\"e.g. My Agent\"\n 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)]\"\n />\n </div>\n\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {error}\n </div>\n ) : null}\n\n <div className=\"mt-6 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\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)] hover:bg-white/10\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={busy || !effectiveId.trim() || availability.state === \"taken\" || availability.state === \"checking\"}\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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50\"\n >\n {busy ? \"Creating…\" : \"Create agent\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\n\nexport function DeleteRecipeModal({\n open,\n recipeId,\n onClose,\n onConfirm,\n busy,\n error,\n}: {\n open: boolean;\n recipeId: string;\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[200]\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={onClose} />\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <div className=\"w-full max-w-lg rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]\">\n <div className=\"text-lg font-semibold text-[color:var(--ck-text-primary)]\">Delete recipe</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Delete recipe <code className=\"font-mono\">{recipeId}</code>? This removes the markdown file from your workspace.\n </p>\n\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100\">\n {error}\n </div>\n ) : null}\n\n <div className=\"mt-6 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\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)] hover:bg-white/10\"\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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50\"\n >\n {busy ? \"Deleting…\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/app/recipes/recipes-client.tsx","../../../../src/components/ScaffoldOverlay.tsx","../../../../src/lib/poll.ts","../../../../src/lib/use-slugified-id.ts","../../../../src/app/recipes/CreateModalShell.tsx","../../../../src/app/recipes/CreateTeamModal.tsx","../../../../src/app/recipes/CreateCustomTeamModal.tsx","../../../../src/app/recipes/CreateAgentModal.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useState } from \"react\";\nimport { ScaffoldOverlay, type ScaffoldOverlayStep } from \"@/components/ScaffoldOverlay\";\nimport { fetchJsonWithStatus } from \"@/lib/fetch-json\";\nimport { pollUntil } from \"@/lib/poll\";\nimport { fetchScaffold } from \"@/lib/scaffold-client\";\nimport { useToast } from \"@/components/ToastProvider\";\nimport { CreateTeamModal } from \"./CreateTeamModal\";\nimport { CreateCustomTeamModal } from \"./CreateCustomTeamModal\";\nimport { CreateAgentModal } from \"./CreateAgentModal\";\nimport { DeleteRecipeModal } from \"@/components/delete-modals\";\nimport { errorMessage } from \"@/lib/errors\";\n\ntype Recipe = {\n id: string;\n name: string;\n kind: \"agent\" | \"team\";\n source: \"builtin\" | \"workspace\";\n};\n\nfunction getEditLabel(isInstalledAgent: boolean, source: string): string {\n if (isInstalledAgent) return \"Edit agent\";\n if (source === \"builtin\") return \"View recipe\";\n return \"Edit recipe\";\n}\n\nfunction RecipesSection({\n title,\n items,\n onDelete,\n onCreateTeam,\n onCreateAgent,\n installedAgentIds,\n}: {\n title: string;\n items: Recipe[];\n onDelete?: (id: string) => void;\n onCreateTeam?: (r: Recipe) => void;\n onCreateAgent?: (r: Recipe) => void;\n installedAgentIds: string[];\n}) {\n return (\n <section>\n <h2 className=\"text-lg font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">{title}</h2>\n\n {items.length === 0 ? (\n <div className=\"mt-3 ck-glass px-4 py-3 text-sm text-[color:var(--ck-text-secondary)]\">None yet.</div>\n ) : (\n <div className=\"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {items.map((r) => {\n const isInstalledAgent = r.kind === \"agent\" && installedAgentIds.includes(r.id);\n const editHref = isInstalledAgent\n ? `/agents/${encodeURIComponent(r.id)}`\n : `/recipes/${encodeURIComponent(r.id)}`;\n const editLabel = getEditLabel(isInstalledAgent, r.source);\n\n return (\n <div\n key={`${r.source}:${r.id}`}\n className=\"ck-glass flex flex-col gap-3 px-4 py-3\"\n >\n <div>\n <div className=\"font-medium text-[color:var(--ck-text-primary)] whitespace-normal break-words\">\n {r.name}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <span className=\"font-mono\">{r.id}</span> • {r.kind} • {r.source}\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {r.kind === \"team\" && onCreateTeam ? (\n <button\n type=\"button\"\n onClick={() => onCreateTeam(r)}\n 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\"\n >\n Create team\n </button>\n ) : null}\n\n {r.kind === \"agent\" && onCreateAgent ? (\n <button\n type=\"button\"\n onClick={() => onCreateAgent(r)}\n 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\"\n >\n Create agent\n </button>\n ) : null}\n\n <Link\n 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\"\n href={editHref}\n >\n {editLabel}\n </Link>\n\n {onDelete ? (\n <button\n type=\"button\"\n onClick={() => onDelete(r.id)}\n 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\"\n >\n Delete\n </button>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </section>\n );\n}\n\nexport default function RecipesClient({\n builtin,\n customTeamRecipes,\n customAgentRecipes,\n installedAgentIds,\n initialOpenCustomTeam = false,\n}: {\n builtin: Recipe[];\n customTeamRecipes: Recipe[];\n customAgentRecipes: Recipe[];\n installedAgentIds: string[];\n initialOpenCustomTeam?: boolean;\n}) {\n const toast = useToast();\n\n const [overlayOpen, setOverlayOpen] = useState(false);\n const [overlayStep, setOverlayStep] = useState<ScaffoldOverlayStep>(1);\n const router = useRouter();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [deleteId, setDeleteId] = useState<string>(\"\");\n const [busy, setBusy] = useState(false);\n const [modalError, setModalError] = useState<string | null>(null);\n\n const [createOpen, setCreateOpen] = useState(false);\n const [createRecipe, setCreateRecipe] = useState<Recipe | null>(null);\n const [createTeamId, setCreateTeamId] = useState<string>(\"\");\n const [installCron, setInstallCron] = useState(true);\n const [createBusy, setCreateBusy] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const [createAgentOpen, setCreateAgentOpen] = useState(false);\n const [createAgentRecipe, setCreateAgentRecipe] = useState<Recipe | null>(null);\n const [createAgentId, setCreateAgentId] = useState<string>(\"\");\n const [createAgentName, setCreateAgentName] = useState<string>(\"\");\n const [createAgentBusy, setCreateAgentBusy] = useState(false);\n const [createAgentError, setCreateAgentError] = useState<string | null>(null);\n\n const [createCustomTeamOpen, setCreateCustomTeamOpen] = useState(initialOpenCustomTeam);\n const [createCustomTeamId, setCreateCustomTeamId] = useState<string>(\"\");\n const [createCustomTeamBusy, setCreateCustomTeamBusy] = useState(false);\n const [createCustomTeamError, setCreateCustomTeamError] = useState<string | null>(null);\n const [customTeamRoles, setCustomTeamRoles] = useState<Array<{ agentId: string; roleId: string; displayName: string }>>(\n [],\n );\n\n const onDelete = (id: string) => {\n setDeleteId(id);\n setModalError(null);\n setDeleteOpen(true);\n };\n\n const onCreateTeam = (r: Recipe) => {\n setCreateRecipe(r);\n setCreateTeamId(\"\");\n setInstallCron(true);\n setCreateError(null);\n setCreateOpen(true);\n };\n\n const onCreateAgent = (r: Recipe) => {\n setCreateAgentRecipe(r);\n setCreateAgentId(\"\");\n setCreateAgentName(\"\");\n setCreateAgentError(null);\n setCreateAgentOpen(true);\n };\n\n const onCreateCustomTeam = () => {\n setCreateCustomTeamId(\"\");\n setCustomTeamRoles([]);\n setCreateCustomTeamError(null);\n setCreateCustomTeamOpen(true);\n };\n\n async function confirmDelete() {\n setBusy(true);\n setModalError(null);\n try {\n const result = await fetchJsonWithStatus<{ ok?: boolean; error?: string }>(\"/api/recipes/delete\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ id: deleteId }),\n });\n if (!result.ok) {\n if (result.status === 409) {\n setModalError(result.error);\n return;\n }\n throw new Error(result.error);\n }\n if (!result.data.ok) {\n setModalError(result.data.error ?? \"Delete failed\");\n return;\n }\n toast.push({ kind: \"success\", message: `Deleted recipe: ${deleteId}` });\n setDeleteOpen(false);\n window.location.reload();\n } catch (e: unknown) {\n toast.push({ kind: \"error\", message: errorMessage(e) });\n } finally {\n setBusy(false);\n }\n }\n\n async function waitForKitchenHealthy(opts?: { timeoutMs?: number }) {\n const timeoutMs = opts?.timeoutMs ?? 30_000;\n const result = await pollUntil<boolean>(\n async () => {\n try {\n const res = await fetch(\"/healthz\", { cache: \"no-store\" });\n return res.ok ? true : null;\n } catch {\n return null;\n }\n },\n { timeoutMs }\n );\n return result ?? false;\n }\n\n async function waitForTeamPageReady(teamId: string, opts?: { timeoutMs?: number }) {\n const timeoutMs = opts?.timeoutMs ?? 30_000;\n const result = await pollUntil<boolean>(\n async () => {\n try {\n const [recipesRes, metaRes] = await Promise.all([\n fetch(\"/api/recipes\", { cache: \"no-store\" }),\n fetch(`/api/teams/meta?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n ]);\n\n const recipesJson = (await recipesRes.json()) as { recipes?: Array<{ id?: unknown; kind?: unknown }> };\n const list = Array.isArray(recipesJson.recipes) ? recipesJson.recipes : [];\n const hasRecipe = list.some((r) => String(r.id ?? \"\") === teamId && String(r.kind ?? \"\") === \"team\");\n\n const metaJson = (await metaRes.json()) as { ok?: boolean; missing?: boolean };\n const hasMeta = Boolean(metaRes.ok && metaJson.ok && !metaJson.missing);\n\n return hasRecipe && hasMeta ? true : null;\n } catch {\n return null;\n }\n },\n { timeoutMs }\n );\n return result ?? false;\n }\n\n async function attachTeamMeta(teamId: string, recipeId: string, recipeName: string) {\n const res = await fetchJsonWithStatus<{ ok?: boolean; error?: string }>(\"/api/teams/meta\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, recipeId, recipeName }),\n });\n if (!res.ok) throw new Error(res.error);\n if (!res.data.ok) throw new Error(res.data.error || \"Failed to attach team meta\");\n }\n\n function validateTeamIdForCreate(recipe: { id: string } | null, teamId: string): string | null {\n if (!recipe) return null;\n const t = teamId.trim();\n if (!t) return \"Team id is required.\";\n if (!t.endsWith(\"-team\")) return \"Team id must end with -team.\";\n if (t === recipe.id) return `Team id cannot be the same as the recipe id (${recipe.id}). Choose a new team id.`;\n return null;\n }\n\n async function scaffoldWithOverlay(opts: {\n kind: \"team\" | \"agent\";\n recipeId: string;\n teamId?: string;\n agentId?: string;\n name?: string;\n cronInstallChoice?: \"yes\" | \"no\";\n setBusy: (v: boolean) => void;\n setError: (v: string | null) => void;\n setModalOpen: (v: boolean) => void;\n setOverlayOpen: (v: boolean) => void;\n setOverlayStep: React.Dispatch<React.SetStateAction<ScaffoldOverlayStep>>;\n successMessage: string;\n navigateTo: string;\n waitBeforeNavigate?: () => Promise<unknown>;\n }) {\n const {\n kind,\n recipeId,\n teamId,\n agentId,\n name,\n cronInstallChoice,\n setBusy,\n setError,\n setModalOpen,\n setOverlayOpen,\n setOverlayStep,\n successMessage,\n navigateTo,\n waitBeforeNavigate,\n } = opts;\n\n setBusy(true);\n setError(null);\n setModalOpen(false);\n setOverlayOpen(true);\n setOverlayStep(1);\n\n let serveTimer: ReturnType<typeof setTimeout> | null = null;\n\n try {\n const body =\n kind === \"team\"\n ? { kind: \"team\" as const, recipeId, teamId: teamId!, cronInstallChoice }\n : { kind: \"agent\" as const, recipeId, agentId: agentId!, name };\n const { res, json } = await fetchScaffold(body);\n if (!res.ok || !(json as { ok?: boolean }).ok)\n throw new Error(\n String((json as { error?: string }).error || (kind === \"team\" ? \"Create team failed\" : \"Create agent failed\"))\n );\n\n setOverlayStep(2);\n\n serveTimer = setTimeout(() => {\n setOverlayStep((prev) => (prev < 3 ? 3 : prev));\n }, 20_000);\n\n const stderr = typeof (json as { stderr?: unknown }).stderr === \"string\" ? (json as { stderr: string }).stderr : \"\";\n\n if (/Failed to start CLI:/i.test(stderr) || /\\bError: /i.test(stderr)) {\n throw new Error(stderr.trim() || \"Scaffold failed\");\n }\n\n if (/Restart required:/i.test(stderr)) {\n setOverlayStep(3);\n try {\n await fetch(\"/api/gateway/restart\", { method: \"POST\" });\n } catch {\n // best-effort\n }\n await waitForKitchenHealthy({ timeoutMs: 60_000 });\n }\n\n if (waitBeforeNavigate) {\n await waitBeforeNavigate();\n }\n\n if (serveTimer) clearTimeout(serveTimer);\n\n toast.push({ kind: \"success\", message: successMessage });\n setModalOpen(false);\n\n router.push(navigateTo);\n\n setTimeout(() => setOverlayOpen(false), 500);\n } catch (e: unknown) {\n if (serveTimer) clearTimeout(serveTimer);\n setOverlayOpen(false);\n const msg = errorMessage(e);\n setError(msg);\n toast.push({ kind: \"error\", message: msg });\n } finally {\n setBusy(false);\n }\n }\n\n async function confirmCreateTeam() {\n const recipe = createRecipe;\n const err = validateTeamIdForCreate(recipe, createTeamId);\n if (err) {\n setCreateError(err);\n return;\n }\n if (!recipe) return;\n\n const t = createTeamId.trim();\n await scaffoldWithOverlay({\n kind: \"team\",\n recipeId: recipe.id,\n teamId: t,\n cronInstallChoice: installCron ? \"yes\" : \"no\",\n setBusy: setCreateBusy,\n setError: setCreateError,\n setModalOpen: setCreateOpen,\n setOverlayOpen,\n setOverlayStep,\n successMessage: `Created team: ${t}`,\n navigateTo: `/teams/${encodeURIComponent(t)}`,\n waitBeforeNavigate: () => waitForTeamPageReady(t, { timeoutMs: 60_000 }),\n });\n }\n\n async function confirmCreateAgent() {\n const recipe = createAgentRecipe;\n if (!recipe) return;\n\n const a = createAgentId.trim();\n if (!a) {\n setCreateAgentError(\"Agent id is required.\");\n return;\n }\n if (a === recipe.id) {\n setCreateAgentError(`Agent id cannot be the same as the recipe id (${recipe.id}). Choose a new agent id.`);\n return;\n }\n\n await scaffoldWithOverlay({\n kind: \"agent\",\n recipeId: recipe.id,\n agentId: a,\n name: createAgentName.trim() || undefined,\n setBusy: setCreateAgentBusy,\n setError: setCreateAgentError,\n setModalOpen: setCreateAgentOpen,\n setOverlayOpen,\n setOverlayStep,\n successMessage: `Created agent: ${a}`,\n navigateTo: `/agents/${encodeURIComponent(a)}`,\n });\n }\n\n async function confirmCreateCustomTeam() {\n const teamId = createCustomTeamId.trim();\n if (!teamId) {\n setCreateCustomTeamError(\"Team id is required.\");\n return;\n }\n const recipeId = teamId.endsWith(\"-team\") ? teamId.slice(0, -\"-team\".length) : teamId;\n if (!recipeId) {\n setCreateCustomTeamError(\"Team id is invalid.\");\n return;\n }\n if (customTeamRoles.length < 1) {\n setCreateCustomTeamError(\"Select at least one agent.\");\n return;\n }\n\n setCreateCustomTeamError(null);\n\n try {\n setCreateCustomTeamBusy(true);\n const createRes = await fetchJsonWithStatus<{ ok?: boolean; error?: string; recipeId?: string }>(\n \"/api/recipes/custom-team\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n recipeId,\n teamId,\n roles: customTeamRoles.map((r) => ({ roleId: r.roleId, displayName: r.displayName })),\n }),\n },\n );\n setCreateCustomTeamBusy(false);\n\n if (!createRes.ok) {\n throw new Error(createRes.error);\n }\n if (!createRes.data.ok) {\n throw new Error(createRes.data.error || \"Failed to create custom team recipe\");\n }\n\n await scaffoldWithOverlay({\n kind: \"team\",\n recipeId,\n teamId,\n cronInstallChoice: \"no\",\n setBusy: setCreateCustomTeamBusy,\n setError: setCreateCustomTeamError,\n setModalOpen: setCreateCustomTeamOpen,\n setOverlayOpen,\n setOverlayStep,\n successMessage: `Created team: ${teamId}`,\n navigateTo: `/teams/${encodeURIComponent(teamId)}`,\n waitBeforeNavigate: async () => {\n // Some scaffold paths may not persist team.json (meta) immediately.\n // Ensure it exists so the team editor loads reliably.\n await attachTeamMeta(teamId, recipeId, \"Custom Team\");\n await waitForTeamPageReady(teamId, { timeoutMs: 60_000 });\n },\n });\n } catch (e: unknown) {\n setCreateCustomTeamBusy(false);\n const msg = errorMessage(e);\n setCreateCustomTeamError(msg);\n toast.push({ kind: \"error\", message: msg });\n }\n }\n\n return (\n <>\n <ScaffoldOverlay\n open={overlayOpen}\n step={overlayStep}\n onDismiss={() => {\n setOverlayOpen(false);\n }}\n />\n <div className=\"mt-8 space-y-10\">\n <section>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div>\n <h2 className=\"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">Custom recipes</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Workspace recipes (editable) — stored under <code className=\"font-mono\">~/.openclaw/workspace/recipes/</code>.\n </p>\n </div>\n <button\n type=\"button\"\n onClick={onCreateCustomTeam}\n 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\"\n >\n Create custom team\n </button>\n </div>\n\n <div className=\"mt-4 space-y-8\">\n <RecipesSection\n title={`Teams (${customTeamRecipes.length})`}\n items={customTeamRecipes}\n onDelete={onDelete}\n onCreateTeam={onCreateTeam}\n installedAgentIds={installedAgentIds}\n />\n <RecipesSection\n title={`Agents (${customAgentRecipes.length})`}\n items={customAgentRecipes}\n onDelete={onDelete}\n onCreateAgent={onCreateAgent}\n installedAgentIds={installedAgentIds}\n />\n </div>\n </section>\n\n <section>\n <h2 className=\"text-xl font-semibold tracking-tight text-[color:var(--ck-text-primary)]\">Builtin recipes</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">Bundled recipes shipped with the plugin.</p>\n\n <div className=\"mt-4\">\n <RecipesSection\n title={`All (${builtin.length})`}\n items={builtin}\n onCreateTeam={onCreateTeam}\n onCreateAgent={onCreateAgent}\n installedAgentIds={installedAgentIds}\n />\n </div>\n </section>\n </div>\n\n <DeleteRecipeModal\n open={deleteOpen}\n recipeId={deleteId}\n busy={busy}\n error={modalError}\n onClose={() => setDeleteOpen(false)}\n onConfirm={confirmDelete}\n />\n\n <CreateCustomTeamModal\n open={createCustomTeamOpen}\n teamId={createCustomTeamId}\n setTeamId={setCreateCustomTeamId}\n busy={createCustomTeamBusy}\n error={createCustomTeamError}\n onRolesChange={setCustomTeamRoles}\n onClose={() => setCreateCustomTeamOpen(false)}\n onConfirm={confirmCreateCustomTeam}\n />\n\n <CreateTeamModal\n open={createOpen}\n recipeId={createRecipe?.id ?? \"\"}\n recipeName={createRecipe?.name ?? \"\"}\n teamId={createTeamId}\n setTeamId={setCreateTeamId}\n installCron={installCron}\n setInstallCron={setInstallCron}\n busy={createBusy}\n error={createError}\n onClose={() => setCreateOpen(false)}\n onConfirm={confirmCreateTeam}\n />\n\n <CreateAgentModal\n open={createAgentOpen}\n recipeId={createAgentRecipe?.id ?? \"\"}\n recipeName={createAgentRecipe?.name ?? \"\"}\n agentId={createAgentId}\n setAgentId={setCreateAgentId}\n agentName={createAgentName}\n setAgentName={setCreateAgentName}\n existingRecipeIds={[...builtin, ...customTeamRecipes, ...customAgentRecipes].map((r) => r.id)}\n existingAgentIds={installedAgentIds}\n busy={createAgentBusy}\n error={createAgentError}\n onClose={() => setCreateAgentOpen(false)}\n onConfirm={confirmCreateAgent}\n />\n </>\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\n\nexport type ScaffoldOverlayStep = 1 | 2 | 3;\n\nconst stepLabel: Record<ScaffoldOverlayStep, string> = {\n 1: \"Ordering team…\",\n 2: \"Cooking up agents…\",\n 3: \"Serving them up hot…\",\n};\n\nfunction getStepCircleClass(done: boolean, active: boolean): string {\n if (done) return \"bg-emerald-400\";\n if (active) return \"bg-[var(--ck-accent-red)] animate-pulse\";\n return \"bg-white/20\";\n}\n\nexport function ScaffoldOverlay({\n open,\n step,\n onDismiss,\n}: {\n open: boolean;\n step: ScaffoldOverlayStep;\n onDismiss?: () => void;\n}) {\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[9999]\">\n {/* Slightly transparent full-screen overlay so we hide the app while still showing a hint of context. */}\n <div className=\"fixed inset-0 bg-white/90 dark:bg-black/90 pointer-events-none\" />\n\n {onDismiss ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDismiss();\n }}\n 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)]\"\n aria-label=\"Dismiss loading overlay\"\n title=\"Dismiss\"\n >\n Esc\n </button>\n ) : null}\n\n <div className=\"fixed inset-0 flex items-center justify-center p-6 sm:p-10\">\n <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)]\">\n <div className=\"text-2xl font-semibold text-[color:var(--ck-text-primary)]\">Claw Kitchen</div>\n <div className=\"mt-3 text-base text-[color:var(--ck-text-secondary)]\">Hang tight — we’re updating your OpenClaw install.</div>\n\n <div className=\"mt-8 space-y-4 text-base\">\n {[1, 2, 3].map((n) => {\n const s = n as ScaffoldOverlayStep;\n const active = s === step;\n const done = s < step;\n return (\n <div key={s} className=\"flex items-center gap-4\">\n <div className={\"h-4 w-4 rounded-full \" + getStepCircleClass(done, active)} />\n <div className={done ? \"text-[color:var(--ck-text-secondary)] line-through\" : \"text-[color:var(--ck-text-primary)]\"}>\n {stepLabel[s]}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Details removed — avoid noisy/scrolling stderr in the primary UX. */}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","/**\n * Polls until check returns a non-null value or timeout. Returns the value or null on timeout.\n */\nexport async function pollUntil<T>(\n check: () => Promise<T | null>,\n opts: { timeoutMs: number; intervalMs?: number }\n): Promise<T | null> {\n const intervalMs = opts.intervalMs ?? 500;\n const started = Date.now();\n\n while (Date.now() - started < opts.timeoutMs) {\n const result = await check();\n if (result !== null) return result;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n\n return null;\n}\n","\"use client\";\n\nimport { useEffect, useMemo } from \"react\";\nimport { slugifyId } from \"@/lib/slugify\";\n\n/** Manages name -> slugified id with touch tracking. Resets on modal close. */\nexport function useSlugifiedId(opts: {\n open: boolean;\n name: string;\n setName: (v: string) => void;\n id: string;\n setId: (v: string) => void;\n idTouched: boolean;\n setIdTouched: (v: boolean) => void;\n slugify?: (s: string, maxLen?: number) => string;\n}): { derivedId: string; effectiveId: string } {\n const { open, name, setName, id, setId, idTouched, setIdTouched, slugify = slugifyId } = opts;\n\n const derivedId = useMemo(() => slugify(name), [name, slugify]);\n const effectiveId = idTouched ? id : derivedId;\n\n useEffect(() => {\n if (!open) return;\n if (!idTouched) setId(derivedId);\n }, [derivedId, open, idTouched, setId]);\n\n useEffect(() => {\n if (open) return;\n setIdTouched(false);\n setName(\"\");\n setId(\"\");\n }, [open, setIdTouched, setName, setId]);\n\n return { derivedId, effectiveId };\n}\n","\"use client\";\n\nimport { ConfirmationModal } from \"@/components/ConfirmationModal\";\n\nexport function CreateModalShell({\n open,\n title,\n recipeId,\n recipeName,\n children,\n error,\n busy,\n canConfirm,\n onClose,\n onConfirm,\n confirmLabel,\n}: {\n open: boolean;\n title: string;\n recipeId: string;\n recipeName: string;\n children: React.ReactNode;\n error?: string | null;\n busy?: boolean;\n canConfirm: boolean;\n onClose: () => void;\n onConfirm: () => void;\n confirmLabel: string;\n}) {\n return (\n <ConfirmationModal\n open={open}\n onClose={onClose}\n title={title}\n error={error}\n confirmLabel={confirmLabel}\n confirmBusyLabel=\"Creating…\"\n confirmDisabled={!canConfirm}\n busy={busy}\n onConfirm={onConfirm}\n >\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Create a new {title.toLowerCase().replace(\"create \", \"\")} from recipe{\" \"}\n <code className=\"font-mono\">{recipeId}</code>\n {recipeName ? (\n <>\n {\" \"}(<span className=\"font-medium\">{recipeName}</span>)\n </>\n ) : null}\n .\n </p>\n {children}\n </ConfirmationModal>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useSlugifiedId } from \"@/lib/use-slugified-id\";\nimport { CreateModalShell } from \"./CreateModalShell\";\n\nexport function CreateTeamModal({\n open,\n recipeId,\n recipeName,\n teamId,\n setTeamId,\n installCron,\n setInstallCron,\n busy,\n error,\n onClose,\n onConfirm,\n}: {\n open: boolean;\n recipeId: string;\n recipeName: string;\n teamId: string;\n setTeamId: (v: string) => void;\n installCron: boolean;\n setInstallCron: (v: boolean) => void;\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n const [teamName, setTeamName] = useState(\"\");\n const [idTouched, setIdTouched] = useState(false);\n\n const { effectiveId } = useSlugifiedId({\n open,\n name: teamName,\n setName: setTeamName,\n id: teamId,\n setId: setTeamId,\n idTouched,\n setIdTouched,\n });\n\n return (\n <CreateModalShell\n open={open}\n title=\"Create team\"\n recipeId={recipeId}\n recipeName={recipeName}\n error={error}\n busy={busy}\n canConfirm={!!effectiveId.trim()}\n onClose={onClose}\n onConfirm={onConfirm}\n confirmLabel=\"Create team\"\n >\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team name</label>\n <input\n value={teamName}\n onChange={(e) => setTeamName(e.target.value)}\n placeholder=\"e.g. Crypto Team\"\n 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)]\"\n autoFocus\n />\n </div>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team id</label>\n <input\n value={effectiveId}\n onChange={(e) => {\n setIdTouched(true);\n setTeamId(e.target.value);\n }}\n placeholder=\"e.g. my-team\"\n 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)]\"\n />\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n This will scaffold ~/.openclaw/workspace-&lt;teamId&gt; and add the team to config.\n </div>\n </div>\n\n <label className=\"mt-4 flex items-center gap-2 text-sm text-[color:var(--ck-text-secondary)]\">\n <input type=\"checkbox\" checked={installCron} onChange={(e) => setInstallCron(e.target.checked)} />\n Install cron jobs from this recipe\n </label>\n </CreateModalShell>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { CreateModalShell } from \"./CreateModalShell\";\nimport { fetchJsonWithStatus } from \"@/lib/fetch-json\";\nimport type { AgentListItem } from \"@/lib/agents\";\n\ntype SelectedRole = { agentId: string; roleId: string; displayName: string };\n\nfunction defaultRoleIdFromAgentId(agentId: string) {\n // Strip any existing team prefix if present; keep it sluggy.\n const id = agentId.split(\"/\").pop() || agentId;\n const last = id.split(\"-\").slice(-1)[0] || id;\n return last.toLowerCase().replace(/[^a-z0-9_-]+/g, \"-\");\n}\n\nfunction normalizeTeamIdInput(v: string) {\n // UX: when the user types spaces, turn them into dashes (live).\n // Also keep it lowercase to match id rules.\n return v.toLowerCase().replace(/\\s+/g, \"-\");\n}\n\nfunction isValidId(id: string) {\n return /^[a-z0-9][a-z0-9_-]{1,62}$/.test(id);\n}\n\nfunction isValidTeamId(id: string) {\n // OpenClaw scaffold-team constraint.\n return isValidId(id) && id.endsWith(\"-team\");\n}\n\nexport function CreateCustomTeamModal({\n open,\n teamId,\n setTeamId,\n busy,\n error,\n onClose,\n onConfirm,\n onRolesChange,\n}: {\n open: boolean;\n teamId: string;\n setTeamId: (v: string) => void;\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n onRolesChange: (roles: SelectedRole[]) => void;\n}) {\n const [agents, setAgents] = useState<AgentListItem[]>([]);\n const [agentsError, setAgentsError] = useState<string | null>(null);\n const [selected, setSelected] = useState<Record<string, SelectedRole>>({});\n\n const [previewMd, setPreviewMd] = useState<string | null>(null);\n const [previewPath, setPreviewPath] = useState<string | null>(null);\n const [previewError, setPreviewError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n const res = await fetchJsonWithStatus<{ agents?: AgentListItem[]; error?: string; message?: string }>(\n \"/api/agents\",\n { cache: \"no-store\" },\n );\n if (cancelled) return;\n if (!res.ok) {\n setAgentsError(res.error);\n return;\n }\n const list = Array.isArray(res.data.agents) ? res.data.agents : [];\n setAgents(list);\n })();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n const [availability, setAvailability] = useState<\n | { state: \"unknown\" }\n | { state: \"checking\" }\n | { state: \"available\" }\n | { state: \"taken\"; reason?: string }\n >({ state: \"unknown\" });\n\n const agentChoices = useMemo(() => {\n return agents\n .slice()\n .sort((a, b) => String(a.id ?? \"\").localeCompare(String(b.id ?? \"\")))\n .map((a) => ({\n id: String(a.id ?? \"\"),\n label: a.identityName ? `${a.identityName} (${a.id})` : String(a.id ?? \"\"),\n }))\n .filter((a) => a.id);\n }, [agents]);\n\n const roles = useMemo(() => Object.values(selected), [selected]);\n\n const teamIdTrimmed = teamId.trim();\n const teamIdError = useMemo(() => {\n if (!open) return null;\n if (!teamIdTrimmed) return \"Team id is required.\";\n if (!isValidId(teamIdTrimmed)) {\n return \"Invalid team id. Use lowercase letters/numbers with - or _ (2-63 chars).\";\n }\n if (!teamIdTrimmed.endsWith(\"-team\")) {\n return \"Team id must end with -team.\";\n }\n if (availability.state === \"taken\") {\n return `Team id is already taken: ${teamIdTrimmed}`;\n }\n return null;\n }, [open, teamIdTrimmed, availability.state]);\n\n const roleErrors = useMemo(() => {\n const errors = new Map<string, string>();\n for (const r of roles) {\n const roleId = String(r.roleId ?? \"\").trim();\n if (!roleId) {\n errors.set(r.agentId, \"Role id is required.\");\n continue;\n }\n if (!isValidId(roleId)) {\n errors.set(r.agentId, \"Invalid role id (lowercase letters/numbers with - or _).\" );\n }\n }\n return errors;\n }, [roles]);\n\n const canConfirm =\n !teamIdError &&\n availability.state !== \"checking\" &&\n availability.state !== \"unknown\" &&\n roles.length > 0 &&\n roleErrors.size === 0;\n\n useEffect(() => {\n if (!open) return;\n onRolesChange(roles);\n }, [open, roles, onRolesChange]);\n\n // Team id availability check (debounced).\n useEffect(() => {\n if (!open) return;\n\n let cancelled = false;\n const t = setTimeout(async () => {\n if (!teamIdTrimmed || !isValidTeamId(teamIdTrimmed)) {\n setAvailability({ state: \"unknown\" });\n return;\n }\n\n setAvailability({ state: \"checking\" });\n\n const res = await fetchJsonWithStatus<{ ok?: boolean; available?: boolean; reason?: string; error?: string }>(\n `/api/ids/check?kind=team&id=${encodeURIComponent(teamIdTrimmed)}`,\n { cache: \"no-store\" },\n );\n\n if (cancelled) return;\n\n if (!res.ok) {\n setAvailability({ state: \"unknown\" });\n return;\n }\n\n if (res.data.ok && res.data.available === true) {\n setAvailability({ state: \"available\" });\n return;\n }\n\n setAvailability({ state: \"taken\", reason: res.data.reason });\n }, 250);\n\n return () => {\n cancelled = true;\n clearTimeout(t);\n };\n }, [open, teamIdTrimmed]);\n\n // Best-effort preview (debounced).\n useEffect(() => {\n if (!open) return;\n if (!canConfirm) return;\n\n let cancelled = false;\n const t = setTimeout(async () => {\n const baseRecipeId = teamIdTrimmed.endsWith(\"-team\") ? teamIdTrimmed.slice(0, -\"-team\".length) : teamIdTrimmed;\n\n const res = await fetchJsonWithStatus<{\n ok?: boolean;\n error?: string;\n md?: string;\n filePath?: string;\n }>(\"/api/recipes/custom-team\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n dryRun: true,\n recipeId: baseRecipeId,\n teamId: teamIdTrimmed,\n roles: roles.map((r) => ({ roleId: r.roleId, displayName: r.displayName })),\n }),\n });\n\n if (cancelled) return;\n\n if (!res.ok) {\n setPreviewError(res.error);\n setPreviewMd(null);\n setPreviewPath(null);\n return;\n }\n if (!res.data.ok) {\n setPreviewError(res.data.error || \"Failed to generate preview\");\n setPreviewMd(null);\n setPreviewPath(null);\n return;\n }\n\n setPreviewError(null);\n setPreviewMd(typeof res.data.md === \"string\" ? res.data.md : null);\n setPreviewPath(typeof res.data.filePath === \"string\" ? res.data.filePath : null);\n }, 250);\n\n return () => {\n cancelled = true;\n clearTimeout(t);\n };\n }, [open, canConfirm, teamIdTrimmed, roles]);\n\n return (\n <CreateModalShell\n open={open}\n title=\"Create custom team\"\n recipeId={\"(new recipe)\"}\n recipeName={\"Custom Team\"}\n error={error || agentsError}\n busy={busy}\n canConfirm={canConfirm}\n onClose={onClose}\n onConfirm={onConfirm}\n confirmLabel=\"Create team\"\n >\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team id</label>\n <input\n value={teamId}\n onChange={(e) => setTeamId(normalizeTeamIdInput(e.target.value))}\n placeholder=\"e.g. my-team\"\n 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)]\"\n autoFocus\n />\n {teamIdError ? <div className=\"mt-2 text-xs text-red-300\">{teamIdError}</div> : null}\n {!teamIdError && teamIdTrimmed ? (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n {availability.state === \"checking\" ? \"Checking availability…\" : null}\n {availability.state === \"available\" ? \"Available.\" : null}\n </div>\n ) : null}\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n This creates a new team recipe under <code>~/.openclaw/workspace/recipes</code> and scaffolds\n <code className=\"ml-1\">~/.openclaw/workspace-&lt;teamId&gt;</code>.\n </div>\n </div>\n\n <div className=\"mt-6\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Select agents</div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n MVP: this creates new team roles that mirror the selected agents&apos; names. You can edit the\n resulting team recipe later.\n </div>\n\n <div className=\"mt-3 max-h-[220px] overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 p-3\">\n {agentChoices.length === 0 ? (\n <div className=\"text-sm text-[color:var(--ck-text-secondary)]\">No installed agents found.</div>\n ) : (\n <div className=\"space-y-2\">\n {agentChoices.map((a) => {\n const checked = !!selected[a.id];\n return (\n <label key={a.id} className=\"flex items-start gap-2 text-sm text-[color:var(--ck-text-secondary)]\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => {\n const next = { ...selected };\n if (e.target.checked) {\n next[a.id] = {\n agentId: a.id,\n roleId: defaultRoleIdFromAgentId(a.id),\n displayName: a.label,\n };\n } else {\n delete next[a.id];\n }\n setSelected(next);\n }}\n />\n <span className=\"min-w-0 break-words\">{a.label}</span>\n </label>\n );\n })}\n </div>\n )}\n </div>\n </div>\n\n {roles.length ? (\n <div className=\"mt-6\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Role mapping</div>\n <div className=\"mt-3 space-y-3\">\n {roles.map((r) => {\n const roleErr = roleErrors.get(r.agentId);\n return (\n <div key={r.agentId} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 p-3\">\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">{r.agentId}</div>\n\n <div className=\"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Role id</label>\n <input\n value={r.roleId}\n onChange={(e) => {\n setSelected((prev) => ({\n ...prev,\n [r.agentId]: { ...prev[r.agentId], roleId: e.target.value },\n }));\n }}\n 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)]\"\n />\n {roleErr ? <div className=\"mt-1 text-xs text-red-300\">{roleErr}</div> : null}\n </div>\n\n <div>\n <label className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Display name</label>\n <input\n value={r.displayName}\n onChange={(e) => {\n setSelected((prev) => ({\n ...prev,\n [r.agentId]: { ...prev[r.agentId], displayName: e.target.value },\n }));\n }}\n 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)]\"\n />\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ) : null}\n\n <div className=\"mt-6\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Preview</div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Generated recipe preview (best-effort). This is what will be written to\n <code className=\"ml-1\">~/.openclaw/workspace/recipes/&lt;teamId&gt;.md</code>.\n </div>\n {canConfirm && previewError ? <div className=\"mt-2 text-xs text-red-300\">{previewError}</div> : null}\n {canConfirm && previewPath ? (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Target path: <code>{previewPath}</code>\n </div>\n ) : null}\n <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)]\">\n {canConfirm ? previewMd || \"(Loading preview…)\" : \"(Select a valid team id and at least one agent to preview.)\"}\n </pre>\n </div>\n </CreateModalShell>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { useSlugifiedId } from \"@/lib/use-slugified-id\";\nimport { CreateModalShell } from \"./CreateModalShell\";\n\nfunction getAvailabilityBorderClass(state: string): string {\n if (state === \"available\") return \"border-emerald-400/50\";\n if (state === \"taken\") return \"border-red-400/60\";\n return \"border-white/10\";\n}\n\nfunction getAvailabilityHint(state: string): string {\n if (state === \"taken\") return \"That id is already taken.\";\n if (state === \"available\") return \"Id is available.\";\n return \"This will scaffold ~/.openclaw/workspace/agents/<agentId> and add the agent to config.\";\n}\n\ntype Availability =\n | { state: \"empty\" }\n | { state: \"checking\" }\n | { state: \"available\" }\n | { state: \"taken\"; reason?: string };\n\n/** Sync availability from local arrays (no fetch). Returns null when API check needed. */\nfunction syncAvailability(\n v: string,\n existingRecipeIds: string[],\n existingAgentIds: string[]\n): Availability | null {\n if (!v) return { state: \"empty\" };\n if (existingRecipeIds.includes(v)) return { state: \"taken\", reason: \"recipe-id-collision\" };\n if (existingAgentIds.includes(v)) return { state: \"taken\", reason: \"agent-exists\" };\n return null;\n}\n\nexport function CreateAgentModal({\n open,\n recipeId,\n recipeName,\n agentId,\n setAgentId,\n agentName,\n setAgentName,\n existingRecipeIds,\n existingAgentIds,\n busy,\n error,\n onClose,\n onConfirm,\n}: {\n open: boolean;\n recipeId: string;\n recipeName: string;\n agentId: string;\n setAgentId: (v: string) => void;\n agentName: string;\n setAgentName: (v: string) => void;\n existingRecipeIds: string[];\n existingAgentIds: string[];\n busy?: boolean;\n error?: string | null;\n onClose: () => void;\n onConfirm: () => void;\n}) {\n const [idTouched, setIdTouched] = useState(false);\n const [apiAvailability, setApiAvailability] = useState<Availability | null>(null);\n\n const { effectiveId } = useSlugifiedId({\n open,\n name: agentName,\n setName: setAgentName,\n id: agentId,\n setId: setAgentId,\n idTouched,\n setIdTouched,\n });\n\n const v = String(effectiveId ?? \"\").trim();\n const syncAvail = useMemo(\n () => (open ? syncAvailability(v, existingRecipeIds, existingAgentIds) : { state: \"empty\" as const }),\n [open, v, existingRecipeIds, existingAgentIds]\n );\n\n const availability: Availability = syncAvail ?? apiAvailability ?? { state: \"available\" };\n\n useEffect(() => {\n if (!open || syncAvail !== null) return;\n const t = setTimeout(() => {\n void (async () => {\n setApiAvailability({ state: \"checking\" });\n try {\n const json = await fetchJson<{ ok?: boolean; available?: boolean; reason?: string }>(\n `/api/ids/check?kind=agent&id=${encodeURIComponent(v)}`,\n { cache: \"no-store\" }\n );\n if (json.available) setApiAvailability({ state: \"available\" });\n else setApiAvailability({ state: \"taken\", reason: json.reason });\n } catch {\n setApiAvailability({ state: \"available\" });\n }\n })();\n }, 250);\n return () => clearTimeout(t);\n }, [open, syncAvail, v]);\n\n return (\n <CreateModalShell\n open={open}\n title=\"Create agent\"\n recipeId={recipeId}\n recipeName={recipeName}\n error={error}\n busy={busy}\n canConfirm={\n !!effectiveId.trim() &&\n availability.state !== \"taken\" &&\n availability.state !== \"checking\"\n }\n onClose={onClose}\n onConfirm={onConfirm}\n confirmLabel=\"Create agent\"\n >\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agent name</label>\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n placeholder=\"e.g. Crypto Onchain\"\n 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)]\"\n autoFocus\n />\n </div>\n\n <div className=\"mt-4\">\n <label className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agent id</label>\n <input\n value={effectiveId}\n onChange={(e) => {\n setIdTouched(true);\n setAgentId(e.target.value);\n }}\n placeholder=\"e.g. crypto-onchain\"\n className={\n \"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)] \" +\n getAvailabilityBorderClass(availability.state)\n }\n />\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n {getAvailabilityHint(availability.state)}\n </div>\n </div>\n </CreateModalShell>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ module.exports=[67004,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(1760),e=a.i(50944),f=a.i(88764),g=a.i(66063);function h({open:a,teamId:c,recipeId:d,onClose:e,onConfirm:f,busy:h}){return(0,b.jsxs)(g.ConfirmationModal,{open:a,onClose:e,title:"Publish changes",confirmLabel:"Publish changes",confirmBusyLabel:"Publishing…",busy:h,onConfirm:f,confirmButtonClassName:"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] hover:bg-emerald-500 disabled:opacity-50",children:[(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["This will re-scaffold team ",(0,b.jsx)("code",{className:"font-mono",children:c})," from recipe ",(0,b.jsx)("code",{className:"font-mono",children:d}),"."]}),(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-amber-400/30 bg-amber-500/10 p-3 text-sm text-amber-100",children:[(0,b.jsx)("div",{className:"font-medium",children:"Complete overwrite"}),(0,b.jsxs)("div",{className:"mt-1",children:["All existing team workspace files managed by the recipe will be overwritten (for example: ",(0,b.jsx)("code",{className:"font-mono",children:"AGENTS.md"}),","," ",(0,b.jsx)("code",{className:"font-mono",children:"SOUL.md"}),", role templates, and other scaffolded files). Any manual edits in those files will be lost."]})]})]})}var i=a.i(61889),j=a.i(74621),k=a.i(51200);function l(a,b){try{return JSON.parse(a)}catch{return b}}async function m(a){let[b,c]=await Promise.all([(0,k.fetchJson)("/api/recipes",{cache:"no-store"}),fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"})]);return{recipesData:b,metaRes:c}}async function n(a){let b=await (0,k.fetchAll)([`/api/teams/files?teamId=${encodeURIComponent(a)}`,`/api/cron/jobs?teamId=${encodeURIComponent(a)}`,"/api/agents",`/api/teams/skills?teamId=${encodeURIComponent(a)}`,"/api/skills/available"]),c=await Promise.all(b.map(a=>a.text()));return{responses:b,texts:c}}async function o(a,b){b.setTeamFilesLoading(!0),b.setCronLoading(!0),b.setTeamAgentsLoading(!0),b.setSkillsLoading(!0);try{let{responses:c,texts:d}=await n(a),[e,f,g,h,i]=c,[j,k,m,o,p]=d,q=l(j,{});e.ok&&q.ok&&Array.isArray(q.files)&&b.setTeamFiles(q.files.map(a=>({name:String(a.name??""),missing:!!a.missing,required:!!a.required,rationale:"string"==typeof a.rationale?a.rationale:void 0})));let r=l(k,{});f.ok&&r.ok&&Array.isArray(r.jobs)&&b.setCronJobs(r.jobs);let s=l(m,{});if(g.ok&&Array.isArray(s.agents)){let c=s.agents.filter(b=>String(b.id??"").startsWith(`${a}-`));b.setTeamAgents(c.map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0})))}let t=l(o,{});h.ok&&t.ok&&Array.isArray(t.skills)&&b.setSkillsList(t.skills);let u=l(p,{});if(i.ok&&u.ok&&Array.isArray(u.skills)){let a=u.skills;b.setAvailableSkills(a),b.setSelectedSkill(b=>{let c=String(b??"").trim();return c&&a.includes(c)?c:a[0]??""})}}finally{b.setTeamFilesLoading(!1),b.setCronLoading(!1),b.setTeamAgentsLoading(!1),b.setSkillsLoading(!1)}}async function p(a,b){let c=await m(a);b.setRecipes(c.recipesData.recipes??[]);let d=null;try{let a=await c.metaRes.json(),e=a.meta;c.metaRes.ok&&a.ok&&e?.recipeId?(d={recipeId:String(e.recipeId),recipeName:"string"==typeof e.recipeName?e.recipeName:void 0},b.setTeamMetaRecipeHash("string"==typeof e.recipeHash?e.recipeHash:null)):b.setTeamMetaRecipeHash(null)}catch{b.setTeamMetaRecipeHash(null)}if(d)b.setLockedFromId(d.recipeId),b.setLockedFromName(d.recipeName??null),b.setProvenanceMissing(!1),b.setFromId(d.recipeId);else{b.setLockedFromId(null),b.setLockedFromName(null),b.setProvenanceMissing(!0);let d=c.recipesData.recipes??[],e=d.find(b=>"team"===b.kind&&b.id===a),f=d.find(a=>"team"===a.kind),g=e??f;g&&b.setFromId(g.id)}await o(a,{setTeamFiles:b.setTeamFiles,setCronJobs:b.setCronJobs,setTeamAgents:b.setTeamAgents,setSkillsList:b.setSkillsList,setAvailableSkills:b.setAvailableSkills,setSelectedSkill:b.setSelectedSkill,setTeamFilesLoading:b.setTeamFilesLoading,setCronLoading:b.setCronLoading,setTeamAgentsLoading:b.setTeamAgentsLoading,setSkillsLoading:b.setSkillsLoading})}async function q(a){try{let b=await (0,k.fetchJson)("/api/agents",{cache:"no-store"}),c=(Array.isArray(b.agents)?b.agents:[]).filter(b=>String(b.id??"").startsWith(`${a}-`)).map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0}));return{ok:!0,agents:c}}catch{return{ok:!1,agents:[]}}}async function r(a,b,c){try{await (0,k.fetchJson)("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:b.trim(),teamId:a,applyConfig:!0,overwrite:!1,allowExisting:!0,cronInstallChoice:"no"})})}catch(a){c((0,j.errorMessage)(a),"error")}}async function s(a,b,c,d){let e=Date.now();for(;Date.now()-e<d;){try{let d=await q(a);if(d.ok){c(d.agents);let a=!!b&&d.agents.some(a=>a.id===b);if(!b||a)return!0}}catch{}await new Promise(a=>setTimeout(a,500))}return!1}async function t(a){let{teamId:b,toId:c,newRole:d,derivedRole:e,newRoleName:f,content:g,setContent:h,setTeamAgents:i,flashMessage:l,ensureCustomRecipeExists:m}=a;try{await m({overwrite:!1})}catch(b){let a=(0,j.errorMessage)(b);if(!/Recipe id already exists:/i.test(a))throw b}let n=await (0,k.fetchJson)("/api/recipes/team-agents",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify("__custom__"===d?{recipeId:c.trim(),op:"add",role:e,name:f}:{recipeId:c.trim(),op:"addLike",baseRole:e,teamId:b,name:f})});if(!n.ok)throw Error("Failed updating agents list");h(String(n.content??g)),await r(b,c,l);let o="string"==typeof n.addedAgentId?n.addedAgentId:"";if(!await s(b,o,i,5e3)&&o){try{fetch("/api/gateway/restart",{method:"POST"})}catch{}await s(b,o,i,1e4)}l(`Updated agents list in ${c}`,"success")}function u(a){return(0,b.jsxs)(b.Fragment,{children:[(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.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Custom recipe target"}),a.loading?(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Loading team…"}):null]}),(0,b.jsx)("label",{className:"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team id"}),(0,b.jsx)("input",{value:a.toId,onChange:b=>a.setToId(b.target.value),disabled:!a.canEditTargetId,className:"mt-1 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:opacity-70"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"This is the custom recipe id that will be created when you save."}),(0,b.jsx)("label",{className:"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Team name"}),(0,b.jsx)("input",{value:a.toName,onChange:b=>a.setToName(b.target.value),className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2",children:[(0,b.jsx)("button",{type:"button",disabled:a.saving||!a.teamIdValid||!a.targetIdValid||a.targetIsBuiltin,onClick:()=>a.onSaveCustom(!0),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)] disabled:opacity-50",children:a.saving?"Saving":"Save"}),(0,b.jsx)("button",{type:"button",disabled:a.saving||!a.teamIdValid||!a.targetIdValid||a.targetIsBuiltin||!a.loadedRecipeHash||!a.teamMetaRecipeHash||a.loadedRecipeHash===a.teamMetaRecipeHash,onClick:a.onPublishOpen,className:"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] disabled:opacity-50",children:a.publishing?"Publishing":"Publish changes"}),(0,b.jsx)("button",{type:"button",disabled:a.saving,onClick:a.onDeleteOpen,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)] disabled:opacity-50",children:"Delete Team"})]})]}),(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:"Notes"}),(0,b.jsxs)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Parent recipe (locked)"}),(0,b.jsx)("select",{disabled:!0,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:opacity-70",value:a.fromId,onChange:b=>a.setFromId(b.target.value),children:a.teamRecipes.map(a=>(0,b.jsxs)("option",{value:a.id,children:[a.id," (",a.source,")"]},`${a.source}:${a.id}`))}),a.lockedFromId&&(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("code",{children:a.lockedFromId}),a.lockedFromName?` (${a.lockedFromName})`:""]}),!a.lockedFromId&&a.provenanceMissing&&(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"Provenance not found for this team."})]}),(0,b.jsxs)("ul",{className:"mt-4 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("li",{children:"Save writes the custom recipe file identified by Team id."}),(0,b.jsx)("li",{children:"Publish changes re-scaffolds this team from your custom recipe."}),(0,b.jsx)("li",{children:"Delete Team runs openclaw recipes remove-team."})]})]})]}),(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recipe markdown"}),a.recipeLoadError?(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:a.recipeLoadError}):null,(0,b.jsx)("textarea",{value:a.content,onChange:b=>{a.setContent(b.target.value),a.setLoadedRecipeHash(null)},className:"mt-2 h-[55vh] 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)]",spellCheck:!1})]})]})}function v(a){let{teamId:c,toId:d,recipeAgents:e,newRole:f,setNewRole:g,customRole:h,setCustomRole:i,newRoleName:j,setNewRoleName:k,derivedRole:l,saving:m,teamAgents:n,teamAgentsLoading:o,onAddAgent:p}=a;return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Agents in this team"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Add/remove agents by updating the ",(0,b.jsx)("code",{children:"agents:"})," list in your custom team recipe (",(0,b.jsx)("code",{children:d}),")."]}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Role"}),(0,b.jsxs)("select",{value:f,onChange:a=>{let b=a.target.value;if(g(b),"__custom__"===b){i(""),k("");return}i("");let c=e.find(a=>a.role===b);k(c?.name||"")},className:"mt-1 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)]",children:[(0,b.jsx)("option",{value:"",children:"Select…"}),e.map(a=>(0,b.jsx)("option",{value:a.role,children:a.name||a.role},a.role)),(0,b.jsx)("option",{value:"__custom__",children:"Other…"})]}),"__custom__"===f?(0,b.jsx)("input",{value:h,onChange:a=>i(a.target.value),placeholder:"role (e.g. researcher)",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)]"}):null,(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["This writes to the recipe's ",(0,b.jsx)("code",{children:"agents:"})," list."]})]}),(0,b.jsx)("div",{className:"sm:col-span-2",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Name (optional)"}),(0,b.jsx)("input",{value:j,onChange:a=>k(a.target.value),placeholder:"Onchain Researcher",className:"mt-1 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)]"})]})})]}),(0,b.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:(0,b.jsx)("button",{disabled:m||!l,onClick:p,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)] disabled:opacity-50",children:"Add agent"})}),(0,b.jsxs)("div",{className:"mt-6",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Detected installed team agents (read-only)"}),(0,b.jsxs)("ul",{className:"mt-2 space-y-2",children:[n.length?n.map(a=>(0,b.jsxs)("li",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-[color:var(--ck-text-primary)]",children:a.identityName||a.id}),(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:a.id})]}),(0,b.jsx)("a",{className:"text-sm font-medium text-[var(--ck-accent-red)] hover:text-[color:var(--ck-accent-red-hover)]",href:"/agents/"+encodeURIComponent(a.id)+"?returnTo="+encodeURIComponent("/teams/"+c+"?tab=agents"),children:"Edit"})]},a.id)):null,0===n.length&&!o&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No team agents detected."}),0===n.length&&o&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"})]})]})]})}function w(a){return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Skills"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"Skills installed in this team workspace. For agent-specific skills, open the agent from the Agents tab."}),(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Installed"}),(0,b.jsx)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:a.skillsList.length?a.skillsList.map(a=>(0,b.jsx)("li",{children:a},a)):(0,b.jsx)("li",{children:"None installed."})})]}),(0,b.jsxs)("div",{className:"mt-5 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Add a skill"}),(0,b.jsxs)("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row sm:items-center",children:[(0,b.jsx)("select",{value:a.selectedSkill,onChange:b=>a.setSelectedSkill(b.target.value),disabled:a.installingSkill||a.skillsLoading||!a.availableSkills.length,className:"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)]",children:a.availableSkills.length?a.availableSkills.map(a=>(0,b.jsx)("option",{value:a,children:a},a)):(0,b.jsx)("option",{value:"",children:"No skills found"})}),(0,b.jsx)("button",{type:"button",disabled:a.installingSkill||a.skillsLoading||!a.selectedSkill,onClick:a.onInstallSkill,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)] disabled:opacity-50",children:a.installingSkill?"Adding":"Add"})]}),a.teamSkillError&&(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:a.teamSkillError}),a.teamSkillMsg&&(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100",children:a.teamSkillMsg}),(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["Uses openclaw recipes install-skill with team-id ",a.teamId,"."]})]})]})}function x(a){let{cronJobs:c,cronLoading:d,saving:e,onCronAction:f}=a;return(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Cron jobs (filtered by team name)"}),(0,b.jsxs)("ul",{className:"mt-3 space-y-3",children:[c.length?c.map(a=>{let c=String(a.id??a.jobId??"").trim(),d=c||String(a.name??"job"),g=String(a.name??a.id??a.jobId??"(unnamed)"),h=a.enabled??a.state?.enabled;return(0,b.jsxs)("li",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"font-medium text-[color:var(--ck-text-primary)]",children:g}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Enabled: ",String(h??"?")]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"run"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Run"}),(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"enable"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Enable"}),(0,b.jsx)("button",{disabled:e||!c,onClick:()=>f(c,g,"disable"),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:"Disable"}),c?null:(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"(missing id)"})]})]},d)}):null,0===c.length&&d&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading"}),0===c.length&&!d&&(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No cron jobs detected for this team."})]})]})}var y=a.i(60791);function z(a){let{teamFiles:c,teamFilesLoading:d,showOptionalFiles:e,setShowOptionalFiles:f,fileName:g,fileContent:h,setFileContent:i,teamFileError:j,saving:k,onLoadTeamFile:l,onSaveTeamFile:m}=a;return(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-3",children:[(0,b.jsx)(y.FileListWithOptionalToggle,{title:"Team files",files:c,loading:d,showOptionalFiles:e,onShowOptionalChange:f,selectedFileName:g,onSelectFile:l}),(0,b.jsxs)("div",{className:"ck-glass-strong p-4 lg:col-span-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:["Edit: ",g]}),(0,b.jsx)("button",{disabled:k,onClick:m,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)] disabled:opacity-50",children:k?"Saving…":"Save file"})]}),j?(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:j}):null,(0,b.jsx)("textarea",{value:h,onChange:a=>i(a.target.value),className:"mt-3 h-[55vh] 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)]",spellCheck:!1})]})]})}function A(a){return`${a._file??""}:${a._line??0}`}function B({teamId:a}){let[d,e]=(0,c.useState)(!1),[f,g]=(0,c.useState)(""),[h,i]=(0,c.useState)([]),[k,l]=(0,c.useState)([]),[m,n]=(0,c.useState)([]),[o,p]=(0,c.useState)("learning"),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null);async function y(){e(!0),g("");try{let b=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Failed to load memory");i(Array.isArray(c.files)?c.files:[]),l(Array.isArray(c.pinnedItems)?c.pinnedItems:[]),n(Array.isArray(c.items)?c.items:[])}catch(a){g((0,j.errorMessage)(a)),i([]),l([]),n([])}finally{e(!1)}}(0,c.useEffect)(()=>{y()},[a]);let z=(0,c.useMemo)(()=>[{label:"decision",value:"decision"},{label:"learning",value:"learning"},{label:"bug",value:"bug"},{label:"customer",value:"customer"},{label:"release",value:"release"}],[]),B=(0,c.useMemo)(()=>new Set(k.map(a=>a._key)),[k]);async function C(b){let c=A(b);if(b._file&&b._line){x(c),g("");try{let c={op:"pin",ts:new Date().toISOString(),actor:`${a}-lead`,key:{file:"team.jsonl",line:b._line},item:{ts:b.ts,author:b.author,type:b.type,content:b.content,source:b.source}},d=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c)}),e=await d.json();if(!d.ok||!e.ok)throw Error(e.error||"Failed to pin");await y()}catch(a){g((0,j.errorMessage)(a))}finally{x(null)}}}async function D(b){let c=A(b);if(b._file&&b._line){x(c),g("");try{let c={op:"unpin",ts:new Date().toISOString(),actor:`${a}-lead`,key:{file:"team.jsonl",line:b._line}},d=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c)}),e=await d.json();if(!d.ok||!e.ok)throw Error(e.error||"Failed to unpin");await y()}catch(a){g((0,j.errorMessage)(a))}finally{x(null)}}}return(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"ck-glass 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:"Team memory (file-first)"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Stored in ",(0,b.jsx)("span",{className:"font-mono",children:"shared-context/memory/*.jsonl"}),". Items must be attributable."]})]}),(0,b.jsx)("button",{type:"button",onClick:y,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)] hover:bg-white/10",children:"Refresh"})]}),f?(0,b.jsx)("div",{className:"mt-3 rounded border border-red-400/30 bg-red-500/10 p-2 text-sm text-red-100",children:f}):null,(0,b.jsxs)("div",{className:"mt-3 text-xs text-[color:var(--ck-text-secondary)]",children:["Files: ",h.length?h.join(", "):"(none)"]})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Add memory item"}),(0,b.jsxs)("div",{className:"mt-3 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"type"}),(0,b.jsx)("select",{value:o,onChange:a=>p(a.target.value),className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",children:z.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})]}),(0,b.jsxs)("label",{className:"block",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"source (ticket/pr/path)"}),(0,b.jsx)("input",{value:s,onChange:a=>t(a.target.value),className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]",placeholder:"e.g. ticket 0088, PR https://..., shared-context/DECISIONS.md"})]}),(0,b.jsxs)("label",{className:"block md:col-span-2",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"content"}),(0,b.jsx)("textarea",{value:q,onChange:a=>r(a.target.value),className:"mt-1 h-[110px] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-sm text-[color:var(--ck-text-primary)]",placeholder:"Write a small, specific memory item…"})]}),(0,b.jsx)("div",{className:"md:col-span-2",children:(0,b.jsx)("button",{type:"button",disabled:u||!q.trim(),onClick:async()=>{v(!0),g("");try{let b={op:"append",ts:new Date().toISOString(),author:`${a}-lead`,type:o,content:q.trim(),source:s.trim()?{text:s.trim()}:void 0,file:"team.jsonl"},c=await fetch(`/api/teams/memory?teamId=${encodeURIComponent(a)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(!c.ok||!d.ok)throw Error(d.error||"Failed to append memory");r(""),t(""),await y()}catch(a){g((0,j.errorMessage)(a))}finally{v(!1)}},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)] disabled:opacity-50",children:u?"Saving…":"Append to team.jsonl"})})]})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Pinned memory"}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[k.length," pinned"]})]}),d?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null,(0,b.jsx)("div",{className:"mt-3 space-y-3",children:k.length?k.map(a=>(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"rounded bg-white/5 px-2 py-0.5 font-mono",children:a.type}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"font-mono",children:a.author}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsxs)("span",{className:"font-mono",children:["pinned ",a.pinnedAt]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>void D(a),disabled:w===a._key,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:w===a._key?"Unpinning…":"Unpin"})]}),(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]",children:a.content}),a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},a._key)):(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No pinned items yet."})})]}),(0,b.jsxs)("div",{className:"ck-glass p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Recent memory"}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["Showing ",m.length," (max 200)"]})]}),d?(0,b.jsx)("div",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null,(0,b.jsx)("div",{className:"mt-3 space-y-3",children:m.length?m.map(a=>{let c=A(a),d=B.has(c);return(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"rounded bg-white/5 px-2 py-0.5 font-mono",children:a.type}),(0,b.jsx)("span",{className:"mx-2",children:"•"}),(0,b.jsx)("span",{className:"font-mono",children:a.author})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a._file?(0,b.jsxs)("span",{className:"text-[10px] text-[color:var(--ck-text-tertiary)] font-mono",children:[a._file,":",a._line]}):null,(0,b.jsx)("button",{type:"button",onClick:()=>void C(a),disabled:d||w===c||!a._file||!a._line,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-xs font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-50",children:d?"Pinned":w===c?"Pinning…":"Pin"})]})]}),(0,b.jsx)("div",{className:"mt-2 whitespace-pre-wrap text-sm text-[color:var(--ck-text-primary)]",children:a.content}),a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},`${a._file??"?"}:${a._line??0}`)}):(0,b.jsx)("div",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No memory items yet."})})]})]})}var C=a.i(35112);function D({open:a,onClose:d,teamId:e,onInstalled:f}){let g=(0,c.useMemo)(()=>`${e}-swarm-orchestrator`,[e]),[h,i]=(0,c.useState)(g),[j,l]=(0,c.useState)(""),[m,n]=(0,c.useState)("/home/control/swarm-worktrees"),[o,p]=(0,c.useState)("origin/main"),[q,r]=(0,c.useState)(!0),[s,t]=(0,c.useState)(!0),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(null),A=(0,c.useMemo)(()=>({effectiveAgentId:String(h??"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/--+/g,"-")}),[h]);return a?(0,C.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[210]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-black/60",onClick:()=>{u||d()}}),(0,b.jsx)("div",{className:"fixed inset-0 overflow-y-auto",children:(0,b.jsx)("div",{className:"flex min-h-full items-center justify-center p-4",children:(0,b.jsxs)("div",{className:"w-full max-w-xl rounded-2xl border border-white/10 bg-[color:var(--ck-bg-glass-strong)] p-5 shadow-[var(--ck-shadow-2)]",children:[(0,b.jsx)("div",{className:"text-lg font-semibold text-[color:var(--ck-text-primary)]",children:"Add Orchestrator"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["This will scaffold a new ",(0,b.jsx)("span",{className:"font-mono text-xs",children:"swarm-orchestrator"})," agent workspace for this team and prefill its config."]}),(0,b.jsx)("label",{className:"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Orchestrator agent id"}),(0,b.jsx)("input",{value:h,onChange:a=>i(a.target.value),className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Default: ",(0,b.jsx)("span",{className:"font-mono",children:g})," (normalized: ",(0,b.jsx)("span",{className:"font-mono",children:A.effectiveAgentId}),")"]}),(0,b.jsx)("label",{className:"mt-4 block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Repo directory (SWARM_REPO_DIR)"}),(0,b.jsx)("input",{value:j,onChange:a=>l(a.target.value),placeholder:"/home/control/clawkitchen",className:"mt-1 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)]"}),(0,b.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Worktree root (SWARM_WORKTREE_ROOT)"}),(0,b.jsx)("input",{value:m,onChange:a=>n(a.target.value),className:"mt-1 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)]"}),(0,b.jsx)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:"Recommend a dedicated folder outside the repo."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"block text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Base ref (SWARM_BASE_REF)"}),(0,b.jsx)("input",{value:o,onChange:a=>p(a.target.value),className:"mt-1 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)]"})]})]}),(0,b.jsxs)("label",{className:"mt-5 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:q,onChange:a=>r(a.target.checked),className:"mt-1"}),(0,b.jsxs)("span",{children:["Add this agent to OpenClaw config (recommended).",(0,b.jsx)("br",{}),(0,b.jsxs)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["This will modify ",(0,b.jsx)("span",{className:"font-mono",children:"~/.openclaw/openclaw.json"})," to add ",(0,b.jsx)("span",{className:"font-mono",children:A.effectiveAgentId}),"."]})]})]}),(0,b.jsxs)("label",{className:"mt-3 flex items-start gap-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:s,onChange:a=>t(a.target.checked),className:"mt-1"}),(0,b.jsxs)("span",{children:["Make scripts executable (developer convenience).",(0,b.jsx)("br",{}),(0,b.jsxs)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:["Runs ",(0,b.jsx)("span",{className:"font-mono",children:"chmod +x .clawdbot/*.sh"})," in the orchestrator workspace."]})]})]}),w?(0,b.jsx)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:w}):null,y?(0,b.jsxs)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-emerald-400/30 bg-emerald-500/10 p-3 text-sm text-emerald-100",children:["Installed ",(0,b.jsx)("span",{className:"font-mono",children:y.orchestratorAgentId})," → ",(0,b.jsx)("span",{className:"font-mono",children:y.workspace})]}):null,(0,b.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:d,disabled:u,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)] hover:bg-white/10 disabled:opacity-50",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:u||!A.effectiveAgentId||!j.trim(),onClick:async()=>{v(!0),x(null),z(null);try{let a=await (0,k.fetchJson)("/api/teams/orchestrator/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:e,orchestratorAgentId:A.effectiveAgentId,repoDir:j.trim(),worktreeRoot:m.trim(),baseRef:o.trim(),applyConfig:q,makeExecutable:s})});if(!a.ok)throw Error(a.error);z({orchestratorAgentId:a.orchestratorAgentId,workspace:a.workspace}),f()}catch(a){x(a instanceof Error?a.message:String(a))}finally{v(!1)}},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)] hover:bg-[var(--ck-accent-red-hover)] disabled:opacity-50",children:u?"Installing…":"Install"})]})]})})})]}),document.body):null}function E({teamId:a}){let[d,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(null),[j,l]=(0,c.useState)(!1),m=(0,c.useCallback)(async()=>{e(!0);try{let b=await (0,k.fetchJson)(`/api/teams/orchestrator?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});g(b),i(new Date().toISOString())}catch(a){g({ok:!1,error:a instanceof Error?a.message:String(a)}),i(new Date().toISOString())}finally{e(!1)}},[a]);return((0,c.useEffect)(()=>{m()},[m]),d)?(0,b.jsx)("div",{className:"mt-6 ck-glass-strong p-4",children:"Loading orchestrator state…"}):f?f.ok?f.present?(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap 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:"Orchestrator"}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Agent: ",(0,b.jsx)("span",{className:"font-mono",children:f.agent.id}),f.agent.identityName?` (${f.agent.identityName})`:""]}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Workspace: ",(0,b.jsx)("span",{className:"font-mono",children:f.agent.workspace})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:h?(0,b.jsxs)("span",{children:["Last updated: ",(0,b.jsx)("span",{className:"font-mono",children:h})]}):null}),(0,b.jsx)("button",{type:"button",onClick:()=>void m(),disabled:d,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)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15 disabled:opacity-50",children:d?"Refreshing…":"Refresh"})]})]}),(0,b.jsxs)("div",{className:"mt-5 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("section",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"tmux sessions"}),f.tmuxSessions.length?(0,b.jsx)("ul",{className:"mt-2 space-y-2",children:f.tmuxSessions.map(a=>(0,b.jsxs)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.name}),(0,b.jsxs)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["attached=",String(a.attached),"number"==typeof a.windows?` windows=${a.windows}`:""]})]},a.name))}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No sessions detected (or tmux not running)."})]}),(0,b.jsxs)("section",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"git worktrees"}),f.worktrees.length?(0,b.jsx)("ul",{className:"mt-2 space-y-2",children:f.worktrees.map(a=>(0,b.jsxs)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"font-mono text-xs",children:a.path}),(0,b.jsxs)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:[a.branch?a.branch:"(no branch)",a.sha?` @ ${a.sha.slice(0,7)}`:""]})]},a.path))}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No worktrees detected."})]})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Active tasks"}),f.activeTasksSummary?(0,b.jsxs)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"font-mono text-xs",children:f.activeTasksSummary.path}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["number"==typeof f.activeTasksSummary.taskCount?`tasks=${f.activeTasksSummary.taskCount}`:"tasks=?",f.activeTasksSummary.rawType?` type=${f.activeTasksSummary.rawType}`:""]})]}):(0,b.jsx)("div",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No active-tasks.json found."})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"CLI quick actions"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"The orchestrator is designed to be driven from the CLI (and usually tmux). Common commands:"}),(0,b.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-xs",children:"tmux ls"}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(list sessions)"})]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("span",{className:"font-mono text-xs",children:"tmux attach -t <session>"}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(jump into a running swarm)"})]}),(0,b.jsxs)("li",{children:[(0,b.jsxs)("span",{className:"font-mono text-xs",children:["git -C ",f.agent.workspace," worktree list"]}),(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(inspect worktrees)"})]})]}),(0,b.jsx)("p",{className:"mt-3 text-xs text-[color:var(--ck-text-tertiary)]",children:"Note: ClawKitchen is read-only here; it surfaces status and pointers, but does not run or attach to tmux."})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Human approval gate (recommended)"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["For workflows that publish, deploy, or send outbound messages, keep a ",(0,b.jsx)("strong",{children:"human approval step"}),"."]}),(0,b.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("li",{children:"Generate a proposed change/post as a draft."}),(0,b.jsx)("li",{children:"Send the draft to a bound messaging channel (e.g. Telegram) for approval."}),(0,b.jsx)("li",{children:"Only execute the final action after explicit approve/deny."})]})]}),(0,b.jsxs)("section",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Where to change settings"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"These are the common knobs for a swarm/orchestrator scaffold (read-only references):"}),(0,b.jsx)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]",children:f.settingsPaths.map(a=>(0,b.jsx)("li",{className:"font-mono text-xs",children:a},a))})]})]}):(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap 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:"Orchestrator"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:"No swarm/orchestrator detected for this team."})]}),(0,b.jsx)("button",{type:"button",onClick:()=>l(!0),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)] hover:bg-[var(--ck-accent-red-hover)]",children:"Add Orchestrator"})]}),(0,b.jsxs)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-tertiary)]",children:"Detection"}),(0,b.jsx)("div",{className:"mt-1 font-mono text-xs",children:f.reason||"(no reason provided)"})]}),(0,b.jsxs)("p",{className:"mt-3 text-sm text-[color:var(--ck-text-secondary)]",children:["Default convention is ",(0,b.jsx)("code",{children:"<teamId>-swarm-orchestrator"}),". Once installed, this tab will show: tmux sessions, git worktrees/branches, and active task state."]}),(0,b.jsx)(D,{open:j,onClose:()=>l(!1),teamId:a,onInstalled:()=>{l(!1),m()}})]}):(0,b.jsxs)("div",{className:"mt-6 ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Orchestrator"}),(0,b.jsx)("div",{className:"mt-3 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-3 text-sm text-red-100",children:f.error})]}):(0,b.jsx)("div",{className:"mt-6 ck-glass-strong p-4",children:"No orchestrator state available."})}var F=a.i(83856);let G=[{id:"recipe",label:"Recipe"},{id:"agents",label:"Agents"},{id:"skills",label:"Skills"},{id:"cron",label:"Cron"},{id:"files",label:"Files"},{id:"memory",label:"Memory"},{id:"orchestrator",label:"Orchestrator"},{id:"workflows",label:"Workflows"}];function H({teamId:a,initialTab:g}){let l=(0,e.useRouter)(),[m,n]=(0,c.useState)([]),[o,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(null),[y,A]=(0,c.useState)(null),[C,D]=(0,c.useState)(!1),[H,I]=(0,c.useState)(a),[J,K]=(0,c.useState)(a),[L,M]=(0,c.useState)(""),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(()=>["recipe","agents","skills","cron","files","memory","orchestrator","workflows"].includes(g)?g:"recipe"),[R,S]=(0,c.useState)(!0),[T,U]=(0,c.useState)(!1),[V,W]=(0,c.useState)(!1),[X,Y]=(0,c.useState)(!1),[Z,$]=(0,c.useState)(!1),[_,aa]=(0,c.useState)(""),ab=(0,i.useToast)(),[ac,ad]=(0,c.useState)(!1),[ae,af]=(0,c.useState)(!1),[ag,ah]=(0,c.useState)(null);function ai(a,b="info"){let c=String(a??"").trim();c&&ab.push({kind:b,message:c})}let[aj,ak]=(0,c.useState)([]),[al,am]=(0,c.useState)(!1),[an,ao]=(0,c.useState)(""),[ap,aq]=(0,c.useState)(!1),[ar,as]=(0,c.useState)("SOUL.md"),[at,au]=(0,c.useState)(""),[av,aw]=(0,c.useState)([]),[ax,ay]=(0,c.useState)(!1),[az,aA]=(0,c.useState)([]),[aB,aC]=(0,c.useState)(!1),aD=(0,c.useMemo)(()=>{let a=String(L??"");if(!a.startsWith("---\n"))return[];let b=a.indexOf("\n---\n",4);if(-1===b)return[];let c=a.slice(4,b+1);try{let a=(0,d.parse)(c)??{};return(Array.isArray(a.agents)?a.agents:[]).map(a=>a).map(a=>({role:String(a.role??"").trim(),name:"string"==typeof a.name?a.name:void 0})).filter(a=>!!a.role)}catch{return[]}},[L]),[aE,aF]=(0,c.useState)(""),[aG,aH]=(0,c.useState)(""),[aI,aJ]=(0,c.useState)(""),aK=(0,c.useMemo)(()=>("__custom__"===aE?aG:aE).trim()||"",[aE,aG]),[aL,aM]=(0,c.useState)([]),[aN,aO]=(0,c.useState)([]),[aP,aQ]=(0,c.useState)(!1),[aR,aS]=(0,c.useState)(""),[aT,aU]=(0,c.useState)(!1),[aV,aW]=(0,c.useState)(""),[aX,aY]=(0,c.useState)(""),aZ=(0,c.useMemo)(()=>m.filter(a=>"team"===a.kind),[m]),a$=(0,c.useMemo)(()=>m.find(a=>a.id===H&&"workspace"===a.source)??m.find(a=>a.id===H)??null,[m,H]),a_=!!a.trim(),a0=!!H.trim(),a1=m.some(a=>a.id===H&&"workspace"===a.source),a2=!!(a$?.source==="builtin"&&!a1);async function a3(){let a=H.trim();if(a){$(!0),aa("");try{let b=await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"}),c=b.recipe;M(c.content),O("string"==typeof b.recipeHash?b.recipeHash:null)}catch(a){aa((0,j.errorMessage)(a))}finally{$(!1)}}}async function a4(a){let b=o.trim(),c=String(a.toId??H).trim(),d=String(a.toName??J).trim(),e=!!a.overwrite,f=!!a.scaffold;if(!b)throw Error("Source recipe id is required");if(!c)throw Error("Custom recipe id is required");return await (0,k.fetchJson)("/api/recipes/clone",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({fromId:b,toId:c,toName:d||void 0,overwrite:e,scaffold:f})})}async function a5(a,b){U(!0),ai("");try{let c=await a4({overwrite:a,...b});if(c.scaffold&&!c.scaffold.ok&&ai(`Scaffold failed (recipe was still cloned): ${c.scaffold.error||"Unknown error"}`,"error"),L.trim()&&L.trim()!==c.content.trim()){let a=function(a,b){if(!a.startsWith("---\n"))return a;let c=a.indexOf("\n---\n",4);if(-1===c)return a;let d=a.slice(4,c),e=a.slice(c+5),{next:f,sawTeamBlock:g,patched:h}=function(a,b){let c=[],d=!1,e=!1,f=!1;for(let g of a){if(/^team\s*:\s*$/i.test(g)){d=!0,e=!0,c.push(g);continue}if(d&&/^\S/.test(g)&&(d=!1),d&&/^\s+teamId\s*:/i.test(g)){c.push(` teamId: ${b}`),f=!0;continue}c.push(g)}return{next:c,sawTeamBlock:e,patched:f}}(d.split("\n"),b);if(g&&!h){let a=[];for(let c of f)a.push(c),/^team\s*:\s*$/i.test(c)&&a.push(` teamId: ${b}`);return`---
2
+ ${a.join("\n")}
3
+ ---
4
+ ${e}`}return`---
5
+ ${f.join("\n")}
6
+ ---
7
+ ${e}`}(function(a,b){var c;let d,e;if(!a.startsWith("---\n"))return a;let f=a.indexOf("\n---\n",4);if(-1===f)return a;let g=a.slice(4,f),h=a.slice(f+5),i=(c=g.split("\n"),d=!1,e=c.map(a=>/^id\s*:/i.test(a)?(d=!0,`id: ${b}`):a),d||e.unshift(`id: ${b}`),e);return`---
8
+ ${i.join("\n")}
9
+ ---
10
+ ${h}`}(L,H.trim()),H.trim());await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(H.trim())}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:a})}),M(a)}else M(c.content);try{let a=await (0,k.fetchJson)(`/api/recipes/${encodeURIComponent(H.trim())}`,{cache:"no-store"});"string"==typeof a.recipeHash&&O(a.recipeHash)}catch{O(null)}ai(`Saved team recipe: ${c.filePath}`,"success")}catch(a){ai((0,j.errorMessage)(a),"error")}finally{U(!1)}}async function a6(b){U(!0),ao("");try{let c=await (0,k.fetchJson)(`/api/teams/file?teamId=${encodeURIComponent(a)}&name=${encodeURIComponent(b)}`,{cache:"no-store"});if(!c.ok)throw Error("Failed to load file");as(b),au(String(c.content??""))}catch(a){ao((0,j.errorMessage)(a))}finally{U(!1)}}async function a7(){U(!0),ao("");try{if(!(await (0,k.fetchJson)("/api/teams/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,name:ar,content:at})})).ok)throw Error("Failed to save file")}catch(a){ao((0,j.errorMessage)(a))}finally{U(!1)}}async function a8(){U(!0);try{await t({teamId:a,toId:H,newRole:aE,derivedRole:aK,newRoleName:aI,content:L,setContent:M,setTeamAgents:aA,flashMessage:ai,ensureCustomRecipeExists:a4})}catch(a){ai((0,j.errorMessage)(a),"error")}finally{U(!1)}}async function a9(a,b,c){U(!0);try{await (0,k.fetchJson)("/api/cron/job",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:a,action:c})}),ai(`Cron ${c}: ${b}`,"success")}catch(a){ai((0,j.errorMessage)(a),"error")}finally{U(!1)}}async function ba(){aU(!0),aW(""),aY("");try{await (0,k.fetchJson)("/api/teams/skills/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,skill:aR})}),aW(`Installed skill: ${aR}`);try{let b=await (0,k.fetchJson)(`/api/teams/skills?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});b.ok&&Array.isArray(b.skills)&&aM(b.skills)}catch{}}catch(a){aY((0,j.errorMessage)(a))}finally{aU(!1)}}return(0,c.useEffect)(()=>{I(a),K(a),M(""),O(null),ah(null),af(!1),ad(!1),g&&["recipe","agents","skills","cron","files","memory","orchestrator","workflows"].includes(g)&&Q(g)},[a,g]),(0,c.useEffect)(()=>{let b=!1;return S(!0),p(a,{setRecipes:n,setLockedFromId:s,setLockedFromName:A,setProvenanceMissing:D,setFromId:q,setTeamMetaRecipeHash:ah,setTeamFiles:ak,setCronJobs:aw,setTeamAgents:aA,setSkillsList:aM,setAvailableSkills:aO,setSelectedSkill:aS,setTeamFilesLoading:am,setCronLoading:ay,setTeamAgentsLoading:aC,setSkillsLoading:aQ}).then(()=>{b||S(!1)}).catch(a=>{ai((0,j.errorMessage)(a),"error"),b||S(!1)}),()=>{b=!0}},[a]),(0,c.useEffect)(()=>{!H.trim()||L.trim()||Z||a3()},[H]),(0,b.jsxs)("div",{className:"ck-glass w-full p-6 sm:p-8",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Team editor"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Bootstrap a ",(0,b.jsx)("strong",{children:"custom team recipe"})," for this installed team, without modifying builtin recipes."]}),(0,b.jsx)("div",{className:"mt-6 flex flex-wrap gap-2",children:G.map(a=>(0,b.jsx)("button",{onClick:()=>Q(a.id),className:P===a.id?"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)]":"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)] shadow-[var(--ck-shadow-1)] hover:bg-white/10",children:a.label},a.id))}),"recipe"===P&&(0,b.jsx)(u,{loading:R,fromId:o,setFromId:q,toId:H,setToId:I,toName:J,setToName:K,canEditTargetId:!0,teamRecipes:aZ,lockedFromId:r,lockedFromName:y,provenanceMissing:C,saving:T,teamIdValid:a_,targetIdValid:a0,targetIsBuiltin:a2,loadedRecipeHash:N,teamMetaRecipeHash:ag,publishing:V,content:L,setContent:M,setLoadedRecipeHash:O,recipeLoadError:_,onSaveCustom:a5,onPublishOpen:()=>af(!0),onDeleteOpen:()=>ad(!0)}),"agents"===P&&(0,b.jsx)(v,{teamId:a,toId:H,recipeAgents:aD,newRole:aE,setNewRole:aF,customRole:aG,setCustomRole:aH,newRoleName:aI,setNewRoleName:aJ,derivedRole:aK,saving:T,teamAgents:az,teamAgentsLoading:aB,onAddAgent:a8}),"skills"===P&&(0,b.jsx)(w,{teamId:a,skillsList:aL,availableSkills:aN,skillsLoading:aP,selectedSkill:aR,setSelectedSkill:aS,installingSkill:aT,teamSkillMsg:aV,teamSkillError:aX,onInstallSkill:ba}),"cron"===P&&(0,b.jsx)(x,{cronJobs:av,cronLoading:ax,saving:T,onCronAction:a9}),"workflows"===P&&(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsx)(F.default,{teamId:a})}),"orchestrator"===P&&(0,b.jsx)(E,{teamId:a}),"memory"===P&&(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsx)(B,{teamId:a})}),"files"===P&&(0,b.jsx)(z,{teamFiles:aj,teamFilesLoading:al,showOptionalFiles:ap,setShowOptionalFiles:aq,fileName:ar,fileContent:at,setFileContent:au,teamFileError:an,saving:T,onLoadTeamFile:a6,onSaveTeamFile:a7}),(0,b.jsx)(h,{open:ae,teamId:a,recipeId:H,busy:V,onClose:()=>af(!1),onConfirm:async()=>{W(!0);try{await (0,k.fetchJson)("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:H.trim(),teamId:a,overwrite:!0,applyConfig:!0})});try{let b=await (0,k.fetchJson)(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});b.ok&&b.meta&&"string"==typeof b.meta.recipeHash&&ah(b.meta.recipeHash)}catch{}af(!1),ai("Published changes to active team","success")}catch(a){ai((0,j.errorMessage)(a),"error")}finally{W(!1)}}}),(0,b.jsx)(f.DeleteTeamModal,{open:ac,teamId:a,busy:X,onClose:()=>ad(!1),onConfirm:async()=>{Y(!0);try{await (0,k.fetchJson)("/api/teams/remove-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a})}),ai("Deleted team successfully","success"),ad(!1),setTimeout(()=>l.push("/"),250)}catch(a){ai((0,j.errorMessage)(a),"error")}finally{Y(!1)}}})]})}a.s(["default",()=>H],67004)}];
11
+
12
+ //# sourceMappingURL=src_app_teams_%5BteamId%5D_team-editor_index_tsx_e68e9cbc._.js.map