@jiggai/kitchen 0.1.11 → 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/{N9RkFGiZEAkG3RdK_y3XE → z9yFlFZ5f_hw9mm0nfMJl}/_buildManifest.js +0 -0
  1082. /package/.next/static/{N9RkFGiZEAkG3RdK_y3XE → z9yFlFZ5f_hw9mm0nfMJl}/_clientMiddlewareManifest.json +0 -0
  1083. /package/.next/static/{N9RkFGiZEAkG3RdK_y3XE → z9yFlFZ5f_hw9mm0nfMJl}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/recipes/%5Bid%5D/RecipeEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { parse as parseYaml } from \"yaml\";\n\ntype Recipe = {\n id: string;\n name: string;\n kind: \"agent\" | \"team\";\n source: \"builtin\" | \"workspace\";\n content: string;\n filePath: string | null;\n};\n\ntype TeamRecipeFrontmatter = {\n id?: string;\n name?: string;\n version?: string;\n description?: string;\n kind?: \"team\";\n source?: string;\n cronJobs?: Array<{\n id?: string;\n name?: string;\n schedule?: string;\n timezone?: string;\n agentId?: string;\n channel?: string;\n to?: string;\n description?: string;\n message?: string;\n enabledByDefault?: boolean;\n }>;\n // ClawRecipes team recipes define agents at top-level `agents:`\n agents?: Array<{\n role?: string;\n name?: string;\n tools?: {\n profile?: string;\n allow?: string[];\n deny?: string[];\n };\n }>;\n team?: {\n teamId?: string;\n };\n templates?: Record<string, string>;\n};\n\ntype AgentRecipeFrontmatter = {\n id?: string;\n name?: string;\n version?: string;\n description?: string;\n kind?: \"agent\";\n source?: string;\n templates?: Record<string, string>;\n};\n\nfunction parseFrontmatter(raw: string): { fm: TeamRecipeFrontmatter | null; error?: string } {\n // Very small, tolerant frontmatter extractor.\n // Expects:\n // ---\\n<yaml>\\n---\\n\n const m = raw.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n/);\n if (!m) return { fm: null };\n\n try {\n const fm = parseYaml(m[1]) as TeamRecipeFrontmatter;\n if (!fm || typeof fm !== \"object\") return { fm: null };\n return { fm };\n } catch (e) {\n return { fm: null, error: e instanceof Error ? e.message : String(e) };\n }\n}\n\nfunction templateKeyToFileName(key: string): string {\n // For team templates, keys are like: <role>.soul, <role>.tools\n const suffix = key.split(\".\").slice(1).join(\".\");\n switch (suffix) {\n case \"soul\":\n return \"SOUL.md\";\n case \"agents\":\n return \"AGENTS.md\";\n case \"tools\":\n return \"TOOLS.md\";\n case \"identity\":\n return \"IDENTITY.md\";\n case \"install\":\n return \"INSTALL.md\";\n default:\n return suffix ? `${suffix.toUpperCase()}` : key;\n }\n}\n\nfunction agentTemplateKeyToFileName(key: string): string {\n // For agent recipes, keys are usually direct file identifiers (no role prefix).\n switch (key) {\n case \"soul\":\n return \"SOUL.md\";\n case \"agents\":\n return \"AGENTS.md\";\n case \"tools\":\n return \"TOOLS.md\";\n case \"identity\":\n return \"IDENTITY.md\";\n case \"install\":\n return \"INSTALL.md\";\n case \"status\":\n return \"STATUS.md\";\n default:\n return key;\n }\n}\n\nfunction expectedFilesForRole(fm: TeamRecipeFrontmatter | null, role: string | undefined): string[] {\n if (!fm || !role || !fm.templates) return [];\n const keys = Object.keys(fm.templates).filter((k) => k.startsWith(`${role}.`));\n const files = keys.map(templateKeyToFileName);\n // De-dupe while preserving order\n return [...new Set(files)];\n}\n\nexport default function RecipeEditor({ recipeId }: { recipeId: string }) {\n const router = useRouter();\n\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [recipe, setRecipe] = useState<Recipe | null>(null);\n const [content, setContent] = useState<string>(\"\");\n const [message, setMessage] = useState<string>(\"\");\n // (scaffold output removed from UI)\n\n // Team create modal state\n const [createOpen, setCreateOpen] = useState(false);\n const [teamId, setTeamId] = useState(\"\");\n const [cronInstallChoice, setCronInstallChoice] = useState<\"yes\" | \"no\">(\"no\");\n const [creating, setCreating] = useState(false);\n const [createMsg, setCreateMsg] = useState<string>(\"\");\n\n // Agent create modal state\n const [createAgentOpen, setCreateAgentOpen] = useState(false);\n const [agentId, setAgentId] = useState(\"\");\n const [agentName, setAgentName] = useState(\"\");\n const [creatingAgent, setCreatingAgent] = useState(false);\n const [createAgentMsg, setCreateAgentMsg] = useState<string>(\"\");\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n setMessage(\"\");\n const res = await fetch(`/api/recipes/${encodeURIComponent(recipeId)}`, { cache: \"no-store\" });\n const json = await res.json();\n if (!res.ok) {\n setMessage(json.error || \"Failed to load recipe\");\n setLoading(false);\n return;\n }\n const r = json.recipe as Recipe;\n setRecipe(r);\n setContent(r.content);\n setLoading(false);\n })();\n }, [recipeId]);\n\n const canSave = useMemo(() => {\n if (!recipe) return false;\n return recipe.filePath !== null;\n }, [recipe]);\n\n const teamFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"team\") return { fm: null as TeamRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n const agentFrontmatter = useMemo(() => {\n if (!recipe || recipe.kind !== \"agent\") return { fm: null as AgentRecipeFrontmatter | null, error: undefined as string | undefined };\n return parseFrontmatter(content);\n }, [recipe, content]);\n\n async function onSave() {\n setSaving(true);\n setMessage(\"\");\n try {\n const res = await fetch(`/api/recipes/${encodeURIComponent(recipeId)}`, {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content }),\n });\n const json = await res.json();\n if (!res.ok) throw new Error(json.error || \"Save failed\");\n setMessage(`Saved to ${json.filePath}`);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n setMessage(msg);\n } finally {\n setSaving(false);\n }\n }\n\n // NOTE: Removed dedicated Scaffold action/output from UI.\n\n function openCreateTeam() {\n setCreateMsg(\"\");\n // Leave blank by default to avoid collisions (e.g. team id === recipe id).\n setTeamId(\"\");\n setCronInstallChoice(\"no\");\n setCreateOpen(true);\n }\n\n function openCreateAgent() {\n setCreateAgentMsg(\"\");\n // Leave blank by default to avoid collisions (e.g. agent id === recipe id).\n setAgentId(\"\");\n setAgentName((agentFrontmatter.fm?.name || recipe?.name || \"\").trim());\n setCreateAgentOpen(true);\n }\n\n async function onSubmitCreateTeam() {\n if (!recipe || recipe.kind !== \"team\") return;\n\n const t = teamId.trim();\n if (!t) {\n setCreateMsg(\"Team id is required.\");\n return;\n }\n if (t === recipe.id) {\n setCreateMsg(`Team id cannot be the same as the recipe id (${recipe.id}). Choose a new team id.`);\n return;\n }\n\n setCreating(true);\n setCreateMsg(\"\");\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,\n }),\n });\n const json = await res.json();\n if (!res.ok) throw new Error(json.error || \"Create Team failed\");\n\n setCreateOpen(false);\n router.push(`/teams/${encodeURIComponent(t)}`);\n router.refresh();\n } catch (e: unknown) {\n setCreateMsg(e instanceof Error ? e.message : String(e));\n } finally {\n setCreating(false);\n }\n }\n\n async function onSubmitCreateAgent() {\n if (!recipe || recipe.kind !== \"agent\") return;\n\n const a = agentId.trim();\n if (!a) {\n setCreateAgentMsg(\"Agent id is required.\");\n return;\n }\n if (a === recipe.id) {\n setCreateAgentMsg(`Agent id cannot be the same as the recipe id (${recipe.id}). Choose a new agent id.`);\n return;\n }\n\n setCreatingAgent(true);\n setCreateAgentMsg(\"\");\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: agentName.trim() || undefined,\n applyConfig: true,\n overwrite: false,\n }),\n });\n const json = await res.json();\n if (!res.ok) throw new Error(json.error || \"Create Agent failed\");\n\n setCreateAgentOpen(false);\n router.push(`/agents/${encodeURIComponent(a)}`);\n router.refresh();\n } catch (e: unknown) {\n setCreateAgentMsg(e instanceof Error ? e.message : String(e));\n } finally {\n setCreatingAgent(false);\n }\n }\n\n if (loading) return <div className=\"ck-glass mx-auto max-w-4xl p-6\">Loading…</div>;\n if (!recipe) return <div className=\"ck-glass mx-auto max-w-4xl p-6\">Not found.</div>;\n\n const fm = recipe.kind === \"team\" ? teamFrontmatter.fm : null;\n const fmErr = recipe.kind === \"team\" ? teamFrontmatter.error : undefined;\n\n const afm = recipe.kind === \"agent\" ? agentFrontmatter.fm : null;\n const afmErr = recipe.kind === \"agent\" ? agentFrontmatter.error : undefined;\n\n return (\n <div className=\"ck-glass mx-auto max-w-6xl p-6 sm:p-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6\">\n <div className=\"min-w-0\">\n <h1 className=\"truncate text-2xl font-semibold tracking-tight\">{recipe.name}</h1>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {recipe.id} • {recipe.kind} • {recipe.source}\n </div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Path: {recipe.filePath ?? \"(unknown / not writable)\"}\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <button\n disabled={!canSave || saving}\n onClick={onSave}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n </div>\n\n {message ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm text-[color:var(--ck-text-primary)]\">\n {message}\n </div>\n ) : null}\n\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe markdown</div>\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n className=\"mt-2 h-[70vh] w-full resize-none rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-3 font-mono text-xs text-[color:var(--ck-text-primary)] placeholder:text-[color:var(--ck-text-tertiary)]\"\n spellCheck={false}\n />\n </div>\n\n {recipe.kind === \"team\" ? (\n <div className=\"ck-glass-strong p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team recipe</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Create a team from this recipe. Creating a Team runs <code>openclaw recipes scaffold-team</code> with <code>--apply-config</code>.\n </div>\n </div>\n <button\n type=\"button\"\n onClick={openCreateTeam}\n className=\"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]\"\n >\n Create Team\n </button>\n </div>\n\n {fmErr ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]\">\n Frontmatter parse error: {fmErr}\n </div>\n ) : null}\n\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Recipe information\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {fm?.id ?? recipe.id}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {fm?.version ?? \"(unknown)\"}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Team id:</span> {fm?.team?.teamId ?? \"(not set)\"}\n </div>\n {fm?.description ? <div className=\"whitespace-pre-wrap\">{fm.description}</div> : null}\n </div>\n </details>\n\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Agents ({fm?.agents?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.agents ?? []).map((a, idx) => (\n <details\n key={`${a.role ?? \"agent\"}:${idx}`}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\"\n >\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{a.name ?? a.role ?? \"(unnamed)\"}</span>\n {a.role ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {a.role}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Role:</span> {a.role ?? \"(none)\"}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Tools profile:</span> {a.tools?.profile ?? \"(default)\"}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Allow:</span>{\" \"}\n {(a.tools?.allow ?? []).length ? (a.tools?.allow ?? []).join(\", \") : \"(none)\"}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Deny:</span>{\" \"}\n {(a.tools?.deny ?? []).length ? (a.tools?.deny ?? []).join(\", \") : \"(none)\"}\n </div>\n\n <div className=\"pt-1\">\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Expected files:</span>{\" \"}\n {expectedFilesForRole(fm, a.role).length\n ? expectedFilesForRole(fm, a.role).join(\", \")\n : \"(not listed)\"}\n </div>\n </div>\n </details>\n ))}\n {(!fm?.agents || fm.agents.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No agents listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Cron jobs ({fm?.cronJobs?.length ?? 0})\n </summary>\n <div className=\"mt-2 space-y-2\">\n {(fm?.cronJobs ?? []).map((c, idx) => (\n <details\n key={`${c.id ?? \"cron\"}:${idx}`}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\"\n >\n <summary className=\"cursor-pointer text-sm text-[color:var(--ck-text-primary)]\">\n <span className=\"font-medium\">{c.name ?? c.id ?? \"(unnamed)\"}</span>\n {c.schedule ? <span className=\"text-[color:var(--ck-text-tertiary)]\"> — {c.schedule}</span> : null}\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {c.agentId ? (\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Agent:</span> {c.agentId}\n </div>\n ) : null}\n {c.channel ? (\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Channel:</span> {c.channel}\n </div>\n ) : null}\n {typeof c.enabledByDefault === \"boolean\" ? (\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Enabled by default:</span>{\" \"}\n {c.enabledByDefault ? \"yes\" : \"no\"}\n </div>\n ) : null}\n {c.message ? (\n <div className=\"mt-2 whitespace-pre-wrap rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-primary)]\">\n {c.message}\n </div>\n ) : null}\n </div>\n </details>\n ))}\n {(!fm?.cronJobs || fm.cronJobs.length === 0) ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(No cron jobs listed in frontmatter)</div>\n ) : null}\n </div>\n </details>\n </div>\n </div>\n ) : (\n <div className=\"ck-glass-strong p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agent recipe</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Create an agent from this recipe. Creating an Agent runs <code>openclaw recipes scaffold</code> with <code>--apply-config</code>.\n </div>\n </div>\n <button\n type=\"button\"\n onClick={openCreateAgent}\n className=\"shrink-0 rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)]\"\n >\n Create Agent\n </button>\n </div>\n\n {afmErr ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-xs text-[color:var(--ck-text-primary)]\">\n Frontmatter parse error: {afmErr}\n </div>\n ) : null}\n\n <div className=\"mt-4 space-y-3\">\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\" open>\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Recipe information\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Recipe id:</span> {afm?.id ?? recipe.id}\n </div>\n <div>\n <span className=\"text-[color:var(--ck-text-tertiary)]\">Version:</span> {afm?.version ?? \"(unknown)\"}\n </div>\n {afm?.description ? <div className=\"whitespace-pre-wrap\">{afm.description}</div> : null}\n </div>\n </details>\n\n <details className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-[color:var(--ck-text-primary)]\">\n Files ({Object.keys(afm?.templates ?? {}).length})\n </summary>\n <div className=\"mt-2 space-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n {Object.keys(afm?.templates ?? {}).length ? (\n <ul className=\"list-disc space-y-1 pl-5\">\n {Object.keys(afm?.templates ?? {}).map((k) => (\n <li key={k}>\n <span className=\"font-mono text-[11px]\">{k}</span>\n <span className=\"text-[color:var(--ck-text-tertiary)]\"> → </span>\n <span className=\"font-mono text-[11px]\">{agentTemplateKeyToFileName(k)}</span>\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"text-[color:var(--ck-text-tertiary)]\">(No templates listed in frontmatter)</div>\n )}\n </div>\n </details>\n </div>\n </div>\n )}\n </div>\n\n {createOpen ? (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4\" role=\"dialog\" aria-modal=\"true\">\n <div className=\"ck-glass w-full max-w-lg p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold tracking-tight\">Create Team</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">From recipe: {recipe.id}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => (!creating ? setCreateOpen(false) : null)}\n className=\"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]\"\n >\n Close\n </button>\n </div>\n\n <div className=\"mt-4 space-y-3\">\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team id</div>\n <input\n value={teamId}\n onChange={(e) => setTeamId(e.target.value)}\n placeholder=\"e.g. acme\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={creating}\n />\n </label>\n\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Install cron jobs</div>\n <select\n value={cronInstallChoice}\n onChange={(e) => setCronInstallChoice(e.target.value as \"yes\" | \"no\")}\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={creating}\n >\n <option value=\"no\">No (recommended)</option>\n <option value=\"yes\">Yes</option>\n </select>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Kitchen scaffolds non-interactively; this controls the one-time cron install choice for this run.\n </div>\n </label>\n\n {createMsg ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm\">{createMsg}</div>\n ) : null}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n disabled={creating}\n onClick={() => setCreateOpen(false)}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={creating}\n onClick={onSubmitCreateTeam}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {creating ? \"Creating…\" : \"Create Team\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n ) : null}\n\n {createAgentOpen ? (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 p-4\" role=\"dialog\" aria-modal=\"true\">\n <div className=\"ck-glass w-full max-w-lg p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-semibold tracking-tight\">Create Agent</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">From recipe: {recipe.id}</div>\n </div>\n <button\n type=\"button\"\n onClick={() => (!creatingAgent ? setCreateAgentOpen(false) : null)}\n className=\"rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:text-[color:var(--ck-text-primary)]\"\n >\n Close\n </button>\n </div>\n\n <div className=\"mt-4 space-y-3\">\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Agent id</div>\n <input\n value={agentId}\n onChange={(e) => setAgentId(e.target.value)}\n placeholder=\"e.g. larry\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={creatingAgent}\n />\n </label>\n\n <label className=\"block\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Name (optional)</div>\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n placeholder=\"e.g. Larry\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n disabled={creatingAgent}\n />\n </label>\n\n {createAgentMsg ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm\">{createAgentMsg}</div>\n ) : null}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n disabled={creatingAgent}\n onClick={() => setCreateAgentOpen(false)}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] transition-colors hover:bg-white/10 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={creatingAgent}\n onClick={onSubmitCreateAgent}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {creatingAgent ? \"Creating…\" : \"Create Agent\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n ) : null}\n\n <p className=\"mt-6 text-xs text-[color:var(--ck-text-tertiary)]\">\n This page edits the recipe markdown and previews what will be created when you click{\" \"}\n {recipe.kind === \"team\" ? \"Create Team\" : \"Create Agent\"}.\n </p>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- module.exports=[90198,a=>{"use strict";var b=a.i(87924),c=a.i(72131);function d(){let[a,d]=(0,c.useState)(!0),[e,f]=(0,c.useState)(!1),[g,h]=(0,c.useState)("prompt"),[i,j]=(0,c.useState)("");async function k(a){f(!0),j("");try{let b=await fetch("/api/settings/cron-installation",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({value:a})}),c=await b.text(),d=c?JSON.parse(c):{};if(!b.ok)throw Error(d.error||"Save failed");h(a),j("Saved.")}catch(a){j(a instanceof Error?a.message:String(a))}finally{f(!1)}}(0,c.useEffect)(()=>{(async()=>{d(!0),j("");try{let a=await fetch("/api/settings/cron-installation",{cache:"no-store"}),b=await a.text(),c=b?JSON.parse(b):{};if(!a.ok)throw Error(c.error||"Failed to load config");let d=String(c.value||"").trim();"off"===d||"prompt"===d||"on"===d?h(d):h("prompt")}catch(a){j(a instanceof Error?a.message:String(a))}finally{d(!1)}})()},[]);let l=({value:c,title:d,help:f})=>(0,b.jsxs)("button",{type:"button",onClick:()=>k(c),disabled:a||e,className:`ck-glass w-full text-left px-4 py-3 transition-colors hover:bg-white/10 ${g===c?"border-[color:var(--ck-accent-red)]":""}`,children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between gap-3",children:[(0,b.jsx)("div",{className:"font-medium",children:d}),g===c?(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-accent-red)]",children:"Selected"}):null]}),(0,b.jsx)("div",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:f})]});return(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)(l,{value:"off",title:"Off",help:"Never install or reconcile recipe-defined cron jobs."}),(0,b.jsx)(l,{value:"prompt",title:"Prompt (default)",help:"Ask at scaffold time. Default answer should be No; jobs are installed disabled unless you opt in."}),(0,b.jsx)(l,{value:"on",title:"On",help:"Install/reconcile jobs during scaffold (enabledByDefault controls new jobs)."}),i?(0,b.jsx)("div",{className:"mt-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm",children:i}):null]})}a.s(["default",()=>d])}];
