@jiggai/kitchen 0.3.32 → 0.3.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/build-manifest.json +5 -5
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +4 -4
  6. package/.next/required-server-files.json +4 -4
  7. package/.next/routes-manifest.json +24 -0
  8. package/.next/server/app/_global-error/page/build-manifest.json +3 -3
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/server/app/_global-error.html +2 -2
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page/build-manifest.json +3 -3
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +5 -5
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  30. package/.next/server/app/agents/[agentId]/page/build-manifest.json +3 -3
  31. package/.next/server/app/agents/[agentId]/page.js +2 -2
  32. package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
  33. package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/agents/[id]/route.js +1 -1
  35. package/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
  36. package/.next/server/app/api/agents/add/route.js.nft.json +1 -1
  37. package/.next/server/app/api/agents/file/route.js.nft.json +1 -1
  38. package/.next/server/app/api/agents/files/route.js.nft.json +1 -1
  39. package/.next/server/app/api/agents/route.js +1 -1
  40. package/.next/server/app/api/agents/route.js.nft.json +1 -1
  41. package/.next/server/app/api/agents/skills/install/route.js.nft.json +1 -1
  42. package/.next/server/app/api/agents/skills/route.js.nft.json +1 -1
  43. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  44. package/.next/server/app/api/channels/bindings/route.js +1 -1
  45. package/.next/server/app/api/channels/bindings/route.js.nft.json +1 -1
  46. package/.next/server/app/api/cron/bulk/route/app-paths-manifest.json +3 -0
  47. package/.next/server/app/api/cron/bulk/route/build-manifest.json +11 -0
  48. package/.next/server/app/api/cron/bulk/route/server-reference-manifest.json +4 -0
  49. package/.next/server/app/api/cron/bulk/route.js +6 -0
  50. package/.next/server/app/api/cron/bulk/route.js.map +5 -0
  51. package/.next/server/app/api/cron/bulk/route.js.nft.json +1 -0
  52. package/.next/server/app/api/cron/bulk/route_client-reference-manifest.js +2 -0
  53. package/.next/server/app/api/cron/delete/route.js.nft.json +1 -1
  54. package/.next/server/app/api/cron/jobs/route.js.nft.json +1 -1
  55. package/.next/server/app/api/cron/recipe-installed/route.js.nft.json +1 -1
  56. package/.next/server/app/api/cron/worker/route.js +2 -1
  57. package/.next/server/app/api/cron/worker/route.js.nft.json +1 -1
  58. package/.next/server/app/api/goals/[id]/promote/route.js.nft.json +1 -1
  59. package/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  60. package/.next/server/app/api/goals/route.js.nft.json +1 -1
  61. package/.next/server/app/api/ids/check/route.js.nft.json +1 -1
  62. package/.next/server/app/api/manifest/route/app-paths-manifest.json +3 -0
  63. package/.next/server/app/api/manifest/route/build-manifest.json +11 -0
  64. package/.next/server/app/api/manifest/route/server-reference-manifest.json +4 -0
  65. package/.next/server/app/api/manifest/route.js +6 -0
  66. package/.next/server/app/api/manifest/route.js.map +5 -0
  67. package/.next/server/app/api/manifest/route.js.nft.json +1 -0
  68. package/.next/server/app/api/manifest/route_client-reference-manifest.js +2 -0
  69. package/.next/server/app/api/marketplace/recipes/[slug]/route.js +1 -1
  70. package/.next/server/app/api/marketplace/recipes/[slug]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/marketplace/recipes/route.js +1 -1
  72. package/.next/server/app/api/marketplace/recipes/route.js.nft.json +1 -1
  73. package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js +2 -2
  74. package/.next/server/app/api/plugins/[pluginId]/[...path]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js +1 -1
  76. package/.next/server/app/api/plugins/[pluginId]/tabs/[tabId]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/plugins/route.js +1 -1
  78. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  79. package/.next/server/app/api/plugins/test/route.js +1 -1
  80. package/.next/server/app/api/plugins/test/route.js.nft.json +1 -1
  81. package/.next/server/app/api/recipes/[id]/route.js.nft.json +1 -1
  82. package/.next/server/app/api/recipes/clone/route.js.nft.json +1 -1
  83. package/.next/server/app/api/recipes/custom-team/route.js.nft.json +1 -1
  84. package/.next/server/app/api/recipes/delete/route.js.nft.json +1 -1
  85. package/.next/server/app/api/recipes/local-agent-catalog/route.js.nft.json +1 -1
  86. package/.next/server/app/api/recipes/route.js +1 -1
  87. package/.next/server/app/api/recipes/route.js.nft.json +1 -1
  88. package/.next/server/app/api/recipes/team-agents/route.js.nft.json +1 -1
  89. package/.next/server/app/api/scaffold/route.js.nft.json +1 -1
  90. package/.next/server/app/api/settings/cron-installation/route.js.nft.json +1 -1
  91. package/.next/server/app/api/settings/model-options/route.js +1 -1
  92. package/.next/server/app/api/settings/model-options/route.js.nft.json +1 -1
  93. package/.next/server/app/api/swarms/start/route.js +1 -1
  94. package/.next/server/app/api/swarms/start/route.js.nft.json +1 -1
  95. package/.next/server/app/api/swarms/status/route.js +1 -1
  96. package/.next/server/app/api/swarms/status/route.js.nft.json +1 -1
  97. package/.next/server/app/api/teams/[teamId]/media-providers/route.js +1 -1
  98. package/.next/server/app/api/teams/[teamId]/media-providers/route.js.nft.json +1 -1
  99. package/.next/server/app/api/teams/[teamId]/tickets/assign/route.js.nft.json +1 -1
  100. package/.next/server/app/api/teams/[teamId]/tickets/assignees/route.js.nft.json +1 -1
  101. package/.next/server/app/api/teams/[teamId]/tickets/comment/route.js.nft.json +1 -1
  102. package/.next/server/app/api/teams/[teamId]/tickets/delete/route.js.nft.json +1 -1
  103. package/.next/server/app/api/teams/[teamId]/tickets/move/route.js.nft.json +1 -1
  104. package/.next/server/app/api/teams/[teamId]/tickets/move-to-goals/route.js.nft.json +1 -1
  105. package/.next/server/app/api/teams/file/route.js.nft.json +1 -1
  106. package/.next/server/app/api/teams/files/route.js.nft.json +1 -1
  107. package/.next/server/app/api/teams/list/route/app-paths-manifest.json +3 -0
  108. package/.next/server/app/api/teams/list/route/build-manifest.json +11 -0
  109. package/.next/server/app/api/teams/list/route/server-reference-manifest.json +4 -0
  110. package/.next/server/app/api/teams/list/route.js +6 -0
  111. package/.next/server/app/api/teams/list/route.js.map +5 -0
  112. package/.next/server/app/api/teams/list/route.js.nft.json +1 -0
  113. package/.next/server/app/api/teams/list/route_client-reference-manifest.js +2 -0
  114. package/.next/server/app/api/teams/memory/route.js.nft.json +1 -1
  115. package/.next/server/app/api/teams/meta/route.js.nft.json +1 -1
  116. package/.next/server/app/api/teams/orchestrator/route.js +1 -1
  117. package/.next/server/app/api/teams/orchestrator/route.js.nft.json +1 -1
  118. package/.next/server/app/api/teams/remove-team/route.js.nft.json +1 -1
  119. package/.next/server/app/api/teams/skills/install/route.js.nft.json +1 -1
  120. package/.next/server/app/api/teams/skills/route.js.nft.json +1 -1
  121. package/.next/server/app/api/teams/workflow-deliverables/file/route.js +1 -1
  122. package/.next/server/app/api/teams/workflow-deliverables/file/route.js.nft.json +1 -1
  123. package/.next/server/app/api/teams/workflow-deliverables/route.js.nft.json +1 -1
  124. package/.next/server/app/api/teams/workflow-runs/route.js.nft.json +1 -1
  125. package/.next/server/app/api/teams/workflow-templates/route.js.nft.json +1 -1
  126. package/.next/server/app/api/teams/workflow-triggers/route/app-paths-manifest.json +3 -0
  127. package/.next/server/app/api/teams/workflow-triggers/route/build-manifest.json +11 -0
  128. package/.next/server/app/api/teams/workflow-triggers/route/server-reference-manifest.json +4 -0
  129. package/.next/server/app/api/teams/workflow-triggers/route.js +6 -0
  130. package/.next/server/app/api/teams/workflow-triggers/route.js.map +5 -0
  131. package/.next/server/app/api/teams/workflow-triggers/route.js.nft.json +1 -0
  132. package/.next/server/app/api/teams/workflow-triggers/route_client-reference-manifest.js +2 -0
  133. package/.next/server/app/api/teams/workflows/route.js.nft.json +1 -1
  134. package/.next/server/app/api/tickets/assign/route.js.nft.json +1 -1
  135. package/.next/server/app/api/tickets/assignees/route.js.nft.json +1 -1
  136. package/.next/server/app/api/tickets/move/route.js.nft.json +1 -1
  137. package/.next/server/app/channels/page/build-manifest.json +3 -3
  138. package/.next/server/app/channels/page.js +2 -2
  139. package/.next/server/app/channels/page.js.nft.json +1 -1
  140. package/.next/server/app/channels/page_client-reference-manifest.js +1 -1
  141. package/.next/server/app/channels.html +2 -2
  142. package/.next/server/app/channels.rsc +6 -6
  143. package/.next/server/app/channels.segments/_full.segment.rsc +6 -6
  144. package/.next/server/app/channels.segments/_head.segment.rsc +1 -1
  145. package/.next/server/app/channels.segments/_index.segment.rsc +3 -3
  146. package/.next/server/app/channels.segments/_tree.segment.rsc +2 -2
  147. package/.next/server/app/channels.segments/channels/__PAGE__.segment.rsc +2 -2
  148. package/.next/server/app/channels.segments/channels.segment.rsc +1 -1
  149. package/.next/server/app/cron-jobs/page/build-manifest.json +3 -3
  150. package/.next/server/app/cron-jobs/page.js +2 -2
  151. package/.next/server/app/cron-jobs/page.js.nft.json +1 -1
  152. package/.next/server/app/cron-jobs/page_client-reference-manifest.js +1 -1
  153. package/.next/server/app/goals/[id]/page/build-manifest.json +3 -3
  154. package/.next/server/app/goals/[id]/page.js +2 -2
  155. package/.next/server/app/goals/[id]/page.js.nft.json +1 -1
  156. package/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/goals/new/page/build-manifest.json +3 -3
  158. package/.next/server/app/goals/new/page.js +2 -2
  159. package/.next/server/app/goals/new/page.js.nft.json +1 -1
  160. package/.next/server/app/goals/new/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/goals/new.html +2 -2
  162. package/.next/server/app/goals/new.rsc +6 -6
  163. package/.next/server/app/goals/new.segments/_full.segment.rsc +6 -6
  164. package/.next/server/app/goals/new.segments/_head.segment.rsc +1 -1
  165. package/.next/server/app/goals/new.segments/_index.segment.rsc +3 -3
  166. package/.next/server/app/goals/new.segments/_tree.segment.rsc +2 -2
  167. package/.next/server/app/goals/new.segments/goals/new/__PAGE__.segment.rsc +2 -2
  168. package/.next/server/app/goals/new.segments/goals/new.segment.rsc +1 -1
  169. package/.next/server/app/goals/new.segments/goals.segment.rsc +1 -1
  170. package/.next/server/app/goals/page/build-manifest.json +3 -3
  171. package/.next/server/app/goals/page.js +2 -2
  172. package/.next/server/app/goals/page.js.nft.json +1 -1
  173. package/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/goals.html +1 -1
  175. package/.next/server/app/goals.rsc +6 -6
  176. package/.next/server/app/goals.segments/_full.segment.rsc +6 -6
  177. package/.next/server/app/goals.segments/_head.segment.rsc +1 -1
  178. package/.next/server/app/goals.segments/_index.segment.rsc +3 -3
  179. package/.next/server/app/goals.segments/_tree.segment.rsc +2 -2
  180. package/.next/server/app/goals.segments/goals/__PAGE__.segment.rsc +2 -2
  181. package/.next/server/app/goals.segments/goals.segment.rsc +1 -1
  182. package/.next/server/app/page/build-manifest.json +3 -3
  183. package/.next/server/app/page.js +4 -4
  184. package/.next/server/app/page.js.nft.json +1 -1
  185. package/.next/server/app/page_client-reference-manifest.js +1 -1
  186. package/.next/server/app/recipes/[id]/page/build-manifest.json +3 -3
  187. package/.next/server/app/recipes/[id]/page.js +4 -4
  188. package/.next/server/app/recipes/[id]/page.js.nft.json +1 -1
  189. package/.next/server/app/recipes/[id]/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/recipes/page/build-manifest.json +3 -3
  191. package/.next/server/app/recipes/page.js +4 -4
  192. package/.next/server/app/recipes/page.js.nft.json +1 -1
  193. package/.next/server/app/recipes/page_client-reference-manifest.js +1 -1
  194. package/.next/server/app/runs/page/build-manifest.json +3 -3
  195. package/.next/server/app/runs/page.js +5 -7
  196. package/.next/server/app/runs/page.js.nft.json +1 -1
  197. package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/settings/page/build-manifest.json +3 -3
  199. package/.next/server/app/settings/page.js +2 -2
  200. package/.next/server/app/settings/page.js.nft.json +1 -1
  201. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/settings.html +1 -1
  203. package/.next/server/app/settings.rsc +6 -6
  204. package/.next/server/app/settings.segments/_full.segment.rsc +6 -6
  205. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  206. package/.next/server/app/settings.segments/_index.segment.rsc +3 -3
  207. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  209. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  210. package/.next/server/app/teams/[teamId]/deliverables/page/build-manifest.json +3 -3
  211. package/.next/server/app/teams/[teamId]/deliverables/page.js +5 -5
  212. package/.next/server/app/teams/[teamId]/deliverables/page.js.nft.json +1 -1
  213. package/.next/server/app/teams/[teamId]/deliverables/page_client-reference-manifest.js +1 -1
  214. package/.next/server/app/teams/[teamId]/page/build-manifest.json +3 -3
  215. package/.next/server/app/teams/[teamId]/page.js +5 -6
  216. package/.next/server/app/teams/[teamId]/page.js.nft.json +1 -1
  217. package/.next/server/app/teams/[teamId]/page_client-reference-manifest.js +1 -1
  218. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page/build-manifest.json +3 -3
  219. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js +5 -6
  220. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page.js.nft.json +1 -1
  221. package/.next/server/app/teams/[teamId]/runs/[workflowId]/[runId]/page_client-reference-manifest.js +1 -1
  222. package/.next/server/app/teams/[teamId]/runs/page/build-manifest.json +3 -3
  223. package/.next/server/app/teams/[teamId]/runs/page.js +2 -2
  224. package/.next/server/app/teams/[teamId]/runs/page.js.nft.json +1 -1
  225. package/.next/server/app/teams/[teamId]/runs/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page/build-manifest.json +3 -3
  227. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js +2 -2
  228. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page.js.nft.json +1 -1
  229. package/.next/server/app/teams/[teamId]/tickets/[ticket]/page_client-reference-manifest.js +1 -1
  230. package/.next/server/app/teams/[teamId]/tickets/page/build-manifest.json +3 -3
  231. package/.next/server/app/teams/[teamId]/tickets/page.js +2 -2
  232. package/.next/server/app/teams/[teamId]/tickets/page.js.nft.json +1 -1
  233. package/.next/server/app/teams/[teamId]/tickets/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page/build-manifest.json +3 -3
  235. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js +5 -5
  236. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page.js.nft.json +1 -1
  237. package/.next/server/app/teams/[teamId]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/teams/[teamId]/workflows/page/build-manifest.json +3 -3
  239. package/.next/server/app/teams/[teamId]/workflows/page.js +5 -5
  240. package/.next/server/app/teams/[teamId]/workflows/page.js.nft.json +1 -1
  241. package/.next/server/app/teams/[teamId]/workflows/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/tickets/[ticket]/page/build-manifest.json +3 -3
  243. package/.next/server/app/tickets/[ticket]/page.js +2 -2
  244. package/.next/server/app/tickets/[ticket]/page.js.nft.json +1 -1
  245. package/.next/server/app/tickets/[ticket]/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/tickets/page/build-manifest.json +3 -3
  247. package/.next/server/app/tickets/page.js +2 -2
  248. package/.next/server/app/tickets/page.js.nft.json +1 -1
  249. package/.next/server/app/tickets/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app-paths-manifest.json +4 -0
  251. package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js +3 -0
  252. package/.next/server/chunks/[externals]_node:fs_ddf6f167._.js.map +1 -0
  253. package/.next/server/chunks/[root-of-the-server]__00a30f40._.js +1 -1
  254. package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js +3 -0
  255. package/.next/server/chunks/[root-of-the-server]__03c5f2a6._.js.map +1 -0
  256. package/.next/server/chunks/[root-of-the-server]__04f289da._.js +1 -1
  257. package/.next/server/chunks/[root-of-the-server]__08b4c8f2._.js +1 -1
  258. package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js +3 -0
  259. package/.next/server/chunks/[root-of-the-server]__0b2c557c._.js.map +1 -0
  260. package/.next/server/chunks/[root-of-the-server]__0f55461f._.js +1 -1
  261. package/.next/server/chunks/[root-of-the-server]__1311d7a3._.js +1 -1
  262. package/.next/server/chunks/[root-of-the-server]__1480ffda._.js +1 -1
  263. package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js → [root-of-the-server]__17fa6089._.js} +2 -2
  264. package/.next/server/chunks/[root-of-the-server]__1873f417._.js +1 -1
  265. package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js +3 -0
  266. package/.next/server/chunks/[root-of-the-server]__1d4f6506._.js.map +1 -0
  267. package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js +3 -0
  268. package/.next/server/chunks/[root-of-the-server]__1f18c0c4._.js.map +1 -0
  269. package/.next/server/chunks/[root-of-the-server]__1f1e62ac._.js +1 -1
  270. package/.next/server/chunks/[root-of-the-server]__20b1f42d._.js +1 -1
  271. package/.next/server/chunks/[root-of-the-server]__21ad9eeb._.js +1 -1
  272. package/.next/server/chunks/[root-of-the-server]__2c207e60._.js +1 -1
  273. package/.next/server/chunks/[root-of-the-server]__2dd1afff._.js +1 -1
  274. package/.next/server/chunks/[root-of-the-server]__3021a250._.js +1 -1
  275. package/.next/server/chunks/[root-of-the-server]__30cd38e9._.js +1 -1
  276. package/.next/server/chunks/[root-of-the-server]__392e585d._.js +2 -2
  277. package/.next/server/chunks/[root-of-the-server]__3bfad714._.js +1 -1
  278. package/.next/server/chunks/[root-of-the-server]__3d15e850._.js +1 -1
  279. package/.next/server/chunks/[root-of-the-server]__3f648b9b._.js +1 -1
  280. package/.next/server/chunks/[root-of-the-server]__482575d2._.js +1 -1
  281. package/.next/server/chunks/[root-of-the-server]__4898071c._.js +4 -4
  282. package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js +22 -0
  283. package/.next/server/chunks/[root-of-the-server]__497e7a9d._.js.map +1 -0
  284. package/.next/server/chunks/[root-of-the-server]__4ee12514._.js +1 -1
  285. package/.next/server/chunks/[root-of-the-server]__55defc7c._.js +1 -1
  286. package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js → [root-of-the-server]__5792c29e._.js} +2 -2
  287. package/.next/server/chunks/[root-of-the-server]__5aa1dc93._.js +1 -1
  288. package/.next/server/chunks/[root-of-the-server]__5c5990a6._.js +1 -1
  289. package/.next/server/chunks/[root-of-the-server]__603cb0fa._.js +1 -1
  290. package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js +1 -1
  291. package/.next/server/chunks/[root-of-the-server]__6131b7e2._.js.map +1 -1
  292. package/.next/server/chunks/[root-of-the-server]__636919a0._.js +1 -1
  293. package/.next/server/chunks/[root-of-the-server]__653d42f0._.js +3 -0
  294. package/.next/server/chunks/[root-of-the-server]__653d42f0._.js.map +1 -0
  295. package/.next/server/chunks/[root-of-the-server]__663e79ff._.js +1 -1
  296. package/.next/server/chunks/{[root-of-the-server]__0883634a._.js → [root-of-the-server]__68a21bb1._.js} +2 -2
  297. package/.next/server/chunks/{[root-of-the-server]__0883634a._.js.map → [root-of-the-server]__68a21bb1._.js.map} +1 -1
  298. package/.next/server/chunks/[root-of-the-server]__69c065ce._.js +1 -1
  299. package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js +3 -0
  300. package/.next/server/chunks/[root-of-the-server]__6e463e5f._.js.map +1 -0
  301. package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js → [root-of-the-server]__7194dfe2._.js} +3 -3
  302. package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js → [root-of-the-server]__7347e39f._.js} +2 -2
  303. package/.next/server/chunks/{[root-of-the-server]__f45ceefb._.js.map → [root-of-the-server]__7347e39f._.js.map} +1 -1
  304. package/.next/server/chunks/[root-of-the-server]__74e2a9ba._.js +1 -1
  305. package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js +1 -1
  306. package/.next/server/chunks/[root-of-the-server]__7bdf9f6e._.js.map +1 -1
  307. package/.next/server/chunks/[root-of-the-server]__7e12b9f4._.js +1 -1
  308. package/.next/server/chunks/[root-of-the-server]__87875179._.js +1 -1
  309. package/.next/server/chunks/{[root-of-the-server]__17124952._.js → [root-of-the-server]__89f2190c._.js} +3 -3
  310. package/.next/server/chunks/[root-of-the-server]__8f8e110f._.js +1 -1
  311. package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js +1 -1
  312. package/.next/server/chunks/[root-of-the-server]__91d0cce1._.js.map +1 -1
  313. package/.next/server/chunks/[root-of-the-server]__937b40e2._.js +3 -0
  314. package/.next/server/chunks/[root-of-the-server]__937b40e2._.js.map +1 -0
  315. package/.next/server/chunks/[root-of-the-server]__9853b72d._.js +1 -1
  316. package/.next/server/chunks/[root-of-the-server]__9dba20b3._.js +1 -1
  317. package/.next/server/chunks/[root-of-the-server]__9e96d37b._.js +1 -1
  318. package/.next/server/chunks/[root-of-the-server]__aba68368._.js +1 -1
  319. package/.next/server/chunks/[root-of-the-server]__aed4e4f2._.js +1 -1
  320. package/.next/server/chunks/[root-of-the-server]__b6cff26d._.js +1 -1
  321. package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js → [root-of-the-server]__b986660c._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__0bea0f71._.js.map → [root-of-the-server]__b986660c._.js.map} +1 -1
  323. package/.next/server/chunks/{[root-of-the-server]__343776df._.js → [root-of-the-server]__bbed0e46._.js} +2 -2
  324. package/.next/server/chunks/[root-of-the-server]__c15c5141._.js +1 -1
  325. package/.next/server/chunks/[root-of-the-server]__c50e4bc4._.js +1 -1
  326. package/.next/server/chunks/[root-of-the-server]__cc0860cb._.js +1 -1
  327. package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js +3 -0
  328. package/.next/server/chunks/[root-of-the-server]__cc3ea05b._.js.map +1 -0
  329. package/.next/server/chunks/[root-of-the-server]__d302afb4._.js +1 -1
  330. package/.next/server/chunks/[root-of-the-server]__d4a8660e._.js +1 -1
  331. package/.next/server/chunks/[root-of-the-server]__e1432bba._.js +3 -0
  332. package/.next/server/chunks/[root-of-the-server]__e1432bba._.js.map +1 -0
  333. package/.next/server/chunks/[root-of-the-server]__e478ef0d._.js +1 -1
  334. package/.next/server/chunks/[root-of-the-server]__e9acbabd._.js +1 -1
  335. package/.next/server/chunks/[root-of-the-server]__e9d9d570._.js +1 -1
  336. package/.next/server/chunks/[root-of-the-server]__f408c708._.js +2 -2
  337. package/.next/server/chunks/[root-of-the-server]__f4cbadf7._.js +1 -1
  338. package/.next/server/chunks/[root-of-the-server]__f5cd81f1._.js +1 -1
  339. package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js +3 -0
  340. package/.next/server/chunks/[root-of-the-server]__f85b5a70._.js.map +1 -0
  341. package/.next/server/chunks/[root-of-the-server]__f994dc62._.js +1 -1
  342. package/.next/server/chunks/[root-of-the-server]__fb22e719._.js +3 -0
  343. package/.next/server/chunks/[root-of-the-server]__fb22e719._.js.map +1 -0
  344. package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js +3 -0
  345. package/.next/server/chunks/_next-internal_server_app_api_cron_bulk_route_actions_30f8adb9.js.map +1 -0
  346. package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js +3 -0
  347. package/.next/server/chunks/_next-internal_server_app_api_manifest_route_actions_7f7622ff.js.map +1 -0
  348. package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js +3 -0
  349. package/.next/server/chunks/_next-internal_server_app_api_teams_list_route_actions_5aa8c937.js.map +1 -0
  350. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js +3 -0
  351. package/.next/server/chunks/_next-internal_server_app_api_teams_workflow-triggers_route_actions_e86e3b38.js.map +1 -0
  352. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js +1 -1
  353. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1fe98a49.js.map +1 -1
  354. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_3a1b29e4.js +1 -1
  355. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js +13 -0
  356. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_cb6ddb24.js.map +1 -0
  357. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f5680d9e.js +1 -1
  358. package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js +1 -1
  359. package/.next/server/chunks/node_modules_yaml_dist_49c13b35._.js.map +1 -1
  360. package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js +2 -2
  361. package/.next/server/chunks/ssr/[root-of-the-server]__195421b7._.js.map +1 -1
  362. package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js +3 -0
  363. package/.next/server/chunks/ssr/[root-of-the-server]__2a657095._.js.map +1 -0
  364. package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js +1 -1
  365. package/.next/server/chunks/ssr/[root-of-the-server]__3b880807._.js.map +1 -1
  366. package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js +3 -0
  367. package/.next/server/chunks/ssr/[root-of-the-server]__3f55f975._.js.map +1 -0
  368. package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js +1 -1
  369. package/.next/server/chunks/ssr/[root-of-the-server]__471bc2e7._.js.map +1 -1
  370. package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js +3 -0
  371. package/.next/server/chunks/ssr/[root-of-the-server]__4d24c088._.js.map +1 -0
  372. package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js +3 -0
  373. package/.next/server/chunks/ssr/[root-of-the-server]__6390ce9c._.js.map +1 -0
  374. package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js +3 -0
  375. package/.next/server/chunks/ssr/[root-of-the-server]__7b8cdea5._.js.map +1 -0
  376. package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js +3 -0
  377. package/.next/server/chunks/ssr/[root-of-the-server]__7d21617d._.js.map +1 -0
  378. package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js +3 -0
  379. package/.next/server/chunks/ssr/[root-of-the-server]__8135c9d5._.js.map +1 -0
  380. package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js → [root-of-the-server]__8e8f535b._.js} +2 -2
  381. package/.next/server/chunks/ssr/{node_modules_next_dist_1038a5b9._.js.map → [root-of-the-server]__8e8f535b._.js.map} +1 -1
  382. package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js +1 -1
  383. package/.next/server/chunks/ssr/[root-of-the-server]__92524828._.js.map +1 -1
  384. package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js +1 -1
  385. package/.next/server/chunks/ssr/[root-of-the-server]__997aa62c._.js.map +1 -1
  386. package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js +3 -0
  387. package/.next/server/chunks/ssr/[root-of-the-server]__9db1df87._.js.map +1 -0
  388. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js +1 -1
  389. package/.next/server/chunks/ssr/[root-of-the-server]__9e1ab064._.js.map +1 -1
  390. package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js +3 -0
  391. package/.next/server/chunks/ssr/[root-of-the-server]__a2e3966f._.js.map +1 -0
  392. package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js +1 -1
  393. package/.next/server/chunks/ssr/[root-of-the-server]__af792402._.js.map +1 -1
  394. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js +1 -1
  395. package/.next/server/chunks/ssr/[root-of-the-server]__b5f65083._.js.map +1 -1
  396. package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js +3 -0
  397. package/.next/server/chunks/ssr/[root-of-the-server]__becf14db._.js.map +1 -0
  398. package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js +3 -0
  399. package/.next/server/chunks/ssr/[root-of-the-server]__c106a298._.js.map +1 -0
  400. package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js +3 -0
  401. package/.next/server/chunks/ssr/[root-of-the-server]__cb91405c._.js.map +1 -0
  402. package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js +3 -0
  403. package/.next/server/chunks/ssr/[root-of-the-server]__f59c3144._.js.map +1 -0
  404. package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js +1 -1
  405. package/.next/server/chunks/ssr/[root-of-the-server]__fbe5ff69._.js.map +1 -1
  406. package/.next/server/chunks/ssr/_1ee3bd7b._.js +1 -1
  407. package/.next/server/chunks/ssr/_1ee3bd7b._.js.map +1 -1
  408. package/.next/server/chunks/ssr/{_deb7a691._.js → _2ab986a4._.js} +2 -2
  409. package/.next/server/chunks/ssr/_2ab986a4._.js.map +1 -0
  410. package/.next/server/chunks/ssr/_2d8d7232._.js +1 -1
  411. package/.next/server/chunks/ssr/_2d8d7232._.js.map +1 -1
  412. package/.next/server/chunks/ssr/_43a80c61._.js +1 -1
  413. package/.next/server/chunks/ssr/_43a80c61._.js.map +1 -1
  414. package/.next/server/chunks/ssr/_641f29bc._.js +3 -0
  415. package/.next/server/chunks/ssr/_641f29bc._.js.map +1 -0
  416. package/.next/server/chunks/ssr/_ac993243._.js +3 -0
  417. package/.next/server/chunks/ssr/_ac993243._.js.map +1 -0
  418. package/.next/server/chunks/ssr/_f636ce67._.js +3 -0
  419. package/.next/server/chunks/ssr/_f636ce67._.js.map +1 -0
  420. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js +7 -1
  421. package/.next/server/chunks/ssr/b1a17_app_teams_[teamId]_workflows_[workflowId]_workflows-editor-client_tsx_5e714aa2._.js.map +1 -1
  422. package/.next/server/chunks/ssr/{_7f9e89d2._.js → node_modules_next_10fb6ad9._.js} +3 -3
  423. package/.next/server/chunks/ssr/node_modules_next_10fb6ad9._.js.map +1 -0
  424. package/.next/server/chunks/ssr/node_modules_next_dist_25a30daf._.js +1 -1
  425. package/.next/server/chunks/ssr/node_modules_next_dist_compiled_bc6b8ddf._.js +1 -1
  426. package/.next/server/chunks/ssr/node_modules_yaml_dist_18db9ed7._.js +2 -2
  427. package/.next/server/chunks/ssr/src_13139e3d._.js +1 -1
  428. package/.next/server/chunks/ssr/src_13139e3d._.js.map +1 -1
  429. package/.next/server/chunks/ssr/src_2a73b867._.js +1 -1
  430. package/.next/server/chunks/ssr/src_2a73b867._.js.map +1 -1
  431. package/.next/server/chunks/ssr/src_2dbb3b7f._.js +1 -1
  432. package/.next/server/chunks/ssr/src_2dbb3b7f._.js.map +1 -1
  433. package/.next/server/chunks/ssr/src_417bc4a6._.js +1 -1
  434. package/.next/server/chunks/ssr/src_417bc4a6._.js.map +1 -1
  435. package/.next/server/chunks/ssr/src_59477309._.js +1 -1
  436. package/.next/server/chunks/ssr/src_59477309._.js.map +1 -1
  437. package/.next/server/chunks/ssr/src_79d55c05._.js +1 -1
  438. package/.next/server/chunks/ssr/src_79d55c05._.js.map +1 -1
  439. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js +1 -1
  440. package/.next/server/chunks/ssr/src_app_HomeClient_tsx_f9f7568d._.js.map +1 -1
  441. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js +1 -1
  442. package/.next/server/chunks/ssr/src_app_agents_[agentId]_agent-editor_tsx_f85bbe65._.js.map +1 -1
  443. package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js +1 -1
  444. package/.next/server/chunks/ssr/src_app_cron-jobs_cron-jobs-client_tsx_ec91a73d._.js.map +1 -1
  445. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js +1 -1
  446. package/.next/server/chunks/ssr/src_app_recipes_[id]_RecipeEditor_index_tsx_98393217._.js.map +1 -1
  447. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js +1 -1
  448. package/.next/server/chunks/ssr/src_app_recipes_recipes-client_tsx_8ed3ca94._.js.map +1 -1
  449. package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js +3 -0
  450. package/.next/server/chunks/ssr/src_app_teams_[teamId]_runs_[workflowId]_[runId]_run-detail-client_tsx_56f0cbd7._.js.map +1 -0
  451. package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js +1 -1
  452. package/.next/server/chunks/ssr/src_app_teams_[teamId]_workflows_workflows-client_tsx_12742cc9._.js.map +1 -1
  453. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js +1 -1
  454. package/.next/server/chunks/ssr/src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js.map +1 -1
  455. package/.next/server/middleware-build-manifest.js +3 -3
  456. package/.next/server/pages/404.html +1 -1
  457. package/.next/server/pages/500.html +2 -2
  458. package/.next/server/server-reference-manifest.js +1 -1
  459. package/.next/server/server-reference-manifest.json +1 -1
  460. package/.next/static/chunks/001f840e2d5598af.js +10 -0
  461. package/.next/static/chunks/212477db59154fa7.js +3 -0
  462. package/.next/static/chunks/242fee5849d79d1b.js +1 -0
  463. package/.next/static/chunks/26d8587a145bded7.js +1 -0
  464. package/.next/static/chunks/{b83c1ca03c3b8c6d.js → 372ac1d07db9969a.js} +1 -1
  465. package/.next/static/chunks/4a0d27f3023676a5.js +1 -0
  466. package/.next/static/chunks/4ad57cfc54e20abd.js +1 -0
  467. package/.next/static/chunks/4e8866ad8f1f6b2b.js +1 -0
  468. package/.next/static/chunks/7d9e7a36b92578fd.js +1 -0
  469. package/.next/static/chunks/87f63f654bc046a2.js +3 -0
  470. package/.next/static/chunks/8aac543d98940eb3.js +2 -0
  471. package/.next/static/chunks/8acd42df55d57556.js +1 -0
  472. package/.next/static/chunks/95b7564f2360e762.js +1 -0
  473. package/.next/static/chunks/9801fc48f532d076.js +1 -0
  474. package/.next/static/chunks/{d6e1b7307a9274ce.js → 9c627cb11f73ac4c.js} +1 -1
  475. package/.next/static/chunks/ad652e4b50e1fb17.js +1 -0
  476. package/.next/static/chunks/aff32612e6b9d901.js +1 -0
  477. package/.next/static/chunks/c6c561355e97baa8.js +7 -0
  478. package/.next/static/chunks/d4c855575c079ffc.js +3 -0
  479. package/.next/static/chunks/d593ea5e91e81b45.js +1 -0
  480. package/.next/static/chunks/{87879d67a1601ee0.js → e0984ec981f01c0d.js} +1 -1
  481. package/.next/static/chunks/f5039461b97678c7.js +1 -0
  482. package/.next/static/chunks/f51763a2aea0a4b6.js +1 -0
  483. package/.next/static/chunks/f7f157ba542e1ae5.js +1 -0
  484. package/.next/static/chunks/fb008837ba324b34.css +3 -0
  485. package/.next/static/chunks/{turbopack-dbf3078dbf5863bd.js → turbopack-bdd9478663f034d6.js} +1 -1
  486. package/LICENSE +192 -0
  487. package/README.md +19 -5
  488. package/openclaw/index.ts +144 -5
  489. package/openclaw.plugin.json +1 -1
  490. package/package.json +5 -2
  491. package/.next/server/chunks/[root-of-the-server]__18423bab._.js +0 -3
  492. package/.next/server/chunks/[root-of-the-server]__18423bab._.js.map +0 -1
  493. package/.next/server/chunks/[root-of-the-server]__35ec765d._.js +0 -13
  494. package/.next/server/chunks/[root-of-the-server]__35ec765d._.js.map +0 -1
  495. package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js +0 -3
  496. package/.next/server/chunks/[root-of-the-server]__3c92e5aa._.js.map +0 -1
  497. package/.next/server/chunks/[root-of-the-server]__813dd669._.js +0 -3
  498. package/.next/server/chunks/[root-of-the-server]__813dd669._.js.map +0 -1
  499. package/.next/server/chunks/[root-of-the-server]__b457b884._.js +0 -22
  500. package/.next/server/chunks/[root-of-the-server]__b457b884._.js.map +0 -1
  501. package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js +0 -3
  502. package/.next/server/chunks/[root-of-the-server]__c5e88cbb._.js.map +0 -1
  503. package/.next/server/chunks/[root-of-the-server]__da7df58d._.js +0 -3
  504. package/.next/server/chunks/[root-of-the-server]__da7df58d._.js.map +0 -1
  505. package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js +0 -3
  506. package/.next/server/chunks/ssr/[root-of-the-server]__0a5cb3ca._.js.map +0 -1
  507. package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js +0 -3
  508. package/.next/server/chunks/ssr/[root-of-the-server]__177cec74._.js.map +0 -1
  509. package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js +0 -3
  510. package/.next/server/chunks/ssr/[root-of-the-server]__4981f370._.js.map +0 -1
  511. package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js +0 -3
  512. package/.next/server/chunks/ssr/[root-of-the-server]__51e26a01._.js.map +0 -1
  513. package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js +0 -3
  514. package/.next/server/chunks/ssr/[root-of-the-server]__6b6b7595._.js.map +0 -1
  515. package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js +0 -3
  516. package/.next/server/chunks/ssr/[root-of-the-server]__8f9585b9._.js.map +0 -1
  517. package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js +0 -3
  518. package/.next/server/chunks/ssr/[root-of-the-server]__9e400864._.js.map +0 -1
  519. package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js +0 -3
  520. package/.next/server/chunks/ssr/[root-of-the-server]__a6348eaa._.js.map +0 -1
  521. package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js +0 -3
  522. package/.next/server/chunks/ssr/[root-of-the-server]__ad4e8478._.js.map +0 -1
  523. package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js +0 -3
  524. package/.next/server/chunks/ssr/[root-of-the-server]__b5aa14b8._.js.map +0 -1
  525. package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js +0 -3
  526. package/.next/server/chunks/ssr/[root-of-the-server]__b8998a21._.js.map +0 -1
  527. package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js +0 -3
  528. package/.next/server/chunks/ssr/[root-of-the-server]__e9bd9b71._.js.map +0 -1
  529. package/.next/server/chunks/ssr/_32beff4b._.js +0 -3
  530. package/.next/server/chunks/ssr/_32beff4b._.js.map +0 -1
  531. package/.next/server/chunks/ssr/_7f9e89d2._.js.map +0 -1
  532. package/.next/server/chunks/ssr/_8538617d._.js +0 -3
  533. package/.next/server/chunks/ssr/_8538617d._.js.map +0 -1
  534. package/.next/server/chunks/ssr/_a506fcf8._.js +0 -3
  535. package/.next/server/chunks/ssr/_a506fcf8._.js.map +0 -1
  536. package/.next/server/chunks/ssr/_deb7a691._.js.map +0 -1
  537. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +0 -3
  538. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +0 -1
  539. package/.next/server/chunks/ssr/src_app_21685f67._.js +0 -3
  540. package/.next/server/chunks/ssr/src_app_21685f67._.js.map +0 -1
  541. package/.next/static/chunks/0edab8a24d59a626.js +0 -2
  542. package/.next/static/chunks/410dc851d0e3033d.js +0 -1
  543. package/.next/static/chunks/4e38b3f280ced64c.js +0 -1
  544. package/.next/static/chunks/4f2b8a07ace7e02b.js +0 -1
  545. package/.next/static/chunks/57ad5290f7e92ffd.css +0 -3
  546. package/.next/static/chunks/8a919077b73862da.js +0 -1
  547. package/.next/static/chunks/9906444fb1191bb4.js +0 -1
  548. package/.next/static/chunks/a625725b4cd85ea3.js +0 -1
  549. package/.next/static/chunks/ac32974713c57cb3.js +0 -1
  550. package/.next/static/chunks/bdb7ebd88ea13111.js +0 -1
  551. package/.next/static/chunks/bfcfbe145220d365.js +0 -1
  552. package/.next/static/chunks/c0d9f53d91cc65c5.js +0 -10
  553. package/.next/static/chunks/c0e2f959abc4cc13.js +0 -1
  554. package/.next/static/chunks/c822e53f79a492c7.js +0 -1
  555. package/.next/static/chunks/ce6b2024d13b4333.js +0 -1
  556. package/.next/static/chunks/d13249af74d111cf.js +0 -3
  557. package/.next/static/chunks/d16f64ca3a8ed208.js +0 -1
  558. package/.next/static/chunks/d7541a171116ec9c.js +0 -1
  559. package/.next/static/chunks/e03137fd069b1514.js +0 -1
  560. package/.next/static/chunks/e10faa9296c8b246.js +0 -1
  561. package/.next/static/chunks/ec24877f7b7f82c5.js +0 -3
  562. package/.next/static/chunks/ff3bbb5df40b2cc4.js +0 -1
  563. /package/.next/server/chunks/{[root-of-the-server]__be5f57b2._.js.map → [root-of-the-server]__17fa6089._.js.map} +0 -0
  564. /package/.next/server/chunks/{[root-of-the-server]__74b80ca4._.js.map → [root-of-the-server]__5792c29e._.js.map} +0 -0
  565. /package/.next/server/chunks/{[root-of-the-server]__c1b0d50e._.js.map → [root-of-the-server]__7194dfe2._.js.map} +0 -0
  566. /package/.next/server/chunks/{[root-of-the-server]__17124952._.js.map → [root-of-the-server]__89f2190c._.js.map} +0 -0
  567. /package/.next/server/chunks/{[root-of-the-server]__343776df._.js.map → [root-of-the-server]__bbed0e46._.js.map} +0 -0
  568. /package/.next/static/{3rKUmnGginJhM5-OQ1MPX → bTCL-c1-1vqxgA-ZN8TUy}/_buildManifest.js +0 -0
  569. /package/.next/static/{3rKUmnGginJhM5-OQ1MPX → bTCL-c1-1vqxgA-ZN8TUy}/_clientMiddlewareManifest.json +0 -0
  570. /package/.next/static/{3rKUmnGginJhM5-OQ1MPX → bTCL-c1-1vqxgA-ZN8TUy}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[83856,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(50944),f=a.i(51200),g=a.i(74621);function h(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function i({teamId:a,llmTaskEnabled:i}){let j=(0,e.useRouter)(),[k,l]=(0,c.useState)([]),[m,n]=(0,c.useState)(!0),[o,p]=(0,c.useState)(!1),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)({}),[w,x]=(0,c.useState)({}),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)(""),[G,H]=(0,c.useState)(""),[I,J]=(0,c.useState)(!1),K=(0,c.useCallback)(async b=>{let c=!!b?.quiet;r(""),c||n(!0);try{let b=await (0,f.fetchJson)(`/api/teams/workflows?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});if(!b.ok)throw Error("Failed to load workflows");let c=(Array.isArray(b.files)?b.files:[]).map(a=>a.endsWith(".workflow.json")?a.slice(0,-14):null).filter(a=>!!a);l(c.map(a=>({id:a,name:a})))}catch(a){r((0,g.errorMessage)(a))}finally{c||n(!1)}},[a]);async function L(){p(!0);try{await K({quiet:!0})}finally{p(!1)}}async function M(b){if(confirm(`Delete workflow “${b}”? This removes the .workflow.json file from the team workspace.`)){r("");try{let c=await (0,f.fetchJson)(`/api/teams/workflows?teamId=${encodeURIComponent(a)}&id=${encodeURIComponent(b)}`,{method:"DELETE"});if(!c.ok)throw Error(c.error||"Failed to delete workflow");await K({quiet:!0}),s===b&&(t(""),z(""),D(null))}catch(a){r((0,g.errorMessage)(a))}}}async function N(b){x(a=>({...a,[b]:!0})),F("");try{let c=await (0,f.fetchJson)(`/api/teams/workflow-runs?teamId=${encodeURIComponent(a)}&workflowId=${encodeURIComponent(b)}`,{cache:"no-store"});if(!c.ok)throw Error(c.error||"Failed to load runs");let d=Array.isArray(c.runIds)?c.runIds.map(a=>String(a||"").trim()).filter(Boolean):Array.isArray(c.files)?c.files.map(a=>"string"==typeof a&&a.endsWith(".run.json")?a.slice(0,-9):null).filter(a=>!!a):[];v(a=>({...a,[b]:d}))}catch(a){F((0,g.errorMessage)(a)),v(a=>({...a,[b]:[]}))}finally{x(a=>({...a,[b]:!1}))}}async function O(b,c){B(b),z(c),D(null),F(""),H("");try{let d=await (0,f.fetchJson)(`/api/teams/workflow-runs?teamId=${encodeURIComponent(a)}&workflowId=${encodeURIComponent(b)}&runId=${encodeURIComponent(c)}`,{cache:"no-store"});if(!d.ok)throw Error(d.error||"Failed to load run");let e=h(d.run)?d.run:null;if(!e)throw Error("Invalid run format");D({id:String(e.id??c),status:"string"==typeof e.status?e.status:void 0,startedAt:"string"==typeof e.startedAt?e.startedAt:void 0,finishedAt:"string"==typeof e.finishedAt?String(e.finishedAt):void 0,meta:e.meta,memoryUsed:e.memoryUsed,approval:e.approval,raw:e})}catch(a){F((0,g.errorMessage)(a)),D(null)}}async function P(b){if(confirm(`Add workflow from template “${b}”?`)){r("");try{let c=await (0,f.fetchJson)("/api/teams/workflow-templates",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,templateId:b})});if(!c.ok)throw Error(c.error||"Failed to apply template");let d=String(c.workflowId??"").trim();if(!d)throw Error("Template applied but workflowId missing");await K({quiet:!0}),j.push(`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(d)}`)}catch(a){r((0,g.errorMessage)(a))}}}(0,c.useEffect)(()=>{K()},[K]);let Q=(0,c.useMemo)(()=>{if(!C)return[];let a=C.memoryUsed??(h(C.meta)?C.meta.memoryUsed:void 0);return Array.isArray(a)?a.map(a=>h(a)?a:null).filter(Boolean).map(a=>({ts:String(a.ts??"").trim(),author:String(a.author??"").trim(),type:String(a.type??"").trim(),content:String(a.content??"").trim(),source:a.source})).filter(a=>a.ts&&a.author&&a.type&&a.content):[]},[C]);if(m)return(0,b.jsx)("div",{className:"ck-glass p-4",children:"Loading workflows…"});let R=!1===i?(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-amber-500/30 bg-amber-500/10 p-4 text-sm",children:[(0,b.jsx)("div",{className:"font-medium text-amber-200",children:"LLM support is not enabled"}),(0,b.jsxs)("div",{className:"mt-1 text-[color:var(--ck-text-secondary)]",children:["Workflow LLM nodes require the optional built-in ",(0,b.jsx)("code",{className:"px-1",children:"llm-task"})," plugin."]}),(0,b.jsxs)("div",{className:"mt-2 text-[color:var(--ck-text-secondary)]",children:["Enable it with: ",(0,b.jsx)("code",{className:"px-1",children:"openclaw plugins enable llm-task"})," then run"," ",(0,b.jsx)("code",{className:"px-1",children:"openclaw gateway restart"}),"."]}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"If you’re doing a non-interactive install, keep this command in your setup docs as a fallback."})]}):null;return(0,b.jsxs)("div",{className:"ck-glass p-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold",children:"Workflows (file-first)"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Stored in ",(0,b.jsx)("code",{children:"shared-context/workflows/<id>.workflow.json"})," inside the team workspace."]}),R,(0,b.jsxs)("div",{className:"mt-3 flex flex-wrap items-center justify-start gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:()=>{let b=`new-${Date.now()}`;j.push(`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(b)}?draft=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)]",children:"Add workflow"}),(0,b.jsx)("button",{type:"button",onClick:()=>void P("marketing-cadence-v1"),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:"Add example template"}),(0,b.jsx)("button",{type:"button",onClick:L,disabled:o,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:o?"Refreshing…":"Refresh"})]})]}),q?(0,b.jsx)("div",{className:"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-4 text-sm text-red-100",children:q}):null,0===k.length?(0,b.jsx)("p",{className:"mt-4 text-sm text-[color:var(--ck-text-secondary)]",children:"No workflows yet."}):(0,b.jsx)("ul",{className:"mt-4 divide-y divide-white/10 overflow-hidden rounded-[var(--ck-radius-sm)] border border-white/10",children:k.map(c=>{let e=s===c.id,f=u[c.id]??[],i=!!w[c.id];return(0,b.jsxs)("li",{className:"bg-white/5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 px-4 py-3",children:[(0,b.jsxs)("button",{type:"button",onClick:async()=>{let a=e?"":c.id;t(a),z(""),D(null),F(""),a&&await N(a)},className:"min-w-0 flex-1 text-left",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-[color:var(--ck-text-primary)]",children:c.name||c.id}),(0,b.jsx)("div",{className:"truncate text-xs text-[color:var(--ck-text-tertiary)]",children:c.id}),(0,b.jsxs)("div",{className:"mt-1 text-[10px] text-[color:var(--ck-text-tertiary)]",children:["Click to ",e?"collapse":"expand"," run details"]})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[(0,b.jsx)(d.default,{href:`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(c.id)}`,className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10",children:"Edit"}),(0,b.jsx)("button",{type:"button",onClick:()=>void M(c.id),className:"rounded-[var(--ck-radius-sm)] border border-[color:rgba(255,59,48,0.45)] bg-[color:rgba(255,59,48,0.08)] px-3 py-1.5 text-sm font-medium text-[color:var(--ck-accent-red)] transition-colors hover:bg-[color:rgba(255,59,48,0.12)]",children:"Delete"})]})]}),e?(0,b.jsxs)("div",{className:"border-t border-white/10 bg-black/20 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Runs"}),(0,b.jsx)("button",{type:"button",disabled:i,onClick:()=>void N(c.id),className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:i?"Loading…":"Refresh runs"})]}),E?(0,b.jsx)("div",{className:"mt-2 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-2 text-xs text-red-100",children:E}):null,(0,b.jsxs)("div",{className:"mt-2 grid grid-cols-1 gap-3 lg:grid-cols-2",children:[(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-2",children:f.length?(0,b.jsx)("div",{className:"space-y-1",children:f.slice(0,8).map(a=>{let d=y===a;return(0,b.jsx)("button",{type:"button",onClick:()=>void O(c.id,a),className:d?"w-full rounded-[var(--ck-radius-sm)] bg-white/10 px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-primary)]":"w-full rounded-[var(--ck-radius-sm)] px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-secondary)] hover:bg-white/5",children:(0,b.jsx)("span",{className:"font-mono",children:a})},a)})}):(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"No runs yet."})}),(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3",children:C?(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Run detail"}),(0,b.jsxs)("div",{className:"mt-1 text-[11px] text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:C.id}),C.status?(0,b.jsxs)("span",{children:[" • ",C.status]}):null]})]}),(0,b.jsxs)("div",{className:"border-t border-white/10 pt-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Approval"}),(()=>{let c=C.approval;if(!h(c))return(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(No approval info recorded.)"});let d=String(c.state??"").trim(),e="string"==typeof c.requestedAt?c.requestedAt:"",f="string"==typeof c.decidedAt?c.decidedAt:"",i="string"==typeof c.decidedBy?c.decidedBy:"",j="string"==typeof c.note?c.note:"",k=h(c.outbound)?c.outbound:null,l="pending"===d||"waiting_for_approval"===C.status;return(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"state"}),": ",(0,b.jsx)("span",{className:"font-mono text-[color:var(--ck-text-primary)]",children:d||"(unknown)"})]}),e?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"requestedAt"}),": ",(0,b.jsx)("span",{className:"font-mono",children:e})]}):null,f?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"decidedAt"}),": ",(0,b.jsx)("span",{className:"font-mono",children:f})]}):null,i?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"decidedBy"}),": ",(0,b.jsx)("span",{className:"font-mono",children:i})]}):null,j?(0,b.jsx)("div",{className:"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]",children:j}):null,k?(0,b.jsxs)("div",{className:"mt-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px]",children:[(0,b.jsx)("div",{className:"text-[color:var(--ck-text-tertiary)]",children:"Outbound"}),(0,b.jsx)("pre",{className:"mt-1 overflow-auto whitespace-pre-wrap",children:JSON.stringify(k,null,2)})]}):null]}),l?(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-2",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"approval note (optional)"}),(0,b.jsx)("textarea",{value:G,onChange:a=>H(a.target.value),rows:3,className:"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-1 text-xs text-[color:var(--ck-text-primary)]",placeholder:"e.g. Ship it / please tweak hook"}),(0,b.jsx)("div",{className:"mt-2 flex flex-wrap gap-2",children:[{action:"approve",label:"Approve"},{action:"request_changes",label:"Request changes"},{action:"cancel",label:"Cancel"}].map(c=>(0,b.jsx)("button",{type:"button",disabled:I,onClick:async()=>{if(A&&y&&confirm(`${c.label} run ${y}?`)){J(!0),F("");try{let b=await fetch("/api/teams/workflow-runs",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,workflowId:A,runId:y,action:c.action,note:G||void 0,decidedBy:"ClawKitchen UI"})}),d=await b.json();if(!b.ok||!d.ok)throw Error(d.error||"Failed to apply approval action");await O(A,y)}catch(a){F((0,g.errorMessage)(a))}finally{J(!1)}}},className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:c.label},c.action))})]}):null]})})()]}),(0,b.jsxs)("div",{className:"border-t border-white/10 pt-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Memory used in this run"}),Q.length?(0,b.jsx)("div",{className:"mt-2 space-y-2",children:Q.slice(0,20).map((a,c)=>(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2",children:[(0,b.jsxs)("div",{className:"text-[10px] text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts})," • ",(0,b.jsx)("span",{className:"font-mono",children:a.type})," • ",(0,b.jsx)("span",{className:"font-mono",children:a.author})]}),(0,b.jsx)("div",{className:"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]",children:a.content}),void 0!==a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},`${a.ts}-${c}`))}):(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["(None recorded yet.)",(0,b.jsxs)("div",{className:"mt-1",children:["Next step: have the workflow runner write an explicit ",(0,b.jsx)("span",{className:"font-mono",children:"memoryUsed[]"})," list into the run file."]})]})]})]}):y?(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:"Loading run…"}):(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Select a run to see details."})})]})]}):null]},c.id)})})]})}a.s(["default",()=>i])}];
