constellai 0.3.3 → 0.3.5

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 (252) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +2 -2
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/app/(app)/activity/page.js +2 -2
  5. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  6. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/(app)/agents/[handle]/page.js +3 -3
  8. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  9. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(app)/code/page.js +2 -2
  11. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  12. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/(app)/config/page.js +2 -2
  14. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  15. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(app)/costs/page.js +2 -2
  17. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  18. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/(app)/cron/page.js +2 -2
  20. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  21. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(app)/dashboard/page.js +2 -2
  23. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  24. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/(app)/design/page.js +44 -44
  26. package/.next/server/app/(app)/design/page.js.nft.json +1 -1
  27. package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(app)/docs/[id]/page.js +2 -2
  29. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/docs/page.js +2 -2
  32. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  33. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(app)/github/page.js +2 -2
  35. package/.next/server/app/(app)/github/page.js.nft.json +1 -1
  36. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/(app)/goals/page.js +2 -2
  38. package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
  39. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/(app)/inbox/page.js +2 -2
  41. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  42. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  43. package/.next/server/app/(app)/knowledge/page.js +3 -3
  44. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
  45. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/(app)/models/page.js +2 -2
  47. package/.next/server/app/(app)/models/page.js.nft.json +1 -1
  48. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/(app)/notifications/page.js +2 -2
  50. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
  51. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/(app)/org/page.js +3 -3
  53. package/.next/server/app/(app)/org/page.js.nft.json +1 -1
  54. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/(app)/organizations/page.js +2 -2
  56. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
  57. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/(app)/page.js +3 -3
  59. package/.next/server/app/(app)/page.js.nft.json +1 -1
  60. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/(app)/planner/page.js +2 -2
  62. package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
  63. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/(app)/plugins/page.js +2 -2
  65. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
  66. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/(app)/pm/page.js +2 -2
  68. package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
  69. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
  70. package/.next/server/app/(app)/prepare-deploy/page.js +2 -2
  71. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
  72. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
  73. package/.next/server/app/(app)/profile/page.js +2 -2
  74. package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
  75. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/(app)/pulse/page.js +2 -2
  77. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
  78. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
  79. package/.next/server/app/(app)/reports/[id]/page.js +3 -3
  80. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
  81. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
  82. package/.next/server/app/(app)/reports/page.js +3 -3
  83. package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
  84. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/(app)/routines/page.js +1 -1
  86. package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
  87. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
  88. package/.next/server/app/(app)/search/page.js +2 -2
  89. package/.next/server/app/(app)/search/page.js.nft.json +1 -1
  90. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  91. package/.next/server/app/(app)/security/page.js +2 -2
  92. package/.next/server/app/(app)/security/page.js.nft.json +1 -1
  93. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/(app)/skills/page.js +3 -3
  95. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  96. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  97. package/.next/server/app/(app)/tasks/page.js +2 -2
  98. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
  99. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/(app)/test-dev/page.js +2 -2
  101. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
  102. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/(app)/update/page.js +2 -2
  104. package/.next/server/app/(app)/update/page.js.nft.json +1 -1
  105. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
  106. package/.next/server/app/(auth)/login/page.js +2 -2
  107. package/.next/server/app/(auth)/login/page.js.nft.json +1 -1
  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.js.nft.json +1 -1
  111. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/_global-error/page.js +1 -1
  113. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  114. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  115. package/.next/server/app/_global-error.html +1 -1
  116. package/.next/server/app/_global-error.rsc +3 -3
  117. package/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  118. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  120. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  121. package/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
  122. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  123. package/.next/server/app/_not-found/page.js +1 -1
  124. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  125. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/cron/tick/route.js +2 -2
  127. package/.next/server/app/api/sync/file/route.js +2 -2
  128. package/.next/server/app/api/telegram/poll/route.js +2 -2
  129. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  130. package/.next/server/chunks/1249.js +7 -7
  131. package/.next/server/chunks/1845.js +1 -1
  132. package/.next/server/chunks/212.js +1 -0
  133. package/.next/server/chunks/259.js +1 -1
  134. package/.next/server/chunks/260.js +1 -1
  135. package/.next/server/chunks/2867.js +1 -1
  136. package/.next/server/chunks/2960.js +1 -1
  137. package/.next/server/chunks/3131.js +1 -1
  138. package/.next/server/chunks/3234.js +1 -1
  139. package/.next/server/chunks/4979.js +2 -2
  140. package/.next/server/chunks/6381.js +15 -0
  141. package/.next/server/chunks/6431.js +1 -1
  142. package/.next/server/chunks/6853.js +12 -0
  143. package/.next/server/chunks/6954.js +1 -0
  144. package/.next/server/chunks/7589.js +1 -1
  145. package/.next/server/chunks/7989.js +1 -1
  146. package/.next/server/chunks/8561.js +1 -1
  147. package/.next/server/chunks/8623.js +1 -1
  148. package/.next/server/chunks/8762.js +417 -15
  149. package/.next/server/chunks/8823.js +1 -1
  150. package/.next/server/chunks/9215.js +4 -0
  151. package/.next/server/chunks/9229.js +1 -0
  152. package/.next/server/chunks/9310.js +21 -0
  153. package/.next/server/chunks/9783.js +1 -1
  154. package/.next/server/middleware-build-manifest.js +1 -1
  155. package/.next/server/pages/500.html +1 -1
  156. package/.next/server/server-reference-manifest.js +1 -1
  157. package/.next/server/server-reference-manifest.json +1 -1
  158. package/.next/static/chunks/2692-7fee6e06b3c93940.js +1 -0
  159. package/.next/static/chunks/2997-ec8b18227849683e.js +1 -0
  160. package/.next/static/chunks/3219-b4941c7ff967e904.js +1 -0
  161. package/.next/static/chunks/6602-f26d109fd94cee1d.js +4 -0
  162. package/.next/static/chunks/8370-2733742abf5f3ddf.js +12 -0
  163. package/.next/static/chunks/{5332-84d9a65aa5d16106.js → 9112-c37628abc8a164cd.js} +1 -1
  164. package/.next/static/chunks/app/(app)/activity/{page-0f51a22d4f2207b2.js → page-29e80a32c02f376b.js} +1 -1
  165. package/.next/static/chunks/app/(app)/agents/[handle]/page-83277413debb3b25.js +1 -0
  166. package/.next/static/chunks/app/(app)/code/page-1f954f7688bc24e4.js +1 -0
  167. package/.next/static/chunks/app/(app)/config/page-eee4f8736608afa5.js +1 -0
  168. package/.next/static/chunks/app/(app)/costs/page-0beac688917eaa30.js +1 -0
  169. package/.next/static/chunks/app/(app)/cron/{page-ab35783e4341f6b7.js → page-a4dd65c78173b872.js} +1 -1
  170. package/.next/static/chunks/app/(app)/dashboard/page-519a934ccfcce6fa.js +1 -0
  171. package/.next/static/chunks/app/(app)/design/{page-fcee2dfd5c7e3a4b.js → page-238be90d78d22780.js} +3 -3
  172. package/.next/static/chunks/app/(app)/docs/[id]/page-e29afa1ba1a086e1.js +1 -0
  173. package/.next/static/chunks/app/(app)/docs/page-b4462f9ca2118f8b.js +1 -0
  174. package/.next/static/chunks/app/(app)/github/page-cf8501e45fe38663.js +1 -0
  175. package/.next/static/chunks/app/(app)/goals/page-75c36155c162df5b.js +1 -0
  176. package/.next/static/chunks/app/(app)/inbox/page-f40bdb457609ddad.js +12 -0
  177. package/.next/static/chunks/app/(app)/knowledge/page-dc5dd15e4f0ad22e.js +1 -0
  178. package/.next/static/chunks/app/(app)/layout-408976a4d35f06a8.js +1 -0
  179. package/.next/static/chunks/app/(app)/models/page-a54e0b8ffed0085c.js +1 -0
  180. package/.next/static/chunks/app/(app)/notifications/page-1f84d74bc53c2c6c.js +12 -0
  181. package/.next/static/chunks/app/(app)/org/page-d17c62b7a668b399.js +12 -0
  182. package/.next/static/chunks/app/(app)/organizations/page-b55445f226cf8c61.js +1 -0
  183. package/.next/static/chunks/app/(app)/{page-54a99a54295a40be.js → page-c7dd52ecc2da529d.js} +1 -1
  184. package/.next/static/chunks/app/(app)/planner/page-920e439e6f88c238.js +1 -0
  185. package/.next/static/chunks/app/(app)/plugins/{page-e75d982132825b07.js → page-d10239fcbabdf4fa.js} +1 -1
  186. package/.next/static/chunks/app/(app)/pm/page-61ad11558f241cf1.js +1 -0
  187. package/.next/static/chunks/app/(app)/prepare-deploy/page-8d25f86b26ab0d2e.js +1 -0
  188. package/.next/static/chunks/app/(app)/profile/page-236673e1a8c1e6c6.js +1 -0
  189. package/.next/static/chunks/app/(app)/pulse/{page-1a63c4ed76db48f5.js → page-f2c6049a967b93a3.js} +1 -1
  190. package/.next/static/chunks/app/(app)/reports/[id]/{page-ab35783e4341f6b7.js → page-a4dd65c78173b872.js} +1 -1
  191. package/.next/static/chunks/app/(app)/reports/page-5c07fa3a8b5ba553.js +1 -0
  192. package/.next/static/chunks/app/(app)/routines/page-0193e84e6a60a06a.js +1 -0
  193. package/.next/static/chunks/app/(app)/search/{page-d30f1c44c95e14a3.js → page-07e037c487f14c35.js} +1 -1
  194. package/.next/static/chunks/app/(app)/security/{page-4640d72a0b360f05.js → page-71e5d992b5ddf79a.js} +1 -1
  195. package/.next/static/chunks/app/(app)/skills/page-72691864856c9906.js +1 -0
  196. package/.next/static/chunks/app/(app)/tasks/page-5c9ca8f83d4c904f.js +1 -0
  197. package/.next/static/chunks/app/(app)/test-dev/page-5aee630d9bc73a0b.js +1 -0
  198. package/.next/static/chunks/app/(app)/update/page-2c9bcdb65bd2f597.js +1 -0
  199. package/.next/static/chunks/app/(auth)/login/page-50033813b56469ee.js +1 -0
  200. package/.next/static/chunks/app/(auth)/onboarding/{page-0cd7cd9fa146a927.js → page-075fd9673f7ab241.js} +1 -1
  201. package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
  202. package/.next/trace-build +1 -1
  203. package/CHANGELOG.md +45 -3
  204. package/README.md +1 -1
  205. package/README.pt-BR.md +1 -1
  206. package/bin/constella-update.mjs +44 -0
  207. package/docs/UPDATE.md +38 -7
  208. package/package.json +1 -1
  209. package/scripts/vps-install.sh +25 -0
  210. package/scripts/vps-update.sh +24 -0
  211. package/.next/server/chunks/3174.js +0 -12
  212. package/.next/server/chunks/3334.js +0 -1
  213. package/.next/server/chunks/3439.js +0 -4
  214. package/.next/server/chunks/478.js +0 -1
  215. package/.next/server/chunks/5086.js +0 -417
  216. package/.next/server/chunks/8195.js +0 -21
  217. package/.next/server/chunks/8244.js +0 -1
  218. package/.next/static/chunks/3219-9684aa1c634212de.js +0 -1
  219. package/.next/static/chunks/386-0f2b8d23016cf4d0.js +0 -1
  220. package/.next/static/chunks/4909-9f16a714c78ed30d.js +0 -4
  221. package/.next/static/chunks/5664-3cb5735f1b5bbde1.js +0 -1
  222. package/.next/static/chunks/8370-7ec9e9bf414f8f2d.js +0 -12
  223. package/.next/static/chunks/app/(app)/agents/[handle]/page-14805dd54a1333e8.js +0 -1
  224. package/.next/static/chunks/app/(app)/code/page-7ebd6923ac440103.js +0 -1
  225. package/.next/static/chunks/app/(app)/config/page-47b5b62b73050673.js +0 -1
  226. package/.next/static/chunks/app/(app)/costs/page-969eba498344314d.js +0 -1
  227. package/.next/static/chunks/app/(app)/dashboard/page-59521ad116c60a88.js +0 -1
  228. package/.next/static/chunks/app/(app)/docs/[id]/page-b3451b21d7d2127b.js +0 -1
  229. package/.next/static/chunks/app/(app)/docs/page-3a34eec67591ce3e.js +0 -1
  230. package/.next/static/chunks/app/(app)/github/page-a0117637dc143821.js +0 -1
  231. package/.next/static/chunks/app/(app)/goals/page-d1cb2552625ccadb.js +0 -1
  232. package/.next/static/chunks/app/(app)/inbox/page-dbfc885cd61f9b9f.js +0 -12
  233. package/.next/static/chunks/app/(app)/knowledge/page-29df476a9c2f930c.js +0 -1
  234. package/.next/static/chunks/app/(app)/layout-2b6b23e82fbf0211.js +0 -1
  235. package/.next/static/chunks/app/(app)/models/page-ea54a5d167cd3cc2.js +0 -1
  236. package/.next/static/chunks/app/(app)/notifications/page-ef1ac55efadb2a1a.js +0 -12
  237. package/.next/static/chunks/app/(app)/org/page-a7c734b8d86f7641.js +0 -12
  238. package/.next/static/chunks/app/(app)/organizations/page-4bcec3010a9d9119.js +0 -1
  239. package/.next/static/chunks/app/(app)/planner/page-adfd05afc6ddcbef.js +0 -1
  240. package/.next/static/chunks/app/(app)/pm/page-773626398c10fdb7.js +0 -1
  241. package/.next/static/chunks/app/(app)/prepare-deploy/page-01f767248e7fa2a7.js +0 -1
  242. package/.next/static/chunks/app/(app)/profile/page-cb2450679785db1a.js +0 -1
  243. package/.next/static/chunks/app/(app)/reports/page-b0bcc85ad4afecf5.js +0 -1
  244. package/.next/static/chunks/app/(app)/routines/page-c0ce223d128a9010.js +0 -1
  245. package/.next/static/chunks/app/(app)/skills/page-87a71bd0a6b0f262.js +0 -1
  246. package/.next/static/chunks/app/(app)/tasks/page-a34a5658aff509ec.js +0 -1
  247. package/.next/static/chunks/app/(app)/test-dev/page-842f8771d36e964b.js +0 -1
  248. package/.next/static/chunks/app/(app)/update/page-64467fa6d8ed737e.js +0 -1
  249. package/.next/static/chunks/app/(auth)/login/page-82964b720ff11bab.js +0 -1
  250. package/.next/static/chunks/app/_not-found/page-489c316e4356f1b7.js +0 -1
  251. /package/.next/static/{Fx06n4huXV42eQUI-Lty0 → vaEtsAmUuKf_DngRqwRUn}/_buildManifest.js +0 -0
  252. /package/.next/static/{Fx06n4huXV42eQUI-Lty0 → vaEtsAmUuKf_DngRqwRUn}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=212,exports.ids=[212],exports.modules={2809:(a,b,c)=>{c.d(b,{J:()=>e});var d=c(2910);let e=(0,d.createServerReference)("407ed923314dd0345588038a18fe9b55c8a8fbc857",d.callServer,void 0,d.findSourceMapURL,"rejectSpec")},7201:(a,b,c)=>{c.d(b,{IssueApprove:()=>x,PlanGate:()=>v,PlanGateLive:()=>u,Run247Button:()=>y,p:()=>w});var d=c(4374),e=c(74679),f=c(47104),g=c(43526),h=c(31819),i=c(73134),j=c(2910);let k=(0,j.createServerReference)("40f9cd3fc6c6d8cae96897a561300a7232d723d346",j.callServer,void 0,j.findSourceMapURL,"generatePlan"),l=(0,j.createServerReference)("0029bb6209b7625897f6acdf3d35b4ef5b219d578e",j.callServer,void 0,j.findSourceMapURL,"requestPlanChanges");var m=c(15404),n=c(67779),o=c(2809),p=c(64540),q=c(80926);let r=(0,j.createServerReference)("4046442bdc21d1e6839fe89a0eaa873baf2538c3ff",j.callServer,void 0,j.findSourceMapURL,"setAuto247"),s=(0,j.createServerReference)("00868fe54fb579add0f212e1f823d564328d7d5432",j.callServer,void 0,j.findSourceMapURL,"skipDesignGate");function t(a,b){window.dispatchEvent(new CustomEvent("constella:open-dm",{detail:{handle:a,text:b}}))}function u({planning:a,planSince:b,designRecommended:c=!1,designPending:j=!1}){let l=(0,h.k)(),[m,n]=(0,e.useTransition)(),o=(0,f.useRouter)(),[p,q]=(0,e.useState)(!1),[r,t]=(0,e.useState)(""),v=a||p;function w(){t(""),q(!0),window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"planner"}})),n(async()=>{try{let a=await k();(!a?.ok||!1===a.started)&&(q(!1),a?.error&&t(a.error)),o.refresh()}catch{q(!1),t(l("planner.gate.staleTab"))}})}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.AgentRunLive,{channel:"planner",resume:a,sinceSeq:a?b-1:0,onFinish:()=>q(!1)}),v?(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:l("planner.gate.drafting.t")}),(0,d.jsx)("div",{className:"pg-d",children:l("planner.gate.drafting.d")})]})]}):c||j?(0,d.jsxs)("div",{className:"plan-gate",style:{borderColor:"rgba(99,102,241,.45)"},children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0,style:{background:"#6366f1"}}),(0,d.jsx)("div",{className:"pg-ic",style:{background:"rgba(99,102,241,.16)",color:"#6366f1"},children:(0,d.jsx)(g.I,{name:"skill",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:j?"Design step pending":"Recommended: prototype the design first"}),(0,d.jsx)("div",{className:"pg-d",children:j?"Ada is holding the plan on the design step. Open the Design module, build & approve the prototype with Grace, then Send to execution — Ada turns the approved design into specs & issues (zero drift).":"This is a frontend product. Prototype & approve the UI in the Design module before generating the plan — Grace turns the brief into a real visual reference, so the specs are precise and you avoid rework."}),r&&(0,d.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:r})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("button",{className:"btn-accent",onClick:()=>o.push("/design"),children:[(0,d.jsx)(g.I,{name:"skill",size:14})," Open Design"]}),(0,d.jsxs)("button",{className:"btn-ghost",disabled:m,onClick:function(){n(async()=>{try{await s()}catch{}}),w()},style:{fontSize:12},children:[(0,d.jsx)(g.I,{name:m?"refresh":"bot",size:13,className:m?"sync-spin":""})," ",m?l("planner.gate.analyzing"):"Skip design & plan anyway"]})]})]}):(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:l("planner.gate.noPlan.t")}),(0,d.jsx)("div",{className:"pg-d",children:l("planner.gate.noPlan.d")}),r&&(0,d.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:r})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("div",{className:"plan-hint",children:[(0,d.jsx)("div",{className:"plan-hint-t",children:l("planner.gate.hint.t")}),(0,d.jsx)("div",{className:"plan-hint-d",children:l("planner.gate.hint.d")})]}),(0,d.jsxs)("button",{className:"btn-accent",disabled:m,onClick:w,children:[(0,d.jsx)(g.I,{name:m?"refresh":"bot",size:14,className:m?"sync-spin":""})," ",m?l("planner.gate.analyzing"):l("planner.gate.generate")]})]})]})]})}function v({specs:a,total:b}){let c=(0,h.k)(),[f,i]=(0,e.useTransition)();return(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:c("planner.gate.ready.t")}),(0,d.jsx)("div",{className:"pg-d",children:c("planner.gate.ready.d",{specs:a,total:b})})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("button",{className:"btn-ghost",disabled:f,onClick:()=>i(async()=>{await l(),t("ada",c("planner.gate.rejectPlanDm"))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:13})," ",c("planner.gate.requestChanges")]}),(0,d.jsxs)("button",{className:"btn-accent",disabled:f,onClick:()=>i(()=>(0,m.P)()),children:[(0,d.jsx)(g.I,{name:"check",size:14})," ",c("planner.gate.approvePlan")]})]})]})}function w({specId:a,specKey:b,approved:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)();return c?(0,d.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approved")]}):(0,d.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,d.jsxs)("button",{className:"sc2-btn",disabled:i,onClick:()=>j(()=>(0,n.B)(a)),children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approve")]}),(0,d.jsxs)("button",{className:"sc2-btn danger",disabled:i,onClick:()=>j(async()=>{t((await (0,o.J)(a)).handle,f("planner.rejectItemDm",{key:b}))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:11})," ",f("planner.reject")]})]})}function x({issueId:a,issueKey:b,approved:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)();return c?(0,d.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approved")]}):(0,d.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,d.jsxs)("button",{className:"sc2-btn",disabled:i,onClick:()=>j(()=>(0,p.t)(a)),children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approve")]}),(0,d.jsxs)("button",{className:"sc2-btn danger",disabled:i,onClick:()=>j(async()=>{t((await (0,q.d)(a)).handle,f("planner.rejectItemDm",{key:b}))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:11})," ",f("planner.reject")]})]})}function y({auto:a,approved:b,state:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)(),k=f(i?a?"planner.run247.pausing":"planner.run247.starting":"waiting-approval"===c?"planner.run247.approveToRun":"all-done"===c?"planner.run247.allDone":a?"planner.run247.pause":"planner.run247.run"),l="blocked"===c?f("planner.run247.blockedTip"):void 0,m="off"===c&&!i;return(0,d.jsxs)("button",{className:"btn-"+(a?"ghost":"accent")+(m?" run-attn":""),disabled:!b||"all-done"===c||i,title:l,onClick:()=>j(()=>r(!a)),children:[(0,d.jsx)(g.I,{name:i?"refresh":"waiting-approval"===c?"bot":"all-done"===c?"check":a?"close":"play",size:14,className:i?"sync-spin":""})," ",k,("running"===c||m)&&(0,d.jsx)("span",{className:"dotpulse",style:{marginLeft:6}})]})}},15404:(a,b,c)=>{c.d(b,{P:()=>e});var d=c(2910);let e=(0,d.createServerReference)("00a7004dfc810d6e90f45ba9bd04c2eca003d5e093",d.callServer,void 0,d.findSourceMapURL,"approvePlan")},25543:(a,b,c)=>{c.d(b,{IssueApprove:()=>g,PlanGate:()=>f,PlanGateLive:()=>e,Run247Button:()=>h});var d=c(62060);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call PlanGateLive() from the server but PlanGateLive is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","PlanGateLive");(0,d.registerClientReference)(function(){throw Error("Attempted to call GeneratePlanButton() from the server but GeneratePlanButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","GeneratePlanButton");let f=(0,d.registerClientReference)(function(){throw Error("Attempted to call PlanGate() from the server but PlanGate is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","PlanGate");(0,d.registerClientReference)(function(){throw Error("Attempted to call SpecApprove() from the server but SpecApprove is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","SpecApprove");let g=(0,d.registerClientReference)(function(){throw Error("Attempted to call IssueApprove() from the server but IssueApprove is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","IssueApprove"),h=(0,d.registerClientReference)(function(){throw Error("Attempted to call Run247Button() from the server but Run247Button is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","Run247Button")},30744:(a,b,c)=>{c.r(b),c.d(b,{"000d98b3b88a72c0da9bb16c37f72c90c656d4bc8e":()=>d.Kd,"00afe9f00dc6cfc2f7a294518600306b9fb5e41a4a":()=>d.cT,"4009d25d376d81e9fe444d498f210158c028c43282":()=>d.j0,"4034f4e6b86e944beaaa23e0bce49a7bb5d5cb234b":()=>d.OD});var d=c(14565)},64540:(a,b,c)=>{c.d(b,{t:()=>e});var d=c(2910);let e=(0,d.createServerReference)("400f1502baff617e4723ca3981ce687c276c48b759",d.callServer,void 0,d.findSourceMapURL,"approveIssue")},67779:(a,b,c)=>{c.d(b,{B:()=>e});var d=c(2910);let e=(0,d.createServerReference)("40c8d005e334f79c3d49673bd0c6cd2f849273b72e",d.callServer,void 0,d.findSourceMapURL,"approveSpec")},73134:(a,b,c)=>{c.d(b,{AgentRunLive:()=>j});var d=c(4374),e=c(74679),f=c(47104),g=c(43526);c(94800);var h=c(31819);let i=["read","create","edit","run","search","thinking","done","error"];function j({channel:a,resume:b=!1,sinceSeq:c=0,onFinish:k}){let l=(0,h.k)();(0,f.useRouter)();let[m,n]=(0,e.useState)(b),[o,p]=(0,e.useState)([]),[q,r]=(0,e.useState)(0);if((0,e.useRef)(b?c:0),(0,e.useRef)(!1),(0,e.useRef)(0),!m&&0===o.length)return null;let s=function(a){let b=[];for(let c of a)if("text"===c.kind){let a=(c.detail||"").replace(/\s+/g," ").trim();if(!a)continue;let d=b[b.length-1];d&&"text"===d.kind?d.content=(d.content+" "+a).slice(-600):b.push({id:c.id,kind:"text",content:a})}else if("thinking"===c.kind){let a=(c.detail||c.target||"").replace(/\s+/g," ").trim();a&&b.push({id:c.id,kind:"thinking",content:a})}else b.push({id:c.id,kind:c.kind,content:function(a){if(!a)return"";let b=a.split(/[\\/]/);return b.length>1?b.slice(-2).join("/"):a}(c.target)||c.detail||""});return b}(o),t=s.slice(-5),u=s.length-t.length,v=o.some(a=>"done"===a.kind||"error"===a.kind),w=o.some(a=>"error"===a.kind),x=String(Math.floor(q/60)).padStart(2,"0"),y=String(q%60).padStart(2,"0");return(0,d.jsxs)("div",{className:"card live-stream",style:{marginBottom:16,borderColor:w?"var(--sx-keyword)":"var(--accent)"},children:[(0,d.jsxs)("div",{className:"set-desc",style:{marginBottom:8,display:"flex",alignItems:"center",gap:7},children:[m&&!v?(0,d.jsx)("span",{className:"dotpulse"}):(0,d.jsx)(g.I,{name:w?"close":"check",size:13,style:{color:w?"var(--sx-keyword)":"var(--sx-string)"}}),m&&!v?l("agent.run.working"):w?l("agent.run.failed"):l("agent.run.finished"),s.length>0&&(0,d.jsxs)("span",{style:{color:"var(--text-faint)"},children:["\xb7 ",l(1===s.length?"agent.run.steps.one":"agent.run.steps.other",{n:s.length})]}),(0,d.jsxs)("span",{className:"live-elapsed",style:{marginLeft:"auto"},children:[x,":",y]})]}),0===t.length?(0,d.jsxs)("div",{className:"muted",style:{fontSize:12,display:"flex",alignItems:"center",gap:7},children:[(0,d.jsx)("span",{className:"sync-spin",children:(0,d.jsx)(g.I,{name:"refresh",size:12})})," ",l("agent.run.reading")]}):(0,d.jsxs)(d.Fragment,{children:[u>0&&(0,d.jsx)("div",{className:"live-more",children:l(1===u?"agent.run.earlier.one":"agent.run.earlier.other",{n:u})}),(0,d.jsx)("div",{className:"live-stream-lines",children:t.map(a=>(0,d.jsxs)("div",{className:"live-line "+a.kind,children:["text"!==a.kind&&(0,d.jsx)("span",{className:"ll-k",children:i.includes(a.kind)?l(`agent.verb.${a.kind}`):a.kind}),(0,d.jsxs)("span",{className:"ll-c",children:[a.content,!v&&a===t[t.length-1]&&"text"===a.kind&&(0,d.jsx)("span",{className:"ll-caret"})]})]},a.id))})]})]})}},80926:(a,b,c)=>{c.d(b,{d:()=>e});var d=c(2910);let e=(0,d.createServerReference)("407e9aa8711c5ef7e274c016f412637c44a483fd40",d.callServer,void 0,d.findSourceMapURL,"rejectIssue")}};
@@ -116,4 +116,4 @@ ${c.map(a=>"- "+a).join("\n")||"(scan the project for components / screens / sty
116
116
  1) Create design-mock/styles/global.css with the design tokens (:root), reset/base and theme ([data-theme]).
117
117
  2) Scaffold a skeleton of the main screen(s) under design-mock/screens/ — valid HTML linking ../styles/global.css, with the key sections blocked out as labelled placeholders.
