constellai 0.3.3 → 0.3.4

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 (240) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +1 -1
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/(app)/activity/page.js +2 -2
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/agents/[handle]/page.js +3 -3
  9. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/code/page.js +2 -2
  12. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/config/page.js +2 -2
  15. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/costs/page.js +2 -2
  18. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/cron/page.js +2 -2
  21. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/dashboard/page.js +2 -2
  24. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/design/page.js +3 -3
  27. package/.next/server/app/(app)/design/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/docs/[id]/page.js +2 -2
  30. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
  31. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(app)/docs/page.js +2 -2
  33. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  34. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(app)/github/page.js +2 -2
  36. package/.next/server/app/(app)/github/page.js.nft.json +1 -1
  37. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(app)/goals/page.js +2 -2
  39. package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
  40. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/(app)/inbox/page.js +2 -2
  42. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  43. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/(app)/knowledge/page.js +3 -3
  45. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
  46. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/(app)/models/page.js +2 -2
  48. package/.next/server/app/(app)/models/page.js.nft.json +1 -1
  49. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/(app)/notifications/page.js +2 -2
  51. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
  52. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/(app)/org/page.js +4 -4
  54. package/.next/server/app/(app)/org/page.js.nft.json +1 -1
  55. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/(app)/organizations/page.js +2 -2
  57. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
  58. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/(app)/page.js +3 -3
  60. package/.next/server/app/(app)/page.js.nft.json +1 -1
  61. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/(app)/planner/page.js +2 -2
  63. package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
  64. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/(app)/plugins/page.js +2 -2
  66. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
  67. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/(app)/pm/page.js +2 -2
  69. package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
  70. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/(app)/prepare-deploy/page.js +2 -2
  72. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
  73. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/(app)/profile/page.js +2 -2
  75. package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
  76. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/(app)/pulse/page.js +2 -2
  78. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
  79. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/(app)/reports/[id]/page.js +2 -2
  81. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
  82. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/(app)/reports/page.js +3 -3
  84. package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
  85. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
  86. package/.next/server/app/(app)/routines/page.js +2 -2
  87. package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
  88. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
  89. package/.next/server/app/(app)/search/page.js +2 -2
  90. package/.next/server/app/(app)/search/page.js.nft.json +1 -1
  91. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  92. package/.next/server/app/(app)/security/page.js +2 -2
  93. package/.next/server/app/(app)/security/page.js.nft.json +1 -1
  94. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/(app)/skills/page.js +3 -3
  96. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  97. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/(app)/tasks/page.js +2 -2
  99. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
  100. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/(app)/test-dev/page.js +2 -2
  102. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
  103. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/(app)/update/page.js +3 -3
  105. package/.next/server/app/(app)/update/page.js.nft.json +1 -1
  106. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
  107. package/.next/server/app/(auth)/login/page.js +2 -2
  108. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/(auth)/onboarding/page.js +2 -2
  110. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/_global-error.html +1 -1
  113. package/.next/server/app/_global-error.rsc +1 -1
  114. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  116. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  117. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  119. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/cron/tick/route.js +2 -2
  122. package/.next/server/app/api/sync/file/route.js +1 -1
  123. package/.next/server/app/api/telegram/poll/route.js +3 -3
  124. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  125. package/.next/server/app-paths-manifest.json +1 -1
  126. package/.next/server/chunks/1249.js +7 -7
  127. package/.next/server/chunks/259.js +1 -1
  128. package/.next/server/chunks/2867.js +1 -1
  129. package/.next/server/chunks/2960.js +1 -1
  130. package/.next/server/chunks/319.js +1 -0
  131. package/.next/server/chunks/3234.js +1 -1
  132. package/.next/server/chunks/4828.js +1 -0
  133. package/.next/server/chunks/4979.js +2 -2
  134. package/.next/server/chunks/5697.js +1 -0
  135. package/.next/server/chunks/6151.js +12 -0
  136. package/.next/server/chunks/6431.js +1 -1
  137. package/.next/server/chunks/{8195.js → 6798.js} +3 -3
  138. package/.next/server/chunks/{5086.js → 6903.js} +13 -13
  139. package/.next/server/chunks/7589.js +1 -1
  140. package/.next/server/chunks/7989.js +1 -1
  141. package/.next/server/chunks/8486.js +4 -0
  142. package/.next/server/chunks/8561.js +1 -1
  143. package/.next/server/chunks/8823.js +1 -1
  144. package/.next/server/chunks/9783.js +1 -1
  145. package/.next/server/middleware-build-manifest.js +1 -1
  146. package/.next/server/pages/500.html +1 -1
  147. package/.next/server/server-reference-manifest.js +1 -1
  148. package/.next/server/server-reference-manifest.json +1 -1
  149. package/.next/static/chunks/4353-12629098ed83e468.js +1 -0
  150. package/.next/static/chunks/4398-e798770ae782576f.js +1 -0
  151. package/.next/static/chunks/4428-09f7d473d9e33d59.js +1 -0
  152. package/.next/static/chunks/7457-c37382c6f4e115f8.js +4 -0
  153. package/.next/static/chunks/8370-6da6aa10d687b8ae.js +12 -0
  154. package/.next/static/chunks/9690-00ad96a74abac075.js +1 -0
  155. package/.next/static/chunks/app/(app)/activity/{page-0f51a22d4f2207b2.js → page-09bc1c776962737c.js} +1 -1
  156. package/.next/static/chunks/app/(app)/agents/[handle]/page-b11e5f8f25fb2f88.js +1 -0
  157. package/.next/static/chunks/app/(app)/code/page-ff6925db6e10e3cc.js +1 -0
  158. package/.next/static/chunks/app/(app)/config/page-4df2facd9c81adb5.js +1 -0
  159. package/.next/static/chunks/app/(app)/costs/{page-969eba498344314d.js → page-c0a07c0283731a8c.js} +1 -1
  160. package/.next/static/chunks/app/(app)/cron/{page-ab35783e4341f6b7.js → page-662e6e1a25b14025.js} +1 -1
  161. package/.next/static/chunks/app/(app)/dashboard/page-e6f62eaecc0f9926.js +1 -0
  162. package/.next/static/chunks/app/(app)/design/{page-fcee2dfd5c7e3a4b.js → page-d457cdfa525acb85.js} +3 -3
  163. package/.next/static/chunks/app/(app)/docs/[id]/{page-b3451b21d7d2127b.js → page-4a1be0c9bd6ca402.js} +1 -1
  164. package/.next/static/chunks/app/(app)/docs/page-e6db758a14f57ec8.js +1 -0
  165. package/.next/static/chunks/app/(app)/github/page-57bb812627d083a1.js +1 -0
  166. package/.next/static/chunks/app/(app)/goals/page-81e1af515f78e13b.js +1 -0
  167. package/.next/static/chunks/app/(app)/inbox/page-0baef1b01009c832.js +12 -0
  168. package/.next/static/chunks/app/(app)/knowledge/page-eb1317bf385e31ed.js +1 -0
  169. package/.next/static/chunks/app/(app)/layout-dcd4f30b53cb140f.js +1 -0
  170. package/.next/static/chunks/app/(app)/models/page-d73965ae6ca317e8.js +1 -0
  171. package/.next/static/chunks/app/(app)/notifications/page-b3ff14483cb6694e.js +12 -0
  172. package/.next/static/chunks/app/(app)/org/page-3075b218dbc681ce.js +12 -0
  173. package/.next/static/chunks/app/(app)/organizations/page-a6d35dbb21a61b7c.js +1 -0
  174. package/.next/static/chunks/app/(app)/page-c9e4fc0616a0083e.js +1 -0
  175. package/.next/static/chunks/app/(app)/planner/page-809dd3edda4ada93.js +1 -0
  176. package/.next/static/chunks/app/(app)/plugins/{page-e75d982132825b07.js → page-7e2aad1b702b5c88.js} +1 -1
  177. package/.next/static/chunks/app/(app)/pm/{page-773626398c10fdb7.js → page-709f9ac68ac98693.js} +1 -1
  178. package/.next/static/chunks/app/(app)/prepare-deploy/{page-01f767248e7fa2a7.js → page-f9609626153c2483.js} +1 -1
  179. package/.next/static/chunks/app/(app)/profile/page-6d22c7bd0adb7a52.js +1 -0
  180. package/.next/static/chunks/app/(app)/pulse/{page-1a63c4ed76db48f5.js → page-f529917828ff4884.js} +1 -1
  181. package/.next/static/chunks/app/(app)/reports/[id]/{page-ab35783e4341f6b7.js → page-662e6e1a25b14025.js} +1 -1
  182. package/.next/static/chunks/app/(app)/reports/page-5248735b18767054.js +1 -0
  183. package/.next/static/chunks/app/(app)/routines/page-cf4e597389865ae8.js +1 -0
  184. package/.next/static/chunks/app/(app)/search/{page-d30f1c44c95e14a3.js → page-4d1e07c4c43a7489.js} +1 -1
  185. package/.next/static/chunks/app/(app)/security/page-db7b8840d9cc6b72.js +1 -0
  186. package/.next/static/chunks/app/(app)/skills/page-a98da9e415efc310.js +1 -0
  187. package/.next/static/chunks/app/(app)/tasks/page-ab33402626a50c88.js +1 -0
  188. package/.next/static/chunks/app/(app)/test-dev/page-34612a4b47ec9aa2.js +1 -0
  189. package/.next/static/chunks/app/(app)/update/page-99d63495bfdd56a9.js +1 -0
  190. package/.next/static/chunks/app/(auth)/login/page-c7b372a5053512f0.js +1 -0
  191. package/.next/static/chunks/app/(auth)/onboarding/{page-0cd7cd9fa146a927.js → page-450bfc87fb942f9b.js} +1 -1
  192. package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
  193. package/.next/trace-build +1 -1
  194. package/CHANGELOG.md +32 -3
  195. package/README.md +1 -1
  196. package/README.pt-BR.md +1 -1
  197. package/bin/constella-update.mjs +44 -0
  198. package/docs/UPDATE.md +31 -6
  199. package/package.json +1 -1
  200. package/scripts/vps-install.sh +22 -0
  201. package/scripts/vps-update.sh +22 -0
  202. package/.next/server/chunks/3174.js +0 -12
  203. package/.next/server/chunks/3334.js +0 -1
  204. package/.next/server/chunks/3439.js +0 -4
  205. package/.next/server/chunks/478.js +0 -1
  206. package/.next/server/chunks/8244.js +0 -1
  207. package/.next/static/chunks/386-0f2b8d23016cf4d0.js +0 -1
  208. package/.next/static/chunks/4909-9f16a714c78ed30d.js +0 -4
  209. package/.next/static/chunks/5332-84d9a65aa5d16106.js +0 -1
  210. package/.next/static/chunks/5664-3cb5735f1b5bbde1.js +0 -1
  211. package/.next/static/chunks/8370-7ec9e9bf414f8f2d.js +0 -12
  212. package/.next/static/chunks/9690-53d5222618cbeddb.js +0 -1
  213. package/.next/static/chunks/app/(app)/agents/[handle]/page-14805dd54a1333e8.js +0 -1
  214. package/.next/static/chunks/app/(app)/code/page-7ebd6923ac440103.js +0 -1
  215. package/.next/static/chunks/app/(app)/config/page-47b5b62b73050673.js +0 -1
  216. package/.next/static/chunks/app/(app)/dashboard/page-59521ad116c60a88.js +0 -1
  217. package/.next/static/chunks/app/(app)/docs/page-3a34eec67591ce3e.js +0 -1
  218. package/.next/static/chunks/app/(app)/github/page-a0117637dc143821.js +0 -1
  219. package/.next/static/chunks/app/(app)/goals/page-d1cb2552625ccadb.js +0 -1
  220. package/.next/static/chunks/app/(app)/inbox/page-dbfc885cd61f9b9f.js +0 -12
  221. package/.next/static/chunks/app/(app)/knowledge/page-29df476a9c2f930c.js +0 -1
  222. package/.next/static/chunks/app/(app)/layout-2b6b23e82fbf0211.js +0 -1
  223. package/.next/static/chunks/app/(app)/models/page-ea54a5d167cd3cc2.js +0 -1
  224. package/.next/static/chunks/app/(app)/notifications/page-ef1ac55efadb2a1a.js +0 -12
  225. package/.next/static/chunks/app/(app)/org/page-a7c734b8d86f7641.js +0 -12
  226. package/.next/static/chunks/app/(app)/organizations/page-4bcec3010a9d9119.js +0 -1
  227. package/.next/static/chunks/app/(app)/page-54a99a54295a40be.js +0 -1
  228. package/.next/static/chunks/app/(app)/planner/page-adfd05afc6ddcbef.js +0 -1
  229. package/.next/static/chunks/app/(app)/profile/page-cb2450679785db1a.js +0 -1
  230. package/.next/static/chunks/app/(app)/reports/page-b0bcc85ad4afecf5.js +0 -1
  231. package/.next/static/chunks/app/(app)/routines/page-c0ce223d128a9010.js +0 -1
  232. package/.next/static/chunks/app/(app)/security/page-4640d72a0b360f05.js +0 -1
  233. package/.next/static/chunks/app/(app)/skills/page-87a71bd0a6b0f262.js +0 -1
  234. package/.next/static/chunks/app/(app)/tasks/page-a34a5658aff509ec.js +0 -1
  235. package/.next/static/chunks/app/(app)/test-dev/page-842f8771d36e964b.js +0 -1
  236. package/.next/static/chunks/app/(app)/update/page-64467fa6d8ed737e.js +0 -1
  237. package/.next/static/chunks/app/(auth)/login/page-82964b720ff11bab.js +0 -1
  238. package/.next/static/chunks/app/_not-found/page-489c316e4356f1b7.js +0 -1
  239. /package/.next/static/{Fx06n4huXV42eQUI-Lty0 → mOVW9EdxrQ1xPT7vDdRdK}/_buildManifest.js +0 -0
  240. /package/.next/static/{Fx06n4huXV42eQUI-Lty0 → mOVW9EdxrQ1xPT7vDdRdK}/_ssgManifest.js +0 -0