1
+ module.exports=[83856,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(50944),f=a.i(51200),g=a.i(74621);function h(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function i({teamId:a,llmTaskEnabled:i}){let j=(0,e.useRouter)(),[k,l]=(0,c.useState)([]),[m,n]=(0,c.useState)(!0),[o,p]=(0,c.useState)(!1),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)({}),[w,x]=(0,c.useState)({}),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)(""),[G,H]=(0,c.useState)(""),[I,J]=(0,c.useState)(!1),K=(0,c.useCallback)(async b=>{let c=!!b?.quiet;r(""),c||n(!0);try{let b=await (0,f.fetchJson)(`/api/teams/workflows?teamId=${encodeURIComponent(a)}`,{cache:"no-store"});if(!b.ok)throw Error("Failed to load workflows");let c=(Array.isArray(b.files)?b.files:[]).map(a=>a.endsWith(".workflow.json")?a.slice(0,-14):null).filter(a=>!!a);l(c.map(a=>({id:a,name:a})))}catch(a){r((0,g.errorMessage)(a))}finally{c||n(!1)}},[a]);async function L(){p(!0);try{await K({quiet:!0})}finally{p(!1)}}async function M(b){if(confirm(`Delete workflow “${b}”? This removes the .workflow.json file from the team workspace.`)){r("");try{let c=await (0,f.fetchJson)(`/api/teams/workflows?teamId=${encodeURIComponent(a)}&id=${encodeURIComponent(b)}`,{method:"DELETE"});if(!c.ok)throw Error(c.error||"Failed to delete workflow");await K({quiet:!0}),s===b&&(t(""),z(""),D(null))}catch(a){r((0,g.errorMessage)(a))}}}async function N(b){x(a=>({...a,[b]:!0})),F("");try{let c=await (0,f.fetchJson)(`/api/teams/workflow-runs?teamId=${encodeURIComponent(a)}&workflowId=${encodeURIComponent(b)}`,{cache:"no-store"});if(!c.ok)throw Error(c.error||"Failed to load runs");let d=Array.isArray(c.runIds)?c.runIds.map(a=>String(a||"").trim()).filter(Boolean):Array.isArray(c.files)?c.files.map(a=>"string"==typeof a&&a.endsWith(".run.json")?a.slice(0,-9):null).filter(a=>!!a):[];v(a=>({...a,[b]:d}))}catch(a){F((0,g.errorMessage)(a)),v(a=>({...a,[b]:[]}))}finally{x(a=>({...a,[b]:!1}))}}async function O(b,c){B(b),z(c),D(null),F(""),H("");try{let d=await (0,f.fetchJson)(`/api/teams/workflow-runs?teamId=${encodeURIComponent(a)}&workflowId=${encodeURIComponent(b)}&runId=${encodeURIComponent(c)}`,{cache:"no-store"});if(!d.ok)throw Error(d.error||"Failed to load run");let e=h(d.run)?d.run:null;if(!e)throw Error("Invalid run format");D({id:String(e.id??c),status:"string"==typeof e.status?e.status:void 0,startedAt:"string"==typeof e.startedAt?e.startedAt:void 0,finishedAt:"string"==typeof e.finishedAt?String(e.finishedAt):void 0,meta:e.meta,memoryUsed:e.memoryUsed,approval:e.approval,raw:e})}catch(a){F((0,g.errorMessage)(a)),D(null)}}async function P(b){if(confirm(`Add workflow from template “${b}”?`)){r("");try{let c=await (0,f.fetchJson)("/api/teams/workflow-templates",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,templateId:b})});if(!c.ok)throw Error(c.error||"Failed to apply template");let d=String(c.workflowId??"").trim();if(!d)throw Error("Template applied but workflowId missing");await K({quiet:!0}),j.push(`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(d)}`)}catch(a){r((0,g.errorMessage)(a))}}}(0,c.useEffect)(()=>{K()},[K]);let Q=(0,c.useMemo)(()=>{if(!C)return[];let a=C.memoryUsed??(h(C.meta)?C.meta.memoryUsed:void 0);return Array.isArray(a)?a.map(a=>h(a)?a:null).filter(Boolean).map(a=>({ts:String(a.ts??"").trim(),author:String(a.author??"").trim(),type:String(a.type??"").trim(),content:String(a.content??"").trim(),source:a.source})).filter(a=>a.ts&&a.author&&a.type&&a.content):[]},[C]);if(m)return(0,b.jsx)("div",{className:"ck-card p-4",children:"Loading workflows…"});let R=!1===i?(0,b.jsxs)("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 p-4 text-sm",children:[(0,b.jsx)("div",{className:"font-medium text-amber-200",children:"LLM support is not enabled"}),(0,b.jsxs)("div",{className:"mt-1 text-[color:var(--ck-text-secondary)]",children:["Workflow LLM nodes require the optional built-in ",(0,b.jsx)("code",{className:"px-1",children:"llm-task"})," plugin."]}),(0,b.jsxs)("div",{className:"mt-2 text-[color:var(--ck-text-secondary)]",children:["Enable it with: ",(0,b.jsx)("code",{className:"px-1",children:"openclaw plugins enable llm-task"})," then run"," ",(0,b.jsx)("code",{className:"px-1",children:"openclaw gateway restart"}),"."]}),(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"If you’re doing a non-interactive install, keep this command in your setup docs as a fallback."})]}):null;return(0,b.jsxs)("div",{className:"ck-card p-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold",children:"Workflows (file-first)"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[color:var(--ck-text-secondary)]",children:["Stored in ",(0,b.jsx)("code",{children:"shared-context/workflows/<id>.workflow.json"})," inside the team workspace."]}),R,(0,b.jsxs)("div",{className:"mt-3 flex flex-wrap items-center justify-start gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:()=>{let b=`new-${Date.now()}`;j.push(`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(b)}?draft=1`)},className:"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)]",children:"Add workflow"}),(0,b.jsx)("button",{type:"button",onClick:()=>void P("marketing-cadence-v1"),className:"rounded-lg 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:"Add example template"}),(0,b.jsx)("button",{type:"button",onClick:L,disabled:o,className:"rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:o?"Refreshing…":"Refresh"})]})]}),q?(0,b.jsx)("div",{className:"mt-4 rounded-lg border border-red-400/30 bg-red-500/10 p-4 text-sm text-red-100",children:q}):null,0===k.length?(0,b.jsx)("p",{className:"mt-4 text-sm text-[color:var(--ck-text-secondary)]",children:"No workflows yet."}):(0,b.jsx)("ul",{className:"mt-4 divide-y divide-white/10 overflow-hidden rounded-lg border border-white/10",children:k.map(c=>{let e=s===c.id,f=u[c.id]??[],i=!!w[c.id];return(0,b.jsxs)("li",{className:"bg-white/5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 px-4 py-3",children:[(0,b.jsxs)("button",{type:"button",onClick:async()=>{let a=e?"":c.id;t(a),z(""),D(null),F(""),a&&await N(a)},className:"min-w-0 flex-1 text-left",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium text-[color:var(--ck-text-primary)]",children:c.name||c.id}),(0,b.jsx)("div",{className:"truncate text-xs text-[color:var(--ck-text-tertiary)]",children:c.id}),(0,b.jsxs)("div",{className:"mt-1 text-[10px] text-[color:var(--ck-text-tertiary)]",children:["Click to ",e?"collapse":"expand"," run details"]})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[(0,b.jsx)(d.default,{href:`/teams/${encodeURIComponent(a)}/workflows/${encodeURIComponent(c.id)}`,className:"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10",children:"Edit"}),(0,b.jsx)("button",{type:"button",onClick:()=>void M(c.id),className:"rounded-lg border border-[color:rgba(255,59,48,0.45)] bg-[color:rgba(255,59,48,0.08)] px-3 py-1.5 text-sm font-medium text-[color:var(--ck-accent-red)] transition-colors hover:bg-[color:rgba(255,59,48,0.12)]",children:"Delete"})]})]}),e?(0,b.jsxs)("div",{className:"border-t border-white/10 bg-white/5 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Runs"}),(0,b.jsx)("button",{type:"button",disabled:i,onClick:()=>void N(c.id),className:"rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:i?"Loading…":"Refresh runs"})]}),E?(0,b.jsx)("div",{className:"mt-2 rounded-lg border border-red-400/30 bg-red-500/10 p-2 text-xs text-red-100",children:E}):null,(0,b.jsxs)("div",{className:"mt-2 grid grid-cols-1 gap-3 lg:grid-cols-2",children:[(0,b.jsx)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-2",children:f.length?(0,b.jsx)("div",{className:"space-y-1",children:f.slice(0,8).map(a=>{let d=y===a;return(0,b.jsx)("button",{type:"button",onClick:()=>void O(c.id,a),className:d?"w-full rounded-lg bg-white/10 px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-primary)]":"w-full rounded-lg px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-secondary)] hover:bg-white/5",children:(0,b.jsx)("span",{className:"font-mono",children:a})},a)})}):(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"No runs yet."})}),(0,b.jsx)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-3",children:C?(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Run detail"}),(0,b.jsxs)("div",{className:"mt-1 text-[11px] text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:C.id}),C.status?(0,b.jsxs)("span",{children:[" • ",C.status]}):null]})]}),(0,b.jsxs)("div",{className:"border-t border-white/10 pt-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Approval"}),(()=>{let c=C.approval;if(!h(c))return(0,b.jsx)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:"(No approval info recorded.)"});let d=String(c.state??"").trim(),e="string"==typeof c.requestedAt?c.requestedAt:"",f="string"==typeof c.decidedAt?c.decidedAt:"",i="string"==typeof c.decidedBy?c.decidedBy:"",j="string"==typeof c.note?c.note:"",k=h(c.outbound)?c.outbound:null,l="pending"===d||"waiting_for_approval"===C.status;return(0,b.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,b.jsxs)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-2 text-[11px] text-[color:var(--ck-text-secondary)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"state"}),": ",(0,b.jsx)("span",{className:"font-mono text-[color:var(--ck-text-primary)]",children:d||"(unknown)"})]}),e?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"requestedAt"}),": ",(0,b.jsx)("span",{className:"font-mono",children:e})]}):null,f?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"decidedAt"}),": ",(0,b.jsx)("span",{className:"font-mono",children:f})]}):null,i?(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{className:"font-mono",children:"decidedBy"}),": ",(0,b.jsx)("span",{className:"font-mono",children:i})]}):null,j?(0,b.jsx)("div",{className:"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]",children:j}):null,k?(0,b.jsxs)("div",{className:"mt-2 rounded-lg border border-white/10 bg-black/30 p-2 text-[10px]",children:[(0,b.jsx)("div",{className:"text-[color:var(--ck-text-tertiary)]",children:"Outbound"}),(0,b.jsx)("pre",{className:"mt-1 overflow-auto whitespace-pre-wrap",children:JSON.stringify(k,null,2)})]}):null]}),l?(0,b.jsxs)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-2",children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]",children:"approval note (optional)"}),(0,b.jsx)("textarea",{value:G,onChange:a=>H(a.target.value),rows:3,className:"mt-1 w-full rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-xs text-[color:var(--ck-text-primary)]",placeholder:"e.g. Ship it / please tweak hook"}),(0,b.jsx)("div",{className:"mt-2 flex flex-wrap gap-2",children:[{action:"approve",label:"Approve"},{action:"request_changes",label:"Request changes"},{action:"cancel",label:"Cancel"}].map(c=>(0,b.jsx)("button",{type:"button",disabled:I,onClick:async()=>{if(A&&y&&confirm(`${c.label} run ${y}?`)){J(!0),F("");try{let b=await fetch("/api/teams/workflow-runs",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({teamId:a,workflowId:A,runId:y,action:c.action,note:G||void 0,decidedBy:"ClawKitchen UI"})}),d=await b.json();if(!b.ok||!d.ok)throw Error(d.error||"Failed to apply approval action");await O(A,y)}catch(a){F((0,g.errorMessage)(a))}finally{J(!1)}}},className:"rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60",children:c.label},c.action))})]}):null]})})()]}),(0,b.jsxs)("div",{className:"border-t border-white/10 pt-3",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[color:var(--ck-text-secondary)]",children:"Memory used in this run"}),Q.length?(0,b.jsx)("div",{className:"mt-2 space-y-2",children:Q.slice(0,20).map((a,c)=>(0,b.jsxs)("div",{className:"rounded-lg border border-white/10 bg-white/5 p-2",children:[(0,b.jsxs)("div",{className:"text-[10px] text-[color:var(--ck-text-tertiary)]",children:[(0,b.jsx)("span",{className:"font-mono",children:a.ts})," • ",(0,b.jsx)("span",{className:"font-mono",children:a.type})," • ",(0,b.jsx)("span",{className:"font-mono",children:a.author})]}),(0,b.jsx)("div",{className:"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]",children:a.content}),void 0!==a.source?(0,b.jsx)("pre",{className:"mt-2 overflow-auto rounded-lg border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]",children:JSON.stringify(a.source,null,2)}):null]},`${a.ts}-${c}`))}):(0,b.jsxs)("div",{className:"mt-2 text-xs text-[color:var(--ck-text-tertiary)]",children:["(None recorded yet.)",(0,b.jsxs)("div",{className:"mt-1",children:["Next step: have the workflow runner write an explicit ",(0,b.jsx)("span",{className:"font-mono",children:"memoryUsed[]"})," list into the run file."]})]})]})]}):y?(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:"Loading run…"}):(0,b.jsx)("div",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Select a run to see details."})})]})]}):null]},c.id)})})]})}a.s(["default",()=>i])}];
2
2
 