118
118
  3) Write design-mock/design-system.md outlining the palette, typography, spacing, core components and the screens to build.
119
- 4) Tell me what you set up and what to build/validate next before approving.`;return H(`Ada is preparing the delivery plan and needs the design prototyped + approved first (zero drift). ${a}`)}async function W(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Screen not found."}:{ok:!0,html:B(c,a,a=>(0,p.sL)(b.id,a)).slice(0,2e6)}}async function X(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,p.CS)(a.id).filter(a=>a.startsWith("design-mock/")&&/\.(md|markdown)$/i.test(a)&&!/\/README\.md$/i.test(a)).map(a=>({path:a,label:a.replace(/^design-mock\//,"")})).sort((a,b)=>Y(a.path)-Y(b.path)||a.label.localeCompare(b.label));return(0,u.zw)(a.id,b),{docs:c}}function Y(a){return/APPROVED\.md$/i.test(a)?0:/design-system\.md$/i.test(a)?1:2}async function Z(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.(md|markdown)$/i.test(a))return{ok:!1,error:"Not a design doc."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Doc not found."}:{ok:!0,body:c.slice(0,5e5)}}let $=".claude/design-presets.json";async function _(){let{org:a}=await (0,k.nP)(),b=(0,p.sL)(a.id,$);if(!b)return{presets:[]};try{let a=JSON.parse(b);return{presets:Array.isArray(a)?a.slice(0,60):[]}}catch{return{presets:[]}}}async function aa(a,b){let{org:c}=await (0,k.nP)(),d=(a??"").trim();if(!d||d.length>6e4)return{ok:!1,error:"Nothing to save."};let{presets:f}=await _(),g=[{id:"p"+(0,e.randomUUID)().slice(0,6),label:(b||"Preset").slice(0,40),html:d},...f].slice(0,60);return(0,p.dx)(c.id,$,JSON.stringify(g,null,2)),{ok:!0}}async function ab(a){let{org:b}=await (0,k.nP)(),{presets:c}=await _();return(0,p.dx)(b.id,$,JSON.stringify(c.filter(b=>b.id!==a),null,2)),{ok:!0}}async function ac(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,u.zw)(a.id,b);return{screens:c.designMockFiles.filter(a=>/\.html?$/i.test(a)),components:c.designMockFiles.filter(a=>a.startsWith("design-mock/components/"))}}async function ad(a,b,c){let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return;let h=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,d.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:d.id,label:"v"+(h.length+1),note:b.slice(0,300),patch:{files:c}})}async function ae(){let{workspace:a}=await (0,k.nP)();t();let[b]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);return b?{versions:(await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,b.id)).orderBy((0,g.i)(j.designVersion.createdAt))).map(a=>{let b=a.patch;return{id:a.id,label:a.label,note:a.note,files:b?.files??[],restorable:!!b?.snapshot,createdAt:a.createdAt.getTime()}})}:{versions:[]}}async function af(a,b){return H(`Restore the prototype to ${a} — "${b}". Re-apply that state to the screens under design-mock/screens/ and tell me what changed.`)}async function ag(a){let{org:b,workspace:c}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};t();let d=(0,p.sL)(b.id,a);if(null==d)return{ok:!1,error:"Screen not found."};let[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!l)return{ok:!1,error:"No design session."};let m="Saved v"+((await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,l.id))).length+1),n=(a.split("/").pop()||a).replace(/\.[a-z]+$/i,"");await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:l.id,label:m,note:`Checkpoint \xb7 ${n}`,patch:{files:[a],snapshot:d}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,label:m}}async function ah(a){let{org:b,workspace:c}=await (0,k.nP)();t();let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return{ok:!1,error:"No design session."};let[e]=await i.db.select().from(j.designVersion).where((0,f.Uo)((0,f.eq)(j.designVersion.id,a),(0,f.eq)(j.designVersion.sessionId,d.id))).limit(1);if(!e)return{ok:!1,error:"Checkpoint not found."};let l=e.patch,m=l?.files?.[0];if(!l?.snapshot||!m)return{ok:!1,error:"This version isn't a restorable checkpoint."};if(!m.startsWith("design-mock/")||m.includes(".."))return{ok:!1,error:"Bad path."};(0,p.dx)(b.id,m,l.snapshot);try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ai(a){let{workspace:b}=await (0,k.nP)();t();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return{comments:[]};let d=a?(0,f.Uo)((0,f.eq)(j.designComment.sessionId,c.id),(0,f.eq)(j.designComment.pageKey,a)):(0,f.eq)(j.designComment.sessionId,c.id);return{comments:(await i.db.select().from(j.designComment).where(d).orderBy(j.designComment.createdAt)).map(a=>({id:a.id,pageKey:a.pageKey,xp:a.xp,yp:a.yp,body:a.body,reply:a.reply,selection:a.selection,createdAt:a.createdAt.getTime()}))}}async function aj(a,b,c,d,f){let g=d?.trim();if(!g)return{ok:!1,error:"Empty comment."};t();let k=await F(),l=(0,e.randomUUID)();await i.db.insert(j.designComment).values({id:l,sessionId:k.id,pageKey:(a||"").slice(0,300),xp:b,yp:c,body:g.slice(0,2e3),reply:"",selection:f??null});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:l}}async function ak(a,b,c){t();let d=await F(),f=(0,e.randomUUID)(),g=(c||"").trim();await i.db.insert(j.designComment).values({id:f,sessionId:d.id,pageKey:(a||"").slice(0,300),xp:b.x,yp:b.y,body:(g||"(region marked for review)").slice(0,2e3),reply:"",selection:{kind:"markup",rect:b}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:f}}async function al(a){let{workspace:b}=await (0,k.nP)();t();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);c&&await i.db.delete(j.designComment).where((0,f.Uo)((0,f.eq)(j.designComment.id,a),(0,f.eq)(j.designComment.sessionId,c.id)));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function am(a,b,c){let{org:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let e=(b??"").trim();if(!e)return{ok:!1,error:"Nothing to replace."};let f=(0,p.sL)(d.id,a);if(null==f)return{ok:!1,error:"Screen not found."};let g=f.indexOf(e);if(g<0)return{ok:!1,error:"Couldn't locate that text — ask Grace to apply it."};if(f.indexOf(e,g+1)>=0)return{ok:!1,error:"That text appears more than once — ask Grace to apply it."};(0,p.dx)(d.id,a,f.slice(0,g)+(c??"")+f.slice(g+e.length));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function an(a,b){let{org:c,workspace:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};if(null==b)return{ok:!1,error:"Nothing to commit."};if(b.length>4e6)return{ok:!1,error:"Screen too large."};let e=b,f=e.match(/<body[^>]*>([\s\S]*)<\/body>/i);f&&(e=f[1]),e=e.replace(/<!doctype[^>]*>/gi,"").replace(/<\/?(?:html|head|body)\b[^>]*>/gi,"");let g=(0,p.sL)(c.id,a);if(null==g)return{ok:!1,error:"Screen not found."};let i=g.match(/<body([^>]*)>[\s\S]*<\/body>/i),j=i&&null!=i.index?g.slice(0,i.index)+`<body${i[1]}>`+e+"</body>"+g.slice(i.index+i[0].length):`<!doctype html><html><head><meta charset="utf-8"></head><body>${e}</body></html>`;(0,p.dx)(c.id,a,j);try{await ao(d.id,a)}catch{}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ao(a,b){let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return;let d="Manual canvas edit",[h]=await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id)).orderBy((0,g.i)(j.designVersion.createdAt)).limit(1);if(h&&h.note===d&&Date.now()-h.createdAt.getTime()<9e4){let a=Array.from(new Set([...h.patch?.files??[],b]));await i.db.update(j.designVersion).set({patch:{files:a},createdAt:new Date}).where((0,f.eq)(j.designVersion.id,h.id))}else{let a=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:c.id,label:"v"+(a.length+1),note:d,patch:{files:[b]}})}}async function ap(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,u.zw)(a.id,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!c.length)return{ok:!1,built:[],error:"No screens to build yet — ask Grace for a screen first."};let d=[];for(let b of c){let c=(0,p.sL)(a.id,b);if(null==c)continue;let{out:e,obfuscated:f}=function(a){let b=/<script\b/i.test(a),c=function(a){let b;return(b=[],a.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,c)=>`<style${b}>${c.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,])\s*/g,"$1").replace(/:\s+/g,":").replace(/;}/g,"}").trim()}</style>`).replace(/<(script|style)\b[\s\S]*?<\/\1>/gi,a=>(b.push(a),`\0${b.length-1}\0`)).replace(/<!--(?!\[if)[\s\S]*?-->/g,"").replace(/(\d+)/g,(a,c)=>b[Number(c)])).trim()}(a);return b||(c=function(a){if(/<script\b/i.test(a))return a;let b=new Set;for(let c of a.matchAll(/class\s*=\s*"([^"]*)"/gi))c[1].split(/\s+/).filter(Boolean).forEach(a=>b.add(a));if(!b.size)return a;let c=new Map;[...b].forEach((a,b)=>c.set(a,function(a){let b="",c=a+1;for(;c>0;)b="abcdefghijklmnopqrstuvwxyz"[--c%26]+b,c=Math.floor(c/26);return b}(b)));let d=a.replace(/class\s*=\s*"([^"]*)"/gi,(a,b)=>`class="${b.split(/\s+/).filter(Boolean).map(a=>c.get(a)??a).join(" ")}"`);return d.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,d)=>{let e=d;for(let[a,b]of c)e=e.replace(RegExp("\\."+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?![-_\\w])","g"),"."+b);return`<style${b}>${e}</style>`})}(c)),{out:c,obfuscated:!b}}(B(c,b,b=>(0,p.sL)(a.id,b))),g=`design-mock/dist/${b.split("/").pop()}`;(0,p.dx)(a.id,g,e),d.push({path:g,before:c.length,after:e.length,obfuscated:f})}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,built:d}}(0,C.D)([F,G,H,I,J,K,L,M,N,O,Q,T,U,V,W,X,Z,_,aa,ab,ac,ae,af,ag,ah,ai,aj,ak,al,am,an,ap]),(0,d.A)(F,"005eb4893b1e512faf4421ca4b7e75fff599074e17",null),(0,d.A)(G,"40e66a004301dc99f15f2608fac3a6560de975f851",null),(0,d.A)(H,"700f964a4b50becaacdd88e7650b66718f5cd8dc7b",null),(0,d.A)(I,"40104e3f5d98ea464ee672c32c0300f24fbfb7956f",null),(0,d.A)(J,"7021668545dfe92417d5a7a2e640816b5f9179c339",null),(0,d.A)(K,"0070ebdbc96d2494dec393065dc20d3e1428946b54",null),(0,d.A)(L,"60749086c507cd288a6467eaf4ddb4ba491c9b0370",null),(0,d.A)(M,"003426238e2afd09e1ff683df65d7cf57f365f0962",null),(0,d.A)(N,"60b6b0192e59a6db12c7e8037e4b827a7367795aab",null),(0,d.A)(O,"002c0373eb489ecbc946c950c8ea8d521c7213317f",null),(0,d.A)(Q,"6094c9c31617426b089c8127d6fbdbb84090a8e2c9",null),(0,d.A)(T,"600159a7c0a9148c31ba4aab639d38dd75e689cdf8",null),(0,d.A)(U,"00caf518bdee64b8e365f2de8f5e807f028e55958d",null),(0,d.A)(V,"00b6085e87c60d69c98335e7ef04a5574220b4f025",null),(0,d.A)(W,"40af5dbd3aa35380e77900d419d87a5476ee59d61f",null),(0,d.A)(X,"0037eb6e1f803a7499d013ecaab6117032935d1b72",null),(0,d.A)(Z,"4085d74d131ad9bf899770cb28b2a74b5e4fb3b400",null),(0,d.A)(_,"004ce9f8e7df6b350e290d12470ef196a750e4149d",null),(0,d.A)(aa,"60417785708caded29d4ec16beff83b97071aa8eab",null),(0,d.A)(ab,"40314400968043e4211eb1a33f0411b6a4e81073db",null),(0,d.A)(ac,"0054aed3bbc6eb774bcc077faa643b1a3f215b8d8d",null),(0,d.A)(ae,"00c5d56da7decbec8096882f7d50264b3ae26069b7",null),(0,d.A)(af,"6099335f5d628ec80a08eea59ddc024ae4003b6cf3",null),(0,d.A)(ag,"40a365881044a266aad4ddc3f3542bdbd40ea80976",null),(0,d.A)(ah,"401537863fc299cde8711d47d73c711da22420fd28",null),(0,d.A)(ai,"40fb2f95350f09e70822a896e6c4d2e813adb423f9",null),(0,d.A)(aj,"7c037277c7fba4ca0e413ee86c0199e0ee063957b3",null),(0,d.A)(ak,"70f2d351d4b0f68980846fd1cd3eb10734aaf8baa9",null),(0,d.A)(al,"40dcf3ab7a2818d71a2bce6c8764a1ea4a4c8f9117",null),(0,d.A)(am,"70fa9b591b64643dc3e52f6796aa779c5130236060",null),(0,d.A)(an,"60022aad2416c9dfe4508966ca25588590c11049dd",null),(0,d.A)(ap,"00b0424273db45fdd1ed9819fbf3a0261297582ed7",null)}};
119
+ 4) Tell me what you set up and what to build/validate next before approving.`;return H(`Ada is preparing the delivery plan and needs the design prototyped + approved first (zero drift). ${a}`)}async function W(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Screen not found."}:{ok:!0,html:B(c,a,a=>(0,p.sL)(b.id,a)).slice(0,2e6)}}async function X(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,p.CS)(a.id).filter(a=>a.startsWith("design-mock/")&&/\.(md|markdown)$/i.test(a)&&!/\/README\.md$/i.test(a)).map(a=>({path:a,label:a.replace(/^design-mock\//,"")})).sort((a,b)=>Y(a.path)-Y(b.path)||a.label.localeCompare(b.label));return(0,u.zw)(a.id,b),{docs:c}}function Y(a){return/APPROVED\.md$/i.test(a)?0:/design-system\.md$/i.test(a)?1:2}async function Z(a){let{org:b}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.(md|markdown)$/i.test(a))return{ok:!1,error:"Not a design doc."};let c=(0,p.sL)(b.id,a);return null==c?{ok:!1,error:"Doc not found."}:{ok:!0,body:c.slice(0,5e5)}}let $=".claude/design-presets.json";async function _(){let{org:a}=await (0,k.nP)(),b=(0,p.sL)(a.id,$);if(!b)return{presets:[]};try{let a=JSON.parse(b);return{presets:Array.isArray(a)?a.slice(0,60):[]}}catch{return{presets:[]}}}async function aa(a,b){let{org:c}=await (0,k.nP)(),d=(a??"").trim();if(!d||d.length>6e4)return{ok:!1,error:"Nothing to save."};let{presets:f}=await _(),g=[{id:"p"+(0,e.randomUUID)().slice(0,6),label:(b||"Preset").slice(0,40),html:d},...f].slice(0,60);return(0,p.dx)(c.id,$,JSON.stringify(g,null,2)),{ok:!0}}async function ab(a){let{org:b}=await (0,k.nP)(),{presets:c}=await _();return(0,p.dx)(b.id,$,JSON.stringify(c.filter(b=>b.id!==a),null,2)),{ok:!0}}async function ac(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,u.zw)(a.id,b);return{screens:c.designMockFiles.filter(a=>/\.html?$/i.test(a)),components:c.designMockFiles.filter(a=>a.startsWith("design-mock/components/"))}}async function ad(a,b,c){let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return;let h=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,d.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:d.id,label:"v"+(h.length+1),note:b.slice(0,300),patch:{files:c}})}async function ae(){let{workspace:a}=await (0,k.nP)();t();let[b]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);return b?{versions:(await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,b.id)).orderBy((0,g.i)(j.designVersion.createdAt))).map(a=>{let b=a.patch;return{id:a.id,label:a.label,note:a.note,files:b?.files??[],restorable:!!b?.snapshot,createdAt:a.createdAt.getTime()}})}:{versions:[]}}async function af(a,b){return H(`Restore the prototype to ${a} — "${b}". Re-apply that state to the screens under design-mock/screens/ and tell me what changed.`)}async function ag(a){let{org:b,workspace:c}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};t();let d=(0,p.sL)(b.id,a);if(null==d)return{ok:!1,error:"Screen not found."};let[l]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!l)return{ok:!1,error:"No design session."};let m="Saved v"+((await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,l.id))).length+1),n=(a.split("/").pop()||a).replace(/\.[a-z]+$/i,"");await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:l.id,label:m,note:`Checkpoint \xb7 ${n}`,patch:{files:[a],snapshot:d}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,label:m}}async function ah(a){let{org:b,workspace:c}=await (0,k.nP)();t();let[d]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,c.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!d)return{ok:!1,error:"No design session."};let[e]=await i.db.select().from(j.designVersion).where((0,f.Uo)((0,f.eq)(j.designVersion.id,a),(0,f.eq)(j.designVersion.sessionId,d.id))).limit(1);if(!e)return{ok:!1,error:"Checkpoint not found."};let l=e.patch,m=l?.files?.[0];if(!l?.snapshot||!m)return{ok:!1,error:"This version isn't a restorable checkpoint."};if(!m.startsWith("design-mock/")||m.includes(".."))return{ok:!1,error:"Bad path."};(0,p.dx)(b.id,m,l.snapshot);try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ai(a){let{workspace:b}=await (0,k.nP)();t();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return{comments:[]};let d=a?(0,f.Uo)((0,f.eq)(j.designComment.sessionId,c.id),(0,f.eq)(j.designComment.pageKey,a)):(0,f.eq)(j.designComment.sessionId,c.id);return{comments:(await i.db.select().from(j.designComment).where(d).orderBy(j.designComment.createdAt)).map(a=>({id:a.id,pageKey:a.pageKey,xp:a.xp,yp:a.yp,body:a.body,reply:a.reply,selection:a.selection,createdAt:a.createdAt.getTime()}))}}async function aj(a,b,c,d,f){let g=d?.trim();if(!g)return{ok:!1,error:"Empty comment."};t();let k=await F(),l=(0,e.randomUUID)();await i.db.insert(j.designComment).values({id:l,sessionId:k.id,pageKey:(a||"").slice(0,300),xp:b,yp:c,body:g.slice(0,2e3),reply:"",selection:f??null});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:l}}async function ak(a,b,c){t();let d=await F(),f=(0,e.randomUUID)(),g=(c||"").trim();await i.db.insert(j.designComment).values({id:f,sessionId:d.id,pageKey:(a||"").slice(0,300),xp:b.x,yp:b.y,body:(g||"(region marked for review)").slice(0,2e3),reply:"",selection:{kind:"markup",rect:b}});try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,id:f}}async function al(a){let{workspace:b}=await (0,k.nP)();t();let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,b.id)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);c&&await i.db.delete(j.designComment).where((0,f.Uo)((0,f.eq)(j.designComment.id,a),(0,f.eq)(j.designComment.sessionId,c.id)));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function am(a,b,c){let{org:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};let e=(b??"").trim();if(!e)return{ok:!1,error:"Nothing to replace."};let f=(0,p.sL)(d.id,a);if(null==f)return{ok:!1,error:"Screen not found."};let g=f.indexOf(e);if(g<0)return{ok:!1,error:"Couldn't locate that text — ask Grace to apply it."};if(f.indexOf(e,g+1)>=0)return{ok:!1,error:"That text appears more than once — ask Grace to apply it."};(0,p.dx)(d.id,a,f.slice(0,g)+(c??"")+f.slice(g+e.length));try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function an(a,b){let{org:c,workspace:d}=await (0,k.nP)();if(!a||!a.startsWith("design-mock/")||a.includes("..")||!/\.html?$/i.test(a))return{ok:!1,error:"Not a design screen."};if(null==b)return{ok:!1,error:"Nothing to commit."};if(b.length>4e6)return{ok:!1,error:"Screen too large."};let e=b,f=e.match(/<body[^>]*>([\s\S]*)<\/body>/i);f&&(e=f[1]),e=e.replace(/<!doctype[^>]*>/gi,"").replace(/<\/?(?:html|head|body)\b[^>]*>/gi,"");let g=(0,p.sL)(c.id,a);if(null==g)return{ok:!1,error:"Screen not found."};let i=g.match(/<body([^>]*)>[\s\S]*<\/body>/i),j=i&&null!=i.index?g.slice(0,i.index)+`<body${i[1]}>`+e+"</body>"+g.slice(i.index+i[0].length):`<!doctype html><html><head><meta charset="utf-8"></head><body>${e}</body></html>`;(0,p.dx)(c.id,a,j);try{await ao(d.id,a)}catch{}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0}}async function ao(a,b){let[c]=await i.db.select({id:j.designSession.id}).from(j.designSession).where((0,f.eq)(j.designSession.workspaceId,a)).orderBy((0,g.i)(j.designSession.createdAt)).limit(1);if(!c)return;let d="Manual canvas edit",[h]=await i.db.select().from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id)).orderBy((0,g.i)(j.designVersion.createdAt)).limit(1);if(h&&h.note===d&&Date.now()-h.createdAt.getTime()<9e4){let a=Array.from(new Set([...h.patch?.files??[],b]));await i.db.update(j.designVersion).set({patch:{files:a},createdAt:new Date}).where((0,f.eq)(j.designVersion.id,h.id))}else{let a=await i.db.select({id:j.designVersion.id}).from(j.designVersion).where((0,f.eq)(j.designVersion.sessionId,c.id));await i.db.insert(j.designVersion).values({id:(0,e.randomUUID)(),sessionId:c.id,label:"v"+(a.length+1),note:d,patch:{files:[b]}})}}async function ap(){let{org:a,workspace:b}=await (0,k.nP)(),c=(0,u.zw)(a.id,b).designMockFiles.filter(a=>/design-mock\/screens\/.+\.html?$/i.test(a));if(!c.length)return{ok:!1,built:[],error:"No screens to build yet — ask Grace for a screen first."};let d=[];for(let b of c){let c=(0,p.sL)(a.id,b);if(null==c)continue;let{out:e,obfuscated:f}=function(a){let b=/<script\b/i.test(a),c=function(a){let b;return(b=[],a.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,c)=>`<style${b}>${c.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,])\s*/g,"$1").replace(/:\s+/g,":").replace(/;}/g,"}").trim()}</style>`).replace(/<(script|style)\b[\s\S]*?<\/\1>/gi,a=>(b.push(a),`\0${b.length-1}\0`)).replace(/<!--(?!\[if)[\s\S]*?-->/g,"").replace(/(\d+)/g,(a,c)=>b[Number(c)])).trim()}(a);return b||(c=function(a){if(/<script\b/i.test(a))return a;let b=new Set;for(let c of a.matchAll(/class\s*=\s*"([^"]*)"/gi))c[1].split(/\s+/).filter(Boolean).forEach(a=>b.add(a));if(!b.size)return a;let c=new Map;[...b].forEach((a,b)=>c.set(a,function(a){let b="",c=a+1;for(;c>0;)b="abcdefghijklmnopqrstuvwxyz"[--c%26]+b,c=Math.floor(c/26);return b}(b)));let d=a.replace(/class\s*=\s*"([^"]*)"/gi,(a,b)=>`class="${b.split(/\s+/).filter(Boolean).map(a=>c.get(a)??a).join(" ")}"`);return d.replace(/<style\b([^>]*)>([\s\S]*?)<\/style>/gi,(a,b,d)=>{let e=d;for(let[a,b]of c)e=e.replace(RegExp("\\."+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?![-_\\w])","g"),"."+b);return`<style${b}>${e}</style>`})}(c)),{out:c,obfuscated:!b}}(B(c,b,b=>(0,p.sL)(a.id,b))),g=`design-mock/dist/${b.split("/").pop()}`;(0,p.dx)(a.id,g,e),d.push({path:g,before:c.length,after:e.length,obfuscated:f})}try{(0,h.revalidatePath)("/design")}catch{}return{ok:!0,built:d}}(0,C.D)([F,G,H,I,J,K,L,M,N,O,Q,T,U,V,W,X,Z,_,aa,ab,ac,ae,af,ag,ah,ai,aj,ak,al,am,an,ap]),(0,d.A)(F,"0030c8d446fa5d6a9f06f28d2f0e13d616d8359bf0",null),(0,d.A)(G,"40e2634e29447d1a79a4589d0209147cc35e3a4f8b",null),(0,d.A)(H,"70283dc35f63e3f9641ea7be1ba25eaccb45a10788",null),(0,d.A)(I,"40393c94959615d5e12fedd0ada3b520569ba610da",null),(0,d.A)(J,"702bc1eae659f800327a97d7da88ca3c13bd6d6018",null),(0,d.A)(K,"0020f5b4bf1a2118e24c852c54d400f1927cc1582d",null),(0,d.A)(L,"60de34b03ecc854dfa8ebeb317ac7fca683e593e25",null),(0,d.A)(M,"0067a12792ed6794fa23d38e8fa831aa63e9674549",null),(0,d.A)(N,"60e06e44b9e20604b541280ee75f85a4b780e9ebbe",null),(0,d.A)(O,"00fdd395e7e9c9c038392b53f9181a93e78d57cd50",null),(0,d.A)(Q,"6013b9ca137da82342d0d4d0ce0222660ac4be328d",null),(0,d.A)(T,"607191661d0d0d7c456c788d618d4f4c7bcf886ea3",null),(0,d.A)(U,"00868fe54fb579add0f212e1f823d564328d7d5432",null),(0,d.A)(V,"00183937ee05ae4cbf391a1b51cfc16c2f861738f1",null),(0,d.A)(W,"4079e2b639aee160d1b4b0d6a899d39e3484a05c32",null),(0,d.A)(X,"002ab6492658649f1fb72f63e6548882c486996697",null),(0,d.A)(Z,"40a70fb05d3ee3689af4c2d699110c95c7f196e401",null),(0,d.A)(_,"004216f7ac78a8a71bd8262563d0e0115f46de3334",null),(0,d.A)(aa,"607bbf2173faf70ab65a0403634d2c347f9e25d8cd",null),(0,d.A)(ab,"40f64d6f4af4f3090b9970dfb540b3c1763668edd7",null),(0,d.A)(ac,"0084808234a98b8a67c04157bfa772eee8ad2821f2",null),(0,d.A)(ae,"001e19b6d2f892fbdf995a9e284a074a277fe0ca06",null),(0,d.A)(af,"60274e3c8fcd8421d02f318a50057ea2e101dbf0eb",null),(0,d.A)(ag,"4011d6f9217de94ea7c6dc94551d744b7282fab975",null),(0,d.A)(ah,"404b1d63339057a37248bc6add59407f0d209693be",null),(0,d.A)(ai,"408e9862e1393f93d3ce5c54d77c7dcad8cafc8290",null),(0,d.A)(aj,"7cfb4d8cc417db796a81842a078878af7d9f3cb8d1",null),(0,d.A)(ak,"70f883f3483c03cb82e81e32abfaf98fc2ce69063f",null),(0,d.A)(al,"400b23af4cfe05bae4f2b307de3beba8c3ab1ab148",null),(0,d.A)(am,"708bd03c8aa9d1ae57e07b573e36fd0cb7e567921c",null),(0,d.A)(an,"60b14ad3fdf5a4a8694b12fddfc076accfa2720306",null),(0,d.A)(ap,"00cf3df6ec75d6c06c3f41a1936b72df167e738c9b",null)}};
@@ -1 +1 @@
1
- "use strict";exports.id=260,exports.ids=[260],exports.modules={22362:(a,b,c)=>{c.d(b,{n:()=>d,t:()=>e});let d="kysely_migration",e="kysely_migration_lock"},80260:(a,b,c)=>{c.d(b,{D1SqliteDialect:()=>l});var d=c(22362),e=c(55060),f=c(30017),g=class extends e.U{},h=class{#a;#b;constructor(a){this.#a={...a}}async init(){this.#b=new i(this.#a.database),this.#a.onCreateConnection&&await this.#a.onCreateConnection(this.#b)}async acquireConnection(){return this.#b}async beginTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async commitTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async rollbackTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async releaseConnection(){}async destroy(){}},i=class{#c;constructor(a){this.#c=a}async executeQuery(a){let b=await this.#c.prepare(a.sql).bind(...a.parameters).all(),c=null!=b.meta.changes?BigInt(b.meta.changes):void 0;return{insertId:void 0===b.meta.last_row_id||null===b.meta.last_row_id?void 0:BigInt(b.meta.last_row_id),rows:b?.results||[],numAffectedRows:c}}async *streamQuery(){throw Error("D1 does not support streaming queries.")}},j=class{#c;#d;constructor(a,b){this.#c=a,this.#d=b}async getSchemas(){return[]}async getTables(a={withInternalKyselyTables:!1}){let b=this.#c.selectFrom("sqlite_master").where("type","in",["table","view"]).where("name","not like","sqlite_%").where("name","not like","_cf_%").select(["name","type","sql"]).$castTo();a.withInternalKyselyTables||(b=b.where("name","!=",d.n).where("name","!=",d.t));let c=await b.execute();if(0===c.length)return[];let e=c.map(a=>this.#d.prepare("SELECT * FROM pragma_table_info(?)").bind(a.name)),f=await this.#d.batch(e);return c.map((a,b)=>{let c=f[b]?.results??[],d=a.sql?.split(/[(),]/)?.find(a=>a.toLowerCase().includes("autoincrement"))?.split(/\s+/)?.filter(Boolean)?.[0]?.replace(/["`]/g,"");if(!d){let a=c.filter(a=>a.pk>0),b=1===a.length?a[0]:void 0;b&&"integer"===b.type.toLowerCase()&&(d=b.name)}return{name:a.name,isView:"view"===a.type,isForeign:!1,columns:c.map(a=>({name:a.name,dataType:a.type,isNullable:!a.notnull,isAutoIncrementing:a.name===d,hasDefaultValue:null!=a.dflt_value}))}})}},k=class extends f.s{},l=class{#a;constructor(a){this.#a={...a}}createDriver(){return new h(this.#a)}createQueryCompiler(){return new k}createAdapter(){return new g}createIntrospector(a){return new j(a,this.#a.database)}}}};
1
+ "use strict";exports.id=260,exports.ids=[260],exports.modules={22362:(a,b,c)=>{c.d(b,{n:()=>d,t:()=>e});let d="kysely_migration",e="kysely_migration_lock"},57879:(a,b,c)=>{c.d(b,{D1SqliteDialect:()=>l});var d=c(22362),e=c(55060),f=c(30017),g=class extends e.U{},h=class{#a;#b;constructor(a){this.#a={...a}}async init(){this.#b=new i(this.#a.database),this.#a.onCreateConnection&&await this.#a.onCreateConnection(this.#b)}async acquireConnection(){return this.#b}async beginTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async commitTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async rollbackTransaction(){throw Error("D1 does not support interactive transactions. Use the D1 batch() API instead.")}async releaseConnection(){}async destroy(){}},i=class{#c;constructor(a){this.#c=a}async executeQuery(a){let b=await this.#c.prepare(a.sql).bind(...a.parameters).all(),c=null!=b.meta.changes?BigInt(b.meta.changes):void 0;return{insertId:void 0===b.meta.last_row_id||null===b.meta.last_row_id?void 0:BigInt(b.meta.last_row_id),rows:b?.results||[],numAffectedRows:c}}async *streamQuery(){throw Error("D1 does not support streaming queries.")}},j=class{#c;#d;constructor(a,b){this.#c=a,this.#d=b}async getSchemas(){return[]}async getTables(a={withInternalKyselyTables:!1}){let b=this.#c.selectFrom("sqlite_master").where("type","in",["table","view"]).where("name","not like","sqlite_%").where("name","not like","_cf_%").select(["name","type","sql"]).$castTo();a.withInternalKyselyTables||(b=b.where("name","!=",d.n).where("name","!=",d.t));let c=await b.execute();if(0===c.length)return[];let e=c.map(a=>this.#d.prepare("SELECT * FROM pragma_table_info(?)").bind(a.name)),f=await this.#d.batch(e);return c.map((a,b)=>{let c=f[b]?.results??[],d=a.sql?.split(/[(),]/)?.find(a=>a.toLowerCase().includes("autoincrement"))?.split(/\s+/)?.filter(Boolean)?.[0]?.replace(/["`]/g,"");if(!d){let a=c.filter(a=>a.pk>0),b=1===a.length?a[0]:void 0;b&&"integer"===b.type.toLowerCase()&&(d=b.name)}return{name:a.name,isView:"view"===a.type,isForeign:!1,columns:c.map(a=>({name:a.name,dataType:a.type,isNullable:!a.notnull,isAutoIncrementing:a.name===d,hasDefaultValue:null!=a.dflt_value}))}})}},k=class extends f.s{},l=class{#a;constructor(a){this.#a={...a}}createDriver(){return new h(this.#a)}createQueryCompiler(){return new k}createAdapter(){return new g}createIntrospector(a){return new j(a,this.#a.database)}}}};
@@ -144,4 +144,4 @@ This pass: merged ${v}, retired ${w}, re-summarised ${x}.
144
144
 
145
145
  `+(y.length?`## Coverage gaps
146
146
  ${y.map(a=>`- ${a}`).join("\n")}
147
- `:"No coverage gaps reported.\n");try{await (0,n.g)(c.orgId,"Reports/kb-health.md",C)}catch{}return v+w+x+y.length>0&&await (0,o.I)(c.id,{kind:"report",text:"KB curated",detail:`merged ${v}, retired ${w}, re-summarised ${x}, ${y.length} gap(s).`,agentId:j.id}),{ok:s.ok,merged:v,retired:w,summarized:x,gaps:y.length}}catch{return b}}let U=new Map,V=new Map},14024:(a,b,c)=>{c.d(b,{_:()=>g});let d={"gpt-4o":[2.5,10],"gpt-4o-mini":[.15,.6],"o4-mini":[1.1,4.4],"gemini-2.0-flash":[.1,.4],"gemini-1.5-pro":[1.25,5],"gemini-1.5-flash":[.075,.3]};function e(a,b,c){let e=Object.keys(d).find(b=>a.toLowerCase().startsWith(b));if(!e)return 0;let[f,g]=d[e];return b/1e6*f+c/1e6*g}function f(a,b,c,d){return{ok:!1,text:"",usd:0,inputTokens:0,outputTokens:0,durationMs:c,binary:a,model:b,error:d}}async function g(a,b,c,d){let g,h=Date.now(),i=b.baseUrl.replace(/\/$/,""),j="google"===b.provider,k=j?`${i}/models/${encodeURIComponent(b.model)}:streamGenerateContent?alt=sse&key=${encodeURIComponent(b.apiKey)}`:`${i}/chat/completions`,l={"content-type":"application/json"};!j&&b.apiKey&&(l.authorization=`Bearer ${b.apiKey}`);let m=j?{contents:[{role:"user",parts:[{text:a}]}]}:{model:b.model,messages:[{role:"user",content:a}],stream:!0,stream_options:{include_usage:!0}};try{g=await fetch(k,{method:"POST",headers:l,body:JSON.stringify(m),signal:AbortSignal.timeout(c.timeoutMs??18e4)})}catch(a){return f(b.provider,b.model,Date.now()-h,String(a instanceof Error?a.message:a))}if(!g.ok||!g.body){let a=await g.text().catch(()=>"");return f(b.provider,b.model,Date.now()-h,`http ${g.status} ${a.slice(0,200)}`)}let n=g.body.getReader(),o=new TextDecoder,p="",q="",r=0,s=0,t=0,u=()=>{q.length>r&&(d({kind:"text",detail:q.slice(r,r+8e3)}),r=q.length)};try{for(;;){let a,{value:b,done:c}=await n.read();if(c)break;for(p+=o.decode(b,{stream:!0});(a=p.indexOf("\n"))>=0;){let b=p.slice(0,a).trim();if(p=p.slice(a+1),!b.startsWith("data:"))continue;let c=b.slice(5).trim();if("[DONE]"!==c)try{let a=JSON.parse(c);if(j){let b=a.candidates?.[0]?.content?.parts?.map(a=>a.text??"").join("")??"";b&&(q+=b).length-r>=120&&u();let c=a.usageMetadata;c&&(s=c.promptTokenCount??s,t=c.candidatesTokenCount??t)}else{let b=a.choices?.[0]?.delta?.content??"";b&&(q+=b).length-r>=120&&u(),a.usage&&(s=a.usage.prompt_tokens??s,t=a.usage.completion_tokens??t)}}catch{}}}}catch(a){return u(),d({kind:"done"}),{ok:!!q,text:q,usd:e(b.model,s,t),inputTokens:s,outputTokens:t,durationMs:Date.now()-h,binary:b.provider,model:b.model,error:q?void 0:String(a instanceof Error?a.message:a)}}return u(),d({kind:"done"}),{ok:!!q.trim(),text:q,usd:e(b.model,s,t),inputTokens:s,outputTokens:t,durationMs:Date.now()-h,binary:b.provider,model:b.model,error:q.trim()?void 0:"empty response"}}},48938:(a,b,c)=>{c.d(b,{Z:()=>f});let d=["CONSTELLA_VAULT_KEY","BETTER_AUTH_SECRET","CONSTELLA_WORKER_SECRET"],e=RegExp("sk-[A-Za-z0-9_-]{16,}|gh[posru]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{40,}|AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{30,}|xox[baprs]-[A-Za-z0-9-]{10,}|eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{6,}|-----BEGIN[\\s\\S]*?PRIVATE KEY-----[\\s\\S]*?-----END[\\s\\S]*?-----|\\bcn_[A-Za-z0-9_-]{24,}\\b|\\b\\d{6,}:[A-Za-z0-9_-]{30,}\\b","g");function f(a,b=[]){if(!a)return a;let c=a;for(let a of[...b,...d.map(a=>process.env[a])])a&&a.length>=8&&(c=c.split(a).join("[redacted]"));return c.replace(e,"[redacted]")}},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,"700d9e5428bda6c4b953e511f1fab9bb77dc8b50e0",null),(0,d.A)(w,"6008e6afb5884710aaaae699139aac177b4b62f8d0",null),(0,d.A)(x,"40353e520652a8224e8ad28436fa1e61a96ed87043",null)}};
147
+ `:"No coverage gaps reported.\n");try{await (0,n.g)(c.orgId,"Reports/kb-health.md",C)}catch{}return v+w+x+y.length>0&&await (0,o.I)(c.id,{kind:"report",text:"KB curated",detail:`merged ${v}, retired ${w}, re-summarised ${x}, ${y.length} gap(s).`,agentId:j.id}),{ok:s.ok,merged:v,retired:w,summarized:x,gaps:y.length}}catch{return b}}let U=new Map,V=new Map},14024:(a,b,c)=>{c.d(b,{_:()=>g});let d={"gpt-4o":[2.5,10],"gpt-4o-mini":[.15,.6],"o4-mini":[1.1,4.4],"gemini-2.0-flash":[.1,.4],"gemini-1.5-pro":[1.25,5],"gemini-1.5-flash":[.075,.3]};function e(a,b,c){let e=Object.keys(d).find(b=>a.toLowerCase().startsWith(b));if(!e)return 0;let[f,g]=d[e];return b/1e6*f+c/1e6*g}function f(a,b,c,d){return{ok:!1,text:"",usd:0,inputTokens:0,outputTokens:0,durationMs:c,binary:a,model:b,error:d}}async function g(a,b,c,d){let g,h=Date.now(),i=b.baseUrl.replace(/\/$/,""),j="google"===b.provider,k=j?`${i}/models/${encodeURIComponent(b.model)}:streamGenerateContent?alt=sse&key=${encodeURIComponent(b.apiKey)}`:`${i}/chat/completions`,l={"content-type":"application/json"};!j&&b.apiKey&&(l.authorization=`Bearer ${b.apiKey}`);let m=j?{contents:[{role:"user",parts:[{text:a}]}]}:{model:b.model,messages:[{role:"user",content:a}],stream:!0,stream_options:{include_usage:!0}};try{g=await fetch(k,{method:"POST",headers:l,body:JSON.stringify(m),signal:AbortSignal.timeout(c.timeoutMs??18e4)})}catch(a){return f(b.provider,b.model,Date.now()-h,String(a instanceof Error?a.message:a))}if(!g.ok||!g.body){let a=await g.text().catch(()=>"");return f(b.provider,b.model,Date.now()-h,`http ${g.status} ${a.slice(0,200)}`)}let n=g.body.getReader(),o=new TextDecoder,p="",q="",r=0,s=0,t=0,u=()=>{q.length>r&&(d({kind:"text",detail:q.slice(r,r+8e3)}),r=q.length)};try{for(;;){let a,{value:b,done:c}=await n.read();if(c)break;for(p+=o.decode(b,{stream:!0});(a=p.indexOf("\n"))>=0;){let b=p.slice(0,a).trim();if(p=p.slice(a+1),!b.startsWith("data:"))continue;let c=b.slice(5).trim();if("[DONE]"!==c)try{let a=JSON.parse(c);if(j){let b=a.candidates?.[0]?.content?.parts?.map(a=>a.text??"").join("")??"";b&&(q+=b).length-r>=120&&u();let c=a.usageMetadata;c&&(s=c.promptTokenCount??s,t=c.candidatesTokenCount??t)}else{let b=a.choices?.[0]?.delta?.content??"";b&&(q+=b).length-r>=120&&u(),a.usage&&(s=a.usage.prompt_tokens??s,t=a.usage.completion_tokens??t)}}catch{}}}}catch(a){return u(),d({kind:"done"}),{ok:!!q,text:q,usd:e(b.model,s,t),inputTokens:s,outputTokens:t,durationMs:Date.now()-h,binary:b.provider,model:b.model,error:q?void 0:String(a instanceof Error?a.message:a)}}return u(),d({kind:"done"}),{ok:!!q.trim(),text:q,usd:e(b.model,s,t),inputTokens:s,outputTokens:t,durationMs:Date.now()-h,binary:b.provider,model:b.model,error:q.trim()?void 0:"empty response"}}},48938:(a,b,c)=>{c.d(b,{Z:()=>f});let d=["CONSTELLA_VAULT_KEY","BETTER_AUTH_SECRET","CONSTELLA_WORKER_SECRET"],e=RegExp("sk-[A-Za-z0-9_-]{16,}|gh[posru]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{40,}|AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{30,}|xox[baprs]-[A-Za-z0-9-]{10,}|eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{6,}|-----BEGIN[\\s\\S]*?PRIVATE KEY-----[\\s\\S]*?-----END[\\s\\S]*?-----|\\bcn_[A-Za-z0-9_-]{24,}\\b|\\b\\d{6,}:[A-Za-z0-9_-]{30,}\\b","g");function f(a,b=[]){if(!a)return a;let c=a;for(let a of[...b,...d.map(a=>process.env[a])])a&&a.length>=8&&(c=c.split(a).join("[redacted]"));return c.replace(e,"[redacted]")}},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,"700e75ff9f4413bd6246cd5b30074325cb53225a6a",null),(0,d.A)(w,"60d913024db5bfa98065eac4cd36d9448b6edf6bc9",null),(0,d.A)(x,"40e73a917991bf0aac3c46efce7b609433595db67f",null)}};
@@ -1,7 +1,7 @@
1
1
  "use strict";exports.id=2960,exports.ids=[2960],exports.modules={6404:(a,b,c)=>{c.d(b,{Y:()=>j,g:()=>i});var d=c(1782),e=c(76760),f=c(80280),g=c(25533),h=c(18612);async function i(a,b,c,d){let i=(0,h.HZ)(b);for(let b of d){if(!b.path)continue;let d=((0,e.isAbsolute)(b.path)?(0,e.relative)(i,b.path):b.path).replace(/\\/g,"/");if(!(!d||d.startsWith(".."))&&!(d.startsWith(".claude/")||d.startsWith("archives/")||d.startsWith(".git/")))try{await f.db.insert(g.goalFile).values({workspaceId:a,goalId:c,path:d,op:b.op}).onConflictDoUpdate({target:[g.goalFile.goalId,g.goalFile.path],set:{op:b.op,at:new Date}})}catch{}}}async function j(a,b){return(await f.db.select({path:g.goalFile.path}).from(g.goalFile).where((0,d.Uo)((0,d.eq)(g.goalFile.workspaceId,a),(0,d.eq)(g.goalFile.goalId,b)))).map(a=>a.path)}},26288:(a,b,c)=>{c.d(b,{lM:()=>j,s$:()=>k});var d=c(77598),e=c(1782),f=c(80280),g=c(25533),h=c(18612);function i(a){let b=[];for(let c of a.split("\n")){let a=c.match(/^\s*-\s*\[([ xX])\]\s+(.+)$/);a&&b.push({text:a[2].trim().slice(0,200),done:"x"===a[1].toLowerCase()})}return b.slice(0,12)}async function j(a,b,c){let h=i(c);if(!h.length)return;let j=await f.db.select().from(g.taskStep).where((0,e.eq)(g.taskStep.taskId,b)),k=new Map(j.map(a=>[a.text.toLowerCase(),a])),l=j.length;for(let c of h){let h=k.get(c.text.toLowerCase());h?h.done!==c.done&&await f.db.update(g.taskStep).set({done:c.done}).where((0,e.eq)(g.taskStep.id,h.id)):await f.db.insert(g.taskStep).values({id:(0,d.randomUUID)(),workspaceId:a,taskId:b,text:c.text,done:c.done,ord:l++})}}async function k(a,b){let c=await f.db.select().from(g.issue).where((0,e.eq)(g.issue.workspaceId,b)),j=Object.fromEntries((await f.db.select().from(g.spec).where((0,e.eq)(g.spec.workspaceId,b))).map(a=>[a.id,a.summary])),k=new Set((await f.db.select({issueId:g.task.issueId}).from(g.task).where((0,e.eq)(g.task.workspaceId,b))).map(a=>a.issueId).filter(Boolean)),m=0;for(let e of c){if(k.has(e.id))continue;let c=(0,h.sL)(a,`issues/${e.key}.md`)??"",l=c.match(/^\*\*Skills to consult:\*\*\s*(.+)$/m)?.[1]?.trim(),n=l?`
2
2
 
3
3
  Consult these skills BEFORE building (read the matching .claude/skills/<name>.md): ${l}.`:"",o=(((e.specId?j[e.specId]:"")||c).slice(0,2e3)+n).slice(0,2200),p=(0,d.randomUUID)();await f.db.insert(g.task).values({id:p,workspaceId:b,issueId:e.id,goalId:e.goalId,key:e.key,title:e.title,description:o,col:"todo",prio:e.prio,assigneeId:e.assigneeId,createdBy:"agent"});let q=0;for(let a of i(c))await f.db.insert(g.taskStep).values({id:(0,d.randomUUID)(),workspaceId:b,taskId:p,text:a.text,done:a.done,ord:q++});m++}return await l(b),m}async function l(a){let[b]=await f.db.select().from(g.agent).where((0,e.Uo)((0,e.eq)(g.agent.workspaceId,a),(0,e.eq)(g.agent.handle,"barbara"))),c=b??(await f.db.select().from(g.agent).where((0,e.Uo)((0,e.eq)(g.agent.workspaceId,a),(0,e.mj)(g.agent.role,"%Docs%"))))[0];!c||(await f.db.select({id:g.task.id}).from(g.task).where((0,e.Uo)((0,e.eq)(g.task.workspaceId,a),(0,e.eq)(g.task.key,"DOCS-1")))).length||await f.db.insert(g.task).values({id:(0,d.randomUUID)(),workspaceId:a,key:"DOCS-1",title:"Document the project — update DOCS/ to match what was built",description:"Read the real code, specs and structure in this workspace, then write/refresh accurate documentation under DOCS/ (architecture, API, usage, how to run). Replace the scaffold templates with real content grounded in the actual files. Do not invent features.",col:"todo",prio:"low",assigneeId:c.id,createdBy:"agent"})}},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}.