@@ -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,"00b0578e37d9ebe94aea8c3a34edc1eb3072857776",null),(0,d.A)(G,"4017a2e91aac0e44c71e7dc8bdc64b91c86af6966e",null),(0,d.A)(H,"702318f1552859b902907168b6bbd6d46cbb1cd8bd",null),(0,d.A)(I,"40a2ed61c41d82e88df9f715926555d4751d7925b2",null),(0,d.A)(J,"7088368271648f6247e709bf8e6336af1a18845379",null),(0,d.A)(K,"00c6849ba47e6e7fea083ff67d4e2a602a90900e03",null),(0,d.A)(L,"60643b82a325d6fdb9a22f2326122b2156783fb109",null),(0,d.A)(M,"00041d8182167f36657652fa5117a86f04ad9fdac4",null),(0,d.A)(N,"60e384f0f20aad069f13d07666957fcf7fb2f9646f",null),(0,d.A)(O,"005693f47d654854560b9d0bc386173850cbf8240e",null),(0,d.A)(Q,"605cae860898064ae08c87ba7e942dd9d714085b87",null),(0,d.A)(T,"60da31e678463e5daa11931edbba1bf33db81533f2",null),(0,d.A)(U,"00194592ad47500e882eca534f2a4293d58ced6167",null),(0,d.A)(V,"009e146b7742c650ca216beeed8e617243a4a5c103",null),(0,d.A)(W,"40ef9327df3c76aeec61e899723f3a4fce0f04e0f4",null),(0,d.A)(X,"002dfc0678550fd7b554d7d8b3301ed4c835ae2a9f",null),(0,d.A)(Z,"406e30e8c1f70608478aa34a2cfc9f472c06c1ade1",null),(0,d.A)(_,"00ba8cc316d3085e76aed850bf0439194afd9bdec4",null),(0,d.A)(aa,"601c6bff04fd688cd4118800632f7fbc53a64ee6a5",null),(0,d.A)(ab,"409ca62ff6760c73fdd8c8c7267a97b16e88a526f7",null),(0,d.A)(ac,"0072163f36363b48de78305a257f30f3daefa28c88",null),(0,d.A)(ae,"00f53bdd7c80bb26d6c234682ff09d42c9fa8d285c",null),(0,d.A)(af,"602c949d6b4f90259a9dd0bf28582677f4f84cdc82",null),(0,d.A)(ag,"400105d268e50cf405554ad50d07b6cf74ab3dfdfb",null),(0,d.A)(ah,"4036941845402c95b0a364055242692180e15d59a1",null),(0,d.A)(ai,"4042d732975c30e998b1b417f244d02bc240771b42",null),(0,d.A)(aj,"7ca088c8458079633b65380437dffa61b3a503e9d8",null),(0,d.A)(ak,"7084c40999976496a9f63bf8a44a4c05630a91605b",null),(0,d.A)(al,"40205db6b6772e5190d6280f495fecc4c49bb1880c",null),(0,d.A)(am,"70de449374fe32fcef6ed2f670f9dd29539a04eff1",null),(0,d.A)(an,"60dbb220db735685b4802d9264fe095d42ffd507fa",null),(0,d.A)(ap,"0053a9e20f5c5328aa2a2502d518180bfd6eed8f2f",null)}};
@@ -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,"707fe9e0791bae72cb4b58e28b3fc406ee75f494c4",null),(0,d.A)(w,"6049641843ec1c7e875c48a2c3f9449777b8ccc9c5",null),(0,d.A)(x,"40fae88371459f73885109eab788ff958ee3beeed7",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,"60dbdf46cddec83114ce6551fd870fa84f68016765",null),(0,d.A)(m,"60274f514b61483b6e070a65f4817ee1ad9fe43504",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?`
@@ -0,0 +1 @@
1
+ "use strict";exports.id=319,exports.ids=[319,7336],exports.modules={3014:(a,b,c)=>{c.r(b),c.d(b,{"0020ee1e4504363fce8f1b7fda9b92e0b5f0073be2":()=>d.cT,"00aa0d28cabf2459beec6d25ce8d4cc2266ca99154":()=>d.Kd,"40139e6107d1834286c2b80d82e1525a7c0753066e":()=>d.OD,"40664d1b326c4e702d0a3077bb46439f2b2600cd50":()=>d.j0});var d=c(14565)},4719:(a,b,c)=>{c.d(b,{ViewChrome:()=>d});let d=(0,c(62060).registerClientReference)(function(){throw Error("Attempted to call ViewChrome() from the server but ViewChrome 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\\shell\\view-chrome.tsx","ViewChrome")},5323:(a,b,c)=>{c.d(b,{_:()=>g});var d=c(61576),e=c(1308),f=c(4719);function g({title:a,sub:b,right:c,icon:h,flush:i,children:j}){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.b,{title:a}),(0,d.jsx)(f.ViewChrome,{title:a,sub:b,right:c,icon:h,flush:i,children:j})]})}},18612:(a,b,c)=>{c.d(b,{r$:()=>h,EX:()=>p,CS:()=>function a(b,c=""){let d=[];for(let e of l(b,c))if(e.isDir){if(m.has(e.name))continue;d.push(...a(b,e.path))}else d.push(e.path);return d},HZ:()=>j,Ci:()=>l,sL:()=>n,dx:()=>o});var d=c(73024),e=c(76760),f=c(48161),g=c(28430);function h(){return process.env.CONSTELLA_HOME?(0,g.Y)(process.env.CONSTELLA_HOME):(0,e.join)((0,f.homedir)(),".constella")}let i=new Set;function j(a){if(!/^[A-Za-z0-9_-]{6,64}$/.test(a))throw Error("Invalid orgId");let b=(0,e.join)(h(),"organizations",a,"workspace");if(!i.has(a)){i.add(a);try{let c=(0,e.join)(h(),"organizations",a,"constella"),f=!(0,d.existsSync)(b)||0===(0,d.readdirSync)(b).length;if((0,d.existsSync)(c)&&f)try{(0,d.renameSync)(c,b)}catch{(0,d.mkdirSync)(b,{recursive:!0}),0===(0,d.readdirSync)(b).length&&(0,d.cpSync)(c,b,{recursive:!0})}}catch{}}return b}function k(a,b){let c=(0,e.normalize)((0,e.join)(a,b));if(c!==a&&!c.startsWith(a+e.sep))throw Error("Path escapes workspace: "+b);if((0,d.existsSync)(a)){let f;try{f=d.realpathSync.native(a)}catch{f=a}let g=function(a){let b=a;for(;;){if((0,d.existsSync)(b))try{return d.realpathSync.native(b)}catch{return b}let a=(0,e.dirname)(b);if(a===b)return b;b=a}}(c);if(g!==f&&!g.startsWith(f+e.sep))throw Error("Path escapes workspace (symlink): "+b)}return c}function l(a,b=""){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readdirSync)(c).map(a=>{let f=(0,e.join)(c,a),g=(b?b+"/":"")+a;return{name:a,path:g,isDir:(0,d.statSync)(f).isDirectory()}}).sort((a,b)=>a.isDir===b.isDir?a.name.localeCompare(b.name):a.isDir?-1:1):[]}let m=new Set(["node_modules",".git",".next",".turbo","dist","build","out","coverage",".cache","archives",".testdev",".pnpm-store",".vercel","vendor"]);function n(a,b){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readFileSync)(c,"utf8"):null}function o(a,b,c){let f=k(j(a),b);(0,d.mkdirSync)((0,e.dirname)(f),{recursive:!0}),(0,d.writeFileSync)(f,c,"utf8")}function p(a,b){let c=k(j(a),b);(0,d.existsSync)(c)&&(0,d.rmSync)(c,{recursive:!0,force:!0})}},32367:(a,b,c)=>{c.d(b,{K:()=>e});var d=c(2910);let e=(0,d.createServerReference)("40a38caeec3ba27df94e136db8976ff46f62348474",d.callServer,void 0,d.findSourceMapURL,"previewFrameableAction")},47336:(a,b,c)=>{c.d(b,{checkForUpdate:()=>l});var d=c(73024),e=c(76760),f=c(30043);let g="constellai",h=null,i=a=>a.replace(/^v/,"").split("-")[0].split(".").map(a=>parseInt(a,10)||0);async function j(a){try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch(a,{signal:b.signal,headers:{"user-agent":"constella"}});return clearTimeout(c),d.ok?await d.json():null}catch{return null}}async function k(a){try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch(a,{signal:b.signal,headers:{"user-agent":"constella"}});return clearTimeout(c),d.ok?await d.text():null}catch{return null}}async function l(a=!1){let b,c,m=function(){if(process.env.CONSTELLA_VERSION)return process.env.CONSTELLA_VERSION;try{let a=JSON.parse((0,d.readFileSync)((0,e.join)((0,f.v)(),"package.json"),"utf8"));if(a?.version)return a.version}catch{}return"0.0.0"}(),n=`npm install -g ${g}@latest`;if(!a&&h&&Date.now()-h.at<216e5)return h.info;let o=await j(`https://registry.npmjs.org/${g}/latest`),p=o?.version??null,q=!!p&&function(a,b){let c=i(a),d=i(b);for(let a=0;a<3;a++){if((c[a]||0)>(d[a]||0))return!0;if((c[a]||0)<(d[a]||0))break}return!1}(p,m),r=null;if(q&&p){let a=await k("https://raw.githubusercontent.com/gabriel7silva/constella/main/CHANGELOG.md");r=a?function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=a.match(RegExp(`(^|\\n)##\\s*\\[?${c}\\]?[\\s\\S]*?(?=\\n##\\s|$)`));if(d)return d[0].trim();let e=a.split(/\n##\s/)[1];return e?"## "+e.trim():null}(a,p):null}let s={current:m,latest:p,updateAvailable:q,type:p?(b=i(p),c=i(m),b[0]>c[0]?"major":b[1]>c[1]?"minor":b[2]>c[2]?"patch":null):null,command:n,changelog:r};return h={at:Date.now(),info:s},s}},51221:(a,b,c)=>{c.d(b,{ViewChrome:()=>h});var d=c(4374),e=c(43526),f=c(48442),g=c(31819);function h({title:a,sub:b,right:c,icon:i,flush:j,children:k}){let l=(0,g.k)(),m=f.e.find(b=>b.title===a),n=i??m?.icon,o=m?l(`mod.${m.id}`):a;return(0,d.jsxs)("div",{className:"app-view",children:[(0,d.jsxs)("div",{className:"view-head",children:[n&&(0,d.jsx)("div",{className:"vh-icon",children:(0,d.jsx)(e.I,{name:n,size:18})}),(0,d.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,d.jsx)("div",{className:"view-title",children:o}),b&&(0,d.jsx)("div",{className:"view-sub",children:b})]}),c]}),(0,d.jsx)("div",{className:"view-body",style:j?{padding:0,overflow:"hidden"}:void 0,children:k})]})}},52932:(a,b,c)=>{c.d(b,{pM:()=>z,lP:()=>y,Kg:()=>x,eU:()=>B,PG:()=>A});var d=c(6866),e=c(53993),f=c(30043),g=c(64567),h=c(30170);function i(){return(0,h.n)()?"dev":"vps"===(0,g.T)()?"vps":"portable"===(0,g.T)()?"portable":/[\\/]_npx[\\/]/.test((0,f.v)())?"npx":"global"}var j=c(47336),k=c(73024),l=c(76760),m=c(48161),n=c(31421),o=c(57086);let p=()=>new Date().toISOString().replace(/[:.]/g,"-"),q=()=>(0,l.join)((0,o.r$)(),"backups","last-update.json");async function r(){let a=await (0,j.checkForUpdate)(!0),b=i(),c=a.command;if(!a.updateAvailable)return{ok:!0,context:b,command:c,message:"Already up to date."};let d=function(){try{let a=(0,o.r$)(),b=(0,l.join)(a,"backups",p());for(let c of((0,k.mkdirSync)(b,{recursive:!0}),[".env","constella.db","constella.db-wal","constella.db-shm"])){let d=(0,l.join)(a,c);if((0,k.existsSync)(d))try{(0,k.copyFileSync)(d,(0,l.join)(b,c))}catch{}}return b}catch{return null}}()??void 0;if("dev"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"};if("npx"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"};if("vps"===b){var e="bash scripts/vps-update.sh";try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let b=(0,o.r$)(),c=process.env.CONSTELLA_PKG_ROOT||process.cwd(),f=(0,l.join)(c,"bin","constella-update.mjs"),g=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[f,"--quiet","--mode","vps","--home",b,...g],{detached:!0,stdio:"ignore",cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:"vps",command:e,backupDir:d,message:`Updating to ${a.latest} and restarting the service — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:"vps",command:e,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}return function(a,b,c,d){try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let e=process.env.CONSTELLA_RUN_MODE||"start",f=process.env.CONSTELLA_LAUNCHER_PID||(process.ppid?String(process.ppid):"0"),g=(0,o.r$)(),h=process.env.PORT||"3000",i=process.env.CONSTELLA_PKG_ROOT||process.cwd(),j=(0,l.join)(i,"bin","constella-update.mjs"),r=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[j,"--quiet","--pid",f,"--mode",e,"--home",g,"--port",h,...r],{detached:!0,stdio:"ignore",windowsHide:!0,cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:b,command:c,backupDir:d,message:`Updating to ${a.latest} and restarting — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:b,command:c,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}(a,b,c,d)}var s=c(97603),t=c(65705),u=c(1890),v=c(10245);async function w(){let a=await t.db.select({lastPulse:u.agent.lastPulse}).from(u.agent).where((0,s.eq)(u.agent.status,"working")),b=Date.now()-v.fQ;return a.some(a=>null!=a.lastPulse&&new Date(a.lastPulse).getTime()>=b)}async function x(a=!1){return(0,j.checkForUpdate)(a)}async function y(a=!1){let[b,c]=await Promise.all([(0,j.checkForUpdate)(a),w()]);return{info:b,busy:c}}async function z(){return i()}async function A(){return(await (0,e.nP)(),await w())?{ok:!1,started:!1,blocked:!0,context:"",command:"",message:"An agent is working — pause it before updating."}:r()}async function B(){try{return JSON.parse((0,k.readFileSync)(q(),"utf8"))}catch{return{status:"idle"}}}(0,c(74252).D)([x,y,z,A,B]),(0,d.A)(x,"4004a6c259bf62ad9da23ecac5c399dfdb19ad08e6",null),(0,d.A)(y,"405ee9cc58fe89e8c6f9f1f265a850575a129a7936",null),(0,d.A)(z,"006dde1a30becdb64e00136e2a0395ca3d1232afdf",null),(0,d.A)(A,"00448c48579abd11cee040b8b9ddca4e41be6f184e",null),(0,d.A)(B,"0083096d6b88e89fee2e833270be160a64f9948543",null)},60686:(a,b,c)=>{c.d(b,{Fy:()=>m,KD:()=>q,Rr:()=>l,TH:()=>s,Xu:()=>r,j0:()=>n,nx:()=>o,zC:()=>p});var d=c(6866),e=c(31371),f=c(53993),g=c(63562),h=c(81204),i=c(70221),j=c(77558),k=c(24701);async function l(){let{org:a,workspace:b}=await (0,f.nP)(),c=await (0,g.ZF)(b.id,a.id);return(0,e.revalidatePath)("/test-dev"),c}async function m(){let{workspace:a}=await (0,f.nP)(),b=await (0,g.n9)(a.id);return(0,e.revalidatePath)("/test-dev"),b}async function n(){let{workspace:a}=await (0,f.nP)();return(0,g.CS)(a.id)}async function o(){let{org:a,workspace:b}=await (0,f.nP)(),c=(0,g.CS)(b.id);if("running"!==c.status&&"starting"!==c.status&&(c=await (0,g.ZF)(b.id,a.id)),!c.url||"running"!==c.status&&"starting"!==c.status)return{ok:!1,error:"The dev server isn't running — start the app first."};let d=await (0,h.nK)(b.id,c.url);return d?{ok:!0,url:d.url}:{ok:!1,error:"Could not start the inspect proxy."}}async function p(){let{workspace:a}=await (0,f.nP)();return(0,h.hA)(a.id),{ok:!0}}async function q(a){if(await (0,f.nP)(),!/^https?:\/\/(127\.0\.0\.1|localhost)(:\d+)?/i.test(a))return{frameable:!0};try{let b=await fetch(a,{redirect:"manual",signal:AbortSignal.timeout(3e3)}),c=(b.headers.get("x-frame-options")||"").toLowerCase(),d=(b.headers.get("content-security-policy")||"").toLowerCase(),e=/frame-ancestors\s+([^;]+)/.exec(d)?.[1]??"",f=c.includes("deny")||c.includes("sameorigin"),g=!!e&&!/(\*|localhost|127\.0\.0\.1)/.test(e);return{frameable:!(f||g)}}catch{return{frameable:!0}}}async function r(a){let{org:b,workspace:c}=await (0,f.nP)(),d=a?.issueId?await (0,i.B)(c.id,a.issueId):void 0,g=await (0,i.z)(c.id,b.id,{goalId:a?.goalId,issueId:a?.issueId,routes:d,by:"operator"});return(0,e.revalidatePath)("/test-dev"),g}async function s(a,b){let{workspace:c}=await (0,f.nP)();return await (0,j.vE)(c.id,{kind:"validation",refType:"validation",refId:a,title:`Validate ${a}`,detail:b.slice(0,500)}),await (0,k.I)(c.id,{kind:"review",text:`Validation requested — ${a}`,detail:b.slice(0,300)}),(0,e.revalidatePath)("/inbox"),{ok:!0}}(0,c(74252).D)([l,m,n,o,p,q,r,s]),(0,d.A)(l,"0052f8e2104f8633ca5df1d85c292d80b538d270cc",null),(0,d.A)(m,"00f45798ef0b92ff36e203fd85a965da22d38dad47",null),(0,d.A)(n,"001f7b38a3f729f9228f00bee7e2a5304a041ae35b",null),(0,d.A)(o,"000b3acc60b4d2b8a70e8d2d829b9aacc71ab61f76",null),(0,d.A)(p,"006d073b0c6542ef6eb5bdce823ce839aa00eb00ce",null),(0,d.A)(q,"40a38caeec3ba27df94e136db8976ff46f62348474",null),(0,d.A)(r,"4097bf88873bcc36e56b144ef77ec8cea15fa3de24",null),(0,d.A)(s,"60e8f7ea058e6f0799881f6c5d494eca17a7a94e72",null)},64567:(a,b,c)=>{c.d(b,{T:()=>e});let d=["start","auth","vps","portable"];function e(){let a=process.env.CONSTELLA_RUN_MODE;return a&&d.includes(a)?a:"start"}},67463:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(2910);let e=(0,d.createServerReference)("001f7b38a3f729f9228f00bee7e2a5304a041ae35b",d.callServer,void 0,d.findSourceMapURL,"devServerStatusAction")},67919:(a,b,c)=>{c.d(b,{R:()=>e});var d=c(2910);let e=(0,d.createServerReference)("0052f8e2104f8633ca5df1d85c292d80b538d270cc",d.callServer,void 0,d.findSourceMapURL,"startDevServerAction")},67949:(a,b,c)=>{c.d(b,{l:()=>g});var d=c(79676),e=c(75785);async function f(){return(0,e.e)((await (0,d.cookies)()).get("cn-lang")?.value)}async function g(){let a=await f();return(b,c)=>(0,e.t)(a,b,c)}}};