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=4094,a.ids=[4094],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")},5006:a=>{a.exports=import("@playwright/test")},9842:(a,b,c)=>{c.d(b,{IZ:()=>k,Ix:()=>j,ZF:()=>m,h6:()=>n,w1:()=>l});var d=c(1782),e=c(76760),f=c(80280),g=c(25533),h=c(18612),i=c(54033);function j(a,b){if(!b)return null;let c=(0,h.HZ)(a),d=((0,e.isAbsolute)(b)?(0,e.relative)(c,b):b).replace(/\\/g,"/");return!d||d.startsWith("..")||d.startsWith(".git/")||d.startsWith(".claude/")||d.startsWith("archives/")?null:d}async function k(a,b,c){let e=(0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.path,b)),[h]=await f.db.select().from(g.fileLock).where(e);if(h){let a=!!c.taskId&&h.taskId===c.taskId,b=!h.taskId&&!!c.agentId&&h.agentId===c.agentId;return a||b?(await f.db.update(g.fileLock).set({heartbeatAt:new Date}).where(e),{ok:!0}):{ok:!1,heldBy:{handle:h.agentHandle,taskId:h.taskId}}}try{return await f.db.insert(g.fileLock).values({workspaceId:a,path:b,taskId:c.taskId||"",agentId:c.agentId||"",agentHandle:c.handle||"",acquiredAt:new Date,heartbeatAt:new Date}),{ok:!0}}catch{let[a]=await f.db.select().from(g.fileLock).where(e);if(a&&(a.taskId===c.taskId||a.agentId===c.agentId))return{ok:!0};return{ok:!1,heldBy:a?{handle:a.agentHandle,taskId:a.taskId}:void 0}}}async function l(a,b){if(b)try{let c=await f.db.select({path:g.fileLock.path}).from(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b)));for(let e of(await f.db.delete(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b))),c))await (0,i.W_)(a,"task",`lock:${e.path}`)}catch{}}async function m(a=3e5){try{await f.db.delete(g.fileLock).where((0,d.lt)(g.fileLock.heartbeatAt,new Date(Date.now()-a)))}catch{}}async function n(a){try{return await f.db.select({path:g.fileLock.path,agentHandle:g.fileLock.agentHandle,taskId:g.fileLock.taskId}).from(g.fileLock).where((0,d.eq)(g.fileLock.workspaceId,a))}catch{return[]}}},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")},32075:(a,b,c)=>{c.r(b),c.d(b,{"0002906425c37ba0a53bbfafa19691e9a906050d86":()=>d.Uw,"0038bfb5d0e8748666ba18a4f02557897aae6a50b5":()=>d.VH,"0056078f13eb137d213d4a1085a13ff6f381dabd2e":()=>d.Gh,"005d6b177b466248dc8ade5a43a93b4d803eab6094":()=>d.nl,"0061afb7f7b8b1fd8ac5aa96a903e3f22f615aa20f":()=>d.LU,"006dcbb5e7e346c443d7102ca0daafd3d6ef659076":()=>d.Ac,"007e381e52bd202d1b126f7cd30c571345bc33887e":()=>d.ts,"0097079f8bb244de0b0343f4afa7990fed9fb324d2":()=>d.Jw,"00a7e1670a16ccb470c5305aabfe79db99128992b9":()=>d.lC,"00a94d93b5071359022f2378c3d54073eee3fa85c3":()=>d.Hi,"00abc16008e05e917d0ebc5e65eec07577fecb4570":()=>d.V$,"00bffc1c2ed5e8793aa8d097de94037f7e98e3292f":()=>d.Vr,"00cefe7d564b7bd933451222433059aa5dd8e95c2a":()=>d.zO,"00dec8cf58fde95e890b2dbab03e0216c02db09ee8":()=>d.kb,"00f924b6c219ad8d088625ee88343322f8ea498bcf":()=>d.S8,"402090fd73cce39233571ee1eddc39926755addafe":()=>g.iw,"403b51a6e3814811eb5e160907a14c0a84d888d941":()=>g.x1,"403e61223e2aa817de8ec2340570d4e49d420e3398":()=>d.cm,"403f8b2497a3ed78247aa24d51795dff1202f176ae":()=>g.AO,"404502bf64b6ad6b7865767a52d5f6f55bf6a43e3a":()=>d.Cp,"404b75852390a00b75a0428e40249cda9fec6baced":()=>d.wp,"40592a15b4e7f992fd79bab5f6004760ff7cab51c4":()=>g.WU,"407f6077577515b726822bd6f80f9a601f412e1015":()=>d.m,"40b07ca371170bbb9e7bc16ba05a00629bae0e3e9e":()=>d.I2,"40b3e3f85ab33065cf86f445693145ba3f67793a04":()=>g.uR,"40baab7fec3d3bb2a162dd4e9172a0b1bb11225d0a":()=>g.EC,"40c60819b3905073c1708002e6e335ea61da55a67d":()=>g.Po,"40c644992d77c8021adbcec6b946d7f907b921603a":()=>g.xf,"40d05376667b91af0ad411cbfa854abffb551f894d":()=>d.ju,"40d3c0594ce0b931cad118a1790bac1c8aba31a6bb":()=>d.az,"40eb0711e58f72723c75d51f7586109839bbe62d56":()=>d.L0,"40fae88371459f73885109eab788ff958ee3beeed7":()=>e.mg,"60274f514b61483b6e070a65f4817ee1ad9fe43504":()=>f.k,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5":()=>e.eA,"606ee3015c15d64a6447be5a477ad2e4e2700602d1":()=>g.aO,"60dbdf46cddec83114ce6551fd870fa84f68016765":()=>f.I,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4":()=>e.LV});var d=c(27989),e=c(76862),f=c(78848),g=c(56493)},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")},47860:(a,b,c)=>{c.d(b,{CJ:()=>k,fQ:()=>i,hW:()=>j});var d=c(80280),e=c(25533),f=c(1782),g=c(55511),h=c(18612);let i=9e4;async function j(a,b,c={}){let h=new Date,i=c.ok??!0;return await d.db.insert(e.pulse).values({id:(0,g.randomUUID)(),workspaceId:a,agentId:b,at:h,ok:i,latencyMs:c.latencyMs??0,note:c.note??""}),await d.db.update(e.agent).set({lastPulse:h,health:i?"alive":"stale"}).where((0,f.eq)(e.agent.id,b)),h}async function k(a,b){let c=await d.db.query.agent.findMany({where:(0,f.eq)(e.agent.workspaceId,a)}),g=[];for(let a of c){let{intervalSec:c,maxMissed:i}=function(a,b){let c=(0,h.sL)(a,`.claude/agents/${b}/pulse.md`)??"";return{intervalSec:parseInt(c.match(/intervalSec:\s*(\d+)/)?.[1]??"30",10)||30,maxMissed:parseInt(c.match(/maxMissed:\s*(\d+)/)?.[1]??"2",10)||2}}(b,a.handle),j=c*i*1e3,k=3*j,l=function(a,b,c){if(!a)return"down";let d=Date.now()-a.getTime();return d<=b?"alive":d<=c?"stale":"down"}(a.lastPulse??null,j,k);l!==a.health&&await d.db.update(e.agent).set({health:l}).where((0,f.eq)(e.agent.id,a.id)),g.push({a,health:l})}let i=new Date().toISOString(),j=`# Agent status
1
+ "use strict";(()=>{var a={};a.id=4094,a.ids=[4094],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")},5006:a=>{a.exports=import("@playwright/test")},9842:(a,b,c)=>{c.d(b,{IZ:()=>k,Ix:()=>j,ZF:()=>m,h6:()=>n,w1:()=>l});var d=c(1782),e=c(76760),f=c(80280),g=c(25533),h=c(18612),i=c(54033);function j(a,b){if(!b)return null;let c=(0,h.HZ)(a),d=((0,e.isAbsolute)(b)?(0,e.relative)(c,b):b).replace(/\\/g,"/");return!d||d.startsWith("..")||d.startsWith(".git/")||d.startsWith(".claude/")||d.startsWith("archives/")?null:d}async function k(a,b,c){let e=(0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.path,b)),[h]=await f.db.select().from(g.fileLock).where(e);if(h){let a=!!c.taskId&&h.taskId===c.taskId,b=!h.taskId&&!!c.agentId&&h.agentId===c.agentId;return a||b?(await f.db.update(g.fileLock).set({heartbeatAt:new Date}).where(e),{ok:!0}):{ok:!1,heldBy:{handle:h.agentHandle,taskId:h.taskId}}}try{return await f.db.insert(g.fileLock).values({workspaceId:a,path:b,taskId:c.taskId||"",agentId:c.agentId||"",agentHandle:c.handle||"",acquiredAt:new Date,heartbeatAt:new Date}),{ok:!0}}catch{let[a]=await f.db.select().from(g.fileLock).where(e);if(a&&(a.taskId===c.taskId||a.agentId===c.agentId))return{ok:!0};return{ok:!1,heldBy:a?{handle:a.agentHandle,taskId:a.taskId}:void 0}}}async function l(a,b){if(b)try{let c=await f.db.select({path:g.fileLock.path}).from(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b)));for(let e of(await f.db.delete(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b))),c))await (0,i.W_)(a,"task",`lock:${e.path}`)}catch{}}async function m(a=3e5){try{await f.db.delete(g.fileLock).where((0,d.lt)(g.fileLock.heartbeatAt,new Date(Date.now()-a)))}catch{}}async function n(a){try{return await f.db.select({path:g.fileLock.path,agentHandle:g.fileLock.agentHandle,taskId:g.fileLock.taskId}).from(g.fileLock).where((0,d.eq)(g.fileLock.workspaceId,a))}catch{return[]}}},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")},40035:(a,b,c)=>{c.r(b),c.d(b,{"0011c2404adc6b3048be5ca5eb204351e28665fedd":()=>d.S8,"0015b06bbd98ec7937ca597bbae4092e26b1991a66":()=>d.nl,"0018c198f4a47e6adc1238b5daa532fab3632f90ad":()=>d.Ac,"0024bf7b34a52fe14a9a978ce3e57cfede2898f61a":()=>d.Jw,"0026a43f3e1b62dcf12b65a152b2b7d0b33855e685":()=>d.V$,"003c134392bb340969faa7fda2658f2c4517730d98":()=>d.Hi,"004c4e8970872e80bf3a634ff51fb13079a791cc11":()=>d.Vr,"004d7785b6e7ed54fec1c45370d77ac4c2f07804e2":()=>d.LU,"00554e833ae48f796f0eac7ddef3970ff24f235ad7":()=>d.ts,"006b9d9e61368e96e287131f2a79d8141f80607bc5":()=>d.Gh,"0073cd1b77e35abc407ab8c0bfd7158ee296172e28":()=>d.VH,"0078876825bee310a72cf001e5fe01a3304ba0a060":()=>d.kb,"0085c3c15f848da7beac072fd797bc11048a499d8f":()=>d.Uw,"00a82d9997685786a827f84d1adec8c0464ab77242":()=>d.lC,"00f03d2d81bb26d468c7e4637a0f32c70fda9c6565":()=>d.zO,"4004673068530656edd28ca2b130a1096f274e2cde":()=>g.iw,"4005f3f9461c2e6b2fecdac81c822e2481fbdbaec1":()=>g.x1,"403a1916644d7877e6f55e5ed65de73f9157ca3977":()=>g.AO,"403c1d8c05fcc53bd28044c5b835d4b402564a964f":()=>g.xf,"404fa4e7b74f3432c13521faa40badac327c784ea2":()=>d.cm,"4054d8c9d713d027d9beb3076074624ea681f897ba":()=>d.m,"405d9a2bdd47403b8b93c2ea9799d886bf4f865790":()=>e.mg,"4070a1e8f5dfdb123c1dd3ba53e819cd324592eeef":()=>d.wp,"408898da73d5e0af066104c62997b817201c0a99cf":()=>g.Po,"40897071ec7c50dcab7572d01ec05ab9ed5da6d715":()=>g.uR,"409ff004d8d4df25bdce5af6d94dd7d215787a3304":()=>g.EC,"40a51f05a62e5ad01e4585ad064bcc9493ef1588fc":()=>d.ju,"40c08d36ba60f30915b37b6dd0aed4824b73741fe7":()=>d.Cp,"40c0f496f5293823123e86e702c43f6dbd13fa0241":()=>d.L0,"40c4cc3f2d97110b2d69610739ee46dbe5a2a37d85":()=>g.WU,"40caf95c1217c0ac6c4afc1ff748b52c6e39b5c8cd":()=>d.az,"40e58ec47b3c8acdd5eeb552095b8d34ce834fa009":()=>d.I2,"60575173b13aefcb112b702ceafc6e93d4d1a87c93":()=>e.eA,"60a238957762b5625582695c05d90f75b394483f2c":()=>f.I,"60dba9908002f3000f3e7e8a0a7750d94f4e462c3d":()=>f.k,"60f96bab69a09e9fcf636f80db1eff87d3be983a60":()=>g.aO,"70ae6b7d6a16ebfa9c23932ee1094fbffbcab2aa68":()=>e.LV});var d=c(27989),e=c(76862),f=c(78848),g=c(56493)},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46466:a=>{a.exports=require("node:stream/promises")},47860:(a,b,c)=>{c.d(b,{CJ:()=>k,fQ:()=>i,hW:()=>j});var d=c(80280),e=c(25533),f=c(1782),g=c(55511),h=c(18612);let i=9e4;async function j(a,b,c={}){let h=new Date,i=c.ok??!0;return await d.db.insert(e.pulse).values({id:(0,g.randomUUID)(),workspaceId:a,agentId:b,at:h,ok:i,latencyMs:c.latencyMs??0,note:c.note??""}),await d.db.update(e.agent).set({lastPulse:h,health:i?"alive":"stale"}).where((0,f.eq)(e.agent.id,b)),h}async function k(a,b){let c=await d.db.query.agent.findMany({where:(0,f.eq)(e.agent.workspaceId,a)}),g=[];for(let a of c){let{intervalSec:c,maxMissed:i}=function(a,b){let c=(0,h.sL)(a,`.claude/agents/${b}/pulse.md`)??"";return{intervalSec:parseInt(c.match(/intervalSec:\s*(\d+)/)?.[1]??"30",10)||30,maxMissed:parseInt(c.match(/maxMissed:\s*(\d+)/)?.[1]??"2",10)||2}}(b,a.handle),j=c*i*1e3,k=3*j,l=function(a,b,c){if(!a)return"down";let d=Date.now()-a.getTime();return d<=b?"alive":d<=c?"stale":"down"}(a.lastPulse??null,j,k);l!==a.health&&await d.db.update(e.agent).set({health:l}).where((0,f.eq)(e.agent.id,a.id)),g.push({a,health:l})}let i=new Date().toISOString(),j=`# Agent status
2
2
 
3
3
  _Updated by the pulse sweep at ${i}._
4
4
 
@@ -9,15 +9,15 @@ _Updated by the pulse sweep at ${i}._
9
9
  - Updated: ${i}
10
10
  - Agents: ${g.length} (alive ${k.alive} \xb7 stale ${k.stale} \xb7 down ${k.down})
11
11
  - Workspace config: ${l?"present":"MISSING"}
12
- `;try{(0,h.dx)(b,"Reports/agent-status.md",j),(0,h.dx)(b,"Reports/system-health.md",m)}catch{}}},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},56493:(a,b,c)=>{c.d(b,{aO:()=>H,AO:()=>M,EC:()=>O,uR:()=>L,Po:()=>J,iw:()=>P,xf:()=>Q,x1:()=>I,WU:()=>N});var d=c(52813),e=c(77598),f=c(1782),g=c(83550),h=c(80280),i=c(25533),j=c(95896),k=c(28969),l=c(55614),m=c(3188);async function n(a,b,c=12e3){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c,e=await fetch(a,{headers:b,signal:d.signal}),f=await e.text();try{c=JSON.parse(f)}catch{c=void 0}return{ok:e.ok,status:e.status,json:c,error:e.ok?void 0:f.slice(0,200)||e.statusText}}catch(a){return{ok:!1,status:0,error:a instanceof Error?a.message:String(a)}}finally{clearTimeout(e)}}function o(a){return a&&"object"==typeof a?Array.isArray(a.data)?a.data.length:Array.isArray(a.models)?a.models.length:0:0}async function p(a,b){let c=a.defaultAdapter;if(c.startsWith("cli_")){let a=(0,m.hW)(c);return await (0,m.$g)(a)?{ok:!0,count:(m.w5[c]??m.w5.cli_claude_code).length}:{ok:!1,count:0,error:`${a} CLI not found on PATH`}}if("local_ollama"===c||"ollama"===a.id||"ollama_openai"===a.id){let b=a.baseUrl||"http://127.0.0.1:11434",c=await n(b.replace(/\/$/,"")+"/api/tags",{});return c.ok?{ok:!0,count:o(c.json)}:{ok:!1,count:0,error:c.error||"Ollama not reachable at "+b}}if("local_runtime"===a.category){let c=a.baseUrl||"http://127.0.0.1:8080",d=await n(c.replace(/\/$/,"")+"/v1/models",b?{Authorization:"Bearer "+b}:{});return d.ok?{ok:!0,count:o(d.json)}:{ok:!1,count:0,error:d.error||"local runtime not reachable"}}if(!b)return{ok:!1,count:0,error:"no API key in vault — connect with a key first"};if("http_anthropic"===c||"anthropic"===a.id){let a=await n("https://api.anthropic.com/v1/models",{"x-api-key":b,"anthropic-version":"2023-06-01"});return a.ok?{ok:!0,count:o(a.json)}:{ok:!1,count:0,error:a.error||"auth failed ("+a.status+")"}}let d=(a.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),e=d.endsWith("/models")?d:d+(d.includes("/v1")?"/models":"/v1/models"),f=await n(e,{Authorization:"Bearer "+b});return f.ok?{ok:!0,count:o(f.json)}:{ok:!1,count:0,error:f.error||"auth failed ("+f.status+")"}}var q=c(73024),r=c(76760),s=c(18612);let t={anthropic:"anthropic",openai:"openai",google_gemini:"google",xai_grok:"xai",deepseek:"deepseek",cohere:"cohere",groq:"groq",nvidia_nim:"nvidia",together:"togetherai",fireworks:"fireworks-ai",cerebras:"cerebras",perplexity:"perplexity",openrouter:"openrouter",mistral:"mistral",moonshot:"moonshotai",dashscope:"alibaba",zhipu:"zhipuai",azure_openai:"azure",aws_bedrock:"amazon-bedrock",vertex_ai:"google-vertex",claude_code:"anthropic",gemini_cli:"google"};function u(a){return t[a]?t[a]:a.replace(/_(grok|gemini|nim|cli|openai|api|server|rt)$/g,"").replace(/_/g,"-")}let v={anthropic:["sonnet-4","sonnet","opus-4","opus"],openai:["gpt-5.2","gpt-5.1","gpt-5","gpt-4.1","o4"],google:["gemini-3-pro","gemini-3","gemini-2.5-pro","pro"],xai:["grok-4","grok-3","grok"],groq:["llama-4","llama-3.3","llama-3.1"],deepseek:["deepseek-chat","deepseek-v3","deepseek-reasoner"],mistral:["mistral-large","mistral-medium"],openrouter:["claude-sonnet","gpt-5","gemini"]},w=(a,b,c,d,e,f,g,h)=>({id:a,name:b,context:c,outputLimit:d,inputCost:e,outputCost:f,caps:{reasoning:!!g.reasoning,tools:!!g.tools,vision:!!g.vision},released:h}),x={anthropic:[w("claude-opus-4-8","Claude Opus 4.8",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("claude-opus-4-7","Claude Opus 4.7",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("claude-sonnet-4-6","Claude Sonnet 4.6",1e6,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-01-15"),w("claude-haiku-4-5","Claude Haiku 4.5",2e5,32e3,1,5,{tools:!0,vision:!0},"2025-10-01")],openai:[w("gpt-5.2","GPT-5.2",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2026-03-01"),w("gpt-5.1","GPT-5.1",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("gpt-5","GPT-5",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-08-01"),w("o4-mini","o4-mini",2e5,1e5,1.1,4.4,{reasoning:!0,tools:!0},"2025-04-01")],google:[w("gemini-3-pro","Gemini 3 Pro",2e6,64e3,2,12,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("gemini-3-flash","Gemini 3 Flash",1e6,64e3,.3,2.5,{tools:!0,vision:!0},"2026-02-01"),w("gemini-2.5-pro","Gemini 2.5 Pro",2e6,64e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-06-01")],xai:[w("grok-4.3","Grok 4.3",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("grok-4","Grok 4",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2025-09-01"),w("grok-3","Grok 3",131072,32e3,3,15,{tools:!0,vision:!0},"2025-02-01")],deepseek:[w("deepseek-chat","DeepSeek Chat",128e3,8e3,.27,1.1,{tools:!0},"2025-12-01"),w("deepseek-reasoner","DeepSeek Reasoner",128e3,64e3,.55,2.19,{reasoning:!0,tools:!0},"2025-12-01")],groq:[w("llama-4-scout","Llama 4 Scout",131072,8e3,.11,.34,{tools:!0,vision:!0},"2025-04-01"),w("llama-3.3-70b","Llama 3.3 70B",131072,32e3,.59,.79,{tools:!0},"2024-12-01")]},y=null;function z(){return(0,r.join)((0,s.r$)(),"cache","models-dev.json")}async function A(){try{let a=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4),headers:{accept:"application/json"}});if(!a.ok)return null;let b=await a.json();if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b)){let b=d?.models,e=function(a){if(!a||"object"!=typeof a)return[];let b=[];for(let[c,d]of Object.entries(a)){let a=d??{},e=String(a.id??c),f=e.includes("/")?e.split("/").pop():e;if(!f)continue;let g=a.modalities??{},h=Array.isArray(g.input)?g.input:[],i=a.limit??{},j=a.cost??{},k={reasoning:!0===a.reasoning,tools:!0===a.tool_call,vision:!0===a.attachment||h.includes("image")};b.push({id:f,name:String(a.name??f),context:Number(i.context??0)||0,outputLimit:Number(i.output??0)||0,inputCost:Number(j.input??0)||0,outputCost:Number(j.output??0)||0,caps:k,released:"string"==typeof a.release_date?a.release_date:""})}return b}(b);e.length&&(c[a]=e)}return Object.keys(c).length?c:null}catch{return null}}async function B(){if(y&&Date.now()-y.at<864e5)return y.data;let a=function(){try{let a=z();if(!(0,q.existsSync)(a))return null;let b=JSON.parse((0,q.readFileSync)(a,"utf8"));if(!b?.data||"object"!=typeof b.data)return null;return{at:Number(b.at??(0,q.statSync)(a).mtimeMs),data:b.data}}catch{return null}}();if(a&&Date.now()-a.at<864e5)return y=a,a.data;let b=await A();if(b){y={at:Date.now(),data:b};try{(0,q.mkdirSync)((0,r.join)((0,s.r$)(),"cache"),{recursive:!0}),(0,q.writeFileSync)(z(),JSON.stringify({at:Date.now(),data:b}),"utf8")}catch{}return b}return a?(y=a,a.data):{}}async function C(a){let b=u(a),c=await B();return c[b]?.length?c[b]:x[b]??[]}async function D(a,b,c=9e3){try{let d=await fetch(a,{headers:b,signal:AbortSignal.timeout(c)});if(!d.ok)return null;return await d.json()}catch{return null}}async function E(a){let{catalogId:b,adapter:c,baseUrl:d,apiKey:e}=a;if(c.startsWith("cli_"))return"cli_opencode"===c?(await (0,m.ZB)("opencode")).map(a=>({id:a})):"cli_aider"===c?(await (0,m.ZB)("aider")).map(a=>({id:a})):null;if(/ollama/i.test(b)||c.includes("ollama")){let a=(d||"http://127.0.0.1:11434").replace(/\/$/,"").replace(/\/v1$/,""),b=await D(`${a}/api/tags`,{});return b?(b.models??[]).map(a=>({id:String(a.name??"")})).filter(a=>a.id):[]}if(!d)return null;let f=d.replace(/\/$/,""),g="http_anthropic"===c||"anthropic"===b,h=g?"https://api.anthropic.com/v1/models":f.endsWith("/models")?f:f+(f.includes("/v1")?"/models":"/v1/models"),i=g?e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{}:e?{authorization:`Bearer ${e}`}:{},j=await D(h,i);return j?(Array.isArray(j.data)?j.data:Array.isArray(j.models)?j.models:[]).map(a=>{let b=String(a.id??a.name??"");if(!b)return null;let c={id:b};"string"==typeof a.display_name?c.name=a.display_name:"string"==typeof a.name&&(c.name=a.name),"number"==typeof a.context_length&&(c.context=a.context_length);let d=a.pricing;if(d){let a=Number(d.prompt),b=Number(d.completion);Number.isFinite(a)&&a>0&&(c.inputCost=1e6*a),Number.isFinite(b)&&b>0&&(c.outputCost=1e6*b)}return c}).filter(a=>!!a).slice(0,200):[]}async function F(){let a=await B(),b=new Map;for(let c of Object.values(a))for(let a of c){let c=a.id.toLowerCase();b.has(c)||b.set(c,a)}return b}async function G(a,b){let c=await C(a);if(!b||0===b.length)return c;let d=new Map;for(let a of c)d.set(a.id.toLowerCase(),a);let e=await F(),f=a=>{let b=a.toLowerCase(),c=a.includes("/")?a.split("/").pop().toLowerCase():b;return d.get(b)??d.get(c)??e.get(b)??e.get(c)},g=[];for(let a of b){let b=f(a.id);g.push({id:a.id,name:a.name||b?.name||a.id,context:a.context??b?.context??0,outputLimit:b?.outputLimit??0,inputCost:a.inputCost??b?.inputCost??0,outputCost:a.outputCost??b?.outputCost??0,caps:b?.caps??{reasoning:!1,tools:!1,vision:!1},released:b?.released??""})}return g}async function H(a,b){let{workspace:c}=await (0,j.nP)(),d=(0,l.kH)(a);if(!d)return;let f=(0,e.randomUUID)();await h.db.insert(i.provider).values({id:f,workspaceId:c.id,catalogId:a,adapter:d.defaultAdapter,kind:"cli"===d.category?"cli":"local_runtime"===d.category?"local":"cloud",auth:d.connectionTypes.includes("api_key")?"api_key":d.connectionTypes[0],status:"needs_sync",syncStatus:d.supportsModelSync?"implemented":"manual"}),b&&await (0,k.IW)(c.id,`${a}_api_key`,b,f),(0,g.revalidatePath)("/models"),await I(f)}async function I(a){let b,{workspace:c}=await (0,j.nP)(),[d]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,c.id)));if(!d)return{ok:!1,error:"not found"};let e=(0,l.kH)(d.catalogId);if(!e)return{ok:!1,error:"unknown provider"};let n=await (0,k.r6)(c.id,`${d.catalogId}_api_key`),o=await p(e,n),q=null;if("cli"===e.category){let a=(0,m.hW)(e.defaultAdapter);b=(q=await (0,m.$g)(a).catch(()=>null))?await (0,m.Kp)(a).catch(()=>"unknown"):"needs_login"}else b="local_runtime"===e.category?o.ok?"ready":"unknown":n&&o.ok?"ready":"needs_key";return await h.db.update(i.provider).set({status:o.ok?"connected":"error",modelCount:o.count,lastSync:new Date,cliVersion:q,authState:b}).where((0,f.eq)(i.provider.id,a)),o.ok&&await J(a).catch(()=>{}),(0,g.revalidatePath)("/models"),o}async function J(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,count:0,error:"not found"};let d=await K(c);return(0,g.revalidatePath)("/models"),d}async function K(a){let b,c,d,g=(0,l.kH)(a.catalogId);if(!g)return{ok:!1,count:0,error:"unknown provider"};let j=await (0,k.r6)(a.workspaceId,`${a.catalogId}_api_key`),n="cli"===g.category;try{b=await E({catalogId:a.catalogId,adapter:a.adapter,baseUrl:g.baseUrl,apiKey:j})}catch{b=null}if(n){let e=(0,m.hW)(a.adapter);d=(c=await (0,m.$g)(e).catch(()=>null))?await (0,m.Kp)(e).catch(()=>"unknown"):"needs_login",null===b&&(b=(m.w5[a.adapter]??[]).filter(a=>"(default)"!==a).map(a=>({id:a})))}if(null===b)return{ok:!0,count:0};let o=await G(a.catalogId,b),p=new Date,q=o.length?function(a,b){if(!b.length)return"";let c=v[u(a)];if(c)for(let a of c){let c=b.filter(b=>b.id.toLowerCase().includes(a));if(c.length)return c.sort((a,b)=>(b.released||"").localeCompare(a.released||"")),c[0].id}let d=b.filter(a=>a.released);return d.length?(d.sort((a,b)=>b.released.localeCompare(a.released)),d[0].id):b[0].id}(a.catalogId,o):null;if(o.length)await h.db.delete(i.providerModel).where((0,f.eq)(i.providerModel.providerId,a.id)),await h.db.insert(i.providerModel).values(o.map(b=>({id:(0,e.randomUUID)(),workspaceId:a.workspaceId,providerId:a.id,catalogId:a.catalogId,modelId:b.id,name:b.name,context:b.context,outputLimit:b.outputLimit,inputCost:b.inputCost,outputCost:b.outputCost,caps:b.caps,released:b.released,isDefault:b.id===q,lastSeen:p})));else if(!n)return{ok:!1,count:0,error:"no models returned"};let r=n&&!c?"needs_sync":"connected";return await h.db.update(i.provider).set({status:r,modelCount:o.length||(n?a.modelCount:0),lastSync:p,defaultModel:q||a.defaultModel,...n?{cliVersion:c??null,authState:d??null}:{}}).where((0,f.eq)(i.provider.id,a.id)),{ok:!0,count:o.length}}async function L(a=12){let b,c=new Date(Date.now()-60*a*6e4);try{b=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.status,"connected"),(0,f.or)((0,f.kZ)(i.provider.lastSync),(0,f.lt)(i.provider.lastSync,c))))}catch{return{refreshed:0}}let d=0;for(let a of b.slice(0,50))try{let b=await K(a);b.ok&&b.count>0&&d++}catch{}return{refreshed:d}}async function M(a){let{workspace:b}=await (0,j.nP)(),c=(await h.db.select().from(i.providerModel).where((0,f.Uo)((0,f.eq)(i.providerModel.providerId,a),(0,f.eq)(i.providerModel.workspaceId,b.id)))).map(a=>({id:a.modelId,name:a.name,context:a.context,outputLimit:a.outputLimit,inputCost:a.inputCost,outputCost:a.outputCost,caps:a.caps??{reasoning:!1,tools:!1,vision:!1},released:a.released,isDefault:a.isDefault}));return c.sort((a,b)=>Number(b.isDefault)-Number(a.isDefault)||(b.released||"").localeCompare(a.released||"")||a.name.localeCompare(b.name)),{models:c}}async function N(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d)return{ok:!1,error:"unknown provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),m=await p(d,e);return await h.db.update(i.provider).set({status:m.ok?"connected":"error"}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"),{ok:m.ok,error:m.error}}async function O(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{models:[],error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d?.baseUrl)return{models:[],error:"no public endpoint for this provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),g=d.baseUrl.replace(/\/$/,"");try{let a=/ollama/i.test(c.catalogId)||c.adapter.includes("ollama")?`${g.replace(/\/v1$/,"")}/api/tags`:`${g}/models`,b=await fetch(a,{headers:e?{authorization:`Bearer ${e}`}:{},signal:AbortSignal.timeout(8e3)});if(!b.ok)return{models:[],error:`endpoint ${b.status}`};let d=await b.json();return{models:(d.data??d.models??[]).map(a=>a.id??a.name??"").filter(Boolean).slice(0,80)}}catch(b){let a=String(b instanceof Error?b.message:b);return{models:[],error:/abort|fetch failed|ECONN/i.test(a)?"endpoint unreachable":a}}}async function P(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.delete(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id))),(0,g.revalidatePath)("/models")}async function Q(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&(await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.update(i.provider).set({auth:"none",status:"needs_sync",modelCount:0}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"))}(0,c(29635).D)([H,I,J,L,M,N,O,P,Q]),(0,d.A)(H,"606ee3015c15d64a6447be5a477ad2e4e2700602d1",null),(0,d.A)(I,"403b51a6e3814811eb5e160907a14c0a84d888d941",null),(0,d.A)(J,"40c60819b3905073c1708002e6e335ea61da55a67d",null),(0,d.A)(L,"40b3e3f85ab33065cf86f445693145ba3f67793a04",null),(0,d.A)(M,"403f8b2497a3ed78247aa24d51795dff1202f176ae",null),(0,d.A)(N,"40592a15b4e7f992fd79bab5f6004760ff7cab51c4",null),(0,d.A)(O,"40baab7fec3d3bb2a162dd4e9172a0b1bb11225d0a",null),(0,d.A)(P,"402090fd73cce39233571ee1eddc39926755addafe",null),(0,d.A)(Q,"40c644992d77c8021adbcec6b946d7f907b921603a",null)},57075:a=>{a.exports=require("node:stream")},61419:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>aM,patchFetch:()=>aL,routeModule:()=>aH,serverHooks:()=>aK,workAsyncStorage:()=>aI,workUnitAsyncStorage:()=>aJ});var d={};c.r(d),c.d(d,{POST:()=>aG});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(80280),x=c(25533),y=c(1782),z=c(89611),A=c(55511),B=c(47860),C=c(3188),D=c(34302),E=c(26288),F=c(82550),G=c(6404),H=c(99546),I=c(12867),J=c(6873);let K=["developer.mozilla.org","web.dev","owasp.org","cheatsheetseries.owasp.org","www.w3.org","docs.python.org","nodejs.org","go.dev","doc.rust-lang.org","kubernetes.io","docs.docker.com","www.npmjs.com","pypi.org"];async function L(a,b,c,d){var e;let f;try{f=new URL(c)}catch{return{ok:!1,reason:"invalid url"}}if("https:"!==f.protocol&&"http:"!==f.protocol)return{ok:!1,reason:"non-http url"};let g=new Set([...K,...(0,J.et)(b)].map(a=>a.toLowerCase()));if(!function(a,b){let c=a.toLowerCase().replace(/\.$/,"");for(let a of b)if(c===a||c.endsWith("."+a))return!0;return!1}(f.host,g))return{ok:!1,reason:`host not on the official-docs allowlist (${f.host})`};let h="";try{let a=new AbortController,b=setTimeout(()=>a.abort(),15e3),c=await fetch(f.toString(),{signal:a.signal,redirect:"follow",headers:{"user-agent":"Constella-Research/1.0",accept:"text/html,application/xhtml+xml,*/*"}});if(clearTimeout(b),!c.ok)return{ok:!1,reason:`http ${c.status}`};if(!/text\/|html|xml|json/i.test(c.headers.get("content-type")??""))return{ok:!1,reason:"non-text content"};h=(await c.text()).slice(0,15e5)}catch(a){return{ok:!1,reason:String(a instanceof Error?a.message:a).slice(0,120)}}let{title:i,text:j}=(e=h,{title:e.match(/<title[^>]*>([\s\S]*?)<\/title>/i)?.[1]?.replace(/\s+/g," ").trim()??"",text:e.replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<\/(p|div|li|h[1-6]|tr|section|article)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#39;|&rsquo;|&lsquo;/g,"'").replace(/&quot;|&ldquo;|&rdquo;/g,'"').replace(/[ \t]+/g," ").replace(/\n{3,}/g,"\n\n").trim()});return j.length<80?{ok:!1,reason:"empty page"}:(await (0,I.ru)(a,[{type:"doc",title:(i||`${f.host}${f.pathname}`).slice(0,200),summary:j.slice(0,1e3),body:`Official documentation — researched and cached for reuse.
12
+ `;try{(0,h.dx)(b,"Reports/agent-status.md",j),(0,h.dx)(b,"Reports/system-health.md",m)}catch{}}},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},56493:(a,b,c)=>{c.d(b,{aO:()=>H,AO:()=>M,EC:()=>O,uR:()=>L,Po:()=>J,iw:()=>P,xf:()=>Q,x1:()=>I,WU:()=>N});var d=c(52813),e=c(77598),f=c(1782),g=c(83550),h=c(80280),i=c(25533),j=c(95896),k=c(28969),l=c(55614),m=c(3188);async function n(a,b,c=12e3){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c,e=await fetch(a,{headers:b,signal:d.signal}),f=await e.text();try{c=JSON.parse(f)}catch{c=void 0}return{ok:e.ok,status:e.status,json:c,error:e.ok?void 0:f.slice(0,200)||e.statusText}}catch(a){return{ok:!1,status:0,error:a instanceof Error?a.message:String(a)}}finally{clearTimeout(e)}}function o(a){return a&&"object"==typeof a?Array.isArray(a.data)?a.data.length:Array.isArray(a.models)?a.models.length:0:0}async function p(a,b){let c=a.defaultAdapter;if(c.startsWith("cli_")){let a=(0,m.hW)(c);return await (0,m.$g)(a)?{ok:!0,count:(m.w5[c]??m.w5.cli_claude_code).length}:{ok:!1,count:0,error:`${a} CLI not found on PATH`}}if("local_ollama"===c||"ollama"===a.id||"ollama_openai"===a.id){let b=a.baseUrl||"http://127.0.0.1:11434",c=await n(b.replace(/\/$/,"")+"/api/tags",{});return c.ok?{ok:!0,count:o(c.json)}:{ok:!1,count:0,error:c.error||"Ollama not reachable at "+b}}if("local_runtime"===a.category){let c=a.baseUrl||"http://127.0.0.1:8080",d=await n(c.replace(/\/$/,"")+"/v1/models",b?{Authorization:"Bearer "+b}:{});return d.ok?{ok:!0,count:o(d.json)}:{ok:!1,count:0,error:d.error||"local runtime not reachable"}}if(!b)return{ok:!1,count:0,error:"no API key in vault — connect with a key first"};if("http_anthropic"===c||"anthropic"===a.id){let a=await n("https://api.anthropic.com/v1/models",{"x-api-key":b,"anthropic-version":"2023-06-01"});return a.ok?{ok:!0,count:o(a.json)}:{ok:!1,count:0,error:a.error||"auth failed ("+a.status+")"}}let d=(a.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),e=d.endsWith("/models")?d:d+(d.includes("/v1")?"/models":"/v1/models"),f=await n(e,{Authorization:"Bearer "+b});return f.ok?{ok:!0,count:o(f.json)}:{ok:!1,count:0,error:f.error||"auth failed ("+f.status+")"}}var q=c(73024),r=c(76760),s=c(18612);let t={anthropic:"anthropic",openai:"openai",google_gemini:"google",xai_grok:"xai",deepseek:"deepseek",cohere:"cohere",groq:"groq",nvidia_nim:"nvidia",together:"togetherai",fireworks:"fireworks-ai",cerebras:"cerebras",perplexity:"perplexity",openrouter:"openrouter",mistral:"mistral",moonshot:"moonshotai",dashscope:"alibaba",zhipu:"zhipuai",azure_openai:"azure",aws_bedrock:"amazon-bedrock",vertex_ai:"google-vertex",claude_code:"anthropic",gemini_cli:"google",codex_cli:"openai"};function u(a){return t[a]?t[a]:a.replace(/_(grok|gemini|nim|cli|openai|api|server|rt)$/g,"").replace(/_/g,"-")}let v={anthropic:["sonnet-4","sonnet","opus-4","opus"],openai:["gpt-5.2","gpt-5.1","gpt-5","gpt-4.1","o4"],google:["gemini-3-pro","gemini-3","gemini-2.5-pro","pro"],xai:["grok-4","grok-3","grok"],groq:["llama-4","llama-3.3","llama-3.1"],deepseek:["deepseek-chat","deepseek-v3","deepseek-reasoner"],mistral:["mistral-large","mistral-medium"],openrouter:["claude-sonnet","gpt-5","gemini"]},w=(a,b,c,d,e,f,g,h)=>({id:a,name:b,context:c,outputLimit:d,inputCost:e,outputCost:f,caps:{reasoning:!!g.reasoning,tools:!!g.tools,vision:!!g.vision},released:h}),x={anthropic:[w("claude-opus-4-8","Claude Opus 4.8",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("claude-opus-4-7","Claude Opus 4.7",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("claude-sonnet-4-6","Claude Sonnet 4.6",1e6,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-01-15"),w("claude-haiku-4-5","Claude Haiku 4.5",2e5,32e3,1,5,{tools:!0,vision:!0},"2025-10-01")],openai:[w("gpt-5.2","GPT-5.2",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2026-03-01"),w("gpt-5.1","GPT-5.1",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("gpt-5","GPT-5",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-08-01"),w("o4-mini","o4-mini",2e5,1e5,1.1,4.4,{reasoning:!0,tools:!0},"2025-04-01")],google:[w("gemini-3-pro","Gemini 3 Pro",2e6,64e3,2,12,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("gemini-3-flash","Gemini 3 Flash",1e6,64e3,.3,2.5,{tools:!0,vision:!0},"2026-02-01"),w("gemini-2.5-pro","Gemini 2.5 Pro",2e6,64e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-06-01")],xai:[w("grok-4.3","Grok 4.3",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("grok-4","Grok 4",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2025-09-01"),w("grok-3","Grok 3",131072,32e3,3,15,{tools:!0,vision:!0},"2025-02-01")],deepseek:[w("deepseek-chat","DeepSeek Chat",128e3,8e3,.27,1.1,{tools:!0},"2025-12-01"),w("deepseek-reasoner","DeepSeek Reasoner",128e3,64e3,.55,2.19,{reasoning:!0,tools:!0},"2025-12-01")],groq:[w("llama-4-scout","Llama 4 Scout",131072,8e3,.11,.34,{tools:!0,vision:!0},"2025-04-01"),w("llama-3.3-70b","Llama 3.3 70B",131072,32e3,.59,.79,{tools:!0},"2024-12-01")]},y=null;function z(){return(0,r.join)((0,s.r$)(),"cache","models-dev.json")}async function A(){try{let a=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4),headers:{accept:"application/json"}});if(!a.ok)return null;let b=await a.json();if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b)){let b=d?.models,e=function(a){if(!a||"object"!=typeof a)return[];let b=[];for(let[c,d]of Object.entries(a)){let a=d??{},e=String(a.id??c),f=e.includes("/")?e.split("/").pop():e;if(!f)continue;let g=a.modalities??{},h=Array.isArray(g.input)?g.input:[],i=a.limit??{},j=a.cost??{},k={reasoning:!0===a.reasoning,tools:!0===a.tool_call,vision:!0===a.attachment||h.includes("image")};b.push({id:f,name:String(a.name??f),context:Number(i.context??0)||0,outputLimit:Number(i.output??0)||0,inputCost:Number(j.input??0)||0,outputCost:Number(j.output??0)||0,caps:k,released:"string"==typeof a.release_date?a.release_date:""})}return b}(b);e.length&&(c[a]=e)}return Object.keys(c).length?c:null}catch{return null}}async function B(){if(y&&Date.now()-y.at<864e5)return y.data;let a=function(){try{let a=z();if(!(0,q.existsSync)(a))return null;let b=JSON.parse((0,q.readFileSync)(a,"utf8"));if(!b?.data||"object"!=typeof b.data)return null;return{at:Number(b.at??(0,q.statSync)(a).mtimeMs),data:b.data}}catch{return null}}();if(a&&Date.now()-a.at<864e5)return y=a,a.data;let b=await A();if(b){y={at:Date.now(),data:b};try{(0,q.mkdirSync)((0,r.join)((0,s.r$)(),"cache"),{recursive:!0}),(0,q.writeFileSync)(z(),JSON.stringify({at:Date.now(),data:b}),"utf8")}catch{}return b}return a?(y=a,a.data):{}}async function C(a){let b=u(a),c=await B();return c[b]?.length?c[b]:x[b]??[]}async function D(a,b,c=9e3){try{let d=await fetch(a,{headers:b,signal:AbortSignal.timeout(c)});if(!d.ok)return null;return await d.json()}catch{return null}}async function E(a){let{catalogId:b,adapter:c,baseUrl:d,apiKey:e}=a;if(c.startsWith("cli_"))return"cli_opencode"===c?(await (0,m.ZB)("opencode")).map(a=>({id:a})):"cli_aider"===c?(await (0,m.ZB)("aider")).map(a=>({id:a})):null;if(/ollama/i.test(b)||c.includes("ollama")){let a=(d||"http://127.0.0.1:11434").replace(/\/$/,"").replace(/\/v1$/,""),b=await D(`${a}/api/tags`,{});return b?(b.models??[]).map(a=>({id:String(a.name??"")})).filter(a=>a.id):[]}if(!d)return null;let f=d.replace(/\/$/,""),g="http_anthropic"===c||"anthropic"===b,h=g?"https://api.anthropic.com/v1/models":f.endsWith("/models")?f:f+(f.includes("/v1")?"/models":"/v1/models"),i=g?e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{}:e?{authorization:`Bearer ${e}`}:{},j=await D(h,i);return j?(Array.isArray(j.data)?j.data:Array.isArray(j.models)?j.models:[]).map(a=>{let b=String(a.id??a.name??"");if(!b)return null;let c={id:b};"string"==typeof a.display_name?c.name=a.display_name:"string"==typeof a.name&&(c.name=a.name),"number"==typeof a.context_length&&(c.context=a.context_length);let d=a.pricing;if(d){let a=Number(d.prompt),b=Number(d.completion);Number.isFinite(a)&&a>0&&(c.inputCost=1e6*a),Number.isFinite(b)&&b>0&&(c.outputCost=1e6*b)}return c}).filter(a=>!!a).slice(0,200):[]}async function F(){let a=await B(),b=new Map;for(let c of Object.values(a))for(let a of c){let c=a.id.toLowerCase();b.has(c)||b.set(c,a)}return b}async function G(a,b){let c=await C(a);if(!b||0===b.length)return c;let d=new Map;for(let a of c)d.set(a.id.toLowerCase(),a);let e=await F(),f=a=>{let b=a.toLowerCase(),c=a.includes("/")?a.split("/").pop().toLowerCase():b;return d.get(b)??d.get(c)??e.get(b)??e.get(c)},g=[];for(let a of b){let b=f(a.id);g.push({id:a.id,name:a.name||b?.name||a.id,context:a.context??b?.context??0,outputLimit:b?.outputLimit??0,inputCost:a.inputCost??b?.inputCost??0,outputCost:a.outputCost??b?.outputCost??0,caps:b?.caps??{reasoning:!1,tools:!1,vision:!1},released:b?.released??""})}return g}async function H(a,b){let{workspace:c}=await (0,j.nP)(),d=(0,l.kH)(a);if(!d)return;let f=(0,e.randomUUID)();await h.db.insert(i.provider).values({id:f,workspaceId:c.id,catalogId:a,adapter:d.defaultAdapter,kind:"cli"===d.category?"cli":"local_runtime"===d.category?"local":"cloud",auth:d.connectionTypes.includes("api_key")?"api_key":d.connectionTypes[0],status:"needs_sync",syncStatus:d.supportsModelSync?"implemented":"manual"}),b&&await (0,k.IW)(c.id,`${a}_api_key`,b,f),(0,g.revalidatePath)("/models"),await I(f)}async function I(a){let b,{workspace:c}=await (0,j.nP)(),[d]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,c.id)));if(!d)return{ok:!1,error:"not found"};let e=(0,l.kH)(d.catalogId);if(!e)return{ok:!1,error:"unknown provider"};let n=await (0,k.r6)(c.id,`${d.catalogId}_api_key`),o=await p(e,n),q=null;if("cli"===e.category){let a=(0,m.hW)(e.defaultAdapter);b=(q=await (0,m.$g)(a).catch(()=>null))?await (0,m.Kp)(a).catch(()=>"unknown"):"needs_login"}else b="local_runtime"===e.category?o.ok?"ready":"unknown":n&&o.ok?"ready":"needs_key";return await h.db.update(i.provider).set({status:o.ok?"connected":"error",modelCount:o.count,lastSync:new Date,cliVersion:q,authState:b}).where((0,f.eq)(i.provider.id,a)),o.ok&&await J(a).catch(()=>{}),(0,g.revalidatePath)("/models"),o}async function J(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,count:0,error:"not found"};let d=await K(c);return(0,g.revalidatePath)("/models"),d}async function K(a){let b,c,d,g=(0,l.kH)(a.catalogId);if(!g)return{ok:!1,count:0,error:"unknown provider"};let j=await (0,k.r6)(a.workspaceId,`${a.catalogId}_api_key`),n="cli"===g.category;try{b=await E({catalogId:a.catalogId,adapter:a.adapter,baseUrl:g.baseUrl,apiKey:j})}catch{b=null}if(n){let e=(0,m.hW)(a.adapter);d=(c=await (0,m.$g)(e).catch(()=>null))?await (0,m.Kp)(e).catch(()=>"unknown"):"needs_login",null===b&&(b=(m.w5[a.adapter]??[]).filter(a=>"(default)"!==a).map(a=>({id:a})))}if(null===b)return{ok:!0,count:0};let o=await G(a.catalogId,b),p=new Date,q=o.length?function(a,b){if(!b.length)return"";let c=v[u(a)];if(c)for(let a of c){let c=b.filter(b=>b.id.toLowerCase().includes(a));if(c.length)return c.sort((a,b)=>(b.released||"").localeCompare(a.released||"")),c[0].id}let d=b.filter(a=>a.released);return d.length?(d.sort((a,b)=>b.released.localeCompare(a.released)),d[0].id):b[0].id}(a.catalogId,o):null;if(o.length)await h.db.delete(i.providerModel).where((0,f.eq)(i.providerModel.providerId,a.id)),await h.db.insert(i.providerModel).values(o.map(b=>({id:(0,e.randomUUID)(),workspaceId:a.workspaceId,providerId:a.id,catalogId:a.catalogId,modelId:b.id,name:b.name,context:b.context,outputLimit:b.outputLimit,inputCost:b.inputCost,outputCost:b.outputCost,caps:b.caps,released:b.released,isDefault:b.id===q,lastSeen:p})));else if(!n)return{ok:!1,count:0,error:"no models returned"};let r=n&&!c?"needs_sync":"connected";return await h.db.update(i.provider).set({status:r,modelCount:o.length||(n?a.modelCount:0),lastSync:p,defaultModel:q||a.defaultModel,...n?{cliVersion:c??null,authState:d??null}:{}}).where((0,f.eq)(i.provider.id,a.id)),{ok:!0,count:o.length}}async function L(a=12){let b,c=new Date(Date.now()-60*a*6e4);try{b=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.status,"connected"),(0,f.or)((0,f.kZ)(i.provider.lastSync),(0,f.lt)(i.provider.lastSync,c))))}catch{return{refreshed:0}}let d=0;for(let a of b.slice(0,50))try{let b=await K(a);b.ok&&b.count>0&&d++}catch{}return{refreshed:d}}async function M(a){let{workspace:b}=await (0,j.nP)(),c=(await h.db.select().from(i.providerModel).where((0,f.Uo)((0,f.eq)(i.providerModel.providerId,a),(0,f.eq)(i.providerModel.workspaceId,b.id)))).map(a=>({id:a.modelId,name:a.name,context:a.context,outputLimit:a.outputLimit,inputCost:a.inputCost,outputCost:a.outputCost,caps:a.caps??{reasoning:!1,tools:!1,vision:!1},released:a.released,isDefault:a.isDefault}));return c.sort((a,b)=>Number(b.isDefault)-Number(a.isDefault)||(b.released||"").localeCompare(a.released||"")||a.name.localeCompare(b.name)),{models:c}}async function N(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d)return{ok:!1,error:"unknown provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),m=await p(d,e);return await h.db.update(i.provider).set({status:m.ok?"connected":"error"}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"),{ok:m.ok,error:m.error}}async function O(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{models:[],error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d?.baseUrl)return{models:[],error:"no public endpoint for this provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),g=d.baseUrl.replace(/\/$/,"");try{let a=/ollama/i.test(c.catalogId)||c.adapter.includes("ollama")?`${g.replace(/\/v1$/,"")}/api/tags`:`${g}/models`,b=await fetch(a,{headers:e?{authorization:`Bearer ${e}`}:{},signal:AbortSignal.timeout(8e3)});if(!b.ok)return{models:[],error:`endpoint ${b.status}`};let d=await b.json();return{models:(d.data??d.models??[]).map(a=>a.id??a.name??"").filter(Boolean).slice(0,80)}}catch(b){let a=String(b instanceof Error?b.message:b);return{models:[],error:/abort|fetch failed|ECONN/i.test(a)?"endpoint unreachable":a}}}async function P(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.delete(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id))),(0,g.revalidatePath)("/models")}async function Q(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&(await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.update(i.provider).set({auth:"none",status:"needs_sync",modelCount:0}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"))}(0,c(29635).D)([H,I,J,L,M,N,O,P,Q]),(0,d.A)(H,"60f96bab69a09e9fcf636f80db1eff87d3be983a60",null),(0,d.A)(I,"4005f3f9461c2e6b2fecdac81c822e2481fbdbaec1",null),(0,d.A)(J,"408898da73d5e0af066104c62997b817201c0a99cf",null),(0,d.A)(L,"40897071ec7c50dcab7572d01ec05ab9ed5da6d715",null),(0,d.A)(M,"403a1916644d7877e6f55e5ed65de73f9157ca3977",null),(0,d.A)(N,"40c4cc3f2d97110b2d69610739ee46dbe5a2a37d85",null),(0,d.A)(O,"409ff004d8d4df25bdce5af6d94dd7d215787a3304",null),(0,d.A)(P,"4004673068530656edd28ca2b130a1096f274e2cde",null),(0,d.A)(Q,"403c1d8c05fcc53bd28044c5b835d4b402564a964f",null)},57075:a=>{a.exports=require("node:stream")},61419:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>aO,patchFetch:()=>aN,routeModule:()=>aJ,serverHooks:()=>aM,workAsyncStorage:()=>aK,workUnitAsyncStorage:()=>aL});var d={};c.r(d),c.d(d,{POST:()=>aI});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(80280),x=c(25533),y=c(1782),z=c(89611),A=c(55511),B=c(47860),C=c(3188),D=c(34302),E=c(26288),F=c(82550),G=c(6404),H=c(99546),I=c(12867),J=c(6873);let K=["developer.mozilla.org","web.dev","owasp.org","cheatsheetseries.owasp.org","www.w3.org","docs.python.org","nodejs.org","go.dev","doc.rust-lang.org","kubernetes.io","docs.docker.com","www.npmjs.com","pypi.org"];function L(a,b){let c=a.toLowerCase().replace(/\.$/,"");for(let a of b)if(c===a||c.endsWith("."+a))return!0;return!1}async function M(a,b,c,d){var e;let f;try{f=new URL(c)}catch{return{ok:!1,reason:"invalid url"}}if("https:"!==f.protocol&&"http:"!==f.protocol)return{ok:!1,reason:"non-http url"};let g=new Set([...K,...(0,J.et)(b)].map(a=>a.toLowerCase()));if(!L(f.hostname,g))return{ok:!1,reason:`host not on the official-docs allowlist (${f.hostname})`};let h="";try{let a=new AbortController,b=setTimeout(()=>a.abort(),15e3),c=await fetch(f.toString(),{signal:a.signal,redirect:"follow",headers:{"user-agent":"Constella-Research/1.0",accept:"text/html,application/xhtml+xml,*/*"}});if(clearTimeout(b),!c.ok)return{ok:!1,reason:`http ${c.status}`};let d=f.hostname;try{d=new URL(c.url).hostname}catch{}if(!L(d,g))return{ok:!1,reason:`redirected off the official-docs allowlist (${d})`};if(!/text\/|html|xml|json/i.test(c.headers.get("content-type")??""))return{ok:!1,reason:"non-text content"};h=(await c.text()).slice(0,15e5)}catch(a){return{ok:!1,reason:String(a instanceof Error?a.message:a).slice(0,120)}}let{title:i,text:j}=(e=h,{title:e.match(/<title[^>]*>([\s\S]*?)<\/title>/i)?.[1]?.replace(/\s+/g," ").trim()??"",text:e.replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<\/(p|div|li|h[1-6]|tr|section|article)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#39;|&rsquo;|&lsquo;/g,"'").replace(/&quot;|&ldquo;|&rdquo;/g,'"').replace(/[ \t]+/g," ").replace(/\n{3,}/g,"\n\n").trim()});return j.length<80?{ok:!1,reason:"empty page"}:(await (0,I.ru)(a,[{type:"doc",title:(i||`${f.host}${f.pathname}`).slice(0,200),summary:j.slice(0,1e3),body:`Official documentation — researched and cached for reuse.
13
13
  Source: ${f.toString()}
14
14
 
15
- ${j.slice(0,8e3)}`,sourceKind:"research",sourceRef:f.toString(),confidence:60,agentHandle:d?.agentHandle,goalId:d?.goalId??null,issueId:d?.issueId??null,taskId:d?.taskId??null}]).catch(()=>{}),{ok:!0,chars:j.length,title:i})}var M=c(58875),N=c(9842),O=c(62524),P=c(54033),Q=c(77598),R=c(73024),S=c(76760),T=c(73136),U=c(31421),V=c(18612),W=c(78848),X=c(43075),Y=c(20850),Z=c(88639);async function $(a,b,c){let d=await a.newPage();try{return await d.evaluate(async a=>{let b=a=>new Promise((b,c)=>{let d=new Image;d.onload=()=>b(d),d.onerror=c,d.src=a}),[c,d]=await Promise.all([b(a[0]),b(a[1])]),e=a=>{let b=document.createElement("canvas");b.width=1280,b.height=800;let c=b.getContext("2d");return c.drawImage(a,0,0,1280,800),c.getImageData(0,0,1280,800).data},f=e(c),g=e(d),h=0;for(let a=0;a<f.length;a+=4)(Math.abs(f[a]-g[a])>32||Math.abs(f[a+1]-g[a+1])>32||Math.abs(f[a+2]-g[a+2])>32)&&h++;return h/1024e3},[`data:image/png;base64,${b}`,`data:image/png;base64,${c}`])}catch{return null}finally{try{await d.close()}catch{}}}let _=["/.env","/.env.local","/.git/config","/config.json","/admin","/api"],aa=/(sk-[a-z0-9]{20,}|AKIA[0-9A-Z]{16}|-----BEGIN (?:RSA |EC )?PRIVATE KEY-----|password["']?\s*[:=]\s*["'][^"']{4,})/i,ab=null;function ac(a,b,c,d="",e=""){(0,W.I)(a,{runId:b,channel:"testdev",agentId:null,kind:c,target:d,detail:e}),(0,X.r)(a)}async function ad(a,b,d={}){let e,f=(0,Q.randomUUID)();await w.db.insert(x.testRun).values({id:f,workspaceId:a,goalId:d.goalId??null,issueId:d.issueId??null,status:"running",by:d.by??"operator"}),ac(a,f,"thinking","Starting Test Dev…");let g=async(b,c,d)=>(await w.db.update(x.testRun).set({status:b,summary:c.slice(0,600),findings:JSON.stringify(d).slice(0,2e4),finishedAt:new Date}).where((0,y.eq)(x.testRun.id,f)),ac(a,f,"done",`${b} \xb7 ${d.length} finding(s)`),{id:f,status:b,summary:c,findings:d}),h=(0,Y.Vd)(a);if(!h&&d.noBoot)return g("inconclusive","Dev server not running — start it in Test Dev to gate task completion.",[]);if(!h){ac(a,f,"thinking","Booting project dev server…");let c=await (0,Y.ZF)(a,b);if(!c.running||!c.url)return g("inconclusive","No runnable project / dev server didn't boot — nothing to test yet.",[{severity:"low",kind:"boot",route:"-",message:c.logs.slice(-3).map(a=>a.t).join(" | ")||"no project"}]);h=c.url}if("running"!==(0,Y.CS)(a).status)return g("inconclusive","Dev server is still starting — try again shortly.",[{severity:"low",kind:"boot",route:"-",message:"server not reachable yet"}]);let i=(d.routes&&d.routes.length?d.routes:["/"]).slice(0,8);try{({chromium:e}=await Promise.resolve().then(c.bind(c,5006)))}catch{return g("inconclusive","Playwright not available — install it (`npx playwright install chromium`) to enable browser tests.",[])}let j=[],k=(0,S.join)((0,V.HZ)(b),".testdev");try{(0,R.mkdirSync)(k,{recursive:!0})}catch{}let l=null;try{l=await e.launch({headless:!0})}catch(c){ac(a,f,"thinking","Installing the test browser (chromium, one-time ~150MB)…");let b=await (!ab&&(ab=new Promise(a=>{try{let b="win32"===process.platform?"npx.cmd":"npx",c=(0,U.spawn)(b,["playwright","install","chromium"],{stdio:"ignore",windowsHide:!0}),d=setTimeout(()=>{try{c.kill()}catch{}a(!1)},3e5);c.on("exit",b=>{clearTimeout(d),a(0===b)}),c.on("error",()=>{clearTimeout(d),a(!1)})}catch{a(!1)}})),ab);if(b)try{l=await e.launch({headless:!0})}catch{}if(!l)return g("inconclusive",b?"Couldn't launch chromium after install — try again.":"Couldn't install/launch chromium. Run `npx playwright install chromium` in the install dir, then retry.",[{severity:"low",kind:"boot",route:"-",message:String(c instanceof Error?c.message:c).slice(0,200)}])}try{let c=await l.newContext({viewport:{width:1280,height:800}}),d=await c.newPage();d.on("console",a=>{let b=a.type();"error"===b?j.push({severity:"high",kind:"console",route:d.url(),message:a.text().slice(0,300)}):"warning"===b&&j.push({severity:"low",kind:"console",route:d.url(),message:a.text().slice(0,300)})}),d.on("pageerror",a=>j.push({severity:"high",kind:"pageerror",route:d.url(),message:String(a.message??a).slice(0,300)})),d.on("requestfailed",a=>{let b=a.failure()?.errorText??"";/ERR_ABORTED/.test(b)||j.push({severity:"med",kind:"request",route:d.url(),message:`${a.method()} ${a.url().slice(0,160)} — ${b}`})});let e=(0,Z.hp)(b),g=!!e.served&&!!e.target,m=(0,S.join)(k,"baseline");if(g)try{(0,R.mkdirSync)(m,{recursive:!0})}catch{}for(let l of i){ac(a,f,"text",`navigate ${l}`);try{let a=await d.goto(h+l,{waitUntil:"domcontentloaded",timeout:2e4});a&&a.status()>=500&&j.push({severity:"high",kind:"request",route:l,message:`${l} → HTTP ${a.status()}`}),await d.waitForTimeout(800);let i=d.locator("button:visible:not([disabled])").first();if(await i.count())try{await i.click({timeout:2e3}),await d.waitForTimeout(500)}catch{}let n=await d.content();aa.test(n)&&j.push({severity:"high",kind:"security",route:l,message:"Possible secret/credential present in served HTML/JS."});let o=l.replace(/[^a-z0-9]/gi,"_")||"root";try{await d.screenshot({path:(0,S.join)(k,`${f}-${o}.png`)})}catch{}if(g)try{let a=(0,S.join)(m,`${o}.png`);if(!(0,R.existsSync)(a)){let d="/"===l?"index.html":l.replace(/^\//,"").replace(/\/+$/,"")+".html",f=(0,S.join)((0,V.HZ)(b),e.target,d);if((0,R.existsSync)(f)){let b=await c.newPage();try{await b.goto((0,T.pathToFileURL)(f).href,{waitUntil:"domcontentloaded",timeout:15e3}),await b.waitForTimeout(400),await b.screenshot({path:a})}finally{try{await b.close()}catch{}}}}if((0,R.existsSync)(a)){let b=await d.screenshot(),e=await $(c,(0,R.readFileSync)(a).toString("base64"),b.toString("base64"));if(null!=e){let a=Math.round(100*e);e>.5?j.push({severity:"high",kind:"fidelity",route:l,message:`Visual fidelity: ${a}% of the screen differs from the APPROVED design — it doesn't match; build ${l} to the design (zero drift).`}):e>.12&&j.push({severity:"med",kind:"fidelity",route:l,message:`Visual drift: ${a}% differs from the approved design at ${l}.`})}}}catch{}}catch(a){j.push({severity:"med",kind:"request",route:l,message:`navigation failed: ${String(a instanceof Error?a.message:a).slice(0,160)}`})}}for(let a of _)try{let b=await fetch(h+a,{redirect:"manual",signal:AbortSignal.timeout(4e3)});if(200===b.status){let c=await b.text().catch(()=>"");("/api"!==a&&c.length>0||aa.test(c))&&j.push({severity:"high",kind:"security",route:a,message:`${a} returns 200 with content unauthenticated.`})}}catch{}await c.close()}finally{try{await l.close()}catch{}}let m=j.filter(a=>"high"===a.severity),n=m.length?"fail":"pass",o="fail"===n?`${m.length} blocking issue(s): ${m.slice(0,3).map(a=>`${a.kind} @ ${a.route}`).join(", ")}`:`Passed — ${j.length} note(s), no blocking issues. Navigated ${i.length} route(s).`;return(0,I.ru)(b,[{type:"test",title:`Test Dev — ${n}`,summary:o,goalId:d.goalId??null,issueId:d.issueId??null,agentHandle:"agent"===d.by?"edsger":"operator",sourceKind:"test",sourceRef:f}]).catch(()=>{}),g(n,o,j)}async function ae(a,b){let[c]=await w.db.select().from(x.issue).where((0,y.eq)(x.issue.id,b)),d=new Set(["/"]);if(c){let a=(c.title+" "+(c.key??"")).match(/\/[a-z0-9\-/]{2,}/gi);a&&a.slice(0,4).forEach(a=>d.add(a))}return[...d]}var af=c(90860),ag=c(10333),ah=c(863),ai=c(1591);let aj=["code-review-practices","review-code-perf-security","owasp-top-10","secrets-management","appsec-fundamentals"];async function ak(a,b,c,d,e){let f=[...new Set(e.filter(Boolean))].slice(0,40);if(!f.length)return{ran:!1,blocking:!1,findings:[]};let g=(0,Q.randomUUID)();await (0,W.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:"thinking",target:`${c.name} is reviewing ${d}…`});let h=await w.db.select({name:x.skill.name,instructions:x.skill.instructions,summary:x.skill.summary}).from(x.agentSkill).innerJoin(x.skill,(0,y.eq)(x.agentSkill.skillId,x.skill.id)).where((0,y.Uo)((0,y.eq)(x.agentSkill.agentId,c.id),(0,y.RV)(x.skill.name,aj))),i=h.length?`
15
+ ${j.slice(0,8e3)}`,sourceKind:"research",sourceRef:f.toString(),confidence:60,agentHandle:d?.agentHandle,goalId:d?.goalId??null,issueId:d?.issueId??null,taskId:d?.taskId??null}]).catch(()=>{}),{ok:!0,chars:j.length,title:i})}var N=c(58875),O=c(9842),P=c(62524),Q=c(54033),R=c(77598),S=c(73024),T=c(76760),U=c(73136),V=c(31421),W=c(18612),X=c(78848),Y=c(43075),Z=c(20850),$=c(88639);async function _(a,b,c){let d=await a.newPage();try{return await d.evaluate(async a=>{let b=a=>new Promise((b,c)=>{let d=new Image;d.onload=()=>b(d),d.onerror=c,d.src=a}),[c,d]=await Promise.all([b(a[0]),b(a[1])]),e=a=>{let b=document.createElement("canvas");b.width=1280,b.height=800;let c=b.getContext("2d");return c.drawImage(a,0,0,1280,800),c.getImageData(0,0,1280,800).data},f=e(c),g=e(d),h=0;for(let a=0;a<f.length;a+=4)(Math.abs(f[a]-g[a])>32||Math.abs(f[a+1]-g[a+1])>32||Math.abs(f[a+2]-g[a+2])>32)&&h++;return h/1024e3},[`data:image/png;base64,${b}`,`data:image/png;base64,${c}`])}catch{return null}finally{try{await d.close()}catch{}}}let aa=["/.env","/.env.local","/.git/config","/config.json","/admin","/api"],ab=/(sk-[a-z0-9]{20,}|AKIA[0-9A-Z]{16}|-----BEGIN (?:RSA |EC )?PRIVATE KEY-----|password["']?\s*[:=]\s*["'][^"']{4,})/i,ac=null;function ad(a,b,c,d="",e=""){(0,X.I)(a,{runId:b,channel:"testdev",agentId:null,kind:c,target:d,detail:e}),(0,Y.r)(a)}async function ae(a,b,d={}){let e,f=(0,R.randomUUID)();await w.db.insert(x.testRun).values({id:f,workspaceId:a,goalId:d.goalId??null,issueId:d.issueId??null,status:"running",by:d.by??"operator"}),ad(a,f,"thinking","Starting Test Dev…");let g=async(b,c,d)=>(await w.db.update(x.testRun).set({status:b,summary:c.slice(0,600),findings:JSON.stringify(d).slice(0,2e4),finishedAt:new Date}).where((0,y.eq)(x.testRun.id,f)),ad(a,f,"done",`${b} \xb7 ${d.length} finding(s)`),{id:f,status:b,summary:c,findings:d}),h=(0,Z.Vd)(a);if(!h&&d.noBoot)return g("inconclusive","Dev server not running — start it in Test Dev to gate task completion.",[]);if(!h){ad(a,f,"thinking","Booting project dev server…");let c=await (0,Z.ZF)(a,b);if(!c.running||!c.url)return g("inconclusive","No runnable project / dev server didn't boot — nothing to test yet.",[{severity:"low",kind:"boot",route:"-",message:c.logs.slice(-3).map(a=>a.t).join(" | ")||"no project"}]);h=c.url}if("running"!==(0,Z.CS)(a).status)return g("inconclusive","Dev server is still starting — try again shortly.",[{severity:"low",kind:"boot",route:"-",message:"server not reachable yet"}]);let i=(d.routes&&d.routes.length?d.routes:["/"]).slice(0,8);try{({chromium:e}=await Promise.resolve().then(c.bind(c,5006)))}catch{return g("inconclusive","Playwright not available — install it (`npx playwright install chromium`) to enable browser tests.",[])}let j=[],k=(0,T.join)((0,W.HZ)(b),".testdev");try{(0,S.mkdirSync)(k,{recursive:!0})}catch{}let l=null;try{l=await e.launch({headless:!0})}catch(c){ad(a,f,"thinking","Installing the test browser (chromium, one-time ~150MB)…");let b=await (!ac&&(ac=new Promise(a=>{try{let b="win32"===process.platform?"npx.cmd":"npx",c=(0,V.spawn)(b,["playwright","install","chromium"],{stdio:"ignore",windowsHide:!0}),d=setTimeout(()=>{try{c.kill()}catch{}a(!1)},3e5);c.on("exit",b=>{clearTimeout(d),a(0===b)}),c.on("error",()=>{clearTimeout(d),a(!1)})}catch{a(!1)}})),ac);if(b)try{l=await e.launch({headless:!0})}catch{}if(!l)return g("inconclusive",b?"Couldn't launch chromium after install — try again.":"Couldn't install/launch chromium. Run `npx playwright install chromium` in the install dir, then retry.",[{severity:"low",kind:"boot",route:"-",message:String(c instanceof Error?c.message:c).slice(0,200)}])}try{let c=await l.newContext({viewport:{width:1280,height:800}}),d=await c.newPage();d.on("console",a=>{let b=a.type();"error"===b?j.push({severity:"high",kind:"console",route:d.url(),message:a.text().slice(0,300)}):"warning"===b&&j.push({severity:"low",kind:"console",route:d.url(),message:a.text().slice(0,300)})}),d.on("pageerror",a=>j.push({severity:"high",kind:"pageerror",route:d.url(),message:String(a.message??a).slice(0,300)})),d.on("requestfailed",a=>{let b=a.failure()?.errorText??"";/ERR_ABORTED/.test(b)||j.push({severity:"med",kind:"request",route:d.url(),message:`${a.method()} ${a.url().slice(0,160)} — ${b}`})});let e=(0,$.hp)(b),g=!!e.served&&!!e.target,m=(0,T.join)(k,"baseline");if(g)try{(0,S.mkdirSync)(m,{recursive:!0})}catch{}for(let l of i){ad(a,f,"text",`navigate ${l}`);try{let a=await d.goto(h+l,{waitUntil:"domcontentloaded",timeout:2e4});a&&a.status()>=500&&j.push({severity:"high",kind:"request",route:l,message:`${l} → HTTP ${a.status()}`}),await d.waitForTimeout(800);let i=d.locator("button:visible:not([disabled])").first();if(await i.count())try{await i.click({timeout:2e3}),await d.waitForTimeout(500)}catch{}let n=await d.content();ab.test(n)&&j.push({severity:"high",kind:"security",route:l,message:"Possible secret/credential present in served HTML/JS."});let o=l.replace(/[^a-z0-9]/gi,"_")||"root";try{await d.screenshot({path:(0,T.join)(k,`${f}-${o}.png`)})}catch{}if(g)try{let a=(0,T.join)(m,`${o}.png`);if(!(0,S.existsSync)(a)){let d="/"===l?"index.html":l.replace(/^\//,"").replace(/\/+$/,"")+".html",f=(0,T.join)((0,W.HZ)(b),e.target,d);if((0,S.existsSync)(f)){let b=await c.newPage();try{await b.goto((0,U.pathToFileURL)(f).href,{waitUntil:"domcontentloaded",timeout:15e3}),await b.waitForTimeout(400),await b.screenshot({path:a})}finally{try{await b.close()}catch{}}}}if((0,S.existsSync)(a)){let b=await d.screenshot(),e=await _(c,(0,S.readFileSync)(a).toString("base64"),b.toString("base64"));if(null!=e){let a=Math.round(100*e);e>.5?j.push({severity:"high",kind:"fidelity",route:l,message:`Visual fidelity: ${a}% of the screen differs from the APPROVED design — it doesn't match; build ${l} to the design (zero drift).`}):e>.12&&j.push({severity:"med",kind:"fidelity",route:l,message:`Visual drift: ${a}% differs from the approved design at ${l}.`})}}}catch{}}catch(a){j.push({severity:"med",kind:"request",route:l,message:`navigation failed: ${String(a instanceof Error?a.message:a).slice(0,160)}`})}}for(let a of aa)try{let b=await fetch(h+a,{redirect:"manual",signal:AbortSignal.timeout(4e3)});if(200===b.status){let c=await b.text().catch(()=>"");("/api"!==a&&c.length>0||ab.test(c))&&j.push({severity:"high",kind:"security",route:a,message:`${a} returns 200 with content unauthenticated.`})}}catch{}await c.close()}finally{try{await l.close()}catch{}}let m=j.filter(a=>"high"===a.severity),n=m.length?"fail":"pass",o="fail"===n?`${m.length} blocking issue(s): ${m.slice(0,3).map(a=>`${a.kind} @ ${a.route}`).join(", ")}`:`Passed — ${j.length} note(s), no blocking issues. Navigated ${i.length} route(s).`;return(0,I.ru)(b,[{type:"test",title:`Test Dev — ${n}`,summary:o,goalId:d.goalId??null,issueId:d.issueId??null,agentHandle:"agent"===d.by?"edsger":"operator",sourceKind:"test",sourceRef:f}]).catch(()=>{}),g(n,o,j)}async function af(a,b){let[c]=await w.db.select().from(x.issue).where((0,y.eq)(x.issue.id,b)),d=new Set(["/"]);if(c){let a=(c.title+" "+(c.key??"")).match(/\/[a-z0-9\-/]{2,}/gi);a&&a.slice(0,4).forEach(a=>d.add(a))}return[...d]}var ag=c(90860),ah=c(10333),ai=c(863),aj=c(1591);let ak=["code-review-practices","review-code-perf-security","owasp-top-10","secrets-management","appsec-fundamentals"];async function al(a,b,c,d,e){let f=[...new Set(e.filter(Boolean))].slice(0,40);if(!f.length)return{ran:!1,blocking:!1,findings:[]};let g=(0,R.randomUUID)();await (0,X.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:"thinking",target:`${c.name} is reviewing ${d}…`});let h=await w.db.select({name:x.skill.name,instructions:x.skill.instructions,summary:x.skill.summary}).from(x.agentSkill).innerJoin(x.skill,(0,y.eq)(x.agentSkill.skillId,x.skill.id)).where((0,y.Uo)((0,y.eq)(x.agentSkill.agentId,c.id),(0,y.RV)(x.skill.name,ak))),i=h.length?`
16
16
  Apply these review skills (consult before judging):
17
17
  ${h.map(a=>`- ${a.name}: ${(a.instructions||a.summary).replace(/\s+/g," ").slice(0,300)}`).join("\n")}`:"",j=await (0,I.yY)(a,`code review of ${d}: correctness, security, secret exposure, prior findings, decisions, patterns`,{agentHandle:c.handle,k:6}),k=j.context?`
18
18
  Project knowledge (prior findings, decisions, patterns — do not contradict):
19
- ${j.context}`:"",l=[`You are ${c.name}, an INDEPENDENT code reviewer. Review ONLY the files just changed in the current workspace directory for correctness bugs, security / secret-token exposure, permission & workspace-isolation issues, and risky patterns. Files changed:`,f.map(a=>`- ${a}`).join("\n"),i,k,"Output ONLY a JSON array (no prose, no markdown fences) of REAL, specific problems — empty [] if the change is sound:",'[{"sev":"high"|"med"|"low","title":"short title","file":"relative/path","suggestion":"concrete fix"}]',"Be strict but precise — do not invent issues, do not nitpick style. Do NOT modify any files."].filter(Boolean).join("\n"),m=(0,C.hW)(c.adapter,c.model),n=(0,C.qX)(c.adapter),o=await (0,C.p1)(l,{orgId:a,binary:m,model:n,timeoutMs:24e4},a=>{(0,W.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:a.kind,target:a.target,detail:a.detail})}),p=[],q=o.text.match(/\[[\s\S]*\]/);if(q)try{p=JSON.parse(q[0])}catch{p=[]}let r=p.slice(0,40).map(a=>({sev:"high"===a.sev||"low"===a.sev?a.sev:"med",title:String(a.title??"Finding").slice(0,200),file:String(a.file??"").slice(0,300),suggestion:String(a.suggestion??"").slice(0,500)}));for(let a of r)await w.db.insert(x.finding).values({id:(0,Q.randomUUID)(),workspaceId:b.id,sev:a.sev,title:a.title,file:a.file,suggestion:a.suggestion,status:"open"});return r.length&&(0,I.ru)(a,r.map(a=>({type:"vuln",title:a.title.slice(0,120),summary:`${a.sev}: ${a.suggestion}`.slice(0,1e3),paths:a.file?[a.file]:void 0,agentHandle:c.handle,sourceKind:"review",sourceRef:`${a.file}::${a.title}`.slice(0,200)}))).catch(()=>{}),(o.usd>0||o.inputTokens+o.outputTokens>0)&&await w.db.insert(x.costEntry).values({id:(0,Q.randomUUID)(),workspaceId:b.id,agentId:c.id,provider:o.binary,model:o.model??c.model,usd:o.usd,tokens:o.inputTokens+o.outputTokens,at:new Date}),await (0,W.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:"done",target:`${r.length} finding(s)`}),{ran:!0,blocking:r.some(a=>"high"===a.sev),findings:r}}var al=c(48938);let am={triage:"todo",todo:"doing",doing:"done"},an=new Set;async function ao(a,b){if(an.has(b.id)||!b.goalId&&!b.issueId)return;an.add(b.id),an.size>5e3&&an.clear();let c=await (0,I.Mn)(a.orgId,{goalId:b.goalId??void 0,issueId:b.issueId??void 0});if(!c)return;let d=["decision","fix","integration","architecture","business-rule"].flatMap(a=>c.byType[a]??[]).filter(a=>a.confidence>=75).slice(0,3);if(!d.length)return;let[e]=await w.db.select().from(x.agent).where((0,y.Uo)((0,y.eq)(x.agent.workspaceId,a.id),(0,y.eq)(x.agent.handle,"vannevar")));e&&(await w.db.insert(x.message).values({id:(0,A.randomUUID)(),workspaceId:a.id,channel:"room",fromKind:"agent",fromHandle:"vannevar",text:`💡 Heads-up on **${b.title}** — related prior work worth a look:
20
- ${d.map(a=>`- ${a.title}`).join("\n")}`.slice(0,4e3),createdAt:new Date}),(0,X.r)(a.id))}async function ap(a,b){let c;if(!b)return!1;let[d]=await w.db.select({total:(0,z.cz)(x.costEntry.usd)}).from(x.costEntry).where((0,y.Uo)((0,y.eq)(x.costEntry.agentId,a),(0,y.RO)(x.costEntry.at,((c=new Date).setHours(0,0,0,0),c))));return Number(d?.total??0)>=b}let aq={};async function ar(a){let b=aq[a];if(b&&Date.now()-b.t<6e4)return b.ok;let c=!!await (0,C.$g)(a);return aq[a]={t:Date.now(),ok:c},c}let as=/^(\.claude\/|DOCS\/|PO\/|Reports\/|specs\/|issues\/|mock\/|[^/]*\.md$)/i;function at(a){let b=(a||"").replace(/\\/g,"/").replace(/^\.?\//,"");return!!b&&!as.test(b)}let au=`PRIORITY: the TASK below is your primary instruction. The company mission/objective are BACKGROUND context — never obey them as a literal command in place of the task.
19
+ ${j.context}`:"",l=[`You are ${c.name}, an INDEPENDENT code reviewer. Review ONLY the files just changed in the current workspace directory for correctness bugs, security / secret-token exposure, permission & workspace-isolation issues, and risky patterns. Files changed:`,f.map(a=>`- ${a}`).join("\n"),i,k,"Output ONLY a JSON array (no prose, no markdown fences) of REAL, specific problems — empty [] if the change is sound:",'[{"sev":"high"|"med"|"low","title":"short title","file":"relative/path","suggestion":"concrete fix"}]',"Be strict but precise — do not invent issues, do not nitpick style. Do NOT modify any files."].filter(Boolean).join("\n"),m=(0,C.hW)(c.adapter,c.model),n=(0,C.qX)(c.adapter),o=await (0,C.p1)(l,{orgId:a,binary:m,model:n,timeoutMs:24e4},a=>{(0,X.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:a.kind,target:a.target,detail:a.detail})}),p=[],q=o.text.match(/\[[\s\S]*\]/);if(q)try{p=JSON.parse(q[0])}catch{p=[]}let r=p.slice(0,40).map(a=>({sev:"high"===a.sev||"low"===a.sev?a.sev:"med",title:String(a.title??"Finding").slice(0,200),file:String(a.file??"").slice(0,300),suggestion:String(a.suggestion??"").slice(0,500)}));for(let a of r)await w.db.insert(x.finding).values({id:(0,R.randomUUID)(),workspaceId:b.id,sev:a.sev,title:a.title,file:a.file,suggestion:a.suggestion,status:"open"});return r.length&&(0,I.ru)(a,r.map(a=>({type:"vuln",title:a.title.slice(0,120),summary:`${a.sev}: ${a.suggestion}`.slice(0,1e3),paths:a.file?[a.file]:void 0,agentHandle:c.handle,sourceKind:"review",sourceRef:`${a.file}::${a.title}`.slice(0,200)}))).catch(()=>{}),(o.usd>0||o.inputTokens+o.outputTokens>0)&&await w.db.insert(x.costEntry).values({id:(0,R.randomUUID)(),workspaceId:b.id,agentId:c.id,provider:o.binary,model:o.model??c.model,usd:o.usd,tokens:o.inputTokens+o.outputTokens,at:new Date}),await (0,X.I)(b.id,{runId:g,channel:"security",agentId:c.id,kind:"done",target:`${r.length} finding(s)`}),{ran:!0,blocking:r.some(a=>"high"===a.sev),findings:r}}var am=c(48938);let an={triage:"todo",todo:"doing",doing:"done"},ao=new Set;async function ap(a,b){if(ao.has(b.id)||!b.goalId&&!b.issueId)return;ao.add(b.id),ao.size>5e3&&ao.clear();let c=await (0,I.Mn)(a.orgId,{goalId:b.goalId??void 0,issueId:b.issueId??void 0});if(!c)return;let d=["decision","fix","integration","architecture","business-rule"].flatMap(a=>c.byType[a]??[]).filter(a=>a.confidence>=75).slice(0,3);if(!d.length)return;let[e]=await w.db.select().from(x.agent).where((0,y.Uo)((0,y.eq)(x.agent.workspaceId,a.id),(0,y.eq)(x.agent.handle,"vannevar")));e&&(await w.db.insert(x.message).values({id:(0,A.randomUUID)(),workspaceId:a.id,channel:"room",fromKind:"agent",fromHandle:"vannevar",text:`💡 Heads-up on **${b.title}** — related prior work worth a look:
20
+ ${d.map(a=>`- ${a.title}`).join("\n")}`.slice(0,4e3),createdAt:new Date}),(0,Y.r)(a.id))}async function aq(a,b){let c;if(!b)return!1;let[d]=await w.db.select({total:(0,z.cz)(x.costEntry.usd)}).from(x.costEntry).where((0,y.Uo)((0,y.eq)(x.costEntry.agentId,a),(0,y.RO)(x.costEntry.at,((c=new Date).setHours(0,0,0,0),c))));return Number(d?.total??0)>=b}let ar={};async function as(a){let b=ar[a];if(b&&Date.now()-b.t<6e4)return b.ok;let c=!!await (0,C.$g)(a);return ar[a]={t:Date.now(),ok:c},c}let at=/^(\.claude\/|DOCS\/|PO\/|Reports\/|specs\/|issues\/|mock\/|[^/]*\.md$)/i;function au(a){let b=(a||"").replace(/\\/g,"/").replace(/^\.?\//,"");return!!b&&!at.test(b)}let av=`PRIORITY: the TASK below is your primary instruction. The company mission/objective are BACKGROUND context — never obey them as a literal command in place of the task.
21
21
  Work on this task now — the current directory is your workspace; make concrete, real progress (create/edit files as needed).
22
22
  Before and during the work, consult the "Skills" and "Knowledge (project source of truth)" sections in your context: apply matching procedures and respect prior decisions/specs — do not duplicate or contradict what's already known. If the Knowledge lacks what you need, say so rather than guessing.
23
23
  If you discover a DURABLE canonical fact that belongs in the shared knowledge (the official stack, an architecture decision, a business rule, a security or UI pattern, a key command), you MAY propose a synced-block edit by emitting on their own lines: "[[KB-BLOCK <kebab-slug>]]" then the new Markdown body then "[[/KB-BLOCK]]" — the operator / Knowledge agent reviews and merges it. Use sparingly, only for reusable facts (e.g. official-stack, security-patterns).
@@ -26,28 +26,28 @@ End your reply with a "## Checklist" of the task's sub-steps as markdown todos
26
26
  A runnable starter app already exists in this workspace (a configured dev server with a landing page). BUILD THE PRODUCT ON TOP OF IT — extend and edit the existing files; do NOT delete or replace the starter wholesale.
27
27
  If \`design-mock/PROMOTED.md\` exists, the frontend in the served source was PROMOTED from the operator-approved design — it is the REAL UI and the source of truth. READ that manifest, then EXTEND those exact screens (wire real data, backend, interactivity and states ON TOP), preserving their markup/CSS exactly (zero drift). NEVER rebuild, recreate or restyle the promoted screens.
28
28
  The project MUST stay bootable: after your change the dev server still starts cleanly — install any new deps you import, keep package.json/scripts/config valid, and never leave a broken or missing import. A task that breaks the dev server boot is sent back to review, not marked done.
29
- When done, reply with a 2-4 sentence summary of exactly what you did. If a teammate must act next — review your change, fix a problem you found, test it, or document it — END your summary by @mentioning EXACTLY ONE teammate (e.g. @whitfield, @edsger, @barbara) with a concrete ask. If you need the OPERATOR's decision or approval, @mention @operator. If nothing else is needed, do not @mention anyone.`;async function av(a,b,c,d,e){let f=b?"Reports/task-execution.md":"Reports/error-report.md",g=new Date().toISOString().replace("T"," ").slice(0,19),h=`## ${g} \xb7 ${d.key}
29
+ When done, reply with a 2-4 sentence summary of exactly what you did. If a teammate must act next — review your change, fix a problem you found, test it, or document it — END your summary by @mentioning EXACTLY ONE teammate (e.g. @whitfield, @edsger, @barbara) with a concrete ask. If you need the OPERATOR's decision or approval, @mention @operator. If nothing else is needed, do not @mention anyone.`;async function aw(a,b,c,d,e){let f=b?"Reports/task-execution.md":"Reports/error-report.md",g=new Date().toISOString().replace("T"," ").slice(0,19),h=`## ${g} \xb7 ${d.key}
30
30
  **@${c.handle}** (${c.role}) — ${d.title}
31
31
 
32
- ${e.trim()||(b?"Completed.":"Failed.")}`,i=(0,V.sL)(a.orgId,f)??`# ${b?"Task execution log":"Error report"}
32
+ ${e.trim()||(b?"Completed.":"Failed.")}`,i=(0,W.sL)(a.orgId,f)??`# ${b?"Task execution log":"Error report"}
33
33
 
34
- _Auto-maintained by the runner — newest first._`,j=i.split(/\n## /)[0].trimEnd(),k=[h,...(i.includes("\n## ")?i.slice(i.indexOf("\n## ")+1).split(/\n(?=## )/):[]).map(a=>a.trim())].filter(Boolean).slice(0,50);try{await (0,ah.g)(a.orgId,f,`${j}
34
+ _Auto-maintained by the runner — newest first._`,j=i.split(/\n## /)[0].trimEnd(),k=[h,...(i.includes("\n## ")?i.slice(i.indexOf("\n## ")+1).split(/\n(?=## )/):[]).map(a=>a.trim())].filter(Boolean).slice(0,50);try{await (0,ai.g)(a.orgId,f,`${j}
35
35
 
36
36
  ${k.join("\n\n")}
37
- `)}catch(a){console.error("[runner] report write failed:",f,a)}}async function aw(a,b){let c=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,b)});if(!c||"done"!==c.status||(await w.db.select().from(x.report).where((0,y.Uo)((0,y.eq)(x.report.workspaceId,a.id),(0,y.eq)(x.report.goalId,b),(0,y.eq)(x.report.type,"ceo-summary")))).length)return;let d=await w.db.select().from(x.issue).where((0,y.Uo)((0,y.eq)(x.issue.workspaceId,a.id),(0,y.eq)(x.issue.goalId,b))),e=`# ${c.title} — delivered
37
+ `)}catch(a){console.error("[runner] report write failed:",f,a)}}async function ax(a,b){let c=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,b)});if(!c||"done"!==c.status||(await w.db.select().from(x.report).where((0,y.Uo)((0,y.eq)(x.report.workspaceId,a.id),(0,y.eq)(x.report.goalId,b),(0,y.eq)(x.report.type,"ceo-summary")))).length)return;let d=await w.db.select().from(x.issue).where((0,y.Uo)((0,y.eq)(x.issue.workspaceId,a.id),(0,y.eq)(x.issue.goalId,b))),e=`# ${c.title} — delivered
38
38
 
39
39
  All ${d.length} issue${1===d.length?"":"s"} complete (100%).
40
40
 
41
41
  ## Issues
42
42
  ${d.map(a=>`- ${a.key} ${a.title}`).join("\n")}
43
- `;await w.db.insert(x.report).values({id:(0,A.randomUUID)(),workspaceId:a.id,title:`CEO summary — ${c.title}`,type:"ceo-summary",authorId:c.ownerId??null,body:e,goalId:b});try{await (0,ah.g)(a.orgId,`Reports/ceo-summary-${b.slice(0,6)}.md`,e)}catch(a){console.error("[runner] ceo-summary write failed:",a)}await (0,af.I)(a.id,{kind:"done",text:`Work complete — ${c.title}`,detail:`CEO summary filed; ${d.length} issue${1===d.length?"":"s"} delivered.`,tg:!0});let f=c.ownerId?await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,c.ownerId)}):null;await (0,H.j)(a.id,{text:`Goal complete: ${c.title}`,by:f?.handle??"system",source:"task-done",goalId:b}),(0,I.ru)(a.orgId,[{type:"history",title:`Delivered: ${c.title}`,summary:e.slice(0,1200),goalId:b,agentHandle:f?.handle??"",sourceKind:"goal",sourceRef:b}]).catch(()=>{})}let ax=new Set,ay=new Map,az=Math.max(1,Number(process.env.CONSTELLA_MAX_CONCURRENT_AGENTS)||1);async function aA(a){for(let b of((0,N.ZF)(),await w.db.select().from(x.task).where((0,y.Uo)((0,y.eq)(x.task.workspaceId,a),(0,y.eq)(x.task.col,"doing")))))!ax.has(b.id)&&(await w.db.update(x.task).set({col:"todo"}).where((0,y.eq)(x.task.id,b.id)),b.issueId&&await w.db.update(x.issue).set({col:"todo"}).where((0,y.eq)(x.issue.id,b.issueId)),b.assigneeId&&await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,b.assigneeId)))}async function aB(a,b={}){let c=a.settings?.agents?.maxConcurrent??az,d=ay.get(a.id)??0;if(d>=c)return!1;ay.set(a.id,d+1);try{return await aC(a,b)}finally{let b=(ay.get(a.id)??1)-1;b<=0?ay.delete(a.id):ay.set(a.id,b)}}async function aC(a,b={}){let c=await w.db.query.plan.findFirst({where:(0,y.eq)(x.plan.workspaceId,a.id)});if(!c||!c.approved||b.auto&&!c.auto247)return!1;await aA(a.id);let d=await w.db.query.task.findFirst({where:(0,y.Uo)((0,y.eq)(x.task.workspaceId,a.id),(0,y.eq)(x.task.col,"doing"))});if(d?.assigneeId){let a=await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,d.assigneeId)});if(a?.status==="working")return!1}if(!d){let b=await w.db.query.task.findFirst({where:(0,y.Uo)((0,y.eq)(x.task.workspaceId,a.id),(0,y.eq)(x.task.col,"todo"))});if(b){if(!(await w.db.update(x.task).set({col:"doing"}).where((0,y.Uo)((0,y.eq)(x.task.id,b.id),(0,y.eq)(x.task.col,"todo"))).returning()).length)return!0;d={...b,col:"doing"}}}if(!d||!d.assigneeId)return!1;if(d.goalId){let a=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,d.goalId)});if(a&&"active"!==a.status)return await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),!1}let e=await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,d.assigneeId)});if(!e)return!1;if(await ap(e.id,e.dailyCapUsd))return await (0,P.vE)(a.id,{kind:"budget",refType:"task",refId:`budget:${e.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`@${e.handle} hit the daily budget cap`,detail:`${e.name} reached the $${e.dailyCapUsd}/day spend cap and paused. Raise the cap in Agent Studio or wait for the daily reset.`}),!1;let f=(0,C.hW)(e.adapter,e.model);if(!await ar(f))return!1;ax.add(d.id);try{var g;let b;await w.db.update(x.agent).set({status:"working"}).where((0,y.eq)(x.agent.id,e.id)),d.issueId&&await w.db.update(x.issue).set({col:"doing"}).where((0,y.eq)(x.issue.id,d.issueId));let c=(0,A.randomUUID)(),h=a.settings?.source?.type&&"new"!==a.settings.source.type?au+`
44
- This project is based on EXISTING material (an imported repo, copied local directory, or attached mock) — see specs/SUPER-SPEC.md. EXTEND the existing code: preserve its working UI/UX, behavior and visual identity; add the missing real backend, data and integrations; never create a second separate prototype or replace what already exists.`:au,{prompt:i}=await (0,D.s)({orgId:a.orgId,ws:a,agent:e,channel:"room",instruction:h,task:d});if(ao(a,d).catch(()=>{}),d.goalId){let a=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,d.goalId)});if(a&&"active"!==a.status)return await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id)),!0}let j=[],k="",l=0;(0,C.Pe)(a.settings?.agents?.fileLocks??null),(0,C.Hs)(a.settings?.agents?.cmdGuard??null),(0,C.UC)(a.settings?.agents?.webResearch??null);let m=await (0,C.p1)(i,{orgId:a.orgId,binary:f,model:(b=((g=e.model)||"").toLowerCase(),"claude"===f?b.includes("opus")?"opus":b.includes("haiku")?"haiku":"sonnet":"codex"!==f&&g||void 0),timeoutMs:24e4,token:d.id,agentId:e.id,agentHandle:e.handle},b=>{if(("create"===b.kind||"edit"===b.kind)&&b.target&&j.push({path:b.target,op:"create"===b.kind?"created":"edit"}),"text"===b.kind&&b.detail){k+=b.detail;let c=Date.now();c-l>1500&&/-\s*\[[ xX]\]/.test(k)&&(l=c,(0,E.lM)(a.id,d.id,k).then(()=>{if(d.goalId)return(0,F.b)(a.id,d.goalId)}).then(()=>(0,X.r)(a.id)).catch(()=>{}))}(0,W.I)(a.id,{runId:c,channel:"room",agentId:e.id,kind:b.kind,target:b.target,detail:b.detail})});if(d.goalId&&j.length&&await (0,G.g)(a.id,a.orgId,d.goalId,j),(m.usd>0||m.inputTokens+m.outputTokens>0)&&await w.db.insert(x.costEntry).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,provider:m.binary,model:m.model??e.model,usd:m.usd,tokens:m.inputTokens+m.outputTokens,at:new Date}),m.ok){let b=[];for(let c of m.text.matchAll(/\[\[KB-BLOCK\s+([a-z0-9-]+)\]\]([\s\S]*?)\[\[\/KB-BLOCK\]\]/gi)){let d=c[1].toLowerCase(),f=c[2].trim();d&&f&&(b.push(d),(0,M.iJ)(a.orgId,{slug:d,body:f,byAgentHandle:e.handle}).catch(()=>{}))}m.text=m.text.replace(/\[\[KB-BLOCK\s+[a-z0-9-]+\]\][\s\S]*?\[\[\/KB-BLOCK\]\]/gi,"").trim();let f=(0,I.c5)(m.text,{agentHandle:e.handle,goalId:d.goalId,issueId:d.issueId,taskId:d.id,sourceKind:"task",sourceRef:`${d.id}:learn`});f.items.length&&(0,I.ru)(a.orgId,f.items).catch(()=>{});let g=f.items.find(a=>"architecture"===a.type||"business-rule"===a.type);for(let b of(g&&await (0,P.vE)(a.id,{kind:"review",refType:"task",refId:`arch:${d.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`Architecture decision — ${g.title}`,detail:(g.summary||g.title).slice(0,500)}),m.text=f.stripped,m.text.matchAll(/\[\[RESEARCH:\s*(https?:\/\/[^\]\s]+)\s*\]\]/gi)))L(a.orgId,a.stack??{},b[1],{agentHandle:e.handle,goalId:d.goalId,issueId:d.issueId,taskId:d.id}).catch(()=>{});m.text=m.text.replace(/\[\[RESEARCH:\s*https?:\/\/[^\]\s]+\s*\]\]/gi,"").trim();let h=am[d.col]??d.col;if(await (0,P.W_)(a.id,"task",d.id),"done"===h&&j.some(a=>at(a.path)))try{let b=await (0,Y.VX)(a.id,a.orgId);b.ok||(h="review",await (0,P.vE)(a.id,{kind:"block",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:e.id,title:`${d.key} broke the dev server`,detail:`${d.title}
43
+ `;await w.db.insert(x.report).values({id:(0,A.randomUUID)(),workspaceId:a.id,title:`CEO summary — ${c.title}`,type:"ceo-summary",authorId:c.ownerId??null,body:e,goalId:b});try{await (0,ai.g)(a.orgId,`Reports/ceo-summary-${b.slice(0,6)}.md`,e)}catch(a){console.error("[runner] ceo-summary write failed:",a)}await (0,ag.I)(a.id,{kind:"done",text:`Work complete — ${c.title}`,detail:`CEO summary filed; ${d.length} issue${1===d.length?"":"s"} delivered.`,tg:!0});let f=c.ownerId?await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,c.ownerId)}):null;await (0,H.j)(a.id,{text:`Goal complete: ${c.title}`,by:f?.handle??"system",source:"task-done",goalId:b}),(0,I.ru)(a.orgId,[{type:"history",title:`Delivered: ${c.title}`,summary:e.slice(0,1200),goalId:b,agentHandle:f?.handle??"",sourceKind:"goal",sourceRef:b}]).catch(()=>{})}let ay=new Set,az=new Map,aA=Math.max(1,Number(process.env.CONSTELLA_MAX_CONCURRENT_AGENTS)||1);async function aB(a){for(let b of((0,O.ZF)(),await w.db.select().from(x.task).where((0,y.Uo)((0,y.eq)(x.task.workspaceId,a),(0,y.eq)(x.task.col,"doing")))))!ay.has(b.id)&&(await w.db.update(x.task).set({col:"todo"}).where((0,y.eq)(x.task.id,b.id)),b.issueId&&await w.db.update(x.issue).set({col:"todo"}).where((0,y.eq)(x.issue.id,b.issueId)),b.assigneeId&&await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,b.assigneeId)))}async function aC(a,b={}){let c=a.settings?.agents?.maxConcurrent??aA,d=az.get(a.id)??0;if(d>=c)return!1;az.set(a.id,d+1);try{return await aD(a,b)}finally{let b=(az.get(a.id)??1)-1;b<=0?az.delete(a.id):az.set(a.id,b)}}async function aD(a,b={}){let c=await w.db.query.plan.findFirst({where:(0,y.eq)(x.plan.workspaceId,a.id)});if(!c||!c.approved||b.auto&&!c.auto247)return!1;await aB(a.id);let d=await w.db.query.task.findFirst({where:(0,y.Uo)((0,y.eq)(x.task.workspaceId,a.id),(0,y.eq)(x.task.col,"doing"),(0,y.Pe)(x.task.assigneeId))});if(d?.assigneeId){let a=await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,d.assigneeId)});if(a?.status==="working")return!1}if(!d){let b=await w.db.query.task.findFirst({where:(0,y.Uo)((0,y.eq)(x.task.workspaceId,a.id),(0,y.eq)(x.task.col,"todo"),(0,y.Pe)(x.task.assigneeId))});if(b){if(!(await w.db.update(x.task).set({col:"doing"}).where((0,y.Uo)((0,y.eq)(x.task.id,b.id),(0,y.eq)(x.task.col,"todo"))).returning()).length)return!0;d={...b,col:"doing"}}}if(!d||!d.assigneeId)return!1;if(d.goalId){let a=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,d.goalId)});if(a&&"active"!==a.status)return await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),!1}let e=await w.db.query.agent.findFirst({where:(0,y.eq)(x.agent.id,d.assigneeId)});if(!e)return!1;if(await aq(e.id,e.dailyCapUsd))return await (0,Q.vE)(a.id,{kind:"budget",refType:"task",refId:`budget:${e.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`@${e.handle} hit the daily budget cap`,detail:`${e.name} reached the $${e.dailyCapUsd}/day spend cap and paused. Raise the cap in Agent Studio or wait for the daily reset.`}),!1;let f=(0,C.hW)(e.adapter,e.model);if(!await as(f))return!1;ay.add(d.id);try{var g;let b;await w.db.update(x.agent).set({status:"working"}).where((0,y.eq)(x.agent.id,e.id)),d.issueId&&await w.db.update(x.issue).set({col:"doing"}).where((0,y.eq)(x.issue.id,d.issueId));let c=(0,A.randomUUID)(),h=a.settings?.source?.type&&"new"!==a.settings.source.type?av+`
44
+ This project is based on EXISTING material (an imported repo, copied local directory, or attached mock) — see specs/SUPER-SPEC.md. EXTEND the existing code: preserve its working UI/UX, behavior and visual identity; add the missing real backend, data and integrations; never create a second separate prototype or replace what already exists.`:av,{prompt:i}=await (0,D.s)({orgId:a.orgId,ws:a,agent:e,channel:"room",instruction:h,task:d});if(ap(a,d).catch(()=>{}),d.goalId){let a=await w.db.query.goal.findFirst({where:(0,y.eq)(x.goal.id,d.goalId)});if(a&&"active"!==a.status)return await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id)),!0}let j=[],k="",l=0;(0,C.Pe)(a.settings?.agents?.fileLocks??null),(0,C.Hs)(a.settings?.agents?.cmdGuard??null),(0,C.UC)(a.settings?.agents?.webResearch??null);let m=await (0,C.p1)(i,{orgId:a.orgId,binary:f,model:(b=((g=e.model)||"").toLowerCase(),"claude"===f?b.includes("opus")?"opus":b.includes("haiku")?"haiku":"sonnet":"codex"!==f&&g||void 0),timeoutMs:24e4,token:d.id,agentId:e.id,agentHandle:e.handle},b=>{if(("create"===b.kind||"edit"===b.kind)&&b.target&&j.push({path:b.target,op:"create"===b.kind?"created":"edit"}),"text"===b.kind&&b.detail){k+=b.detail;let c=Date.now();c-l>1500&&/-\s*\[[ xX]\]/.test(k)&&(l=c,(0,E.lM)(a.id,d.id,k).then(()=>{if(d.goalId)return(0,F.b)(a.id,d.goalId)}).then(()=>(0,Y.r)(a.id)).catch(()=>{}))}(0,X.I)(a.id,{runId:c,channel:"room",agentId:e.id,kind:b.kind,target:b.target,detail:b.detail})});if(d.goalId&&j.length&&await (0,G.g)(a.id,a.orgId,d.goalId,j),(m.usd>0||m.inputTokens+m.outputTokens>0)&&await w.db.insert(x.costEntry).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,provider:m.binary,model:m.model??e.model,usd:m.usd,tokens:m.inputTokens+m.outputTokens,at:new Date}),m.ok){let b=[];for(let c of m.text.matchAll(/\[\[KB-BLOCK\s+([a-z0-9-]+)\]\]([\s\S]*?)\[\[\/KB-BLOCK\]\]/gi)){let d=c[1].toLowerCase(),f=c[2].trim();d&&f&&(b.push(d),(0,N.iJ)(a.orgId,{slug:d,body:f,byAgentHandle:e.handle}).catch(()=>{}))}m.text=m.text.replace(/\[\[KB-BLOCK\s+[a-z0-9-]+\]\][\s\S]*?\[\[\/KB-BLOCK\]\]/gi,"").trim();let f=(0,I.c5)(m.text,{agentHandle:e.handle,goalId:d.goalId,issueId:d.issueId,taskId:d.id,sourceKind:"task",sourceRef:`${d.id}:learn`});f.items.length&&(0,I.ru)(a.orgId,f.items).catch(()=>{});let g=f.items.find(a=>"architecture"===a.type||"business-rule"===a.type);for(let b of(g&&await (0,Q.vE)(a.id,{kind:"review",refType:"task",refId:`arch:${d.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`Architecture decision — ${g.title}`,detail:(g.summary||g.title).slice(0,500)}),m.text=f.stripped,m.text.matchAll(/\[\[RESEARCH:\s*(https?:\/\/[^\]\s]+)\s*\]\]/gi)))M(a.orgId,a.stack??{},b[1],{agentHandle:e.handle,goalId:d.goalId,issueId:d.issueId,taskId:d.id}).catch(()=>{});m.text=m.text.replace(/\[\[RESEARCH:\s*https?:\/\/[^\]\s]+\s*\]\]/gi,"").trim();let h=an[d.col]??d.col;if(await (0,Q.W_)(a.id,"task",d.id),"done"===h&&j.some(a=>au(a.path)))try{let b=await (0,Z.VX)(a.id,a.orgId);b.ok||(h="review",await (0,Q.vE)(a.id,{kind:"block",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:e.id,title:`${d.key} broke the dev server`,detail:`${d.title}
45
45
 
46
- ${b.detail}`.slice(0,500)}),await (0,af.I)(a.id,{kind:"review",text:`${d.key} held — dev server no longer boots`,detail:b.detail.slice(0,300),agentId:e.id}))}catch(a){console.error("[runner] boot gate failed:",a)}if("done"===h&&(0,Y.Vd)(a.id))try{let b=await ad(a.id,a.orgId,{goalId:d.goalId,issueId:d.issueId??void 0,by:"agent",noBoot:!0,routes:d.issueId?await ae(a.id,d.issueId):void 0});"fail"===b.status&&(h="review",await (0,P.vE)(a.id,{kind:"validation",refType:"validation",refId:b.id,goalId:d.goalId,fromAgentId:e.id,title:`${d.key} failed Test Dev`,detail:b.summary}),await (0,af.I)(a.id,{kind:"review",text:`${d.key} held — failed Test Dev`,detail:b.summary,agentId:e.id}))}catch(a){console.error("[runner] Test Dev gate failed:",a)}let i=(a.settings?.agents?.autoReview??!0)&&"0"!==process.env.CONSTELLA_AUTO_REVIEW;if("done"===h&&i&&j.some(a=>at(a.path)))try{let b=await w.db.select().from(x.agent).where((0,y.eq)(x.agent.workspaceId,a.id)),c=b.find(a=>a.id!==e.id&&"whitfield"===a.handle)??b.find(a=>a.id!==e.id&&/cyber|security|qa|review|quality/i.test(a.role))??b.find(a=>a.id!==e.id);if(c){let b=await ak(a.orgId,a,c,`${d.key} — ${d.title}`,j.map(a=>a.path));if(b.blocking){h="review";let e=b.findings.filter(a=>"high"===a.sev),f=e.slice(0,5).map(a=>`• ${a.title}${a.file?` (${a.file})`:""}`).join("\n");await (0,P.vE)(a.id,{kind:"review",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:c.id,title:`${d.key} held in review — ${e.length} issue(s)`,detail:`${d.title}
46
+ ${b.detail}`.slice(0,500)}),await (0,ag.I)(a.id,{kind:"review",text:`${d.key} held — dev server no longer boots`,detail:b.detail.slice(0,300),agentId:e.id}))}catch(a){console.error("[runner] boot gate failed:",a)}if("done"===h&&(0,Z.Vd)(a.id))try{let b=await ae(a.id,a.orgId,{goalId:d.goalId,issueId:d.issueId??void 0,by:"agent",noBoot:!0,routes:d.issueId?await af(a.id,d.issueId):void 0});"fail"===b.status&&(h="review",await (0,Q.vE)(a.id,{kind:"validation",refType:"validation",refId:b.id,goalId:d.goalId,fromAgentId:e.id,title:`${d.key} failed Test Dev`,detail:b.summary}),await (0,ag.I)(a.id,{kind:"review",text:`${d.key} held — failed Test Dev`,detail:b.summary,agentId:e.id}))}catch(a){console.error("[runner] Test Dev gate failed:",a)}let i=(a.settings?.agents?.autoReview??!0)&&"0"!==process.env.CONSTELLA_AUTO_REVIEW;if("done"===h&&i&&j.some(a=>au(a.path)))try{let b=await w.db.select().from(x.agent).where((0,y.eq)(x.agent.workspaceId,a.id)),c=b.find(a=>a.id!==e.id&&"whitfield"===a.handle)??b.find(a=>a.id!==e.id&&/cyber|security|qa|review|quality/i.test(a.role))??b.find(a=>a.id!==e.id);if(c){let b=await al(a.orgId,a,c,`${d.key} — ${d.title}`,j.map(a=>a.path));if(b.blocking){h="review";let e=b.findings.filter(a=>"high"===a.sev),f=e.slice(0,5).map(a=>`• ${a.title}${a.file?` (${a.file})`:""}`).join("\n");await (0,Q.vE)(a.id,{kind:"review",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:c.id,title:`${d.key} held in review — ${e.length} issue(s)`,detail:`${d.title}
47
47
 
48
- ${f}`.slice(0,500)}),await (0,af.I)(a.id,{kind:"review",text:`${d.key} held — code review found issues`,detail:f.slice(0,300),agentId:c.id})}}}catch(a){console.error("[runner] review gate failed:",a)}await w.db.update(x.task).set({col:h}).where((0,y.eq)(x.task.id,d.id)),d.issueId&&await w.db.update(x.issue).set({col:h}).where((0,y.eq)(x.issue.id,d.issueId)),await w.db.insert(x.activity).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,action:"worked on task",target:`${d.title} → ${h}`,at:new Date}),m.text.trim()&&(await w.db.insert(x.message).values({id:c,workspaceId:a.id,channel:"room",fromKind:"agent",fromHandle:e.handle,text:(0,al.Z)(m.text).slice(0,4e3),taskId:d.id,blocks:b.length?b:null,createdAt:new Date}),await (0,ag.f)(a.id,c,"room"),await (0,O.b)(a.id,{text:m.text,agentId:e.id,agentHandle:e.handle,messageId:c,channel:"room"}),(0,X.r)(a.id),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id)),await (0,ai.YK)(a.orgId,a,e.handle,m.text,0)),await (0,E.lM)(a.id,d.id,m.text),"done"===h&&await w.db.update(x.taskStep).set({done:!0}).where((0,y.eq)(x.taskStep.taskId,d.id)),d.goalId&&(await (0,F.b)(a.id,d.goalId),await aw(a,d.goalId)),(0,I.ru)(a.orgId,[{type:j.some(a=>at(a.path))?"code-change":"note",title:`${d.key} — ${d.title}`,summary:m.text.slice(0,1200),goalId:d.goalId??null,issueId:d.issueId??null,taskId:d.id,paths:j.map(a=>a.path),agentHandle:e.handle,sourceKind:"task",sourceRef:d.id}]).catch(()=>{}),"done"===h&&(await (0,af.I)(a.id,{kind:"done",text:`${d.key} done — ${d.title}`,detail:(0,al.Z)(m.text).slice(0,300),agentId:e.id,tg:!0}),await (0,H.j)(a.id,{text:`Completed ${d.key}: ${d.title}`,by:e.handle,source:"task-done",refKey:d.key})),await av(a,!0,e,d,`Moved to **${h}**.
48
+ ${f}`.slice(0,500)}),await (0,ag.I)(a.id,{kind:"review",text:`${d.key} held — code review found issues`,detail:f.slice(0,300),agentId:c.id})}}}catch(a){console.error("[runner] review gate failed:",a)}if(await w.db.update(x.task).set({col:h}).where((0,y.eq)(x.task.id,d.id)),d.issueId&&await w.db.update(x.issue).set({col:h}).where((0,y.eq)(x.issue.id,d.issueId)),await w.db.insert(x.activity).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,action:"worked on task",target:`${d.title} → ${h}`,at:new Date}),m.text.trim()){await w.db.insert(x.message).values({id:c,workspaceId:a.id,channel:"room",fromKind:"agent",fromHandle:e.handle,text:(0,am.Z)(m.text).slice(0,4e3),taskId:d.id,blocks:b.length?b:null,createdAt:new Date}),await (0,ah.f)(a.id,c,"room"),await (0,P.b)(a.id,{text:m.text,agentId:e.id,agentHandle:e.handle,messageId:c,channel:"room"}),(0,Y.r)(a.id),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id));try{await (0,aj.YK)(a.orgId,a,e.handle,m.text,0)}catch(a){console.error("[runner] relay failed:",a)}}await (0,E.lM)(a.id,d.id,m.text),"done"===h&&await w.db.update(x.taskStep).set({done:!0}).where((0,y.eq)(x.taskStep.taskId,d.id)),d.goalId&&(await (0,F.b)(a.id,d.goalId),await ax(a,d.goalId)),(0,I.ru)(a.orgId,[{type:j.some(a=>au(a.path))?"code-change":"note",title:`${d.key} — ${d.title}`,summary:m.text.slice(0,1200),goalId:d.goalId??null,issueId:d.issueId??null,taskId:d.id,paths:j.map(a=>a.path),agentHandle:e.handle,sourceKind:"task",sourceRef:d.id}]).catch(()=>{}),"done"===h&&(await (0,ag.I)(a.id,{kind:"done",text:`${d.key} done — ${d.title}`,detail:(0,am.Z)(m.text).slice(0,300),agentId:e.id,tg:!0}),await (0,H.j)(a.id,{text:`Completed ${d.key}: ${d.title}`,by:e.handle,source:"task-done",refKey:d.key})),await aw(a,!0,e,d,`Moved to **${h}**.
49
49
 
50
- ${m.text.slice(0,600)}`),await w.db.insert(x.cronRun).values({id:(0,A.randomUUID)(),workspaceId:a.id,task:`${d.key} — ${d.title}`.slice(0,200),agentId:e.id,ok:!0,at:new Date}),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id))}else await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),d.issueId&&await w.db.update(x.issue).set({col:"blocked"}).where((0,y.eq)(x.issue.id,d.issueId)),await w.db.update(x.agent).set({status:"blocked"}).where((0,y.eq)(x.agent.id,e.id)),await w.db.insert(x.activity).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,action:"task blocked",target:`${d.title}: ${m.error??"error"}`.slice(0,200),at:new Date}),await (0,E.lM)(a.id,d.id,m.text),d.goalId&&await (0,F.b)(a.id,d.goalId),await av(a,!1,e,d,m.error??"Run failed with no output."),await w.db.insert(x.cronRun).values({id:(0,A.randomUUID)(),workspaceId:a.id,task:`${d.key} — ${d.title}`.slice(0,200),agentId:e.id,ok:!1,at:new Date}),await (0,af.I)(a.id,{kind:"review",text:`${d.key} blocked — ${d.title}`,detail:(m.error??"Run failed").slice(0,300),agentId:e.id}),await (0,P.vE)(a.id,{kind:"block",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:e.id,title:`${d.key} blocked — needs you`,detail:`${d.title}
50
+ ${m.text.slice(0,600)}`),await w.db.insert(x.cronRun).values({id:(0,A.randomUUID)(),workspaceId:a.id,task:`${d.key} — ${d.title}`.slice(0,200),agentId:e.id,ok:!0,at:new Date}),await w.db.update(x.agent).set({status:"idle"}).where((0,y.eq)(x.agent.id,e.id))}else await w.db.update(x.task).set({col:"blocked"}).where((0,y.eq)(x.task.id,d.id)),d.issueId&&await w.db.update(x.issue).set({col:"blocked"}).where((0,y.eq)(x.issue.id,d.issueId)),await w.db.update(x.agent).set({status:"blocked"}).where((0,y.eq)(x.agent.id,e.id)),await w.db.insert(x.activity).values({id:(0,A.randomUUID)(),workspaceId:a.id,agentId:e.id,action:"task blocked",target:`${d.title}: ${m.error??"error"}`.slice(0,200),at:new Date}),await (0,E.lM)(a.id,d.id,m.text),d.goalId&&await (0,F.b)(a.id,d.goalId),await aw(a,!1,e,d,m.error??"Run failed with no output."),await w.db.insert(x.cronRun).values({id:(0,A.randomUUID)(),workspaceId:a.id,task:`${d.key} — ${d.title}`.slice(0,200),agentId:e.id,ok:!1,at:new Date}),await (0,ag.I)(a.id,{kind:"review",text:`${d.key} blocked — ${d.title}`,detail:(m.error??"Run failed").slice(0,300),agentId:e.id}),await (0,Q.vE)(a.id,{kind:"block",refType:"task",refId:d.id,goalId:d.goalId??null,fromAgentId:e.id,title:`${d.key} blocked — needs you`,detail:`${d.title}
51
51
 
52
- ${(m.error??"Run failed").slice(0,400)}`}),await (0,H.j)(a.id,{text:`Blocked ${d.key}: ${d.title}`,by:e.handle,source:"issue-block",refKey:d.key,rationale:(m.error??"").slice(0,300)});return!0}finally{ax.delete(d.id),(0,N.w1)(a.id,d.id);try{let b=(0,V.sL)(a.orgId,".claude/guard-denials.jsonl");if(b&&b.trim()){let c=b.trim().split("\n").map(a=>{try{return JSON.parse(a)}catch{return null}}).filter(Boolean);if(c.length){let b=c.slice(0,8).map(a=>`• ${a.why}: \`${String(a.cmd).slice(0,120)}\``).join("\n");await (0,P.vE)(a.id,{kind:"block",refType:"task",refId:`guard:${d.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`@${e.handle} attempted ${c.length} blocked command(s) on ${d.key}`,detail:`The safety guard blocked these destructive commands during the run:
53
- ${b}`})}(0,V.EX)(a.orgId,".claude/guard-denials.jsonl")}}catch{}}}async function aD(a,b={}){let c=await w.db.query.workspace.findFirst({where:(0,y.eq)(x.workspace.id,a)});if(!c)return{pulsed:0,advanced:0,paused:0};let d=await w.db.query.agent.findMany({where:(0,y.eq)(x.agent.workspaceId,a)});if(0===d.length)return{pulsed:0,advanced:0,paused:0};let e={claude:await ar("claude"),codex:await ar("codex"),openclaw:await ar("openclaw"),hermes:await ar("hermes"),aider:await ar("aider"),opencode:await ar("opencode"),copilot:await ar("copilot"),"cursor-agent":await ar("cursor-agent"),cline:await ar("cline"),kilocode:await ar("kilocode")},f=a=>!a.startsWith("cli_")||e[(0,C.hW)(a)],g=0,h=0,i=0;for(let b of d){if("idle"!==b.status&&await ap(b.id,b.dailyCapUsd)){h++;continue}let c=f(b.adapter),d=c?"alive":"stale";"idle"!==b.status?await (0,B.hW)(a,b.id,{ok:c,note:`tick:${b.status}`}):await w.db.update(x.agent).set({lastPulse:new Date,health:d}).where((0,y.eq)(x.agent.id,b.id)),b.health!==d&&i++,g++}let j=0;return b.execute&&await aB(c,{auto:b.auto})&&(j=1),b.execute&&!b.browser&&await (0,B.CJ)(c.id,c.orgId),{pulsed:g,advanced:j,paused:h,changed:i}}async function aE(a={}){let b=(await w.db.query.workspace.findMany()).filter(a=>a.runMode&&"off"!==a.runMode);try{let{checkForUpdate:a}=await c.e(2517).then(c.bind(c,22517)),d=await a();if(d?.updateAvailable&&d.latest)for(let a of b)await (0,P.vE)(a.id,{kind:"review",refType:"task",refId:`update:${d.latest}`,title:`Constella ${d.latest} is available`,detail:`You're on ${d.current}. Open the Update module to review the changelog and upgrade.`})}catch{}return Promise.all(b.map(async b=>({workspace:b.id,...await aD(b.id,a)})))}var aF=c(56493);async function aG(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let c=await aE({execute:!0,auto:!0}),d=await (0,aF.uR)().catch(()=>({refreshed:0}));return v.NextResponse.json({ok:!0,results:c,catalogRefreshed:d.refreshed})}let aH=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/cron/tick/route",pathname:"/api/cron/tick",filename:"route",bundlePath:"app/api/cron/tick/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\cron\\tick\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:aI,workUnitAsyncStorage:aJ,serverHooks:aK}=aH;function aL(){return(0,g.patchFetch)({workAsyncStorage:aI,workUnitAsyncStorage:aJ})}async function aM(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),aH.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/cron/tick/route";"/index"===d&&(d="/");let e=await aH.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||aH.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===aH.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 aH.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)=>aH.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=>aH.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 aH.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await aH.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 aH.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}}},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},73136:a=>{a.exports=require("node:url")},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")},82550:(a,b,c)=>{c.d(b,{Z:()=>h,b:()=>i});var d=c(1782),e=c(80280),f=c(25533);let g={triage:0,todo:0,blocked:25,doing:50,review:80,done:100};async function h(a){let[b,c,h,i,j]=await Promise.all([e.db.select().from(f.goal).where((0,d.eq)(f.goal.workspaceId,a)),e.db.select().from(f.issue).where((0,d.eq)(f.issue.workspaceId,a)),e.db.select().from(f.task).where((0,d.eq)(f.task.workspaceId,a)),e.db.select().from(f.taskStep).where((0,d.eq)(f.taskStep.workspaceId,a)),e.db.select().from(f.agent).where((0,d.eq)(f.agent.workspaceId,a))]),k=new Map(h.filter(a=>a.issueId).map(a=>[a.issueId,a])),l=new Map;for(let a of i){let b=l.get(a.taskId)??[];b.push(a),l.set(a.taskId,b)}let m=new Map(j.map(a=>[a.id,a])),n=a=>{let b=k.get(a.id),c=b?.col??a.col,d=(b?l.get(b.id):void 0)??[],e=d.length,f="done"===c,h=f&&e>0?e:d.filter(a=>a.done).length,i=f?100:e>0?Math.round(h/e*100):g[c]??0,j=a.assigneeId?m.get(a.assigneeId):null;return{id:a.id,key:a.key,title:a.title,col:c,progress:i,steps:{done:h,total:e},assignee:j?{handle:j.handle,name:j.name,color:j.color}:null,updatedAt:a.updatedAt??null}},o=[],p=b.map(a=>{let b=c.filter(b=>b.goalId===a.id).map(n),d=b.length?Math.round(b.reduce((a,b)=>a+b.progress,0)/b.length):a.progress,e=a.status,f=d;"active"===e?d>=100&&(e="done",f=100,o.push(a.id)):f=a.progress;let g="cancelled"===e||"archived"===e?b.map(a=>({...a,col:e})):b;return{id:a.id,title:a.title,description:a.description,status:e,specId:a.specId,progress:f,issues:g,createdAt:a.createdAt??null,doneAt:a.doneAt??null,cancelledAt:a.cancelledAt??null,archivedAt:a.archivedAt??null}});for(let a of o)try{await e.db.update(f.goal).set({status:"done",progress:100,doneAt:new Date}).where((0,d.Uo)((0,d.eq)(f.goal.id,a),(0,d.eq)(f.goal.status,"active")))}catch{}return p}async function i(a,b){let c=(await h(a)).find(a=>a.id===b);c&&"active"===c.status&&await e.db.update(f.goal).set({progress:c.progress}).where((0,d.eq)(f.goal.id,b))}},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,1591],()=>b(b.s=61419));module.exports=c})();
52
+ ${(m.error??"Run failed").slice(0,400)}`}),await (0,H.j)(a.id,{text:`Blocked ${d.key}: ${d.title}`,by:e.handle,source:"issue-block",refKey:d.key,rationale:(m.error??"").slice(0,300)});return!0}finally{ay.delete(d.id),(0,O.w1)(a.id,d.id);try{await w.db.update(x.agent).set({status:"idle"}).where((0,y.Uo)((0,y.eq)(x.agent.id,e.id),(0,y.eq)(x.agent.status,"working")))}catch{}try{let b=(0,W.sL)(a.orgId,".claude/guard-denials.jsonl");if(b&&b.trim()){let c=b.trim().split("\n").map(a=>{try{return JSON.parse(a)}catch{return null}}).filter(Boolean);if(c.length){let b=c.slice(0,8).map(a=>`• ${a.why}: \`${String(a.cmd).slice(0,120)}\``).join("\n");await (0,Q.vE)(a.id,{kind:"block",refType:"task",refId:`guard:${d.id}`,goalId:d.goalId??null,fromAgentId:e.id,title:`@${e.handle} attempted ${c.length} blocked command(s) on ${d.key}`,detail:`The safety guard blocked these destructive commands during the run:
53
+ ${b}`})}(0,W.EX)(a.orgId,".claude/guard-denials.jsonl")}}catch{}}}async function aE(a,b={}){let c=await w.db.query.workspace.findFirst({where:(0,y.eq)(x.workspace.id,a)});if(!c)return{pulsed:0,advanced:0,paused:0};let d=await w.db.query.agent.findMany({where:(0,y.eq)(x.agent.workspaceId,a)});if(0===d.length)return{pulsed:0,advanced:0,paused:0};let e={claude:await as("claude"),codex:await as("codex"),openclaw:await as("openclaw"),hermes:await as("hermes"),aider:await as("aider"),opencode:await as("opencode"),copilot:await as("copilot"),"cursor-agent":await as("cursor-agent"),cline:await as("cline"),kilocode:await as("kilocode")},f=a=>!a.startsWith("cli_")||e[(0,C.hW)(a)],g=0,h=0,i=0;for(let b of d){if("idle"!==b.status&&await aq(b.id,b.dailyCapUsd)){h++;continue}let c=f(b.adapter),d=c?"alive":"stale";"idle"!==b.status?await (0,B.hW)(a,b.id,{ok:c,note:`tick:${b.status}`}):await w.db.update(x.agent).set({lastPulse:new Date,health:d}).where((0,y.eq)(x.agent.id,b.id)),b.health!==d&&i++,g++}let j=0;return b.execute&&await aC(c,{auto:b.auto})&&(j=1),b.execute&&!b.browser&&await (0,B.CJ)(c.id,c.orgId),{pulsed:g,advanced:j,paused:h,changed:i}}let aF=new Set;async function aG(a={}){let b=(await w.db.query.workspace.findMany()).filter(a=>a.runMode&&"off"!==a.runMode);try{let{checkForUpdate:a}=await c.e(2517).then(c.bind(c,22517)),d=await a();if(d?.updateAvailable&&d.latest)for(let a of b){let b=`${a.id}:${d.latest}`;aF.has(b)||(aF.add(b),await (0,Q.vE)(a.id,{kind:"review",refType:"task",refId:`update:${d.latest}`,title:`Constella ${d.latest} is available`,detail:`You're on ${d.current}. Open the Update module to review the changelog and upgrade.`}))}}catch{}return Promise.all(b.map(async b=>({workspace:b.id,...await aE(b.id,a)})))}var aH=c(56493);async function aI(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let c=await aG({execute:!0,auto:!0}),d=await (0,aH.uR)().catch(()=>({refreshed:0}));return v.NextResponse.json({ok:!0,results:c,catalogRefreshed:d.refreshed})}let aJ=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/cron/tick/route",pathname:"/api/cron/tick",filename:"route",bundlePath:"app/api/cron/tick/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\cron\\tick\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:aK,workUnitAsyncStorage:aL,serverHooks:aM}=aJ;function aN(){return(0,g.patchFetch)({workAsyncStorage:aK,workUnitAsyncStorage:aL})}async function aO(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),aJ.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/cron/tick/route";"/index"===d&&(d="/");let e=await aJ.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||aJ.isDev||z||(K="/index"===(K=E)?"/":K);let L=!0===aJ.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 aJ.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)=>aJ.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=>aJ.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 aJ.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,B),b}},k=await aJ.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 aJ.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}}},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},73136:a=>{a.exports=require("node:url")},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")},82550:(a,b,c)=>{c.d(b,{Z:()=>h,b:()=>i});var d=c(1782),e=c(80280),f=c(25533);let g={triage:0,todo:0,blocked:25,doing:50,review:80,done:100};async function h(a){let[b,c,h,i,j]=await Promise.all([e.db.select().from(f.goal).where((0,d.eq)(f.goal.workspaceId,a)),e.db.select().from(f.issue).where((0,d.eq)(f.issue.workspaceId,a)),e.db.select().from(f.task).where((0,d.eq)(f.task.workspaceId,a)),e.db.select().from(f.taskStep).where((0,d.eq)(f.taskStep.workspaceId,a)),e.db.select().from(f.agent).where((0,d.eq)(f.agent.workspaceId,a))]),k=new Map(h.filter(a=>a.issueId).map(a=>[a.issueId,a])),l=new Map;for(let a of i){let b=l.get(a.taskId)??[];b.push(a),l.set(a.taskId,b)}let m=new Map(j.map(a=>[a.id,a])),n=a=>{let b=k.get(a.id),c=b?.col??a.col,d=(b?l.get(b.id):void 0)??[],e=d.length,f="done"===c,h=f&&e>0?e:d.filter(a=>a.done).length,i=f?100:e>0?Math.round(h/e*100):g[c]??0,j=a.assigneeId?m.get(a.assigneeId):null;return{id:a.id,key:a.key,title:a.title,col:c,progress:i,steps:{done:h,total:e},assignee:j?{handle:j.handle,name:j.name,color:j.color}:null,updatedAt:a.updatedAt??null}},o=[],p=b.map(a=>{let b=c.filter(b=>b.goalId===a.id).map(n),d=b.length?Math.round(b.reduce((a,b)=>a+b.progress,0)/b.length):a.progress,e=a.status,f=d;"active"===e?d>=100&&(e="done",f=100,o.push(a.id)):f=a.progress;let g="cancelled"===e||"archived"===e?b.map(a=>({...a,col:e})):b;return{id:a.id,title:a.title,description:a.description,status:e,specId:a.specId,progress:f,issues:g,createdAt:a.createdAt??null,doneAt:a.doneAt??null,cancelledAt:a.cancelledAt??null,archivedAt:a.archivedAt??null}});for(let a of o)try{await e.db.update(f.goal).set({status:"done",progress:100,doneAt:new Date}).where((0,d.Uo)((0,d.eq)(f.goal.id,a),(0,d.eq)(f.goal.status,"active")))}catch{}return p}async function i(a,b){let c=(await h(a)).find(a=>a.id===b);c&&"active"===c.status&&await e.db.update(f.goal).set({progress:c.progress}).where((0,d.eq)(f.goal.id,b))}},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,1591],()=>b(b.s=61419));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=2699,a.ids=[2699],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")},7914:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90276),g=c(3295);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},9842:(a,b,c)=>{c.d(b,{IZ:()=>k,Ix:()=>j,ZF:()=>m,h6:()=>n,w1:()=>l});var d=c(1782),e=c(76760),f=c(80280),g=c(25533),h=c(18612),i=c(54033);function j(a,b){if(!b)return null;let c=(0,h.HZ)(a),d=((0,e.isAbsolute)(b)?(0,e.relative)(c,b):b).replace(/\\/g,"/");return!d||d.startsWith("..")||d.startsWith(".git/")||d.startsWith(".claude/")||d.startsWith("archives/")?null:d}async function k(a,b,c){let e=(0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.path,b)),[h]=await f.db.select().from(g.fileLock).where(e);if(h){let a=!!c.taskId&&h.taskId===c.taskId,b=!h.taskId&&!!c.agentId&&h.agentId===c.agentId;return a||b?(await f.db.update(g.fileLock).set({heartbeatAt:new Date}).where(e),{ok:!0}):{ok:!1,heldBy:{handle:h.agentHandle,taskId:h.taskId}}}try{return await f.db.insert(g.fileLock).values({workspaceId:a,path:b,taskId:c.taskId||"",agentId:c.agentId||"",agentHandle:c.handle||"",acquiredAt:new Date,heartbeatAt:new Date}),{ok:!0}}catch{let[a]=await f.db.select().from(g.fileLock).where(e);if(a&&(a.taskId===c.taskId||a.agentId===c.agentId))return{ok:!0};return{ok:!1,heldBy:a?{handle:a.agentHandle,taskId:a.taskId}:void 0}}}async function l(a,b){if(b)try{let c=await f.db.select({path:g.fileLock.path}).from(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b)));for(let e of(await f.db.delete(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b))),c))await (0,i.W_)(a,"task",`lock:${e.path}`)}catch{}}async function m(a=3e5){try{await f.db.delete(g.fileLock).where((0,d.lt)(g.fileLock.heartbeatAt,new Date(Date.now()-a)))}catch{}}async function n(a){try{return await f.db.select({path:g.fileLock.path,agentHandle:g.fileLock.agentHandle,taskId:g.fileLock.taskId}).from(g.fileLock).where((0,d.eq)(g.fileLock.workspaceId,a))}catch{return[]}}},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})}},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")},45160:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>H,patchFetch:()=>G,routeModule:()=>C,serverHooks:()=>F,workAsyncStorage:()=>D,workUnitAsyncStorage:()=>E});var d={};c.r(d),c.d(d,{POST:()=>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(1782),x=c(80280),y=c(25533),z=c(9842),A=c(54033);async function B(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let{orgId:c,path:d,taskId:e,agentId:f,agentHandle:g}=await a.json().catch(()=>({}));if(!c||!d)return v.NextResponse.json({ok:!1,error:"missing orgId/path"},{status:400});let h=(0,z.Ix)(c,d);if(!h)return v.NextResponse.json({ok:!0});let[i]=await x.db.select({id:y.workspace.id}).from(y.workspace).where((0,w.eq)(y.workspace.orgId,c));if(!i)return v.NextResponse.json({ok:!0});let j=await (0,z.IZ)(i.id,h,{taskId:e,agentId:f,handle:g});return j.ok?v.NextResponse.json({ok:!0}):(await (0,A.vE)(i.id,{kind:"block",refType:"task",refId:`lock:${h}`,title:`File contention — ${h}`,detail:`@${g||"an agent"} is blocked editing \`${h}\` — held by @${j.heldBy?.handle||"another task"}. Usually transient; if it lingers, one run may be stuck on that file.`}),v.NextResponse.json({ok:!1,heldBy:j.heldBy},{status:423}))}let C=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/locks/acquire/route",pathname:"/api/locks/acquire",filename:"route",bundlePath:"app/api/locks/acquire/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\locks\\acquire\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:D,workUnitAsyncStorage:E,serverHooks:F}=C;function G(){return(0,g.patchFetch)({workAsyncStorage:D,workUnitAsyncStorage:E})}async function H(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),C.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/locks/acquire/route";"/index"===d&&(d="/");let e=await C.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:D,revalidateOnlyGenerated:E,resolvedPathname:F,clientReferenceManifest:G,serverActionsManifest:H}=e,I=(0,k.normalizeAppPath)(d),J=!!(A.dynamicRoutes[I]||A.routes[F]),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[F],b=A.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||C.isDev||z||(L="/index"===(L=F)?"/":L);let M=!0===C.isDev||!J,N=J&&!M;H&&G&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:G,serverActionsManifest:H});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 C.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)=>C.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=>C.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&&D&&E&&!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 C.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,B),b}},k=await C.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,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",D?"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 C.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,B),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},48161:a=>{a.exports=require("node:os")},54033:(a,b,c)=>{c.d(b,{TC:()=>k,W_:()=>i,vE:()=>h,vG:()=>j});var d=c(77598),e=c(1782),f=c(80280),g=c(25533);async function h(a,b){try{if(b.refType&&b.refId){let[c]=await f.db.select({id:g.inboxItem.id}).from(g.inboxItem).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b.refType),(0,e.eq)(g.inboxItem.refId,b.refId),(0,e.eq)(g.inboxItem.resolved,!1)));if(c)return void await f.db.update(g.inboxItem).set({title:b.title,detail:b.detail??"",goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null,createdAt:new Date}).where((0,e.eq)(g.inboxItem.id,c.id))}await f.db.insert(g.inboxItem).values({id:(0,d.randomUUID)(),workspaceId:a,kind:b.kind,title:b.title,detail:b.detail??"",fromAgentId:b.fromAgentId??null,resolved:!1,refType:b.refType??null,refId:b.refId??null,goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null})}catch(a){console.error("[inbox] pushInbox failed:",a)}}async function i(a,b,c){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.refId,c),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxFor failed:",a)}}async function j(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.RV)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxRefTypes failed:",a)}}async function k(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.goalId,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxForGoal failed:",a)}}},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")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,4804,1572],()=>b(b.s=45160));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=2699,a.ids=[2699],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")},7914:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90276),g=c(3295);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},9842:(a,b,c)=>{c.d(b,{IZ:()=>k,Ix:()=>j,ZF:()=>m,h6:()=>n,w1:()=>l});var d=c(1782),e=c(76760),f=c(80280),g=c(25533),h=c(18612),i=c(54033);function j(a,b){if(!b)return null;let c=(0,h.HZ)(a),d=((0,e.isAbsolute)(b)?(0,e.relative)(c,b):b).replace(/\\/g,"/");return!d||d.startsWith("..")||d.startsWith(".git/")||d.startsWith(".claude/")||d.startsWith("archives/")?null:d}async function k(a,b,c){let e=(0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.path,b)),[h]=await f.db.select().from(g.fileLock).where(e);if(h){let a=!!c.taskId&&h.taskId===c.taskId,b=!h.taskId&&!!c.agentId&&h.agentId===c.agentId;return a||b?(await f.db.update(g.fileLock).set({heartbeatAt:new Date}).where(e),{ok:!0}):{ok:!1,heldBy:{handle:h.agentHandle,taskId:h.taskId}}}try{return await f.db.insert(g.fileLock).values({workspaceId:a,path:b,taskId:c.taskId||"",agentId:c.agentId||"",agentHandle:c.handle||"",acquiredAt:new Date,heartbeatAt:new Date}),{ok:!0}}catch{let[a]=await f.db.select().from(g.fileLock).where(e);if(a&&(a.taskId===c.taskId||a.agentId===c.agentId))return{ok:!0};return{ok:!1,heldBy:a?{handle:a.agentHandle,taskId:a.taskId}:void 0}}}async function l(a,b){if(b)try{let c=await f.db.select({path:g.fileLock.path}).from(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b)));for(let e of(await f.db.delete(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b))),c))await (0,i.W_)(a,"task",`lock:${e.path}`)}catch{}}async function m(a=3e5){try{await f.db.delete(g.fileLock).where((0,d.lt)(g.fileLock.heartbeatAt,new Date(Date.now()-a)))}catch{}}async function n(a){try{return await f.db.select({path:g.fileLock.path,agentHandle:g.fileLock.agentHandle,taskId:g.fileLock.taskId}).from(g.fileLock).where((0,d.eq)(g.fileLock.workspaceId,a))}catch{return[]}}},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})}},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")},45160:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>H,patchFetch:()=>G,routeModule:()=>C,serverHooks:()=>F,workAsyncStorage:()=>D,workUnitAsyncStorage:()=>E});var d={};c.r(d),c.d(d,{POST:()=>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(1782),x=c(80280),y=c(25533),z=c(9842),A=c(54033);async function B(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let{orgId:c,path:d,taskId:e,agentId:f,agentHandle:g}=await a.json().catch(()=>({}));if(!c||!d)return v.NextResponse.json({ok:!1,error:"missing orgId/path"},{status:400});let h=(0,z.Ix)(c,d);if(!h)return v.NextResponse.json({ok:!0});let[i]=await x.db.select({id:y.workspace.id}).from(y.workspace).where((0,w.eq)(y.workspace.orgId,c));if(!i)return v.NextResponse.json({ok:!0});let j=await (0,z.IZ)(i.id,h,{taskId:e,agentId:f,handle:g});return j.ok?v.NextResponse.json({ok:!0}):(await (0,A.vE)(i.id,{kind:"block",refType:"task",refId:`lock:${h}`,title:`File contention — ${h}`,detail:`@${g||"an agent"} is blocked editing \`${h}\` — held by @${j.heldBy?.handle||"another task"}. Usually transient; if it lingers, one run may be stuck on that file.`}),v.NextResponse.json({ok:!1,heldBy:j.heldBy},{status:423}))}let C=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/locks/acquire/route",pathname:"/api/locks/acquire",filename:"route",bundlePath:"app/api/locks/acquire/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\locks\\acquire\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:D,workUnitAsyncStorage:E,serverHooks:F}=C;function G(){return(0,g.patchFetch)({workAsyncStorage:D,workUnitAsyncStorage:E})}async function H(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),C.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/locks/acquire/route";"/index"===d&&(d="/");let e=await C.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:D,revalidateOnlyGenerated:E,resolvedPathname:F,clientReferenceManifest:G,serverActionsManifest:H}=e,I=(0,k.normalizeAppPath)(d),J=!!(A.dynamicRoutes[I]||A.routes[F]),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[F],b=A.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||C.isDev||z||(L="/index"===(L=F)?"/":L);let M=!0===C.isDev||!J,N=J&&!M;H&&G&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:G,serverActionsManifest:H});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 C.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)=>C.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=>C.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&&D&&E&&!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 C.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,B),b}},k=await C.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,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",D?"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 C.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,B),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},48161:a=>{a.exports=require("node:os")},54033:(a,b,c)=>{c.d(b,{TC:()=>k,W_:()=>i,vE:()=>h,vG:()=>j});var d=c(77598),e=c(1782),f=c(80280),g=c(25533);async function h(a,b){try{if(b.refType&&b.refId){let[c]=await f.db.select({id:g.inboxItem.id}).from(g.inboxItem).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b.refType),(0,e.eq)(g.inboxItem.refId,b.refId),(0,e.eq)(g.inboxItem.resolved,!1)));if(c)return void await f.db.update(g.inboxItem).set({title:b.title,detail:b.detail??"",goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null,createdAt:new Date}).where((0,e.eq)(g.inboxItem.id,c.id))}await f.db.insert(g.inboxItem).values({id:(0,d.randomUUID)(),workspaceId:a,kind:b.kind,title:b.title,detail:b.detail??"",fromAgentId:b.fromAgentId??null,resolved:!1,refType:b.refType??null,refId:b.refId??null,goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null})}catch(a){console.error("[inbox] pushInbox failed:",a)}}async function i(a,b,c){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.refId,c),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxFor failed:",a)}}async function j(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.RV)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxRefTypes failed:",a)}}async function k(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.goalId,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxForGoal failed:",a)}}},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")}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,4804,1572],()=>b(b.s=45160));module.exports=c})();
@@ -1,2 +1,2 @@
1
1
  "use strict";(()=>{var a={};a.id=4384,a.ids=[4384],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")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},29635:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},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")},52813:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(62060)},54624:(a,b,c)=>{c.r(b),c.d(b,{"40fae88371459f73885109eab788ff958ee3beeed7":()=>d.mg,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5":()=>d.eA,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4":()=>d.LV});var d=c(76862)},62060:(a,b,c)=>{a.exports=c(53488).vendored["react-rsc"].ReactServerDOMWebpackServer},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")},76862:(a,b,c)=>{c.d(b,{LV:()=>v,eA:()=>w,mg:()=>x});var d=c(52813),e=c(77598),f=c(1782),g=c(83550),h=c(80280),i=c(25533),j=c(95896),k=c(18612),l=c(64619);function m(a,b){let c=RegExp(`##\\s+${b}\\s*\\n([\\s\\S]*?)(?:\\n##\\s|$)`,"i");return a.match(c)?.[1].trim()??""}function n(a){return a.split("\n").find(a=>a.trim()&&!a.startsWith("#")&&!a.startsWith("**")&&!a.startsWith("---")&&!a.startsWith("|"))?.trim()??""}function o(a,b){let c=a.split("\n").find(a=>a.startsWith("# "));return c?c.slice(2).trim():b}async function p(a){let[b]=await h.db.select().from(i.workspace).where((0,f.eq)(i.workspace.orgId,a));return b??null}async function q(a,b,c){let d=(0,k.sL)(b,`.claude/skills/${c}.md`)??"",g=n(d),j=(d.match(/\*\*Trigger:\*\*\s*(.+)/)?.[1]??"").trim(),l=m(d,"Procedure")||"",[o]=await h.db.select().from(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,a),(0,f.eq)(i.skill.name,c)));o?await h.db.update(i.skill).set({summary:g,trigger:j,...l?{instructions:l}:{},indexed:"indexed"}).where((0,f.eq)(i.skill.id,o.id)):await h.db.insert(i.skill).values({id:(0,e.randomUUID)(),workspaceId:a,name:c,summary:g,trigger:j,instructions:l,native:!0,provisional:!1,indexed:"indexed"})}async function r(a,b,c){let d=(0,k.sL)(b,`.claude/agents/${c}/Agent.md`)??"";if(!d)return;let[e]=await h.db.select().from(i.agent).where((0,f.Uo)((0,f.eq)(i.agent.workspaceId,a),(0,f.eq)(i.agent.handle,c)));if(!e)return;let g=function(a){let b=a.match(/^---\n([\s\S]*?)\n---/);if(!b)return{};let c={};for(let a of b[1].split("\n")){let b=a.indexOf(":");b>0&&(c[a.slice(0,b).trim()]=a.slice(b+1).trim())}return c}(d),j={identity:(d.match(/\*\*Identity:\*\*\s*(.+)/)?.[1]??"").trim(),ritual:(d.match(/\*\*Ritual:\*\*\s*(.+)/)?.[1]??"").trim(),tone:(d.match(/\*\*Tone:\*\*\s*(.+)/)?.[1]??"").trim()||(e.persona?.tone??""),systemPrompt:m(d,"System prompt")},l={...g.provider?{adapter:g.provider}:{},...g.model?{model:g.model}:{},...g.temperature?{temperature:parseFloat(g.temperature)}:{},...g.dailyCapUsd?{dailyCapUsd:parseFloat(g.dailyCapUsd)}:{},...g.tierFloor?{tierFloor:g.tierFloor}:{},...g.reportsTo&&"null"!==g.reportsTo?{reportsTo:g.reportsTo}:{},persona:j};for(let d of(await h.db.update(i.agent).set(l).where((0,f.eq)(i.agent.id,e.id)),[...((0,k.sL)(b,`.claude/agents/${c}/skills.md`)??"").matchAll(/`([a-z0-9-]+)`/g)].map(a=>a[1]))){let[b]=await h.db.select().from(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,a),(0,f.eq)(i.skill.name,d)));b&&await h.db.insert(i.agentSkill).values({agentId:e.id,skillId:b.id}).onConflictDoNothing()}}async function s(a,b,c){let d=c.split("/").pop()??c;if("README.md"===d)return;let g=(0,k.sL)(b,c)??"",j=o(g,d),[l]=await h.db.select().from(i.report).where((0,f.Uo)((0,f.eq)(i.report.workspaceId,a),(0,f.eq)(i.report.title,j)));l?await h.db.update(i.report).set({body:g}).where((0,f.eq)(i.report.id,l.id)):await h.db.insert(i.report).values({id:(0,e.randomUUID)(),workspaceId:a,title:j,type:"Report",body:g})}async function t(a,b,c,d){let g=(0,k.sL)(b,c)??"",j=o(g,c.split("/").pop()??c),l=n(g),[m]=await h.db.select().from(i.docIndex).where((0,f.Uo)((0,f.eq)(i.docIndex.workspaceId,a),(0,f.eq)(i.docIndex.path,c)));m?await h.db.update(i.docIndex).set({title:j,summary:l,updatedAt:new Date}).where((0,f.eq)(i.docIndex.id,m.id)):await h.db.insert(i.docIndex).values({id:(0,e.randomUUID)(),workspaceId:a,kind:d,path:c,title:j,summary:l})}function u(a){(a.startsWith(".claude/skills")||a.endsWith("/skills.md"))&&(0,g.revalidatePath)("/skills"),a.startsWith(".claude/agents")&&(0,g.revalidatePath)("/agents/[handle]","page"),a.startsWith("DOCS")&&(0,g.revalidatePath)("/docs"),a.startsWith("PO")&&(0,g.revalidatePath)("/pm"),a.startsWith("Reports")&&(0,g.revalidatePath)("/reports"),(0,g.revalidatePath)("/code")}async function v(a,b,c=!0){let d,e=await p(a);if(!e)return{ok:!1};let f=e.id;if((0,l.Nm)(a,b),d=b.match(/^\.claude\/skills\/(.+)\.md$/))await q(f,a,d[1]);else if(d=b.match(/^\.claude\/agents\/([^/]+)\/(?:Agent|skills)\.md$/))await r(f,a,d[1]);else if(/^Reports\/.+\.md$/.test(b))await s(f,a,b);else if(/^DOCS\/.+\.md$/.test(b))await t(f,a,b,"docs");else{if(!/^PO\/.+\.md$/.test(b))return{ok:!0};await t(f,a,b,"po")}return c&&u(b),{ok:!0}}async function w(a,b){let c,d=await p(a);if(!d)return{ok:!1};let e=d.id;return(0,l.SH)(a,b).catch(()=>{}),(c=b.match(/^\.claude\/skills\/(.+)\.md$/))?await h.db.delete(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,e),(0,f.eq)(i.skill.name,c[1]))):/^(?:DOCS|PO)\/.+\.md$/.test(b)&&await h.db.delete(i.docIndex).where((0,f.Uo)((0,f.eq)(i.docIndex.workspaceId,e),(0,f.eq)(i.docIndex.path,b))),u(b),{ok:!0}}async function x(a=!0){let{org:b}=await (0,j.nP)(),c=b.id;for(let a of(0,k.Ci)(c,".claude/skills"))!a.isDir&&a.name.endsWith(".md")&&await v(c,a.path,!1);for(let a of(0,k.Ci)(c,".claude/agents"))a.isDir&&await v(c,`${a.path}/Agent.md`,!1);for(let a of["DOCS","PO","Reports"])for(let b of(0,k.Ci)(c,a))!b.isDir&&b.name.endsWith(".md")&&await v(c,b.path,!1);return a&&(0,g.revalidatePath)("/","layout"),{ok:!0}}(0,c(29635).D)([v,w,x]),(0,d.A)(v,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4",null),(0,d.A)(w,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5",null),(0,d.A)(x,"40fae88371459f73885109eab788ff958ee3beeed7",null)},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}}},96872:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>D,patchFetch:()=>C,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var d={};c.r(d),c.d(d,{POST:()=>x});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(76862);async function x(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let{orgId:c,rel:d,event:e}=await a.json().catch(()=>({}));if(!c||!d)return v.NextResponse.json({ok:!1,error:"missing orgId/rel"},{status:400});let f="unlink"===e?await (0,w.eA)(c,d):await (0,w.LV)(c,d);return v.NextResponse.json(f)}let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/sync/file/route",pathname:"/api/sync/file",filename:"route",bundlePath:"app/api/sync/file/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\sync\\file\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function C(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function D(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),y.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/sync/file/route";"/index"===d&&(d="/");let e=await y.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:z,isDraftMode:A,prerenderManifest:B,routerServerContext:C,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,resolvedPathname:F,clientReferenceManifest:G,serverActionsManifest:H}=e,I=(0,k.normalizeAppPath)(d),J=!!(B.dynamicRoutes[I]||B.routes[F]),K=async()=>((null==C?void 0:C.render404)?await C.render404(a,b,z,!1):b.end("This page could not be found"),null);if(J&&!A){let a=!!B.routes[F],b=B.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||y.isDev||A||(L="/index"===(L=F)?"/":L);let M=!0===y.isDev||!J,N=J&&!M;H&&G&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:G,serverActionsManifest:H});let O=a.method||"GET",P=(0,i.getTracer)(),Q=P.getActiveScopeSpan(),R=!!(null==C?void 0:C.isWrappedByNextServer),S=!!(0,h.getRequestMeta)(a,"minimalMode"),T=(0,h.getRequestMeta)(a,"incrementalCache")||await y.getIncrementalCache(a,x,B,S);null==T||T.resetRequestCache(),globalThis.__incrementalCache=T;let U={params:w,previewProps:B.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)=>y.onRequestError(a,b,d,e,C)},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=>y.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&&D&&E&&!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 y.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,C),b}},k=await y.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:B,isRoutePPREnabled:!1,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,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",D?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),A&&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 y.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,C),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},99146:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={INTERCEPTION_ROUTE_MARKERS:function(){return g},extractInterceptionRouteInformation:function(){return i},isInterceptionRouteAppPath:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90937),g=["(..)(..)","(.)","(..)","(...)"];function h(a){return void 0!==a.split("/").find(a=>g.find(b=>a.startsWith(b)))}function i(a){let b,c,d;for(let e of a.split("/"))if(c=g.find(a=>e.startsWith(a))){[b,d]=a.split(c,2);break}if(!b||!c||!d)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(b=(0,f.normalizeAppPath)(b),c){case"(.)":d="/"===b?`/${d}`:b+"/"+d;break;case"(..)":if("/"===b)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..) marker at the root level, use (.) instead.`),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});d=b.split("/").slice(0,-1).concat(d).join("/");break;case"(...)":d="/"+d;break;case"(..)(..)":let e=b.split("/");if(e.length<=2)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..)(..) marker at the root level or one level up.`),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});d=e.slice(0,-2).concat(d).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:b,interceptedRoute:d}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,1572,4619],()=>b(b.s=96872));module.exports=c})();
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},40597:(a,b,c)=>{c.r(b),c.d(b,{"405d9a2bdd47403b8b93c2ea9799d886bf4f865790":()=>d.mg,"60575173b13aefcb112b702ceafc6e93d4d1a87c93":()=>d.eA,"70ae6b7d6a16ebfa9c23932ee1094fbffbcab2aa68":()=>d.LV});var d=c(76862)},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")},52813:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(62060)},62060:(a,b,c)=>{a.exports=c(53488).vendored["react-rsc"].ReactServerDOMWebpackServer},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")},76862:(a,b,c)=>{c.d(b,{LV:()=>v,eA:()=>w,mg:()=>x});var d=c(52813),e=c(77598),f=c(1782),g=c(83550),h=c(80280),i=c(25533),j=c(95896),k=c(18612),l=c(64619);function m(a,b){let c=RegExp(`##\\s+${b}\\s*\\n([\\s\\S]*?)(?:\\n##\\s|$)`,"i");return a.match(c)?.[1].trim()??""}function n(a){return a.split("\n").find(a=>a.trim()&&!a.startsWith("#")&&!a.startsWith("**")&&!a.startsWith("---")&&!a.startsWith("|"))?.trim()??""}function o(a,b){let c=a.split("\n").find(a=>a.startsWith("# "));return c?c.slice(2).trim():b}async function p(a){let[b]=await h.db.select().from(i.workspace).where((0,f.eq)(i.workspace.orgId,a));return b??null}async function q(a,b,c){let d=(0,k.sL)(b,`.claude/skills/${c}.md`)??"",g=n(d),j=(d.match(/\*\*Trigger:\*\*\s*(.+)/)?.[1]??"").trim(),l=m(d,"Procedure")||"",[o]=await h.db.select().from(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,a),(0,f.eq)(i.skill.name,c)));o?await h.db.update(i.skill).set({summary:g,trigger:j,...l?{instructions:l}:{},indexed:"indexed"}).where((0,f.eq)(i.skill.id,o.id)):await h.db.insert(i.skill).values({id:(0,e.randomUUID)(),workspaceId:a,name:c,summary:g,trigger:j,instructions:l,native:!0,provisional:!1,indexed:"indexed"})}async function r(a,b,c){let d=(0,k.sL)(b,`.claude/agents/${c}/Agent.md`)??"";if(!d)return;let[e]=await h.db.select().from(i.agent).where((0,f.Uo)((0,f.eq)(i.agent.workspaceId,a),(0,f.eq)(i.agent.handle,c)));if(!e)return;let g=function(a){let b=a.match(/^---\n([\s\S]*?)\n---/);if(!b)return{};let c={};for(let a of b[1].split("\n")){let b=a.indexOf(":");b>0&&(c[a.slice(0,b).trim()]=a.slice(b+1).trim())}return c}(d),j={identity:(d.match(/\*\*Identity:\*\*\s*(.+)/)?.[1]??"").trim(),ritual:(d.match(/\*\*Ritual:\*\*\s*(.+)/)?.[1]??"").trim(),tone:(d.match(/\*\*Tone:\*\*\s*(.+)/)?.[1]??"").trim()||(e.persona?.tone??""),systemPrompt:m(d,"System prompt")},l={...g.provider?{adapter:g.provider}:{},...g.model?{model:g.model}:{},...g.temperature?{temperature:parseFloat(g.temperature)}:{},...g.dailyCapUsd?{dailyCapUsd:parseFloat(g.dailyCapUsd)}:{},...g.tierFloor?{tierFloor:g.tierFloor}:{},...g.reportsTo&&"null"!==g.reportsTo?{reportsTo:g.reportsTo}:{},persona:j};for(let d of(await h.db.update(i.agent).set(l).where((0,f.eq)(i.agent.id,e.id)),[...((0,k.sL)(b,`.claude/agents/${c}/skills.md`)??"").matchAll(/`([a-z0-9-]+)`/g)].map(a=>a[1]))){let[b]=await h.db.select().from(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,a),(0,f.eq)(i.skill.name,d)));b&&await h.db.insert(i.agentSkill).values({agentId:e.id,skillId:b.id}).onConflictDoNothing()}}async function s(a,b,c){let d=c.split("/").pop()??c;if("README.md"===d)return;let g=(0,k.sL)(b,c)??"",j=o(g,d),[l]=await h.db.select().from(i.report).where((0,f.Uo)((0,f.eq)(i.report.workspaceId,a),(0,f.eq)(i.report.title,j)));l?await h.db.update(i.report).set({body:g}).where((0,f.eq)(i.report.id,l.id)):await h.db.insert(i.report).values({id:(0,e.randomUUID)(),workspaceId:a,title:j,type:"Report",body:g})}async function t(a,b,c,d){let g=(0,k.sL)(b,c)??"",j=o(g,c.split("/").pop()??c),l=n(g),[m]=await h.db.select().from(i.docIndex).where((0,f.Uo)((0,f.eq)(i.docIndex.workspaceId,a),(0,f.eq)(i.docIndex.path,c)));m?await h.db.update(i.docIndex).set({title:j,summary:l,updatedAt:new Date}).where((0,f.eq)(i.docIndex.id,m.id)):await h.db.insert(i.docIndex).values({id:(0,e.randomUUID)(),workspaceId:a,kind:d,path:c,title:j,summary:l})}function u(a){(a.startsWith(".claude/skills")||a.endsWith("/skills.md"))&&(0,g.revalidatePath)("/skills"),a.startsWith(".claude/agents")&&(0,g.revalidatePath)("/agents/[handle]","page"),a.startsWith("DOCS")&&(0,g.revalidatePath)("/docs"),a.startsWith("PO")&&(0,g.revalidatePath)("/pm"),a.startsWith("Reports")&&(0,g.revalidatePath)("/reports"),(0,g.revalidatePath)("/code")}async function v(a,b,c=!0){let d,e=await p(a);if(!e)return{ok:!1};let f=e.id;if((0,l.Nm)(a,b),d=b.match(/^\.claude\/skills\/(.+)\.md$/))await q(f,a,d[1]);else if(d=b.match(/^\.claude\/agents\/([^/]+)\/(?:Agent|skills)\.md$/))await r(f,a,d[1]);else if(/^Reports\/.+\.md$/.test(b))await s(f,a,b);else if(/^DOCS\/.+\.md$/.test(b))await t(f,a,b,"docs");else{if(!/^PO\/.+\.md$/.test(b))return{ok:!0};await t(f,a,b,"po")}return c&&u(b),{ok:!0}}async function w(a,b){let c,d=await p(a);if(!d)return{ok:!1};let e=d.id;return(0,l.SH)(a,b).catch(()=>{}),(c=b.match(/^\.claude\/skills\/(.+)\.md$/))?await h.db.delete(i.skill).where((0,f.Uo)((0,f.eq)(i.skill.workspaceId,e),(0,f.eq)(i.skill.name,c[1]))):/^(?:DOCS|PO)\/.+\.md$/.test(b)&&await h.db.delete(i.docIndex).where((0,f.Uo)((0,f.eq)(i.docIndex.workspaceId,e),(0,f.eq)(i.docIndex.path,b))),u(b),{ok:!0}}async function x(a=!0){let{org:b}=await (0,j.nP)(),c=b.id;for(let a of(0,k.Ci)(c,".claude/skills"))!a.isDir&&a.name.endsWith(".md")&&await v(c,a.path,!1);for(let a of(0,k.Ci)(c,".claude/agents"))a.isDir&&await v(c,`${a.path}/Agent.md`,!1);for(let a of["DOCS","PO","Reports"])for(let b of(0,k.Ci)(c,a))!b.isDir&&b.name.endsWith(".md")&&await v(c,b.path,!1);return a&&(0,g.revalidatePath)("/","layout"),{ok:!0}}(0,c(29635).D)([v,w,x]),(0,d.A)(v,"70ae6b7d6a16ebfa9c23932ee1094fbffbcab2aa68",null),(0,d.A)(w,"60575173b13aefcb112b702ceafc6e93d4d1a87c93",null),(0,d.A)(x,"405d9a2bdd47403b8b93c2ea9799d886bf4f865790",null)},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}}},96872:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>D,patchFetch:()=>C,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var d={};c.r(d),c.d(d,{POST:()=>x});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(76862);async function x(a){let b=process.env.CONSTELLA_WORKER_SECRET;if(!b||a.headers.get("x-worker-secret")!==b)return v.NextResponse.json({error:"unauthorized"},{status:401});let{orgId:c,rel:d,event:e}=await a.json().catch(()=>({}));if(!c||!d)return v.NextResponse.json({ok:!1,error:"missing orgId/rel"},{status:400});let f="unlink"===e?await (0,w.eA)(c,d):await (0,w.LV)(c,d);return v.NextResponse.json(f)}let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/sync/file/route",pathname:"/api/sync/file",filename:"route",bundlePath:"app/api/sync/file/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\Usuario\\Documents\\constella\\src\\app\\api\\sync\\file\\route.ts",nextConfigOutput:"",userland:d,...{}}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function C(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function D(a,b,c){c.requestMeta&&(0,h.setRequestMeta)(a,c.requestMeta),y.isDev&&(0,h.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/sync/file/route";"/index"===d&&(d="/");let e=await y.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:z,isDraftMode:A,prerenderManifest:B,routerServerContext:C,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,resolvedPathname:F,clientReferenceManifest:G,serverActionsManifest:H}=e,I=(0,k.normalizeAppPath)(d),J=!!(B.dynamicRoutes[I]||B.routes[F]),K=async()=>((null==C?void 0:C.render404)?await C.render404(a,b,z,!1):b.end("This page could not be found"),null);if(J&&!A){let a=!!B.routes[F],b=B.dynamicRoutes[I];if(b&&!1===b.fallback&&!a){if(x.adapterPath)return await K();throw new t.NoFallbackError}}let L=null;!J||y.isDev||A||(L="/index"===(L=F)?"/":L);let M=!0===y.isDev||!J,N=J&&!M;H&&G&&(0,j.setManifestsSingleton)({page:d,clientReferenceManifest:G,serverActionsManifest:H});let O=a.method||"GET",P=(0,i.getTracer)(),Q=P.getActiveScopeSpan(),R=!!(null==C?void 0:C.isWrappedByNextServer),S=!!(0,h.getRequestMeta)(a,"minimalMode"),T=(0,h.getRequestMeta)(a,"incrementalCache")||await y.getIncrementalCache(a,x,B,S);null==T||T.resetRequestCache(),globalThis.__incrementalCache=T;let U={params:w,previewProps:B.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)=>y.onRequestError(a,b,d,e,C)},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=>y.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&&D&&E&&!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 y.onRequestError(a,b,{routerKind:"App Router",routePath:d,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,C),b}},k=await y.handleResponse({req:a,nextConfig:x,cacheKey:L,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:B,isRoutePPREnabled:!1,isOnDemandRevalidate:D,revalidateOnlyGenerated:E,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",D?"REVALIDATED":k.isMiss?"MISS":k.isStale?"STALE":"HIT"),A&&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 y.onRequestError(a,b,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,o.c)({isStaticGeneration:N,isOnDemandRevalidate:D})},!1,C),J)throw b;return await (0,p.I)(V,W,new Response(null,{status:500})),null}}},99146:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={INTERCEPTION_ROUTE_MARKERS:function(){return g},extractInterceptionRouteInformation:function(){return i},isInterceptionRouteAppPath:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90937),g=["(..)(..)","(.)","(..)","(...)"];function h(a){return void 0!==a.split("/").find(a=>g.find(b=>a.startsWith(b)))}function i(a){let b,c,d;for(let e of a.split("/"))if(c=g.find(a=>e.startsWith(a))){[b,d]=a.split(c,2);break}if(!b||!c||!d)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(b=(0,f.normalizeAppPath)(b),c){case"(.)":d="/"===b?`/${d}`:b+"/"+d;break;case"(..)":if("/"===b)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..) marker at the root level, use (.) instead.`),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});d=b.split("/").slice(0,-1).concat(d).join("/");break;case"(...)":d="/"+d;break;case"(..)(..)":let e=b.split("/");if(e.length<=2)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..)(..) marker at the root level or one level up.`),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});d=e.slice(0,-2).concat(d).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:b,interceptedRoute:d}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[3050,658,9676,1845,7971,3550,4804,1572,4619],()=>b(b.s=96872));module.exports=c})();