2
-
3
- //# sourceMappingURL=src_app_settings_settings-client_tsx_279084f8._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/settings/settings-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\ntype Mode = \"off\" | \"prompt\" | \"on\";\n\nexport default function SettingsClient() {\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [mode, setMode] = useState<Mode>(\"prompt\");\n const [msg, setMsg] = useState<string>(\"\");\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n setMsg(\"\");\n try {\n const res = await fetch(\"/api/settings/cron-installation\", { cache: \"no-store\" });\n const text = await res.text();\n const json = text ? (JSON.parse(text) as { ok?: boolean; value?: string; error?: string }) : {};\n if (!res.ok) throw new Error(json.error || \"Failed to load config\");\n const v = String(json.value || \"\").trim();\n if (v === \"off\" || v === \"prompt\" || v === \"on\") setMode(v);\n else setMode(\"prompt\");\n } catch (e: unknown) {\n setMsg(e instanceof Error ? e.message : String(e));\n } finally {\n setLoading(false);\n }\n })();\n }, []);\n\n async function save(next: Mode) {\n setSaving(true);\n setMsg(\"\");\n try {\n const res = await fetch(\"/api/settings/cron-installation\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ value: next }),\n });\n const text = await res.text();\n const json = text ? (JSON.parse(text) as { ok?: boolean; error?: string }) : {};\n if (!res.ok) throw new Error(json.error || \"Save failed\");\n setMode(next);\n setMsg(\"Saved.\");\n } catch (e: unknown) {\n setMsg(e instanceof Error ? e.message : String(e));\n } finally {\n setSaving(false);\n }\n }\n\n const Option = ({ value, title, help }: { value: Mode; title: string; help: string }) => (\n <button\n type=\"button\"\n onClick={() => save(value)}\n disabled={loading || saving}\n className={`ck-glass w-full text-left px-4 py-3 transition-colors hover:bg-white/10 ${\n mode === value ? \"border-[color:var(--ck-accent-red)]\" : \"\"\n }`}\n >\n <div className=\"flex items-baseline justify-between gap-3\">\n <div className=\"font-medium\">{title}</div>\n {mode === value ? (\n <div className=\"text-xs font-medium text-[color:var(--ck-accent-red)]\">Selected</div>\n ) : null}\n </div>\n <div className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">{help}</div>\n </button>\n );\n\n return (\n <div className=\"space-y-3\">\n <Option value=\"off\" title=\"Off\" help=\"Never install or reconcile recipe-defined cron jobs.\" />\n <Option\n value=\"prompt\"\n title=\"Prompt (default)\"\n help=\"Ask at scaffold time. Default answer should be No; jobs are installed disabled unless you opt in.\"\n />\n <Option value=\"on\" title=\"On\" help=\"Install/reconcile jobs during scaffold (enabledByDefault controls new jobs).\" />\n\n {msg ? (\n <div className=\"mt-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3 text-sm\">\n {msg}\n </div>\n ) : null}\n </div>\n );\n}\n"],"names":[],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OAIe,SAAS,IACtB,GAAM,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACjC,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC/B,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAO,UACjC,CAAC,EAAK,EAAO,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAS,IAsBvC,eAAe,EAAK,CAAU,EAC5B,GAAU,GACV,EAAO,IACP,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,kCAAmC,CACzD,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,SAAS,CAAC,CAAE,MAAO,CAAK,EACrC,GACM,EAAO,MAAM,EAAI,IAAI,GACrB,EAAO,EAAQ,KAAK,KAAK,CAAC,GAA6C,CAAC,EAC9E,GAAI,CAAC,EAAI,EAAE,CAAE,MAAM,AAAI,MAAM,EAAK,KAAK,EAAI,eAC3C,EAAQ,GACR,EAAO,SACT,CAAE,MAAO,EAAY,CACnB,EAAO,aAAa,MAAQ,EAAE,OAAO,CAAG,OAAO,GACjD,QAAU,CACR,GAAU,EACZ,CACF,CAvCA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,AAAC,WACC,EAAW,IACX,EAAO,IACP,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,kCAAmC,CAAE,MAAO,UAAW,GACzE,EAAO,MAAM,EAAI,IAAI,GACrB,EAAO,EAAQ,KAAK,KAAK,CAAC,GAA6D,CAAC,EAC9F,GAAI,CAAC,EAAI,EAAE,CAAE,MAAM,AAAI,MAAM,EAAK,KAAK,EAAI,yBAC3C,IAAM,EAAI,OAAO,EAAK,KAAK,EAAI,IAAI,IAAI,GAC7B,QAAN,GAAqB,WAAN,GAAwB,OAAN,EAAY,EAAQ,GACpD,EAAQ,SACf,CAAE,MAAO,EAAY,CACnB,EAAO,aAAa,MAAQ,EAAE,OAAO,CAAG,OAAO,GACjD,QAAU,CACR,GAAW,EACb,EACF,CAAC,EACH,EAAG,EAAE,EAuBL,IAAM,EAAS,CAAC,CAAE,OAAK,OAAE,CAAK,MAAE,CAAI,CAAgD,GAClF,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAM,EAAK,GACpB,SAAU,GAAW,EACrB,UAAW,CAAC,wEAAwE,EAClF,IAAS,EAAQ,sCAAwC,GAAA,CACzD,WAEF,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sDACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,uBAAe,IAC7B,IAAS,EACR,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iEAAwD,aACrE,QAEN,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,8DAAsD,OAIzE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,MAAM,MAAM,MAAM,MAAM,KAAK,yDACrC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,MAAM,SACN,MAAM,mBACN,KAAK,sGAEP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,MAAM,KAAK,MAAM,KAAK,KAAK,iFAElC,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6FACZ,IAED,OAGV"}
@@ -1,12 +0,0 @@
1
- module.exports=[35279,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(1760),e=a.i(50944),f=a.i(35112);function g({open:a,teamId:c,onClose:d,onConfirm:e,busy:g}){return a?(0,f.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[200]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-black/60",onClick: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-lg 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:"Delete Team"}),(0,b.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Delete team ",(0,b.jsx)("code",{className:"font-mono",children:c}),"? This will remove the team workspace, agents, and stamped cron jobs."]}),(0,b.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick: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)] hover:bg-white/10",children:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:g,onClick:e,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:g?"Deleting…":"Delete"})]})]})})})]}),document.body):null}function h({open:a,teamId:c,recipeId:d,onClose:e,onConfirm:g,busy:h}){return a?(0,f.createPortal)((0,b.jsxs)("div",{className:"fixed inset-0 z-[200]",children:[(0,b.jsx)("div",{className:"fixed inset-0 bg-black/60",onClick:e}),(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-lg 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:"Publish changes"}),(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."]})]}),(0,b.jsxs)("div",{className:"mt-6 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:e,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:"Cancel"}),(0,b.jsx)("button",{type:"button",disabled:h,onClick:g,className:"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:h?"Publishing…":"Publish changes"})]})]})})})]}),document.body):null}var i=a.i(61889);function j({teamId:a}){let f=(0,e.useRouter)(),[j,k]=(0,c.useState)([]),[l,m]=(0,c.useState)(""),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(a),[v,w]=(0,c.useState)(a),[x,y]=(0,c.useState)(""),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)("recipe"),[D,E]=(0,c.useState)(!0),[F,G]=(0,c.useState)(!1),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(!1),[L,M]=(0,c.useState)(!1),[N,O]=(0,c.useState)(""),P=(0,i.useToast)(),[Q,R]=(0,c.useState)(!1),[S,T]=(0,c.useState)(!1),[U,V]=(0,c.useState)(null);function W(a,b="info"){let c=String(a??"").trim();c&&P.push({kind:b,message:c})}let[X,Y]=(0,c.useState)([]),[Z,$]=(0,c.useState)(!1),[_,aa]=(0,c.useState)(""),[ab,ac]=(0,c.useState)(!1),[ad,ae]=(0,c.useState)("SOUL.md"),[af,ag]=(0,c.useState)(""),[ah,ai]=(0,c.useState)([]),[aj,ak]=(0,c.useState)(!1),[al,am]=(0,c.useState)([]),[an,ao]=(0,c.useState)(!1),ap=(0,c.useMemo)(()=>{let a=String(x??"");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[]}},[x]),[aq,ar]=(0,c.useState)(""),[as,at]=(0,c.useState)(""),[au,av]=(0,c.useState)(""),aw=(0,c.useMemo)(()=>{let a=("__custom__"===aq?as:aq).trim();return a||""},[aq,as]),[ax,ay]=(0,c.useState)([]),[az,aA]=(0,c.useState)([]),[aB,aC]=(0,c.useState)(!1),[aD,aE]=(0,c.useState)(""),[aF,aG]=(0,c.useState)(!1),[aH,aI]=(0,c.useState)(""),[aJ,aK]=(0,c.useState)(""),aL=(0,c.useMemo)(()=>j.filter(a=>"team"===a.kind),[j]),aM=(0,c.useMemo)(()=>j.find(a=>a.id===t&&"workspace"===a.source)??j.find(a=>a.id===t)??null,[j,t]),aN=!!a.trim(),aO=!!t.trim(),aP=j.some(a=>a.id===t&&"workspace"===a.source),aQ=!!(aM?.source==="builtin"&&!aP);async function aR(){let a=t.trim();if(a){M(!0),O("");try{let b=await fetch(`/api/recipes/${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json();if(!b.ok)throw Error(c.error||`Recipe not found: ${a}. Save first to create it.`);let d=c.recipe;y(d.content),A("string"==typeof c.recipeHash?c.recipeHash:null)}catch(a){O(a instanceof Error?a.message:String(a))}finally{M(!1)}}}async function aS(a){let b=l.trim(),c=String(a.toId??t).trim(),d=String(a.toName??v).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");let g=await fetch("/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})}),h=await g.json();if(!g.ok)throw Error(h.error||"Save failed");return h}async function aT(a,b){G(!0),W("");try{let c=await aS({overwrite:a,...b});if(c.scaffold&&!c.scaffold.ok&&W(`Scaffold failed (recipe was still cloned): ${c.scaffold.error||"Unknown error"}`,"error"),x.trim()&&x.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),f=d.split("\n"),g=[],h=!1,i=!1,j=!1;for(let a=0;a<f.length;a++){let c=f[a];if(/^team\s*:\s*$/i.test(c)){h=!0,i=!0,g.push(c);continue}if(h&&/^\S/.test(c)&&(h=!1),h&&/^\s+teamId\s*:/i.test(c)){g.push(` teamId: ${b}`),j=!0;continue}g.push(c)}if(i&&!j){let a=[];for(let c=0;c<g.length;c++)a.push(g[c]),/^team\s*:\s*$/i.test(g[c])&&(a.push(` teamId: ${b}`),j=!0);return`---
2
- ${a.join("\n")}
3
- ---
4
- ${e}`}return`---
5
- ${g.join("\n")}
6
- ---
7
- ${e}`}(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),f=d.split("\n"),g=!1,h=f.map(a=>/^id\s*:/i.test(a)?(g=!0,`id: ${b}`):a);return g||h.unshift(`id: ${b}`),`---
8
- ${h.join("\n")}
9
- ---
10
- ${e}`}(x,t.trim()),t.trim()),b=await fetch(`/api/recipes/${encodeURIComponent(t.trim())}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:a})}),c=await b.json();if(!b.ok)throw Error(c.error||"Save failed");y(a)}else y(c.content);try{let a=await fetch(`/api/recipes/${encodeURIComponent(t.trim())}`,{cache:"no-store"}),b=await a.json();a.ok&&"string"==typeof b.recipeHash&&A(b.recipeHash)}catch{A(null)}W(`Saved team recipe: ${c.filePath}`,"success")}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{G(!1)}}async function aU(b){G(!0),aa("");try{let c=await fetch(`/api/teams/file?teamId=${encodeURIComponent(a)}&name=${encodeURIComponent(b)}`,{cache:"no-store"}),d=await c.json();if(!c.ok||!d.ok)throw Error(d.error||"Failed to load file");ae(b),ag(String(d.content??""))}catch(a){aa(a instanceof Error?a.message:String(a))}finally{G(!1)}}async function aV(){G(!0),aa("");try{let b=await fetch("/api/teams/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,name:ad,content:af})}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Failed to save file")}catch(a){aa(a instanceof Error?a.message:String(a))}finally{G(!1)}}return((0,c.useEffect)(()=>{u(a),w(a),y(""),A(null),V(null),T(!1),R(!1)},[a]),(0,c.useEffect)(()=>{(async()=>{E(!0);try{let[b,c]=await Promise.all([fetch("/api/recipes",{cache:"no-store"}),fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"})]),d=(await b.json()).recipes??[];k(d);let e=null;try{let a=await c.json();if(c.ok&&a.ok&&a.meta&&a.meta.recipeId){let b=a.meta;e={recipeId:String(b.recipeId),recipeName:"string"==typeof b.recipeName?b.recipeName:void 0};let c="string"==typeof b.recipeHash?b.recipeHash:null;V(c)}else V(null)}catch{}if(e)o(e.recipeId),q(e.recipeName??null),s(!1),m(e.recipeId);else{o(null),q(null),s(!0);let b=d.find(b=>"team"===b.kind&&b.id===a),c=d.find(a=>"team"===a.kind),e=b??c;e&&m(e.id)}E(!1),(async()=>{$(!0),ak(!0),ao(!0),aC(!0);try{let[b,c,d,e,f]=await Promise.all([fetch(`/api/teams/files?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),fetch(`/api/cron/jobs?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),fetch("/api/agents",{cache:"no-store"}),fetch(`/api/teams/skills?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),fetch("/api/skills/available",{cache:"no-store"})]);try{let a=await b.json();if(b.ok&&a.ok){let b=Array.isArray(a.files)?a.files:[];Y(b.map(a=>({name:String(a.name??""),missing:!!a.missing,required:!!a.required,rationale:"string"==typeof a.rationale?a.rationale:void 0})))}}catch{}try{let a=await c.json();if(c.ok&&a.ok){let b=Array.isArray(a.jobs)?a.jobs:[];ai(b)}}catch{}try{let b=await d.json();if(d.ok){let c=(Array.isArray(b.agents)?b.agents:[]).filter(b=>String(b.id??"").startsWith(`${a}-`));am(c.map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0})))}}catch{}try{let a=await e.json();e.ok&&a.ok&&ay(Array.isArray(a.skills)?a.skills:[])}catch{}try{let a=await f.json();if(f.ok&&a.ok){let b=Array.isArray(a.skills)?a.skills:[];aA(b),aE(a=>{let c=String(a??"").trim();return c&&b.includes(c)?c:b[0]??""})}}catch{}}finally{$(!1),ak(!1),ao(!1),aC(!1)}})()}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{E(!1)}})()},[a]),(0,c.useEffect)(()=>{!t.trim()||x.trim()||L||aR()},[t]),D)?(0,b.jsx)("div",{className:"ck-glass mx-auto max-w-4xl p-6",children:"Loading…"}):(0,b.jsxs)("div",{className:"ck-glass mx-auto max-w-6xl 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:[{id:"recipe",label:"Recipe"},{id:"agents",label:"Agents"},{id:"skills",label:"Skills"},{id:"cron",label:"Cron"},{id:"files",label:"Files"}].map(a=>(0,b.jsx)("button",{onClick:()=>C(a.id),className:B===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"===B?(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",children:[(0,b.jsxs)("div",{className:"ck-glass-strong p-4",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[color:var(--ck-text-primary)]",children:"Custom recipe target"}),(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:t,onChange:a=>u(a.target.value),disabled:!1,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.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["This is the ",(0,b.jsx)("b",{children:"custom recipe id"})," that will be created/overwritten 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:v,onChange:a=>w(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-4 grid grid-cols-1 gap-2",children:[(0,b.jsx)("button",{type:"button",disabled:F||!aN||!aO||aQ,onClick:()=>aT(!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)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50",children:F?"Saving…":"Save"}),(0,b.jsx)("button",{type:"button",disabled:F||!aN||!aO||aQ||!z||!U||z===U,onClick:()=>T(!0),className:"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-emerald-500 active:bg-emerald-700 disabled:opacity-50",children:H?"Publishing…":"Publish changes"}),(0,b.jsx)("button",{type:"button",disabled:F,onClick:()=>R(!0),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:"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:l,onChange:a=>m(a.target.value),children:aL.map(a=>(0,b.jsxs)("option",{value:a.id,children:[a.id," (",a.source,")"]},`${a.source}:${a.id}`))}),n?(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("code",{children:n}),p?` (${p})`:""]}):r?(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"Provenance not found for this team. The parent recipe above is a best-guess."}):null]}),(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.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Save"})," writes/overwrites the custom recipe file identified by “Team id”."]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Publish changes"})," re-scaffolds this team from your current custom recipe and applies config (complete overwrite)."]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Delete Team"})," runs the safe uninstall command (",(0,b.jsx)("code",{children:"openclaw recipes remove-team"}),")."]})]})]})]}):null,"agents"===B?(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:t}),")."]}),(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:aq,onChange:a=>{let b=a.target.value;if(ar(b),"__custom__"===b){at(""),av("");return}at("");let c=ap.find(a=>a.role===b);av(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…"}),ap.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__"===aq?(0,b.jsx)("input",{value:as,onChange:a=>at(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:au,onChange:a=>av(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:F||!aw,onClick:async()=>{G(!0);try{try{await aS({overwrite:!1})}catch(b){let a=b instanceof Error?b.message:String(b);if(!/Recipe id already exists:/i.test(a))throw b}let d=await fetch("/api/recipes/team-agents",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify("__custom__"===aq?{recipeId:t.trim(),op:"add",role:aw,name:au}:{recipeId:t.trim(),op:"addLike",baseRole:aw,teamId:a,name:au})}),e=await d.json();if(!d.ok||!e.ok)throw Error(e.error||"Failed updating agents list");y(String(e.content??x));try{let b=await fetch("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:t.trim(),teamId:a,applyConfig:!0,overwrite:!1,allowExisting:!0,cronInstallChoice:"no"})}),c=await b.json();if(!b.ok)throw Error(c.error||"Failed to apply config / scaffold team")}catch(a){W(a instanceof Error?a.message:String(a),"error")}let f="string"==typeof e.addedAgentId?e.addedAgentId:"";async function b(){let b=await fetch("/api/agents",{cache:"no-store"}),c=await b.json();if(!b.ok)return{ok:!1,hasExpected:!1,agents:[]};let d=(Array.isArray(c.agents)?c.agents:[]).filter(b=>String(b.id??"").startsWith(`${a}-`)).map(a=>({id:String(a.id??""),identityName:"string"==typeof a.identityName?a.identityName:void 0})),e=!!f&&d.some(a=>a.id===f);return{ok:!0,hasExpected:e,agents:d}}async function c(a){let c=Date.now();for(;Date.now()-c<a;){try{let a=await b();if(a.ok&&(am(a.agents),!f||a.hasExpected))return!0}catch{}await new Promise(a=>setTimeout(a,500))}return!1}if(!await c(5e3)&&f){try{fetch("/api/gateway/restart",{method:"POST"})}catch{}await c(1e4)}W(`Updated agents list in ${t}`,"success")}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{G(!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:"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.jsx)("ul",{className:"mt-2 space-y-2",children:al.length?al.map(c=>(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:c.identityName||c.id}),(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:c.id})]}),(0,b.jsx)("a",{className:"text-sm font-medium text-[color:var(--ck-accent-red)] hover:text-[color:var(--ck-accent-red-hover)]",href:`/agents/${encodeURIComponent(c.id)}?returnTo=${encodeURIComponent(`/teams/${a}?tab=agents`)}`,children:"Edit"})]},c.id)):an?(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No team agents detected."})})]})]}):null,"skills"===B?(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.jsxs)("p",{className:"mt-2 text-sm text-[color:var(--ck-text-secondary)]",children:["Skills installed in this ",(0,b.jsx)("strong",{children:"team"})," workspace (",(0,b.jsx)("code",{children:"skills/"}),"). These are available to all agents in the team. 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:ax.length?ax.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:aD,onChange:a=>aE(a.target.value),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)]",disabled:aF||aB||!az.length,children:az.length?az.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:aF||aB||!aD,onClick:async()=>{aG(!0),aI(""),aK("");try{let b=await fetch("/api/teams/skills/install",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,skill:aD})}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Failed to install skill");aI(`Installed skill: ${aD}`);let d=await fetch(`/api/teams/skills?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),e=await d.json();d.ok&&e.ok&&ay(Array.isArray(e.skills)?e.skills:[])}catch(a){aK(a instanceof Error?a.message:String(a))}finally{aG(!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:aF?"Adding…":"Add"})]}),aJ?(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:aJ}):null,aH?(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:aH}):null,(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["This uses ",(0,b.jsxs)("code",{children:["openclaw recipes install-skill <skill> --team-id ",a," --yes"]}),"."]})]})]}):null,"cron"===B?(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.jsx)("ul",{className:"mt-3 space-y-3",children:ah.length?ah.map(a=>{let c=String(a.id??a.jobId??"").trim(),d=c||String(a.name??"job"),e=String(a.name??a.id??a.jobId??"(unnamed)"),f=a.enabled??a.state?.enabled;async function g(a){G(!0);try{let b=await fetch("/api/cron/job",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:c,action:a})}),d=await b.json();if(!b.ok||!d.ok)throw Error(d.error||"Cron action failed");W(`Cron ${a}: ${e}`,"success")}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{G(!1)}}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:e}),(0,b.jsxs)("div",{className:"mt-1 text-xs text-[color:var(--ck-text-secondary)]",children:["Enabled: ",String(f??"?")]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,b.jsx)("button",{disabled:F||!c,onClick:()=>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:F||!c,onClick:()=>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:F||!c,onClick:()=>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)}):aj?(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"No cron jobs detected for this team."})})]}):null,"files"===B?(0,b.jsxs)("div",{className:"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-3",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:"Team files"}),(0,b.jsxs)("label",{className:"flex items-center gap-2 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("input",{type:"checkbox",checked:ab,onChange:a=>ac(a.target.checked)}),"Show optional"]})]}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"Default view hides optional missing files to reduce noise."}),(0,b.jsxs)("ul",{className:"mt-3 space-y-1",children:[Z?(0,b.jsx)("li",{className:"text-sm text-[color:var(--ck-text-secondary)]",children:"Loading…"}):null,X.filter(a=>!!ab||a.required||!a.missing).map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("button",{onClick:()=>aU(a.name),className:ad===a.name?"w-full rounded-[var(--ck-radius-sm)] bg-white/10 px-3 py-2 text-left text-sm text-[color:var(--ck-text-primary)]":"w-full rounded-[var(--ck-radius-sm)] px-3 py-2 text-left text-sm text-[color:var(--ck-text-secondary)] hover:bg-white/5",children:[(0,b.jsx)("span",{className:a.required?"text-[color:var(--ck-text-primary)]":"text-[color:var(--ck-text-secondary)]",children:a.name}),(0,b.jsx)("span",{className:"ml-2 text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:a.required?"required":"optional"}),a.missing?(0,b.jsx)("span",{className:"ml-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"missing"}):null]})},a.name))]})]}),(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: ",ad]}),(0,b.jsx)("button",{disabled:F,onClick:aV,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:F?"Saving…":"Save file"})]}),_?(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:_}):null,(0,b.jsx)("textarea",{value:af,onChange:a=>ag(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})]})]}):null,"recipe"===B?(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"}),N?(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:N}):null,(0,b.jsx)("textarea",{value:x,onChange:a=>{y(a.target.value),A(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})]}):null,(0,b.jsx)(h,{open:S,teamId:a,recipeId:t,busy:H,onClose:()=>T(!1),onConfirm:async()=>{I(!0);try{let b=await fetch("/api/scaffold",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kind:"team",recipeId:t.trim(),teamId:a,overwrite:!0,applyConfig:!0})}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Publish failed");try{let b=await fetch(`/api/teams/meta?teamId=${encodeURIComponent(a)}`,{cache:"no-store"}),c=await b.json();b.ok&&c.ok&&c.meta&&"string"==typeof c.meta.recipeHash&&V(c.meta.recipeHash)}catch{}T(!1),W("Published changes to active team","success")}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{I(!1)}}}),(0,b.jsx)(g,{open:Q,teamId:a,busy:J,onClose:()=>R(!1),onConfirm:async()=>{K(!0);try{let b=await fetch("/api/teams/remove-team",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a})}),c=await b.json();if(!b.ok||!c.ok)throw Error(c.error||"Delete failed");W("Deleted team successfully","success"),R(!1),setTimeout(()=>f.push("/"),250)}catch(a){W(a instanceof Error?a.message:String(a),"error")}finally{K(!1)}}})]})}a.s(["default",()=>j],35279)}];
11
-
12
- //# sourceMappingURL=src_app_teams_%5BteamId%5D_team-editor_tsx_2900b91d._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app/teams/%5BteamId%5D/team-editor.tsx","../../../../src/app/teams/%5BteamId%5D/DeleteTeamModal.tsx","../../../../src/app/teams/%5BteamId%5D/PublishChangesModal.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { parse as parseYaml } from \"yaml\";\nimport { useRouter } from \"next/navigation\";\nimport { DeleteTeamModal } from \"./DeleteTeamModal\";\nimport { PublishChangesModal } from \"./PublishChangesModal\";\nimport { useToast } from \"@/components/ToastProvider\";\n\ntype RecipeListItem = {\n id: string;\n name: string;\n kind: \"agent\" | \"team\";\n source: \"builtin\" | \"workspace\";\n};\n\ntype RecipeDetail = RecipeListItem & {\n content: string;\n filePath: string | null;\n};\n\n\nfunction forceFrontmatterId(md: string, id: string) {\n if (!md.startsWith(\"---\\n\")) return md;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return md;\n const fm = md.slice(4, end);\n const body = md.slice(end + 5);\n\n const lines = fm.split(\"\\n\");\n let found = false;\n const nextLines = lines.map((line) => {\n if (/^id\\s*:/i.test(line)) {\n found = true;\n return `id: ${id}`;\n }\n return line;\n });\n if (!found) nextLines.unshift(`id: ${id}`);\n\n return `---\\n${nextLines.join(\"\\n\")}\\n---\\n${body}`;\n}\n\nfunction forceFrontmatterTeamTeamId(md: string, teamId: string) {\n // Best-effort YAML frontmatter patch without reparsing the whole recipe.\n // Goal: ensure `team: { teamId: <id> }` matches the custom recipe id after Save.\n if (!md.startsWith(\"---\\n\")) return md;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return md;\n\n const fm = md.slice(4, end);\n const body = md.slice(end + 5);\n const lines = fm.split(\"\\n\");\n\n const next: string[] = [];\n let inTeam = false;\n let sawTeamBlock = false;\n let patched = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (/^team\\s*:\\s*$/i.test(line)) {\n inTeam = true;\n sawTeamBlock = true;\n next.push(line);\n continue;\n }\n\n // Leave team block when indentation returns to column 0.\n if (inTeam && /^\\S/.test(line)) {\n inTeam = false;\n }\n\n if (inTeam && /^\\s+teamId\\s*:/i.test(line)) {\n next.push(` teamId: ${teamId}`);\n patched = true;\n continue;\n }\n\n next.push(line);\n }\n\n // If there was a team block but no teamId, insert it right after `team:`.\n if (sawTeamBlock && !patched) {\n const out: string[] = [];\n for (let i = 0; i < next.length; i++) {\n out.push(next[i]);\n if (/^team\\s*:\\s*$/i.test(next[i])) {\n out.push(` teamId: ${teamId}`);\n patched = true;\n }\n }\n return `---\\n${out.join(\"\\n\")}\\n---\\n${body}`;\n }\n\n return `---\\n${next.join(\"\\n\")}\\n---\\n${body}`;\n}\n\nexport default function TeamEditor({ teamId }: { teamId: string }) {\n const router = useRouter();\n const [recipes, setRecipes] = useState<RecipeListItem[]>([]);\n const [fromId, setFromId] = useState<string>(\"\");\n const [lockedFromId, setLockedFromId] = useState<string | null>(null);\n const [lockedFromName, setLockedFromName] = useState<string | null>(null);\n const [provenanceMissing, setProvenanceMissing] = useState(false);\n const [toId, setToId] = useState<string>(teamId);\n const [toName, setToName] = useState<string>(teamId);\n const [content, setContent] = useState<string>(\"\");\n const [loadedRecipeHash, setLoadedRecipeHash] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState<\"recipe\" | \"agents\" | \"skills\" | \"cron\" | \"files\">(\"recipe\");\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [publishing, setPublishing] = useState(false);\n const [deleting, setDeleting] = useState(false);\n const [loadingSource, setLoadingSource] = useState(false);\n const [recipeLoadError, setRecipeLoadError] = useState<string>(\"\");\n const toast = useToast();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [publishOpen, setPublishOpen] = useState(false);\n\n const [teamMetaRecipeHash, setTeamMetaRecipeHash] = useState<string | null>(null);\n\n function flashMessage(next: string, kind: \"success\" | \"error\" | \"info\" = \"info\") {\n const msg = String(next ?? \"\").trim();\n if (!msg) return;\n toast.push({ kind, message: msg });\n }\n\n const [teamFiles, setTeamFiles] = useState<Array<{ name: string; missing: boolean; required: boolean; rationale?: string }>>([]);\n const [teamFilesLoading, setTeamFilesLoading] = useState(false);\n const [teamFileError, setTeamFileError] = useState<string>(\"\");\n const [showOptionalFiles, setShowOptionalFiles] = useState(false);\n const [fileName, setFileName] = useState<string>(\"SOUL.md\");\n const [fileContent, setFileContent] = useState<string>(\"\");\n\n const [cronJobs, setCronJobs] = useState<unknown[]>([]);\n const [cronLoading, setCronLoading] = useState(false);\n\n const [teamAgents, setTeamAgents] = useState<Array<{ id: string; identityName?: string }>>([]);\n const [teamAgentsLoading, setTeamAgentsLoading] = useState(false);\n\n const recipeAgents = useMemo(() => {\n const md = String(content ?? \"\");\n if (!md.startsWith(\"---\\n\")) return [] as Array<{ role: string; name?: string }>;\n const end = md.indexOf(\"\\n---\\n\", 4);\n if (end === -1) return [] as Array<{ role: string; name?: string }>;\n const fmText = md.slice(4, end + 1);\n try {\n const fm = (parseYaml(fmText) ?? {}) as { agents?: unknown };\n const agents = Array.isArray(fm.agents) ? fm.agents : [];\n return agents\n .map((a) => a as { role?: unknown; name?: unknown })\n .map((a) => ({ role: String(a.role ?? \"\").trim(), name: typeof a.name === \"string\" ? a.name : undefined }))\n .filter((a) => Boolean(a.role));\n } catch {\n return [] as Array<{ role: string; name?: string }>;\n }\n }, [content]);\n\n const [newRole, setNewRole] = useState<string>(\"\");\n const [customRole, setCustomRole] = useState<string>(\"\");\n const [newRoleName, setNewRoleName] = useState<string>(\"\");\n\n const derivedRole = useMemo(() => {\n const v = (newRole === \"__custom__\" ? customRole : newRole).trim();\n if (!v) return \"\";\n return v;\n }, [newRole, customRole]);\n\n const [skillsList, setSkillsList] = useState<string[]>([]);\n const [availableSkills, setAvailableSkills] = useState<string[]>([]);\n const [skillsLoading, setSkillsLoading] = useState(false);\n const [selectedSkill, setSelectedSkill] = useState<string>(\"\");\n const [installingSkill, setInstallingSkill] = useState(false);\n const [teamSkillMsg, setTeamSkillMsg] = useState<string>(\"\");\n const [teamSkillError, setTeamSkillError] = useState<string>(\"\");\n\n const teamRecipes = useMemo(() => recipes.filter((r) => r.kind === \"team\"), [recipes]);\n\n const toRecipe = useMemo(() => {\n // Prefer the workspace recipe when both builtin + workspace exist for the same id.\n const ws = recipes.find((r) => r.id === toId && r.source === \"workspace\");\n return ws ?? recipes.find((r) => r.id === toId) ?? null;\n }, [recipes, toId]);\n\n const teamIdValid = Boolean(teamId.trim());\n const targetIdValid = Boolean(toId.trim());\n const hasWorkspaceOverride = recipes.some((r) => r.id === toId && r.source === \"workspace\");\n const targetIsBuiltin = Boolean(toRecipe?.source === \"builtin\" && !hasWorkspaceOverride);\n // The \"Recipe id\" field is the workspace recipe id target.\n // It should be editable, and we must not auto-prefix/modify what the user types.\n const canEditTargetId = true;\n\n // Initialize defaults whenever we navigate to a new team.\n useEffect(() => {\n setToId(teamId);\n setToName(teamId);\n setContent(\"\");\n setLoadedRecipeHash(null);\n setTeamMetaRecipeHash(null);\n setPublishOpen(false);\n setDeleteOpen(false);\n }, [teamId]);\n\n useEffect(() => {\n (async () => {\n setLoading(true);\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 json = await recipesRes.json();\n const list = (json.recipes ?? []) as RecipeListItem[];\n setRecipes(list);\n\n // Note: do not sync toName/toId from remote state here.\n // Edits to the target id/name must not trigger reload loops while typing.\n\n // Prefer a recipe that corresponds to this teamId.\n // Primary source of truth: provenance stored in the team workspace.\n // Fallback: heuristic matching (legacy teams without provenance).\n let locked: { recipeId: string; recipeName?: string } | null = null;\n try {\n const metaJson = await metaRes.json();\n if (metaRes.ok && metaJson.ok && metaJson.meta && (metaJson.meta as { recipeId?: unknown }).recipeId) {\n const m = metaJson.meta as { recipeId?: unknown; recipeName?: unknown; recipeHash?: unknown };\n locked = {\n recipeId: String(m.recipeId),\n recipeName: typeof m.recipeName === \"string\" ? m.recipeName : undefined,\n };\n const h = typeof m.recipeHash === \"string\" ? m.recipeHash : null;\n setTeamMetaRecipeHash(h);\n } else {\n setTeamMetaRecipeHash(null);\n }\n } catch {\n // ignore\n }\n\n if (locked) {\n setLockedFromId(locked.recipeId);\n setLockedFromName(locked.recipeName ?? null);\n setProvenanceMissing(false);\n setFromId(locked.recipeId);\n } else {\n setLockedFromId(null);\n setLockedFromName(null);\n setProvenanceMissing(true);\n\n const preferred = list.find((r) => r.kind === \"team\" && r.id === teamId);\n const fallback = list.find((r) => r.kind === \"team\");\n const pick = preferred ?? fallback;\n if (pick) setFromId(pick.id);\n }\n\n // Render ASAP; load the heavier per-tab data in the background.\n setLoading(false);\n\n void (async () => {\n setTeamFilesLoading(true);\n setCronLoading(true);\n setTeamAgentsLoading(true);\n setSkillsLoading(true);\n\n try {\n const [filesRes, cronRes, agentsRes, skillsRes, availableSkillsRes] = await Promise.all([\n fetch(`/api/teams/files?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n fetch(`/api/cron/jobs?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n fetch(\"/api/agents\", { cache: \"no-store\" }),\n fetch(`/api/teams/skills?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" }),\n fetch(\"/api/skills/available\", { cache: \"no-store\" }),\n ]);\n\n try {\n const filesJson = (await filesRes.json()) as { ok?: boolean; files?: unknown[] };\n if (filesRes.ok && filesJson.ok) {\n const files = Array.isArray(filesJson.files) ? filesJson.files : [];\n setTeamFiles(\n files.map((f) => {\n const entry = f as { name?: unknown; missing?: unknown; required?: unknown; rationale?: unknown };\n return {\n name: String(entry.name ?? \"\"),\n missing: Boolean(entry.missing),\n required: Boolean(entry.required),\n rationale: typeof entry.rationale === \"string\" ? entry.rationale : undefined,\n };\n }),\n );\n }\n } catch {\n // ignore\n }\n\n try {\n const cronJson = (await cronRes.json()) as { ok?: boolean; jobs?: unknown[] };\n if (cronRes.ok && cronJson.ok) {\n const all = Array.isArray(cronJson.jobs) ? cronJson.jobs : [];\n setCronJobs(all);\n }\n } catch {\n // ignore\n }\n\n try {\n const agentsJson = (await agentsRes.json()) as { agents?: unknown[] };\n if (agentsRes.ok) {\n const all = Array.isArray(agentsJson.agents) ? agentsJson.agents : [];\n // Team membership for agents is by id convention: <teamId>-<role>\n const filtered = all.filter((a) => String((a as { id?: unknown }).id ?? \"\").startsWith(`${teamId}-`));\n setTeamAgents(\n filtered.map((a) => {\n const agent = a as { id?: unknown; identityName?: unknown };\n return { id: String(agent.id ?? \"\"), identityName: typeof agent.identityName === \"string\" ? agent.identityName : undefined };\n }),\n );\n }\n } catch {\n // ignore\n }\n\n try {\n const skillsJson = await skillsRes.json();\n if (skillsRes.ok && skillsJson.ok) {\n setSkillsList(Array.isArray(skillsJson.skills) ? (skillsJson.skills as string[]) : []);\n }\n } catch {\n // ignore\n }\n\n try {\n const availableSkillsJson = (await availableSkillsRes.json()) as { ok?: boolean; skills?: unknown[] };\n if (availableSkillsRes.ok && availableSkillsJson.ok) {\n const list = Array.isArray(availableSkillsJson.skills) ? (availableSkillsJson.skills as string[]) : [];\n setAvailableSkills(list);\n setSelectedSkill((prev) => {\n const p = String(prev ?? \"\").trim();\n if (p && list.includes(p)) return p;\n return list[0] ?? \"\";\n });\n }\n } catch {\n // ignore\n }\n } finally {\n setTeamFilesLoading(false);\n setCronLoading(false);\n setTeamAgentsLoading(false);\n setSkillsLoading(false);\n }\n })();\n } catch (e: unknown) {\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n } finally {\n // If the happy-path already flipped loading=false early, this is a no-op.\n setLoading(false);\n }\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [teamId]);\n\n async function onLoadTeamRecipeMarkdown() {\n const id = toId.trim();\n if (!id) return;\n setLoadingSource(true);\n setRecipeLoadError(\"\");\n try {\n const res = await fetch(`/api/recipes/${encodeURIComponent(id)}`, { cache: \"no-store\" });\n const json = await res.json();\n if (!res.ok) {\n // Usually means the workspace recipe doesn't exist yet.\n throw new Error(json.error || `Recipe not found: ${id}. Save first to create it.`);\n }\n const r = json.recipe as RecipeDetail;\n setContent(r.content);\n setLoadedRecipeHash(typeof json.recipeHash === \"string\" ? json.recipeHash : null);\n } catch (e: unknown) {\n setRecipeLoadError(e instanceof Error ? e.message : String(e));\n } finally {\n setLoadingSource(false);\n }\n }\n\n // Load raw recipe markdown by default (no \"click to load\").\n useEffect(() => {\n const id = toId.trim();\n if (!id) return;\n if (content.trim()) return;\n if (loadingSource) return;\n void onLoadTeamRecipeMarkdown();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [toId]);\n\n async function ensureCustomRecipeExists(args: { overwrite: boolean; toId?: string; toName?: string; scaffold?: boolean }) {\n const f = fromId.trim();\n const id = String(args.toId ?? toId).trim();\n const name = String(args.toName ?? toName).trim();\n const overwrite = Boolean(args.overwrite);\n const scaffold = Boolean(args.scaffold);\n\n if (!f) throw new Error(\"Source recipe id is required\");\n if (!id) throw new Error(\"Custom recipe id is required\");\n\n const res = await fetch(\"/api/recipes/clone\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ fromId: f, toId: id, toName: name || undefined, overwrite, scaffold }),\n });\n const json = await res.json();\n if (!res.ok) throw new Error(json.error || \"Save failed\");\n return json as { filePath: string; content: string; scaffold?: { ok: boolean; error?: string } | null };\n }\n\n async function onSaveCustom(overwrite: boolean, overrides?: { toId?: string; toName?: string; scaffold?: boolean }) {\n setSaving(true);\n flashMessage(\"\");\n try {\n const json = await ensureCustomRecipeExists({ overwrite, ...overrides });\n\n if (json.scaffold && !json.scaffold.ok) {\n flashMessage(`Scaffold failed (recipe was still cloned): ${json.scaffold.error || \"Unknown error\"}`, \"error\");\n }\n\n // If the user has edited the markdown, \"Save (overwrite)\" should persist both\n // the updated name (frontmatter) and the edited markdown.\n const hasEdits = Boolean(content.trim()) && content.trim() !== json.content.trim();\n\n if (hasEdits) {\n const nextContent = forceFrontmatterTeamTeamId(forceFrontmatterId(content, toId.trim()), toId.trim());\n const res = await fetch(`/api/recipes/${encodeURIComponent(toId.trim())}`, {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content: nextContent }),\n });\n const putJson = await res.json();\n if (!res.ok) throw new Error(putJson.error || \"Save failed\");\n setContent(nextContent);\n } else {\n setContent(json.content);\n }\n\n // Refresh hash from server so Publish can reliably detect unpropagated changes.\n try {\n const res = await fetch(`/api/recipes/${encodeURIComponent(toId.trim())}`, { cache: \"no-store\" });\n const next = await res.json();\n if (res.ok && typeof next.recipeHash === \"string\") setLoadedRecipeHash(next.recipeHash);\n } catch {\n setLoadedRecipeHash(null);\n }\n\n flashMessage(`Saved team recipe: ${json.filePath}`, \"success\");\n } catch (e: unknown) {\n const raw = e instanceof Error ? e.message : String(e);\n flashMessage(raw, \"error\");\n } finally {\n setSaving(false);\n }\n }\n\n async function onLoadTeamFile(name: string) {\n setSaving(true);\n setTeamFileError(\"\");\n try {\n const res = await fetch(\n `/api/teams/file?teamId=${encodeURIComponent(teamId)}&name=${encodeURIComponent(name)}`,\n { cache: \"no-store\" }\n );\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to load file\");\n setFileName(name);\n setFileContent(String(json.content ?? \"\"));\n } catch (e: unknown) {\n setTeamFileError(e instanceof Error ? e.message : String(e));\n } finally {\n setSaving(false);\n }\n }\n\n async function onSaveTeamFile() {\n setSaving(true);\n setTeamFileError(\"\");\n try {\n const res = await fetch(\"/api/teams/file\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, name: fileName, content: fileContent }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to save file\");\n // No toast; keep file-related messaging local.\n } catch (e: unknown) {\n setTeamFileError(e instanceof Error ? e.message : String(e));\n } finally {\n setSaving(false);\n }\n }\n\n // Initial load only gates the minimal state (recipes + team meta). Everything else streams in.\n if (loading) return <div className=\"ck-glass mx-auto max-w-4xl p-6\">Loading…</div>;\n\n return (\n <div className=\"ck-glass mx-auto max-w-6xl p-6 sm:p-8\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">Team editor</h1>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Bootstrap a <strong>custom team recipe</strong> for this installed team, without modifying builtin recipes.\n </p>\n\n <div className=\"mt-6 flex flex-wrap gap-2\">\n {(\n [\n { id: \"recipe\", label: \"Recipe\" },\n { id: \"agents\", label: \"Agents\" },\n { id: \"skills\", label: \"Skills\" },\n { id: \"cron\", label: \"Cron\" },\n { id: \"files\", label: \"Files\" },\n ] as const\n ).map((t) => (\n <button\n key={t.id}\n onClick={() => setActiveTab(t.id)}\n className={\n activeTab === t.id\n ? \"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)]\"\n : \"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\"\n }\n >\n {t.label}\n </button>\n ))}\n </div>\n\n {activeTab === \"recipe\" ? (\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Custom recipe target</div>\n <label className=\"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team id</label>\n <input\n value={toId}\n onChange={(e) => setToId(e.target.value)}\n disabled={!canEditTargetId}\n 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\"\n />\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n This is the <b>custom recipe id</b> that will be created/overwritten when you save.\n </div>\n\n <label className=\"mt-3 block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Team name</label>\n <input\n value={toName}\n onChange={(e) => setToName(e.target.value)}\n 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)]\"\n />\n\n <div className=\"mt-4 grid grid-cols-1 gap-2\">\n {/* Load team markdown removed (auto-loads by default). */}\n\n <button\n type=\"button\"\n disabled={saving || !teamIdValid || !targetIdValid || targetIsBuiltin}\n onClick={() => onSaveCustom(true)}\n className=\"rounded-[var(--ck-radius-sm)] bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[var(--ck-accent-red-hover)] active:bg-[var(--ck-accent-red-active)] disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Save\"}\n </button>\n\n <button\n type=\"button\"\n disabled={\n saving ||\n !teamIdValid ||\n !targetIdValid ||\n targetIsBuiltin ||\n // Enabled only when there are unpropagated (saved) changes.\n !loadedRecipeHash ||\n !teamMetaRecipeHash ||\n loadedRecipeHash === teamMetaRecipeHash\n }\n onClick={() => setPublishOpen(true)}\n className=\"rounded-[var(--ck-radius-sm)] bg-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] transition-colors hover:bg-emerald-500 active:bg-emerald-700 disabled:opacity-50\"\n >\n {publishing ? \"Publishing…\" : \"Publish changes\"}\n </button>\n\n <button\n type=\"button\"\n disabled={saving}\n onClick={() => setDeleteOpen(true)}\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)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-white/10 active:bg-white/15 disabled:opacity-50\"\n >\n Delete Team\n </button>\n </div>\n </div>\n\n <div className=\"ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Notes</div>\n\n <div className=\"mt-3 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Parent recipe (locked)</div>\n <select\n disabled\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)] disabled:opacity-70\"\n value={fromId}\n onChange={(e) => setFromId(e.target.value)}\n >\n {teamRecipes.map((r) => (\n <option key={`${r.source}:${r.id}`} value={r.id}>\n {r.id} ({r.source})\n </option>\n ))}\n </select>\n {lockedFromId ? (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n <code>{lockedFromId}</code>\n {lockedFromName ? ` (${lockedFromName})` : \"\"}\n </div>\n ) : provenanceMissing ? (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Provenance not found for this team. The parent recipe above is a best-guess.\n </div>\n ) : null}\n\n\n </div>\n\n <ul className=\"mt-4 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n <li>\n <strong>Save</strong> writes/overwrites the custom recipe file identified by “Team id”.\n </li>\n <li>\n <strong>Publish changes</strong> re-scaffolds this team from your current custom recipe and applies config (complete overwrite).\n </li>\n <li>\n <strong>Delete Team</strong> runs the safe uninstall command (<code>openclaw recipes remove-team</code>).\n </li>\n </ul>\n </div>\n </div>\n ) : null}\n\n {activeTab === \"agents\" ? (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Agents in this team</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Add/remove agents by updating the <code>agents:</code> list in your custom team recipe (<code>{toId}</code>).\n </p>\n\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Role</label>\n <select\n value={newRole}\n onChange={(e) => {\n const v = e.target.value;\n setNewRole(v);\n if (v === \"__custom__\") {\n setCustomRole(\"\");\n setNewRoleName(\"\");\n return;\n }\n setCustomRole(\"\");\n const match = recipeAgents.find((a) => a.role === v);\n setNewRoleName(match?.name || \"\");\n }}\n 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)]\"\n >\n <option value=\"\">Select…</option>\n {recipeAgents.map((a) => (\n <option key={a.role} value={a.role}>\n {a.name || a.role}\n </option>\n ))}\n <option value=\"__custom__\">Other…</option>\n </select>\n\n {newRole === \"__custom__\" ? (\n <input\n value={customRole}\n onChange={(e) => setCustomRole(e.target.value)}\n placeholder=\"role (e.g. researcher)\"\n className=\"mt-2 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-3 py-2 text-sm text-[color:var(--ck-text-primary)]\"\n />\n ) : null}\n\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n This writes to the recipe’s <code>agents:</code> list.\n </div>\n </div>\n\n <div className=\"sm:col-span-2\">\n <div>\n <label className=\"block text-xs font-medium text-[color:var(--ck-text-secondary)]\">Name (optional)</label>\n <input\n value={newRoleName}\n onChange={(e) => setNewRoleName(e.target.value)}\n placeholder=\"Onchain Researcher\"\n 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)]\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <button\n disabled={saving || !derivedRole}\n onClick={async () => {\n setSaving(true);\n try {\n try {\n await ensureCustomRecipeExists({ overwrite: false });\n } catch (e: unknown) {\n // If the custom recipe already exists, proceed; we only needed to ensure a workspace file exists.\n // Note: /api/recipes/clone returns 409 in this case.\n const msg = e instanceof Error ? e.message : String(e);\n if (!/Recipe id already exists:/i.test(msg)) throw e;\n }\n const res = await fetch(\"/api/recipes/team-agents\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(\n newRole === \"__custom__\"\n ? {\n recipeId: toId.trim(),\n op: \"add\",\n role: derivedRole,\n name: newRoleName,\n }\n : {\n recipeId: toId.trim(),\n op: \"addLike\",\n baseRole: derivedRole,\n teamId,\n name: newRoleName,\n },\n ),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed updating agents list\");\n setContent(String(json.content ?? content));\n\n // Immediately install/create the new agent by applying config and scaffolding missing files.\n // Do not overwrite existing recipe-managed files.\n try {\n const sync = await fetch(\"/api/scaffold\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n kind: \"team\",\n recipeId: toId.trim(),\n teamId,\n applyConfig: true,\n overwrite: false,\n allowExisting: true,\n cronInstallChoice: \"no\",\n }),\n });\n const syncJson = await sync.json();\n if (!sync.ok) throw new Error(syncJson.error || \"Failed to apply config / scaffold team\");\n } catch (e: unknown) {\n // Non-fatal: recipe change is still saved.\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n }\n\n // Poll for new agent to appear; only restart gateway if needed.\n const expectedAgentId = typeof (json as { addedAgentId?: unknown }).addedAgentId === \"string\" ? (json as { addedAgentId?: string }).addedAgentId : \"\";\n\n async function refreshAgentsOnce() {\n const agentsRes = await fetch(\"/api/agents\", { cache: \"no-store\" });\n const agentsJson = (await agentsRes.json()) as { agents?: unknown[] };\n if (!agentsRes.ok) return { ok: false as const, hasExpected: false as const, agents: [] as Array<{ id: string; identityName?: string }> };\n const all = Array.isArray(agentsJson.agents) ? agentsJson.agents : [];\n const filtered = all.filter((a) => String((a as { id?: unknown }).id ?? \"\").startsWith(`${teamId}-`));\n const mapped = filtered.map((a) => {\n const agent = a as { id?: unknown; identityName?: unknown };\n return {\n id: String(agent.id ?? \"\"),\n identityName: typeof agent.identityName === \"string\" ? agent.identityName : undefined,\n };\n });\n const hasExpected = expectedAgentId ? mapped.some((a) => a.id === expectedAgentId) : false;\n return { ok: true as const, hasExpected, agents: mapped };\n }\n\n async function pollAgents(maxMs: number) {\n const start = Date.now();\n while (Date.now() - start < maxMs) {\n try {\n const r = await refreshAgentsOnce();\n if (r.ok) {\n setTeamAgents(r.agents);\n if (!expectedAgentId || r.hasExpected) return true;\n }\n } catch {\n // ignore\n }\n await new Promise((res) => setTimeout(res, 500));\n }\n return false;\n }\n\n const appeared = await pollAgents(5000);\n if (!appeared && expectedAgentId) {\n // Background-ish restart: do it only if needed.\n try {\n void fetch(\"/api/gateway/restart\", { method: \"POST\" });\n } catch {\n // ignore\n }\n await pollAgents(10000);\n }\n\n flashMessage(`Updated agents list in ${toId}`, \"success\");\n } catch (e: unknown) {\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n } finally {\n setSaving(false);\n }\n }}\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)] disabled:opacity-50\"\n >\n Add agent\n </button>\n {/* remove-agent UI intentionally omitted */}\n </div>\n\n <div className=\"mt-6\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Detected installed team agents (read-only)</div>\n <ul className=\"mt-2 space-y-2\">\n {teamAgents.length ? (\n teamAgents.map((a) => (\n <li key={a.id} className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-[color:var(--ck-text-primary)]\">\n {a.identityName || a.id}\n </div>\n <div className=\"text-xs text-[color:var(--ck-text-secondary)]\">{a.id}</div>\n </div>\n <a\n className=\"text-sm font-medium text-[color:var(--ck-accent-red)] hover:text-[color:var(--ck-accent-red-hover)]\"\n href={`/agents/${encodeURIComponent(a.id)}?returnTo=${encodeURIComponent(`/teams/${teamId}?tab=agents`)}`}\n >\n Edit\n </a>\n </li>\n ))\n ) : teamAgentsLoading ? (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading…</li>\n ) : (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">No team agents detected.</li>\n )}\n </ul>\n </div>\n </div>\n ) : null}\n\n {activeTab === \"skills\" ? (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Skills</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Skills installed in this <strong>team</strong> workspace (<code>skills/</code>). These are available to all agents in the team.\n For agent-specific skills, open the agent from the Agents tab.\n </p>\n\n <div className=\"mt-4\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Installed</div>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-[color:var(--ck-text-secondary)]\">\n {skillsList.length ? skillsList.map((s) => <li key={s}>{s}</li>) : <li>None installed.</li>}\n </ul>\n </div>\n\n <div className=\"mt-5 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/15 p-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Add a skill</div>\n <div className=\"mt-2 flex flex-col gap-2 sm:flex-row sm:items-center\">\n <select\n value={selectedSkill}\n onChange={(e) => setSelectedSkill(e.target.value)}\n 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)]\"\n disabled={installingSkill || skillsLoading || !availableSkills.length}\n >\n {availableSkills.length ? (\n availableSkills.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))\n ) : (\n <option value=\"\">No skills found</option>\n )}\n </select>\n <button\n type=\"button\"\n disabled={installingSkill || skillsLoading || !selectedSkill}\n onClick={async () => {\n setInstallingSkill(true);\n setTeamSkillMsg(\"\");\n setTeamSkillError(\"\");\n try {\n const res = await fetch(\"/api/teams/skills/install\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, skill: selectedSkill }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to install skill\");\n setTeamSkillMsg(`Installed skill: ${selectedSkill}`);\n\n // Refresh installed list.\n const r = await fetch(`/api/teams/skills?teamId=${encodeURIComponent(teamId)}`, { cache: \"no-store\" });\n const j = await r.json();\n if (r.ok && j.ok) setSkillsList(Array.isArray(j.skills) ? (j.skills as string[]) : []);\n } catch (e: unknown) {\n setTeamSkillError(e instanceof Error ? e.message : String(e));\n } finally {\n setInstallingSkill(false);\n }\n }}\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)] disabled:opacity-50\"\n >\n {installingSkill ? \"Adding…\" : \"Add\"}\n </button>\n </div>\n {teamSkillError ? (\n <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\">\n {teamSkillError}\n </div>\n ) : null}\n\n {teamSkillMsg ? (\n <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\">\n {teamSkillMsg}\n </div>\n ) : null}\n\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n This uses <code>openclaw recipes install-skill &lt;skill&gt; --team-id {teamId} --yes</code>.\n </div>\n </div>\n </div>\n ) : null}\n\n {activeTab === \"cron\" ? (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Cron jobs (filtered by team name)</div>\n <ul className=\"mt-3 space-y-3\">\n {cronJobs.length ? (\n cronJobs.map((j) => {\n const job = j as {\n id?: unknown;\n jobId?: unknown;\n name?: unknown;\n enabled?: unknown;\n state?: { enabled?: unknown };\n };\n const id = String(job.id ?? job.jobId ?? \"\").trim();\n const key = id || String(job.name ?? \"job\");\n const label = String(job.name ?? job.id ?? job.jobId ?? \"(unnamed)\");\n const enabled = job.enabled ?? job.state?.enabled;\n\n async function act(action: \"enable\" | \"disable\" | \"run\") {\n setSaving(true);\n try {\n const res = await fetch(\"/api/cron/job\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ id, action }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Cron action failed\");\n flashMessage(`Cron ${action}: ${label}`, \"success\");\n } catch (e: unknown) {\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n } finally {\n setSaving(false);\n }\n }\n\n return (\n <li key={key} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n <div className=\"font-medium text-[color:var(--ck-text-primary)]\">{label}</div>\n <div className=\"mt-1 text-xs text-[color:var(--ck-text-secondary)]\">Enabled: {String(enabled ?? \"?\")}</div>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <button\n disabled={saving || !id}\n onClick={() => act(\"run\")}\n 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\"\n >\n Run\n </button>\n <button\n disabled={saving || !id}\n onClick={() => act(\"enable\")}\n 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\"\n >\n Enable\n </button>\n <button\n disabled={saving || !id}\n onClick={() => act(\"disable\")}\n 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\"\n >\n Disable\n </button>\n {!id ? (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">(missing id)</div>\n ) : null}\n </div>\n </li>\n );\n })\n ) : cronLoading ? (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading…</li>\n ) : (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">No cron jobs detected for this team.</li>\n )}\n </ul>\n </div>\n ) : null}\n\n {activeTab === \"files\" ? (\n <div className=\"mt-6 grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <div className=\"ck-glass-strong p-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Team files</div>\n <label className=\"flex items-center gap-2 text-xs text-[color:var(--ck-text-secondary)]\">\n <input\n type=\"checkbox\"\n checked={showOptionalFiles}\n onChange={(e) => setShowOptionalFiles(e.target.checked)}\n />\n Show optional\n </label>\n </div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n Default view hides optional missing files to reduce noise.\n </div>\n <ul className=\"mt-3 space-y-1\">\n {teamFilesLoading ? (\n <li className=\"text-sm text-[color:var(--ck-text-secondary)]\">Loading…</li>\n ) : null}\n {teamFiles\n .filter((f) => (showOptionalFiles ? true : f.required || !f.missing))\n .map((f) => (\n <li key={f.name}>\n <button\n onClick={() => onLoadTeamFile(f.name)}\n className={\n fileName === f.name\n ? \"w-full rounded-[var(--ck-radius-sm)] bg-white/10 px-3 py-2 text-left text-sm text-[color:var(--ck-text-primary)]\"\n : \"w-full rounded-[var(--ck-radius-sm)] px-3 py-2 text-left text-sm text-[color:var(--ck-text-secondary)] hover:bg-white/5\"\n }\n >\n <span className={f.required ? \"text-[color:var(--ck-text-primary)]\" : \"text-[color:var(--ck-text-secondary)]\"}>\n {f.name}\n </span>\n <span className=\"ml-2 text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">\n {f.required ? \"required\" : \"optional\"}\n </span>\n {f.missing ? <span className=\"ml-2 text-xs text-[color:var(--ck-text-tertiary)]\">missing</span> : null}\n </button>\n </li>\n ))}\n </ul>\n </div>\n\n <div className=\"ck-glass-strong p-4 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Edit: {fileName}</div>\n <button\n disabled={saving}\n onClick={onSaveTeamFile}\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)] disabled:opacity-50\"\n >\n {saving ? \"Saving…\" : \"Save file\"}\n </button>\n </div>\n\n {teamFileError ? (\n <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\">\n {teamFileError}\n </div>\n ) : null}\n\n <textarea\n value={fileContent}\n onChange={(e) => setFileContent(e.target.value)}\n 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)]\"\n spellCheck={false}\n />\n </div>\n </div>\n ) : null}\n\n {/* markdown editor lives below for convenience */}\n {activeTab === \"recipe\" ? (\n <div className=\"mt-6 ck-glass-strong p-4\">\n <div className=\"text-sm font-medium text-[color:var(--ck-text-primary)]\">Recipe markdown</div>\n\n {recipeLoadError ? (\n <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\">\n {recipeLoadError}\n </div>\n ) : null}\n\n <textarea\n value={content}\n onChange={(e) => {\n setContent(e.target.value);\n setLoadedRecipeHash(null);\n }}\n 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)]\"\n spellCheck={false}\n />\n </div>\n ) : null}\n\n {/* Clone Team removed (per #0075). */}\n\n <PublishChangesModal\n open={publishOpen}\n teamId={teamId}\n recipeId={toId}\n busy={publishing}\n onClose={() => setPublishOpen(false)}\n onConfirm={async () => {\n setPublishing(true);\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: toId.trim(),\n teamId,\n overwrite: true,\n applyConfig: true,\n }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Publish failed\");\n\n // Refresh team meta so we can reflect published hash/state.\n try {\n const metaRes = await fetch(`/api/teams/meta?teamId=${encodeURIComponent(teamId)}`, {\n cache: \"no-store\",\n });\n const metaJson = await metaRes.json();\n if (metaRes.ok && metaJson.ok && metaJson.meta && typeof metaJson.meta.recipeHash === \"string\") {\n setTeamMetaRecipeHash(metaJson.meta.recipeHash);\n }\n } catch {\n // ignore\n }\n\n setPublishOpen(false);\n flashMessage(\"Published changes to active team\", \"success\");\n } catch (e: unknown) {\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n } finally {\n setPublishing(false);\n }\n }}\n />\n\n <DeleteTeamModal\n open={deleteOpen}\n teamId={teamId}\n busy={deleting}\n onClose={() => setDeleteOpen(false)}\n onConfirm={async () => {\n setDeleting(true);\n try {\n const res = await fetch(\"/api/teams/remove-team\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Delete failed\");\n flashMessage(\"Deleted team successfully\", \"success\");\n setDeleteOpen(false);\n setTimeout(() => router.push(\"/\"), 250);\n } catch (e: unknown) {\n flashMessage(e instanceof Error ? e.message : String(e), \"error\");\n } finally {\n setDeleting(false);\n }\n }}\n />\n\n {/* duplicate markdown editor removed */}\n </div>\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\n\nexport function DeleteTeamModal({\n open,\n teamId,\n onClose,\n onConfirm,\n busy,\n}: {\n open: boolean;\n teamId: string;\n busy?: boolean;\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 Team</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n Delete team <code className=\"font-mono\">{teamId}</code>? This will remove the team workspace, agents, and stamped cron jobs.\n </p>\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","\"use client\";\n\nimport { createPortal } from \"react-dom\";\n\nexport function PublishChangesModal({\n open,\n teamId,\n recipeId,\n onClose,\n onConfirm,\n busy,\n}: {\n open: boolean;\n teamId: string;\n recipeId: string;\n busy?: boolean;\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)]\">Publish changes</div>\n <p className=\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\">\n This will re-scaffold team <code className=\"font-mono\">{teamId}</code> from recipe <code className=\"font-mono\">{recipeId}</code>.\n </p>\n\n <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\">\n <div className=\"font-medium\">Complete overwrite</div>\n <div className=\"mt-1\">\n All existing team workspace files managed by the recipe will be overwritten (for example: <code className=\"font-mono\">AGENTS.md</code>,{\" \"}\n <code className=\"font-mono\">SOUL.md</code>, role templates, and other scaffolded files). Any manual edits in those files will be lost.\n </div>\n </div>\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-emerald-600 px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)] hover:bg-emerald-500 disabled:opacity-50\"\n >\n {busy ? \"Publishing…\" : \"Publish changes\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"names":[],"mappings":"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"}