constellai 0.3.4 → 0.3.6

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 (268) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -3
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/(app)/activity/page.js +2 -2
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/agents/[handle]/page.js +2 -2
  9. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/code/page.js +2 -2
  12. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/config/page.js +2 -2
  15. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/costs/page.js +2 -2
  18. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/cron/page.js +2 -2
  21. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/dashboard/page.js +2 -2
  24. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/design/page.js +44 -44
  27. package/.next/server/app/(app)/design/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/docs/[id]/page.js +2 -2
  30. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
  31. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(app)/docs/page.js +2 -2
  33. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  34. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(app)/github/page.js +2 -2
  36. package/.next/server/app/(app)/github/page.js.nft.json +1 -1
  37. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(app)/goals/page.js +2 -2
  39. package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
  40. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/(app)/inbox/page.js +2 -2
  42. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  43. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/(app)/knowledge/page.js +3 -3
  45. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
  46. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/(app)/models/page.js +2 -2
  48. package/.next/server/app/(app)/models/page.js.nft.json +1 -1
  49. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/(app)/notifications/page.js +2 -2
  51. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
  52. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/(app)/org/page.js +5 -5
  54. package/.next/server/app/(app)/org/page.js.nft.json +1 -1
  55. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/(app)/organizations/page.js +2 -2
  57. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
  58. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/(app)/page.js +3 -3
  60. package/.next/server/app/(app)/page.js.nft.json +1 -1
  61. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/(app)/planner/page.js +3 -3
  63. package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
  64. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/(app)/plugins/page.js +2 -2
  66. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
  67. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/(app)/pm/page.js +2 -2
  69. package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
  70. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/(app)/prepare-deploy/page.js +6 -6
  72. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
  73. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/(app)/profile/page.js +2 -2
  75. package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
  76. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/(app)/pulse/page.js +2 -2
  78. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
  79. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/(app)/reports/[id]/page.js +2 -2
  81. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
  82. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/(app)/reports/page.js +3 -3
  84. package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
  85. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
  86. package/.next/server/app/(app)/routines/page.js +2 -2
  87. package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
  88. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
  89. package/.next/server/app/(app)/search/page.js +2 -2
  90. package/.next/server/app/(app)/search/page.js.nft.json +1 -1
  91. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  92. package/.next/server/app/(app)/security/page.js +2 -2
  93. package/.next/server/app/(app)/security/page.js.nft.json +1 -1
  94. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/(app)/skills/page.js +2 -2
  96. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  97. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/(app)/tasks/page.js +2 -2
  99. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
  100. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/(app)/test-dev/page.js +2 -2
  102. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
  103. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/(app)/update/page.js +3 -3
  105. package/.next/server/app/(app)/update/page.js.nft.json +1 -1
  106. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
  107. package/.next/server/app/(auth)/login/page.js +2 -2
  108. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/(auth)/onboarding/page.js +2 -2
  110. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/_global-error.html +1 -1
  113. package/.next/server/app/_global-error.rsc +3 -3
  114. package/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  115. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  116. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  117. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
  119. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/cron/tick/route.js +16 -16
  122. package/.next/server/app/api/locks/acquire/route.js +1 -1
  123. package/.next/server/app/api/sync/file/route.js +1 -1
  124. package/.next/server/app/api/telegram/poll/route.js +11 -11
  125. package/.next/server/app/api/upload/route.js +1 -1
  126. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  127. package/.next/server/app-paths-manifest.json +3 -3
  128. package/.next/server/chunks/1249.js +14 -14
  129. package/.next/server/chunks/158.js +21 -0
  130. package/.next/server/chunks/1765.js +1 -0
  131. package/.next/server/chunks/2495.js +1 -0
  132. package/.next/server/chunks/2517.js +1 -1
  133. package/.next/server/chunks/259.js +9 -9
  134. package/.next/server/chunks/2867.js +2 -2
  135. package/.next/server/chunks/2960.js +1 -1
  136. package/.next/server/chunks/3131.js +1 -1
  137. package/.next/server/chunks/3234.js +4 -4
  138. package/.next/server/chunks/4467.js +12 -0
  139. package/.next/server/chunks/4619.js +1 -1
  140. package/.next/server/chunks/4979.js +12 -12
  141. package/.next/server/chunks/535.js +1 -0
  142. package/.next/server/chunks/6431.js +1 -1
  143. package/.next/server/chunks/7225.js +4 -0
  144. package/.next/server/chunks/7336.js +1 -1
  145. package/.next/server/chunks/7589.js +3 -3
  146. package/.next/server/chunks/7989.js +1 -1
  147. package/.next/server/chunks/850.js +1 -1
  148. package/.next/server/chunks/8561.js +3 -3
  149. package/.next/server/chunks/8623.js +1 -1
  150. package/.next/server/chunks/8719.js +417 -0
  151. package/.next/server/chunks/8823.js +1 -1
  152. package/.next/server/chunks/9783.js +3 -3
  153. package/.next/server/chunks/9969.js +1 -1
  154. package/.next/server/instrumentation.js +1 -1
  155. package/.next/server/middleware-build-manifest.js +1 -1
  156. package/.next/server/pages/500.html +1 -1
  157. package/.next/server/server-reference-manifest.js +1 -1
  158. package/.next/server/server-reference-manifest.json +1 -1
  159. package/.next/static/chunks/2831-d7f6495bf43f4f9d.js +4 -0
  160. package/.next/static/chunks/3219-486bddbf87074d04.js +1 -0
  161. package/.next/static/chunks/3775-82dcdf23109aa5bf.js +1 -0
  162. package/.next/static/chunks/6836-341614c5418e2aa4.js +1 -0
  163. package/.next/static/chunks/8306-7418693cd7fd5861.js +1 -0
  164. package/.next/static/chunks/8370-8b3e7106703024ce.js +12 -0
  165. package/.next/static/chunks/9690-ea874aec65263b9d.js +1 -0
  166. package/.next/static/chunks/app/(app)/activity/{page-09bc1c776962737c.js → page-cf8d67941440bdce.js} +1 -1
  167. package/.next/static/chunks/app/(app)/agents/[handle]/page-7baa24f1ae8bc400.js +1 -0
  168. package/.next/static/chunks/app/(app)/code/page-b342d74807e8b914.js +1 -0
  169. package/.next/static/chunks/app/(app)/config/page-1e68ba8d20215d67.js +1 -0
  170. package/.next/static/chunks/app/(app)/costs/page-a58d759eec6048df.js +1 -0
  171. package/.next/static/chunks/app/(app)/cron/page-cc7f4e3d8ab5618f.js +1 -0
  172. package/.next/static/chunks/app/(app)/dashboard/page-7757c33acf751c4c.js +1 -0
  173. package/.next/static/chunks/app/(app)/design/{page-d457cdfa525acb85.js → page-f48c0487d240248e.js} +3 -3
  174. package/.next/static/chunks/app/(app)/docs/[id]/page-95c52cf457d869ef.js +1 -0
  175. package/.next/static/chunks/app/(app)/docs/page-fbc50cd357d5e2ca.js +1 -0
  176. package/.next/static/chunks/app/(app)/github/page-dac138256ed91e65.js +1 -0
  177. package/.next/static/chunks/app/(app)/goals/page-f87d40f6832d63b3.js +1 -0
  178. package/.next/static/chunks/app/(app)/inbox/page-49c1293e0d98874f.js +12 -0
  179. package/.next/static/chunks/app/(app)/knowledge/page-18fca436883ed5cc.js +1 -0
  180. package/.next/static/chunks/app/(app)/layout-c9778f98c0103f74.js +1 -0
  181. package/.next/static/chunks/app/(app)/models/page-030c085cd7767495.js +1 -0
  182. package/.next/static/chunks/app/(app)/notifications/page-12af3fee8b36a00e.js +12 -0
  183. package/.next/static/chunks/app/(app)/org/page-576001ff4a820744.js +12 -0
  184. package/.next/static/chunks/app/(app)/organizations/page-b973e1eee6e56baf.js +1 -0
  185. package/.next/static/chunks/app/(app)/page-cef52fc5f4fd4418.js +1 -0
  186. package/.next/static/chunks/app/(app)/planner/page-da2db56914346192.js +1 -0
  187. package/.next/static/chunks/app/(app)/plugins/page-3b78b76ecb21d616.js +1 -0
  188. package/.next/static/chunks/app/(app)/pm/page-78303379c1ea5dc5.js +1 -0
  189. package/.next/static/chunks/app/(app)/prepare-deploy/page-98b1bd3bf712bb60.js +1 -0
  190. package/.next/static/chunks/app/(app)/profile/page-de24af53de0ef2b2.js +1 -0
  191. package/.next/static/chunks/app/(app)/pulse/page-db7fd63369c01fa2.js +1 -0
  192. package/.next/static/chunks/app/(app)/reports/[id]/page-cc7f4e3d8ab5618f.js +1 -0
  193. package/.next/static/chunks/app/(app)/reports/page-97ab95e6f8b77b62.js +1 -0
  194. package/.next/static/chunks/app/(app)/routines/{page-cf4e597389865ae8.js → page-cf6a3331775ca11b.js} +1 -1
  195. package/.next/static/chunks/app/(app)/search/page-3960825f66b05606.js +1 -0
  196. package/.next/static/chunks/app/(app)/security/page-53b0770355cf7aa4.js +1 -0
  197. package/.next/static/chunks/app/(app)/skills/page-809a73b94861f8b8.js +1 -0
  198. package/.next/static/chunks/app/(app)/tasks/page-b2497927d127f7aa.js +1 -0
  199. package/.next/static/chunks/app/(app)/test-dev/page-93ec5d89e2afb612.js +1 -0
  200. package/.next/static/chunks/app/(app)/update/page-a23322af4e59a93c.js +1 -0
  201. package/.next/static/chunks/app/(auth)/login/page-446681bfb762cb05.js +1 -0
  202. package/.next/static/chunks/app/(auth)/onboarding/page-2b8cb3e0b024c995.js +1 -0
  203. package/.next/trace-build +1 -1
  204. package/CHANGELOG.md +50 -0
  205. package/README.md +7 -1
  206. package/README.pt-BR.md +7 -1
  207. package/bin/constella-update.mjs +19 -7
  208. package/bin/constella.mjs +1 -1
  209. package/bin/worker.mjs +1 -0
  210. package/docs/UPDATE.md +17 -2
  211. package/docs/roadmap.md +36 -0
  212. package/package.json +1 -1
  213. package/scripts/i18n-parity.mjs +1 -1
  214. package/scripts/install.sh +4 -2
  215. package/scripts/publish-public.mjs +12 -3
  216. package/scripts/vps-clean.sh +1 -1
  217. package/scripts/vps-install.sh +24 -7
  218. package/scripts/vps-update.sh +27 -16
  219. package/.next/server/chunks/319.js +0 -1
  220. package/.next/server/chunks/4828.js +0 -1
  221. package/.next/server/chunks/5697.js +0 -1
  222. package/.next/server/chunks/6151.js +0 -12
  223. package/.next/server/chunks/6798.js +0 -21
  224. package/.next/server/chunks/6903.js +0 -417
  225. package/.next/server/chunks/8486.js +0 -4
  226. package/.next/static/chunks/3219-9684aa1c634212de.js +0 -1
  227. package/.next/static/chunks/4353-12629098ed83e468.js +0 -1
  228. package/.next/static/chunks/4398-e798770ae782576f.js +0 -1
  229. package/.next/static/chunks/4428-09f7d473d9e33d59.js +0 -1
  230. package/.next/static/chunks/7457-c37382c6f4e115f8.js +0 -4
  231. package/.next/static/chunks/8370-6da6aa10d687b8ae.js +0 -12
  232. package/.next/static/chunks/9690-00ad96a74abac075.js +0 -1
  233. package/.next/static/chunks/app/(app)/agents/[handle]/page-b11e5f8f25fb2f88.js +0 -1
  234. package/.next/static/chunks/app/(app)/code/page-ff6925db6e10e3cc.js +0 -1
  235. package/.next/static/chunks/app/(app)/config/page-4df2facd9c81adb5.js +0 -1
  236. package/.next/static/chunks/app/(app)/costs/page-c0a07c0283731a8c.js +0 -1
  237. package/.next/static/chunks/app/(app)/cron/page-662e6e1a25b14025.js +0 -1
  238. package/.next/static/chunks/app/(app)/dashboard/page-e6f62eaecc0f9926.js +0 -1
  239. package/.next/static/chunks/app/(app)/docs/[id]/page-4a1be0c9bd6ca402.js +0 -1
  240. package/.next/static/chunks/app/(app)/docs/page-e6db758a14f57ec8.js +0 -1
  241. package/.next/static/chunks/app/(app)/github/page-57bb812627d083a1.js +0 -1
  242. package/.next/static/chunks/app/(app)/goals/page-81e1af515f78e13b.js +0 -1
  243. package/.next/static/chunks/app/(app)/inbox/page-0baef1b01009c832.js +0 -12
  244. package/.next/static/chunks/app/(app)/knowledge/page-eb1317bf385e31ed.js +0 -1
  245. package/.next/static/chunks/app/(app)/layout-dcd4f30b53cb140f.js +0 -1
  246. package/.next/static/chunks/app/(app)/models/page-d73965ae6ca317e8.js +0 -1
  247. package/.next/static/chunks/app/(app)/notifications/page-b3ff14483cb6694e.js +0 -12
  248. package/.next/static/chunks/app/(app)/org/page-3075b218dbc681ce.js +0 -12
  249. package/.next/static/chunks/app/(app)/organizations/page-a6d35dbb21a61b7c.js +0 -1
  250. package/.next/static/chunks/app/(app)/page-c9e4fc0616a0083e.js +0 -1
  251. package/.next/static/chunks/app/(app)/planner/page-809dd3edda4ada93.js +0 -1
  252. package/.next/static/chunks/app/(app)/plugins/page-7e2aad1b702b5c88.js +0 -1
  253. package/.next/static/chunks/app/(app)/pm/page-709f9ac68ac98693.js +0 -1
  254. package/.next/static/chunks/app/(app)/prepare-deploy/page-f9609626153c2483.js +0 -1
  255. package/.next/static/chunks/app/(app)/profile/page-6d22c7bd0adb7a52.js +0 -1
  256. package/.next/static/chunks/app/(app)/pulse/page-f529917828ff4884.js +0 -1
  257. package/.next/static/chunks/app/(app)/reports/[id]/page-662e6e1a25b14025.js +0 -1
  258. package/.next/static/chunks/app/(app)/reports/page-5248735b18767054.js +0 -1
  259. package/.next/static/chunks/app/(app)/search/page-4d1e07c4c43a7489.js +0 -1
  260. package/.next/static/chunks/app/(app)/security/page-db7b8840d9cc6b72.js +0 -1
  261. package/.next/static/chunks/app/(app)/skills/page-a98da9e415efc310.js +0 -1
  262. package/.next/static/chunks/app/(app)/tasks/page-ab33402626a50c88.js +0 -1
  263. package/.next/static/chunks/app/(app)/test-dev/page-34612a4b47ec9aa2.js +0 -1
  264. package/.next/static/chunks/app/(app)/update/page-99d63495bfdd56a9.js +0 -1
  265. package/.next/static/chunks/app/(auth)/login/page-c7b372a5053512f0.js +0 -1
  266. package/.next/static/chunks/app/(auth)/onboarding/page-450bfc87fb942f9b.js +0 -1
  267. /package/.next/static/{mOVW9EdxrQ1xPT7vDdRdK → fb-rRThu8P8AXEQQBbLgT}/_buildManifest.js +0 -0
  268. /package/.next/static/{mOVW9EdxrQ1xPT7vDdRdK → fb-rRThu8P8AXEQQBbLgT}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=3509,a.ids=[3509],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1405:(a,b,c)=>{c.r(b),c.d(b,{"0002906425c37ba0a53bbfafa19691e9a906050d86":()=>d.Uw,"00041d8182167f36657652fa5117a86f04ad9fdac4":()=>h.I_,"00194592ad47500e882eca534f2a4293d58ced6167":()=>h.PO,"002dfc0678550fd7b554d7d8b3301ed4c835ae2a9f":()=>h.wP,"0038bfb5d0e8748666ba18a4f02557897aae6a50b5":()=>d.VH,"00417fb0c5992b5d8c9bf7bfdb20091c0b75f967d3":()=>g.approvePlan,"004b14ab45f1d73caf1fa096fd428f0885213bc9dd":()=>g.groomBacklog,"0053a9e20f5c5328aa2a2502d518180bfd6eed8f2f":()=>h.e9,"0056078f13eb137d213d4a1085a13ff6f381dabd2e":()=>d.Gh,"005693f47d654854560b9d0bc386173850cbf8240e":()=>h.o3,"005d6b177b466248dc8ade5a43a93b4d803eab6094":()=>d.nl,"0061afb7f7b8b1fd8ac5aa96a903e3f22f615aa20f":()=>d.LU,"006dcbb5e7e346c443d7102ca0daafd3d6ef659076":()=>d.Ac,"0072163f36363b48de78305a257f30f3daefa28c88":()=>h.gn,"007e381e52bd202d1b126f7cd30c571345bc33887e":()=>d.ts,"009534a6350f6d7ee36028fb9ab4659b11f05bd937":()=>g.requestPlanChanges,"0097079f8bb244de0b0343f4afa7990fed9fb324d2":()=>d.Jw,"009e146b7742c650ca216beeed8e617243a4a5c103":()=>h.Tu,"00a7e1670a16ccb470c5305aabfe79db99128992b9":()=>d.lC,"00a94d93b5071359022f2378c3d54073eee3fa85c3":()=>d.Hi,"00abc16008e05e917d0ebc5e65eec07577fecb4570":()=>d.V$,"00b0578e37d9ebe94aea8c3a34edc1eb3072857776":()=>h.ME,"00ba8cc316d3085e76aed850bf0439194afd9bdec4":()=>h.Ni,"00bffc1c2ed5e8793aa8d097de94037f7e98e3292f":()=>d.Vr,"00c6849ba47e6e7fea083ff67d4e2a602a90900e03":()=>h.oS,"00cefe7d564b7bd933451222433059aa5dd8e95c2a":()=>d.zO,"00dec8cf58fde95e890b2dbab03e0216c02db09ee8":()=>d.kb,"00f53bdd7c80bb26d6c234682ff09d42c9fa8d285c":()=>h.yL,"00f924b6c219ad8d088625ee88343322f8ea498bcf":()=>d.S8,"400105d268e50cf405554ad50d07b6cf74ab3dfdfb":()=>h.a4,"4017a2e91aac0e44c71e7dc8bdc64b91c86af6966e":()=>h.h_,"4019def9d61c1f2ae2b3ef51af11efa0f5c439d65d":()=>g.approveSpec,"40205db6b6772e5190d6280f495fecc4c49bb1880c":()=>h.NM,"402bb61d0ec0ca426f1594c554cd83c9d2f55e4e2a":()=>g.startNewWork,"4036941845402c95b0a364055242692180e15d59a1":()=>h.fb,"403e4537b9c0d6aa80d4e7fc51b9a4ed3c5f832593":()=>g.planFromConversation,"403e61223e2aa817de8ec2340570d4e49d420e3398":()=>d.cm,"4042d732975c30e998b1b417f244d02bc240771b42":()=>h.R6,"404502bf64b6ad6b7865767a52d5f6f55bf6a43e3a":()=>d.Cp,"404b75852390a00b75a0428e40249cda9fec6baced":()=>d.wp,"406d2bac523e293dc8e736d45dbfd24078855b371f":()=>g.advanceIssue,"406e30e8c1f70608478aa34a2cfc9f472c06c1ade1":()=>h.lj,"407f6077577515b726822bd6f80f9a601f412e1015":()=>d.m,"4088847163a13dc2e80c3095763da6ac497a5b9e37":()=>g.rejectIssue,"4096c37c3555263308f9a36206eaf746d0defe25ad":()=>g.rejectSpec,"409ca62ff6760c73fdd8c8c7267a97b16e88a526f7":()=>h.$_,"40a2ed61c41d82e88df9f715926555d4751d7925b2":()=>h.is,"40aed83757bf4e7d35906a784d6f38596d11a37abf":()=>g.approveIssue,"40b07ca371170bbb9e7bc16ba05a00629bae0e3e9e":()=>d.I2,"40d05376667b91af0ad411cbfa854abffb551f894d":()=>d.ju,"40d3c0594ce0b931cad118a1790bac1c8aba31a6bb":()=>d.az,"40e3b911773e190273915e8ecd96b865a3e34df027":()=>g.generatePlan,"40ea0236fb2729d70fa5f0bf6383e5f20dfa0c930e":()=>g.setAuto247,"40eb0711e58f72723c75d51f7586109839bbe62d56":()=>d.L0,"40ef9327df3c76aeec61e899723f3a4fce0f04e0f4":()=>h.DX,"40fae88371459f73885109eab788ff958ee3beeed7":()=>e.mg,"601c6bff04fd688cd4118800632f7fbc53a64ee6a5":()=>h.ft,"60274f514b61483b6e070a65f4817ee1ad9fe43504":()=>f.k,"602c949d6b4f90259a9dd0bf28582677f4f84cdc82":()=>h.pG,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5":()=>e.eA,"605cae860898064ae08c87ba7e942dd9d714085b87":()=>h.NW,"60643b82a325d6fdb9a22f2326122b2156783fb109":()=>h.RS,"60d43730d40153cb1c4e21154a523dfb9804f2610f":()=>g.groomBacklogFor,"60da31e678463e5daa11931edbba1bf33db81533f2":()=>h.qw,"60dbb220db735685b4802d9264fe095d42ffd507fa":()=>h.EQ,"60dbdf46cddec83114ce6551fd870fa84f68016765":()=>f.I,"60e384f0f20aad069f13d07666957fcf7fb2f9646f":()=>h.Fo,"702318f1552859b902907168b6bbd6d46cbb1cd8bd":()=>h.Sy,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4":()=>e.LV,"7084c40999976496a9f63bf8a44a4c05630a91605b":()=>h.a7,"7088368271648f6247e709bf8e6336af1a18845379":()=>h.fM,"70de449374fe32fcef6ed2f670f9dd29539a04eff1":()=>h.sy,"7ca088c8458079633b65380437dffa61b3a503e9d8":()=>h.Hg});var d=c(27989),e=c(76862),f=c(78848),g=c(56053),h=c(63390)},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13239:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(80280);let e=!1;function f(){e||(e=!0,d.F.exec(`
1
+ "use strict";(()=>{var a={};a.id=3509,a.ids=[3509],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13239:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(80280);let e=!1;function f(){e||(e=!0,d.F.exec(`
2
2
  CREATE TABLE IF NOT EXISTS design_session (
3
3
  id TEXT PRIMARY KEY,
4
4
  workspace_id TEXT NOT NULL REFERENCES workspace(id) ON DELETE CASCADE,
@@ -38,7 +38,7 @@
38
38
  created_at INTEGER NOT NULL DEFAULT (unixepoch())
39
39
  );
40
40
  CREATE INDEX IF NOT EXISTS design_comment_sess_idx ON design_comment (session_id);
41
- `))}},16050:(a,b,c)=>{c.d(b,{Ml:()=>e});let d={github:!0,telegram:!0,ollama:!0,webhooks:!0};function e(a,b){return({...d,...a??{}})[b]??!0}},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},37067:a=>{a.exports=require("node:http")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46466:a=>{a.exports=require("node:stream/promises")},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},63390:(a,b,c)=>{c.d(b,{Hg:()=>ai,a7:()=>aj,sy:()=>al,is:()=>H,fM:()=>I,Sy:()=>G,e9:()=>ao,EQ:()=>am,NM:()=>ak,$_:()=>aa,qw:()=>S,DX:()=>V,ME:()=>E,oS:()=>J,RS:()=>K,R6:()=>ah,wP:()=>W,Ni:()=>$,gn:()=>ab,yL:()=>ad,NW:()=>P,lj:()=>Y,fb:()=>ag,pG:()=>ae,I_:()=>L,Fo:()=>M,o3:()=>N,a4:()=>af,ft:()=>_,Tu:()=>U,h_:()=>F,PO:()=>T});var d=c(52813),e=c(77598),f=c(1782),g=c(7852),h=c(83550),i=c(80280),j=c(25533),k=c(95896),l=c(3188),m=c(78848),n=c(10333),o=c(43075),p=c(18612),q=c(99546),r=c(90860),s=c(13239),t=c(88639);let u=new Set(["Next.js","Nuxt","Remix","SvelteKit","Astro","Gatsby"]);var v=c(1591),w=c(99956),x=c(6873);function y(a,b){if(!b||/^(https?:)?\/\//i.test(b)||b.startsWith("data:")||b.startsWith("#")||b.startsWith("/"))return null;let c=b.split(/[?#]/)[0].trim();if(!c)return null;let d=a?a.split("/").filter(Boolean):[];for(let a of c.split("/"))if(""!==a&&"."!==a){if(".."===a){if(!d.length)return null;d.pop();continue}d.push(a)}let e=d.join("/");return e.includes("..")||!e.startsWith("design-mock/")?null:e}function z(a,b,c,d){let e=b.replace(/\/[^/]*$/,"");return a.replace(/@import\s+(?:url\(\s*)?["']?([^"')]+)["']?\s*\)?\s*;/gi,(a,b)=>{let f=y(e,String(b));if(!f||!/\.css$/i.test(f))return a;if(d.has(f))return"";d.add(f);let g=c(f);return null==g?`/* design: missing ${f} */`:`/* ${f} */
41
+ `))}},16050:(a,b,c)=>{c.d(b,{Ml:()=>e});let d={github:!0,telegram:!0,ollama:!0,webhooks:!0};function e(a,b){return({...d,...a??{}})[b]??!0}},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},37067:a=>{a.exports=require("node:http")},38522:a=>{a.exports=require("node:zlib")},40762:(a,b,c)=>{c.r(b),c.d(b,{"000d2475a828032e63b1cbb99501b270d46c86c4d9":()=>h.PO,"0011c2404adc6b3048be5ca5eb204351e28665fedd":()=>d.S8,"0015ace5d40c40b2308d1146611332c7f09101db2b":()=>h.wP,"0015b06bbd98ec7937ca597bbae4092e26b1991a66":()=>d.nl,"0018c198f4a47e6adc1238b5daa532fab3632f90ad":()=>d.Ac,"0024bf7b34a52fe14a9a978ce3e57cfede2898f61a":()=>d.Jw,"0026a43f3e1b62dcf12b65a152b2b7d0b33855e685":()=>d.V$,"00275a0096349c5159f727630056869831c6052a90":()=>h.Ni,"00362877be6a6f7da575700ffbf6d3b713016928b6":()=>h.e9,"003c134392bb340969faa7fda2658f2c4517730d98":()=>d.Hi,"004c4e8970872e80bf3a634ff51fb13079a791cc11":()=>d.Vr,"004d7785b6e7ed54fec1c45370d77ac4c2f07804e2":()=>d.LU,"00554e833ae48f796f0eac7ddef3970ff24f235ad7":()=>d.ts,"005654d5bee41f688facd5214d39464c0a5154a96d":()=>h.oS,"005c24c0f0211e033cb8e6bc08690f6247978646f6":()=>h.o3,"0067a5ef8d17ec38729f7ccb6c66334a5ba3c50745":()=>h.yL,"006b9d9e61368e96e287131f2a79d8141f80607bc5":()=>d.Gh,"0073cd1b77e35abc407ab8c0bfd7158ee296172e28":()=>d.VH,"0078876825bee310a72cf001e5fe01a3304ba0a060":()=>d.kb,"0085c3c15f848da7beac072fd797bc11048a499d8f":()=>d.Uw,"0089bb3aeea0ab3018bc9c6c3d254bc32927017ade":()=>g.requestPlanChanges,"009f63092f0ec7ab04ba59b6200071d083227c97fc":()=>h.ME,"00a74d208fffff8f43745ea86e004ff1eb0ffe2ced":()=>h.Tu,"00a82d9997685786a827f84d1adec8c0464ab77242":()=>d.lC,"00acc474f484ce96a824b2454a098e8dc71914bf5e":()=>h.gn,"00c7d21ee3adeb722cfce33e92f77f27aa0c649888":()=>h.I_,"00d707af504f1a0491ca9dcf763ef015da594b49f3":()=>g.approvePlan,"00dcf7bba8dfe2aea38f8e1a0b604bdf20346de49b":()=>g.groomBacklog,"00f03d2d81bb26d468c7e4637a0f32c70fda9c6565":()=>d.zO,"40004ed28e4ffbcfb3eb0c22b185c89201e671971f":()=>h.fb,"40155f88f1c1dd62e916c89f5051e44f6b700413b4":()=>h.a4,"4017364bc3b6d6fa14061cfac839d1a8827d6c73b5":()=>h.is,"401a19ed3c8c332390be321a05a8a084c75556421e":()=>g.advanceIssue,"4022f1066dfef34fbb82f5d949e1af2381f0b41e1b":()=>h.DX,"4023169ed85000187a7267198eab5e95902c9af1b9":()=>g.approveIssue,"402521df2cdcdf994cd2264cd2ae8e32cce160764d":()=>h.h_,"402d4d51b2fedd60f6206531e45066dc999aaa3915":()=>g.startNewWork,"4038b15099bf2fe9a8f44cea08bfedf104a01c187e":()=>g.setAuto247,"404fa4e7b74f3432c13521faa40badac327c784ea2":()=>d.cm,"4054d8c9d713d027d9beb3076074624ea681f897ba":()=>d.m,"405d9a2bdd47403b8b93c2ea9799d886bf4f865790":()=>e.mg,"4070a1e8f5dfdb123c1dd3ba53e819cd324592eeef":()=>d.wp,"40a51f05a62e5ad01e4585ad064bcc9493ef1588fc":()=>d.ju,"40a8b5e4223fa4e2f64798e3c4f10e2052d74263a0":()=>g.generatePlan,"40ade191d12ca903e1806ca591518197b710007f5f":()=>h.$_,"40beac2559eab1128341c145e31826c3b57f094595":()=>g.rejectIssue,"40c08d36ba60f30915b37b6dd0aed4824b73741fe7":()=>d.Cp,"40c0f496f5293823123e86e702c43f6dbd13fa0241":()=>d.L0,"40c24d2c549cf74080f8dcff3c2dbb2ce82e7fae5a":()=>h.NM,"40caf95c1217c0ac6c4afc1ff748b52c6e39b5c8cd":()=>d.az,"40ced2f71e662e1884c830a2cb80626a57aa8be42c":()=>g.approveSpec,"40e58ec47b3c8acdd5eeb552095b8d34ce834fa009":()=>d.I2,"40e8f30a047d0f241003dcbb3194b872639e110c96":()=>g.rejectSpec,"40f19d59c8b81b0b668840478ff1dc221845092d69":()=>h.lj,"40f1fa3f447273f78f9a0ffce89894790292bb4b08":()=>h.R6,"40fe2ee19da6b0f6382e1874f540a69b1e1d7bcb02":()=>g.planFromConversation,"600d8ef59ec617bc23f97c4b95c39ecebfe50f11a8":()=>h.ft,"60174a505ab0000e6ba58f8350a98c8bfd8f08f9cd":()=>h.EQ,"601bdeb977fbc2e3944a52d0c6037b3d61a305a56a":()=>h.NW,"60575173b13aefcb112b702ceafc6e93d4d1a87c93":()=>e.eA,"606d6a4c1c840dabf0ae062586f5d31aced8e1adf7":()=>g.groomBacklogFor,"60a238957762b5625582695c05d90f75b394483f2c":()=>f.I,"60b9de834db4c321afc7fb79b8c65f5d9dfe457ab8":()=>h.qw,"60dba9908002f3000f3e7e8a0a7750d94f4e462c3d":()=>f.k,"60e4ac6bf305417265debb1d7d6d5b994d57b22161":()=>h.Fo,"60f05b118f57621541ffc2d84808a79b8bff859f81":()=>h.pG,"60f3c0ba58cabeb1d8596a8198d8005537906a87e7":()=>h.RS,"7025b1705b7eb7a915125df238da780672906b31a7":()=>h.a7,"704389bc75f649527643be72d97dea040cc68a8541":()=>h.fM,"7044adad76d6dbcd2ebf27ca1fb5911ec02093ba89":()=>h.sy,"70ae6b7d6a16ebfa9c23932ee1094fbffbcab2aa68":()=>e.LV,"70c5b800592f8c728e28096ea00b5991d917d5b166":()=>h.Sy,"7cfdd007ba47d4feb198cc6937c6b450d454266e8c":()=>h.Hg});var d=c(27989),e=c(76862),f=c(78848),g=c(56053),h=c(63390)},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46466:a=>{a.exports=require("node:stream/promises")},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},63390:(a,b,c)=>{c.d(b,{Hg:()=>aj,a7:()=>ak,sy:()=>am,is:()=>H,fM:()=>I,Sy:()=>G,e9:()=>ap,EQ:()=>an,NM:()=>al,$_:()=>ab,qw:()=>T,DX:()=>W,ME:()=>E,oS:()=>J,RS:()=>K,R6:()=>ai,wP:()=>X,Ni:()=>_,gn:()=>ac,yL:()=>ae,NW:()=>Q,lj:()=>Z,fb:()=>ah,pG:()=>af,I_:()=>L,Fo:()=>N,o3:()=>O,a4:()=>ag,ft:()=>aa,Tu:()=>V,h_:()=>F,PO:()=>U});var d=c(52813),e=c(77598),f=c(1782),g=c(7852),h=c(83550),i=c(80280),j=c(25533),k=c(95896),l=c(3188),m=c(78848),n=c(10333),o=c(43075),p=c(18612),q=c(99546),r=c(90860),s=c(13239),t=c(88639);let u=new Set(["Next.js","Nuxt","Remix","SvelteKit","Astro","Gatsby"]);var v=c(1591),w=c(99956),x=c(6873);function y(a,b){if(!b||/^(https?:)?\/\//i.test(b)||b.startsWith("data:")||b.startsWith("#")||b.startsWith("/"))return null;let c=b.split(/[?#]/)[0].trim();if(!c)return null;let d=a?a.split("/").filter(Boolean):[];for(let a of c.split("/"))if(""!==a&&"."!==a){if(".."===a){if(!d.length)return null;d.pop();continue}d.push(a)}let e=d.join("/");return e.includes("..")||!e.startsWith("design-mock/")?null:e}function z(a,b,c,d){let e=b.replace(/\/[^/]*$/,"");return a.replace(/@import\s+(?:url\(\s*)?["']?([^"')]+)["']?\s*\)?\s*;/gi,(a,b)=>{let f=y(e,String(b));if(!f||!/\.css$/i.test(f))return a;if(d.has(f))return"";d.add(f);let g=c(f);return null==g?`/* design: missing ${f} */`:`/* ${f} */
42
42
  `+z(g,f,c,d)})}function A(a,b,c){let d=b.replace(/\/[^/]*$/,""),e=a.replace(/<link\b[^>]*>/gi,a=>{if(!/stylesheet/i.test(a)&&!/href\s*=\s*["'][^"']+\.css/i.test(a))return a;let b=a.match(/href\s*=\s*["']([^"']+)["']/i),e=b?y(d,b[1]):null;if(!e||!/\.css$/i.test(e))return a;let f=c(e);return null==f?`<!-- design: missing ${e} -->`:`<style data-cstla-bundled="${e}">
43
43
  ${z(f,e,c,new Set([e]))}
44
44
  </style>`});return e.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,d,e)=>/@import/i.test(e)?`<style${d}>${z(e,b,c,new Set)}</style>`:a)}var B=c(29635);let C="design";async function D(a){let b=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.workspaceId,a));return b.find(a=>"grace"===a.handle)??b.find(a=>/front\s?end|\bui\b|\bux\b/i.test(a.role))??b[0]??null}async function E(){let{workspace:a}=await (0,k.nP)();(0,s.I)();let[b]=await i.db.select().from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(b)return{id:b.id,status:b.status};let c=(0,e.randomUUID)();return await i.db.insert(j.designSession).values({id:c,workspaceId:a.id,title:`${a.name} — design`,status:"building",tokens:{}}),{id:c,status:"building"}}async function F(a){let{workspace:b}=await (0,k.nP)();(0,s.I)();let[c]=await i.db.select().from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);return c?await i.db.update(j.designSession).set({tokens:a,updatedAt:new Date}).where((0,f.eq)(j.designSession.id,c.id)):await i.db.insert(j.designSession).values({id:(0,e.randomUUID)(),workspaceId:b.id,title:`${b.name} — design`,status:"building",tokens:a}),{ok:!0}}async function G(a,b,c){let d=a?.trim(),p=(b??[]).map(a=>a?.path).filter(a=>!!a&&a.startsWith("uploads/")).slice(0,6);if(!d&&!p.length&&!c)return{ok:!1,error:"Describe what you want to prototype or change."};let{org:q,workspace:u}=await (0,k.nP)();(0,s.I)();let y=await D(u.id);if(!y)return{ok:!1,error:"No frontend agent found."};let z=d||(p.length?"(image)":c?"Adjust this element.":"(image)"),A=(0,e.randomUUID)();await i.db.insert(j.message).values({id:A,workspaceId:u.id,channel:C,fromKind:"operator",text:c?`${z}
@@ -67,10 +67,10 @@ BUILD METHOD — write the prototype LIVE (the operator watches the canvas paint
67
67
  • NEVER compose the whole screen in your reply or in memory and Write it once at the end — that defeats the live preview. Create the skeleton early, then edit it into shape so each write renders a new block on the canvas.`,`
68
68
  HOW TO RESPOND — decide first:
69
69
  • If the operator is only greeting, chatting, or asking a question (NO concrete screen/component/visual change requested), just reply in 1-3 sentences IN CHARACTER: greet them and offer 2-3 concrete things you can build. Do NOT search the project, read files, or write anything yet — only talk.
70
- • When they DO ask for a concrete screen, component or visual change: consult your design skills, then BUILD IT LIVE as described above (skeleton file first, then incremental edits under design-mock/screens/), TEST what you built (does it render? do the requested changes appear?), and reply with a 2-3 sentence summary of what you built, what you validated, and what's next.`].filter(Boolean).join("\n"),N=new Set,O=await (0,l.p1)(M,{orgId:q.id,binary:z,model:D,timeoutMs:6e5,agentId:y.id,agentHandle:y.handle},a=>{if("create"===a.kind||"edit"===a.kind){let b=(a.target||"").replace(/\\/g,"/"),c=b.toLowerCase().indexOf("design-mock/");c>=0&&N.add(b.slice(c))}(0,m.I)(u.id,{runId:B,channel:C,agentId:y.id,kind:a.kind,target:a.target,detail:a.detail})});(O.usd>0||O.inputTokens+O.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:u.id,agentId:y.id,channel:C,provider:O.binary,model:O.model??y.model,usd:O.usd,tokens:O.inputTokens+O.outputTokens,at:new Date});let P=O.ok?O.text?.trim()||"Prototype updated.":`(couldn't respond: ${(0,v.Tc)(O.error||O.text)})`;if(await i.db.insert(j.message).values({id:B,workspaceId:u.id,channel:C,fromKind:"agent",fromHandle:y.handle,text:P.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(u.id,B,C),O.ok&&N.size)try{let a=(O.text?.trim().split("\n").find(a=>a.trim())||"Prototype iteration").slice(0,200);await ac(u.id,a,[...N])}catch{}if(O.ok&&N.size)try{let a=(0,t.zw)(q.id,u),b=a.designMockFiles.some(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!a.approved&&b){let a=await S(q.id,u);await (0,r.I)(u.id,{kind:"design-approval",text:`Design ready to review — ${u.name}`,detail:a,agentId:y.id,tg:!0})}}catch{}(0,o.r)(u.id);try{(0,h.revalidatePath)("/design")}catch{}}catch(a){console.error("[design] askDesign run failed:",a);try{await i.db.insert(j.message).values({id:B,workspaceId:u.id,channel:C,fromKind:"agent",fromHandle:y.handle,text:`(couldn't respond: ${(0,v.Tc)(a?.message)})`.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(u.id,B,C),(0,o.r)(u.id)}catch{}}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,y.id))}catch{}(0,o.r)(u.id)}})(),{ok:!0,started:!0}}async function H(a){let{org:b,workspace:c}=await (0,k.nP)();return I(b.id,c,a)}async function I(a,b,c){(0,s.I)();let d=(0,t.zw)(a,b),k=await D(b.id),[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);l?await i.db.update(j.designSession).set({status:"approved",updatedAt:new Date}).where((0,f.eq)(j.designSession.id,l.id)):await i.db.insert(j.designSession).values({id:(0,e.randomUUID)(),workspaceId:b.id,title:`${b.name} — design`,status:"approved",tokens:{}});let m=["# Approved design — official visual reference","",`_Approved by the operator in the Design module. This is the OFFICIAL visual reference for ${b.name}: the real implementation must follow it exactly (zero drift) — same screens, layout, components, design system, tokens, states and behavior. The CEO Planner turns this into the Super Spec, specs, issues and plan._`,"",d.mission?`**Mission:** ${d.mission}`:"",d.objective?`**Objective:** ${d.objective}`:"",d.stackList?`**Stack:** ${d.stackList}`:"",c?.trim()?`
70
+ • When they DO ask for a concrete screen, component or visual change: consult your design skills, then BUILD IT LIVE as described above (skeleton file first, then incremental edits under design-mock/screens/), TEST what you built (does it render? do the requested changes appear?), and reply with a 2-3 sentence summary of what you built, what you validated, and what's next.`].filter(Boolean).join("\n"),N=new Set,O=await (0,l.p1)(M,{orgId:q.id,binary:z,model:D,timeoutMs:6e5,agentId:y.id,agentHandle:y.handle},a=>{if("create"===a.kind||"edit"===a.kind){let b=(a.target||"").replace(/\\/g,"/"),c=b.toLowerCase().indexOf("design-mock/");c>=0&&N.add(b.slice(c))}(0,m.I)(u.id,{runId:B,channel:C,agentId:y.id,kind:a.kind,target:a.target,detail:a.detail})});(O.usd>0||O.inputTokens+O.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:u.id,agentId:y.id,channel:C,provider:O.binary,model:O.model??y.model,usd:O.usd,tokens:O.inputTokens+O.outputTokens,at:new Date});let P=O.ok?O.text?.trim()||"Prototype updated.":`(couldn't respond: ${(0,v.Tc)(O.error||O.text)})`;if(await i.db.insert(j.message).values({id:B,workspaceId:u.id,channel:C,fromKind:"agent",fromHandle:y.handle,text:P.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(u.id,B,C),O.ok&&N.size)try{let a=(O.text?.trim().split("\n").find(a=>a.trim())||"Prototype iteration").slice(0,200);await ad(u.id,a,[...N])}catch{}if(O.ok&&N.size)try{let a=(0,t.zw)(q.id,u),b=a.designMockFiles.some(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!a.approved&&b){let a=await T(q.id,u);await (0,r.I)(u.id,{kind:"design-approval",text:`Design ready to review — ${u.name}`,detail:a,agentId:y.id,tg:!0})}}catch{}(0,o.r)(u.id);try{(0,h.revalidatePath)("/design")}catch{}}catch(a){console.error("[design] askDesign run failed:",a);try{await i.db.insert(j.message).values({id:B,workspaceId:u.id,channel:C,fromKind:"agent",fromHandle:y.handle,text:`(couldn't respond: ${(0,v.Tc)(a?.message)})`.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(u.id,B,C),(0,o.r)(u.id)}catch{}}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,y.id))}catch{}(0,o.r)(u.id)}})(),{ok:!0,started:!0}}async function H(a){let{org:b,workspace:c}=await (0,k.nP)();return I(b.id,c,a)}async function I(a,b,c){(0,s.I)();let d=(0,t.zw)(a,b),k=await D(b.id),[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);l?await i.db.update(j.designSession).set({status:"approved",updatedAt:new Date}).where((0,f.eq)(j.designSession.id,l.id)):await i.db.insert(j.designSession).values({id:(0,e.randomUUID)(),workspaceId:b.id,title:`${b.name} — design`,status:"approved",tokens:{}});let m=["# Approved design — official visual reference","",`_Approved by the operator in the Design module. This is the OFFICIAL visual reference for ${b.name}: the real implementation must follow it exactly (zero drift) — same screens, layout, components, design system, tokens, states and behavior. The CEO Planner turns this into the Super Spec, specs, issues and plan._`,"",d.mission?`**Mission:** ${d.mission}`:"",d.objective?`**Objective:** ${d.objective}`:"",d.stackList?`**Stack:** ${d.stackList}`:"",c?.trim()?`
71
71
  **Operator note:** ${c.trim()}`:"","","## Design files (design-mock/)",d.designMockFiles.length?d.designMockFiles.map(a=>`- ${a}`).join("\n"):"_(none yet — the frontend agent's prototype files will be listed here)_","",d.mockFiles.length?`## Source mock (mock/)
72
72
  ${d.mockFiles.map(a=>`- ${a}`).join("\n")}
73
- `:"","## Handoff","Open the CEO Planner and Generate plan — the approved design above is read as official context, so specs/issues honor it.",""].filter(Boolean).join("\n");(0,p.dx)(a,t.Oi,m),await (0,q.j)(b.id,{text:`Design approved — official visual reference for ${b.name}`,by:k?.handle??"grace",source:"design",refKey:t.Oi,rationale:(c?.trim()||`${d.designMockFiles.length} design file(s); stack: ${d.stackList||"—"}`).slice(0,1e3)}),await (0,r.I)(b.id,{kind:"done",text:"Design approved — official visual reference",detail:"The CEO Planner will turn it into the Super Spec, specs and issues.",agentId:k?.id});try{(0,h.revalidatePath)("/design"),(0,h.revalidatePath)("/planner")}catch{}return{ok:!0}}async function J(){let{org:a,workspace:b}=await (0,k.nP)();return K(a.id,b)}async function K(a,b){let c=await I(a,b);if(!c.ok)return c;let d=(0,t.Iz)(a);(0,t.H5)(a,{skip:!1,brief:d.brief,goalTitle:d.goalTitle,handoffAt:Date.now()});let e=d.brief?.trim()?{brief:d.brief.trim(),goalTitle:d.goalTitle}:void 0;return await Q(a,b,e),{ok:!0}}async function L(){let{org:a,workspace:b}=await (0,k.nP)();return M(a.id,b)}async function M(a,b){let c=(0,t.Iz)(a);if(!c.handoffAt)return{ok:!0};let d=await D(b.id);if(d?.status==="working")return{ok:!0};(0,t.H5)(a,{skip:!1,brief:c.brief,goalTitle:c.goalTitle,handoffAt:Date.now()});let e=c.brief?.trim()?{brief:c.brief.trim(),goalTitle:c.goalTitle}:void 0;return await Q(a,b,e),{ok:!0}}async function N(){let a=0;try{for(let b of(await i.db.select().from(j.workspace)))if((0,t.Iz)(b.orgId).handoffAt)try{await M(b.orgId,b),a++}catch(a){console.error("[design] resume handoff failed:",b.id,a)}}catch(a){console.error("[design] resumePendingDesignHandoffs failed:",a)}return a}let O=`const http = require("http");
73
+ `:"","## Handoff","Open the CEO Planner and Generate plan — the approved design above is read as official context, so specs/issues honor it.",""].filter(Boolean).join("\n");(0,p.dx)(a,t.Oi,m),await (0,q.j)(b.id,{text:`Design approved — official visual reference for ${b.name}`,by:k?.handle??"grace",source:"design",refKey:t.Oi,rationale:(c?.trim()||`${d.designMockFiles.length} design file(s); stack: ${d.stackList||"—"}`).slice(0,1e3)}),await (0,r.I)(b.id,{kind:"done",text:"Design approved — official visual reference",detail:"The CEO Planner will turn it into the Super Spec, specs and issues.",agentId:k?.id});try{(0,h.revalidatePath)("/design"),(0,h.revalidatePath)("/planner")}catch{}return{ok:!0}}async function J(){let{org:a,workspace:b}=await (0,k.nP)();return K(a.id,b)}async function K(a,b){let c=await I(a,b);if(!c.ok)return c;let d=(0,t.Iz)(a);(0,t.H5)(a,{skip:!1,brief:d.brief,goalTitle:d.goalTitle,handoffAt:Date.now()});let e=d.brief?.trim()?{brief:d.brief.trim(),goalTitle:d.goalTitle}:void 0;return await R(a,b,e),{ok:!0}}async function L(){let{org:a,workspace:b}=await (0,k.nP)();return N(a.id,b)}let M=new Set;async function N(a,b){let c=(0,t.Iz)(a);if(!c.handoffAt)return{ok:!0};let d=await D(b.id);if(d?.status==="working"||M.has(a))return{ok:!0};M.add(a);try{(0,t.H5)(a,{skip:!1,brief:c.brief,goalTitle:c.goalTitle,handoffAt:Date.now()});let d=c.brief?.trim()?{brief:c.brief.trim(),goalTitle:c.goalTitle}:void 0;return await R(a,b,d),{ok:!0}}finally{M.delete(a)}}async function O(){let a=0;try{for(let b of(await i.db.select().from(j.workspace)))if((0,t.Iz)(b.orgId).handoffAt)try{await N(b.orgId,b),a++}catch(a){console.error("[design] resume handoff failed:",b.id,a)}}catch(a){console.error("[design] resumePendingDesignHandoffs failed:",a)}return a}let P=`const http = require("http");
74
74
  const fs = require("fs");
75
75
  const path = require("path");
76
76
  const PORT = Number(process.env.PORT) || 3000;
@@ -88,11 +88,11 @@ http.createServer((req, res) => {
88
88
  res.end(buf);
89
89
  });
90
90
  }).listen(PORT, "127.0.0.1", () => console.log("listening on http://127.0.0.1:" + PORT));
91
- `;async function P(a,b){let c,d,e,f,g,h=(0,t.zw)(a,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!h.length)return{ok:!1,target:"",served:!1,needsPort:!1,files:[],resync:!1};let i=(d=(c=(b.stack??{})||{}).meta,e=c.frontend,f=c.backend,g=c.language,"Next.js"===d?"next":"HTML/CSS"===e||"Vanilla JS"===e||"Static (no framework)"===d?"static":"Vite (SPA)"===d||e&&"None"!==e&&(!d||"None"===d||u.has(d))?"Vue"===e?"vite-vue":"Svelte"===e||"SvelteKit"===d?"vite-svelte":"vite-react":"Express"===f?"node-express":"Fastify"===f?"node-fastify":"Koa"===f?"node-koa":"Hono"===f?"node-hono":"NestJS"===f?"node-nest":"FastAPI"===f?"fastapi":"Flask"===f?"flask":"Django"===f?"django":"Gin"===f?"go-gin":"Actix"===f?"rust-actix":"Python"===g?"flask":"Go"===g?"go-http":"Rust"===g?"rust-axum":"TypeScript"===g||"JavaScript"===g?"vite-react":"static"),j="next"===i||i.startsWith("vite-"),k="static"===i,l=j?"design-source":"public",m=(0,t.hp)(a),n=!m.at,o=h.find(a=>/(^|\/)(home|index|landing)[^/]*\.html?$/i.test(a))??h[0],q=[],r=!1;if(n){for(let b of h){let c=A((0,p.sL)(a,b)??"",b,b=>(0,p.sL)(a,b)),d=b.split("/").pop()||"screen.html";b===o&&((0,p.dx)(a,`${l}/index.html`,c),q.push(`${l}/index.html`)),(b!==o||"index.html"!==d.toLowerCase())&&((0,p.dx)(a,`${l}/${d}`,c),q.push(`${l}/${d}`))}k&&((0,p.dx)(a,"server.js",O),r=!0)}else r=!!m.served;let s=n?q:m.files??[],v=["# Promoted design → project source","",`_The operator-approved design ${n?"was promoted into":"lives in"} the project's ${r?"served ":""}frontend source. This is the REAL UI — engineers EXTEND it (wire real data/backend/states on top), they do NOT rebuild or restyle it._`,"",`**Target:** \`${l}/\`${r?" (served by the dev server)":j?" (staged — needs a port into the framework)":" (needs the server wired to serve it)"}`,`**Stack starter:** ${i}`,!n?`
92
- _Re-sync: the design was updated in the Design module. Apply the visual changes to the files below WITHOUT clobbering the wired backend/data._`:"","","## Promoted files",s.map(a=>`- ${a}`).join("\n"),""].filter(Boolean).join("\n");(0,p.dx)(a,"design-mock/PROMOTED.md",v),(0,t.e1)(a,{at:Date.now(),target:m.target??l,served:r,needsPort:m.needsPort??j,files:s});try{await ac(b.id,n?"Promoted design → project source":"Design re-synced (update pending)",s)}catch{}return{ok:!0,target:m.target??l,served:r,needsPort:j,files:s,resync:!n}}async function Q(a,b,c){let d=await D(b.id);if(!d)return void await R(a,b,c);let g=(0,e.randomUUID)();await i.db.update(j.agent).set({status:"working"}).where((0,f.eq)(j.agent.id,d.id)),await (0,m.I)(b.id,{runId:g,channel:C,agentId:d.id,kind:"thinking",target:`${d.name} is writing the handoff documentation…`}),(async()=>{let h=!1;try{let c=(0,t.zw)(a,b);(0,l.Pe)(b.settings?.agents?.fileLocks??null),(0,l.Hs)(b.settings?.agents?.cmdGuard??null),(0,l.UC)(b.settings?.agents?.webResearch??null);let f=(0,l.hW)(d.adapter,d.model),k="claude"===f?d.model.includes("opus")?"opus":d.model.includes("haiku")?"haiku":"sonnet":void 0,o=(0,x.qg)("constella-design"),q=[o?(0,x.BC)(o).trim():`You are ${d.name} (@${d.handle}), the frontend designer in Constella's Design module.`,`
91
+ `;async function Q(a,b){let c,d,e,f,g,h=(0,t.zw)(a,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!h.length)return{ok:!1,target:"",served:!1,needsPort:!1,files:[],resync:!1};let i=(d=(c=(b.stack??{})||{}).meta,e=c.frontend,f=c.backend,g=c.language,"Next.js"===d?"next":"SvelteKit"===d?"vite-svelte":"Nuxt"===d?"vite-vue":"HTML/CSS"===e||"Vanilla JS"===e||"Static (no framework)"===d?"static":"Vite (SPA)"===d||e&&"None"!==e&&(!d||"None"===d||u.has(d))?"Vue"===e?"vite-vue":"Svelte"===e||"SvelteKit"===d?"vite-svelte":"vite-react":"Express"===f?"node-express":"Fastify"===f?"node-fastify":"Koa"===f?"node-koa":"Hono"===f?"node-hono":"NestJS"===f?"node-nest":"FastAPI"===f?"fastapi":"Flask"===f?"flask":"Django"===f?"django":"Gin"===f?"go-gin":"Actix"===f?"rust-actix":"Python"===g?"flask":"Go"===g?"go-http":"Rust"===g?"rust-axum":"TypeScript"===g||"JavaScript"===g?"vite-react":"static"),j="next"===i||i.startsWith("vite-"),k="static"===i,l=j?"design-source":"public",m=(0,t.hp)(a),n=!m.at,o=h.find(a=>/(^|\/)(home|index|landing)[^/]*\.html?$/i.test(a))??h[0],q=[],r=!1;if(n){for(let b of h){let c=A((0,p.sL)(a,b)??"",b,b=>(0,p.sL)(a,b)),d=b.split("/").pop()||"screen.html";b===o&&((0,p.dx)(a,`${l}/index.html`,c),q.push(`${l}/index.html`)),(b!==o||"index.html"!==d.toLowerCase())&&((0,p.dx)(a,`${l}/${d}`,c),q.push(`${l}/${d}`))}k&&((0,p.dx)(a,"server.js",P),r=!0)}else r=!!m.served;let s=n?q:m.files??[],v=["# Promoted design → project source","",`_The operator-approved design ${n?"was promoted into":"lives in"} the project's ${r?"served ":""}frontend source. This is the REAL UI — engineers EXTEND it (wire real data/backend/states on top), they do NOT rebuild or restyle it._`,"",`**Target:** \`${l}/\`${r?" (served by the dev server)":j?" (staged — needs a port into the framework)":" (needs the server wired to serve it)"}`,`**Stack starter:** ${i}`,!n?`
92
+ _Re-sync: the design was updated in the Design module. Apply the visual changes to the files below WITHOUT clobbering the wired backend/data._`:"","","## Promoted files",s.map(a=>`- ${a}`).join("\n"),""].filter(Boolean).join("\n");(0,p.dx)(a,"design-mock/PROMOTED.md",v),(0,t.e1)(a,{at:Date.now(),target:m.target??l,served:r,needsPort:m.needsPort??j,files:s});try{await ad(b.id,n?"Promoted design → project source":"Design re-synced (update pending)",s)}catch{}return{ok:!0,target:m.target??l,served:r,needsPort:j,files:s,resync:!n}}async function R(a,b,c){let d=await D(b.id);if(!d)return void await S(a,b,c);let g=(0,e.randomUUID)();await i.db.update(j.agent).set({status:"working"}).where((0,f.eq)(j.agent.id,d.id)),await (0,m.I)(b.id,{runId:g,channel:C,agentId:d.id,kind:"thinking",target:`${d.name} is writing the handoff documentation…`}),(async()=>{let h=!1;try{let c=(0,t.zw)(a,b);(0,l.Pe)(b.settings?.agents?.fileLocks??null),(0,l.Hs)(b.settings?.agents?.cmdGuard??null),(0,l.UC)(b.settings?.agents?.webResearch??null);let f=(0,l.hW)(d.adapter,d.model),k="claude"===f?d.model.includes("opus")?"opus":d.model.includes("haiku")?"haiku":"sonnet":void 0,o=(0,x.qg)("constella-design"),q=[o?(0,x.BC)(o).trim():`You are ${d.name} (@${d.handle}), the frontend designer in Constella's Design module.`,`
93
93
  (You are @${d.handle} / ${d.name} on the "design" channel. The operator just APPROVED the design and clicked "Send to execution". Mirror the operator's language in your short final reply; write all docs in English.)`,"TASK — produce the COMPLETE design HANDOFF DOCUMENTATION now, grounded in the APPROVED screens + the design tokens (and the source mock/ if present). Do NOT rebuild screens. Write/UPDATE these files under design-mock/ (create if missing):","1) design-mock/design-system.md — the full system: palette + tokens, typography scale, spacing, radius/elevation, components with their states, motion, accessibility, responsive breakpoints.","2) design-mock/components.md — each reusable component: anatomy, variants, states, usage notes.","3) design-mock/handoff.md — a screen-by-screen spec: layout, sections, data/fields, interactions & behavior, mapped to the approved screens — engineering builds EXACTLY this (zero drift).","4) design-mock/decisions.md — append the key UI/UX decisions and the rationale.","Keep everything consistent with design-mock/APPROVED.md. Build the docs incrementally (the operator watches the files appear). When done, reply in 2-3 sentences summarizing the handoff package and confirming it's ready for the CEO.",`
94
94
  PROJECT CONTEXT:
95
- ${(0,t.uy)(c)}`,(0,t.Er)(c,"design system documentation handoff components")].filter(Boolean).join("\n"),s=new Set,u=await (0,l.p1)(q,{orgId:a,binary:f,model:k,timeoutMs:6e5,agentId:d.id,agentHandle:d.handle},a=>{if("create"===a.kind||"edit"===a.kind){let b=(a.target||"").replace(/\\/g,"/"),c=b.toLowerCase().indexOf("design-mock/");c>=0&&s.add(b.slice(c))}(0,m.I)(b.id,{runId:g,channel:C,agentId:d.id,kind:a.kind,target:a.target,detail:a.detail})});(u.usd>0||u.inputTokens+u.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:b.id,agentId:d.id,channel:C,provider:u.binary,model:u.model??d.model,usd:u.usd,tokens:u.inputTokens+u.outputTokens,at:new Date});let w=u.ok?u.text?.trim()||"Handoff documentation ready — sending to the CEO.":`(couldn't finish the docs: ${(0,v.Tc)(u.error||u.text)})`;if(await i.db.insert(j.message).values({id:g,workspaceId:b.id,channel:C,fromKind:"agent",fromHandle:d.handle,text:w.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(b.id,g,C),u.ok&&s.size){try{await ac(b.id,"Design handoff documentation",[...s])}catch{}try{await (0,r.I)(b.id,{kind:"design-review",text:`Design documentation ready — ${b.name}`,detail:`${d.name} wrote the full handoff package (design system, components, screen specs, decisions). Handing off to Ada now.`,agentId:d.id,tg:!0})}catch{}}h=u.ok&&(s.size>0||!!(0,p.sL)(a,"design-mock/handoff.md"))}catch(a){console.error("[design] handoff docs run failed:",a)}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,d.id))}catch{}(0,o.r)(b.id)}if(h){try{let c=await P(a,b);c.ok&&await (0,r.I)(b.id,{kind:"design-review",text:`Design promoted to the project — ${b.name}`,detail:c.served?`The approved UI is now the real served frontend (${c.target}/). Ada will add the backend on top.`:`The approved UI was staged (${c.target}/)${c.needsPort?" — Ada will port it into the framework":""}. Ada plans from here.`,agentId:d.id,tg:!0})}catch(a){console.error("[design] promotion failed:",a)}try{await R(a,b,c),(0,t.DQ)(a)}catch(a){console.error("[design] CEO activation after handoff failed:",a)}}else try{await (0,r.I)(b.id,{kind:"design-review",text:`Design handoff didn't finish — ${b.name}`,detail:"Grace couldn't write the handoff documentation (provider limit / network). Open the Design module and tap Resume handoff to try again.",agentId:d.id,tg:!0})}catch{}})()}async function R(a,b,d){let{generatePlanFor:e,startNewWorkFor:g}=await Promise.resolve().then(c.bind(c,96930)),h=await S(a,b);try{await (0,r.I)(b.id,{kind:"design-review",text:`Ada received the design handoff — ${b.name}`,detail:"Turning the approved design + docs into Super Spec, specs, issues and tasks.",tg:!0})}catch{}if(d?.brief)return void await g(a,b,{title:d.goalTitle||"Design feature → execution",brief:`${d.brief}
95
+ ${(0,t.uy)(c)}`,(0,t.Er)(c,"design system documentation handoff components")].filter(Boolean).join("\n"),s=new Set,u=await (0,l.p1)(q,{orgId:a,binary:f,model:k,timeoutMs:6e5,agentId:d.id,agentHandle:d.handle},a=>{if("create"===a.kind||"edit"===a.kind){let b=(a.target||"").replace(/\\/g,"/"),c=b.toLowerCase().indexOf("design-mock/");c>=0&&s.add(b.slice(c))}(0,m.I)(b.id,{runId:g,channel:C,agentId:d.id,kind:a.kind,target:a.target,detail:a.detail})});(u.usd>0||u.inputTokens+u.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:b.id,agentId:d.id,channel:C,provider:u.binary,model:u.model??d.model,usd:u.usd,tokens:u.inputTokens+u.outputTokens,at:new Date});let w=u.ok?u.text?.trim()||"Handoff documentation ready — sending to the CEO.":`(couldn't finish the docs: ${(0,v.Tc)(u.error||u.text)})`;if(await i.db.insert(j.message).values({id:g,workspaceId:b.id,channel:C,fromKind:"agent",fromHandle:d.handle,text:w.slice(0,4e3),createdAt:new Date,sessionId:null}),await (0,n.f)(b.id,g,C),u.ok&&s.size){try{await ad(b.id,"Design handoff documentation",[...s])}catch{}try{await (0,r.I)(b.id,{kind:"design-review",text:`Design documentation ready — ${b.name}`,detail:`${d.name} wrote the full handoff package (design system, components, screen specs, decisions). Handing off to Ada now.`,agentId:d.id,tg:!0})}catch{}}h=u.ok&&(s.size>0||!!(0,p.sL)(a,"design-mock/handoff.md"))}catch(a){console.error("[design] handoff docs run failed:",a)}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,d.id))}catch{}(0,o.r)(b.id)}if(h){try{let c=await Q(a,b);c.ok&&await (0,r.I)(b.id,{kind:"design-review",text:`Design promoted to the project — ${b.name}`,detail:c.served?`The approved UI is now the real served frontend (${c.target}/). Ada will add the backend on top.`:`The approved UI was staged (${c.target}/)${c.needsPort?" — Ada will port it into the framework":""}. Ada plans from here.`,agentId:d.id,tg:!0})}catch(a){console.error("[design] promotion failed:",a)}try{await S(a,b,c),(0,t.DQ)(a)}catch(a){console.error("[design] CEO activation after handoff failed:",a)}}else try{await (0,r.I)(b.id,{kind:"design-review",text:`Design handoff didn't finish — ${b.name}`,detail:"Grace couldn't write the handoff documentation (provider limit / network). Open the Design module and tap Resume handoff to try again.",agentId:d.id,tg:!0})}catch{}})()}async function S(a,b,d){let{generatePlanFor:e,startNewWorkFor:g}=await Promise.resolve().then(c.bind(c,96930)),h=await T(a,b);try{await (0,r.I)(b.id,{kind:"design-review",text:`Ada received the design handoff — ${b.name}`,detail:"Turning the approved design + docs into Super Spec, specs, issues and tasks.",tg:!0})}catch{}if(d?.brief)return void await g(a,b,{title:d.goalTitle||"Design feature → execution",brief:`${d.brief}
96
96
 
97
97
  The UI for this work has been prototyped + APPROVED in the Design module (design-mock/APPROVED.md + docs) — build it EXACTLY as designed (zero drift).
98
98
 
@@ -100,8 +100,8 @@ ${h}`});if(0===(await i.db.select({id:j.spec.id}).from(j.spec).where((0,f.Uo)((0
100
100
 
101
101
  ${h}`}:{title:"Implement the approved design",brief:`Implement the operator-approved UI design (design-mock/APPROVED.md + the design-mock/ documentation) into the product — match it EXACTLY (zero drift): build the screens, components and design system as documented.
102
102
 
103
- ${h}`})}async function S(a,b){let c=(0,t.zw)(a,b),d=c.designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!d.length)return`No screens prototyped yet for ${b.name}.`;let e=[`🎨 Design — ${b.name} (${d.length} screen${d.length>1?"s":""})`];for(let b of d.slice(0,5)){let c=(0,p.sL)(a,b)??"",d=(b.split("/").pop()||b).replace(/\.html?$/i,""),f=Array.from(c.matchAll(/<h[1-3][^>]*>([\s\S]*?)<\/h[1-3]>/gi)).map(a=>a[1].replace(/<[^>]+>/g,"").trim()).filter(Boolean).slice(0,4),g=Array.from(c.matchAll(/<(?:input|select|textarea)\b[^>]*?(?:placeholder|name|aria-label)\s*=\s*["']([^"']+)["']/gi)).map(a=>a[1].trim()).filter(Boolean).slice(0,6),h=Array.from(c.matchAll(/<button\b[^>]*>([\s\S]*?)<\/button>/gi)).map(a=>a[1].replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim()).filter(Boolean).slice(0,5),i=/@media/i.test(c),j=[];f.length&&j.push(`sections: ${f.join(", ")}`),g.length&&j.push(`form fields: ${g.join(", ")}`),h.length&&j.push(`buttons: ${h.join(", ")}`),j.push(i?"responsive":"fixed layout"),e.push(`• ${d} — ${j.join("; ")}.`)}return c.approved&&e.push(`
104
- Status: APPROVED (official visual reference).`),e.join("\n").slice(0,3400)}async function T(){let{org:a}=await (0,k.nP)();return(0,t.H5)(a.id,{...(0,t.Iz)(a.id),skip:!0}),{ok:!0}}async function U(){let a,{org:b,workspace:c}=await (0,k.nP)(),d=(0,t.zw)(b.id,c),e=(0,t.Iz)(b.id);if((0,t.H5)(b.id,{...e,scaffoldedAt:Date.now()}),e.brief&&e.brief.trim())a=`This is a NEW visual unit of work to DESIGN before it's built:
103
+ ${h}`})}async function T(a,b){let c=(0,t.zw)(a,b),d=c.designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!d.length)return`No screens prototyped yet for ${b.name}.`;let e=[`🎨 Design — ${b.name} (${d.length} screen${d.length>1?"s":""})`];for(let b of d.slice(0,5)){let c=(0,p.sL)(a,b)??"",d=(b.split("/").pop()||b).replace(/\.html?$/i,""),f=Array.from(c.matchAll(/<h[1-3][^>]*>([\s\S]*?)<\/h[1-3]>/gi)).map(a=>a[1].replace(/<[^>]+>/g,"").trim()).filter(Boolean).slice(0,4),g=Array.from(c.matchAll(/<(?:input|select|textarea)\b[^>]*?(?:placeholder|name|aria-label)\s*=\s*["']([^"']+)["']/gi)).map(a=>a[1].trim()).filter(Boolean).slice(0,6),h=Array.from(c.matchAll(/<button\b[^>]*>([\s\S]*?)<\/button>/gi)).map(a=>a[1].replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim()).filter(Boolean).slice(0,5),i=/@media/i.test(c),j=[];f.length&&j.push(`sections: ${f.join(", ")}`),g.length&&j.push(`form fields: ${g.join(", ")}`),h.length&&j.push(`buttons: ${h.join(", ")}`),j.push(i?"responsive":"fixed layout"),e.push(`• ${d} — ${j.join("; ")}.`)}return c.approved&&e.push(`
104
+ Status: APPROVED (official visual reference).`),e.join("\n").slice(0,3400)}async function U(){let{org:a}=await (0,k.nP)();return(0,t.H5)(a.id,{...(0,t.Iz)(a.id),skip:!0}),{ok:!0}}async function V(){let a,{org:b,workspace:c}=await (0,k.nP)(),d=(0,t.zw)(b.id,c),e=(0,t.Iz)(b.id);if((0,t.H5)(b.id,{...e,scaffoldedAt:Date.now()}),e.brief&&e.brief.trim())a=`This is a NEW visual unit of work to DESIGN before it's built:
105
105
  "${e.brief.trim().slice(0,1200)}"
106
106
  Prototype the screen(s) for THIS feature under design-mock/screens/ (token-driven, link ../styles/global.css — create global.css if missing). Block out the real layout, sections and components for the feature, consistent with any existing design-mock screens + design-mock/APPROVED.md. Then tell me what you built and what to validate before approving.`;else if(d.mockFiles.length)a=`A MOCK / prototype is attached in mock/ (${d.mockFiles.length} file(s): ${d.mockFiles.slice(0,16).join(", ")}). The mock is the SOURCE OF TRUTH — do NOT invent a different look.
107
107
  1) READ every mock file with your file tools (images/HTML supported) — treat it as the exact visual brief.
@@ -116,7 +116,7 @@ ${c.map(a=>"- "+a).join("\n")||"(scan the project for components / screens / sty
116
116
  1) Create design-mock/styles/global.css with the design tokens (:root), reset/base and theme ([data-theme]).
117
117
  2) Scaffold a skeleton of the main screen(s) under design-mock/screens/ — valid HTML linking ../styles/global.css, with the key sections blocked out as labelled placeholders.
118
118
  3) Write design-mock/design-system.md outlining the palette, typography, spacing, core components and the screens to build.
119
- 4) Tell me what you set up and what to build/validate next before approving.`;return G(`Ada is preparing the delivery plan and needs the design prototyped + approved first (zero drift). ${a}`)}async function V(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Screen not found."}:{ok:!0,html:A(c,a,a=>(0,p.sL)(b.id,a)).slice(0,2e6)}}async function W(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,p.CS)(a.id).filter(a=>a.startsWith("design-mock/")&&/\.(md|markdown)$/i.test(a)&&!/\/README\.md$/i.test(a)).map(a=>({path:a,label:a.replace(/^design-mock\//,"")})).sort((a,b)=>X(a.path)-X(b.path)||a.label.localeCompare(b.label));return(0,t.zw)(a.id,b),{docs:c}}function X(a){return/APPROVED\.md$/i.test(a)?0:/design-system\.md$/i.test(a)?1:2}async function Y(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.(md|markdown)$/i.test(a))return{ok:!1,error:"Not a design doc."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Doc not found."}:{ok:!0,body:c.slice(0,5e5)}}let Z=".claude/design-presets.json";async function $(){let{org:a}=await (0,k.nP)(),b=(0,p.sL)(a.id,Z);if(!b)return{presets:[]};try{let a=JSON.parse(b);return{presets:Array.isArray(a)?a.slice(0,60):[]}}catch{return{presets:[]}}}async function _(a,b){let{org:c}=await (0,k.nP)(),d=(a??"").trim();if(!d||d.length>6e4)return{ok:!1,error:"Nothing to save."};let{presets:f}=await $(),g=[{id:"p"+(0,e.randomUUID)().slice(0,6),label:(b||"Preset").slice(0,40),html:d},...f].slice(0,60);return(0,p.dx)(c.id,Z,JSON.stringify(g,null,2)),{ok:!0}}async function aa(a){let{org:b}=await (0,k.nP)(),{presets:c}=await $();return(0,p.dx)(b.id,Z,JSON.stringify(c.filter(b=>b.id!==a),null,2)),{ok:!0}}async function ab(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,t.zw)(a.id,b);return{screens:c.designMockFiles.filter(a=>/\.html?$/i.test(a)),components:c.designMockFiles.filter(a=>a.startsWith("design-mock/components/"))}}async function ac(a,b,c){let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return;let h=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,d.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:d.id,label:"v"+(h.length+1),note:b.slice(0,300),patch:{files:c}})}async function ad(){let{workspace:a}=await (0,k.nP)();(0,s.I)();let[b]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);return b?{versions:(await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,b.id)).orderBy((0,g.i)(j.designVersion.createdAt))).map(a=>{let b=a.patch;return{id:a.id,label:a.label,note:a.note,files:b?.files??[],restorable:!!b?.snapshot,createdAt:a.createdAt.getTime()}})}:{versions:[]}}async function ae(a,b){return G(`Restore the prototype to ${a} — "${b}". Re-apply that state to the screens under design-mock/screens/ and tell me what changed.`)}async function af(a){let{org:b,workspace:c}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};(0,s.I)();let d=(0,p.sL)(b.id,a);if(null==d)return{ok:!1,error:"Screen not found."};let[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!l)return{ok:!1,error:"No design session."};let m="Saved v"+((await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,l.id))).length+1),n=(a.split("/").pop()||a).replace(/\.[a-z]+$/i,"");await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:l.id,label:m,note:`Checkpoint \xb7 ${n}`,patch:{files:[a],snapshot:d}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,label:m}}async function ag(a){let{org:b,workspace:c}=await (0,k.nP)();(0,s.I)();let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return{ok:!1,error:"No design session."};let[e]=await i.db.select().from(j.designVersion).where((0,f.Uo)((0,f.eq)(j.designVersion.id,a),(0,f.eq)(j.designVersion.sessionId,d.id))).limit(1);if(!e)return{ok:!1,error:"Checkpoint not found."};let l=e.patch,m=l?.files?.[0];if(!l?.snapshot||!m)return{ok:!1,error:"This version isn't a restorable checkpoint."};if(!m.startsWith("design-mock/")||m.includes(".."))return{ok:!1,error:"Bad path."};(0,p.dx)(b.id,m,l.snapshot);try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ah(a){let{workspace:b}=await (0,k.nP)();(0,s.I)();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return{comments:[]};let d=a?(0,f.Uo)((0,f.eq)(j.designComment.sessionId,c.id),(0,f.eq)(j.designComment.pageKey,a)):(0,f.eq)(j.designComment.sessionId,c.id);return{comments:(await i.db.select().from(j.designComment).where(d).orderBy(j.designComment.createdAt)).map(a=>({id:a.id,pageKey:a.pageKey,xp:a.xp,yp:a.yp,body:a.body,reply:a.reply,selection:a.selection,createdAt:a.createdAt.getTime()}))}}async function ai(a,b,c,d,f){let g=d?.trim();if(!g)return{ok:!1,error:"Empty comment."};(0,s.I)();let k=await E(),l=(0,e.randomUUID)();await i.db.insert(j.designComment).values({id:l,sessionId:k.id,pageKey:(a||"").slice(0,300),xp:b,yp:c,body:g.slice(0,2e3),reply:"",selection:f??null});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:l}}async function aj(a,b,c){(0,s.I)();let d=await E(),f=(0,e.randomUUID)(),g=(c||"").trim();await i.db.insert(j.designComment).values({id:f,sessionId:d.id,pageKey:(a||"").slice(0,300),xp:b.x,yp:b.y,body:(g||"(region marked for review)").slice(0,2e3),reply:"",selection:{kind:"markup",rect:b}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:f}}async function ak(a){let{workspace:b}=await (0,k.nP)();(0,s.I)();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);c&&await i.db.delete(j.designComment).where((0,f.Uo)((0,f.eq)(j.designComment.id,a),(0,f.eq)(j.designComment.sessionId,c.id)));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function al(a,b,c){let{org:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let e=(b??"").trim();if(!e)return{ok:!1,error:"Nothing to replace."};let f=(0,p.sL)(d.id,a);if(null==f)return{ok:!1,error:"Screen not found."};let g=f.indexOf(e);if(g<0)return{ok:!1,error:"Couldn't locate that text — ask Grace to apply it."};if(f.indexOf(e,g+1)>=0)return{ok:!1,error:"That text appears more than once — ask Grace to apply it."};(0,p.dx)(d.id,a,f.slice(0,g)+(c??"")+f.slice(g+e.length));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function am(a,b){let{org:c,workspace:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};if(null==b)return{ok:!1,error:"Nothing to commit."};if(b.length>4e6)return{ok:!1,error:"Screen too large."};let e=b,f=e.match(/<body[^>]*>([\s\S]*)<\/body>/i);f&&(e=f[1]),e=e.replace(/<!doctype[^>]*>/gi,"").replace(/<\/?(?:html|head|body)\b[^>]*>/gi,"");let g=(0,p.sL)(c.id,a);if(null==g)return{ok:!1,error:"Screen not found."};let i=g.match(/<body([^>]*)>[\s\S]*<\/body>/i),j=i&&null!=i.index?g.slice(0,i.index)+`<body${i[1]}>`+e+"</body>"+g.slice(i.index+i[0].length):`<!doctype html><html><head><meta charset="utf-8"></head><body>${e}</body></html>`;(0,p.dx)(c.id,a,j);try{await an(d.id,a)}catch{}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function an(a,b){let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return;let d="Manual canvas edit",[h]=await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id)).orderBy((0,g.i)(j.designVersion.createdAt)).limit(1);if(h&&h.note===d&&Date.now()-h.createdAt.getTime()<9e4){let a=Array.from(new Set([...h.patch?.files??[],b]));await i.db.update(j.designVersion).set({patch:{files:a},createdAt:new Date}).where((0,f.eq)(j.designVersion.id,h.id))}else{let a=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:c.id,label:"v"+(a.length+1),note:d,patch:{files:[b]}})}}async function ao(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,t.zw)(a.id,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!c.length)return{ok:!1,built:[],error:"No screens to build yet — ask Grace for a screen first."};let d=[];for(let b of c){let c=(0,p.sL)(a.id,b);if(null==c)continue;let{out:e,obfuscated:f}=function(a){let b=/<script\b/i.test(a),c=function(a){let b;return(b=[],a.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,c)=>`<style${b}>${c.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,])\s*/g,"$1").replace(/:\s+/g,":").replace(/;}/g,"}").trim()}</style>`).replace(/<(script|style)\b[\s\S]*?<\/\1>/gi,a=>(b.push(a),`\0${b.length-1}\0`)).replace(/<!--(?!\[if)[\s\S]*?-->/g,"").replace(/(\d+)/g,(a,c)=>b[Number(c)])).trim()}(a);return b||(c=function(a){if(/<script\b/i.test(a))return a;let b=new Set;for(let c of a.matchAll(/class\s*=\s*"([^"]*)"/gi))c[1].split(/\s+/).filter(Boolean).forEach(a=>b.add(a));if(!b.size)return a;let c=new Map;[...b].forEach((a,b)=>c.set(a,function(a){let b="",c=a+1;for(;c>0;)b="abcdefghijklmnopqrstuvwxyz"[--c%26]+b,c=Math.floor(c/26);return b}(b)));let d=a.replace(/class\s*=\s*"([^"]*)"/gi,(a,b)=>`class="${b.split(/\s+/).filter(Boolean).map(a=>c.get(a)??a).join(" ")}"`);return d.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,d)=>{let e=d;for(let[a,b]of c)e=e.replace(RegExp("\\."+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?![-_\\w])","g"),"."+b);return`<style${b}>${e}</style>`})}(c)),{out:c,obfuscated:!b}}(A(c,b,b=>(0,p.sL)(a.id,b))),g=`design-mock/dist/${b.split("/").pop()}`;(0,p.dx)(a.id,g,e),d.push({path:g,before:c.length,after:e.length,obfuscated:f})}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,built:d}}(0,B.D)([E,F,G,H,I,J,K,L,M,N,P,S,T,U,V,W,Y,$,_,aa,ab,ad,ae,af,ag,ah,ai,aj,ak,al,am,ao]),(0,d.A)(E,"00b0578e37d9ebe94aea8c3a34edc1eb3072857776",null),(0,d.A)(F,"4017a2e91aac0e44c71e7dc8bdc64b91c86af6966e",null),(0,d.A)(G,"702318f1552859b902907168b6bbd6d46cbb1cd8bd",null),(0,d.A)(H,"40a2ed61c41d82e88df9f715926555d4751d7925b2",null),(0,d.A)(I,"7088368271648f6247e709bf8e6336af1a18845379",null),(0,d.A)(J,"00c6849ba47e6e7fea083ff67d4e2a602a90900e03",null),(0,d.A)(K,"60643b82a325d6fdb9a22f2326122b2156783fb109",null),(0,d.A)(L,"00041d8182167f36657652fa5117a86f04ad9fdac4",null),(0,d.A)(M,"60e384f0f20aad069f13d07666957fcf7fb2f9646f",null),(0,d.A)(N,"005693f47d654854560b9d0bc386173850cbf8240e",null),(0,d.A)(P,"605cae860898064ae08c87ba7e942dd9d714085b87",null),(0,d.A)(S,"60da31e678463e5daa11931edbba1bf33db81533f2",null),(0,d.A)(T,"00194592ad47500e882eca534f2a4293d58ced6167",null),(0,d.A)(U,"009e146b7742c650ca216beeed8e617243a4a5c103",null),(0,d.A)(V,"40ef9327df3c76aeec61e899723f3a4fce0f04e0f4",null),(0,d.A)(W,"002dfc0678550fd7b554d7d8b3301ed4c835ae2a9f",null),(0,d.A)(Y,"406e30e8c1f70608478aa34a2cfc9f472c06c1ade1",null),(0,d.A)($,"00ba8cc316d3085e76aed850bf0439194afd9bdec4",null),(0,d.A)(_,"601c6bff04fd688cd4118800632f7fbc53a64ee6a5",null),(0,d.A)(aa,"409ca62ff6760c73fdd8c8c7267a97b16e88a526f7",null),(0,d.A)(ab,"0072163f36363b48de78305a257f30f3daefa28c88",null),(0,d.A)(ad,"00f53bdd7c80bb26d6c234682ff09d42c9fa8d285c",null),(0,d.A)(ae,"602c949d6b4f90259a9dd0bf28582677f4f84cdc82",null),(0,d.A)(af,"400105d268e50cf405554ad50d07b6cf74ab3dfdfb",null),(0,d.A)(ag,"4036941845402c95b0a364055242692180e15d59a1",null),(0,d.A)(ah,"4042d732975c30e998b1b417f244d02bc240771b42",null),(0,d.A)(ai,"7ca088c8458079633b65380437dffa61b3a503e9d8",null),(0,d.A)(aj,"7084c40999976496a9f63bf8a44a4c05630a91605b",null),(0,d.A)(ak,"40205db6b6772e5190d6280f495fecc4c49bb1880c",null),(0,d.A)(al,"70de449374fe32fcef6ed2f670f9dd29539a04eff1",null),(0,d.A)(am,"60dbb220db735685b4802d9264fe095d42ffd507fa",null),(0,d.A)(ao,"0053a9e20f5c5328aa2a2502d518180bfd6eed8f2f",null)},69020:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>ag,patchFetch:()=>af,routeModule:()=>ab,serverHooks:()=>ae,workAsyncStorage:()=>ac,workUnitAsyncStorage:()=>ad});var d={};c.r(d),c.d(d,{POST:()=>aa,dynamic:()=>_,runtime:()=>$});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(73024),y=c(76760),z=c(1782),A=c(7852),B=c(80280),C=c(25533),D=c(18612),E=c(16050),F=c(78874),G=c(1591),H=c(43075),I=c(55479),J=c(18661),K=c(96930),L=c(63390),M=c(12867),N=c(48938);let O="telegram",P=new Set,Q=new Set,R=new Set;async function S(){let a=await B.db.select().from(C.workspace),b=0;for(let c of a){let a=c.settings??{};if(!(0,E.Ml)(a.integrations,"telegram"))continue;let d=await (0,F._9)(c.id);if(!d)continue;R.has(d.botToken)||(R.add(d.botToken),(0,F.A3)(d.botToken).catch(()=>{}));let e=a.telegram?.offset??0,f=await (0,F.SD)(d.botToken,e),g=e;for(let a of f){g=Math.max(g,a.update_id+1);try{await T(c,d,a)}catch(a){console.error("[telegram] ingest failed:",a)}}g!==e&&await B.db.update(C.workspace).set({settings:{...a,telegram:{...a.telegram??{},offset:g}}}).where((0,z.eq)(C.workspace.id,c.id)),b+=f.length}return{updates:b}}async function T(a,b,c){if(c.callback_query)return void await Z(a,b,c.callback_query);let d=c.message;if(!d||String(d.chat.id)!==String(b.chatId)||d.from&&String(d.from.id)!==String(b.chatId))return;let e=(d.text??d.caption??"").slice(0,4e3),f=[],g=(0,D.HZ)(a.orgId),h=(0,w.randomUUID)().slice(0,8),i=async(a,c,d)=>{let e=await (0,F.G3)(b.botToken,a);if(!e)return;let i=c.replace(/[^\w.\-]+/g,"_").slice(-60)||`file.${e.ext}`,j=`uploads/tg-${h}/${i}`;try{(0,x.mkdirSync)((0,y.join)(g,`uploads/tg-${h}`),{recursive:!0}),(0,x.writeFileSync)((0,y.join)(g,j),e.buf),f.push({name:i,type:d,size:e.buf.length,path:j})}catch{}};if(d.photo?.length&&await i(d.photo[d.photo.length-1].file_id,"photo.jpg","image/jpeg"),d.document&&await i(d.document.file_id,d.document.file_name??"document",d.document.mime_type??"application/octet-stream"),e||0!==f.length){if(await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:O,fromKind:"operator",text:e||"(attachment)",attachments:f.length?f:null}),(0,H.r)(a.id),P.has(a.id)&&e&&!e.startsWith("/")){P.delete(a.id),await (0,I.TR)(a.id,e),await X(a,b,"↩️ Recorded — the CEO will revise the plan with your reason.");return}if(Q.has(a.id)&&e&&!e.startsWith("/")){Q.delete(a.id);try{await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:"design",fromKind:"operator",text:`Change request (via Telegram): ${e}`})}catch{}await X(a,b,"\uD83D\uDCDD Recorded — open the Design module and Grace will apply your changes, then Send to execution.");return}if(e.startsWith("/"))return void await Y(a,b,e);await U(a,b)}}async function U(a,b){let c=(await B.db.select().from(C.agent).where((0,z.Uo)((0,z.eq)(C.agent.workspaceId,a.id),(0,z.eq)(C.agent.handle,"ada"))))[0]??(await B.db.select().from(C.agent).where((0,z.eq)(C.agent.workspaceId,a.id)))[0];if(!c)return;await B.db.update(C.agent).set({status:"working"}).where((0,z.eq)(C.agent.id,c.id)),await (0,F.sK)(b.botToken,b.chatId,"typing");let d=setInterval(()=>{(0,F.sK)(b.botToken,b.chatId,"typing").catch(()=>{})},4e3),e="",f=!1;try{({text:e,planRequested:f}=await (0,G.PM)(a.orgId,a,O,c,"chat"))}finally{clearInterval(d)}if(await B.db.update(C.agent).set({status:"idle"}).where((0,z.eq)(C.agent.id,c.id)),e&&await (0,F.vH)(b.botToken,b.chatId,(0,N.Z)(e,[b.botToken])),f){let c=await (0,K.G)(a.orgId,a,O);await X(a,b,c.ok?"\uD83D\uDCDD Got it — drafting the plan now (specs \xb7 issues \xb7 TODOs); it'll appear in the CEO Planner for your approval, and I'll post here when it's ready.":`I couldn't start a plan from this yet${c.error?` (${c.error})`:""} — add a little more detail and I'll try again.`)}}let V=`Remote control:
119
+ 4) Tell me what you set up and what to build/validate next before approving.`;return G(`Ada is preparing the delivery plan and needs the design prototyped + approved first (zero drift). ${a}`)}async function W(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Screen not found."}:{ok:!0,html:A(c,a,a=>(0,p.sL)(b.id,a)).slice(0,2e6)}}async function X(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,p.CS)(a.id).filter(a=>a.startsWith("design-mock/")&&/\.(md|markdown)$/i.test(a)&&!/\/README\.md$/i.test(a)).map(a=>({path:a,label:a.replace(/^design-mock\//,"")})).sort((a,b)=>Y(a.path)-Y(b.path)||a.label.localeCompare(b.label));return(0,t.zw)(a.id,b),{docs:c}}function Y(a){return/APPROVED\.md$/i.test(a)?0:/design-system\.md$/i.test(a)?1:2}async function Z(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.(md|markdown)$/i.test(a))return{ok:!1,error:"Not a design doc."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Doc not found."}:{ok:!0,body:c.slice(0,5e5)}}let $=".claude/design-presets.json";async function _(){let{org:a}=await (0,k.nP)(),b=(0,p.sL)(a.id,$);if(!b)return{presets:[]};try{let a=JSON.parse(b);return{presets:Array.isArray(a)?a.slice(0,60):[]}}catch{return{presets:[]}}}async function aa(a,b){let{org:c}=await (0,k.nP)(),d=(a??"").trim();if(!d||d.length>6e4)return{ok:!1,error:"Nothing to save."};let{presets:f}=await _(),g=[{id:"p"+(0,e.randomUUID)().slice(0,6),label:(b||"Preset").slice(0,40),html:d},...f].slice(0,60);return(0,p.dx)(c.id,$,JSON.stringify(g,null,2)),{ok:!0}}async function ab(a){let{org:b}=await (0,k.nP)(),{presets:c}=await _();return(0,p.dx)(b.id,$,JSON.stringify(c.filter(b=>b.id!==a),null,2)),{ok:!0}}async function ac(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,t.zw)(a.id,b);return{screens:c.designMockFiles.filter(a=>/\.html?$/i.test(a)),components:c.designMockFiles.filter(a=>a.startsWith("design-mock/components/"))}}async function ad(a,b,c){let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return;let h=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,d.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:d.id,label:"v"+(h.length+1),note:b.slice(0,300),patch:{files:c}})}async function ae(){let{workspace:a}=await (0,k.nP)();(0,s.I)();let[b]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);return b?{versions:(await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,b.id)).orderBy((0,g.i)(j.designVersion.createdAt))).map(a=>{let b=a.patch;return{id:a.id,label:a.label,note:a.note,files:b?.files??[],restorable:!!b?.snapshot,createdAt:a.createdAt.getTime()}})}:{versions:[]}}async function af(a,b){return G(`Restore the prototype to ${a} — "${b}". Re-apply that state to the screens under design-mock/screens/ and tell me what changed.`)}async function ag(a){let{org:b,workspace:c}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};(0,s.I)();let d=(0,p.sL)(b.id,a);if(null==d)return{ok:!1,error:"Screen not found."};let[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!l)return{ok:!1,error:"No design session."};let m="Saved v"+((await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,l.id))).length+1),n=(a.split("/").pop()||a).replace(/\.[a-z]+$/i,"");await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:l.id,label:m,note:`Checkpoint \xb7 ${n}`,patch:{files:[a],snapshot:d}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,label:m}}async function ah(a){let{org:b,workspace:c}=await (0,k.nP)();(0,s.I)();let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return{ok:!1,error:"No design session."};let[e]=await i.db.select().from(j.designVersion).where((0,f.Uo)((0,f.eq)(j.designVersion.id,a),(0,f.eq)(j.designVersion.sessionId,d.id))).limit(1);if(!e)return{ok:!1,error:"Checkpoint not found."};let l=e.patch,m=l?.files?.[0];if(!l?.snapshot||!m)return{ok:!1,error:"This version isn't a restorable checkpoint."};if(!m.startsWith("design-mock/")||m.includes(".."))return{ok:!1,error:"Bad path."};(0,p.dx)(b.id,m,l.snapshot);try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ai(a){let{workspace:b}=await (0,k.nP)();(0,s.I)();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return{comments:[]};let d=a?(0,f.Uo)((0,f.eq)(j.designComment.sessionId,c.id),(0,f.eq)(j.designComment.pageKey,a)):(0,f.eq)(j.designComment.sessionId,c.id);return{comments:(await i.db.select().from(j.designComment).where(d).orderBy(j.designComment.createdAt)).map(a=>({id:a.id,pageKey:a.pageKey,xp:a.xp,yp:a.yp,body:a.body,reply:a.reply,selection:a.selection,createdAt:a.createdAt.getTime()}))}}async function aj(a,b,c,d,f){let g=d?.trim();if(!g)return{ok:!1,error:"Empty comment."};(0,s.I)();let k=await E(),l=(0,e.randomUUID)();await i.db.insert(j.designComment).values({id:l,sessionId:k.id,pageKey:(a||"").slice(0,300),xp:b,yp:c,body:g.slice(0,2e3),reply:"",selection:f??null});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:l}}async function ak(a,b,c){(0,s.I)();let d=await E(),f=(0,e.randomUUID)(),g=(c||"").trim();await i.db.insert(j.designComment).values({id:f,sessionId:d.id,pageKey:(a||"").slice(0,300),xp:b.x,yp:b.y,body:(g||"(region marked for review)").slice(0,2e3),reply:"",selection:{kind:"markup",rect:b}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:f}}async function al(a){let{workspace:b}=await (0,k.nP)();(0,s.I)();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);c&&await i.db.delete(j.designComment).where((0,f.Uo)((0,f.eq)(j.designComment.id,a),(0,f.eq)(j.designComment.sessionId,c.id)));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function am(a,b,c){let{org:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let e=(b??"").trim();if(!e)return{ok:!1,error:"Nothing to replace."};let f=(0,p.sL)(d.id,a);if(null==f)return{ok:!1,error:"Screen not found."};let g=f.indexOf(e);if(g<0)return{ok:!1,error:"Couldn't locate that text — ask Grace to apply it."};if(f.indexOf(e,g+1)>=0)return{ok:!1,error:"That text appears more than once — ask Grace to apply it."};(0,p.dx)(d.id,a,f.slice(0,g)+(c??"")+f.slice(g+e.length));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function an(a,b){let{org:c,workspace:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};if(null==b)return{ok:!1,error:"Nothing to commit."};if(b.length>4e6)return{ok:!1,error:"Screen too large."};let e=b,f=e.match(/<body[^>]*>([\s\S]*)<\/body>/i);f&&(e=f[1]),e=e.replace(/<!doctype[^>]*>/gi,"").replace(/<\/?(?:html|head|body)\b[^>]*>/gi,"");let g=(0,p.sL)(c.id,a);if(null==g)return{ok:!1,error:"Screen not found."};let i=g.match(/<body([^>]*)>[\s\S]*<\/body>/i),j=i&&null!=i.index?g.slice(0,i.index)+`<body${i[1]}>`+e+"</body>"+g.slice(i.index+i[0].length):`<!doctype html><html><head><meta charset="utf-8"></head><body>${e}</body></html>`;(0,p.dx)(c.id,a,j);try{await ao(d.id,a)}catch{}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ao(a,b){let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return;let d="Manual canvas edit",[h]=await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id)).orderBy((0,g.i)(j.designVersion.createdAt)).limit(1);if(h&&h.note===d&&Date.now()-h.createdAt.getTime()<9e4){let a=Array.from(new Set([...h.patch?.files??[],b]));await i.db.update(j.designVersion).set({patch:{files:a},createdAt:new Date}).where((0,f.eq)(j.designVersion.id,h.id))}else{let a=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:c.id,label:"v"+(a.length+1),note:d,patch:{files:[b]}})}}async function ap(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,t.zw)(a.id,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!c.length)return{ok:!1,built:[],error:"No screens to build yet — ask Grace for a screen first."};let d=[];for(let b of c){let c=(0,p.sL)(a.id,b);if(null==c)continue;let{out:e,obfuscated:f}=function(a){let b=/<script\b/i.test(a),c=function(a){let b;return(b=[],a.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,c)=>`<style${b}>${c.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,])\s*/g,"$1").replace(/:\s+/g,":").replace(/;}/g,"}").trim()}</style>`).replace(/<(script|style)\b[\s\S]*?<\/\1>/gi,a=>(b.push(a),`\0${b.length-1}\0`)).replace(/<!--(?!\[if)[\s\S]*?-->/g,"").replace(/(\d+)/g,(a,c)=>b[Number(c)])).trim()}(a);return b||(c=function(a){if(/<script\b/i.test(a))return a;let b=new Set;for(let c of a.matchAll(/class\s*=\s*"([^"]*)"/gi))c[1].split(/\s+/).filter(Boolean).forEach(a=>b.add(a));if(!b.size)return a;let c=new Map;[...b].forEach((a,b)=>c.set(a,function(a){let b="",c=a+1;for(;c>0;)b="abcdefghijklmnopqrstuvwxyz"[--c%26]+b,c=Math.floor(c/26);return b}(b)));let d=a.replace(/class\s*=\s*"([^"]*)"/gi,(a,b)=>`class="${b.split(/\s+/).filter(Boolean).map(a=>c.get(a)??a).join(" ")}"`);return d.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,d)=>{let e=d;for(let[a,b]of c)e=e.replace(RegExp("\\."+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?![-_\\w])","g"),"."+b);return`<style${b}>${e}</style>`})}(c)),{out:c,obfuscated:!b}}(A(c,b,b=>(0,p.sL)(a.id,b))),g=`design-mock/dist/${b.split("/").pop()}`;(0,p.dx)(a.id,g,e),d.push({path:g,before:c.length,after:e.length,obfuscated:f})}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,built:d}}(0,B.D)([E,F,G,H,I,J,K,L,N,O,Q,T,U,V,W,X,Z,_,aa,ab,ac,ae,af,ag,ah,ai,aj,ak,al,am,an,ap]),(0,d.A)(E,"009f63092f0ec7ab04ba59b6200071d083227c97fc",null),(0,d.A)(F,"402521df2cdcdf994cd2264cd2ae8e32cce160764d",null),(0,d.A)(G,"70c5b800592f8c728e28096ea00b5991d917d5b166",null),(0,d.A)(H,"4017364bc3b6d6fa14061cfac839d1a8827d6c73b5",null),(0,d.A)(I,"704389bc75f649527643be72d97dea040cc68a8541",null),(0,d.A)(J,"005654d5bee41f688facd5214d39464c0a5154a96d",null),(0,d.A)(K,"60f3c0ba58cabeb1d8596a8198d8005537906a87e7",null),(0,d.A)(L,"00c7d21ee3adeb722cfce33e92f77f27aa0c649888",null),(0,d.A)(N,"60e4ac6bf305417265debb1d7d6d5b994d57b22161",null),(0,d.A)(O,"005c24c0f0211e033cb8e6bc08690f6247978646f6",null),(0,d.A)(Q,"601bdeb977fbc2e3944a52d0c6037b3d61a305a56a",null),(0,d.A)(T,"60b9de834db4c321afc7fb79b8c65f5d9dfe457ab8",null),(0,d.A)(U,"000d2475a828032e63b1cbb99501b270d46c86c4d9",null),(0,d.A)(V,"00a74d208fffff8f43745ea86e004ff1eb0ffe2ced",null),(0,d.A)(W,"4022f1066dfef34fbb82f5d949e1af2381f0b41e1b",null),(0,d.A)(X,"0015ace5d40c40b2308d1146611332c7f09101db2b",null),(0,d.A)(Z,"40f19d59c8b81b0b668840478ff1dc221845092d69",null),(0,d.A)(_,"00275a0096349c5159f727630056869831c6052a90",null),(0,d.A)(aa,"600d8ef59ec617bc23f97c4b95c39ecebfe50f11a8",null),(0,d.A)(ab,"40ade191d12ca903e1806ca591518197b710007f5f",null),(0,d.A)(ac,"00acc474f484ce96a824b2454a098e8dc71914bf5e",null),(0,d.A)(ae,"0067a5ef8d17ec38729f7ccb6c66334a5ba3c50745",null),(0,d.A)(af,"60f05b118f57621541ffc2d84808a79b8bff859f81",null),(0,d.A)(ag,"40155f88f1c1dd62e916c89f5051e44f6b700413b4",null),(0,d.A)(ah,"40004ed28e4ffbcfb3eb0c22b185c89201e671971f",null),(0,d.A)(ai,"40f1fa3f447273f78f9a0ffce89894790292bb4b08",null),(0,d.A)(aj,"7cfdd007ba47d4feb198cc6937c6b450d454266e8c",null),(0,d.A)(ak,"7025b1705b7eb7a915125df238da780672906b31a7",null),(0,d.A)(al,"40c24d2c549cf74080f8dcff3c2dbb2ce82e7fae5a",null),(0,d.A)(am,"7044adad76d6dbcd2ebf27ca1fb5911ec02093ba89",null),(0,d.A)(an,"60174a505ab0000e6ba58f8350a98c8bfd8f08f9cd",null),(0,d.A)(ap,"00362877be6a6f7da575700ffbf6d3b713016928b6",null)},69020:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>ag,patchFetch:()=>af,routeModule:()=>ab,serverHooks:()=>ae,workAsyncStorage:()=>ac,workUnitAsyncStorage:()=>ad});var d={};c.r(d),c.d(d,{POST:()=>aa,dynamic:()=>_,runtime:()=>$});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(73024),y=c(76760),z=c(1782),A=c(7852),B=c(80280),C=c(25533),D=c(18612),E=c(16050),F=c(78874),G=c(1591),H=c(43075),I=c(55479),J=c(18661),K=c(96930),L=c(63390),M=c(12867),N=c(48938);let O="telegram",P=new Set,Q=new Set,R=new Set;async function S(){let a=await B.db.select().from(C.workspace),b=0;for(let c of a){let a=c.settings??{};if(!(0,E.Ml)(a.integrations,"telegram"))continue;let d=await (0,F._9)(c.id);if(!d)continue;R.has(d.botToken)||(0,F.A3)(d.botToken).then(()=>R.add(d.botToken)).catch(()=>{});let e=a.telegram?.offset??0,f=await (0,F.SD)(d.botToken,e),g=e;for(let a of f)try{await T(c,d,a),g=Math.max(g,a.update_id+1)}catch(a){console.error("[telegram] ingest failed:",a);break}g!==e&&await B.db.update(C.workspace).set({settings:{...a,telegram:{...a.telegram??{},offset:g}}}).where((0,z.eq)(C.workspace.id,c.id)),b+=f.length}return{updates:b}}async function T(a,b,c){if(c.callback_query)return void await Z(a,b,c.callback_query);let d=c.message;if(!d||String(d.chat.id)!==String(b.chatId)||d.from&&String(d.from.id)!==String(b.chatId))return;let e=(d.text??d.caption??"").slice(0,4e3),f=[],g=(0,D.HZ)(a.orgId),h=(0,w.randomUUID)().slice(0,8),i=async(a,c,d)=>{let e=await (0,F.G3)(b.botToken,a);if(!e)return;let i=c.replace(/[^\w.\-]+/g,"_").slice(-60)||`file.${e.ext}`,j=`uploads/tg-${h}/${i}`;try{(0,x.mkdirSync)((0,y.join)(g,`uploads/tg-${h}`),{recursive:!0}),(0,x.writeFileSync)((0,y.join)(g,j),e.buf),f.push({name:i,type:d,size:e.buf.length,path:j})}catch{}};if(d.photo?.length&&await i(d.photo[d.photo.length-1].file_id,"photo.jpg","image/jpeg"),d.document&&await i(d.document.file_id,d.document.file_name??"document",d.document.mime_type??"application/octet-stream"),e||0!==f.length){if(await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:O,fromKind:"operator",text:e||"(attachment)",attachments:f.length?f:null}),(0,H.r)(a.id),P.has(a.id)&&e&&!e.startsWith("/")){P.delete(a.id),await (0,I.TR)(a.id,e),await X(a,b,"↩️ Recorded — the CEO will revise the plan with your reason.");return}if(Q.has(a.id)&&e&&!e.startsWith("/")){Q.delete(a.id);try{await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:"design",fromKind:"operator",text:`Change request (via Telegram): ${e}`})}catch{}await X(a,b,"\uD83D\uDCDD Recorded — open the Design module and Grace will apply your changes, then Send to execution.");return}if(e.startsWith("/"))return void await Y(a,b,e);await U(a,b)}}async function U(a,b){let c=(await B.db.select().from(C.agent).where((0,z.Uo)((0,z.eq)(C.agent.workspaceId,a.id),(0,z.eq)(C.agent.handle,"ada"))))[0]??(await B.db.select().from(C.agent).where((0,z.eq)(C.agent.workspaceId,a.id)))[0];if(!c)return;await B.db.update(C.agent).set({status:"working"}).where((0,z.eq)(C.agent.id,c.id)),await (0,F.sK)(b.botToken,b.chatId,"typing");let d=setInterval(()=>{(0,F.sK)(b.botToken,b.chatId,"typing").catch(()=>{})},4e3),e="",f=!1;try{({text:e,planRequested:f}=await (0,G.PM)(a.orgId,a,O,c,"chat"))}finally{clearInterval(d)}if(await B.db.update(C.agent).set({status:"idle"}).where((0,z.eq)(C.agent.id,c.id)),e&&await (0,F.vH)(b.botToken,b.chatId,(0,N.Z)(e,[b.botToken])),f){let c=await (0,K.G)(a.orgId,a,O);await X(a,b,c.ok?"\uD83D\uDCDD Got it — drafting the plan now (specs \xb7 issues \xb7 TODOs); it'll appear in the CEO Planner for your approval, and I'll post here when it's ready.":`I couldn't start a plan from this yet${c.error?` (${c.error})`:""} — add a little more detail and I'll try again.`)}}let V=`Remote control:
120
120
  /status — quick status
