constellai 0.3.9 → 0.3.11

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 (237) 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 +2 -2
  9. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/code/page.js +2 -2
  12. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/config/page.js +2 -2
  15. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/costs/page.js +2 -2
  18. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/cron/page.js +2 -2
  21. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/dashboard/page.js +2 -2
  24. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/design/page.js +53 -53
  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 +3 -3
  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 +3 -3
  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 +1 -1
  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/passkey/authenticate/verify/route.js +1 -1
  123. package/.next/server/app/api/passkey/register/verify/route.js +1 -1
  124. package/.next/server/app/api/sync/file/route.js +1 -1
  125. package/.next/server/app/api/telegram/poll/route.js +2 -2
  126. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  127. package/.next/server/app-paths-manifest.json +1 -1
  128. package/.next/server/chunks/{3481.js → 1020.js} +17 -17
  129. package/.next/server/chunks/1033.js +1 -1
  130. package/.next/server/chunks/1986.js +1 -1
  131. package/.next/server/chunks/2118.js +1 -1
  132. package/.next/server/chunks/3489.js +12 -0
  133. package/.next/server/chunks/3744.js +1 -0
  134. package/.next/server/chunks/3949.js +21 -0
  135. package/.next/server/chunks/3987.js +3 -3
  136. package/.next/server/chunks/{7348.js → 4285.js} +2 -2
  137. package/.next/server/chunks/4288.js +1 -1
  138. package/.next/server/chunks/5864.js +1 -0
  139. package/.next/server/chunks/5878.js +1 -1
  140. package/.next/server/chunks/7867.js +1 -1
  141. package/.next/server/chunks/7905.js +1 -1
  142. package/.next/server/chunks/8134.js +1 -1
  143. package/.next/server/chunks/8211.js +1 -1
  144. package/.next/server/chunks/907.js +1 -1
  145. package/.next/server/chunks/9344.js +3 -3
  146. package/.next/server/chunks/9677.js +1 -1
  147. package/.next/server/chunks/9712.js +1 -0
  148. package/.next/server/middleware-build-manifest.js +1 -1
  149. package/.next/server/pages/500.html +1 -1
  150. package/.next/server/server-reference-manifest.js +1 -1
  151. package/.next/server/server-reference-manifest.json +1 -1
  152. package/.next/static/chunks/2316-6073e6bff34fc370.js +1 -0
  153. package/.next/static/chunks/2841-d91ec96d9d4e4ea9.js +4 -0
  154. package/.next/static/chunks/7036-191d3c139e8a80e3.js +1 -0
  155. package/.next/static/chunks/{7218-44d9a247cf4980fa.js → 7218-6f2027c26145f70e.js} +2 -2
  156. package/.next/static/chunks/{6871-a079ac1b4f0caec2.js → 7852-ec66d38fa70e2faf.js} +1 -1
  157. package/.next/static/chunks/{9279-467412113ad55642.js → 9279-4121fee5f86d247a.js} +1 -1
  158. package/.next/static/chunks/app/(app)/activity/{page-8cf9b4c853ca9c69.js → page-43354bff51b3f428.js} +1 -1
  159. package/.next/static/chunks/app/(app)/agents/[handle]/page-4f412cc37b2fc0fb.js +1 -0
  160. package/.next/static/chunks/app/(app)/code/{page-98becb790f9aeedf.js → page-4984a3a3197059b0.js} +1 -1
  161. package/.next/static/chunks/app/(app)/config/page-b6bac0f1d9e34087.js +1 -0
  162. package/.next/static/chunks/app/(app)/costs/{page-02324b05660bad50.js → page-db8e0969e8091be9.js} +1 -1
  163. package/.next/static/chunks/app/(app)/cron/{page-5c9c6fea5aee299c.js → page-ddc34be80c5d09a0.js} +1 -1
  164. package/.next/static/chunks/app/(app)/dashboard/page-09096a31626dd4e7.js +1 -0
  165. package/.next/static/chunks/app/(app)/design/{page-3ff2eae843e8b7ea.js → page-502314daa85d634f.js} +3 -3
  166. package/.next/static/chunks/app/(app)/docs/[id]/page-77a60e909e38baec.js +1 -0
  167. package/.next/static/chunks/app/(app)/docs/{page-bc93a2e0342c61af.js → page-54209ecfbc3d5d38.js} +1 -1
  168. package/.next/static/chunks/app/(app)/github/{page-44b09f94c19f56f0.js → page-d611a9cf6e8fa43b.js} +1 -1
  169. package/.next/static/chunks/app/(app)/goals/{page-b66ec65a7221b023.js → page-376f360adec55145.js} +1 -1
  170. package/.next/static/chunks/app/(app)/inbox/page-359b38ce09f36e3b.js +12 -0
  171. package/.next/static/chunks/app/(app)/knowledge/page-64c9fe3eb27afd11.js +1 -0
  172. package/.next/static/chunks/app/(app)/layout-15c2a92e66afca85.js +1 -0
  173. package/.next/static/chunks/app/(app)/models/page-2b99a50754145e5d.js +1 -0
  174. package/.next/static/chunks/app/(app)/notifications/page-9d957a9d0749993e.js +12 -0
  175. package/.next/static/chunks/app/(app)/org/page-e3a50d3f938ed3d9.js +12 -0
  176. package/.next/static/chunks/app/(app)/organizations/page-f8da2c9f2a03054f.js +1 -0
  177. package/.next/static/chunks/app/(app)/page-bfb069d7af9b5234.js +1 -0
  178. package/.next/static/chunks/app/(app)/planner/{page-a2c45cb14b53454a.js → page-3afcd4ee94db4214.js} +1 -1
  179. package/.next/static/chunks/app/(app)/plugins/{page-792b3dc0ae8571db.js → page-cb068f8ace7d27d8.js} +1 -1
  180. package/.next/static/chunks/app/(app)/pm/{page-4624950feadad3be.js → page-4c068e3598d170c2.js} +1 -1
  181. package/.next/static/chunks/app/(app)/prepare-deploy/{page-a5d2911069317635.js → page-edda2129e990cd6a.js} +1 -1
  182. package/.next/static/chunks/app/(app)/profile/page-803ebc37070d6293.js +1 -0
  183. package/.next/static/chunks/app/(app)/pulse/page-740075a048c0bff9.js +1 -0
  184. package/.next/static/chunks/app/(app)/reports/[id]/{page-5c9c6fea5aee299c.js → page-ddc34be80c5d09a0.js} +1 -1
  185. package/.next/static/chunks/app/(app)/reports/page-a7d218e3211a08b2.js +1 -0
  186. package/.next/static/chunks/app/(app)/routines/page-d62a29827c6a0c28.js +1 -0
  187. package/.next/static/chunks/app/(app)/search/{page-eec2f135e6af9c70.js → page-12585c429bc2a813.js} +1 -1
  188. package/.next/static/chunks/app/(app)/security/page-ef48ae9664751090.js +1 -0
  189. package/.next/static/chunks/app/(app)/skills/page-7cbe9a8a4897a338.js +1 -0
  190. package/.next/static/chunks/app/(app)/tasks/page-e29a00e7cc8cfc2a.js +1 -0
  191. package/.next/static/chunks/app/(app)/test-dev/page-5cada58a89bbc540.js +1 -0
  192. package/.next/static/chunks/app/(app)/update/page-3611776014726012.js +1 -0
  193. package/.next/static/chunks/app/(auth)/login/page-6dfe2889305e3167.js +1 -0
  194. package/.next/static/chunks/app/(auth)/onboarding/page-f6e02c15b3d27f55.js +1 -0
  195. package/.next/static/chunks/app/layout-c717657a60a7f62c.js +1 -0
  196. package/.next/trace-build +1 -1
  197. package/CHANGELOG.md +34 -0
  198. package/README.md +1 -1
  199. package/README.pt-BR.md +1 -1
  200. package/bin/constella.mjs +22 -0
  201. package/bin/worker.mjs +31 -11
  202. package/docs/UPDATE.md +17 -3
  203. package/package.json +1 -1
  204. package/.next/server/chunks/1190.js +0 -12
  205. package/.next/server/chunks/4435.js +0 -1
  206. package/.next/server/chunks/4732.js +0 -1
  207. package/.next/server/chunks/739.js +0 -1
  208. package/.next/server/chunks/8868.js +0 -21
  209. package/.next/static/chunks/1738-28b6824e2a707b93.js +0 -1
  210. package/.next/static/chunks/4365-c5eb5b6af7bfc653.js +0 -4
  211. package/.next/static/chunks/7466-6d8ba01f169a6a1e.js +0 -1
  212. package/.next/static/chunks/app/(app)/agents/[handle]/page-068e58bd327db429.js +0 -1
  213. package/.next/static/chunks/app/(app)/config/page-b5447ad490de11f7.js +0 -1
  214. package/.next/static/chunks/app/(app)/dashboard/page-742ac16dbfce548b.js +0 -1
  215. package/.next/static/chunks/app/(app)/docs/[id]/page-f7cc168b103da51e.js +0 -1
  216. package/.next/static/chunks/app/(app)/inbox/page-57a8ab9347276aa2.js +0 -12
  217. package/.next/static/chunks/app/(app)/knowledge/page-fb3902b3c7348818.js +0 -1
  218. package/.next/static/chunks/app/(app)/layout-98aa9e760faf2331.js +0 -1
  219. package/.next/static/chunks/app/(app)/models/page-92f957c7400497f0.js +0 -1
  220. package/.next/static/chunks/app/(app)/notifications/page-e3fcdad57e7a94fd.js +0 -12
  221. package/.next/static/chunks/app/(app)/org/page-9030d33729e45e07.js +0 -12
  222. package/.next/static/chunks/app/(app)/organizations/page-f29c3dc4b3327b8d.js +0 -1
  223. package/.next/static/chunks/app/(app)/page-0e7e7cfd98d44f59.js +0 -1
  224. package/.next/static/chunks/app/(app)/profile/page-10ce6fd89387a1f0.js +0 -1
  225. package/.next/static/chunks/app/(app)/pulse/page-793ce0d2074d2cd7.js +0 -1
  226. package/.next/static/chunks/app/(app)/reports/page-cfa78938aef16acc.js +0 -1
  227. package/.next/static/chunks/app/(app)/routines/page-06df804a8db66b2d.js +0 -1
  228. package/.next/static/chunks/app/(app)/security/page-23dd0b8308ee48b8.js +0 -1
  229. package/.next/static/chunks/app/(app)/skills/page-d3d63cac10ce08e1.js +0 -1
  230. package/.next/static/chunks/app/(app)/tasks/page-0750ff77f17bdd9d.js +0 -1
  231. package/.next/static/chunks/app/(app)/test-dev/page-7c09ba848265ffe6.js +0 -1
  232. package/.next/static/chunks/app/(app)/update/page-e70ac9974eb7bf03.js +0 -1
  233. package/.next/static/chunks/app/(auth)/login/page-0ee8f367460d835a.js +0 -1
  234. package/.next/static/chunks/app/(auth)/onboarding/page-1de0c42322e9f296.js +0 -1
  235. package/.next/static/chunks/app/layout-a80704c0fd0a9e29.js +0 -1
  236. /package/.next/static/{vW8upousaXo7DvSlRwFbb → pNJ45PWSRHWRCwN5yZA5q}/_buildManifest.js +0 -0
  237. /package/.next/static/{vW8upousaXo7DvSlRwFbb → pNJ45PWSRHWRCwN5yZA5q}/_ssgManifest.js +0 -0