3
3
  //# sourceMappingURL=src_app_teams_%5BteamId%5D_workflows_workflows-client_tsx_12742cc9._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/teams/%5BteamId%5D/workflows/workflows-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { errorMessage } from \"@/lib/errors\";\n\ntype RunDetail = {\n id: string;\n status?: string;\n startedAt?: string;\n finishedAt?: string;\n meta?: unknown;\n memoryUsed?: unknown;\n approval?: unknown;\n raw?: Record<string, unknown>;\n};\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return Boolean(v) && typeof v === \"object\" && !Array.isArray(v);\n}\n\nexport default function WorkflowsClient({ teamId, llmTaskEnabled }: { teamId: string; llmTaskEnabled?: boolean }) {\n const router = useRouter();\n const [workflows, setWorkflows] = useState<Array<{ id: string; name?: string }>>([]);\n const [loading, setLoading] = useState(true);\n const [refreshing, setRefreshing] = useState(false);\n const [error, setError] = useState<string>(\"\");\n\n const [expandedWorkflowId, setExpandedWorkflowId] = useState<string>(\"\");\n const [runsByWorkflow, setRunsByWorkflow] = useState<Record<string, string[]>>({});\n const [runsLoading, setRunsLoading] = useState<Record<string, boolean>>({});\n const [selectedRunId, setSelectedRunId] = useState<string>(\"\");\n const [selectedWorkflowId, setSelectedWorkflowId] = useState<string>(\"\");\n const [selectedRun, setSelectedRun] = useState<RunDetail | null>(null);\n const [runError, setRunError] = useState<string>(\"\");\n const [approvalNote, setApprovalNote] = useState<string>(\"\");\n const [approvalBusy, setApprovalBusy] = useState<boolean>(false);\n\n const load = useCallback(\n async (opts?: { quiet?: boolean }) => {\n const quiet = Boolean(opts?.quiet);\n setError(\"\");\n if (!quiet) setLoading(true);\n try {\n const json = await fetchJson<{ ok?: boolean; files?: string[] }>(\n `/api/teams/workflows?teamId=${encodeURIComponent(teamId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(\"Failed to load workflows\");\n const files = Array.isArray(json.files) ? json.files : [];\n const ids = files\n .map((f) => (f.endsWith(\".workflow.json\") ? f.slice(0, -\".workflow.json\".length) : null))\n .filter((id): id is string => Boolean(id));\n setWorkflows(ids.map((id) => ({ id, name: id })));\n } catch (e: unknown) {\n setError(errorMessage(e));\n } finally {\n if (!quiet) setLoading(false);\n }\n },\n [teamId]\n );\n\n useEffect(() => {\n void load();\n }, [load]);\n\n async function onRefresh() {\n setRefreshing(true);\n try {\n await load({ quiet: true });\n } finally {\n setRefreshing(false);\n }\n }\n\n async function onDelete(id: string) {\n if (!confirm(`Delete workflow “${id}”? This removes the .workflow.json file from the team workspace.`)) return;\n setError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; error?: string }>(\n `/api/teams/workflows?teamId=${encodeURIComponent(teamId)}&id=${encodeURIComponent(id)}`,\n { method: \"DELETE\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to delete workflow\");\n await load({ quiet: true });\n if (expandedWorkflowId === id) {\n setExpandedWorkflowId(\"\");\n setSelectedRunId(\"\");\n setSelectedRun(null);\n }\n } catch (e: unknown) {\n setError(errorMessage(e));\n }\n }\n\n async function loadRunsForWorkflow(workflowId: string) {\n setRunsLoading((s) => ({ ...s, [workflowId]: true }));\n setRunError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; runIds?: string[]; files?: string[]; error?: string }>(\n `/api/teams/workflow-runs?teamId=${encodeURIComponent(teamId)}&workflowId=${encodeURIComponent(workflowId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to load runs\");\n\n // New API: runIds (directory-per-run layout). Back-compat: files[] of *.run.json.\n const runIds = Array.isArray(json.runIds)\n ? json.runIds.map((x) => String(x || \"\").trim()).filter(Boolean)\n : Array.isArray(json.files)\n ? json.files\n .map((f) => (typeof f === \"string\" && f.endsWith(\".run.json\") ? f.slice(0, -\".run.json\".length) : null))\n .filter((x): x is string => Boolean(x))\n : [];\n\n setRunsByWorkflow((s) => ({ ...s, [workflowId]: runIds }));\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n setRunsByWorkflow((s) => ({ ...s, [workflowId]: [] }));\n } finally {\n setRunsLoading((s) => ({ ...s, [workflowId]: false }));\n }\n }\n\n async function loadRunDetail(workflowId: string, runId: string) {\n setSelectedWorkflowId(workflowId);\n setSelectedRunId(runId);\n setSelectedRun(null);\n setRunError(\"\");\n setApprovalNote(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; run?: unknown; error?: string }>(\n `/api/teams/workflow-runs?teamId=${encodeURIComponent(teamId)}&workflowId=${encodeURIComponent(workflowId)}&runId=${encodeURIComponent(runId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to load run\");\n const run = isRecord(json.run) ? json.run : null;\n if (!run) throw new Error(\"Invalid run format\");\n setSelectedRun({\n id: String(run.id ?? runId),\n status: typeof run.status === \"string\" ? run.status : undefined,\n startedAt: typeof run.startedAt === \"string\" ? run.startedAt : undefined,\n finishedAt: typeof (run as Record<string, unknown>).finishedAt === \"string\" ? String((run as Record<string, unknown>).finishedAt) : undefined,\n meta: (run as Record<string, unknown>).meta,\n memoryUsed: (run as Record<string, unknown>).memoryUsed,\n approval: (run as Record<string, unknown>).approval,\n raw: run,\n });\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n setSelectedRun(null);\n }\n }\n\n async function onAddTemplate(templateId: string) {\n if (!confirm(`Add workflow from template “${templateId}”?`)) return;\n setError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; workflowId?: string; error?: string }>(\"/api/teams/workflow-templates\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, templateId }),\n });\n if (!json.ok) throw new Error(json.error || \"Failed to apply template\");\n const workflowId = String(json.workflowId ?? \"\").trim();\n if (!workflowId) throw new Error(\"Template applied but workflowId missing\");\n await load({ quiet: true });\n router.push(`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(workflowId)}`);\n } catch (e: unknown) {\n setError(errorMessage(e));\n }\n }\n const memoryUsedItems = useMemo(() => {\n const run = selectedRun;\n if (!run) return [] as Array<{ ts: string; author: string; type: string; content: string; source?: unknown }>;\n\n const raw = run.memoryUsed ?? (isRecord(run.meta) ? (run.meta as Record<string, unknown>).memoryUsed : undefined);\n if (!Array.isArray(raw)) return [];\n\n return raw\n .map((x) => (isRecord(x) ? x : null))\n .filter(Boolean)\n .map((o) => ({\n ts: String((o as Record<string, unknown>).ts ?? \"\").trim(),\n author: String((o as Record<string, unknown>).author ?? \"\").trim(),\n type: String((o as Record<string, unknown>).type ?? \"\").trim(),\n content: String((o as Record<string, unknown>).content ?? \"\").trim(),\n source: (o as Record<string, unknown>).source,\n }))\n .filter((it) => it.ts && it.author && it.type && it.content);\n }, [selectedRun]);\n\n if (loading) {\n return <div className=\"ck-glass p-4\">Loading workflows…</div>;\n }\n\n const llmHelp = llmTaskEnabled === false ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-amber-500/30 bg-amber-500/10 p-4 text-sm\">\n <div className=\"font-medium text-amber-200\">LLM support is not enabled</div>\n <div className=\"mt-1 text-[color:var(--ck-text-secondary)]\">\n Workflow LLM nodes require the optional built-in <code className=\"px-1\">llm-task</code> plugin.\n </div>\n <div className=\"mt-2 text-[color:var(--ck-text-secondary)]\">\n Enable it with: <code className=\"px-1\">openclaw plugins enable llm-task</code> then run{' '}\n <code className=\"px-1\">openclaw gateway restart</code>.\n </div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n If you’re doing a non-interactive install, keep this command in your setup docs as a fallback.\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"ck-glass p-6\">\n <div>\n <h2 className=\"text-lg font-semibold\">Workflows (file-first)</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Stored in <code>shared-context/workflows/&lt;id&gt;.workflow.json</code> inside the team workspace.\n </p>\n\n {llmHelp}\n\n <div className=\"mt-3 flex flex-wrap items-center justify-start gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n const id = `new-${Date.now()}`;\n router.push(`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(id)}?draft=1`);\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)]\"\n >\n Add workflow\n </button>\n\n\n <button\n type=\"button\"\n onClick={() => void onAddTemplate(\"marketing-cadence-v1\")}\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 Add example template\n </button>\n\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={refreshing}\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 disabled:opacity-60\"\n >\n {refreshing ? \"Refreshing…\" : \"Refresh\"}\n </button>\n </div>\n </div>\n\n {error ? (\n <div className=\"mt-4 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-4 text-sm text-red-100\">\n {error}\n </div>\n ) : null}\n\n {workflows.length === 0 ? (\n <p className=\"mt-4 text-sm text-[color:var(--ck-text-secondary)]\">No workflows yet.</p>\n ) : (\n <ul className=\"mt-4 divide-y divide-white/10 overflow-hidden rounded-[var(--ck-radius-sm)] border border-white/10\">\n {workflows.map((w) => {\n const expanded = expandedWorkflowId === w.id;\n const runs = runsByWorkflow[w.id] ?? [];\n const isLoadingRuns = Boolean(runsLoading[w.id]);\n\n return (\n <li key={w.id} className=\"bg-white/5\">\n <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <button\n type=\"button\"\n onClick={async () => {\n const next = expanded ? \"\" : w.id;\n setExpandedWorkflowId(next);\n setSelectedRunId(\"\");\n setSelectedRun(null);\n setRunError(\"\");\n if (next) await loadRunsForWorkflow(next);\n }}\n className=\"min-w-0 flex-1 text-left\"\n >\n <div className=\"truncate text-sm font-medium text-[color:var(--ck-text-primary)]\">{w.name || w.id}</div>\n <div className=\"truncate text-xs text-[color:var(--ck-text-tertiary)]\">{w.id}</div>\n <div className=\"mt-1 text-[10px] text-[color:var(--ck-text-tertiary)]\">\n Click to {expanded ? \"collapse\" : \"expand\"} run details\n </div>\n </button>\n\n <div className=\"flex shrink-0 items-center gap-2\">\n <Link\n href={`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(w.id)}`}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10\"\n >\n Edit\n </Link>\n <button\n type=\"button\"\n onClick={() => void onDelete(w.id)}\n className=\"rounded-[var(--ck-radius-sm)] border border-[color:rgba(255,59,48,0.45)] bg-[color:rgba(255,59,48,0.08)] px-3 py-1.5 text-sm font-medium text-[color:var(--ck-accent-red)] transition-colors hover:bg-[color:rgba(255,59,48,0.12)]\"\n >\n Delete\n </button>\n </div>\n </div>\n\n {expanded ? (\n <div className=\"border-t border-white/10 bg-black/20 px-4 py-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Runs</div>\n <button\n type=\"button\"\n disabled={isLoadingRuns}\n onClick={() => void loadRunsForWorkflow(w.id)}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60\"\n >\n {isLoadingRuns ? \"Loading…\" : \"Refresh runs\"}\n </button>\n </div>\n\n {runError ? (\n <div className=\"mt-2 rounded-[var(--ck-radius-sm)] border border-red-400/30 bg-red-500/10 p-2 text-xs text-red-100\">{runError}</div>\n ) : null}\n\n <div className=\"mt-2 grid grid-cols-1 gap-3 lg:grid-cols-2\">\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-2\">\n {runs.length ? (\n <div className=\"space-y-1\">\n {runs.slice(0, 8).map((runId) => {\n const selected = selectedRunId === runId;\n return (\n <button\n key={runId}\n type=\"button\"\n onClick={() => void loadRunDetail(w.id, runId)}\n className={\n selected\n ? \"w-full rounded-[var(--ck-radius-sm)] bg-white/10 px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-primary)]\"\n : \"w-full rounded-[var(--ck-radius-sm)] px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-secondary)] hover:bg-white/5\"\n }\n >\n <span className=\"font-mono\">{runId}</span>\n </button>\n );\n })}\n </div>\n ) : (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">No runs yet.</div>\n )}\n </div>\n\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-3\">\n {selectedRun ? (\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Run detail</div>\n <div className=\"mt-1 text-[11px] text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{selectedRun.id}</span>\n {selectedRun.status ? <span> • {selectedRun.status}</span> : null}\n </div>\n </div>\n\n <div className=\"border-t border-white/10 pt-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Approval</div>\n {(() => {\n const approval = selectedRun.approval;\n if (!isRecord(approval)) {\n return <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">(No approval info recorded.)</div>;\n }\n\n const state = String(approval.state ?? \"\").trim();\n const requestedAt = typeof approval.requestedAt === \"string\" ? approval.requestedAt : \"\";\n const decidedAt = typeof approval.decidedAt === \"string\" ? approval.decidedAt : \"\";\n const decidedBy = typeof approval.decidedBy === \"string\" ? approval.decidedBy : \"\";\n const note = typeof approval.note === \"string\" ? approval.note : \"\";\n const outbound = isRecord(approval.outbound) ? approval.outbound : null;\n\n const canAct = state === \"pending\" || selectedRun.status === \"waiting_for_approval\";\n\n return (\n <div className=\"mt-2 space-y-2\">\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2 text-[11px] text-[color:var(--ck-text-secondary)]\">\n <div>\n <span className=\"font-mono\">state</span>: <span className=\"font-mono text-[color:var(--ck-text-primary)]\">{state || \"(unknown)\"}</span>\n </div>\n {requestedAt ? (\n <div>\n <span className=\"font-mono\">requestedAt</span>: <span className=\"font-mono\">{requestedAt}</span>\n </div>\n ) : null}\n {decidedAt ? (\n <div>\n <span className=\"font-mono\">decidedAt</span>: <span className=\"font-mono\">{decidedAt}</span>\n </div>\n ) : null}\n {decidedBy ? (\n <div>\n <span className=\"font-mono\">decidedBy</span>: <span className=\"font-mono\">{decidedBy}</span>\n </div>\n ) : null}\n {note ? (\n <div className=\"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]\">{note}</div>\n ) : null}\n {outbound ? (\n <div className=\"mt-2 rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px]\">\n <div className=\"text-[color:var(--ck-text-tertiary)]\">Outbound</div>\n <pre className=\"mt-1 overflow-auto whitespace-pre-wrap\">{JSON.stringify(outbound, null, 2)}</pre>\n </div>\n ) : null}\n </div>\n\n {canAct ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/20 p-2\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">approval note (optional)</div>\n <textarea\n value={approvalNote}\n onChange={(e) => setApprovalNote(e.target.value)}\n rows={3}\n className=\"mt-1 w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-1 text-xs text-[color:var(--ck-text-primary)]\"\n placeholder=\"e.g. Ship it / please tweak hook\"\n />\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {([\n { action: \"approve\", label: \"Approve\" },\n { action: \"request_changes\", label: \"Request changes\" },\n { action: \"cancel\", label: \"Cancel\" },\n ] as const).map((btn) => (\n <button\n key={btn.action}\n type=\"button\"\n disabled={approvalBusy}\n onClick={async () => {\n if (!selectedWorkflowId || !selectedRunId) return;\n if (!confirm(`${btn.label} run ${selectedRunId}?`)) return;\n setApprovalBusy(true);\n setRunError(\"\");\n try {\n const res = await fetch(\"/api/teams/workflow-runs\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n teamId,\n workflowId: selectedWorkflowId,\n runId: selectedRunId,\n action: btn.action,\n note: approvalNote || undefined,\n decidedBy: \"ClawKitchen UI\",\n }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to apply approval action\");\n await loadRunDetail(selectedWorkflowId, selectedRunId);\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n } finally {\n setApprovalBusy(false);\n }\n }}\n className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60\"\n >\n {btn.label}\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n })()}\n </div>\n\n <div className=\"border-t border-white/10 pt-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Memory used in this run</div>\n {memoryUsedItems.length ? (\n <div className=\"mt-2 space-y-2\">\n {memoryUsedItems.slice(0, 20).map((m, idx) => (\n <div key={`${m.ts}-${idx}`} className=\"rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 p-2\">\n <div className=\"text-[10px] text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{m.ts}</span> • <span className=\"font-mono\">{m.type}</span> • <span className=\"font-mono\">{m.author}</span>\n </div>\n <div className=\"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]\">{m.content}</div>\n {m.source !== undefined ? (\n <pre className=\"mt-2 overflow-auto rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]\">\n {JSON.stringify(m.source, null, 2)}\n </pre>\n ) : null}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n (None recorded yet.)\n <div className=\"mt-1\">Next step: have the workflow runner write an explicit <span className=\"font-mono\">memoryUsed[]</span> list into the run file.</div>\n </div>\n )}\n </div>\n </div>\n ) : selectedRunId ? (\n <div className=\"text-xs text-[color:var(--ck-text-secondary)]\">Loading run…</div>\n ) : (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Select a run to see details.</div>\n )}\n </div>\n </div>\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/app/teams/%5BteamId%5D/workflows/workflows-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { fetchJson } from \"@/lib/fetch-json\";\nimport { errorMessage } from \"@/lib/errors\";\n\ntype RunDetail = {\n id: string;\n status?: string;\n startedAt?: string;\n finishedAt?: string;\n meta?: unknown;\n memoryUsed?: unknown;\n approval?: unknown;\n raw?: Record<string, unknown>;\n};\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return Boolean(v) && typeof v === \"object\" && !Array.isArray(v);\n}\n\nexport default function WorkflowsClient({ teamId, llmTaskEnabled }: { teamId: string; llmTaskEnabled?: boolean }) {\n const router = useRouter();\n const [workflows, setWorkflows] = useState<Array<{ id: string; name?: string }>>([]);\n const [loading, setLoading] = useState(true);\n const [refreshing, setRefreshing] = useState(false);\n const [error, setError] = useState<string>(\"\");\n\n const [expandedWorkflowId, setExpandedWorkflowId] = useState<string>(\"\");\n const [runsByWorkflow, setRunsByWorkflow] = useState<Record<string, string[]>>({});\n const [runsLoading, setRunsLoading] = useState<Record<string, boolean>>({});\n const [selectedRunId, setSelectedRunId] = useState<string>(\"\");\n const [selectedWorkflowId, setSelectedWorkflowId] = useState<string>(\"\");\n const [selectedRun, setSelectedRun] = useState<RunDetail | null>(null);\n const [runError, setRunError] = useState<string>(\"\");\n const [approvalNote, setApprovalNote] = useState<string>(\"\");\n const [approvalBusy, setApprovalBusy] = useState<boolean>(false);\n\n const load = useCallback(\n async (opts?: { quiet?: boolean }) => {\n const quiet = Boolean(opts?.quiet);\n setError(\"\");\n if (!quiet) setLoading(true);\n try {\n const json = await fetchJson<{ ok?: boolean; files?: string[] }>(\n `/api/teams/workflows?teamId=${encodeURIComponent(teamId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(\"Failed to load workflows\");\n const files = Array.isArray(json.files) ? json.files : [];\n const ids = files\n .map((f) => (f.endsWith(\".workflow.json\") ? f.slice(0, -\".workflow.json\".length) : null))\n .filter((id): id is string => Boolean(id));\n setWorkflows(ids.map((id) => ({ id, name: id })));\n } catch (e: unknown) {\n setError(errorMessage(e));\n } finally {\n if (!quiet) setLoading(false);\n }\n },\n [teamId]\n );\n\n useEffect(() => {\n void load();\n }, [load]);\n\n async function onRefresh() {\n setRefreshing(true);\n try {\n await load({ quiet: true });\n } finally {\n setRefreshing(false);\n }\n }\n\n async function onDelete(id: string) {\n if (!confirm(`Delete workflow “${id}”? This removes the .workflow.json file from the team workspace.`)) return;\n setError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; error?: string }>(\n `/api/teams/workflows?teamId=${encodeURIComponent(teamId)}&id=${encodeURIComponent(id)}`,\n { method: \"DELETE\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to delete workflow\");\n await load({ quiet: true });\n if (expandedWorkflowId === id) {\n setExpandedWorkflowId(\"\");\n setSelectedRunId(\"\");\n setSelectedRun(null);\n }\n } catch (e: unknown) {\n setError(errorMessage(e));\n }\n }\n\n async function loadRunsForWorkflow(workflowId: string) {\n setRunsLoading((s) => ({ ...s, [workflowId]: true }));\n setRunError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; runIds?: string[]; files?: string[]; error?: string }>(\n `/api/teams/workflow-runs?teamId=${encodeURIComponent(teamId)}&workflowId=${encodeURIComponent(workflowId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to load runs\");\n\n // New API: runIds (directory-per-run layout). Back-compat: files[] of *.run.json.\n const runIds = Array.isArray(json.runIds)\n ? json.runIds.map((x) => String(x || \"\").trim()).filter(Boolean)\n : Array.isArray(json.files)\n ? json.files\n .map((f) => (typeof f === \"string\" && f.endsWith(\".run.json\") ? f.slice(0, -\".run.json\".length) : null))\n .filter((x): x is string => Boolean(x))\n : [];\n\n setRunsByWorkflow((s) => ({ ...s, [workflowId]: runIds }));\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n setRunsByWorkflow((s) => ({ ...s, [workflowId]: [] }));\n } finally {\n setRunsLoading((s) => ({ ...s, [workflowId]: false }));\n }\n }\n\n async function loadRunDetail(workflowId: string, runId: string) {\n setSelectedWorkflowId(workflowId);\n setSelectedRunId(runId);\n setSelectedRun(null);\n setRunError(\"\");\n setApprovalNote(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; run?: unknown; error?: string }>(\n `/api/teams/workflow-runs?teamId=${encodeURIComponent(teamId)}&workflowId=${encodeURIComponent(workflowId)}&runId=${encodeURIComponent(runId)}`,\n { cache: \"no-store\" }\n );\n if (!json.ok) throw new Error(json.error || \"Failed to load run\");\n const run = isRecord(json.run) ? json.run : null;\n if (!run) throw new Error(\"Invalid run format\");\n setSelectedRun({\n id: String(run.id ?? runId),\n status: typeof run.status === \"string\" ? run.status : undefined,\n startedAt: typeof run.startedAt === \"string\" ? run.startedAt : undefined,\n finishedAt: typeof (run as Record<string, unknown>).finishedAt === \"string\" ? String((run as Record<string, unknown>).finishedAt) : undefined,\n meta: (run as Record<string, unknown>).meta,\n memoryUsed: (run as Record<string, unknown>).memoryUsed,\n approval: (run as Record<string, unknown>).approval,\n raw: run,\n });\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n setSelectedRun(null);\n }\n }\n\n async function onAddTemplate(templateId: string) {\n if (!confirm(`Add workflow from template “${templateId}”?`)) return;\n setError(\"\");\n try {\n const json = await fetchJson<{ ok?: boolean; workflowId?: string; error?: string }>(\"/api/teams/workflow-templates\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ teamId, templateId }),\n });\n if (!json.ok) throw new Error(json.error || \"Failed to apply template\");\n const workflowId = String(json.workflowId ?? \"\").trim();\n if (!workflowId) throw new Error(\"Template applied but workflowId missing\");\n await load({ quiet: true });\n router.push(`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(workflowId)}`);\n } catch (e: unknown) {\n setError(errorMessage(e));\n }\n }\n const memoryUsedItems = useMemo(() => {\n const run = selectedRun;\n if (!run) return [] as Array<{ ts: string; author: string; type: string; content: string; source?: unknown }>;\n\n const raw = run.memoryUsed ?? (isRecord(run.meta) ? (run.meta as Record<string, unknown>).memoryUsed : undefined);\n if (!Array.isArray(raw)) return [];\n\n return raw\n .map((x) => (isRecord(x) ? x : null))\n .filter(Boolean)\n .map((o) => ({\n ts: String((o as Record<string, unknown>).ts ?? \"\").trim(),\n author: String((o as Record<string, unknown>).author ?? \"\").trim(),\n type: String((o as Record<string, unknown>).type ?? \"\").trim(),\n content: String((o as Record<string, unknown>).content ?? \"\").trim(),\n source: (o as Record<string, unknown>).source,\n }))\n .filter((it) => it.ts && it.author && it.type && it.content);\n }, [selectedRun]);\n\n if (loading) {\n return <div className=\"ck-card p-4\">Loading workflows…</div>;\n }\n\n const llmHelp = llmTaskEnabled === false ? (\n <div className=\"rounded-lg border border-amber-500/30 bg-amber-500/10 p-4 text-sm\">\n <div className=\"font-medium text-amber-200\">LLM support is not enabled</div>\n <div className=\"mt-1 text-[color:var(--ck-text-secondary)]\">\n Workflow LLM nodes require the optional built-in <code className=\"px-1\">llm-task</code> plugin.\n </div>\n <div className=\"mt-2 text-[color:var(--ck-text-secondary)]\">\n Enable it with: <code className=\"px-1\">openclaw plugins enable llm-task</code> then run{' '}\n <code className=\"px-1\">openclaw gateway restart</code>.\n </div>\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n If you’re doing a non-interactive install, keep this command in your setup docs as a fallback.\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"ck-card p-6\">\n <div>\n <h2 className=\"text-lg font-semibold\">Workflows (file-first)</h2>\n <p className=\"mt-1 text-sm text-[color:var(--ck-text-secondary)]\">\n Stored in <code>shared-context/workflows/&lt;id&gt;.workflow.json</code> inside the team workspace.\n </p>\n\n {llmHelp}\n\n <div className=\"mt-3 flex flex-wrap items-center justify-start gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n const id = `new-${Date.now()}`;\n router.push(`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(id)}?draft=1`);\n }}\n className=\"rounded-lg bg-[var(--ck-accent-red)] px-3 py-2 text-sm font-medium text-white shadow-[var(--ck-shadow-1)]\"\n >\n Add workflow\n </button>\n\n\n <button\n type=\"button\"\n onClick={() => void onAddTemplate(\"marketing-cadence-v1\")}\n className=\"rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10\"\n >\n Add example template\n </button>\n\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={refreshing}\n className=\"rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60\"\n >\n {refreshing ? \"Refreshing…\" : \"Refresh\"}\n </button>\n </div>\n </div>\n\n {error ? (\n <div className=\"mt-4 rounded-lg border border-red-400/30 bg-red-500/10 p-4 text-sm text-red-100\">\n {error}\n </div>\n ) : null}\n\n {workflows.length === 0 ? (\n <p className=\"mt-4 text-sm text-[color:var(--ck-text-secondary)]\">No workflows yet.</p>\n ) : (\n <ul className=\"mt-4 divide-y divide-white/10 overflow-hidden rounded-lg border border-white/10\">\n {workflows.map((w) => {\n const expanded = expandedWorkflowId === w.id;\n const runs = runsByWorkflow[w.id] ?? [];\n const isLoadingRuns = Boolean(runsLoading[w.id]);\n\n return (\n <li key={w.id} className=\"bg-white/5\">\n <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <button\n type=\"button\"\n onClick={async () => {\n const next = expanded ? \"\" : w.id;\n setExpandedWorkflowId(next);\n setSelectedRunId(\"\");\n setSelectedRun(null);\n setRunError(\"\");\n if (next) await loadRunsForWorkflow(next);\n }}\n className=\"min-w-0 flex-1 text-left\"\n >\n <div className=\"truncate text-sm font-medium text-[color:var(--ck-text-primary)]\">{w.name || w.id}</div>\n <div className=\"truncate text-xs text-[color:var(--ck-text-tertiary)]\">{w.id}</div>\n <div className=\"mt-1 text-[10px] text-[color:var(--ck-text-tertiary)]\">\n Click to {expanded ? \"collapse\" : \"expand\"} run details\n </div>\n </button>\n\n <div className=\"flex shrink-0 items-center gap-2\">\n <Link\n href={`/teams/${encodeURIComponent(teamId)}/workflows/${encodeURIComponent(w.id)}`}\n className=\"rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-sm font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10\"\n >\n Edit\n </Link>\n <button\n type=\"button\"\n onClick={() => void onDelete(w.id)}\n className=\"rounded-lg border border-[color:rgba(255,59,48,0.45)] bg-[color:rgba(255,59,48,0.08)] px-3 py-1.5 text-sm font-medium text-[color:var(--ck-accent-red)] transition-colors hover:bg-[color:rgba(255,59,48,0.12)]\"\n >\n Delete\n </button>\n </div>\n </div>\n\n {expanded ? (\n <div className=\"border-t border-white/10 bg-white/5 px-4 py-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Runs</div>\n <button\n type=\"button\"\n disabled={isLoadingRuns}\n onClick={() => void loadRunsForWorkflow(w.id)}\n className=\"rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60\"\n >\n {isLoadingRuns ? \"Loading…\" : \"Refresh runs\"}\n </button>\n </div>\n\n {runError ? (\n <div className=\"mt-2 rounded-lg border border-red-400/30 bg-red-500/10 p-2 text-xs text-red-100\">{runError}</div>\n ) : null}\n\n <div className=\"mt-2 grid grid-cols-1 gap-3 lg:grid-cols-2\">\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-2\">\n {runs.length ? (\n <div className=\"space-y-1\">\n {runs.slice(0, 8).map((runId) => {\n const selected = selectedRunId === runId;\n return (\n <button\n key={runId}\n type=\"button\"\n onClick={() => void loadRunDetail(w.id, runId)}\n className={\n selected\n ? \"w-full rounded-lg bg-white/10 px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-primary)]\"\n : \"w-full rounded-lg px-2 py-1 text-left text-[11px] text-[color:var(--ck-text-secondary)] hover:bg-white/5\"\n }\n >\n <span className=\"font-mono\">{runId}</span>\n </button>\n );\n })}\n </div>\n ) : (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">No runs yet.</div>\n )}\n </div>\n\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-3\">\n {selectedRun ? (\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Run detail</div>\n <div className=\"mt-1 text-[11px] text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{selectedRun.id}</span>\n {selectedRun.status ? <span> • {selectedRun.status}</span> : null}\n </div>\n </div>\n\n <div className=\"border-t border-white/10 pt-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Approval</div>\n {(() => {\n const approval = selectedRun.approval;\n if (!isRecord(approval)) {\n return <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">(No approval info recorded.)</div>;\n }\n\n const state = String(approval.state ?? \"\").trim();\n const requestedAt = typeof approval.requestedAt === \"string\" ? approval.requestedAt : \"\";\n const decidedAt = typeof approval.decidedAt === \"string\" ? approval.decidedAt : \"\";\n const decidedBy = typeof approval.decidedBy === \"string\" ? approval.decidedBy : \"\";\n const note = typeof approval.note === \"string\" ? approval.note : \"\";\n const outbound = isRecord(approval.outbound) ? approval.outbound : null;\n\n const canAct = state === \"pending\" || selectedRun.status === \"waiting_for_approval\";\n\n return (\n <div className=\"mt-2 space-y-2\">\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-2 text-[11px] text-[color:var(--ck-text-secondary)]\">\n <div>\n <span className=\"font-mono\">state</span>: <span className=\"font-mono text-[color:var(--ck-text-primary)]\">{state || \"(unknown)\"}</span>\n </div>\n {requestedAt ? (\n <div>\n <span className=\"font-mono\">requestedAt</span>: <span className=\"font-mono\">{requestedAt}</span>\n </div>\n ) : null}\n {decidedAt ? (\n <div>\n <span className=\"font-mono\">decidedAt</span>: <span className=\"font-mono\">{decidedAt}</span>\n </div>\n ) : null}\n {decidedBy ? (\n <div>\n <span className=\"font-mono\">decidedBy</span>: <span className=\"font-mono\">{decidedBy}</span>\n </div>\n ) : null}\n {note ? (\n <div className=\"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]\">{note}</div>\n ) : null}\n {outbound ? (\n <div className=\"mt-2 rounded-lg border border-white/10 bg-black/30 p-2 text-[10px]\">\n <div className=\"text-[color:var(--ck-text-tertiary)]\">Outbound</div>\n <pre className=\"mt-1 overflow-auto whitespace-pre-wrap\">{JSON.stringify(outbound, null, 2)}</pre>\n </div>\n ) : null}\n </div>\n\n {canAct ? (\n <div className=\"rounded-lg border border-white/10 bg-white/5 p-2\">\n <div className=\"text-[10px] uppercase tracking-wide text-[color:var(--ck-text-tertiary)]\">approval note (optional)</div>\n <textarea\n value={approvalNote}\n onChange={(e) => setApprovalNote(e.target.value)}\n rows={3}\n className=\"mt-1 w-full rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-xs text-[color:var(--ck-text-primary)]\"\n placeholder=\"e.g. Ship it / please tweak hook\"\n />\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {([\n { action: \"approve\", label: \"Approve\" },\n { action: \"request_changes\", label: \"Request changes\" },\n { action: \"cancel\", label: \"Cancel\" },\n ] as const).map((btn) => (\n <button\n key={btn.action}\n type=\"button\"\n disabled={approvalBusy}\n onClick={async () => {\n if (!selectedWorkflowId || !selectedRunId) return;\n if (!confirm(`${btn.label} run ${selectedRunId}?`)) return;\n setApprovalBusy(true);\n setRunError(\"\");\n try {\n const res = await fetch(\"/api/teams/workflow-runs\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n teamId,\n workflowId: selectedWorkflowId,\n runId: selectedRunId,\n action: btn.action,\n note: approvalNote || undefined,\n decidedBy: \"ClawKitchen UI\",\n }),\n });\n const json = await res.json();\n if (!res.ok || !json.ok) throw new Error(json.error || \"Failed to apply approval action\");\n await loadRunDetail(selectedWorkflowId, selectedRunId);\n } catch (e: unknown) {\n setRunError(errorMessage(e));\n } finally {\n setApprovalBusy(false);\n }\n }}\n className=\"rounded-lg border border-white/10 bg-white/5 px-2 py-1 text-[11px] font-medium text-[color:var(--ck-text-primary)] hover:bg-white/10 disabled:opacity-60\"\n >\n {btn.label}\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n })()}\n </div>\n\n <div className=\"border-t border-white/10 pt-3\">\n <div className=\"text-xs font-medium text-[color:var(--ck-text-secondary)]\">Memory used in this run</div>\n {memoryUsedItems.length ? (\n <div className=\"mt-2 space-y-2\">\n {memoryUsedItems.slice(0, 20).map((m, idx) => (\n <div key={`${m.ts}-${idx}`} className=\"rounded-lg border border-white/10 bg-white/5 p-2\">\n <div className=\"text-[10px] text-[color:var(--ck-text-tertiary)]\">\n <span className=\"font-mono\">{m.ts}</span> • <span className=\"font-mono\">{m.type}</span> • <span className=\"font-mono\">{m.author}</span>\n </div>\n <div className=\"mt-1 whitespace-pre-wrap text-xs text-[color:var(--ck-text-primary)]\">{m.content}</div>\n {m.source !== undefined ? (\n <pre className=\"mt-2 overflow-auto rounded-lg border border-white/10 bg-black/30 p-2 text-[10px] text-[color:var(--ck-text-secondary)]\">\n {JSON.stringify(m.source, null, 2)}\n </pre>\n ) : null}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"mt-2 text-xs text-[color:var(--ck-text-tertiary)]\">\n (None recorded yet.)\n <div className=\"mt-1\">Next step: have the workflow runner write an explicit <span className=\"font-mono\">memoryUsed[]</span> list into the run file.</div>\n </div>\n )}\n </div>\n </div>\n ) : selectedRunId ? (\n <div className=\"text-xs text-[color:var(--ck-text-secondary)]\">Loading run…</div>\n ) : (\n <div className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Select a run to see details.</div>\n )}\n </div>\n </div>\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[31105,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(72131);let e=[{key:"backlog",label:"Backlog"},{key:"in-progress",label:"In progress"},{key:"testing",label:"Testing"},{key:"done",label:"Done"}],f=[{key:"all",label:"All"},{key:"today",label:"Today"},{key:"yesterday",label:"Yesterday"},{key:"7d",label:"Last 7 days"},{key:"30d",label:"Last 30 days"},{key:"custom",label:"Custom range"}];function g(a){if(!a)return null;let b=a.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!b)return null;let c=new Date(Number(b[1]),Number(b[2])-1,Number(b[3]),0,0,0,0);return Number.isFinite(c.getTime())?c:null}function h({tickets:a,basePath:h,selectedTeamId:i}){let j=i?`ck-tickets-date-filter:${i}`:"ck-tickets-date-filter:all",[k,l]=(0,d.useState)(()=>"30d"),[m,n]=(0,d.useState)(""),[o,p]=(0,d.useState)(""),q=(0,d.useMemo)(()=>{var b;if("all"===k)return a;let c=new Date((b=new Date).getFullYear(),b.getMonth(),b.getDate(),0,0,0,0),d=new Date(c);d.setDate(d.getDate()-1);let e=null,f=null;if("today"===k)e=c,(f=new Date(c)).setDate(f.getDate()+1);else if("yesterday"===k)e=d,f=c;else if("7d"===k)(e=new Date(c)).setDate(e.getDate()-6);else if("30d"===k)(e=new Date(c)).setDate(e.getDate()-29);else if("custom"===k){e=g(m);let a=g(o);a&&(f=new Date(a)).setDate(f.getDate()+1)}return a.filter(a=>{let b=new Date(a.updatedAt);return!!Number.isFinite(b.getTime())&&(!e||!(b<e))&&(!f||!(b>=f))})},[a,k,m,o]),r=(0,d.useMemo)(()=>{let a={backlog:[],"in-progress":[],testing:[],done:[]};for(let b of q)a[b.stage].push(b);for(let b of Object.keys(a))a[b].sort((a,b)=>a.number-b.number);return a},[q]);return(0,d.useEffect)(()=>{},[k,j]),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Tickets"}),(0,b.jsxs)("p",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Viewing: ",(0,b.jsx)("span",{className:"font-medium text-[color:var(--ck-text-secondary)]",children:i??"all"})]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["Time",(0,b.jsx)("select",{className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs",value:k,onChange:a=>l(a.target.value),children:f.map(a=>(0,b.jsx)("option",{value:a.key,children:a.label},a.key))})]}),"custom"===k?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["From",(0,b.jsx)("input",{type:"date",value:m,onChange:a=>n(a.target.value),className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs"})]}),(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["To",(0,b.jsx)("input",{type:"date",value:o,onChange:a=>p(a.target.value),className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs"})]})]}):null]})]}),(0,b.jsx)("div",{className:"grid gap-4 lg:grid-cols-4",children:e.map(({key:a,label:d})=>(0,b.jsxs)("section",{className:"ck-glass p-3",children:[(0,b.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold tracking-tight",children:d}),(0,b.jsx)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:r[a].length})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[0===r[a].length?(0,b.jsx)("div",{className:"rounded-[var(--ck-radius-sm)] border border-dashed border-[color:var(--ck-border-subtle)] p-3 text-xs text-[color:var(--ck-text-tertiary)]",children:"Empty"}):null,r[a].map(a=>{var d;let e,f;return(0,b.jsxs)("div",{className:"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-glass-strong)] p-3",children:[(0,b.jsxs)(c.default,{href:(e=`${h}/${encodeURIComponent(a.id)}`,(f=i||a.teamId)?`${e}?team=${encodeURIComponent(f)}`:e),prefetch:!1,className:"block text-sm font-medium text-[color:var(--ck-text-primary)] hover:underline",children:[String(a.number).padStart(4,"0")," — ",a.title]}),(0,b.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"rounded bg-white/5 px-1.5 py-0.5",children:a.teamId}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:a.owner?`Owner: ${a.owner}`:"Owner: —"}),(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("span",{children:["Age: ",(d=a.ageHours)<1?`${Math.max(1,Math.round(60*d))}m`:d<48?`${Math.round(d)}h`:`${Math.round(d/24)}d`]})]})]},`${a.teamId}:${a.id}`)})]})]},a))}),(0,b.jsx)("p",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Source of truth: ticket markdown files in the team workspace."})]})}a.s(["TicketsBoardClient",()=>h])}];