4
- 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}})},43075:(a,b,c)=>{c.d(b,{a:()=>h,r:()=>g});var d=c(78474);let e=globalThis,f=e.__constellaBus??(e.__constellaBus=new d.EventEmitter);function g(a){f.emit("wake",a)}function h(a,b){let c=c=>{c===a&&b()};return f.on("wake",c),()=>{f.off("wake",c)}}f.setMaxListeners(64)},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://")}})},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},78848:(a,b,c)=>{c.d(b,{I:()=>l,k:()=>m});var d=c(52813),e=c(77598),f=c(1782),g=c(7852),h=c(80280),i=c(25533),j=c(95896),k=c(43075);async function l(a,b){await h.db.insert(i.event).values({id:(0,e.randomUUID)(),workspaceId:a,runId:b.runId,channel:b.channel??"room",agentId:b.agentId??null,seq:Date.now(),kind:b.kind,target:(b.target??"").slice(0,500),detail:(b.detail??"").slice(0,8e3)}),(0,k.r)(a)}async function m(a,b=0){let{workspace:c}=await (0,j.nP)();return h.db.select().from(i.event).where((0,f.Uo)((0,f.eq)(i.event.workspaceId,c.id),(0,f.eq)(i.event.channel,a),(0,f.gt)(i.event.seq,b))).orderBy((0,g.Y)(i.event.seq)).limit(300)}(0,c(29635).D)([l,m]),(0,d.A)(l,"606172ae2b4f1bd8d53a80749741c48cdb043bc24f",null),(0,d.A)(m,"60ac6b802b4ac5f1a28c3dbdb5ff9f27e10a8e3dcf",null)},88639:(a,b,c)=>{c.d(b,{Bl:()=>y,DQ:()=>q,Er:()=>m,H5:()=>p,Iz:()=>o,Nt:()=>w,Oi:()=>g,e1:()=>t,hp:()=>s,iF:()=>u,uy:()=>i,zw:()=>h});var d=c(18612),e=c(85509),f=c(6873);let g="design-mock/APPROVED.md";function h(a,b){let c=(0,d.CS)(a),f=c.filter(a=>a.startsWith("mock/")&&"mock/README.md"!==a),h=c.filter(a=>a.startsWith("design-mock/")&&!/\/README\.md$/i.test(a)&&a!==g),i=c.filter(a=>a.startsWith("design-skills/")&&a.endsWith(".md")&&"design-skills/README.md"!==a),j=Object.entries(b.stack??{}).flatMap(([a,b])=>(0,e.jX)(b).filter(a=>"None"!==a).map(b=>`${a}: ${b}`)).join(", "),k=/^(\.claude\/|DOCS\/|PO\/|Reports\/|specs\/|issues\/|mock\/|design-mock\/|design-skills\/|README\.md$)/i,l=c.some(a=>!k.test(a));return{brief:(0,d.sL)(a,".claude/BRIEF.md")??"",mission:b.mission??"",objective:b.objective??"",stackList:j,mockFiles:f,designMockFiles:h,designSkills:i,approved:(0,d.sL)(a,g),hasImported:l}}function i(a){return[a.mission?`Mission: ${a.mission}`:"",a.objective?`Objective: ${a.objective}`:"",a.stackList?`Chosen stack: ${a.stackList}. Generate markup compatible with it — never generic.`:"",a.brief?`
4
+ 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}})},43075:(a,b,c)=>{c.d(b,{a:()=>h,r:()=>g});var d=c(78474);let e=globalThis,f=e.__constellaBus??(e.__constellaBus=new d.EventEmitter);function g(a){f.emit("wake",a)}function h(a,b){let c=c=>{c===a&&b()};return f.on("wake",c),()=>{f.off("wake",c)}}f.setMaxListeners(64)},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://")}})},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},78848:(a,b,c)=>{c.d(b,{I:()=>l,k:()=>m});var d=c(52813),e=c(77598),f=c(1782),g=c(7852),h=c(80280),i=c(25533),j=c(95896),k=c(43075);async function l(a,b){await h.db.insert(i.event).values({id:(0,e.randomUUID)(),workspaceId:a,runId:b.runId,channel:b.channel??"room",agentId:b.agentId??null,seq:Date.now(),kind:b.kind,target:(b.target??"").slice(0,500),detail:(b.detail??"").slice(0,8e3)}),(0,k.r)(a)}async function m(a,b=0){let{workspace:c}=await (0,j.nP)();return h.db.select().from(i.event).where((0,f.Uo)((0,f.eq)(i.event.workspaceId,c.id),(0,f.eq)(i.event.channel,a),(0,f.gt)(i.event.seq,b))).orderBy((0,g.Y)(i.event.seq)).limit(300)}(0,c(29635).D)([l,m]),(0,d.A)(l,"60c90060eb97b05811e1cc6d6b7612c92c3560e129",null),(0,d.A)(m,"60f0bea5ddad11025dc93938ce3faf0f92f28b665a",null)},88639:(a,b,c)=>{c.d(b,{Bl:()=>y,DQ:()=>q,Er:()=>m,H5:()=>p,Iz:()=>o,Nt:()=>w,Oi:()=>g,e1:()=>t,hp:()=>s,iF:()=>u,uy:()=>i,zw:()=>h});var d=c(18612),e=c(85509),f=c(6873);let g="design-mock/APPROVED.md";function h(a,b){let c=(0,d.CS)(a),f=c.filter(a=>a.startsWith("mock/")&&"mock/README.md"!==a),h=c.filter(a=>a.startsWith("design-mock/")&&!/\/README\.md$/i.test(a)&&a!==g),i=c.filter(a=>a.startsWith("design-skills/")&&a.endsWith(".md")&&"design-skills/README.md"!==a),j=Object.entries(b.stack??{}).flatMap(([a,b])=>(0,e.jX)(b).filter(a=>"None"!==a).map(b=>`${a}: ${b}`)).join(", "),k=/^(\.claude\/|DOCS\/|PO\/|Reports\/|specs\/|issues\/|mock\/|design-mock\/|design-skills\/|README\.md$)/i,l=c.some(a=>!k.test(a));return{brief:(0,d.sL)(a,".claude/BRIEF.md")??"",mission:b.mission??"",objective:b.objective??"",stackList:j,mockFiles:f,designMockFiles:h,designSkills:i,approved:(0,d.sL)(a,g),hasImported:l}}function i(a){return[a.mission?`Mission: ${a.mission}`:"",a.objective?`Objective: ${a.objective}`:"",a.stackList?`Chosen stack: ${a.stackList}. Generate markup compatible with it — never generic.`:"",a.brief?`
5
5
  Project brief:
6
6
  ${a.brief.slice(0,3e3)}`:"",a.mockFiles.length?`
7
7
  Attached mock/prototype (${a.mockFiles.length} files): ${a.mockFiles.slice(0,14).join(", ")} — read them and match the product precisely.`:"",a.designMockFiles.length?`