@@ -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},30515:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(66408),e=c(89258);async function f(a,b,c){(0,d.dx)(a,b,c),await (0,e.LV)(a,b)}},63942:(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]")}},84452:(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"}}},89258:(a,b,c)=>{c.d(b,{LV:()=>v,eA:()=>w,mg:()=>x});var d=c(36548),e=c(77598),f=c(50730),g=c(5557),h=c(12940),i=c(76561),j=c(2148),k=c(66408),l=c(50415);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(99688).D)([v,w,x]),(0,d.A)(v,"70fc54beaa8893b4532bcbebbdd236a4e938781544",null),(0,d.A)(w,"60a3d44b282c3fc785b97ee6983137620eb7272345",null),(0,d.A)(x,"40c96648818d9d4ec130d567d4e3b3deb7d8724ae9",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},30515:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(66408),e=c(89258);async function f(a,b,c){(0,d.dx)(a,b,c),await (0,e.LV)(a,b)}},63942:(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]")}},84452:(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"}}},89258:(a,b,c)=>{c.d(b,{LV:()=>v,eA:()=>w,mg:()=>x});var d=c(36548),e=c(77598),f=c(50730),g=c(5557),h=c(12940),i=c(76561),j=c(2148),k=c(66408),l=c(50415);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(99688).D)([v,w,x]),(0,d.A)(v,"700a015148908dce6fd86f60045754b9e1019d36fd",null),(0,d.A)(w,"60ae7769dfbcc6e1ca513d6e2232741710fef825c5",null),(0,d.A)(x,"40af533acb19f0e4f22b647123e30a3f143d2fd9cf",null)}};
@@ -19,4 +19,4 @@ ${i}`}}async function I(){let{org:a}=await (0,l.nP)(),b=(0,n.HZ)(a.id);return aw
19
19
  `+a.findings.slice(0,20).map(a=>`• ${a.file}${a.line?":"+a.line:""} — ${a.kind} (${a.preview})`).join("\n")}),await (0,r.I)(c.id,{kind:"security",text:`Commit blocked — ${a.findings.length} secret risk(s)`,detail:a.findings.slice(0,5).map(a=>`${a.file}: ${a.kind}`).join("; ")}),(0,i.revalidatePath)("/github"),(0,i.revalidatePath)("/inbox"),j}await (0,o.d1)("git",["add","-A"],{cwd:d});let t=await (0,o.d1)("git",["-c","user.email=agents@constella.dev","-c","user.name=Constella Agents","commit","-m",a.message],{cwd:d});if(0===t.code)j.committed=!0,j.sha=(await (0,o.d1)("git",["rev-parse","--short","HEAD"],{cwd:d})).stdout.trim();else if(/nothing to commit|no changes added/i.test(t.stdout+t.stderr))return j.nothing=!0,K(c.id,j,a);else return j.error=h(t.stderr||t.stdout)||"git commit failed",K(c.id,j,a);let v=await (0,o.d1)("git",["remote","get-url","origin"],{cwd:d}),w=0===v.code?v.stdout.trim():"";if(w&&g&&/^https:\/\/github\.com\//i.test(w)){let b=w.replace(/^https:\/\//i,`https://x-access-token:${g}@`),e=await (0,o.d1)("git",["push",b,`HEAD:${f}`],{cwd:d,timeoutMs:12e4});if(j.pushed=0===e.code,!j.pushed&&(j.error=h(e.stderr)||"git push failed",/rejected|non-fast-forward|fetch first|merge conflict|failed to push/i.test(e.stderr)&&await (0,q.vE)(c.id,{kind:"block",refType:"task",refId:`push:${a.repo}:${f}`,title:`Push rejected — ${a.repo}`,detail:`git push to \`${f}\` was rejected (remote conflict / non-fast-forward). Pull + resolve, then push again.
20
20
 
21
21
  ${h(e.stderr).slice(0,300)}`})),j.pushed&&a.delegated){let a=await (0,o.d1)("gh",["pr","create","--fill","--head",f],{cwd:d,timeoutMs:6e4,env:{GH_TOKEN:g}}),b=(a.stdout.match(/https:\/\/github\.com\/\S+/)??[])[0];b?j.prUrl=b:0!==a.code&&(j.error=h(a.stderr).slice(0,200)||"gh pr create did not open a PR (is the branch the repo default, or no diff vs base?)")}}else w?g||(j.error="committed locally — connect a GitHub PAT to push"):j.error="committed locally — no 'origin' remote configured to push";return K(c.id,j,a)}async function K(a,b,c){if(b.committed){await j.db.update(k.file).set({gitStatus:""}).where((0,h.Uo)((0,h.eq)(k.file.workspaceId,a),(0,h.ne)(k.file.gitStatus,"")));let d=b.pushed?`pushed to ${c.repo} \xb7 ${c.branch}`:"committed locally";await (0,r.I)(a,{kind:"deploy",text:`Workspace ${d}${b.sha?` (${b.sha})`:""}`,detail:(c.delegated&&b.prUrl?`PR: ${b.prUrl}
22
- `:"")+c.message})}return b.ok=b.committed,(0,i.revalidatePath)("/github"),b}(0,s.D)([x,y,z,A,B,D,E,F,G,H,I,J]),(0,d.A)(x,"002bdd3d8e0d713599caefb2b0f47fa20840947134",null),(0,d.A)(y,"4026a092db9003ef1c8ff46de87d5ca098e20c51ae",null),(0,d.A)(z,"4012a930dd0ac181177c103465f7d748afdd913bb8",null),(0,d.A)(A,"40aeb881b9c750a27fa1b41e98e94291f4b7384bf8",null),(0,d.A)(B,"008fcf51a0503914d7ed1fdf2740ed0eefe22ce5be",null),(0,d.A)(D,"007cb561a881ba0680cffb498614b62995856f0b68",null),(0,d.A)(E,"40c9419a2e111af15412601c1a517224983aa93d26",null),(0,d.A)(F,"406553dc805e7899ed02bc19a92b3d89d59957fd0b",null),(0,d.A)(G,"00325e8539c9a246c683c4d6d4360a4df1bcc733e3",null),(0,d.A)(H,"00040cd493a0b3560c6c9f8687b77d38050e7a1ef4",null),(0,d.A)(I,"00c402d779d00773fa8c24f2bc49c92fe8335061b5",null),(0,d.A)(J,"409220c1a6f0766e8624db679ac2637e6b66cec0c0",null)}};
22
+ `:"")+c.message})}return b.ok=b.committed,(0,i.revalidatePath)("/github"),b}(0,s.D)([x,y,z,A,B,D,E,F,G,H,I,J]),(0,d.A)(x,"0049bc1419cd728dd5732503a45e31b5abcc22d989",null),(0,d.A)(y,"40e6ce5fc9198e9ffdebf64301e8104df998d0b3b9",null),(0,d.A)(z,"40b0b820ee74f1e64b9db482e30d8e47346b94b3fb",null),(0,d.A)(A,"404faa6f2a2a202901e62faab45eec7e02e98ab0b4",null),(0,d.A)(B,"00be5513243226ed5578ab2fdc8c9c792f1e8d88b3",null),(0,d.A)(D,"000eb91e41014473ddf9cac74aac77751e57a20268",null),(0,d.A)(E,"40542c53380fc9db294c35abd89d3e41bba6ad55af",null),(0,d.A)(F,"40eced510ddf26626565a3efd5e5a71125db2012da",null),(0,d.A)(G,"00525d41d8cb7844e5251cd14053b906cc586882b2",null),(0,d.A)(H,"009d5493c60feca5ddf7f67cd0b45615b482c86dc1",null),(0,d.A)(I,"00592fe547af0598af7d7538a3a2d3f25e6a0b628d",null),(0,d.A)(J,"40a1393d10c8680e55f677468b3efac7283c6b2980",null)}};
@@ -8,7 +8,7 @@ ${r}`,`
8
8
  Output ONLY a JSON object (no prose, no markdown fences): {"estimates":[{"key":"1","points":5,"moscow":"Must","duplicateOf":"3"}],"gaps":["a missing issue the objectives need"]} — one estimate per issue above, "points" one of 1,2,3,5,8,13, "duplicateOf" optional, "gaps" optional.`].filter(Boolean).join("\n");await i.db.update(j.agent).set({status:"working"}).where((0,f.eq)(j.agent.id,h.id));try{c=await (0,l.p1)(x,{orgId:a,binary:m,model:p,timeoutMs:12e4},()=>{})}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,h.id))}catch{}}(c.usd>0||c.inputTokens+c.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:b.id,agentId:h.id,provider:c.binary,model:c.model??h.model,usd:c.usd,tokens:c.inputTokens+c.outputTokens,at:new Date});let y=[],z=[],A=c.text.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(A)try{let a=JSON.parse(A[0]);Array.isArray(a)?y=a:(y=Array.isArray(a.estimates)?a.estimates:[],z=Array.isArray(a.gaps)?a.gaps.map(String).slice(0,8):[])}catch{y=[]}if(!Array.isArray(y)||!y.length)return{ok:!1,error:"The PO returned no parseable estimates — try again."};let B=new Set([1,2,3,5,8,13]),C=new Set(["Must","Should","Could","Won't"]),D=Object.fromEntries(k.map(a=>[String(a.key),a.id])),E=0;for(let a of y){let b=D[String(a.key)];if(!b)continue;let c="number"==typeof a.points?Math.round(a.points):NaN,d=B.has(c)?c:void 0,e="string"==typeof a.moscow&&C.has(a.moscow)?a.moscow:void 0;(void 0!==d||e)&&(await i.db.update(j.issue).set({...void 0!==d?{points:d}:{},...e?{moscow:e}:{}}).where((0,f.eq)(j.issue.id,b)),E++)}if(E){for(let a of(await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.workspaceId,b.id),(0,f.eq)(j.issue.status,"active")))))await i.db.update(j.backlogItem).set({points:a.points,moscow:a.moscow??"Should"}).where((0,f.Uo)((0,f.eq)(j.backlogItem.workspaceId,b.id),(0,f.eq)(j.backlogItem.title,a.title)));await i.db.insert(j.message).values({id:(0,e.randomUUID)(),workspaceId:b.id,channel:"room",fromKind:"agent",fromHandle:h.handle,text:`Backlog groomed — estimated story points + MoSCoW for ${E} issue${1===E?"":"s"}. Open the Product Manager to review.`,createdAt:new Date}),await (0,n.j)(b.id,{text:`Backlog groomed by ${h.name} — sized ${E} issue(s)`,by:h.handle,source:"po-grooming"})}let F=y.filter(a=>null!=a.duplicateOf&&D[String(a.duplicateOf)]&&D[String(a.key)]&&String(a.duplicateOf)!==String(a.key)).map(a=>`${a.key} ↔ ${a.duplicateOf}`);if(F.length||z.length){let a=[];F.length&&a.push(`Possible duplicate / overlapping issues: ${F.join(", ")}.`),z.length&&a.push(`Gaps the objectives need:
9
9
  ${z.map(a=>`- ${a}`).join("\n")}`);let c=a.join("\n\n");await i.db.insert(j.message).values({id:(0,e.randomUUID)(),workspaceId:b.id,channel:"room",fromKind:"agent",fromHandle:h.handle,text:`Backlog review — ${c}`.slice(0,4e3),createdAt:new Date}),await (0,o.vE)(b.id,{kind:"review",fromAgentId:h.id,title:`PO backlog review — ${F.length} duplicate, ${z.length} gap`,detail:c.slice(0,500)}),await (0,n.j)(b.id,{text:`PO flagged ${F.length} duplicate + ${z.length} gap during grooming`,by:h.handle,source:"po-grooming"})}return{ok:!0,groomed:E}}async function v(){let{org:a,workspace:b}=await (0,k.nP)(),c=await u(a.id,b);return(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/","layout"),c}async function w(){let{workspace:a}=await (0,k.nP)();await (0,q.TR)(a.id),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function x(a){let{workspace:b}=await (0,k.nP)();await i.db.update(j.spec).set({approved:!0}).where((0,f.Uo)((0,f.eq)(j.spec.id,a),(0,f.eq)(j.spec.workspaceId,b.id))),await (0,o.W_)(b.id,"spec",a),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function y(a){let{workspace:b}=await (0,k.nP)(),[c]=await i.db.select().from(j.spec).where((0,f.Uo)((0,f.eq)(j.spec.id,a),(0,f.eq)(j.spec.workspaceId,b.id)));await i.db.update(j.spec).set({approved:!1}).where((0,f.eq)(j.spec.id,a));let d="ada",e=null;if(c?.authorId){let[a]=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.id,c.authorId));a&&(d=a.handle,e=a.id)}return await (0,m.I)(b.id,{kind:"review",text:`Spec ${c?.key??""} sent back for revision`,detail:"The operator rejected this spec."}),await (0,o.vE)(b.id,{kind:"review",refType:"spec",refId:a,goalId:c?.goalId??null,fromAgentId:e,title:`Revise spec ${c?.key??""}`,detail:`Rejected — @${d} should revise “${c?.title??""}”.`}),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox"),{handle:d,key:c?.key??"spec"}}async function z(a){let{org:b,workspace:c}=await (0,k.nP)(),[d]=await i.db.update(j.issue).set({approved:!0}).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,c.id))).returning();if(d?.key){let a=(0,p.sL)(b.id,`issues/${d.key}.md`);a&&(0,p.dx)(b.id,`issues/${d.key}.md`,a.replace(/\*\*Status:\*\* .*/m,"**Status:** approved"))}await (0,o.W_)(c.id,"issue",a),(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function A(a){let{workspace:b}=await (0,k.nP)(),[c]=await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,b.id)));await i.db.update(j.issue).set({approved:!1}).where((0,f.eq)(j.issue.id,a));let d="donald",e=null;if(c?.assigneeId){let[a]=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.id,c.assigneeId));a&&(d=a.handle,e=a.id)}return await (0,m.I)(b.id,{kind:"review",text:`Issue ${c?.key??""} sent back for revision`,detail:"The operator rejected this issue."}),await (0,o.vE)(b.id,{kind:"review",refType:"issue",refId:a,goalId:c?.goalId??null,fromAgentId:e,title:`Revise issue ${c?.key??""}`,detail:`Rejected — @${d} should revise “${c?.title??""}”.`}),(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox"),{handle:d,key:c?.key??"issue"}}async function B(a){let{workspace:b}=await (0,k.nP)();await (0,q.mL)(b.id,a),(0,h.revalidatePath)("/planner")}async function C(a){let{workspace:b}=await (0,k.nP)(),c=["todo","doing","review","done"],[d]=await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,b.id)));if(!d||"done"===d.col||"blocked"===d.col)return;let e=c[c.indexOf(d.col)+1]??"done";await i.db.update(j.issue).set({col:e}).where((0,f.eq)(j.issue.id,a)),"done"===e&&await (0,m.I)(b.id,{kind:"test",text:`${d.key} merged — ${d.title}`,detail:"QA passed and the issue was merged.",tg:!0}),(0,h.revalidatePath)("/planner")}async function D(a){let{org:b,workspace:c}=await (0,k.nP)();return(0,r.generatePlanFor)(b.id,c,a)}async function E(a){let b=a.brief?.trim();return b?D({brief:b,goalTitle:a.title?.trim()||void 0}):{ok:!1,error:"Describe what you want to implement, fix or change."}}async function F(a){let{workspace:b}=await (0,k.nP)(),c=(await i.db.select().from(j.message).where((0,f.Uo)((0,f.eq)(j.message.workspaceId,b.id),(0,f.eq)(j.message.channel,a))).orderBy((0,g.Y)(j.message.createdAt))).slice(-30).map(a=>("operator"===a.fromKind?"Operator":"@"+(a.fromHandle??"agent"))+": "+a.text).join("\n");return c.trim()?D({brief:`Turn the operator's request from this chat into a delivery plan. Conversation:
10
10
 
11
- ${c}`}):{ok:!1,error:"No conversation to plan from yet."}}(0,c(99688).D)([t,u,v,w,x,y,z,A,B,C,D,E,F]),(0,d.A)(t,"006e3862d33640a4d6587e0d999584ac5db40cb1be",null),(0,d.A)(u,"60c5c511b8ddf434edb4df1dd8c7b74962fc2cff88",null),(0,d.A)(v,"0023c2d2a7bab3fa7022c78ac6d614acd1ba769a55",null),(0,d.A)(w,"003d491d5a9f1d5aa2c1e34df023e249b1e6a4d27b",null),(0,d.A)(x,"40795a2cee09e53a3192bb4582588b29bedfbbbfd3",null),(0,d.A)(y,"40506681298deecf587a22a58f89b00187526d839e",null),(0,d.A)(z,"40102b8d3d6f3d24e3eb5dd445242945b75511d595",null),(0,d.A)(A,"40242f4eaff43df72cf01e4c58d529b352b0844451",null),(0,d.A)(B,"40da20117d679d6fda817d86bc7ba74c80844d42bf",null),(0,d.A)(C,"405625f8452c4f8ddc1d39f88e1d25d620eba1f354",null),(0,d.A)(D,"40f40927761bc3b2be5ac04bdc8f6b2ea0a4cef554",null),(0,d.A)(E,"4042f30cd92a4ce15b57cdf3bb844ed17b123375bb",null),(0,d.A)(F,"4046fa12571497a64e108e9b450e01044d1952fc4c",null)},15563:(a,b,c)=>{c.d(b,{generatePlanFor:()=>v,G:()=>u,startNewWorkFor:()=>w});var d=c(77598),e=c(50730),f=c(23888),g=c(5557),h=c(12940),i=c(76561),j=c(55104),k=c(62323),l=c(87980),m=c(66408);let n="specs/SUPER-SPEC.md";async function o(a){let b,{orgId:c,wsId:e,ada:f,binary:g,model:k}=a,o=`You are ${f.name}, analyzing an EXISTING project that is ALREADY present in this workspace (the current directory). Do NOT write any product code, do NOT scaffold anything — your ONLY job is to UNDERSTAND the project and write a thorough "super spec".
11
+ ${c}`}):{ok:!1,error:"No conversation to plan from yet."}}(0,c(99688).D)([t,u,v,w,x,y,z,A,B,C,D,E,F]),(0,d.A)(t,"005ea65431110f6aef12144723eb3a5bc48b6f827f",null),(0,d.A)(u,"6021501f0aaa2c30eef20917363e29ccf262b97d1a",null),(0,d.A)(v,"00a5493d06ac260d75e0525f9e5ca3cf6e3ae6bc73",null),(0,d.A)(w,"00d8dd1aab0c07a0bf14837a7586f2f100a032f56f",null),(0,d.A)(x,"40524db6afaa441f3a99b200e5ca78dc922e7b5f60",null),(0,d.A)(y,"4006ac728b5bf4bc14a73481abfed0846f80485c77",null),(0,d.A)(z,"40cc67c9b08c50810d9ff9e1420d1b45ac481f04d5",null),(0,d.A)(A,"404682e2ed2708bd9dc5d45d2d631b66a9d1d619dd",null),(0,d.A)(B,"40ab91894675f0b437f42552ab00a93639d6481979",null),(0,d.A)(C,"4076f7af83a9ff3a475eb56cee80c9d9d88d8b077f",null),(0,d.A)(D,"403ce8df7d4ea09f128468894dea44fe30ac0775f8",null),(0,d.A)(E,"40d8609579301e479ce66d41bee625f2e003d1068d",null),(0,d.A)(F,"408bd46ad53d239bb7bda30790b861f085af138a7e",null)},15563:(a,b,c)=>{c.d(b,{generatePlanFor:()=>v,G:()=>u,startNewWorkFor:()=>w});var d=c(77598),e=c(50730),f=c(23888),g=c(5557),h=c(12940),i=c(76561),j=c(55104),k=c(62323),l=c(87980),m=c(66408);let n="specs/SUPER-SPEC.md";async function o(a){let b,{orgId:c,wsId:e,ada:f,binary:g,model:k}=a,o=`You are ${f.name}, analyzing an EXISTING project that is ALREADY present in this workspace (the current directory). Do NOT write any product code, do NOT scaffold anything — your ONLY job is to UNDERSTAND the project and write a thorough "super spec".
12
12
 
13
13
  Read in THIS order, then go deeper:
14
14
  1. Docs first: README*, CHANGELOG*, docs/**, any install/setup/usage guides, CONTRIBUTING.