1
+ module.exports=[31105,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(72131);let e=[{key:"backlog",label:"Backlog"},{key:"in-progress",label:"In progress"},{key:"testing",label:"Testing"},{key:"done",label:"Done"}],f=[{key:"all",label:"All"},{key:"today",label:"Today"},{key:"yesterday",label:"Yesterday"},{key:"7d",label:"Last 7 days"},{key:"30d",label:"Last 30 days"},{key:"custom",label:"Custom range"}];function g(a){if(!a)return null;let b=a.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!b)return null;let c=new Date(Number(b[1]),Number(b[2])-1,Number(b[3]),0,0,0,0);return Number.isFinite(c.getTime())?c:null}function h({tickets:a,basePath:h,selectedTeamId:i}){let j=i?`ck-tickets-date-filter:${i}`:"ck-tickets-date-filter:all",[k,l]=(0,d.useState)(()=>"30d"),[m,n]=(0,d.useState)(""),[o,p]=(0,d.useState)(""),q=(0,d.useMemo)(()=>{var b;if("all"===k)return a;let c=new Date((b=new Date).getFullYear(),b.getMonth(),b.getDate(),0,0,0,0),d=new Date(c);d.setDate(d.getDate()-1);let e=null,f=null;if("today"===k)e=c,(f=new Date(c)).setDate(f.getDate()+1);else if("yesterday"===k)e=d,f=c;else if("7d"===k)(e=new Date(c)).setDate(e.getDate()-6);else if("30d"===k)(e=new Date(c)).setDate(e.getDate()-29);else if("custom"===k){e=g(m);let a=g(o);a&&(f=new Date(a)).setDate(f.getDate()+1)}return a.filter(a=>{let b=new Date(a.updatedAt);return!!Number.isFinite(b.getTime())&&(!e||!(b<e))&&(!f||!(b>=f))})},[a,k,m,o]),r=(0,d.useMemo)(()=>{let a={backlog:[],"in-progress":[],testing:[],done:[]};for(let b of q)a[b.stage].push(b);for(let b of Object.keys(a))a[b].sort((a,b)=>a.number-b.number);return a},[q]);return(0,d.useEffect)(()=>{},[k,j]),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Tickets"}),(0,b.jsxs)("p",{className:"mt-1 text-xs text-[color:var(--ck-text-tertiary)]",children:["Viewing: ",(0,b.jsx)("span",{className:"font-medium text-[color:var(--ck-text-secondary)]",children:i??"all"})]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["Time",(0,b.jsx)("select",{className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs",value:k,onChange:a=>l(a.target.value),children:f.map(a=>(0,b.jsx)("option",{value:a.key,children:a.label},a.key))})]}),"custom"===k?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["From",(0,b.jsx)("input",{type:"date",value:m,onChange:a=>n(a.target.value),className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs"})]}),(0,b.jsxs)("label",{className:"text-xs text-[color:var(--ck-text-secondary)]",children:["To",(0,b.jsx)("input",{type:"date",value:o,onChange:a=>p(a.target.value),className:"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs"})]})]}):null]})]}),(0,b.jsx)("div",{className:"grid gap-4 lg:grid-cols-4",children:e.map(({key:a,label:d})=>(0,b.jsxs)("section",{className:"ck-card p-3",children:[(0,b.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold tracking-tight",children:d}),(0,b.jsx)("span",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:r[a].length})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[0===r[a].length?(0,b.jsx)("div",{className:"rounded-lg border border-dashed border-[color:var(--ck-border-subtle)] p-3 text-xs text-[color:var(--ck-text-tertiary)]",children:"Empty"}):null,r[a].map(a=>{var d;let e,f;return(0,b.jsxs)("div",{className:"rounded-lg border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-soft)] p-3",children:[(0,b.jsxs)(c.default,{href:(e=`${h}/${encodeURIComponent(a.id)}`,(f=i||a.teamId)?`${e}?team=${encodeURIComponent(f)}`:e),prefetch:!1,className:"block text-sm font-medium text-[color:var(--ck-text-primary)] hover:underline",children:[String(a.number).padStart(4,"0")," — ",a.title]}),(0,b.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[color:var(--ck-text-secondary)]",children:[(0,b.jsx)("span",{className:"rounded bg-white/5 px-1.5 py-0.5",children:a.teamId}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:a.owner?`Owner: ${a.owner}`:"Owner: —"}),(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("span",{children:["Age: ",(d=a.ageHours)<1?`${Math.max(1,Math.round(60*d))}m`:d<48?`${Math.round(d)}h`:`${Math.round(d/24)}d`]})]})]},`${a.teamId}:${a.id}`)})]})]},a))}),(0,b.jsx)("p",{className:"text-xs text-[color:var(--ck-text-tertiary)]",children:"Source of truth: ticket markdown files in the team workspace."})]})}a.s(["TicketsBoardClient",()=>h])}];
2
2
 
3
3
  //# sourceMappingURL=src_app_tickets_TicketsBoardClient_tsx_5e156ef3._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/tickets/TicketsBoardClient.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { TicketStage, TicketSummary } from \"@/lib/tickets\";\n\nconst STAGES: { key: TicketStage; label: string }[] = [\n { key: \"backlog\", label: \"Backlog\" },\n { key: \"in-progress\", label: \"In progress\" },\n { key: \"testing\", label: \"Testing\" },\n { key: \"done\", label: \"Done\" },\n];\n\ntype DateFilter = \"all\" | \"today\" | \"yesterday\" | \"7d\" | \"30d\" | \"custom\";\nconst DATE_FILTERS: { key: DateFilter; label: string }[] = [\n { key: \"all\", label: \"All\" },\n { key: \"today\", label: \"Today\" },\n { key: \"yesterday\", label: \"Yesterday\" },\n { key: \"7d\", label: \"Last 7 days\" },\n { key: \"30d\", label: \"Last 30 days\" },\n { key: \"custom\", label: \"Custom range\" },\n];\n\nfunction startOfLocalDay(d: Date) {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);\n}\n\nfunction parseDateInput(value: string): Date | null {\n if (!value) return null;\n const m = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!m) return null;\n const y = Number(m[1]);\n const mo = Number(m[2]) - 1;\n const day = Number(m[3]);\n const d = new Date(y, mo, day, 0, 0, 0, 0);\n return Number.isFinite(d.getTime()) ? d : null;\n}\n\nfunction formatAge(hours: number) {\n if (hours < 1) return `${Math.max(1, Math.round(hours * 60))}m`;\n if (hours < 48) return `${Math.round(hours)}h`;\n return `${Math.round(hours / 24)}d`;\n}\n\nexport function TicketsBoardClient({\n tickets,\n basePath,\n selectedTeamId,\n}: {\n tickets: TicketSummary[];\n basePath: string;\n selectedTeamId: string | null;\n}) {\n const storageKey = selectedTeamId ? `ck-tickets-date-filter:${selectedTeamId}` : \"ck-tickets-date-filter:all\";\n\n const [dateFilter, setDateFilter] = useState<DateFilter>(() => {\n if (typeof window === \"undefined\") return \"30d\";\n try {\n const raw = (localStorage.getItem(storageKey) || \"\").trim();\n if (raw === \"all\" || raw === \"today\" || raw === \"yesterday\" || raw === \"7d\" || raw === \"30d\" || raw === \"custom\") return raw;\n return \"30d\";\n } catch {\n return \"30d\";\n }\n });\n\n const [customFrom, setCustomFrom] = useState<string>(\"\");\n const [customTo, setCustomTo] = useState<string>(\"\");\n\n const filteredTickets = useMemo(() => {\n if (dateFilter === \"all\") return tickets;\n\n const now = new Date();\n const todayStart = startOfLocalDay(now);\n const yesterdayStart = new Date(todayStart);\n yesterdayStart.setDate(yesterdayStart.getDate() - 1);\n\n let from: Date | null = null;\n let toExclusive: Date | null = null;\n\n if (dateFilter === \"today\") {\n from = todayStart;\n toExclusive = new Date(todayStart);\n toExclusive.setDate(toExclusive.getDate() + 1);\n } else if (dateFilter === \"yesterday\") {\n from = yesterdayStart;\n toExclusive = todayStart;\n } else if (dateFilter === \"7d\") {\n from = new Date(todayStart);\n from.setDate(from.getDate() - 6); // include today\n } else if (dateFilter === \"30d\") {\n from = new Date(todayStart);\n from.setDate(from.getDate() - 29); // include today\n } else if (dateFilter === \"custom\") {\n from = parseDateInput(customFrom);\n const to = parseDateInput(customTo);\n if (to) {\n toExclusive = new Date(to);\n toExclusive.setDate(toExclusive.getDate() + 1);\n }\n }\n\n return tickets.filter((t) => {\n const updated = new Date(t.updatedAt);\n if (!Number.isFinite(updated.getTime())) return false;\n if (from && updated < from) return false;\n if (toExclusive && updated >= toExclusive) return false;\n return true;\n });\n }, [tickets, dateFilter, customFrom, customTo]);\n\n const byStage = useMemo(() => {\n const map: Record<TicketStage, TicketSummary[]> = {\n backlog: [],\n \"in-progress\": [],\n testing: [],\n done: [],\n };\n for (const t of filteredTickets) map[t.stage].push(t);\n for (const s of Object.keys(map) as TicketStage[]) {\n map[s].sort((a, b) => a.number - b.number);\n }\n return map;\n }, [filteredTickets]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(storageKey, dateFilter);\n } catch {\n // ignore\n }\n }, [dateFilter, storageKey]);\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">Tickets</h1>\n <p className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Viewing: <span className=\"font-medium text-[color:var(--ck-text-secondary)]\">{selectedTeamId ?? \"all\"}</span>\n </p>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n Time\n <select\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n value={dateFilter}\n onChange={(e) => setDateFilter(e.target.value as DateFilter)}\n >\n {DATE_FILTERS.map((f) => (\n <option key={f.key} value={f.key}>\n {f.label}\n </option>\n ))}\n </select>\n </label>\n\n {dateFilter === \"custom\" ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n From\n <input\n type=\"date\"\n value={customFrom}\n onChange={(e) => setCustomFrom(e.target.value)}\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n />\n </label>\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n To\n <input\n type=\"date\"\n value={customTo}\n onChange={(e) => setCustomTo(e.target.value)}\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n />\n </label>\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-4\">\n {STAGES.map(({ key, label }) => (\n <section key={key} className=\"ck-glass p-3\">\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-sm font-semibold tracking-tight\">{label}</h2>\n <span className=\"text-xs text-[color:var(--ck-text-tertiary)]\">{byStage[key].length}</span>\n </div>\n\n <div className=\"space-y-2\">\n {byStage[key].length === 0 ? (\n <div className=\"rounded-[var(--ck-radius-sm)] border border-dashed border-[color:var(--ck-border-subtle)] p-3 text-xs text-[color:var(--ck-text-tertiary)]\">\n Empty\n </div>\n ) : null}\n\n {byStage[key].map((t) => (\n <div\n key={`${t.teamId}:${t.id}`}\n className=\"rounded-[var(--ck-radius-sm)] border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-glass-strong)] p-3\"\n >\n <Link\n href={(() => {\n const base = `${basePath}/${encodeURIComponent(t.id)}`;\n const team = selectedTeamId || t.teamId;\n return team ? `${base}?team=${encodeURIComponent(team)}` : base;\n })()}\n prefetch={false}\n className=\"block text-sm font-medium text-[color:var(--ck-text-primary)] hover:underline\"\n >\n {String(t.number).padStart(4, \"0\")} — {t.title}\n </Link>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <span className=\"rounded bg-white/5 px-1.5 py-0.5\">{t.teamId}</span>\n <span>·</span>\n <span>{t.owner ? `Owner: ${t.owner}` : \"Owner: —\"}</span>\n <span>·</span>\n <span>Age: {formatAge(t.ageHours)}</span>\n </div>\n </div>\n ))}\n </div>\n </section>\n ))}\n </div>\n\n <p className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Source of truth: ticket markdown files in the team workspace.</p>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/app/tickets/TicketsBoardClient.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { TicketStage, TicketSummary } from \"@/lib/tickets\";\n\nconst STAGES: { key: TicketStage; label: string }[] = [\n { key: \"backlog\", label: \"Backlog\" },\n { key: \"in-progress\", label: \"In progress\" },\n { key: \"testing\", label: \"Testing\" },\n { key: \"done\", label: \"Done\" },\n];\n\ntype DateFilter = \"all\" | \"today\" | \"yesterday\" | \"7d\" | \"30d\" | \"custom\";\nconst DATE_FILTERS: { key: DateFilter; label: string }[] = [\n { key: \"all\", label: \"All\" },\n { key: \"today\", label: \"Today\" },\n { key: \"yesterday\", label: \"Yesterday\" },\n { key: \"7d\", label: \"Last 7 days\" },\n { key: \"30d\", label: \"Last 30 days\" },\n { key: \"custom\", label: \"Custom range\" },\n];\n\nfunction startOfLocalDay(d: Date) {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);\n}\n\nfunction parseDateInput(value: string): Date | null {\n if (!value) return null;\n const m = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!m) return null;\n const y = Number(m[1]);\n const mo = Number(m[2]) - 1;\n const day = Number(m[3]);\n const d = new Date(y, mo, day, 0, 0, 0, 0);\n return Number.isFinite(d.getTime()) ? d : null;\n}\n\nfunction formatAge(hours: number) {\n if (hours < 1) return `${Math.max(1, Math.round(hours * 60))}m`;\n if (hours < 48) return `${Math.round(hours)}h`;\n return `${Math.round(hours / 24)}d`;\n}\n\nexport function TicketsBoardClient({\n tickets,\n basePath,\n selectedTeamId,\n}: {\n tickets: TicketSummary[];\n basePath: string;\n selectedTeamId: string | null;\n}) {\n const storageKey = selectedTeamId ? `ck-tickets-date-filter:${selectedTeamId}` : \"ck-tickets-date-filter:all\";\n\n const [dateFilter, setDateFilter] = useState<DateFilter>(() => {\n if (typeof window === \"undefined\") return \"30d\";\n try {\n const raw = (localStorage.getItem(storageKey) || \"\").trim();\n if (raw === \"all\" || raw === \"today\" || raw === \"yesterday\" || raw === \"7d\" || raw === \"30d\" || raw === \"custom\") return raw;\n return \"30d\";\n } catch {\n return \"30d\";\n }\n });\n\n const [customFrom, setCustomFrom] = useState<string>(\"\");\n const [customTo, setCustomTo] = useState<string>(\"\");\n\n const filteredTickets = useMemo(() => {\n if (dateFilter === \"all\") return tickets;\n\n const now = new Date();\n const todayStart = startOfLocalDay(now);\n const yesterdayStart = new Date(todayStart);\n yesterdayStart.setDate(yesterdayStart.getDate() - 1);\n\n let from: Date | null = null;\n let toExclusive: Date | null = null;\n\n if (dateFilter === \"today\") {\n from = todayStart;\n toExclusive = new Date(todayStart);\n toExclusive.setDate(toExclusive.getDate() + 1);\n } else if (dateFilter === \"yesterday\") {\n from = yesterdayStart;\n toExclusive = todayStart;\n } else if (dateFilter === \"7d\") {\n from = new Date(todayStart);\n from.setDate(from.getDate() - 6); // include today\n } else if (dateFilter === \"30d\") {\n from = new Date(todayStart);\n from.setDate(from.getDate() - 29); // include today\n } else if (dateFilter === \"custom\") {\n from = parseDateInput(customFrom);\n const to = parseDateInput(customTo);\n if (to) {\n toExclusive = new Date(to);\n toExclusive.setDate(toExclusive.getDate() + 1);\n }\n }\n\n return tickets.filter((t) => {\n const updated = new Date(t.updatedAt);\n if (!Number.isFinite(updated.getTime())) return false;\n if (from && updated < from) return false;\n if (toExclusive && updated >= toExclusive) return false;\n return true;\n });\n }, [tickets, dateFilter, customFrom, customTo]);\n\n const byStage = useMemo(() => {\n const map: Record<TicketStage, TicketSummary[]> = {\n backlog: [],\n \"in-progress\": [],\n testing: [],\n done: [],\n };\n for (const t of filteredTickets) map[t.stage].push(t);\n for (const s of Object.keys(map) as TicketStage[]) {\n map[s].sort((a, b) => a.number - b.number);\n }\n return map;\n }, [filteredTickets]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(storageKey, dateFilter);\n } catch {\n // ignore\n }\n }, [dateFilter, storageKey]);\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">Tickets</h1>\n <p className=\"mt-1 text-xs text-[color:var(--ck-text-tertiary)]\">\n Viewing: <span className=\"font-medium text-[color:var(--ck-text-secondary)]\">{selectedTeamId ?? \"all\"}</span>\n </p>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n Time\n <select\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n value={dateFilter}\n onChange={(e) => setDateFilter(e.target.value as DateFilter)}\n >\n {DATE_FILTERS.map((f) => (\n <option key={f.key} value={f.key}>\n {f.label}\n </option>\n ))}\n </select>\n </label>\n\n {dateFilter === \"custom\" ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n From\n <input\n type=\"date\"\n value={customFrom}\n onChange={(e) => setCustomFrom(e.target.value)}\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n />\n </label>\n <label className=\"text-xs text-[color:var(--ck-text-secondary)]\">\n To\n <input\n type=\"date\"\n value={customTo}\n onChange={(e) => setCustomTo(e.target.value)}\n className=\"ml-2 rounded border border-[color:var(--ck-border-subtle)] bg-transparent px-2 py-1 text-xs\"\n />\n </label>\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-4\">\n {STAGES.map(({ key, label }) => (\n <section key={key} className=\"ck-card p-3\">\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-sm font-semibold tracking-tight\">{label}</h2>\n <span className=\"text-xs text-[color:var(--ck-text-tertiary)]\">{byStage[key].length}</span>\n </div>\n\n <div className=\"space-y-2\">\n {byStage[key].length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-[color:var(--ck-border-subtle)] p-3 text-xs text-[color:var(--ck-text-tertiary)]\">\n Empty\n </div>\n ) : null}\n\n {byStage[key].map((t) => (\n <div\n key={`${t.teamId}:${t.id}`}\n className=\"rounded-lg border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-soft)] p-3\"\n >\n <Link\n href={(() => {\n const base = `${basePath}/${encodeURIComponent(t.id)}`;\n const team = selectedTeamId || t.teamId;\n return team ? `${base}?team=${encodeURIComponent(team)}` : base;\n })()}\n prefetch={false}\n className=\"block text-sm font-medium text-[color:var(--ck-text-primary)] hover:underline\"\n >\n {String(t.number).padStart(4, \"0\")} — {t.title}\n </Link>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[color:var(--ck-text-secondary)]\">\n <span className=\"rounded bg-white/5 px-1.5 py-0.5\">{t.teamId}</span>\n <span>·</span>\n <span>{t.owner ? `Owner: ${t.owner}` : \"Owner: —\"}</span>\n <span>·</span>\n <span>Age: {formatAge(t.ageHours)}</span>\n </div>\n </div>\n ))}\n </div>\n </section>\n ))}\n </div>\n\n <p className=\"text-xs text-[color:var(--ck-text-tertiary)]\">Source of truth: ticket markdown files in the team workspace.</p>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -8,11 +8,11 @@ globalThis.__BUILD_MANIFEST = {
8
8
  ],
9
9
  "lowPriorityFiles": [],
10
10
  "rootMainFiles": [
11
- "static/chunks/e03137fd069b1514.js",
11
+ "static/chunks/8acd42df55d57556.js",
12
12
  "static/chunks/68a088aa49e6124a.js",
13
13
  "static/chunks/aebc3b6d791f68d2.js",
14
- "static/chunks/0edab8a24d59a626.js",
15
- "static/chunks/turbopack-dbf3078dbf5863bd.js"
14
+ "static/chunks/8aac543d98940eb3.js",
15
+ "static/chunks/turbopack-bdd9478663f034d6.js"
16
16
  ]
17
17
  };
18
18
  globalThis.__BUILD_MANIFEST.lowPriorityFiles = [
@@ -1 +1 @@
1
- <!DOCTYPE html><!--3rKUmnGginJhM5_OQ1MPX--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/57ad5290f7e92ffd.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/e03137fd069b1514.js"/><script src="/_next/static/chunks/68a088aa49e6124a.js" async=""></script><script src="/_next/static/chunks/aebc3b6d791f68d2.js" async=""></script><script src="/_next/static/chunks/0edab8a24d59a626.js" async=""></script><script src="/_next/static/chunks/turbopack-dbf3078dbf5863bd.js" async=""></script><script src="/_next/static/chunks/d7541a171116ec9c.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/0bd6498bda341889.js" async=""></script><script src="/_next/static/chunks/d6e1b7307a9274ce.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>ClawKitchen (0.3.31-beta)</title><meta name="description" content="Local-first UI for authoring ClawRecipes recipes and scaffolding agents/teams."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><script>(function(){try{var t=localStorage.getItem('ck-theme');var theme=(t==='light')?'light':'dark';document.documentElement.dataset.theme=theme;}catch(e){document.documentElement.dataset.theme='dark';}})();</script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh w-dvw overflow-hidden"><aside class="flex shrink-0 flex-col border-r border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-glass)] backdrop-blur-[var(--ck-glass-blur)] w-72"><div class="flex h-14 items-center justify-between gap-2 border-b border-[color:var(--ck-border-subtle)] px-3"><a class="text-sm font-semibold tracking-tight" title="Home" href="/">Claw Kitchen</a><button class="rounded-[var(--ck-radius-sm)] px-2 py-1 text-sm text-[color:var(--ck-text-secondary)] hover:bg-white/5 hover:text-[color:var(--ck-text-primary)]" title="Collapse">«</button></div><div class="border-b border-[color:var(--ck-border-subtle)] p-2"><div class="flex flex-col gap-1"><div class="px-2 pt-1 text-xs font-semibold uppercase tracking-wide text-[color:var(--ck-text-tertiary)]">Team</div><select class="w-full rounded-[var(--ck-radius-sm)] border border-white/10 bg-black/25 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]"><option value="" selected="">All teams</option></select></div></div><nav class="min-h-0 flex-1 overflow-auto p-2"><div class="mt-2 px-2 pb-2 pt-2"></div><a title="Agents" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 11l9-8 9 8"></path><path d="M5 10v10h14V10"></path></svg></span></span><span>Agents</span></a><a title="Recipes" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/recipes"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 4h12v16H6z"></path><path d="M9 8h6"></path><path d="M9 12h6"></path></svg></span></span><span>Recipes</span></a><a title="Tickets" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/tickets"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 7h16v4a2 2 0 0 1 0 4v4H4v-4a2 2 0 0 0 0-4z"></path></svg></span></span><span>Tickets</span></a><a title="Channels" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/channels"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 6h16"></path><path d="M4 12h16"></path><path d="M4 18h16"></path><path d="M7 9h0"></path></svg></span></span><span>Channels</span></a><a title="Goals" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/goals"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3 3"></path></svg></span></span><span>Goals</span></a><a title="Cron jobs" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/cron-jobs"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5"></path></svg></span></span><span>Cron jobs</span></a><a title="Runs" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/runs"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 19h16"></path><path d="M6 16l4-4 3 3 5-7"></path><circle cx="10" cy="12" r="1"></circle><circle cx="13" cy="15" r="1"></circle><circle cx="18" cy="8" r="1"></circle></svg></span></span><span>Runs</span></a><a title="Settings" class="flex items-center rounded-[var(--ck-radius-sm)] text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/settings"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 15.5a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Z"></path><path d="M19.4 15a7.9 7.9 0 0 0 .1-1l2-1.5-2-3.5-2.4.5a7.8 7.8 0 0 0-1.7-1L13.5 3h-4L8.6 6.5a7.8 7.8 0 0 0-1.7 1L4.5 7l-2 3.5 2 1.5a7.9 7.9 0 0 0 .1 1l-2 1.5 2 3.5 2.4-.5a7.8 7.8 0 0 0 1.7 1L10.5 21h4l.9-3.5a7.8 7.8 0 0 0 1.7-1l2.4.5 2-3.5-2-1.5Z"></path></svg></span></span><span>Settings</span></a></nav><div class="flex items-center justify-between gap-2 border-t border-[color:var(--ck-border-subtle)] p-2"><a href="https://github.com/JIGGAI/ClawRecipes/tree/main/docs" target="_blank" rel="noreferrer" class="rounded-[var(--ck-radius-sm)] px-3 py-2 text-sm font-medium text-[color:var(--ck-text-secondary)] hover:bg-white/5 hover:text-[color:var(--ck-text-primary)]" title="Docs">Docs</a><button type="button" class="grid h-9 w-9 place-items-center rounded-full border border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-glass)] text-[color:var(--ck-text-primary)] shadow-[var(--ck-shadow-1)] transition-colors hover:bg-[color:var(--ck-bg-glass-strong)]" aria-label="Switch to light mode" title="Switch to light mode"><span class="sr-only">Switch to light mode</span><svg class="h-4.5 w-4.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M21 14.2A7.8 7.8 0 0 1 9.8 3a7 7 0 1 0 11.2 11.2Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"></path></svg></button></div></aside><div class="min-w-0 flex-1"><main class="h-full overflow-auto p-4 md:p-6"><div class="mx-auto max-w-2xl px-6 py-12"><h1 class="text-xl font-semibold">Page not found</h1><p class="mt-2 text-sm text-[color:var(--ck-text-secondary)]">The page you requested does not exist.</p></div><!--$--><!--/$--></main></div></div><div aria-live="assertive" class="pointer-events-none fixed inset-0 z-[100] flex items-end px-4 py-6 sm:p-6"><div class="flex w-full flex-col items-start space-y-4"></div></div><script src="/_next/static/chunks/e03137fd069b1514.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[49830,[\"/_next/static/chunks/d7541a171116ec9c.js\"],\"AppShell\"]\n3:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n4:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n5:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"MetadataBoundary\"]\nc:I[63491,[\"/_next/static/chunks/d6e1b7307a9274ce.js\"],\"default\"]\n:HL[\"/_next/static/chunks/57ad5290f7e92ffd.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3rKUmnGginJhM5-OQ1MPX\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/57ad5290f7e92ffd.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d7541a171116ec9c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('ck-theme');var theme=(t==='light')?'light':'dark';document.documentElement.dataset.theme=theme;}catch(e){document.documentElement.dataset.theme='dark';}})();\"}}]}],[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-2xl px-6 py-12\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"Page not found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\",\"children\":\"The page you requested does not exist.\"}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-2xl px-6 py-12\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"Page not found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\",\"children\":\"The page you requested does not exist.\"}]]}],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"ClawKitchen (0.3.31-beta)\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local-first UI for authoring ClawRecipes recipes and scaffolding agents/teams.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"7\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"8\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--bTCL_c1_1vqxgA_ZN8TUy--><html lang="en" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/fb008837ba324b34.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/8acd42df55d57556.js"/><script src="/_next/static/chunks/68a088aa49e6124a.js" async=""></script><script src="/_next/static/chunks/aebc3b6d791f68d2.js" async=""></script><script src="/_next/static/chunks/8aac543d98940eb3.js" async=""></script><script src="/_next/static/chunks/turbopack-bdd9478663f034d6.js" async=""></script><script src="/_next/static/chunks/f7f157ba542e1ae5.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/0bd6498bda341889.js" async=""></script><script src="/_next/static/chunks/9c627cb11f73ac4c.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>ClawKitchen (0.3.48-beta)</title><meta name="description" content="Local-first UI for authoring ClawRecipes recipes and scaffolding agents/teams."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh w-dvw overflow-hidden"><aside class="flex shrink-0 flex-col border-r border-[color:var(--ck-border-subtle)] bg-[color:var(--ck-bg-soft)]/95 backdrop-blur-[var(--ck-glass-blur)] w-62"><div class="flex h-14 items-center border-b border-[color:var(--ck-border-subtle)] justify-between gap-2 px-3"><a class="text-sm font-semibold tracking-tight" title="Home" href="/">Claw Kitchen</a><button class="grid h-9 w-9 place-items-center rounded-lg text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/10 hover:text-[color:var(--ck-text-primary)]" title="Collapse sidebar"><svg viewBox="0 0 24 24" class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3"></rect><path d="M9 3v18"></path><path d="M14 14l-2-2 2-2"></path></svg></button></div><div class="border-b border-[color:var(--ck-border-subtle)] p-2"><div class="flex flex-col gap-1"><div class="px-2 pt-1 text-xs font-semibold uppercase tracking-wide text-[color:var(--ck-text-tertiary)]">Team</div><select class="w-full rounded-lg border border-white/10 bg-white/5 px-2 py-2 text-sm text-[color:var(--ck-text-primary)]"><option value="" selected="">All teams</option></select></div></div><nav class="min-h-0 flex-1 overflow-auto p-2"><div class="mt-2 px-2 pb-2 pt-2"></div><a title="Agents" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 11l9-8 9 8"></path><path d="M5 10v10h14V10"></path></svg></span></span><span>Agents</span></a><a title="Recipes" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/recipes"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 4h12v16H6z"></path><path d="M9 8h6"></path><path d="M9 12h6"></path></svg></span></span><span>Recipes</span></a><a title="Tickets" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/tickets"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 7h16v4a2 2 0 0 1 0 4v4H4v-4a2 2 0 0 0 0-4z"></path></svg></span></span><span>Tickets</span></a><a title="Channels" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/channels"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 6h16"></path><path d="M4 12h16"></path><path d="M4 18h16"></path><path d="M7 9h0"></path></svg></span></span><span>Channels</span></a><a title="Goals" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/goals"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3 3"></path></svg></span></span><span>Goals</span></a><a title="Cron jobs" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/cron-jobs"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5"></path></svg></span></span><span>Cron jobs</span></a><a title="Runs" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/runs"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 19h16"></path><path d="M6 16l4-4 3 3 5-7"></path><circle cx="10" cy="12" r="1"></circle><circle cx="13" cy="15" r="1"></circle><circle cx="18" cy="8" r="1"></circle></svg></span></span><span>Runs</span></a><a title="Settings" class="flex items-center rounded-lg text-sm font-medium text-[color:var(--ck-text-secondary)] transition-colors hover:bg-white/5 hover:text-[color:var(--ck-text-primary)] gap-4 px-4 py-3" href="/settings"><span aria-hidden="true"><span class="grid size-7 place-items-center text-[color:var(--ck-text-secondary)]" aria-hidden="true"><svg viewBox="0 0 24 24" class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 15.5a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Z"></path><path d="M19.4 15a7.9 7.9 0 0 0 .1-1l2-1.5-2-3.5-2.4.5a7.8 7.8 0 0 0-1.7-1L13.5 3h-4L8.6 6.5a7.8 7.8 0 0 0-1.7 1L4.5 7l-2 3.5 2 1.5a7.9 7.9 0 0 0 .1 1l-2 1.5 2 3.5 2.4-.5a7.8 7.8 0 0 0 1.7 1L10.5 21h4l.9-3.5a7.8 7.8 0 0 0 1.7-1l2.4.5 2-3.5-2-1.5Z"></path></svg></span></span><span>Settings</span></a></nav><div class="flex items-center justify-between gap-2 border-t border-[color:var(--ck-border-subtle)] p-2"><a href="https://docs.clawkitchen.ai" target="_blank" rel="noreferrer" class="rounded-lg px-3 py-2 text-sm font-medium text-[color:var(--ck-text-secondary)] hover:bg-white/5 hover:text-[color:var(--ck-text-primary)]" title="Docs">Docs</a></div></aside><div class="min-w-0 flex-1"><main class="h-full overflow-auto px-6 py-5 lg:px-10"><div class="mx-auto max-w-2xl px-6 py-12"><h1 class="text-xl font-semibold">Page not found</h1><p class="mt-2 text-sm text-[color:var(--ck-text-secondary)]">The page you requested does not exist.</p></div><!--$--><!--/$--></main></div></div><div aria-live="assertive" class="pointer-events-none fixed inset-0 z-[100] flex items-end px-4 py-6 sm:p-6"><div class="flex w-full flex-col items-start space-y-4"></div></div><script src="/_next/static/chunks/8acd42df55d57556.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[49830,[\"/_next/static/chunks/f7f157ba542e1ae5.js\"],\"AppShell\"]\n3:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n4:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n5:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"MetadataBoundary\"]\nc:I[63491,[\"/_next/static/chunks/9c627cb11f73ac4c.js\"],\"default\"]\n:HL[\"/_next/static/chunks/fb008837ba324b34.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bTCL-c1-1vqxgA-ZN8TUy\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/fb008837ba324b34.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/f7f157ba542e1ae5.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{}],[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-2xl px-6 py-12\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"Page not found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\",\"children\":\"The page you requested does not exist.\"}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-2xl px-6 py-12\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"Page not found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[color:var(--ck-text-secondary)]\",\"children\":\"The page you requested does not exist.\"}]]}],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"ClawKitchen (0.3.48-beta)\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local-first UI for authoring ClawRecipes recipes and scaffolding agents/teams.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"7\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"8\",{}]]\n"])</script></body></html>
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--3rKUmnGginJhM5_OQ1MPX--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/e03137fd069b1514.js"/><script src="/_next/static/chunks/68a088aa49e6124a.js" async=""></script><script src="/_next/static/chunks/aebc3b6d791f68d2.js" async=""></script><script src="/_next/static/chunks/0edab8a24d59a626.js" async=""></script><script src="/_next/static/chunks/turbopack-dbf3078dbf5863bd.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/0bd6498bda341889.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/e03137fd069b1514.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3rKUmnGginJhM5-OQ1MPX\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"link\",\"0\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"2\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--bTCL_c1_1vqxgA_ZN8TUy--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/8acd42df55d57556.js"/><script src="/_next/static/chunks/68a088aa49e6124a.js" async=""></script><script src="/_next/static/chunks/aebc3b6d791f68d2.js" async=""></script><script src="/_next/static/chunks/8aac543d98940eb3.js" async=""></script><script src="/_next/static/chunks/turbopack-bdd9478663f034d6.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/0bd6498bda341889.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/8acd42df55d57556.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bTCL-c1-1vqxgA-ZN8TUy\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/0bd6498bda341889.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"link\",\"0\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"2\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"FPDFRJHSIdJEvBrVlOKwXC4pELFyC6/W0UaqlScwL88=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"U+g40fQTC6pblWF4XVX9BFkdkrmReKACS55uabnBDDY=\"\n}"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "FPDFRJHSIdJEvBrVlOKwXC4pELFyC6/W0UaqlScwL88="
4
+ "encryptionKey": "U+g40fQTC6pblWF4XVX9BFkdkrmReKACS55uabnBDDY="
5
5
  }