121
121
  /review — full plan / issues / tasks summary
122
122
  /tasks — what's in flight right now
@@ -130,4 +130,4 @@ ${c.map(a=>"- "+a).join("\n")||"(scan the project for components / screens / sty
130
130
  /kb <question> — ask the Knowledge Base
131
131
  Or just message me to talk to the CEO.`;async function W(a){let[b]=await B.db.select({id:C.goal.id,title:C.goal.title}).from(C.goal).where((0,z.Uo)((0,z.eq)(C.goal.workspaceId,a),(0,z.eq)(C.goal.status,"active"))).orderBy((0,A.i)(C.goal.createdAt)).limit(1);return b??null}async function X(a,b,c){let d=(0,N.Z)(c,[b.botToken]);await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:O,fromKind:"agent",fromHandle:"system",text:d.slice(0,4e3)}),await (0,F.vH)(b.botToken,b.chatId,d),(0,H.r)(a.id)}async function Y(a,b,c){P.delete(a.id);let d=c.indexOf(" "),e=(-1===d?c:c.slice(0,d)).toLowerCase(),f=(-1===d?"":c.slice(d+1)).trim(),g="";try{switch(e){case"/help":g=V;break;case"/status":g=await (0,I.PO)(a);break;case"/review":g=await (0,I.mt)(a);break;case"/tasks":g=await (0,I.yk)(a);break;case"/approve":{let b=await (0,I.wz)(a.orgId,a);g=`✅ Plan approved — ${b.made} task(s) queued. Send /start_execution to run 24/7.`;break}case"/start_execution":case"/start":case"/run":{let b=await (0,I.wz)(a.orgId,a);await (0,I.mL)(a.id,!0),g=`▶️ Execution started — ${b.made} task(s) queued, 24/7 ON.`;break}case"/pause":case"/stop":await (0,I.mL)(a.id,!1),g="⏸ 24/7 execution paused.";break;case"/resume":await (0,I.mL)(a.id,!0),g="▶️ 24/7 execution resumed.";break;case"/reject":await (0,I.TR)(a.id,f),g=f?"↩️ Plan sent back to the CEO — reason recorded.":"↩️ Plan sent back to the CEO for revision.";break;case"/new":case"/new-work":case"/new-goal":if(!f){g="Describe the work, e.g. `/new a billing page with checkout`.";break}await B.db.insert(C.message).values({id:(0,w.randomUUID)(),workspaceId:a.id,channel:O,fromKind:"operator",text:f.slice(0,4e3)}),(0,H.r)(a.id),await U(a,b);return;case"/cancel":{let b=await W(a.id);if(!b){g="No active goal to cancel.";break}let c=await (0,J.NF)(a.id,b.id);g=c.ok?`🛑 Cancelled — ${c.title}. Execution stopped; reopen in-app to resume.`:"Couldn't cancel the goal.";break}case"/archive":{let b=await W(a.id);if(!b){g="No active goal to archive.";break}let c=await (0,J.PT)(a.orgId,a.id,b.id);g=c.ok?`📦 Archived — ${c.title}. Zipped to ${c.path}.`:"Couldn't archive the goal.";break}case"/kb":case"/ask-kb":if(!f){g="Ask a question, e.g. `/kb how does auth work?`";break}g=(await (0,M.ed)(a.orgId,f)).text;break;default:g=`Unknown command ${e}.
132
132
 
133
- ${V}`}}catch(a){console.error("[telegram] command failed:",a),g="⚠️ Command failed — try again."}g&&await X(a,b,g)}async function Z(a,b,c){if(c.from&&String(c.from.id)!==String(b.chatId)||c.message&&String(c.message.chat.id)!==String(b.chatId))return void await (0,F.J4)(b.botToken,c.id);let d=(c.data??"").trim(),e="",f="";try{switch(d){case"approve_plan":{let b=await (0,I.wz)(a.orgId,a);e="✅ Approved",f=`✅ Plan approved — ${b.made} task(s) queued. Send /start_execution to run 24/7.`;break}case"start_exec":{let b=await (0,I.wz)(a.orgId,a);await (0,I.mL)(a.id,!0),e="▶️ Executing",f=`▶️ Execution started — ${b.made} task(s) queued, 24/7 ON.`;break}case"reject_plan":await (0,I.TR)(a.id),P.add(a.id),e="↩️ Sent back",f="↩️ Plan sent back to the CEO. Reply with what to change and I'll record it as the reason.";break;case"approve_design":{let b=await (0,L.RS)(a.orgId,a);e=b.ok?"✅ Approved":"⚠️ Failed",f=b.ok?"✅ Design approved & sent to execution — Grace is writing the full documentation, then Ada turns it into specs, issues & tasks automatically.":`⚠️ ${b.error||"Could not send to execution."}`;break}case"review_design":e="\uD83D\uDCDD Review",f=await (0,L.qw)(a.orgId,a);break;case"reject_design":Q.add(a.id),e="↩️ Changes",f="\uD83D\uDCDD What should change? Reply and I'll send it to Grace in the Design module.";break;case"review":e="\uD83D\uDCDD Review",f=await (0,I.mt)(a);break;case"status":e="\uD83D\uDCCA Status",f=await (0,I.PO)(a);break;case"pause":await (0,I.mL)(a.id,!1),e="⏸ Paused",f="⏸ 24/7 execution paused.";break;case"resume":await (0,I.mL)(a.id,!0),e="▶️ Resumed",f="▶️ 24/7 execution resumed.";break;default:e="Unknown action"}}catch(a){console.error("[telegram] callback failed:",a),f="⚠️ Action failed — try again from the app."}await (0,F.J4)(b.botToken,c.id,e||void 0),c.message&&("approve_plan"===d||"start_exec"===d||"reject_plan"===d||"approve_design"===d)&&await (0,F.S3)(b.botToken,b.chatId,c.message.message_id),f&&await X(a,b,f)}let $="nodejs",_="force-dynamic";async function aa(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({ok:!1,error:"unauthorized"},{status:401});try{let a=await S();return v.NextResponse.json({ok:!0,...a})}catch(a){return v.NextResponse.json({ok:!1,error:String(a instanceof Error?a.message:a)},{status:500})}}let ab=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/telegram/poll/route",pathname:"/api/telegram/poll",filename:"route",bundlePath:"app/api/telegram/poll/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\telegram\\poll\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:ac,workUnitAsyncStorage:ad,serverHooks:ae}=ab;function af(){return(0,g.patchFetch)({workAsyncStorage:ac,workUnitAsyncStorage:ad})}async function ag(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),ab.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/telegram/poll/route";"/index"===d&&(d="/");let e=await ab.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||ab.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===ab.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await ab.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>ab.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>ab.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!I)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await ab.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await ab.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await ab.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,4679,1572,4619,9969,7989,2867,6873,850,5614,2960,4302,8823,1591],()=>b(b.s=69020));module.exports=c})();
133
+ ${V}`}}catch(a){console.error("[telegram] command failed:",a),g="⚠️ Command failed — try again."}g&&await X(a,b,g)}async function Z(a,b,c){if(!c.from||String(c.from.id)!==String(b.chatId)||c.message&&String(c.message.chat.id)!==String(b.chatId))return void await (0,F.J4)(b.botToken,c.id);let d=(c.data??"").trim(),e="",f="";try{switch(d){case"approve_plan":{let b=await (0,I.wz)(a.orgId,a);e="✅ Approved",f=`✅ Plan approved — ${b.made} task(s) queued. Send /start_execution to run 24/7.`;break}case"start_exec":{let b=await (0,I.wz)(a.orgId,a);await (0,I.mL)(a.id,!0),e="▶️ Executing",f=`▶️ Execution started — ${b.made} task(s) queued, 24/7 ON.`;break}case"reject_plan":await (0,I.TR)(a.id),P.add(a.id),e="↩️ Sent back",f="↩️ Plan sent back to the CEO. Reply with what to change and I'll record it as the reason.";break;case"approve_design":{let b=await (0,L.RS)(a.orgId,a);e=b.ok?"✅ Approved":"⚠️ Failed",f=b.ok?"✅ Design approved & sent to execution — Grace is writing the full documentation, then Ada turns it into specs, issues & tasks automatically.":`⚠️ ${b.error||"Could not send to execution."}`;break}case"review_design":e="\uD83D\uDCDD Review",f=await (0,L.qw)(a.orgId,a);break;case"reject_design":Q.add(a.id),e="↩️ Changes",f="\uD83D\uDCDD What should change? Reply and I'll send it to Grace in the Design module.";break;case"review":e="\uD83D\uDCDD Review",f=await (0,I.mt)(a);break;case"status":e="\uD83D\uDCCA Status",f=await (0,I.PO)(a);break;case"pause":await (0,I.mL)(a.id,!1),e="⏸ Paused",f="⏸ 24/7 execution paused.";break;case"resume":await (0,I.mL)(a.id,!0),e="▶️ Resumed",f="▶️ 24/7 execution resumed.";break;default:e="Unknown action"}}catch(a){console.error("[telegram] callback failed:",a),f="⚠️ Action failed — try again from the app."}await (0,F.J4)(b.botToken,c.id,e||void 0),c.message&&("approve_plan"===d||"start_exec"===d||"reject_plan"===d||"approve_design"===d)&&await (0,F.S3)(b.botToken,b.chatId,c.message.message_id),f&&await X(a,b,f)}let $="nodejs",_="force-dynamic";async function aa(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({ok:!1,error:"unauthorized"},{status:401});try{let a=await S();return v.NextResponse.json({ok:!0,...a})}catch(a){return v.NextResponse.json({ok:!1,error:String(a instanceof Error?a.message:a)},{status:500})}}let ab=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/telegram/poll/route",pathname:"/api/telegram/poll",filename:"route",bundlePath:"app/api/telegram/poll/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\telegram\\poll\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:ac,workUnitAsyncStorage:ad,serverHooks:ae}=ab;function af(){return(0,g.patchFetch)({workAsyncStorage:ac,workUnitAsyncStorage:ad})}async function ag(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),ab.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/telegram/poll/route";"/index"===d&&(d="/");let e=await ab.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||ab.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===ab.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await ab.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let T={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>ab.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},U=new l.NodeNextRequest(a),V=new l.NodeNextResponse(b),W=m.NextRequestAdapter.fromNodeNextRequest(U,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>ab.handle(W,T).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=T.renderOpts.fetchMetrics;let h=T.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=T.renderOpts.collectedTags;if(!I)return await (0,p.I)(U,V,d,T.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==T.renderOpts.collectedRevalidate&&!(T.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&T.renderOpts.collectedRevalidate,e=void 0===T.renderOpts.collectedExpire||T.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:T.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await ab.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await ab.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(U,V,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await ab.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(U,V,new Response(null,{status:500})),null}}},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,4679,1572,4619,9969,7989,2867,6873,850,5614,2960,4302,8823,1591],()=>b(b.s=69020));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=5413,a.ids=[5413],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},18612:(a,b,c)=>{c.d(b,{r$:()=>h,EX:()=>p,CS:()=>function a(b,c=""){let d=[];for(let e of l(b,c))if(e.isDir){if(m.has(e.name))continue;d.push(...a(b,e.path))}else d.push(e.path);return d},HZ:()=>j,Ci:()=>l,sL:()=>n,dx:()=>o});var d=c(73024),e=c(76760),f=c(48161),g=c(28430);function h(){return process.env.CONSTELLA_HOME?(0,g.Y)(process.env.CONSTELLA_HOME):(0,e.join)((0,f.homedir)(),".constella")}let i=new Set;function j(a){if(!/^[A-Za-z0-9_-]{6,64}$/.test(a))throw Error("Invalid orgId");let b=(0,e.join)(h(),"organizations",a,"workspace");if(!i.has(a)){i.add(a);try{let c=(0,e.join)(h(),"organizations",a,"constella"),f=!(0,d.existsSync)(b)||0===(0,d.readdirSync)(b).length;if((0,d.existsSync)(c)&&f)try{(0,d.renameSync)(c,b)}catch{(0,d.mkdirSync)(b,{recursive:!0}),0===(0,d.readdirSync)(b).length&&(0,d.cpSync)(c,b,{recursive:!0})}}catch{}}return b}function k(a,b){let c=(0,e.normalize)((0,e.join)(a,b));if(c!==a&&!c.startsWith(a+e.sep))throw Error("Path escapes workspace: "+b);if((0,d.existsSync)(a)){let f;try{f=d.realpathSync.native(a)}catch{f=a}let g=function(a){let b=a;for(;;){if((0,d.existsSync)(b))try{return d.realpathSync.native(b)}catch{return b}let a=(0,e.dirname)(b);if(a===b)return b;b=a}}(c);if(g!==f&&!g.startsWith(f+e.sep))throw Error("Path escapes workspace (symlink): "+b)}return c}function l(a,b=""){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readdirSync)(c).map(a=>{let f=(0,e.join)(c,a),g=(b?b+"/":"")+a;return{name:a,path:g,isDir:(0,d.statSync)(f).isDirectory()}}).sort((a,b)=>a.isDir===b.isDir?a.name.localeCompare(b.name):a.isDir?-1:1):[]}let m=new Set(["node_modules",".git",".next",".turbo","dist","build","out","coverage",".cache","archives",".testdev",".pnpm-store",".vercel","vendor"]);function n(a,b){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readFileSync)(c,"utf8"):null}function o(a,b,c){let f=k(j(a),b);(0,d.mkdirSync)((0,e.dirname)(f),{recursive:!0}),(0,d.writeFileSync)(f,c,"utf8")}function p(a,b){let c=k(j(a),b);(0,d.existsSync)(c)&&(0,d.rmSync)(c,{recursive:!0,force:!0})}},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},27578:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>M,patchFetch:()=>L,routeModule:()=>H,serverHooks:()=>K,workAsyncStorage:()=>I,workUnitAsyncStorage:()=>J});var d={};c.r(d),c.d(d,{GET:()=>G,POST:()=>F,dynamic:()=>C,runtime:()=>B});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(73024),y=c(76760),z=c(95896),A=c(18612);let B="nodejs",C="force-dynamic",D=/\.(png|jpe?g|gif|webp|bmp|pdf|txt|md|markdown|csv|json|log|zip|docx?|xlsx?|pptx?)$/i,E={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".pdf":"application/pdf"};async function F(a){let{org:b}=await (0,z.nP)(),c=(0,A.HZ)(b.id),d=Number(a.headers.get("content-length")??0);if(d&&d>0x5000000)return v.NextResponse.json({ok:!1,error:"request too large"},{status:413});let e=(await a.formData()).getAll("files").filter(a=>a instanceof File).slice(0,10);if(!e.length)return v.NextResponse.json({ok:!1,error:"no files"},{status:400});let f=(0,w.randomUUID)().slice(0,8),g=(0,y.join)(c,"uploads",f);(0,x.mkdirSync)(g,{recursive:!0});let h=[],i=0;for(let a of e){if(a.size>0xf00000)return v.NextResponse.json({ok:!1,error:`${a.name} exceeds 15 MB`},{status:400});if((i+=a.size)>0x5000000)return v.NextResponse.json({ok:!1,error:"request too large"},{status:413});let b=(0,y.basename)(a.name).replace(/[^\w.\-]+/g,"_").slice(-80)||"file";if(!D.test(b))return v.NextResponse.json({ok:!1,error:`${a.name}: file type not allowed`},{status:400});let d=`uploads/${f}/${b}`;try{(0,x.writeFileSync)((0,y.join)(c,d),Buffer.from(await a.arrayBuffer()))}catch{return v.NextResponse.json({ok:!1,error:`couldn't save ${a.name}`},{status:500})}h.push({name:a.name.slice(0,120),type:a.type||"application/octet-stream",size:a.size,path:d})}return v.NextResponse.json({ok:!0,attachments:h})}async function G(a){let{org:b}=await (0,z.nP)(),c=function(a,b){if(!b.startsWith("uploads/")||b.includes("..")||b.includes("\0"))return null;let c=(0,y.normalize)((0,y.join)(a,b));return c.startsWith(a+y.sep)?c:null}((0,A.HZ)(b.id),a.nextUrl.searchParams.get("path")??"");if(!c||!(0,x.existsSync)(c))return new v.NextResponse("not found",{status:404});let d=E[(0,y.extname)(c).toLowerCase()],e=(0,x.readFileSync)(c);return new v.NextResponse(new Uint8Array(e),{headers:{"content-type":d??"application/octet-stream","x-content-type-options":"nosniff","content-disposition":`${d?"inline":"attachment"}; filename="${(0,y.basename)(c).replace(/[^\w.\-]+/g,"_")}"`,"content-security-policy":"default-src 'none'; sandbox","cache-control":"private, max-age=3600"}})}let H=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/upload/route",pathname:"/api/upload",filename:"route",bundlePath:"app/api/upload/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\upload\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:I,workUnitAsyncStorage:J,serverHooks:K}=H;function L(){return(0,g.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:J})}async function M(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),H.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/upload/route";"/index"===d&&(d="/");let e=await H.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,I=(0,k.normalizeAppPath)(d),J=!!(A.dynamicRoutes[I]||A.routes[E]),K=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(J&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||H.isDev||z||(L="/index"===(L=E)?"/":L);let M=!0===H.isDev||!J,N=J&&!M;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let O=a.method||"GET",P=(0,i.getTracer)(),Q=P.getActiveScopeSpan(),R=!!(null==B?void 0:B.isWrappedByNextServer),S=!!(0,h.getRequestMeta)(a,"minimalMode"),T=(0,h.getRequestMeta)(a,"incrementalCache")||await H.getIncrementalCache(a,x,A,S);null==T||T.resetRequestCache(),globalThis.__incrementalCache=T;let U={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:M,incrementalCache:T,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>H.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},V=new l.NodeNextRequest(a),W=new l.NodeNextResponse(b),X=m.NextRequestAdapter.fromNodeNextRequest(V,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>H.handle(X,U).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=P.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${O} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${O} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!S&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=U.renderOpts.fetchMetrics;let h=U.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=U.renderOpts.collectedTags;if(!J)return await (0,p.I)(V,W,d,U.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,e=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await H.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),b}},k=await H.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:S});if(!J)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});S||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return S&&J||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(V,W,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};R&&Q?await h(Q):(e=P.getActiveScopeSpan(),await P.withPropagatedContext(a.headers,()=>P.trace(n.BaseServerSpan.handleRequest,{spanName:`${O} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":O,"http.target":a.url}},h),void 0,!R))}catch(b){if(b instanceof t.NoFallbackError||await H.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},48161:a=>{a.exports=require("node:os")},51063:(a,b,c)=>{c.d(b,{dp:()=>o,j2:()=>p});var d=c(18706),e=c(21594),f=c(79743),g=c(80280),h=c(25533);let i=process.env.BETTER_AUTH_URL??"http://localhost:3000";function j(a){return a?.split(",")[0]?.trim()||null}function k(a){if(!a)return null;try{return new URL(a).origin}catch{return null}}function l(a,b){let c=k(b?.trim());c&&a.add(c)}let m=(()=>{let a=new Set;for(let b of[i,process.env.BETTER_AUTH_URL,process.env.NEXT_PUBLIC_BETTER_AUTH_URL,...(process.env.CONSTELLA_TRUSTED_ORIGINS??"").split(",")])l(a,b);return[...a]})();process.env.BETTER_AUTH_SECRET||console.error("[auth] FATAL: BETTER_AUTH_SECRET is required (sessions would be forgeable). Set it in your environment.");let n={};process.env.GITHUB_CLIENT_ID&&process.env.GITHUB_CLIENT_SECRET&&(n.github={clientId:process.env.GITHUB_CLIENT_ID,clientSecret:process.env.GITHUB_CLIENT_SECRET,scope:["repo","read:user"]}),process.env.GOOGLE_CLIENT_ID&&process.env.GOOGLE_CLIENT_SECRET&&(n.google={clientId:process.env.GOOGLE_CLIENT_ID,clientSecret:process.env.GOOGLE_CLIENT_SECRET});let o=Object.keys(n),p=(0,d.l)({baseURL:i,trustedOrigins:function(a){let b=new Set(m);l(b,a?.url);let c=function(a){let b=a?.headers,c=j(b?.get("x-forwarded-host"))??j(b?.get("host"));if(!c)return null;let d=(j(b?.get("x-forwarded-proto"))??(i.startsWith("https://")?"https":"http")).replace(/:$/,"");return/^[a-z][a-z0-9+.-]*$/i.test(d)?k(`${d}://${c}`):null}(a);return c&&b.add(c),[...b]},secret:process.env.BETTER_AUTH_SECRET,database:(0,e.y)(g.db,{provider:"sqlite",schema:{user:h.user,session:h.session,account:h.account,verification:h.verification,twoFactor:h.twoFactor}}),emailAndPassword:{enabled:!0,autoSignIn:!0,requireEmailVerification:!1},socialProviders:n,account:{accountLinking:{enabled:!0,trustedProviders:["github","google"]}},session:{expiresIn:2592e3,additionalFields:{activeOrgId:{type:"string",required:!1}}},plugins:[(0,f.d)()],advanced:{useSecureCookies:i.startsWith("https://")}})},51455:a=>{a.exports=require("node:fs/promises")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},95896:(a,b,c)=>{c.d(b,{$x:()=>k,Ht:()=>j,K4:()=>l,O5:()=>m,nP:()=>n});var d=c(79676),e=c(17971),f=c(1782),g=c(80280),h=c(25533),i=c(51063);async function j(){return i.j2.api.getSession({headers:await (0,d.headers)()})}async function k(a,b){if(b){let[c]=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.Uo)((0,f.eq)(h.member.userId,a),(0,f.eq)(h.organization.id,b)));if(c)return c.org}let c=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a));return c[0]?.org??null}async function l(a){let[b]=await g.db.select().from(h.workspace).where((0,f.eq)(h.workspace.orgId,a));return b??null}async function m(a){return g.db.select({id:h.organization.id,name:h.organization.name}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a))}async function n(){let a=await j();a||(0,e.redirect)("/login"),"1"===process.env.CONSTELLA_FORCE_ONBOARDING&&(0,e.redirect)("/onboarding");let b=await k(a.user.id,a.session.activeOrgId);b||(0,e.redirect)("/onboarding");let c=await l(b.id);return c||(0,e.redirect)("/onboarding"),{session:a,org:b,workspace:c}}}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,4804,1572],()=>b(b.s=27578));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=5413,a.ids=[5413],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},18612:(a,b,c)=>{c.d(b,{r$:()=>h,EX:()=>p,CS:()=>function a(b,c=""){let d=[];for(let e of l(b,c))if(e.isDir){if(m.has(e.name))continue;d.push(...a(b,e.path))}else d.push(e.path);return d},HZ:()=>j,Ci:()=>l,sL:()=>n,dx:()=>o});var d=c(73024),e=c(76760),f=c(48161),g=c(28430);function h(){return process.env.CONSTELLA_HOME?(0,g.Y)(process.env.CONSTELLA_HOME):(0,e.join)((0,f.homedir)(),".constella")}let i=new Set;function j(a){if(!/^[A-Za-z0-9_-]{6,64}$/.test(a))throw Error("Invalid orgId");let b=(0,e.join)(h(),"organizations",a,"workspace");if(!i.has(a)){i.add(a);try{let c=(0,e.join)(h(),"organizations",a,"constella"),f=!(0,d.existsSync)(b)||0===(0,d.readdirSync)(b).length;if((0,d.existsSync)(c)&&f)try{(0,d.renameSync)(c,b)}catch{(0,d.existsSync)(c)&&((0,d.mkdirSync)(b,{recursive:!0}),0===(0,d.readdirSync)(b).length&&(0,d.cpSync)(c,b,{recursive:!0}))}}catch{}}return b}function k(a,b){let c=(0,e.normalize)((0,e.join)(a,b));if(c!==a&&!c.startsWith(a+e.sep))throw Error("Path escapes workspace: "+b);if((0,d.existsSync)(a)){let f;try{f=d.realpathSync.native(a)}catch{f=a}let g=function(a){let b=a;for(;;){if((0,d.existsSync)(b))try{return d.realpathSync.native(b)}catch{return b}let a=(0,e.dirname)(b);if(a===b)return b;b=a}}(c);if(g!==f&&!g.startsWith(f+e.sep))throw Error("Path escapes workspace (symlink): "+b)}return c}function l(a,b=""){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readdirSync)(c).map(a=>{let f=(0,e.join)(c,a),g=(b?b+"/":"")+a;return{name:a,path:g,isDir:(0,d.statSync)(f).isDirectory()}}).sort((a,b)=>a.isDir===b.isDir?a.name.localeCompare(b.name):a.isDir?-1:1):[]}let m=new Set(["node_modules",".git",".next",".turbo","dist","build","out","coverage",".cache","archives",".testdev",".pnpm-store",".vercel","vendor"]);function n(a,b){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readFileSync)(c,"utf8"):null}function o(a,b,c){let f=k(j(a),b);(0,d.mkdirSync)((0,e.dirname)(f),{recursive:!0}),(0,d.writeFileSync)(f,c,"utf8")}function p(a,b){let c=k(j(a),b);(0,d.existsSync)(c)&&(0,d.rmSync)(c,{recursive:!0,force:!0})}},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},27578:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>M,patchFetch:()=>L,routeModule:()=>H,serverHooks:()=>K,workAsyncStorage:()=>I,workUnitAsyncStorage:()=>J});var d={};c.r(d),c.d(d,{GET:()=>G,POST:()=>F,dynamic:()=>C,runtime:()=>B});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(73024),y=c(76760),z=c(95896),A=c(18612);let B="nodejs",C="force-dynamic",D=/\.(png|jpe?g|gif|webp|bmp|pdf|txt|md|markdown|csv|json|log|zip|docx?|xlsx?|pptx?)$/i,E={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".pdf":"application/pdf"};async function F(a){let{org:b}=await (0,z.nP)(),c=(0,A.HZ)(b.id),d=Number(a.headers.get("content-length")??0);if(d&&d>0x5000000)return v.NextResponse.json({ok:!1,error:"request too large"},{status:413});let e=(await a.formData()).getAll("files").filter(a=>a instanceof File).slice(0,10);if(!e.length)return v.NextResponse.json({ok:!1,error:"no files"},{status:400});let f=(0,w.randomUUID)().slice(0,8),g=(0,y.join)(c,"uploads",f);(0,x.mkdirSync)(g,{recursive:!0});let h=[],i=0;for(let a of e){if(a.size>0xf00000)return v.NextResponse.json({ok:!1,error:`${a.name} exceeds 15 MB`},{status:400});if((i+=a.size)>0x5000000)return v.NextResponse.json({ok:!1,error:"request too large"},{status:413});let b=(0,y.basename)(a.name).replace(/[^\w.\-]+/g,"_").slice(-80)||"file";if(!D.test(b))return v.NextResponse.json({ok:!1,error:`${a.name}: file type not allowed`},{status:400});let d=`uploads/${f}/${b}`;try{(0,x.writeFileSync)((0,y.join)(c,d),Buffer.from(await a.arrayBuffer()))}catch{return v.NextResponse.json({ok:!1,error:`couldn't save ${a.name}`},{status:500})}h.push({name:a.name.slice(0,120),type:a.type||"application/octet-stream",size:a.size,path:d})}return v.NextResponse.json({ok:!0,attachments:h})}async function G(a){let{org:b}=await (0,z.nP)(),c=function(a,b){if(!b.startsWith("uploads/")||b.includes("..")||b.includes("\0"))return null;let c=(0,y.normalize)((0,y.join)(a,b));return c.startsWith(a+y.sep)?c:null}((0,A.HZ)(b.id),a.nextUrl.searchParams.get("path")??"");if(!c||!(0,x.existsSync)(c))return new v.NextResponse("not found",{status:404});let d=E[(0,y.extname)(c).toLowerCase()],e=(0,x.readFileSync)(c);return new v.NextResponse(new Uint8Array(e),{headers:{"content-type":d??"application/octet-stream","x-content-type-options":"nosniff","content-disposition":`${d?"inline":"attachment"}; filename="${(0,y.basename)(c).replace(/[^\w.\-]+/g,"_")}"`,"content-security-policy":"default-src 'none'; sandbox","cache-control":"private, max-age=3600"}})}let H=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/upload/route",pathname:"/api/upload",filename:"route",bundlePath:"app/api/upload/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\upload\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:I,workUnitAsyncStorage:J,serverHooks:K}=H;function L(){return(0,g.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:J})}async function M(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),H.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/upload/route";"/index"===d&&(d="/");let e=await H.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,I=(0,k.normalizeAppPath)(d),J=!!(A.dynamicRoutes[I]||A.routes[E]),K=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(J&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||H.isDev||z||(L="/index"===(L=E)?"/":L);let M=!0===H.isDev||!J,N=J&&!M;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let O=a.method||"GET",P=(0,i.getTracer)(),Q=P.getActiveScopeSpan(),R=!!(null==B?void 0:B.isWrappedByNextServer),S=!!(0,h.getRequestMeta)(a,"minimalMode"),T=(0,h.getRequestMeta)(a,"incrementalCache")||await H.getIncrementalCache(a,x,A,S);null==T||T.resetRequestCache(),globalThis.__incrementalCache=T;let U={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:M,incrementalCache:T,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>H.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},V=new l.NodeNextRequest(a),W=new l.NodeNextResponse(b),X=m.NextRequestAdapter.fromNodeNextRequest(V,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>H.handle(X,U).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=P.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${O} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${O} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!S&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=U.renderOpts.fetchMetrics;let h=U.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=U.renderOpts.collectedTags;if(!J)return await (0,p.I)(V,W,d,U.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,e=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await H.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),b}},k=await H.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:S});if(!J)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});S||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return S&&J||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(V,W,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};R&&Q?await h(Q):(e=P.getActiveScopeSpan(),await P.withPropagatedContext(a.headers,()=>P.trace(n.BaseServerSpan.handleRequest,{spanName:`${O} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":O,"http.target":a.url}},h),void 0,!R))}catch(b){if(b instanceof t.NoFallbackError||await H.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:C})},!1,B),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},48161:a=>{a.exports=require("node:os")},51063:(a,b,c)=>{c.d(b,{dp:()=>o,j2:()=>p});var d=c(18706),e=c(21594),f=c(79743),g=c(80280),h=c(25533);let i=process.env.BETTER_AUTH_URL??"http://localhost:3000";function j(a){return a?.split(",")[0]?.trim()||null}function k(a){if(!a)return null;try{return new URL(a).origin}catch{return null}}function l(a,b){let c=k(b?.trim());c&&a.add(c)}let m=(()=>{let a=new Set;for(let b of[i,process.env.BETTER_AUTH_URL,process.env.NEXT_PUBLIC_BETTER_AUTH_URL,...(process.env.CONSTELLA_TRUSTED_ORIGINS??"").split(",")])l(a,b);return[...a]})();process.env.BETTER_AUTH_SECRET||console.error("[auth] FATAL: BETTER_AUTH_SECRET is required (sessions would be forgeable). Set it in your environment.");let n={};process.env.GITHUB_CLIENT_ID&&process.env.GITHUB_CLIENT_SECRET&&(n.github={clientId:process.env.GITHUB_CLIENT_ID,clientSecret:process.env.GITHUB_CLIENT_SECRET,scope:["repo","read:user"]}),process.env.GOOGLE_CLIENT_ID&&process.env.GOOGLE_CLIENT_SECRET&&(n.google={clientId:process.env.GOOGLE_CLIENT_ID,clientSecret:process.env.GOOGLE_CLIENT_SECRET});let o=Object.keys(n),p=(0,d.l)({baseURL:i,trustedOrigins:function(a){let b=new Set(m);l(b,a?.url);let c=function(a){let b=a?.headers,c=j(b?.get("x-forwarded-host"))??j(b?.get("host"));if(!c)return null;let d=(j(b?.get("x-forwarded-proto"))??(i.startsWith("https://")?"https":"http")).replace(/:$/,"");return/^[a-z][a-z0-9+.-]*$/i.test(d)?k(`${d}://${c}`):null}(a);return c&&b.add(c),[...b]},secret:process.env.BETTER_AUTH_SECRET,database:(0,e.y)(g.db,{provider:"sqlite",schema:{user:h.user,session:h.session,account:h.account,verification:h.verification,twoFactor:h.twoFactor}}),emailAndPassword:{enabled:!0,autoSignIn:!0,requireEmailVerification:!1},socialProviders:n,account:{accountLinking:{enabled:!0,trustedProviders:["github","google"]}},session:{expiresIn:2592e3,additionalFields:{activeOrgId:{type:"string",required:!1}}},plugins:[(0,f.d)()],advanced:{useSecureCookies:i.startsWith("https://")}})},51455:a=>{a.exports=require("node:fs/promises")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},95896:(a,b,c)=>{c.d(b,{$x:()=>k,Ht:()=>j,K4:()=>l,O5:()=>m,nP:()=>n});var d=c(79676),e=c(17971),f=c(1782),g=c(80280),h=c(25533),i=c(51063);async function j(){return i.j2.api.getSession({headers:await (0,d.headers)()})}async function k(a,b){if(b){let[c]=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.Uo)((0,f.eq)(h.member.userId,a),(0,f.eq)(h.organization.id,b)));if(c)return c.org}let c=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a));return c[0]?.org??null}async function l(a){let[b]=await g.db.select().from(h.workspace).where((0,f.eq)(h.workspace.orgId,a));return b??null}async function m(a){return g.db.select({id:h.organization.id,name:h.organization.name}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a))}async function n(){let a=await j();a||(0,e.redirect)("/login"),"1"===process.env.CONSTELLA_FORCE_ONBOARDING&&(0,e.redirect)("/onboarding");let b=await k(a.user.id,a.session.activeOrgId);b||(0,e.redirect)("/onboarding");let c=await l(b.id);return c||(0,e.redirect)("/onboarding"),{session:a,org:b,workspace:c}}}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,4804,1572],()=>b(b.s=27578));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=2835,a.ids=[2835],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},37067:a=>{a.exports=require("node:http")},40248:(a,b,c)=>{c.r(b),c.d(b,{"0002906425c37ba0a53bbfafa19691e9a906050d86":()=>e.Uw,"0038bfb5d0e8748666ba18a4f02557897aae6a50b5":()=>e.VH,"00417fb0c5992b5d8c9bf7bfdb20091c0b75f967d3":()=>d.approvePlan,"004b14ab45f1d73caf1fa096fd428f0885213bc9dd":()=>d.groomBacklog,"0056078f13eb137d213d4a1085a13ff6f381dabd2e":()=>e.Gh,"005d6b177b466248dc8ade5a43a93b4d803eab6094":()=>e.nl,"0061afb7f7b8b1fd8ac5aa96a903e3f22f615aa20f":()=>e.LU,"006dcbb5e7e346c443d7102ca0daafd3d6ef659076":()=>e.Ac,"007e381e52bd202d1b126f7cd30c571345bc33887e":()=>e.ts,"009534a6350f6d7ee36028fb9ab4659b11f05bd937":()=>d.requestPlanChanges,"0097079f8bb244de0b0343f4afa7990fed9fb324d2":()=>e.Jw,"00a7e1670a16ccb470c5305aabfe79db99128992b9":()=>e.lC,"00a94d93b5071359022f2378c3d54073eee3fa85c3":()=>e.Hi,"00abc16008e05e917d0ebc5e65eec07577fecb4570":()=>e.V$,"00bffc1c2ed5e8793aa8d097de94037f7e98e3292f":()=>e.Vr,"00cefe7d564b7bd933451222433059aa5dd8e95c2a":()=>e.zO,"00dec8cf58fde95e890b2dbab03e0216c02db09ee8":()=>e.kb,"00f924b6c219ad8d088625ee88343322f8ea498bcf":()=>e.S8,"4019def9d61c1f2ae2b3ef51af11efa0f5c439d65d":()=>d.approveSpec,"402bb61d0ec0ca426f1594c554cd83c9d2f55e4e2a":()=>d.startNewWork,"403e4537b9c0d6aa80d4e7fc51b9a4ed3c5f832593":()=>d.planFromConversation,"403e61223e2aa817de8ec2340570d4e49d420e3398":()=>e.cm,"404502bf64b6ad6b7865767a52d5f6f55bf6a43e3a":()=>e.Cp,"404b75852390a00b75a0428e40249cda9fec6baced":()=>e.wp,"406d2bac523e293dc8e736d45dbfd24078855b371f":()=>d.advanceIssue,"407f6077577515b726822bd6f80f9a601f412e1015":()=>e.m,"4088847163a13dc2e80c3095763da6ac497a5b9e37":()=>d.rejectIssue,"4096c37c3555263308f9a36206eaf746d0defe25ad":()=>d.rejectSpec,"40aed83757bf4e7d35906a784d6f38596d11a37abf":()=>d.approveIssue,"40b07ca371170bbb9e7bc16ba05a00629bae0e3e9e":()=>e.I2,"40d05376667b91af0ad411cbfa854abffb551f894d":()=>e.ju,"40d3c0594ce0b931cad118a1790bac1c8aba31a6bb":()=>e.az,"40e3b911773e190273915e8ecd96b865a3e34df027":()=>d.generatePlan,"40ea0236fb2729d70fa5f0bf6383e5f20dfa0c930e":()=>d.setAuto247,"40eb0711e58f72723c75d51f7586109839bbe62d56":()=>e.L0,"40fae88371459f73885109eab788ff958ee3beeed7":()=>f.mg,"60274f514b61483b6e070a65f4817ee1ad9fe43504":()=>g.k,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5":()=>f.eA,"60d43730d40153cb1c4e21154a523dfb9804f2610f":()=>d.groomBacklogFor,"60dbdf46cddec83114ce6551fd870fa84f68016765":()=>g.I,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4":()=>f.LV});var d=c(56053),e=c(27989),f=c(76862),g=c(78848)},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46466:a=>{a.exports=require("node:stream/promises")},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},95396:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>Y,patchFetch:()=>X,routeModule:()=>T,serverHooks:()=>W,workAsyncStorage:()=>U,workUnitAsyncStorage:()=>V});var d={};c.r(d),c.d(d,{GET:()=>R,POST:()=>S,dynamic:()=>M,runtime:()=>L});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(1782),y=c(80280),z=c(25533),A=c(95896);async function B(a,b){let c=/^Bearer\s+(cn_[A-Za-z0-9_-]{8,})$/.exec((a??"").trim());if(!c)return{ok:!1,status:401,error:"missing or malformed bearer token"};let d=(0,w.createHash)("sha256").update(c[1]).digest("hex"),[e]=await y.db.select().from(z.personalAccessToken).where((0,x.eq)(z.personalAccessToken.tokenHash,d));if(!e)return{ok:!1,status:401,error:"invalid token"};try{await y.db.update(z.personalAccessToken).set({lastUsedAt:new Date}).where((0,x.eq)(z.personalAccessToken.id,e.id))}catch{}let f=await (0,A.$x)(e.userId,b??void 0);if(!f)return{ok:!1,status:404,error:"no organization for this token's user"};if(f.archived)return{ok:!1,status:409,error:"organization is archived"};let g=await (0,A.K4)(f.id);return g?{ok:!0,auth:{userId:e.userId,tokenId:e.id,scope:e.scope,org:f,workspace:g}}:{ok:!1,status:404,error:"no workspace for the organization"}}async function C(a){let[b,c,d,[e]]=await Promise.all([y.db.select({status:z.goal.status}).from(z.goal).where((0,x.eq)(z.goal.workspaceId,a.id)),y.db.select({col:z.issue.col}).from(z.issue).where((0,x.eq)(z.issue.workspaceId,a.id)),y.db.select({col:z.task.col}).from(z.task).where((0,x.eq)(z.task.workspaceId,a.id)),y.db.select().from(z.plan).where((0,x.eq)(z.plan.workspaceId,a.id))]),f=a=>a.reduce((a,b)=>(a[b.col]=(a[b.col]??0)+1,a),{});return{workspace:{id:a.id,name:a.name,slug:a.slug},goals:{active:b.filter(a=>"active"===a.status).length,total:b.length},issues:{open:c.filter(a=>"done"!==a.col).length,total:c.length,byCol:f(c)},tasks:{doing:d.filter(a=>"doing"===a.col).length,total:d.length,byCol:f(d)},plan:e?{approved:e.approved,auto247:e.auto247,stage:e.stage}:null}}async function D(a){return await y.db.select({id:z.goal.id,title:z.goal.title,status:z.goal.status,progress:z.goal.progress}).from(z.goal).where((0,x.eq)(z.goal.workspaceId,a))}async function E(a){return await y.db.select({id:z.issue.id,key:z.issue.key,title:z.issue.title,col:z.issue.col,prio:z.issue.prio,points:z.issue.points,moscow:z.issue.moscow,approved:z.issue.approved}).from(z.issue).where((0,x.eq)(z.issue.workspaceId,a))}async function F(a){return await y.db.select({id:z.task.id,key:z.task.key,title:z.task.title,col:z.task.col,prio:z.task.prio}).from(z.task).where((0,x.eq)(z.task.workspaceId,a))}async function G(a){return await y.db.select({id:z.spec.id,key:z.spec.key,title:z.spec.title,status:z.spec.status,approved:z.spec.approved}).from(z.spec).where((0,x.eq)(z.spec.workspaceId,a))}var H=c(55479),I=c(18661),J=c(96930),K=c(12867);let L="nodejs",M="force-dynamic",N=new Map,O=(a,b=200)=>v.NextResponse.json({ok:!0,data:a},{status:b}),P=(a,b)=>v.NextResponse.json({ok:!1,error:b},{status:a});async function Q(a,b,c){var d;let e,f,g=await B(a.headers.get("authorization"),a.headers.get("x-constella-org"));if(!g.ok)return P(g.status,g.error);let{auth:h}=g;if(d=h.tokenId,e=Date.now(),(f=(N.get(d)??[]).filter(a=>e-a<6e4)).push(e),N.set(d,f),f.length>120)return P(429,"rate limit exceeded (120 req/min)");let i=h.workspace,j=b.join("/"),k="write"===h.scope,l=()=>k?null:P(403,"this token has read scope; a write-scope token is required");if("GET"===c)switch(j){case"":case"me":return O({user:h.userId,org:{id:h.org.id,name:h.org.name},workspace:{id:i.id,name:i.name,slug:i.slug},scope:h.scope});case"status":return O(await C(i));case"review":return O({text:await (0,H.mt)(i)});case"goals":return O(await D(i.id));case"issues":return O(await E(i.id));case"tasks":return O(await F(i.id));case"specs":return O(await G(i.id));case"kb":{let b=a.nextUrl.searchParams.get("q")??"";if(!b.trim())return P(400,"missing ?q=");let c=await (0,K.ed)(h.org.id,b);return O({text:c.text,sources:c.sources})}default:return P(404,`unknown GET /${j}`)}let m=await a.json().catch(()=>({}));switch(j){case"plan/approve":return l()??O(await (0,H.wz)(h.org.id,i));case"plan/reject":{let a=l();if(a)return a;return await (0,H.TR)(i.id,"string"==typeof m.reason?m.reason:void 0),O({rejected:!0})}case"execution":{let a=l();if(a)return a;let b=!1!==m.on;return await (0,H.mL)(i.id,b),O({auto247:b})}case"work":{let a=l();if(a)return a;let b="string"==typeof m.brief?m.brief:"",c="string"==typeof m.title?m.title:void 0,d=await (0,J.startNewWorkFor)(h.org.id,i,{brief:b,title:c});return d.ok?O(d):P(400,d.error??"could not start work")}case"kb":{let a="string"==typeof m.q?m.q:"";if(!a.trim())return P(400,"missing body.q");let b=await (0,K.ed)(h.org.id,a);return O({text:b.text,sources:b.sources})}default:if("goals"===b[0]&&3===b.length){let a=l();if(a)return a;let c=b[1];if("cancel"===b[2]){let a=await (0,I.NF)(i.id,c);return a.ok?O(a):P(404,"goal not found")}if("archive"===b[2]){let a=await (0,I.PT)(h.org.id,i.id,c);return a.ok?O(a):P(404,"goal not found")}}return P(404,`unknown POST /${j}`)}}async function R(a,b){try{let{path:c}=await b.params;return await Q(a,c??[],"GET")}catch(a){return P(500,String(a instanceof Error?a.message:a))}}async function S(a,b){try{let{path:c}=await b.params;return await Q(a,c??[],"POST")}catch(a){return P(500,String(a instanceof Error?a.message:a))}}let T=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/v1/[[...path]]/route",pathname:"/api/v1/[[...path]]",filename:"route",bundlePath:"app/api/v1/[[...path]]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\v1\\[[...path]]\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:U,workUnitAsyncStorage:V,serverHooks:W}=T;function X(){return(0,g.patchFetch)({workAsyncStorage:U,workUnitAsyncStorage:V})}async function Y(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),T.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/v1/[[...path]]/route";"/index"===d&&(d="/");let e=await T.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||T.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===T.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await T.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let U={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>T.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},V=new l.NodeNextRequest(a),W=new l.NodeNextResponse(b),X=m.NextRequestAdapter.fromNodeNextRequest(V,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>T.handle(X,U).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=U.renderOpts.fetchMetrics;let h=U.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=U.renderOpts.collectedTags;if(!I)return await (0,p.I)(V,W,d,U.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,e=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await T.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await T.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(V,W,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await T.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,4679,1572,4619,9969,7989,2867,6873,850,2960,8823],()=>b(b.s=95396));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=2835,a.ids=[2835],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},37067:a=>{a.exports=require("node:http")},38522:a=>{a.exports=require("node:zlib")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46466:a=>{a.exports=require("node:stream/promises")},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},75806:(a,b,c)=>{c.r(b),c.d(b,{"0011c2404adc6b3048be5ca5eb204351e28665fedd":()=>e.S8,"0015b06bbd98ec7937ca597bbae4092e26b1991a66":()=>e.nl,"0018c198f4a47e6adc1238b5daa532fab3632f90ad":()=>e.Ac,"0024bf7b34a52fe14a9a978ce3e57cfede2898f61a":()=>e.Jw,"0026a43f3e1b62dcf12b65a152b2b7d0b33855e685":()=>e.V$,"003c134392bb340969faa7fda2658f2c4517730d98":()=>e.Hi,"004c4e8970872e80bf3a634ff51fb13079a791cc11":()=>e.Vr,"004d7785b6e7ed54fec1c45370d77ac4c2f07804e2":()=>e.LU,"00554e833ae48f796f0eac7ddef3970ff24f235ad7":()=>e.ts,"006b9d9e61368e96e287131f2a79d8141f80607bc5":()=>e.Gh,"0073cd1b77e35abc407ab8c0bfd7158ee296172e28":()=>e.VH,"0078876825bee310a72cf001e5fe01a3304ba0a060":()=>e.kb,"0085c3c15f848da7beac072fd797bc11048a499d8f":()=>e.Uw,"0089bb3aeea0ab3018bc9c6c3d254bc32927017ade":()=>d.requestPlanChanges,"00a82d9997685786a827f84d1adec8c0464ab77242":()=>e.lC,"00d707af504f1a0491ca9dcf763ef015da594b49f3":()=>d.approvePlan,"00dcf7bba8dfe2aea38f8e1a0b604bdf20346de49b":()=>d.groomBacklog,"00f03d2d81bb26d468c7e4637a0f32c70fda9c6565":()=>e.zO,"401a19ed3c8c332390be321a05a8a084c75556421e":()=>d.advanceIssue,"4023169ed85000187a7267198eab5e95902c9af1b9":()=>d.approveIssue,"402d4d51b2fedd60f6206531e45066dc999aaa3915":()=>d.startNewWork,"4038b15099bf2fe9a8f44cea08bfedf104a01c187e":()=>d.setAuto247,"404fa4e7b74f3432c13521faa40badac327c784ea2":()=>e.cm,"4054d8c9d713d027d9beb3076074624ea681f897ba":()=>e.m,"405d9a2bdd47403b8b93c2ea9799d886bf4f865790":()=>f.mg,"4070a1e8f5dfdb123c1dd3ba53e819cd324592eeef":()=>e.wp,"40a51f05a62e5ad01e4585ad064bcc9493ef1588fc":()=>e.ju,"40a8b5e4223fa4e2f64798e3c4f10e2052d74263a0":()=>d.generatePlan,"40beac2559eab1128341c145e31826c3b57f094595":()=>d.rejectIssue,"40c08d36ba60f30915b37b6dd0aed4824b73741fe7":()=>e.Cp,"40c0f496f5293823123e86e702c43f6dbd13fa0241":()=>e.L0,"40caf95c1217c0ac6c4afc1ff748b52c6e39b5c8cd":()=>e.az,"40ced2f71e662e1884c830a2cb80626a57aa8be42c":()=>d.approveSpec,"40e58ec47b3c8acdd5eeb552095b8d34ce834fa009":()=>e.I2,"40e8f30a047d0f241003dcbb3194b872639e110c96":()=>d.rejectSpec,"40fe2ee19da6b0f6382e1874f540a69b1e1d7bcb02":()=>d.planFromConversation,"60575173b13aefcb112b702ceafc6e93d4d1a87c93":()=>f.eA,"606d6a4c1c840dabf0ae062586f5d31aced8e1adf7":()=>d.groomBacklogFor,"60a238957762b5625582695c05d90f75b394483f2c":()=>g.I,"60dba9908002f3000f3e7e8a0a7750d94f4e462c3d":()=>g.k,"70ae6b7d6a16ebfa9c23932ee1094fbffbcab2aa68":()=>f.LV});var d=c(56053),e=c(27989),f=c(76862),g=c(78848)},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},95396:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>Y,patchFetch:()=>X,routeModule:()=>T,serverHooks:()=>W,workAsyncStorage:()=>U,workUnitAsyncStorage:()=>V});var d={};c.r(d),c.d(d,{GET:()=>R,POST:()=>S,dynamic:()=>M,runtime:()=>L});var e=c(55750),f=c(69743),g=c(38214),h=c(72584),i=c(65510),j=c(25026),k=c(261),l=c(26936),m=c(91226),n=c(75994),o=c(34185),p=c(57047),q=c(93277),r=c(51195),s=c(22204),t=c(86439),u=c(26242),v=c(24647),w=c(77598),x=c(1782),y=c(80280),z=c(25533),A=c(95896);async function B(a,b){let c=/^Bearer\s+(cn_[A-Za-z0-9_-]{8,})$/.exec((a??"").trim());if(!c)return{ok:!1,status:401,error:"missing or malformed bearer token"};let d=(0,w.createHash)("sha256").update(c[1]).digest("hex"),[e]=await y.db.select().from(z.personalAccessToken).where((0,x.eq)(z.personalAccessToken.tokenHash,d));if(!e)return{ok:!1,status:401,error:"invalid token"};try{await y.db.update(z.personalAccessToken).set({lastUsedAt:new Date}).where((0,x.eq)(z.personalAccessToken.id,e.id))}catch{}let f=await (0,A.$x)(e.userId,b??void 0);if(!f)return{ok:!1,status:404,error:"no organization for this token's user"};if(f.archived)return{ok:!1,status:409,error:"organization is archived"};let g=await (0,A.K4)(f.id);return g?{ok:!0,auth:{userId:e.userId,tokenId:e.id,scope:e.scope,org:f,workspace:g}}:{ok:!1,status:404,error:"no workspace for the organization"}}async function C(a){let[b,c,d,[e]]=await Promise.all([y.db.select({status:z.goal.status}).from(z.goal).where((0,x.eq)(z.goal.workspaceId,a.id)),y.db.select({col:z.issue.col}).from(z.issue).where((0,x.eq)(z.issue.workspaceId,a.id)),y.db.select({col:z.task.col}).from(z.task).where((0,x.eq)(z.task.workspaceId,a.id)),y.db.select().from(z.plan).where((0,x.eq)(z.plan.workspaceId,a.id))]),f=a=>a.reduce((a,b)=>(a[b.col]=(a[b.col]??0)+1,a),{});return{workspace:{id:a.id,name:a.name,slug:a.slug},goals:{active:b.filter(a=>"active"===a.status).length,total:b.length},issues:{open:c.filter(a=>"done"!==a.col).length,total:c.length,byCol:f(c)},tasks:{doing:d.filter(a=>"doing"===a.col).length,total:d.length,byCol:f(d)},plan:e?{approved:e.approved,auto247:e.auto247,stage:e.stage}:null}}async function D(a){return await y.db.select({id:z.goal.id,title:z.goal.title,status:z.goal.status,progress:z.goal.progress}).from(z.goal).where((0,x.eq)(z.goal.workspaceId,a))}async function E(a){return await y.db.select({id:z.issue.id,key:z.issue.key,title:z.issue.title,col:z.issue.col,prio:z.issue.prio,points:z.issue.points,moscow:z.issue.moscow,approved:z.issue.approved}).from(z.issue).where((0,x.eq)(z.issue.workspaceId,a))}async function F(a){return await y.db.select({id:z.task.id,key:z.task.key,title:z.task.title,col:z.task.col,prio:z.task.prio}).from(z.task).where((0,x.eq)(z.task.workspaceId,a))}async function G(a){return await y.db.select({id:z.spec.id,key:z.spec.key,title:z.spec.title,status:z.spec.status,approved:z.spec.approved}).from(z.spec).where((0,x.eq)(z.spec.workspaceId,a))}var H=c(55479),I=c(18661),J=c(96930),K=c(12867);let L="nodejs",M="force-dynamic",N=new Map,O=(a,b=200)=>v.NextResponse.json({ok:!0,data:a},{status:b}),P=(a,b)=>v.NextResponse.json({ok:!1,error:b},{status:a});async function Q(a,b,c){var d;let e,f,g=await B(a.headers.get("authorization"),a.headers.get("x-constella-org"));if(!g.ok)return P(g.status,g.error);let{auth:h}=g;if(d=h.tokenId,e=Date.now(),(f=(N.get(d)??[]).filter(a=>e-a<6e4)).push(e),N.set(d,f),f.length>120)return P(429,"rate limit exceeded (120 req/min)");let i=h.workspace,j=b.join("/"),k="write"===h.scope,l=()=>k?null:P(403,"this token has read scope; a write-scope token is required");if("GET"===c)switch(j){case"":case"me":return O({user:h.userId,org:{id:h.org.id,name:h.org.name},workspace:{id:i.id,name:i.name,slug:i.slug},scope:h.scope});case"status":return O(await C(i));case"review":return O({text:await (0,H.mt)(i)});case"goals":return O(await D(i.id));case"issues":return O(await E(i.id));case"tasks":return O(await F(i.id));case"specs":return O(await G(i.id));case"kb":{let b=a.nextUrl.searchParams.get("q")??"";if(!b.trim())return P(400,"missing ?q=");let c=await (0,K.ed)(h.org.id,b);return O({text:c.text,sources:c.sources})}default:return P(404,`unknown GET /${j}`)}let m=await a.json().catch(()=>({}));switch(j){case"plan/approve":return l()??O(await (0,H.wz)(h.org.id,i));case"plan/reject":{let a=l();if(a)return a;return await (0,H.TR)(i.id,"string"==typeof m.reason?m.reason:void 0),O({rejected:!0})}case"execution":{let a=l();if(a)return a;let b=!1!==m.on;return await (0,H.mL)(i.id,b),O({auto247:b})}case"work":{let a=l();if(a)return a;let b="string"==typeof m.brief?m.brief:"",c="string"==typeof m.title?m.title:void 0,d=await (0,J.startNewWorkFor)(h.org.id,i,{brief:b,title:c});return d.ok?O(d):P(400,d.error??"could not start work")}case"kb":{let a="string"==typeof m.q?m.q:"";if(!a.trim())return P(400,"missing body.q");let b=await (0,K.ed)(h.org.id,a);return O({text:b.text,sources:b.sources})}default:if("goals"===b[0]&&3===b.length){let a=l();if(a)return a;let c=b[1];if("cancel"===b[2]){let a=await (0,I.NF)(i.id,c);return a.ok?O(a):P(404,"goal not found")}if("archive"===b[2]){let a=await (0,I.PT)(h.org.id,i.id,c);return a.ok?O(a):P(404,"goal not found")}}return P(404,`unknown POST /${j}`)}}async function R(a,b){try{let{path:c}=await b.params;return await Q(a,c??[],"GET")}catch(a){return P(500,String(a instanceof Error?a.message:a))}}async function S(a,b){try{let{path:c}=await b.params;return await Q(a,c??[],"POST")}catch(a){return P(500,String(a instanceof Error?a.message:a))}}let T=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/v1/[[...path]]/route",pathname:"/api/v1/[[...path]]",filename:"route",bundlePath:"app/api/v1/[[...path]]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\v1\\[[...path]]\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:U,workUnitAsyncStorage:V,serverHooks:W}=T;function X(){return(0,g.patchFetch)({workAsyncStorage:U,workUnitAsyncStorage:V})}async function Y(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),T.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/v1/[[...path]]/route";"/index"===d&&(d="/");let e=await T.prepare(a,b,{srcPage:d,multiZoneDraftMode:!1});if(!e)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:g,deploymentId:v,params:w,nextConfig:x,parsedUrl:y,isDraftMode:z,prerenderManifest:A,routerServerContext:B,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,resolvedPathname:E,clientReferenceManifest:F,serverActionsManifest:G}=e,H=(0,k.normalizeAppPath)(d),I=!!(A.dynamicRoutes[H]||A.routes[E]),J=async()=>((null==B?void 0:B.render404)?await B.render404(a,b,y,!1):b.end("This page could not be found"),null);if(I&&!z){let a=!!A.routes[E],b=A.dynamicRoutes[H];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await J();throw new t.NoFallbackError}}let K=null;!I||T.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===T.isDev||!I,M=I&&!L;G&&F&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:F,serverActionsManifest:G});let N=a.method||"GET",O=(0,i.getTracer)(),P=O.getActiveScopeSpan(),Q=!!(null==B?void 0:B.isWrappedByNextServer),R=!!(0,h.getRequestMeta)(a,"minimalMode"),S=(0,h.getRequestMeta)(a,"incrementalCache")||await T.getIncrementalCache(a,x,A,R);null==S||S.resetRequestCache(),globalThis.__incrementalCache=S;let U={params:w,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:L,incrementalCache:S,cacheLifeProfiles:x.cacheLife,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d,e)=>T.onRequestError(a,b,d,e,B)},sharedContext:{buildId:g,deploymentId:v}},V=new l.NodeNextRequest(a),W=new l.NodeNextResponse(b),X=m.NextRequestAdapter.fromNodeNextRequest(V,(0,m.signalFromNodeResponse)(b));try{let e,g=async a=>T.handle(X,U).finally(()=>{if(!a)return;a.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let c=O.getRootSpanAttributes();if(!c)return;if(c.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${c.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let f=c.get("next.route");if(f){let b=`${N} ${f}`;a.setAttributes({"next.route":f,"http.route":f,"next.span_name":b}),a.updateName(b),e&&e!==a&&(e.setAttribute("http.route",f),e.updateName(b))}else a.updateName(`${N} ${d}`)}),h=async e=>{var h,i;let j=async({previousCacheEntry:f})=>{try{if(!R&&C&&D&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let d=await g(e);a.fetchMetrics=U.renderOpts.fetchMetrics;let h=U.renderOpts.pendingWaitUntil;h&&c.waitUntil&&(c.waitUntil(h),h=void 0);let i=U.renderOpts.collectedTags;if(!I)return await (0,p.I)(V,W,d,U.renderOpts.pendingWaitUntil),null;{let a=await d.blob(),b=(0,q.toNodeOutgoingHttpHeaders)(d.headers);i&&(b[s.NEXT_CACHE_TAGS_HEADER]=i),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=s.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,e=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=s.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:u.CachedRouteKind.APP_ROUTE,status:d.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:e}}}}catch(b){throw(null==f?void 0:f.isStale)&&await T.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await T.handleResponse({req:a,nextConfig:x,cacheKey:K,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:D,responseGenerator:j,waitUntil:c.waitUntil,isMinimalMode:R});if(!I)return null;if((null==k||null==(h=k.value)?void 0:h.kind)!==u.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==k||null==(i=k.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});R||b.setHeader("x-nextjs-cache",C?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),z&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let l=(0,q.fromNodeOutgoingHttpHeaders)(k.value.headers);return R&&I||l.delete(s.NEXT_CACHE_TAGS_HEADER),!k.cacheControl||b.getHeader("Cache-Control")||l.get("Cache-Control")||l.set("Cache-Control",(0,r.getCacheControlHeader)(k.cacheControl)),await (0,p.I)(V,W,new Response(k.value.body,{headers:l,status:k.value.status||200})),null};Q&&P?await h(P):(e=O.getActiveScopeSpan(),await O.withPropagatedContext(a.headers,()=>O.trace(n.BaseServerSpan.handleRequest,{spanName:`${N} ${d}`,kind:i.SpanKind.SERVER,attributes:{"http.method":N,"http.target":a.url}},h),void 0,!Q))}catch(b){if(b instanceof t.NoFallbackError||await T.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),I)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,4679,1572,4619,9969,7989,2867,6873,850,2960,8823],()=>b(b.s=95396));module.exports=c})();
@@ -10,9 +10,9 @@
10
10
  "/api/passkey/register/verify/route": "app/api/passkey/register/verify/route.js",
11
11
  "/api/sync/file/route": "app/api/sync/file/route.js",
12
12
  "/api/auth/[...all]/route": "app/api/auth/[...all]/route.js",
13
+ "/api/telegram/poll/route": "app/api/telegram/poll/route.js",
13
14
  "/api/health/route": "app/api/health/route.js",
14
15
  "/api/stream/route": "app/api/stream/route.js",
15
- "/api/telegram/poll/route": "app/api/telegram/poll/route.js",
16
16
  "/api/upload/route": "app/api/upload/route.js",
17
17
  "/api/v1/[[...path]]/route": "app/api/v1/[[...path]]/route.js",
18
18
  "/(app)/activity/page": "app/(app)/activity/page.js",
@@ -49,6 +49,6 @@
49
49
  "/(app)/tasks/page": "app/(app)/tasks/page.js",
50
50
  "/(app)/test-dev/page": "app/(app)/test-dev/page.js",
51
51
  "/(app)/update/page": "app/(app)/update/page.js",
52
- "/(auth)/login/page": "app/(auth)/login/page.js",
53
- "/(auth)/onboarding/page": "app/(auth)/onboarding/page.js"
52
+ "/(auth)/onboarding/page": "app/(auth)/onboarding/page.js",
53
+ "/(auth)/login/page": "app/(auth)/login/page.js"
54
54
  }