constellai 0.3.0 → 0.3.2

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 (251) 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 +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/server/app/(app)/activity/page.js +1 -1
  7. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  8. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(app)/agents/[handle]/page.js +2 -2
  10. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  11. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(app)/code/page.js +2 -2
  13. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  14. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(app)/config/page.js +2 -2
  16. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  17. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(app)/costs/page.js +2 -2
  19. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  20. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(app)/cron/page.js +2 -2
  22. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  23. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(app)/dashboard/page.js +2 -2
  25. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/design/page.js +4 -4
  28. package/.next/server/app/(app)/design/page.js.nft.json +1 -1
  29. package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(app)/docs/[id]/page.js +2 -2
  31. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(app)/docs/page.js +2 -2
  34. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  35. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(app)/github/page.js +2 -2
  37. package/.next/server/app/(app)/github/page.js.nft.json +1 -1
  38. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(app)/goals/page.js +2 -2
  40. package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
  41. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/(app)/inbox/page.js +2 -2
  43. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  44. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/(app)/knowledge/page.js +3 -3
  46. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
  47. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/(app)/models/page.js +2 -2
  49. package/.next/server/app/(app)/models/page.js.nft.json +1 -1
  50. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/(app)/notifications/page.js +1 -1
  52. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
  53. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/(app)/org/page.js +4 -4
  55. package/.next/server/app/(app)/org/page.js.nft.json +1 -1
  56. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/(app)/organizations/page.js +2 -2
  58. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
  59. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/(app)/page.js +3 -3
  61. package/.next/server/app/(app)/page.js.nft.json +1 -1
  62. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  63. package/.next/server/app/(app)/planner/page.js +2 -2
  64. package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
  65. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/(app)/plugins/page.js +2 -2
  67. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
  68. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
  69. package/.next/server/app/(app)/pm/page.js +2 -2
  70. package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
  71. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app/(app)/prepare-deploy/page.js +3 -3
  73. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
  74. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/(app)/profile/page.js +2 -2
  76. package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
  77. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app/(app)/pulse/page.js +2 -2
  79. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
  80. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
  81. package/.next/server/app/(app)/reports/[id]/page.js +2 -2
  82. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
  83. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/(app)/reports/page.js +3 -3
  85. package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
  86. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
  87. package/.next/server/app/(app)/routines/page.js +1 -1
  88. package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
  89. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/(app)/search/page.js +2 -2
  91. package/.next/server/app/(app)/search/page.js.nft.json +1 -1
  92. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/(app)/security/page.js +2 -2
  94. package/.next/server/app/(app)/security/page.js.nft.json +1 -1
  95. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/(app)/skills/page.js +2 -2
  97. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  98. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  99. package/.next/server/app/(app)/tasks/page.js +2 -2
  100. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
  101. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
  102. package/.next/server/app/(app)/test-dev/page.js +2 -2
  103. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
  104. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/(app)/update/page.js +2 -2
  106. package/.next/server/app/(app)/update/page.js.nft.json +1 -1
  107. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
  108. package/.next/server/app/(auth)/login/page.js +2 -2
  109. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
  110. package/.next/server/app/(auth)/onboarding/page.js +1 -1
  111. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  113. package/.next/server/app/_global-error.html +1 -1
  114. package/.next/server/app/_global-error.rsc +1 -1
  115. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  116. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  117. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  118. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  119. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  120. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  121. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/cron/tick/route.js +2 -2
  123. package/.next/server/app/api/sync/file/route.js +1 -1
  124. package/.next/server/app/api/telegram/poll/route.js +3 -3
  125. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  126. package/.next/server/app-paths-manifest.json +1 -1
  127. package/.next/server/chunks/104.js +1 -0
  128. package/.next/server/chunks/1082.js +1 -0
  129. package/.next/server/chunks/1249.js +6 -6
  130. package/.next/server/chunks/2359.js +1 -0
  131. package/.next/server/chunks/259.js +1 -1
  132. package/.next/server/chunks/2867.js +1 -1
  133. package/.next/server/chunks/2960.js +1 -1
  134. package/.next/server/chunks/{3882.js → 3078.js} +15 -15
  135. package/.next/server/chunks/3234.js +1 -1
  136. package/.next/server/chunks/4979.js +2 -2
  137. package/.next/server/chunks/6431.js +1 -1
  138. package/.next/server/chunks/7589.js +1 -1
  139. package/.next/server/chunks/7970.js +21 -0
  140. package/.next/server/chunks/7989.js +1 -1
  141. package/.next/server/chunks/8071.js +4 -0
  142. package/.next/server/chunks/{2939.js → 8102.js} +2 -2
  143. package/.next/server/chunks/8561.js +1 -1
  144. package/.next/server/chunks/8823.js +1 -1
  145. package/.next/server/chunks/9783.js +1 -1
  146. package/.next/server/middleware-build-manifest.js +1 -1
  147. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  148. package/.next/server/pages/500.html +1 -1
  149. package/.next/server/server-reference-manifest.js +1 -1
  150. package/.next/server/server-reference-manifest.json +1 -1
  151. package/.next/static/chunks/1068-50497be19315ccfb.js +1 -0
  152. package/.next/static/chunks/4991-0306ad0e6cd8cb8a.js +1 -0
  153. package/.next/static/chunks/6061-f3ad54a48323cba0.js +1 -0
  154. package/.next/static/chunks/6121-37930472292e5a6c.js +4 -0
  155. package/.next/static/chunks/{7509.721cd47a931c5518.js → 7509.8d3cbebb5fbe6247.js} +1 -1
  156. package/.next/static/chunks/{8370-db3280cb1ba67bcd.js → 8370-4a29b1affcb7dc68.js} +2 -2
  157. package/.next/static/chunks/app/(app)/activity/{page-f06add40c3785686.js → page-02fbf7cf46282feb.js} +1 -1
  158. package/.next/static/chunks/app/(app)/agents/[handle]/page-e3eda42a3f20e3e5.js +1 -0
  159. package/.next/static/chunks/app/(app)/code/{page-ef9dceeae728b9d1.js → page-8f8ae22136752631.js} +1 -1
  160. package/.next/static/chunks/app/(app)/config/page-84216e49b0b08248.js +1 -0
  161. package/.next/static/chunks/app/(app)/costs/page-aadb60fb329974f3.js +1 -0
  162. package/.next/static/chunks/app/(app)/cron/page-0219c7a0530ad628.js +1 -0
  163. package/.next/static/chunks/app/(app)/dashboard/page-1e7ecb2bdefcdc19.js +1 -0
  164. package/.next/static/chunks/app/(app)/design/{page-e0fd071fb7144c46.js → page-f889489d70e0e839.js} +3 -3
  165. package/.next/static/chunks/app/(app)/docs/[id]/page-f2e1f3d72634fb4b.js +1 -0
  166. package/.next/static/chunks/app/(app)/docs/page-ab10f655b932f175.js +1 -0
  167. package/.next/static/chunks/app/(app)/github/page-0e47c2c1c9c927e4.js +1 -0
  168. package/.next/static/chunks/app/(app)/goals/page-9a68e61bbc392281.js +1 -0
  169. package/.next/static/chunks/app/(app)/inbox/page-6ee42cdd99664d11.js +12 -0
  170. package/.next/static/chunks/app/(app)/knowledge/page-c02936180f61550f.js +1 -0
  171. package/.next/static/chunks/app/(app)/layout-7d2d377b224620c8.js +1 -0
  172. package/.next/static/chunks/app/(app)/models/page-8635495017d696c1.js +1 -0
  173. package/.next/static/chunks/app/(app)/notifications/page-72f15bd4b6289bf1.js +12 -0
  174. package/.next/static/chunks/app/(app)/org/page-30bb71b216cc152e.js +12 -0
  175. package/.next/static/chunks/app/(app)/organizations/page-50c64b60a6850870.js +1 -0
  176. package/.next/static/chunks/app/(app)/page-638517264806ba7e.js +1 -0
  177. package/.next/static/chunks/app/(app)/planner/page-5177b5fd72d529f4.js +1 -0
  178. package/.next/static/chunks/app/(app)/plugins/page-66921b5b398f2c05.js +1 -0
  179. package/.next/static/chunks/app/(app)/pm/page-a1f93d19d3c28627.js +1 -0
  180. package/.next/static/chunks/app/(app)/prepare-deploy/page-de7dc9413e3dbf82.js +1 -0
  181. package/.next/static/chunks/app/(app)/profile/page-e73d191fce633cd7.js +1 -0
  182. package/.next/static/chunks/app/(app)/pulse/page-a0895a89c74c1d4c.js +1 -0
  183. package/.next/static/chunks/app/(app)/reports/[id]/page-0219c7a0530ad628.js +1 -0
  184. package/.next/static/chunks/app/(app)/reports/page-fd0b0d0fa742819e.js +1 -0
  185. package/.next/static/chunks/app/(app)/routines/page-eaba9756a33d98a6.js +1 -0
  186. package/.next/static/chunks/app/(app)/search/page-d975712d07eed70d.js +1 -0
  187. package/.next/static/chunks/app/(app)/security/page-4b126307f9963c2a.js +1 -0
  188. package/.next/static/chunks/app/(app)/skills/page-f1fc99f1d15e26a4.js +1 -0
  189. package/.next/static/chunks/app/(app)/tasks/page-a4b78a8d76fd9432.js +1 -0
  190. package/.next/static/chunks/app/(app)/test-dev/page-55cef74633b3cf4c.js +1 -0
  191. package/.next/static/chunks/app/(app)/update/page-92764fc98b253709.js +1 -0
  192. package/.next/static/chunks/app/(auth)/login/page-3df648bab2319a0b.js +1 -0
  193. package/.next/static/chunks/app/(auth)/onboarding/page-ee09eb3fd38f3365.js +1 -0
  194. package/.next/static/chunks/{main-722e16032e7764d1.js → main-2e2f6e1d0f3b78b1.js} +1 -1
  195. package/.next/static/chunks/webpack-94c9726ec79ee4b4.js +1 -0
  196. package/.next/trace-build +1 -1
  197. package/CHANGELOG.md +19 -0
  198. package/README.md +1 -1
  199. package/README.pt-BR.md +1 -1
  200. package/bin/constella.mjs +7 -6
  201. package/docs/UPDATE.md +1 -1
  202. package/docs/en/TROUBLESHOOTING.md +3 -0
  203. package/docs/pt/TROUBLESHOOTING.md +3 -0
  204. package/package.json +4 -3
  205. package/scripts/vps-install.sh +8 -0
  206. package/.next/server/chunks/3440.js +0 -1
  207. package/.next/server/chunks/5181.js +0 -1
  208. package/.next/server/chunks/7976.js +0 -1
  209. package/.next/server/chunks/834.js +0 -4
  210. package/.next/server/chunks/9459.js +0 -21
  211. package/.next/static/chunks/2237-2a30470119df8616.js +0 -1
  212. package/.next/static/chunks/7268-ac23e9901bf535af.js +0 -4
  213. package/.next/static/chunks/9846-c853e71d4d8fbb80.js +0 -1
  214. package/.next/static/chunks/9950-703805abe4653068.js +0 -1
  215. package/.next/static/chunks/app/(app)/agents/[handle]/page-2ddf1f9908c73eb1.js +0 -1
  216. package/.next/static/chunks/app/(app)/config/page-496e569efd86e75c.js +0 -1
  217. package/.next/static/chunks/app/(app)/costs/page-675f542fdd517bee.js +0 -1
  218. package/.next/static/chunks/app/(app)/cron/page-80a87a05492c0ffe.js +0 -1
  219. package/.next/static/chunks/app/(app)/dashboard/page-4bddca6808a3be40.js +0 -1
  220. package/.next/static/chunks/app/(app)/docs/[id]/page-f05e389793127500.js +0 -1
  221. package/.next/static/chunks/app/(app)/docs/page-f6bbf5c6b9104cbe.js +0 -1
  222. package/.next/static/chunks/app/(app)/github/page-5297c806ce6afa9b.js +0 -1
  223. package/.next/static/chunks/app/(app)/goals/page-3fa53e8541c8e9fc.js +0 -1
  224. package/.next/static/chunks/app/(app)/inbox/page-a2a74b5f6a6c326e.js +0 -12
  225. package/.next/static/chunks/app/(app)/knowledge/page-fb11b2bfa9ecd9a4.js +0 -1
  226. package/.next/static/chunks/app/(app)/layout-b74cd565406964d5.js +0 -1
  227. package/.next/static/chunks/app/(app)/models/page-c8acfc3d353fd9d0.js +0 -1
  228. package/.next/static/chunks/app/(app)/notifications/page-05a094d02d23f455.js +0 -12
  229. package/.next/static/chunks/app/(app)/org/page-883d6aa98b593c6b.js +0 -12
  230. package/.next/static/chunks/app/(app)/organizations/page-4595e8fa86ca3c01.js +0 -1
  231. package/.next/static/chunks/app/(app)/page-21d47e76fe9a6c63.js +0 -1
  232. package/.next/static/chunks/app/(app)/planner/page-1fc32005d05bbe69.js +0 -1
  233. package/.next/static/chunks/app/(app)/plugins/page-454613b9f5cb1d3d.js +0 -1
  234. package/.next/static/chunks/app/(app)/pm/page-8473da305f4c2880.js +0 -1
  235. package/.next/static/chunks/app/(app)/prepare-deploy/page-3ba948f5557dea38.js +0 -1
  236. package/.next/static/chunks/app/(app)/profile/page-05f25516fea20762.js +0 -1
  237. package/.next/static/chunks/app/(app)/pulse/page-540a80dbaf61453d.js +0 -1
  238. package/.next/static/chunks/app/(app)/reports/[id]/page-80a87a05492c0ffe.js +0 -1
  239. package/.next/static/chunks/app/(app)/reports/page-de1e69ca09d7cabb.js +0 -1
  240. package/.next/static/chunks/app/(app)/routines/page-83085c9ba3584ec9.js +0 -1
  241. package/.next/static/chunks/app/(app)/search/page-8769fd9075e21e36.js +0 -1
  242. package/.next/static/chunks/app/(app)/security/page-1baa88dc61c3fab8.js +0 -1
  243. package/.next/static/chunks/app/(app)/skills/page-fa75c290b456c629.js +0 -1
  244. package/.next/static/chunks/app/(app)/tasks/page-1eb62689244c8a79.js +0 -1
  245. package/.next/static/chunks/app/(app)/test-dev/page-c496b31087389906.js +0 -1
  246. package/.next/static/chunks/app/(app)/update/page-5a217e6479bc5289.js +0 -1
  247. package/.next/static/chunks/app/(auth)/login/page-ad50e3112f35f41c.js +0 -1
  248. package/.next/static/chunks/app/(auth)/onboarding/page-ab05f02e868c9eec.js +0 -1
  249. package/.next/static/chunks/webpack-222e3894b78c67db.js +0 -1
  250. /package/.next/static/{T0ETI55t9tc9pi5i_CGOe → N4KMSOY3i-qyXrbfm97sO}/_buildManifest.js +0 -0
  251. /package/.next/static/{T0ETI55t9tc9pi5i_CGOe → N4KMSOY3i-qyXrbfm97sO}/_ssgManifest.js +0 -0
@@ -0,0 +1,21 @@
1
+ "use strict";exports.id=7970,exports.ids=[7970],exports.modules={19881:(a,b,c)=>{c.d(b,{W:()=>h});var d=c(4374),e=c(74679);let f={anthropic:"anthropic",claude_code:"claude",openai:"openai",codex_cli:"openai",google:"google",google_gemini:"gemini",gemini_cli:"gemini",vertex_ai:"vertexai",mistral:"mistral",deepseek:"deepseek",cohere:"cohere",perplexity:"perplexity",xai_grok:"grok",groq:"groq",ai21:"ai21",nvidia_nim:"nvidia",huggingface:"huggingface",replicate:"replicate",azure_openai:"azure",aws_bedrock:"bedrock",cloudflare:"cloudflare",dashscope:"qwen",zhipu:"zhipu",moonshot:"moonshot",minimax:"minimax",together:"together",openrouter:"openrouter",fireworks:"fireworks",cerebras:"cerebras",ollama:"ollama",ollama_cli:"ollama",lmstudio:"lmstudio",vllm:"vllm",localai:"localai",elevenlabs:"elevenlabs",stability:"stability",jina:"jina",voyage:"voyage"},g={anthropic:["#d97757","An"],openai:["#10a37f","AI"],google_gemini:["#4285f4","G"],google:["#4285f4","G"],mistral:["#fa520f","Mi"],xai_grok:["#1a1a1a","X"],deepseek:["#4d6bfe","DS"],cohere:["#39594d","Co"],ai21:["#e8488a","A2"],perplexity:["#20808d","Px"],groq:["#f55036","Gq"],nvidia_nim:["#76b900","NV"],together:["#0f6fff","To"],fireworks:["#5019c5","Fw"],cerebras:["#f25733","Cb"],huggingface:["#ff9d00","HF"],replicate:["#1a1a1a","Rp"],openrouter:["#6566f1","OR"],litellm:["#00b8a3","LL"],portkey:["#3b5bdb","Pk"],azure_openai:["#0078d4","Az"],aws_bedrock:["#ff9900","Br"],vertex_ai:["#4285f4","Vx"],cloudflare:["#f38020","Cf"],dashscope:["#ff6a00","Qw"],zhipu:["#3859ff","GL"],moonshot:["#16162a","Ki"],minimax:["#e1342c","MM"],ollama:["#0c0c0c","Ol"],llamacpp:["#7a4ddb","Lc"],lmstudio:["#4a5cff","LM"],vllm:["#1668dc","vL"],localai:["#2e7d32","La"],gpt4all:["#5b6cff","G4"],jan:["#1a1a1a","Jn"],claude_code:["#d97757","CC"],codex_cli:["#10a37f","Cx"],gemini_cli:["#4285f4","Gc"],aider:["#14b8a6","Ad"],ollama_cli:["#0c0c0c","Oc"],openclaw:["#e8590c","OC"],hermes_cli:["#6d28d9","Hm"],opencode:["#1a1a1a","Oc"],copilot_cli:["#1f2328","Co"],cursor_cli:["#1a1a1a","Cu"],cline_cli:["#2563eb","Cl"],kilo_code:["#7c3aed","Ki"],voyage:["#5b21b6","Vo"],jina:["#ec4899","Ji"],stability:["#a855f7","St"],elevenlabs:["#1a1a1a","El"]};function h({id:a,size:b=34,radius:c}){let i,j=g[a],k=j?j[0]:"#5b6378",l=j?j[1]:(a||"?").slice(0,2).replace(/[^a-z0-9]/gi,"").toUpperCase(),m=(i=f[a])?`https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg/icons/${i}.svg`:null,[n,o]=(0,e.useState)(!1),p=null!=c?c:Math.round(.28*b),q=m&&!n,r=Math.round(.66*b);return(0,d.jsx)("span",{className:"prov-glyph",style:{width:b,height:b,flex:"0 0 "+b+"px",borderRadius:p,background:q?"#fff":"linear-gradient(150deg, "+k+", color-mix(in srgb, "+k+" 70%, #000))",color:"#fff",display:"grid",placeItems:"center",overflow:"hidden",fontSize:Math.round(.4*b),fontWeight:800,letterSpacing:"-.5px",boxShadow:q?"inset 0 0 0 1px rgba(0,0,0,.08)":"inset 0 1px 0 rgba(255,255,255,.18)"},children:q?(0,d.jsx)("img",{src:m,alt:"",width:r,height:r,loading:"lazy",onError:()=>o(!0),style:{width:r,height:r,objectFit:"contain",display:"block"}}):l})}},27829:(a,b,c)=>{c.d(b,{Y:()=>j});var d=c(4374),e=c(74679),f=c(71898),g=c(31819);let h={cli_claude_code:[{value:"opus",label:"Claude Opus \xb7 most capable"},{value:"sonnet",label:"Claude Sonnet \xb7 balanced"},{value:"haiku",label:"Claude Haiku \xb7 fast"}],cli_codex:[{value:"gpt-5-codex",label:"GPT-5 Codex"},{value:"o4-mini",label:"o4-mini"}],cli_gemini:[{value:"gemini-2.5-pro",label:"Gemini 2.5 Pro"},{value:"gemini-2.5-flash",label:"Gemini 2.5 Flash"}],cli_openclaw:[{value:"(default)",label:"Configured default"},{value:"openai/gpt-5.4",label:"OpenAI \xb7 GPT-5.4"},{value:"anthropic/claude-sonnet-4",label:"Anthropic \xb7 Claude Sonnet 4"}],cli_hermes:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4.6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.5",label:"OpenAI \xb7 GPT-5.5"}],cli_aider:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4-6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.2",label:"OpenAI \xb7 GPT-5.2"},{value:"deepseek/deepseek-chat",label:"DeepSeek \xb7 Chat"}],cli_opencode:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4-6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.2",label:"OpenAI \xb7 GPT-5.2"}],cli_copilot:[{value:"(default)",label:"Configured default"},{value:"claude-sonnet-4.5",label:"Claude Sonnet 4.5"},{value:"gpt-5",label:"GPT-5"}],cli_cursor:[{value:"(default)",label:"Configured default"},{value:"claude-4.5-sonnet",label:"Claude Sonnet 4.5"},{value:"gpt-5",label:"GPT-5"}],cli_cline:[{value:"(default)",label:"Configured default"}],cli_kilo:[{value:"(default)",label:"Configured default"}]};var i=c(69503);function j({adapter:a,value:b,onChange:c,providers:k}){let l=(0,g.k)(),m=function(a){let b=h[a]??null;if(!b)return null;let c=(0,i.L2)(a);return c?b.map(a=>{let b=c.find(b=>b.id===a.value);return b?{value:a.value,label:`${b.label} ${b.version}${b.note?" \xb7 "+b.note:""}`}:a}):b}(a),n=a.startsWith("local_"),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)("");k.find(b=>b.adapter===a);let s=n?[{value:b||"local",label:l("modelpicker.localGguf")}]:null,t=m??s??o??(b?[{value:b,label:b}]:[]),u=b&&!t.some(a=>a.value===b)?[{value:b,label:b},...t]:t;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.m,{mono:!0,value:b,options:u,placeholder:l("modelpicker.placeholder"),onChange:c}),q&&(0,d.jsx)("div",{className:"form-hint",style:{marginTop:4},children:q})]})}c(92837),c(44153)},36172:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(2910);let e=(0,d.createServerReference)("4023914c635fa47959e59550bc8bd4ebb3ff58154d",d.callServer,void 0,d.findSourceMapURL,"pullModel")},37343:(a,b,c)=>{c.d(b,{k:()=>e});var d=c(2910);let e=(0,d.createServerReference)("60f7a9badac0e78da08a792858f4ccc8f6f37a02ef",d.callServer,void 0,d.findSourceMapURL,"saveAgentModel")},44153:(a,b,c)=>{c.d(b,{E:()=>e});var d=c(2910);let e=(0,d.createServerReference)("40ad8cc407db284a4237d2a2f3eb012ddf1050500b",d.callServer,void 0,d.findSourceMapURL,"listProviderModels")},65300:(a,b,c)=>{function d(a,b,c){let d=a.match(/^---\n([\s\S]*?)\n---/);if(!d)return a;let e=d[1].split("\n"),f=!1,g=e.map(a=>a.startsWith(b+":")?(f=!0,`${b}: ${c}`):a);return f||g.push(`${b}: ${c}`),a.replace(/^---\n[\s\S]*?\n---/,`---
2
+ ${g.join("\n")}
3
+ ---`)}function e(a,b,c){let d=RegExp(`(\\*\\*${b}:\\*\\*\\s*).*`);return d.test(a)?a.replace(d,`$1${c}`):a}function f(a,b,c){let d=RegExp(`(^|\\n)##\\s+${b}\\s*\\n[\\s\\S]*?(?=\\n##\\s|$)`);return d.test(a)?a.replace(d,`$1## ${b}
4
+ ${c}`):a.replace(/\s*$/,"")+`
5
+
6
+ ## ${b}
7
+ ${c}
8
+ `}c.d(b,{a$:()=>e,c4:()=>f,tT:()=>d})},69503:(a,b,c)=>{c.d(b,{L2:()=>e,Ov:()=>f});let d={cli_claude_code:[{id:"opus",label:"Claude Opus",version:"4.8",note:"most capable"},{id:"sonnet",label:"Claude Sonnet",version:"4.6",note:"balanced"},{id:"haiku",label:"Claude Haiku",version:"4.5",note:"fast"}],cli_codex:[{id:"gpt-5-codex",label:"GPT-5 Codex",version:"5"},{id:"o4-mini",label:"o4-mini",version:"o4"}],cli_gemini:[{id:"gemini-2.5-pro",label:"Gemini Pro",version:"2.5"},{id:"gemini-2.5-flash",label:"Gemini Flash",version:"2.5"}],cli_openclaw:[{id:"(default)",label:"OpenClaw",version:"default",note:"configured provider"},{id:"openai/gpt-5.4",label:"GPT",version:"5.4"},{id:"anthropic/claude-sonnet-4",label:"Claude Sonnet",version:"4"}],cli_hermes:[{id:"(default)",label:"Hermes",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4.6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.5",label:"GPT",version:"5.5"}],cli_aider:[{id:"(default)",label:"Aider",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4-6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.2",label:"GPT",version:"5.2"},{id:"deepseek/deepseek-chat",label:"DeepSeek Chat",version:""}],cli_opencode:[{id:"(default)",label:"OpenCode",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4-6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.2",label:"GPT",version:"5.2"}],cli_copilot:[{id:"(default)",label:"Copilot",version:"default",note:"configured provider"},{id:"claude-sonnet-4.5",label:"Claude Sonnet",version:"4.5"},{id:"gpt-5",label:"GPT",version:"5"}],cli_cursor:[{id:"(default)",label:"Cursor",version:"default",note:"configured provider"},{id:"claude-4.5-sonnet",label:"Claude Sonnet",version:"4.5"},{id:"gpt-5",label:"GPT",version:"5"}],cli_cline:[{id:"(default)",label:"Cline",version:"default",note:"configured provider"}],cli_kilo:[{id:"(default)",label:"Kilo Code",version:"default",note:"configured provider"}]};function e(a){return d[a]??null}function f(a){if(!a)return{label:"",version:""};let b=a.match(/(\d+(?:[.\-]\d+){0,2})(?!.*\d)/),c=b?b[1].replace(/-/g,"."):"";return{label:(b?a.slice(0,b.index).replace(/[-_.\s]+$/,""):a).split(/[-_.\s]+/).filter(Boolean).map(a=>/^(gpt|llm|api|ai)$/i.test(a)?a.toUpperCase():a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||a,version:c}}},71898:(a,b,c)=>{c.d(b,{m:()=>i});var d=c(4374),e=c(74679),f=c(43526),g=c(19881),h=c(31819);function i({value:a,options:b,onChange:c,placeholder:j,mono:k,glyph:l,disabled:m,searchable:n}){let o=(0,h.k)(),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(""),t=(0,e.useRef)(null),u=(0,e.useRef)(null),v=(0,e.useMemo)(()=>(b||[]).map(a=>"string"==typeof a?{value:a,label:a}:a),[b]),w=v.find(b=>b.value===a),x=(n??v.length>8)&&!m,y=r.trim().toLowerCase(),z=x&&y?v.filter(a=>(a.label+" "+a.value+" "+(a.sub||"")).toLowerCase().includes(y)):v;return(0,d.jsxs)("div",{className:"dd"+(p?" open":"")+(m?" disabled":""),ref:t,children:[(0,d.jsxs)("button",{type:"button",className:"dd-btn"+(k?" mono":""),onClick:()=>!m&&q(a=>!a),children:[l&&w&&(0,d.jsx)(g.W,{id:w.glyphId||w.value,size:20}),(0,d.jsx)("span",{className:"dd-val",children:w?w.label:(0,d.jsx)("span",{className:"dd-ph",children:j||o("common.selectEllipsis")})}),(0,d.jsx)(f.I,{name:"chevronDown",size:14})]}),p&&(0,d.jsxs)("div",{className:"dd-menu scroll",children:[x&&(0,d.jsxs)("div",{style:{position:"sticky",top:0,zIndex:1,display:"flex",alignItems:"center",gap:6,padding:"6px 8px",margin:"-4px -4px 4px",background:"var(--bg-elev, var(--bg-active))",borderBottom:"1px solid var(--border)"},children:[(0,d.jsx)(f.I,{name:"search",size:13}),(0,d.jsx)("input",{ref:u,value:r,placeholder:o("common.searchEllipsis"),onChange:a=>s(a.target.value),onKeyDown:a=>{"Enter"===a.key&&z[0]?(c(z[0].value),q(!1)):"Escape"===a.key&&r&&(a.stopPropagation(),s(""))},className:k?"mono":void 0,style:{flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",color:"var(--text)",fontSize:12.5,fontFamily:k?"var(--mono-font)":"inherit"}}),r&&(0,d.jsx)("button",{type:"button",title:o("common.clear"),onClick:()=>{s(""),u.current?.focus()},style:{background:"none",border:"none",color:"var(--text-dim)",cursor:"pointer",display:"flex",padding:0},children:(0,d.jsx)(f.I,{name:"close",size:12})})]}),0===v.length&&(0,d.jsx)("div",{className:"dd-empty",children:o("common.noOptions")}),v.length>0&&0===z.length&&(0,d.jsx)("div",{className:"dd-empty",children:o("dropdown.noMatch",{q:r})}),z.map(b=>(0,d.jsxs)("button",{type:"button",className:"dd-opt"+(b.value===a?" on":""),onClick:()=>{c(b.value),q(!1)},children:[l&&(0,d.jsx)(g.W,{id:b.glyphId||b.value,size:22}),(0,d.jsxs)("span",{className:"dd-opt-main",children:[(0,d.jsx)("span",{className:"dd-opt-label"+(k?" mono":""),children:b.label}),b.sub&&(0,d.jsx)("span",{className:"dd-opt-sub",children:b.sub})]}),b.tag&&(0,d.jsx)("span",{className:"dd-opt-tag",children:b.tag}),b.value===a&&(0,d.jsx)(f.I,{name:"check",size:13})]},b.value))]})]})}},86036:(a,b,c)=>{c.d(b,{bv:()=>t,eH:()=>q,iw:()=>o,jM:()=>n,kq:()=>p,yS:()=>s,z6:()=>r});var d=c(6866),e=c(97603),f=c(31371),g=c(65705),h=c(1890),i=c(53993),j=c(57086),k=c(83963),l=c(65300),m=c(35745);async function n(a,b){let{workspace:c}=await (0,i.nP)();if(a===b)return;let d=Object.fromEntries((await g.db.select().from(h.agent).where((0,e.eq)(h.agent.workspaceId,c.id))).map(a=>[a.id,a])),j=b,k=new Set;for(;j;){if(j===a)return;if(k.has(j))break;k.add(j),j=d[j]?.reportsTo??null}await g.db.update(h.agent).set({reportsTo:b}).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,c.id))),(0,f.revalidatePath)("/org")}async function o(a,b){let{workspace:c}=await (0,i.nP)();if(a===b)return;let d=Object.fromEntries((await g.db.select().from(h.agent).where((0,e.eq)(h.agent.workspaceId,c.id))).map(a=>[a.handle,a])),j=d[a];if(!j||null!==b&&!d[b])return;let k=b,l=new Set;for(;k;){if(k===a)return;if(l.has(k))break;l.add(k),k=d[k]?.reportsTo??null}await g.db.update(h.agent).set({reportsTo:b}).where((0,e.Uo)((0,e.eq)(h.agent.id,j.id),(0,e.eq)(h.agent.workspaceId,c.id))),(0,f.revalidatePath)("/org")}async function p(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[n]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(!n)return;await g.db.update(h.agent).set({...void 0!==b.adapter?{adapter:b.adapter}:{},...void 0!==b.model?{model:b.model}:{},...void 0!==b.temperature?{temperature:b.temperature}:{},...void 0!==b.dailyCapUsd?{dailyCapUsd:b.dailyCapUsd}:{},...void 0!==b.tierFloor?{tierFloor:b.tierFloor}:{}}).where((0,e.eq)(h.agent.id,a));let o=`.claude/agents/${n.handle}/Agent.md`,p=(0,j.sL)(c.id,o);p&&(void 0!==b.adapter&&(p=(0,l.tT)(p,"provider",b.adapter)),void 0!==b.model&&(p=(0,l.tT)(p,"model",b.model)),void 0!==b.temperature&&(p=(0,l.tT)(p,"temperature",b.temperature),p=(0,l.c4)(p,"Behavior",(0,m.T)(b.temperature))),void 0!==b.dailyCapUsd&&(p=(0,l.tT)(p,"dailyCapUsd",b.dailyCapUsd)),void 0!==b.tierFloor&&(p=(0,l.tT)(p,"tierFloor",b.tierFloor)),await (0,k.g)(c.id,o,p)),(0,f.revalidatePath)("/agents/[handle]","page")}async function q(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[k]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(k){if(k.image&&k.image.startsWith("uploads/")&&k.image!==b)try{(0,j.EX)(c.id,k.image.split("/").slice(0,2).join("/"))}catch{}await g.db.update(h.agent).set({image:b??null}).where((0,e.eq)(h.agent.id,a)),(0,f.revalidatePath)("/agents/[handle]","page"),(0,f.revalidatePath)("/","layout")}}async function r(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[m]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(!m)return;await g.db.update(h.agent).set({persona:b}).where((0,e.eq)(h.agent.id,a));let n=`.claude/agents/${m.handle}/Agent.md`,o=(0,j.sL)(c.id,n);o?(o=(0,l.a$)(o,"Identity",b.identity),o=(0,l.a$)(o,"Ritual",b.ritual),o=(0,l.c4)(o,"System prompt",b.systemPrompt)):o=`---
9
+ handle: ${m.handle}
10
+ name: ${m.name}
11
+ role: ${m.role}
12
+ ---
13
+ # ${m.name} — ${m.role}
14
+
15
+ **Identity:** ${b.identity}
16
+
17
+ **Ritual:** ${b.ritual}
18
+
19
+ ## System prompt
20
+ ${b.systemPrompt}
21
+ `,await (0,k.g)(c.id,n,o),(0,f.revalidatePath)("/agents/[handle]","page")}async function s(a,b,c){let{workspace:d}=await (0,i.nP)();await g.db.update(h.agent).set({orgX:Math.round(b),orgY:Math.round(c)}).where((0,e.Uo)((0,e.eq)(h.agent.handle,a),(0,e.eq)(h.agent.workspaceId,d.id)))}async function t(a,b){let{workspace:c}=await (0,i.nP)(),[d]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,c.id)));d&&(await g.db.update(h.agent).set({rag:b}).where((0,e.eq)(h.agent.id,a)),(0,f.revalidatePath)("/agents/[handle]","page"))}(0,c(74252).D)([n,o,p,q,r,s,t]),(0,d.A)(n,"607693138d28d8f43569c42d33b1e396036f9caee1",null),(0,d.A)(o,"60b5e8b749b8c079b6f0232b55d48f5ad0e9f26bd0",null),(0,d.A)(p,"60f7a9badac0e78da08a792858f4ccc8f6f37a02ef",null),(0,d.A)(q,"60182615880c9d485a408140c0a1796aa25913b0c7",null),(0,d.A)(r,"6075563bd7c53667d7c6bc25a3c8ae003c74b8de89",null),(0,d.A)(s,"70f5473699d6879da7e70820c873eebbda885204de",null),(0,d.A)(t,"6008d8c78dff76e554930b597d23dddf9673f6a7b6",null)},92837:(a,b,c)=>{c.d(b,{A:()=>e});var d=c(2910);let e=(0,d.createServerReference)("406836dff841ba34c3bd419e038c83fef59ce53ba8",d.callServer,void 0,d.findSourceMapURL,"listCatalogModels")},96214:(a,b,c)=>{c.d(b,{aO:()=>H,AO:()=>M,EC:()=>O,uR:()=>L,Po:()=>J,iw:()=>P,xf:()=>Q,x1:()=>I,WU:()=>N});var d=c(6866),e=c(77598),f=c(97603),g=c(31371),h=c(65705),i=c(1890),j=c(53993),k=c(38926),l=c(29803),m=c(70149);async function n(a,b,c=12e3){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c,e=await fetch(a,{headers:b,signal:d.signal}),f=await e.text();try{c=JSON.parse(f)}catch{c=void 0}return{ok:e.ok,status:e.status,json:c,error:e.ok?void 0:f.slice(0,200)||e.statusText}}catch(a){return{ok:!1,status:0,error:a instanceof Error?a.message:String(a)}}finally{clearTimeout(e)}}function o(a){return a&&"object"==typeof a?Array.isArray(a.data)?a.data.length:Array.isArray(a.models)?a.models.length:0:0}async function p(a,b){let c=a.defaultAdapter;if(c.startsWith("cli_")){let a=(0,m.hW)(c);return await (0,m.$g)(a)?{ok:!0,count:(m.w5[c]??m.w5.cli_claude_code).length}:{ok:!1,count:0,error:`${a} CLI not found on PATH`}}if("local_ollama"===c||"ollama"===a.id||"ollama_openai"===a.id){let b=a.baseUrl||"http://127.0.0.1:11434",c=await n(b.replace(/\/$/,"")+"/api/tags",{});return c.ok?{ok:!0,count:o(c.json)}:{ok:!1,count:0,error:c.error||"Ollama not reachable at "+b}}if("local_runtime"===a.category){let c=a.baseUrl||"http://127.0.0.1:8080",d=await n(c.replace(/\/$/,"")+"/v1/models",b?{Authorization:"Bearer "+b}:{});return d.ok?{ok:!0,count:o(d.json)}:{ok:!1,count:0,error:d.error||"local runtime not reachable"}}if(!b)return{ok:!1,count:0,error:"no API key in vault — connect with a key first"};if("http_anthropic"===c||"anthropic"===a.id){let a=await n("https://api.anthropic.com/v1/models",{"x-api-key":b,"anthropic-version":"2023-06-01"});return a.ok?{ok:!0,count:o(a.json)}:{ok:!1,count:0,error:a.error||"auth failed ("+a.status+")"}}let d=(a.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),e=d.endsWith("/models")?d:d+(d.includes("/v1")?"/models":"/v1/models"),f=await n(e,{Authorization:"Bearer "+b});return f.ok?{ok:!0,count:o(f.json)}:{ok:!1,count:0,error:f.error||"auth failed ("+f.status+")"}}var q=c(73024),r=c(76760),s=c(57086);let t={anthropic:"anthropic",openai:"openai",google_gemini:"google",xai_grok:"xai",deepseek:"deepseek",cohere:"cohere",groq:"groq",nvidia_nim:"nvidia",together:"togetherai",fireworks:"fireworks-ai",cerebras:"cerebras",perplexity:"perplexity",openrouter:"openrouter",mistral:"mistral",moonshot:"moonshotai",dashscope:"alibaba",zhipu:"zhipuai",azure_openai:"azure",aws_bedrock:"amazon-bedrock",vertex_ai:"google-vertex",claude_code:"anthropic",gemini_cli:"google"};function u(a){return t[a]?t[a]:a.replace(/_(grok|gemini|nim|cli|openai|api|server|rt)$/g,"").replace(/_/g,"-")}let v={anthropic:["sonnet-4","sonnet","opus-4","opus"],openai:["gpt-5.2","gpt-5.1","gpt-5","gpt-4.1","o4"],google:["gemini-3-pro","gemini-3","gemini-2.5-pro","pro"],xai:["grok-4","grok-3","grok"],groq:["llama-4","llama-3.3","llama-3.1"],deepseek:["deepseek-chat","deepseek-v3","deepseek-reasoner"],mistral:["mistral-large","mistral-medium"],openrouter:["claude-sonnet","gpt-5","gemini"]},w=(a,b,c,d,e,f,g,h)=>({id:a,name:b,context:c,outputLimit:d,inputCost:e,outputCost:f,caps:{reasoning:!!g.reasoning,tools:!!g.tools,vision:!!g.vision},released:h}),x={anthropic:[w("claude-opus-4-8","Claude Opus 4.8",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("claude-opus-4-7","Claude Opus 4.7",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("claude-sonnet-4-6","Claude Sonnet 4.6",1e6,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-01-15"),w("claude-haiku-4-5","Claude Haiku 4.5",2e5,32e3,1,5,{tools:!0,vision:!0},"2025-10-01")],openai:[w("gpt-5.2","GPT-5.2",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2026-03-01"),w("gpt-5.1","GPT-5.1",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("gpt-5","GPT-5",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-08-01"),w("o4-mini","o4-mini",2e5,1e5,1.1,4.4,{reasoning:!0,tools:!0},"2025-04-01")],google:[w("gemini-3-pro","Gemini 3 Pro",2e6,64e3,2,12,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("gemini-3-flash","Gemini 3 Flash",1e6,64e3,.3,2.5,{tools:!0,vision:!0},"2026-02-01"),w("gemini-2.5-pro","Gemini 2.5 Pro",2e6,64e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-06-01")],xai:[w("grok-4.3","Grok 4.3",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("grok-4","Grok 4",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2025-09-01"),w("grok-3","Grok 3",131072,32e3,3,15,{tools:!0,vision:!0},"2025-02-01")],deepseek:[w("deepseek-chat","DeepSeek Chat",128e3,8e3,.27,1.1,{tools:!0},"2025-12-01"),w("deepseek-reasoner","DeepSeek Reasoner",128e3,64e3,.55,2.19,{reasoning:!0,tools:!0},"2025-12-01")],groq:[w("llama-4-scout","Llama 4 Scout",131072,8e3,.11,.34,{tools:!0,vision:!0},"2025-04-01"),w("llama-3.3-70b","Llama 3.3 70B",131072,32e3,.59,.79,{tools:!0},"2024-12-01")]},y=null;function z(){return(0,r.join)((0,s.r$)(),"cache","models-dev.json")}async function A(){try{let a=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4),headers:{accept:"application/json"}});if(!a.ok)return null;let b=await a.json();if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b)){let b=d?.models,e=function(a){if(!a||"object"!=typeof a)return[];let b=[];for(let[c,d]of Object.entries(a)){let a=d??{},e=String(a.id??c),f=e.includes("/")?e.split("/").pop():e;if(!f)continue;let g=a.modalities??{},h=Array.isArray(g.input)?g.input:[],i=a.limit??{},j=a.cost??{},k={reasoning:!0===a.reasoning,tools:!0===a.tool_call,vision:!0===a.attachment||h.includes("image")};b.push({id:f,name:String(a.name??f),context:Number(i.context??0)||0,outputLimit:Number(i.output??0)||0,inputCost:Number(j.input??0)||0,outputCost:Number(j.output??0)||0,caps:k,released:"string"==typeof a.release_date?a.release_date:""})}return b}(b);e.length&&(c[a]=e)}return Object.keys(c).length?c:null}catch{return null}}async function B(){if(y&&Date.now()-y.at<864e5)return y.data;let a=function(){try{let a=z();if(!(0,q.existsSync)(a))return null;let b=JSON.parse((0,q.readFileSync)(a,"utf8"));if(!b?.data||"object"!=typeof b.data)return null;return{at:Number(b.at??(0,q.statSync)(a).mtimeMs),data:b.data}}catch{return null}}();if(a&&Date.now()-a.at<864e5)return y=a,a.data;let b=await A();if(b){y={at:Date.now(),data:b};try{(0,q.mkdirSync)((0,r.join)((0,s.r$)(),"cache"),{recursive:!0}),(0,q.writeFileSync)(z(),JSON.stringify({at:Date.now(),data:b}),"utf8")}catch{}return b}return a?(y=a,a.data):{}}async function C(a){let b=u(a),c=await B();return c[b]?.length?c[b]:x[b]??[]}async function D(a,b,c=9e3){try{let d=await fetch(a,{headers:b,signal:AbortSignal.timeout(c)});if(!d.ok)return null;return await d.json()}catch{return null}}async function E(a){let{catalogId:b,adapter:c,baseUrl:d,apiKey:e}=a;if(c.startsWith("cli_"))return"cli_opencode"===c?(await (0,m.ZB)("opencode")).map(a=>({id:a})):"cli_aider"===c?(await (0,m.ZB)("aider")).map(a=>({id:a})):null;if(/ollama/i.test(b)||c.includes("ollama")){let a=(d||"http://127.0.0.1:11434").replace(/\/$/,"").replace(/\/v1$/,""),b=await D(`${a}/api/tags`,{});return b?(b.models??[]).map(a=>({id:String(a.name??"")})).filter(a=>a.id):[]}if(!d)return null;let f=d.replace(/\/$/,""),g="http_anthropic"===c||"anthropic"===b,h=g?"https://api.anthropic.com/v1/models":f.endsWith("/models")?f:f+(f.includes("/v1")?"/models":"/v1/models"),i=g?e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{}:e?{authorization:`Bearer ${e}`}:{},j=await D(h,i);return j?(Array.isArray(j.data)?j.data:Array.isArray(j.models)?j.models:[]).map(a=>{let b=String(a.id??a.name??"");if(!b)return null;let c={id:b};"string"==typeof a.display_name?c.name=a.display_name:"string"==typeof a.name&&(c.name=a.name),"number"==typeof a.context_length&&(c.context=a.context_length);let d=a.pricing;if(d){let a=Number(d.prompt),b=Number(d.completion);Number.isFinite(a)&&a>0&&(c.inputCost=1e6*a),Number.isFinite(b)&&b>0&&(c.outputCost=1e6*b)}return c}).filter(a=>!!a).slice(0,200):[]}async function F(){let a=await B(),b=new Map;for(let c of Object.values(a))for(let a of c){let c=a.id.toLowerCase();b.has(c)||b.set(c,a)}return b}async function G(a,b){let c=await C(a);if(!b||0===b.length)return c;let d=new Map;for(let a of c)d.set(a.id.toLowerCase(),a);let e=await F(),f=a=>{let b=a.toLowerCase(),c=a.includes("/")?a.split("/").pop().toLowerCase():b;return d.get(b)??d.get(c)??e.get(b)??e.get(c)},g=[];for(let a of b){let b=f(a.id);g.push({id:a.id,name:a.name||b?.name||a.id,context:a.context??b?.context??0,outputLimit:b?.outputLimit??0,inputCost:a.inputCost??b?.inputCost??0,outputCost:a.outputCost??b?.outputCost??0,caps:b?.caps??{reasoning:!1,tools:!1,vision:!1},released:b?.released??""})}return g}async function H(a,b){let{workspace:c}=await (0,j.nP)(),d=(0,l.kH)(a);if(!d)return;let f=(0,e.randomUUID)();await h.db.insert(i.provider).values({id:f,workspaceId:c.id,catalogId:a,adapter:d.defaultAdapter,kind:"cli"===d.category?"cli":"local_runtime"===d.category?"local":"cloud",auth:d.connectionTypes.includes("api_key")?"api_key":d.connectionTypes[0],status:"needs_sync",syncStatus:d.supportsModelSync?"implemented":"manual"}),b&&await (0,k.IW)(c.id,`${a}_api_key`,b,f),(0,g.revalidatePath)("/models"),await I(f)}async function I(a){let b,{workspace:c}=await (0,j.nP)(),[d]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,c.id)));if(!d)return{ok:!1,error:"not found"};let e=(0,l.kH)(d.catalogId);if(!e)return{ok:!1,error:"unknown provider"};let n=await (0,k.r6)(c.id,`${d.catalogId}_api_key`),o=await p(e,n),q=null;if("cli"===e.category){let a=(0,m.hW)(e.defaultAdapter);b=(q=await (0,m.$g)(a).catch(()=>null))?await (0,m.Kp)(a).catch(()=>"unknown"):"needs_login"}else b="local_runtime"===e.category?o.ok?"ready":"unknown":n&&o.ok?"ready":"needs_key";return await h.db.update(i.provider).set({status:o.ok?"connected":"error",modelCount:o.count,lastSync:new Date,cliVersion:q,authState:b}).where((0,f.eq)(i.provider.id,a)),o.ok&&await J(a).catch(()=>{}),(0,g.revalidatePath)("/models"),o}async function J(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,count:0,error:"not found"};let d=await K(c);return(0,g.revalidatePath)("/models"),d}async function K(a){let b,c,d,g=(0,l.kH)(a.catalogId);if(!g)return{ok:!1,count:0,error:"unknown provider"};let j=await (0,k.r6)(a.workspaceId,`${a.catalogId}_api_key`),n="cli"===g.category;try{b=await E({catalogId:a.catalogId,adapter:a.adapter,baseUrl:g.baseUrl,apiKey:j})}catch{b=null}if(n){let e=(0,m.hW)(a.adapter);d=(c=await (0,m.$g)(e).catch(()=>null))?await (0,m.Kp)(e).catch(()=>"unknown"):"needs_login",null===b&&(b=(m.w5[a.adapter]??[]).filter(a=>"(default)"!==a).map(a=>({id:a})))}if(null===b)return{ok:!0,count:0};let o=await G(a.catalogId,b),p=new Date,q=o.length?function(a,b){if(!b.length)return"";let c=v[u(a)];if(c)for(let a of c){let c=b.filter(b=>b.id.toLowerCase().includes(a));if(c.length)return c.sort((a,b)=>(b.released||"").localeCompare(a.released||"")),c[0].id}let d=b.filter(a=>a.released);return d.length?(d.sort((a,b)=>b.released.localeCompare(a.released)),d[0].id):b[0].id}(a.catalogId,o):null;if(o.length)await h.db.delete(i.providerModel).where((0,f.eq)(i.providerModel.providerId,a.id)),await h.db.insert(i.providerModel).values(o.map(b=>({id:(0,e.randomUUID)(),workspaceId:a.workspaceId,providerId:a.id,catalogId:a.catalogId,modelId:b.id,name:b.name,context:b.context,outputLimit:b.outputLimit,inputCost:b.inputCost,outputCost:b.outputCost,caps:b.caps,released:b.released,isDefault:b.id===q,lastSeen:p})));else if(!n)return{ok:!1,count:0,error:"no models returned"};let r=n&&!c?"needs_sync":"connected";return await h.db.update(i.provider).set({status:r,modelCount:o.length||(n?a.modelCount:0),lastSync:p,defaultModel:q||a.defaultModel,...n?{cliVersion:c??null,authState:d??null}:{}}).where((0,f.eq)(i.provider.id,a.id)),{ok:!0,count:o.length}}async function L(a=12){let b,c=new Date(Date.now()-60*a*6e4);try{b=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.status,"connected"),(0,f.or)((0,f.kZ)(i.provider.lastSync),(0,f.lt)(i.provider.lastSync,c))))}catch{return{refreshed:0}}let d=0;for(let a of b.slice(0,50))try{let b=await K(a);b.ok&&b.count>0&&d++}catch{}return{refreshed:d}}async function M(a){let{workspace:b}=await (0,j.nP)(),c=(await h.db.select().from(i.providerModel).where((0,f.Uo)((0,f.eq)(i.providerModel.providerId,a),(0,f.eq)(i.providerModel.workspaceId,b.id)))).map(a=>({id:a.modelId,name:a.name,context:a.context,outputLimit:a.outputLimit,inputCost:a.inputCost,outputCost:a.outputCost,caps:a.caps??{reasoning:!1,tools:!1,vision:!1},released:a.released,isDefault:a.isDefault}));return c.sort((a,b)=>Number(b.isDefault)-Number(a.isDefault)||(b.released||"").localeCompare(a.released||"")||a.name.localeCompare(b.name)),{models:c}}async function N(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d)return{ok:!1,error:"unknown provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),m=await p(d,e);return await h.db.update(i.provider).set({status:m.ok?"connected":"error"}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"),{ok:m.ok,error:m.error}}async function O(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{models:[],error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d?.baseUrl)return{models:[],error:"no public endpoint for this provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),g=d.baseUrl.replace(/\/$/,"");try{let a=/ollama/i.test(c.catalogId)||c.adapter.includes("ollama")?`${g.replace(/\/v1$/,"")}/api/tags`:`${g}/models`,b=await fetch(a,{headers:e?{authorization:`Bearer ${e}`}:{},signal:AbortSignal.timeout(8e3)});if(!b.ok)return{models:[],error:`endpoint ${b.status}`};let d=await b.json();return{models:(d.data??d.models??[]).map(a=>a.id??a.name??"").filter(Boolean).slice(0,80)}}catch(b){let a=String(b instanceof Error?b.message:b);return{models:[],error:/abort|fetch failed|ECONN/i.test(a)?"endpoint unreachable":a}}}async function P(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.delete(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id))),(0,g.revalidatePath)("/models")}async function Q(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&(await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.update(i.provider).set({auth:"none",status:"needs_sync",modelCount:0}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"))}(0,c(74252).D)([H,I,J,L,M,N,O,P,Q]),(0,d.A)(H,"60bdec14597a2402418a9153dbff11622c12dfd58e",null),(0,d.A)(I,"407eeda1dd6b19dfa06ac9af2c006223133feb94b3",null),(0,d.A)(J,"40f69e0eec9373f2ba113fc240678e663895f384eb",null),(0,d.A)(L,"4000f825adbb6c74572d70e17b9995709d1cbb122a",null),(0,d.A)(M,"406836dff841ba34c3bd419e038c83fef59ce53ba8",null),(0,d.A)(N,"40bd06c4c1aab8ecdfd0402fbd0a27917dcf1c6f88",null),(0,d.A)(O,"40ad8cc407db284a4237d2a2f3eb012ddf1050500b",null),(0,d.A)(P,"402e429d688574228a27b88515e0ac2b623fd0dc00",null),(0,d.A)(Q,"40d4835df2ba133a7be578a6d2ad50dba23e0a77be",null)}};
@@ -1 +1 @@
1
- "use strict";exports.id=7989,exports.ids=[7989],exports.modules={18185:(a,b,c)=>{c.d(b,{$:()=>d});let d=new Map},27989:(a,b,c)=>{c.d(b,{V$:()=>ah,Uw:()=>F,wp:()=>O,Jw:()=>X,Cp:()=>P,S8:()=>ab,kb:()=>ae,Hi:()=>ac,Vr:()=>ad,nl:()=>Y,LU:()=>Z,cm:()=>J,VH:()=>K,zO:()=>G,Gh:()=>I,I2:()=>H,ju:()=>M,Ac:()=>ag,m:()=>Q,az:()=>N,ts:()=>af,L0:()=>ai,lC:()=>aj});var d=c(52813),e=c(48161),f=c.n(e),g=c(77598),h=c(73024),i=c(31421),j=c(54679),k=c.n(j),l=c(76760),m=c(57075),n=c(46466),o=c(1782),p=c(83550),q=c(80280),r=c(25533),s=c(95896),t=c(18612),u=c(64619);function v(a,b,c=.02){let d=0;try{d=(0,h.statSync)(a).size}catch{return{ok:!1,actual:0,expected:b,message:"file missing after download"}}if(!b||b<=0)return{ok:!0,actual:d,expected:b,message:"size ok (no expected size)"};let e=d/b,f=e>=1-c&&e<=1+c;return{ok:f,actual:d,expected:b,message:f?"size verified":`size mismatch — got ${d} bytes, expected ~${b} (truncated/corrupt)`}}var w=c(18185);let x=[{repo:"Qwen2.5-0.5B-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen2.5-1.5B-Instruct",paramsB:1.5,kind:"chat"},{repo:"Qwen2.5-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Qwen2.5-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2.5-14B-Instruct",paramsB:14,kind:"chat"},{repo:"Qwen2.5-32B-Instruct",paramsB:32,kind:"chat"},{repo:"Qwen2.5-72B-Instruct",paramsB:72,kind:"chat"},{repo:"Qwen2.5-Coder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"Qwen2.5-Coder-3B-Instruct",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-7B-Instruct",paramsB:7,kind:"code"},{repo:"Qwen2.5-Coder-14B-Instruct",paramsB:14,kind:"code"},{repo:"Qwen2.5-Coder-32B-Instruct",paramsB:32,kind:"code"},{repo:"Qwen3-0.6B",paramsB:.6,kind:"chat"},{repo:"Qwen3-1.7B",paramsB:1.7,kind:"chat"},{repo:"Qwen3-4B",paramsB:4,kind:"chat"},{repo:"Qwen3-8B",paramsB:8,kind:"chat"},{repo:"Qwen3-14B",paramsB:14,kind:"chat"},{repo:"Qwen3-32B",paramsB:32,kind:"chat"},{repo:"Llama-3.2-1B-Instruct",paramsB:1,kind:"chat"},{repo:"Llama-3.2-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Meta-Llama-3.1-8B-Instruct",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3.1-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama-3.3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"gemma-2-2b-it",paramsB:2,kind:"chat"},{repo:"gemma-2-9b-it",paramsB:9,kind:"chat"},{repo:"gemma-2-27b-it",paramsB:27,kind:"chat"},{repo:"gemma-3-1b-it",paramsB:1,kind:"chat"},{repo:"gemma-3-4b-it",paramsB:4,kind:"chat"},{repo:"gemma-3-12b-it",paramsB:12,kind:"chat"},{repo:"gemma-3-27b-it",paramsB:27,kind:"chat"},{repo:"Mistral-7B-Instruct-v0.3",paramsB:7,kind:"chat"},{repo:"Mistral-Nemo-Instruct-2407",paramsB:12,kind:"chat"},{repo:"Mistral-Small-Instruct-2409",paramsB:22,kind:"chat"},{repo:"Mistral-Small-24B-Instruct-2501",paramsB:24,kind:"chat"},{repo:"Codestral-22B-v0.1",paramsB:22,kind:"code"},{repo:"Phi-3.1-mini-4k-instruct",paramsB:3.8,kind:"chat"},{repo:"DeepSeek-R1-Distill-Qwen-1.5B",paramsB:1.5,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-7B",paramsB:7,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-14B",paramsB:14,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-32B",paramsB:32,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-Coder-V2-Lite-Instruct",paramsB:16,kind:"code"},{repo:"Yi-1.5-9B-Chat",paramsB:9,kind:"chat"},{repo:"Yi-1.5-34B-Chat",paramsB:34,kind:"chat"},{repo:"granite-3.0-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-3.1-8b-instruct",paramsB:8,kind:"chat"},{repo:"SmolLM2-360M-Instruct",paramsB:.36,kind:"chat"},{repo:"SmolLM2-1.7B-Instruct",paramsB:1.7,kind:"chat"},{repo:"aya-expanse-8b",paramsB:8,kind:"chat"},{repo:"aya-expanse-32b",paramsB:32,kind:"chat"},{repo:"Falcon3-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Falcon3-10B-Instruct",paramsB:10,kind:"chat"},{repo:"EXAONE-3.5-2.4B-Instruct",paramsB:2.4,kind:"chat"},{repo:"EXAONE-3.5-7.8B-Instruct",paramsB:7.8,kind:"chat"},{repo:"Qwen3.5-0.8B",paramsB:.8,kind:"chat"},{repo:"Qwen3.5-2B",paramsB:2,kind:"chat"},{repo:"Qwen3.5-9B",paramsB:9,kind:"chat"},{repo:"Qwen3.5-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.5-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3.6-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.6-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3-30B-A3B",paramsB:30,kind:"chat"},{repo:"Qwen3-30B-A3B-Instruct-2507",paramsB:30,kind:"chat"},{repo:"Qwen3-Next-80B-A3B-Instruct",paramsB:80,kind:"chat"},{repo:"Qwen3-4B-Thinking-2507",paramsB:4,kind:"reasoning"},{repo:"QwQ-32B",paramsB:32,kind:"reasoning"},{repo:"Qwen2.5-7B-Instruct-1M",paramsB:7,kind:"chat"},{repo:"Qwen2.5-Coder-0.5B-Instruct",paramsB:.5,kind:"code"},{repo:"Qwen2.5-Coder-3B",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-32B",paramsB:32,kind:"code"},{repo:"Qwen2.5-Math-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2-500M-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen1.5-32B-Chat",paramsB:32,kind:"chat"},{repo:"gemma-4-E2B-it",paramsB:2,kind:"chat"},{repo:"gemma-4-E4B-it",paramsB:4,kind:"chat"},{repo:"gemma-4-12B-it",paramsB:12,kind:"chat"},{repo:"gemma-4-26B-A4B-it",paramsB:26,kind:"chat"},{repo:"gemma-4-31B-it",paramsB:31,kind:"chat"},{repo:"gemma-3-270m-it",paramsB:.27,kind:"chat"},{repo:"gemma-1.1-2b-it",paramsB:2,kind:"chat"},{repo:"codegemma-2b",paramsB:2,kind:"code"},{repo:"codegemma-7b",paramsB:7,kind:"code"},{repo:"codegemma-7b-it",paramsB:7,kind:"code"},{repo:"codegemma-1.1-7b-it",paramsB:7,kind:"code"},{repo:"Ministral-3-3B-Instruct-2512",paramsB:3,kind:"chat"},{repo:"Ministral-3-8B-Instruct-2512",paramsB:8,kind:"chat"},{repo:"Ministral-3-14B-Instruct-2512",paramsB:14,kind:"chat"},{repo:"Ministral-3-3B-Reasoning-2512",paramsB:3,kind:"reasoning"},{repo:"Ministral-3-8B-Reasoning-2512",paramsB:8,kind:"reasoning"},{repo:"Ministral-3-14B-Reasoning-2512",paramsB:14,kind:"reasoning"},{repo:"Mistral-Small-3.1-24B-Instruct-2503",paramsB:24,kind:"chat"},{repo:"Mistral-Small-3.2-24B-Instruct-2506",paramsB:24,kind:"chat"},{repo:"Devstral-Small-2-24B-Instruct-2512",paramsB:24,kind:"code"},{repo:"mathstral-7B-v0.1",paramsB:7,kind:"chat"},{repo:"dolphin-2.8-mistral-7b-v02",paramsB:7,kind:"chat"},{repo:"WizardLM-2-7B",paramsB:7,kind:"chat"},{repo:"DeepSeek-R1-0528-Qwen3-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-70B",paramsB:70,kind:"reasoning"},{repo:"deepseek-coder-1.3B-kexer",paramsB:1.3,kind:"code"},{repo:"deepseek-coder-6.7B-kexer",paramsB:6.7,kind:"code"},{repo:"granite-3.2-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-4.1-3b",paramsB:3,kind:"chat"},{repo:"granite-4.1-8b",paramsB:8,kind:"chat"},{repo:"granite-4.1-30b",paramsB:30,kind:"chat"},{repo:"Olmo-3-32B-Think",paramsB:32,kind:"reasoning"},{repo:"Seed-OSS-36B-Instruct",paramsB:36,kind:"chat"},{repo:"ERNIE-4.5-21B-A3B-PT",paramsB:21,kind:"chat"},{repo:"LFM2-24B-A2B",paramsB:24,kind:"chat"},{repo:"LFM2.5-1.2B-Instruct",paramsB:1.2,kind:"chat"},{repo:"LFM2.5-1.2B-Thinking",paramsB:1.2,kind:"reasoning"},{repo:"NVIDIA-Nemotron-3-Nano-4B",paramsB:4,kind:"chat"},{repo:"Hermes-4-70B",paramsB:70,kind:"chat"},{repo:"Llama-3.1-Tulu-3-8B",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama3-ChatQA-1.5-70B",paramsB:70,kind:"chat"},{repo:"Llama-3-Groq-8B-Tool-Use",paramsB:8,kind:"chat"},{repo:"aya-23-8B",paramsB:8,kind:"chat"},{repo:"aya-23-35B",paramsB:35,kind:"chat"},{repo:"SmolLM2-135M-Instruct",paramsB:.135,kind:"chat"},{repo:"Yi-Coder-1.5B",paramsB:1.5,kind:"code"},{repo:"Yi-Coder-9B-Chat",paramsB:9,kind:"code"},{repo:"OpenCoder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"stable-code-instruct-3b",paramsB:3,kind:"code"},{repo:"internlm2-math-plus-7b",paramsB:7,kind:"chat"},{repo:"internlm2-math-plus-20b",paramsB:20,kind:"chat"}],y={Q3_K_L:.55,Q4_K_M:.67,Q6_K:.9,Q8_0:1.13},z=[{id:"nomic-embed-q8",name:"nomic-embed-text-v1.5 (Q8_0)",url:"https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q8_0.gguf",params:"137M",quant:"Q8_0",sizeBytes:146e6,kind:"embed",paramsB:.137},...function(){let a=[];for(let d of x){var b,c;let e=d.vendor??"lmstudio-community";for(let f of(b=d.paramsB)<=9?["Q3_K_L","Q4_K_M","Q6_K","Q8_0"]:b<=34?["Q3_K_L","Q4_K_M","Q6_K"]:["Q3_K_L","Q4_K_M"]){let b=`${d.repo}-${f}.gguf`;a.push({id:`${d.repo}-${f}`.toLowerCase().replace(/[^a-z0-9]+/g,"-"),name:`${d.repo} (${f})`,url:`https://huggingface.co/${e}/${d.repo}-GGUF/resolve/main/${b}`,params:(c=d.paramsB)<1?`${Math.round(1e3*c)}M`:`${c}B`,quant:f,sizeBytes:Math.round(1e9*d.paramsB*y[f]),kind:d.kind,paramsB:d.paramsB})}}return a}()];var A=c(29635);let B=process.env.OLLAMA_URL??"http://127.0.0.1:11434",C=process.env.LLAMACPP_URL??"http://127.0.0.1:8082",D=process.env.CONSTELLA_EMBED_URL??"http://127.0.0.1:8083",E=null;async function F(){if(E){let a=f().totalmem()/0x40000000,b=f().freemem()/0x40000000;return{...E,ram:`${a.toFixed(0)} GB \xb7 ${b.toFixed(1)} free`}}let a=f().cpus(),b=(a[0]?.model??"Unknown CPU").replace(/\s+/g," ").trim(),c=a.length,d=f().totalmem()/0x40000000,e=f().freemem()/0x40000000,g=`${d.toFixed(0)} GB \xb7 ${e.toFixed(1)} free`,h=f().platform(),j="—",k="—",l="CPU",m=[];try{let a=(0,i.execSync)("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits",{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim();if(a){let[b,c]=a.split("\n")[0].split(",");j=b.trim(),k=`${Math.round(Number(c)/1024)} GB`,l="CUDA",m.push("CUDA")}}catch{}if("CPU"===l&&"darwin"===h){l="Metal",m.push("Metal");let a="Apple Silicon";try{let b=(0,i.execFileSync)("sysctl",["-n","machdep.cpu.brand_string"],{timeout:3e3,stdio:["ignore","pipe","ignore"]}).toString().trim();b&&(a=b)}catch{/apple/i.test(b)&&(a=b)}j=/apple/i.test(a)?`${a} GPU`:"Apple GPU","arm64"===f().arch()&&(k=`${Math.max(1,Math.round(.7*d))} GB unified`)}m.push("arm64"===f().arch()?"NEON":"AVX2");let n="—";try{if("win32"===h){let a=((0,t.r$)()[0]||"C").toUpperCase(),b=/^[A-Z]$/.test(a)?a:"C",c=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${b}).Free`],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim(),d=Number(c.replace(/[^\d]/g,""));d>0&&(n=`${(d/0x40000000).toFixed(0)} GB`)}else{let a=(0,i.execFileSync)("df",["-h",(0,t.r$)()],{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),b=(a[a.length-1]??"").split(/\s+/);b[3]&&(n=b[3])}}catch{}return E={cpu:b,cores:c,ram:g,gpu:j,vram:k,diskFree:n,backend:l,accel:m,recommendedQuant:d>=32?"Q5_K_M":d>=16?"Q4_K_M":"Q4_0",maxParams:d>=64?"70B":d>=32?"34B":d>=16?"13B":"7B"}}async function G(){try{return(0,i.execSync)("ollama --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function H(a){let b=await G(),c=[];if("start"===a){if(!b)return{up:!1,installed:!1,log:["Ollama is not installed — get it at https://ollama.com, then retry."]};if((await K()).up)return{up:!0,installed:b,log:[`server already running on ${B}`]};try{let a=(0,i.spawn)("ollama",["serve"],{detached:!0,stdio:"ignore"}),d="";a.on("error",a=>{d=String(a instanceof Error?a.message:a)}),a.unref(),c.push("$ ollama serve"),await new Promise(a=>setTimeout(a,2e3));let e=(await K()).up;return d&&c.push("spawn failed: "+d),c.push(e?`✓ ready \xb7 ${B}`:"still stopped — the port may be busy; run `ollama serve` in a terminal to see the error."),(0,p.revalidatePath)("/models"),{up:e,installed:b,log:c}}catch(a){return{up:!1,installed:b,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM ollama.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f 'ollama serve'",{stdio:"ignore",timeout:4e3}),c.push("server stopped")}catch{c.push("no running ollama process found")}return(0,p.revalidatePath)("/models"),{up:!1,installed:b,log:c}}async function I(){try{let a=await fetch(`${B}/api/ps`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{running:[]};return{running:((await a.json()).models??[]).map(a=>({name:a.name,vram:a.size_vram??0}))}}catch{return{running:[]}}}async function J(a){try{let b=await fetch(`${B}/api/generate`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({model:a,prompt:"",keep_alive:"30m"}),signal:AbortSignal.timeout(12e4)});if(!b.ok)return{ok:!1,error:`Ollama ${b.status}`};return await b.json().catch(()=>({})),(0,p.revalidatePath)("/models"),{ok:!0}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running":a}}}async function K(){try{let a=await fetch(`${B}/api/tags`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{up:!1,models:[]};let b=await a.json();return{up:!0,models:(b.models??[]).map(a=>({name:a.name,size:a.size??0}))}}catch{return{up:!1,models:[]}}}async function L(a){let b=await K(),[c]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a),(0,o.eq)(r.provider.catalogId,"ollama"))),d={status:b.up?"connected":"needs_sync",modelCount:b.models.length,lastSync:b.up?new Date:null};c?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,c.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a,catalogId:"ollama",adapter:"local_ollama",kind:"local",auth:"local",syncStatus:"implemented",...d})}async function M(a){let{workspace:b}=await (0,s.nP)();if(!a.trim())return{ok:!1,error:"no model name"};try{let c=await fetch(`${B}/api/pull`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:a.trim(),stream:!1}),signal:AbortSignal.timeout(18e5)});if(!c.ok){let a=await c.text().catch(()=>"");return{ok:!1,error:`Ollama ${c.status}${a?": "+a.slice(0,120):""}`}}let d=await c.json().catch(()=>({}));return await L(b.id),(0,p.revalidatePath)("/models"),{ok:"success"===d.status||null==d.error,error:d.error}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running — start it, then retry.":a}}}async function N(a){let{workspace:b}=await (0,s.nP)();try{await fetch(`${B}/api/delete`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({name:a})})}catch{}return await L(b.id),(0,p.revalidatePath)("/models"),{ok:!0}}async function O(a){let{workspace:b}=await (0,s.nP)(),c=z.find(b=>b.id===a);if(!c)return{ok:!1,error:"unknown model"};let d=(0,l.join)((0,t.r$)(),"models");(0,h.mkdirSync)(d,{recursive:!0});let e=function(a){try{if("win32"===f().platform()){let b=(a[0]||"C").toUpperCase(),c=/^[A-Z]$/.test(b)?b:"C",d=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${c}).Free`],{timeout:6e3,stdio:["ignore","pipe","ignore"]}).toString().trim();return Number(d.replace(/[^\d]/g,""))||0}let b=(0,i.execFileSync)("df",["-k",a],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),c=(b[b.length-1]??"").split(/\s+/),d=Number(c[3]);return d?1024*d:0}catch{return 0}}(d);if(e&&c.sizeBytes&&e<1.1*c.sizeBytes)return{ok:!1,error:`not enough free space — need ~${(c.sizeBytes/1e9).toFixed(1)} GB, ${(e/1e9).toFixed(1)} GB free`};let j=c.url.split("/").pop()??`${c.id}.gguf`,k=(0,l.join)(d,j);w.$.set(a,{received:0,total:0,done:!1});try{if(!(0,h.existsSync)(k)){let b=await fetch(c.url,{signal:AbortSignal.timeout(36e5)});if(!b.ok||!b.body)return w.$.set(a,{received:0,total:0,done:!0,error:`download failed (${b.status})`}),{ok:!1,error:`download failed (${b.status})`};let d=Number(b.headers.get("content-length"))||c.sizeBytes||0,e=0;w.$.set(a,{received:0,total:d,done:!1});let f=new m.PassThrough;f.on("data",b=>{e+=b.length;let c=w.$.get(a);c&&(c.received=e)}),await (0,n.pipeline)(m.Readable.fromWeb(b.body),f,(0,h.createWriteStream)(k));let g=v(k,d);if(!g.ok){try{(0,h.rmSync)(k)}catch{}return w.$.set(a,{received:e,total:d,done:!0,error:g.message}),{ok:!1,error:g.message}}}if((w.$.set(a,{received:1,total:1,done:!0}),c.sha256)&&await new Promise((a,b)=>{let c=(0,g.createHash)("sha256");(0,h.createReadStream)(k).on("data",a=>c.update(a)).on("end",()=>a(c.digest("hex"))).on("error",b)})!==c.sha256)return{ok:!1,error:"SHA-256 mismatch — file corrupt"};let d=(0,h.statSync)(k).size,[e]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.file,k));return e||await q.db.insert(r.localModel).values({id:(0,g.randomUUID)(),workspaceId:b.id,name:c.name,file:k,quant:c.quant,params:c.params,sizeBytes:d,sha256:c.sha256??"",bind:"127.0.0.1:8082"}),/embed|nomic|bge|mxbai|gte/i.test(c.name)&&ac().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,path:k}}catch(d){let b=String(d instanceof Error?d.message:d),c=w.$.get(a);return w.$.set(a,{received:c?.received??0,total:c?.total??0,done:!0,error:b}),{ok:!1,error:b}}}async function P(a){return w.$.get(a)??null}async function Q(a){await (0,s.nP)();let[b]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(!b)return{ok:!1,error:"model not found"};try{b.file&&(0,h.existsSync)(b.file)&&(0,h.rmSync)(b.file,{force:!0})}catch{}return await q.db.delete(r.localModel).where((0,o.eq)(r.localModel.file,b.file)),(0,p.revalidatePath)("/models"),{ok:!0}}function R(){return(0,l.join)((0,t.r$)(),"bin","llama")}function S(){try{let a=(0,l.join)(R(),"INSTALLED");if(!(0,h.existsSync)(a))return null;let b=(0,h.readFileSync)(a,"utf8").trim();return b&&(0,h.existsSync)(b)?b:null}catch{return null}}async function T(a,b,c,d){let e=/\.(tar\.gz|tgz)$/i.test(b),f=(0,l.join)(c,b.replace(/[^\w.\-]+/g,"_"));(0,h.mkdirSync)(c,{recursive:!0});let g=await fetch(a,{signal:AbortSignal.timeout(18e5)});if(!g.ok||!g.body)return d&&w.$.set(d,{received:0,total:0,done:!0,error:`download failed (${g.status})`}),`download failed (${g.status})`;let j=Number(g.headers.get("content-length"))||0,o=m.Readable.fromWeb(g.body);if(d){let a=0;w.$.set(d,{received:0,total:j,done:!1});let b=new m.PassThrough;b.on("data",b=>{a+=b.length;let c=w.$.get(d);c&&(c.received=a)}),await (0,n.pipeline)(o,b,(0,h.createWriteStream)(f))}else await (0,n.pipeline)(o,(0,h.createWriteStream)(f));let p=v(f,j);if(!p.ok){try{(0,h.rmSync)(f)}catch{}return p.message}e?(0,i.execFileSync)("tar",["-xzf",f,"-C",c],{stdio:"ignore",timeout:12e4}):new(k())(f).extractAllTo(c,!0);try{(0,h.rmSync)(f)}catch{}return null}async function U(){try{let a=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!a.ok)return null;return(await a.json()).assets??[]}catch{return null}}let V=!1;async function W(a=!1){let b;if("win32"!==f().platform())return{ok:!0,fetched:!1};let c=R();try{b=(0,h.readdirSync)(c)}catch{return{ok:!1,fetched:!1,reason:"no llama dir"}}let d=b.some(a=>/^ggml-cuda\.dll$/i.test(a)),e=b.some(a=>/^cudart64_\d+\.dll$/i.test(a));if(!d||e)return{ok:e||!d,fetched:!1};if(V&&!a)return{ok:!1,fetched:!1,reason:"already attempted this run"};V=!0;let g="12";try{let a=(0,h.readFileSync)((0,l.join)(c,"ggml-cuda.dll")).toString("latin1").match(/cudart64_(\d+)\.dll/i);a&&(g=a[1])}catch{}let i=await U();if(!i)return{ok:!1,fetched:!1,reason:"GitHub unreachable"};let j=i.filter(a=>/cudart/i.test(a.name)&&/x64|amd64/i.test(a.name)),k=j.find(a=>RegExp(`cuda-${g}\\.`,"i").test(a.name))??j[0];if(!k)return{ok:!1,fetched:!1,reason:"no cudart asset in the latest release"};let m=await T(k.browser_download_url,k.name,c).catch(a=>String(a instanceof Error?a.message:a));if(m)return{ok:!1,fetched:!1,reason:m};let n=!1;try{n=(0,h.readdirSync)(c).some(a=>/^cudart64_\d+\.dll$/i.test(a))}catch{}return{ok:n,fetched:n}}async function X(){let a;await (0,s.nP)();let b=[];if(S()||await Y()){let a=await W(!0).catch(()=>null);return{ok:!0,installed:!0,log:["llama-server already installed.",...a?.fetched?["✓ fetched the CUDA runtime DLLs — GPU enabled."]:a&&!a.ok?[`⚠ CUDA runtime still missing (${a.reason??"unknown"}).`]:[]]}}let c=await F(),d=/cuda|nvidia/i.test(c.backend)||(c.accel??[]).some(a=>/cuda|nvidia/i.test(a));b.push(`platform ${f().platform()}/${f().arch()} \xb7 backend ${c.backend} → ${d?"CUDA":"CPU"} build`);try{let c=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,installed:!1,log:b,error:403===c.status?"GitHub API rate-limited — try again later or install manually from the releases page.":`GitHub releases API ${c.status}`};a=(await c.json()).assets??[]}catch(a){return{ok:!1,installed:!1,log:b,error:"couldn't reach GitHub: "+String(a instanceof Error?a.message:a)}}let e=function(a,b){let c=f().platform(),d="win32"===c?/win/i:"darwin"===c?/macos/i:/(ubuntu|linux)/i,e="arm64"===f().arch(),g=a.filter(a=>/\.(zip|tar\.gz|tgz)$/i.test(a.name)&&d.test(a.name));e||(g=g.filter(a=>!/arm64|aarch64/i.test(a.name)));let h=/cuda|hip|vulkan|sycl|kompute|musa|cann|adreno/i,i=a=>{if(!a.length)return null;let b=e?a.filter(a=>/arm64|aarch64/i.test(a.name)):a.filter(a=>/x64|amd64/i.test(a.name)),c=(b.length?b:a).sort((a,b)=>a.name.length-b.name.length)[0];return c?{name:c.name,url:c.browser_download_url}:null};if(b){let a=g.filter(a=>/cuda/i.test(a.name));if(a.length)return i(a)}let j=g.filter(a=>!h.test(a.name));return i(j.length?j:g)}(a,!!d);if(!e)return{ok:!1,installed:!1,log:b,error:"no matching prebuilt for this platform — install manually from the releases page."};b.push(`downloading ${e.name}…`);let g=R();(0,h.mkdirSync)(g,{recursive:!0}),w.$.set("llama-server",{received:0,total:0,done:!1});try{let a=await T(e.url,e.name,g,"llama-server");if(a)return w.$.set("llama-server",{received:0,total:0,done:!0,error:a}),{ok:!1,installed:!1,log:b,error:a};if(d){let a=await W(!0);b.push(a.ok?a.fetched?"✓ CUDA runtime DLLs installed — GPU enabled.":"CUDA runtime already present.":`⚠ CUDA runtime not installed (${a.reason??"unknown"}) — runs on CPU; retries on next Start/Install.`)}}catch(a){return{ok:!1,installed:!1,log:b,error:"download/extract failed: "+String(a instanceof Error?a.message:a)}}let i=function a(b,c,d){let e;if(d<0)return null;try{e=(0,h.readdirSync)(b,{withFileTypes:!0})}catch{return null}for(let a of e)if(a.isFile()&&a.name===c)return(0,l.join)(b,a.name);for(let f of e)if(f.isDirectory()){let e=a((0,l.join)(b,f.name),c,d-1);if(e)return e}return null}(g,"win32"===f().platform()?"llama-server.exe":"llama-server",5);if(!i)return{ok:!1,installed:!1,log:b,error:"downloaded, but llama-server wasn't found in the archive."};if("win32"!==f().platform())try{(0,h.chmodSync)(i,493)}catch{}return(0,h.writeFileSync)((0,l.join)(g,"INSTALLED"),i,"utf8"),w.$.set("llama-server",{received:1,total:1,done:!0}),b.push(`✓ installed → ${i}`),await ah().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,installed:!0,path:i,log:b}}async function Y(){if(S())return!0;try{return(0,i.execSync)("llama-server --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function Z(){try{let a=await fetch(`${C}/v1/models`,{signal:AbortSignal.timeout(2500)});if(!a.ok)return{up:!1,model:null};let b=await a.json(),c=b.data?.[0]?.id;return{up:!0,model:c?c.split(/[\\/]/).pop()??c:null}}catch{return{up:!1,model:null}}}async function $(a){try{var b;let c,d=await F();if(!/cuda|metal/i.test(d.backend))return[];let e=(b=d.vram,(c=/([\d.]+)\s*GB/i.exec(b||""))?1e9*parseFloat(c[1]):0);if(a&&e&&1.15*a>e)return[];return["-ngl","99"]}catch{return[]}}function _(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name}).from(r.localModel).all().find(a=>/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name}:null}catch{return null}}function aa(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name,sizeBytes:r.localModel.sizeBytes}).from(r.localModel).all().find(a=>!/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name,sizeBytes:a.sizeBytes}:null}catch{return null}}async function ab(){try{return(await fetch(`${D}/health`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function ac(){if(await ab())return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=_();if(!b)return{up:!1,reason:"no embedding model installed (download nomic-embed-text)"};try{await W().catch(()=>{});let c=await $(),d=(0,i.spawn)(a,["-m",b.file,"--embeddings","--host","127.0.0.1","--port","8083","-c","2048","--pooling","mean",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),await ab())return{up:!0,model:b.name};return{up:!1,reason:"embedding server didn't come up in time"}}async function ad(){if((await Z()).up)return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=aa();if(!b)return{up:!1,reason:"no chat GGUF installed"};try{await W().catch(()=>{});let c=await $(b.sizeBytes),d=(0,i.spawn)(a,["-m",b.file,"--host","127.0.0.1","--port","8082","-c","4096",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),(await Z()).up)return{up:!0,model:b.name};return{up:!1,reason:"llama server didn't come up in time"}}async function ae(){let a=_();return{up:await ab(),model:a?.name??null,installed:!!a}}async function af(){let a=await ac();return(0,p.revalidatePath)("/models"),a}async function ag(){let{org:a}=await (0,s.nP)();await ac().catch(()=>{});let b=await (0,u.xV)(a.id);return(0,p.revalidatePath)("/models"),b}async function ah(){let{workspace:a}=await (0,s.nP)(),b=await Z(),c=new Set((await q.db.select({file:r.localModel.file}).from(r.localModel)).map(a=>a.file)).size,d={status:b.up?"connected":"needs_sync",modelCount:c,lastSync:b.up?new Date:null},[e]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a.id),(0,o.eq)(r.provider.catalogId,"llamacpp")));return e?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,e.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a.id,catalogId:"llamacpp",adapter:"local_llamacpp",kind:"local",auth:"local",syncStatus:"implemented",...d}),(0,p.revalidatePath)("/models"),{ok:!0}}async function ai(a){let b;await (0,s.nP)();let c=await Y(),d=[];if(!c)return{up:!1,installed:!1,log:["llama-server not found — install llama.cpp from https://github.com/ggml-org/llama.cpp/releases (or `brew install llama.cpp`), then retry."]};if((await Z()).up)return{up:!0,installed:c,log:[`server already running on ${C}`]};let e=0;if(a){let d,[f]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(f&&(d=f.name,/embed|nomic|bge|mxbai|gte/i.test(d))){let a=await ac();return{up:a.up,installed:c,log:[`${f.name} is an EMBEDDING model — started the RAG embedding server on :8083 (it can't power chat on :8082).`,a.up?`✓ embeddings ready \xb7 ${D}`:`embeddings: ${a.reason??"failed to start"}`]}}b=f?.file,e=f?.sizeBytes??0}if(!b){let a=aa();b=a?.file,e=a?.sizeBytes??0}if(!b||!(0,h.existsSync)(b)){let a=_();if(a){let b=await ac();return{up:!1,installed:c,log:[`Your only local model (${a.name}) is an EMBEDDING model — it powers RAG on the embeddings server (${D}), not the chat server.`,b.up?"✓ embeddings server is running.":`embeddings: ${b.reason??"not started"}`,"Download a chat/instruct GGUF (e.g. Qwen, Llama) below to run the chat server on :8082."]}}return{up:!1,installed:c,log:["no GGUF model on disk — download one below first."]}}try{let a=S()??"llama-server";await W().catch(()=>{});let f=await $(e),g=(0,i.spawn)(a,["-m",b,"--host","127.0.0.1","--port","8082","-c","4096",...f],{detached:!0,stdio:"ignore"}),h="";g.on("error",a=>{h=String(a instanceof Error?a.message:a)}),g.unref(),d.push(`$ llama-server -m ${b.split(/[\\/]/).pop()} --port 8082${f.length?" -ngl 99 (GPU)":" (CPU)"}`);let j=!1;for(let a=0;a<12&&!j;a++)await new Promise(a=>setTimeout(a,1e3)),j=(await Z()).up;return h&&d.push("spawn failed: "+h),d.push(j?`✓ ready \xb7 ${C}`:"still starting — large models take longer; run llama-server in a terminal to see progress."),await ah(),(0,p.revalidatePath)("/models"),{up:j,installed:c,log:d}}catch(a){return{up:!1,installed:c,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}async function aj(){let a=await Y(),b=[];try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM llama-server.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f llama-server",{stdio:"ignore",timeout:4e3}),b.push("server stopped")}catch{b.push("no running llama-server process found")}return await ah(),(0,p.revalidatePath)("/models"),{up:!1,installed:a,log:b}}(0,A.D)([F,G,H,I,J,K,M,N,O,P,Q,X,Y,Z,ab,ac,ad,ae,af,ag,ah,ai,aj]),(0,d.A)(F,"002b23243d909b052f058eef370008e6ac191cb67c",null),(0,d.A)(G,"00712c870a25286e9ca69b4d8a077001e10ed38a44",null),(0,d.A)(H,"40a0f462b5c8f8797fff47108383f452a8dde1d4c5",null),(0,d.A)(I,"004abaa9cb248486b384459963ded9e6daa85d9acd",null),(0,d.A)(J,"40cc3938ec97ed589bd41ea22e6ea789dbd451693c",null),(0,d.A)(K,"008e182009da5a09f9e64cd9b87db6a2c8df4074a1",null),(0,d.A)(M,"40f4ef6ab0dc6a852c2184ca12f9a0aabddf636882",null),(0,d.A)(N,"40d49ce16e903eadd8af61e3f2c8ab269d0c1f3ece",null),(0,d.A)(O,"40a402e987f006d54c979322842b9d986a354863cd",null),(0,d.A)(P,"40fc7cb69a95583ca5eeeb98ca6f022c7bc87ec6d6",null),(0,d.A)(Q,"40536f2214bccc059b732ba48594e454baaa9b18d8",null),(0,d.A)(X,"002b2f946074813af241278856bc2a9631c6e738f4",null),(0,d.A)(Y,"0062afce3864c836ae5fb7bcc056c4e225a2b61809",null),(0,d.A)(Z,"005ea0a651313c53ddab6d0c74dd2dd94fdfb2c109",null),(0,d.A)(ab,"00e8ea103cc50f72242c40a48ba783b9bbde49b4cf",null),(0,d.A)(ac,"008d1ddd07427a26d8fbc2aa278b87aac8b07a8d1e",null),(0,d.A)(ad,"00e49e9385b91de00eeccc8fb8a152a0d0dfef79f7",null),(0,d.A)(ae,"001e76cec59a1e8dd669f1ca8463d3f47a618aa803",null),(0,d.A)(af,"0040789e81b7f4c5badcbd79723e48c23db549d982",null),(0,d.A)(ag,"00cf127c3ef99891a306c64721a5de2d06cad6f439",null),(0,d.A)(ah,"00bb1207c0a8b8048b2330ee1ad232a5e11accbe8f",null),(0,d.A)(ai,"408478624c9bf2a6cfc301804689e59642370024f1",null),(0,d.A)(aj,"0003e476ac4ec5fb77c9a9aa1f1ca5046bc8d1cd56",null)}};
1
+ "use strict";exports.id=7989,exports.ids=[7989],exports.modules={18185:(a,b,c)=>{c.d(b,{$:()=>d});let d=new Map},27989:(a,b,c)=>{c.d(b,{V$:()=>ah,Uw:()=>F,wp:()=>O,Jw:()=>X,Cp:()=>P,S8:()=>ab,kb:()=>ae,Hi:()=>ac,Vr:()=>ad,nl:()=>Y,LU:()=>Z,cm:()=>J,VH:()=>K,zO:()=>G,Gh:()=>I,I2:()=>H,ju:()=>M,Ac:()=>ag,m:()=>Q,az:()=>N,ts:()=>af,L0:()=>ai,lC:()=>aj});var d=c(52813),e=c(48161),f=c.n(e),g=c(77598),h=c(73024),i=c(31421),j=c(54679),k=c.n(j),l=c(76760),m=c(57075),n=c(46466),o=c(1782),p=c(83550),q=c(80280),r=c(25533),s=c(95896),t=c(18612),u=c(64619);function v(a,b,c=.02){let d=0;try{d=(0,h.statSync)(a).size}catch{return{ok:!1,actual:0,expected:b,message:"file missing after download"}}if(!b||b<=0)return{ok:!0,actual:d,expected:b,message:"size ok (no expected size)"};let e=d/b,f=e>=1-c&&e<=1+c;return{ok:f,actual:d,expected:b,message:f?"size verified":`size mismatch — got ${d} bytes, expected ~${b} (truncated/corrupt)`}}var w=c(18185);let x=[{repo:"Qwen2.5-0.5B-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen2.5-1.5B-Instruct",paramsB:1.5,kind:"chat"},{repo:"Qwen2.5-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Qwen2.5-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2.5-14B-Instruct",paramsB:14,kind:"chat"},{repo:"Qwen2.5-32B-Instruct",paramsB:32,kind:"chat"},{repo:"Qwen2.5-72B-Instruct",paramsB:72,kind:"chat"},{repo:"Qwen2.5-Coder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"Qwen2.5-Coder-3B-Instruct",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-7B-Instruct",paramsB:7,kind:"code"},{repo:"Qwen2.5-Coder-14B-Instruct",paramsB:14,kind:"code"},{repo:"Qwen2.5-Coder-32B-Instruct",paramsB:32,kind:"code"},{repo:"Qwen3-0.6B",paramsB:.6,kind:"chat"},{repo:"Qwen3-1.7B",paramsB:1.7,kind:"chat"},{repo:"Qwen3-4B",paramsB:4,kind:"chat"},{repo:"Qwen3-8B",paramsB:8,kind:"chat"},{repo:"Qwen3-14B",paramsB:14,kind:"chat"},{repo:"Qwen3-32B",paramsB:32,kind:"chat"},{repo:"Llama-3.2-1B-Instruct",paramsB:1,kind:"chat"},{repo:"Llama-3.2-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Meta-Llama-3.1-8B-Instruct",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3.1-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama-3.3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"gemma-2-2b-it",paramsB:2,kind:"chat"},{repo:"gemma-2-9b-it",paramsB:9,kind:"chat"},{repo:"gemma-2-27b-it",paramsB:27,kind:"chat"},{repo:"gemma-3-1b-it",paramsB:1,kind:"chat"},{repo:"gemma-3-4b-it",paramsB:4,kind:"chat"},{repo:"gemma-3-12b-it",paramsB:12,kind:"chat"},{repo:"gemma-3-27b-it",paramsB:27,kind:"chat"},{repo:"Mistral-7B-Instruct-v0.3",paramsB:7,kind:"chat"},{repo:"Mistral-Nemo-Instruct-2407",paramsB:12,kind:"chat"},{repo:"Mistral-Small-Instruct-2409",paramsB:22,kind:"chat"},{repo:"Mistral-Small-24B-Instruct-2501",paramsB:24,kind:"chat"},{repo:"Codestral-22B-v0.1",paramsB:22,kind:"code"},{repo:"Phi-3.1-mini-4k-instruct",paramsB:3.8,kind:"chat"},{repo:"DeepSeek-R1-Distill-Qwen-1.5B",paramsB:1.5,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-7B",paramsB:7,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-14B",paramsB:14,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-32B",paramsB:32,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-Coder-V2-Lite-Instruct",paramsB:16,kind:"code"},{repo:"Yi-1.5-9B-Chat",paramsB:9,kind:"chat"},{repo:"Yi-1.5-34B-Chat",paramsB:34,kind:"chat"},{repo:"granite-3.0-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-3.1-8b-instruct",paramsB:8,kind:"chat"},{repo:"SmolLM2-360M-Instruct",paramsB:.36,kind:"chat"},{repo:"SmolLM2-1.7B-Instruct",paramsB:1.7,kind:"chat"},{repo:"aya-expanse-8b",paramsB:8,kind:"chat"},{repo:"aya-expanse-32b",paramsB:32,kind:"chat"},{repo:"Falcon3-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Falcon3-10B-Instruct",paramsB:10,kind:"chat"},{repo:"EXAONE-3.5-2.4B-Instruct",paramsB:2.4,kind:"chat"},{repo:"EXAONE-3.5-7.8B-Instruct",paramsB:7.8,kind:"chat"},{repo:"Qwen3.5-0.8B",paramsB:.8,kind:"chat"},{repo:"Qwen3.5-2B",paramsB:2,kind:"chat"},{repo:"Qwen3.5-9B",paramsB:9,kind:"chat"},{repo:"Qwen3.5-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.5-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3.6-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.6-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3-30B-A3B",paramsB:30,kind:"chat"},{repo:"Qwen3-30B-A3B-Instruct-2507",paramsB:30,kind:"chat"},{repo:"Qwen3-Next-80B-A3B-Instruct",paramsB:80,kind:"chat"},{repo:"Qwen3-4B-Thinking-2507",paramsB:4,kind:"reasoning"},{repo:"QwQ-32B",paramsB:32,kind:"reasoning"},{repo:"Qwen2.5-7B-Instruct-1M",paramsB:7,kind:"chat"},{repo:"Qwen2.5-Coder-0.5B-Instruct",paramsB:.5,kind:"code"},{repo:"Qwen2.5-Coder-3B",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-32B",paramsB:32,kind:"code"},{repo:"Qwen2.5-Math-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2-500M-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen1.5-32B-Chat",paramsB:32,kind:"chat"},{repo:"gemma-4-E2B-it",paramsB:2,kind:"chat"},{repo:"gemma-4-E4B-it",paramsB:4,kind:"chat"},{repo:"gemma-4-12B-it",paramsB:12,kind:"chat"},{repo:"gemma-4-26B-A4B-it",paramsB:26,kind:"chat"},{repo:"gemma-4-31B-it",paramsB:31,kind:"chat"},{repo:"gemma-3-270m-it",paramsB:.27,kind:"chat"},{repo:"gemma-1.1-2b-it",paramsB:2,kind:"chat"},{repo:"codegemma-2b",paramsB:2,kind:"code"},{repo:"codegemma-7b",paramsB:7,kind:"code"},{repo:"codegemma-7b-it",paramsB:7,kind:"code"},{repo:"codegemma-1.1-7b-it",paramsB:7,kind:"code"},{repo:"Ministral-3-3B-Instruct-2512",paramsB:3,kind:"chat"},{repo:"Ministral-3-8B-Instruct-2512",paramsB:8,kind:"chat"},{repo:"Ministral-3-14B-Instruct-2512",paramsB:14,kind:"chat"},{repo:"Ministral-3-3B-Reasoning-2512",paramsB:3,kind:"reasoning"},{repo:"Ministral-3-8B-Reasoning-2512",paramsB:8,kind:"reasoning"},{repo:"Ministral-3-14B-Reasoning-2512",paramsB:14,kind:"reasoning"},{repo:"Mistral-Small-3.1-24B-Instruct-2503",paramsB:24,kind:"chat"},{repo:"Mistral-Small-3.2-24B-Instruct-2506",paramsB:24,kind:"chat"},{repo:"Devstral-Small-2-24B-Instruct-2512",paramsB:24,kind:"code"},{repo:"mathstral-7B-v0.1",paramsB:7,kind:"chat"},{repo:"dolphin-2.8-mistral-7b-v02",paramsB:7,kind:"chat"},{repo:"WizardLM-2-7B",paramsB:7,kind:"chat"},{repo:"DeepSeek-R1-0528-Qwen3-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-70B",paramsB:70,kind:"reasoning"},{repo:"deepseek-coder-1.3B-kexer",paramsB:1.3,kind:"code"},{repo:"deepseek-coder-6.7B-kexer",paramsB:6.7,kind:"code"},{repo:"granite-3.2-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-4.1-3b",paramsB:3,kind:"chat"},{repo:"granite-4.1-8b",paramsB:8,kind:"chat"},{repo:"granite-4.1-30b",paramsB:30,kind:"chat"},{repo:"Olmo-3-32B-Think",paramsB:32,kind:"reasoning"},{repo:"Seed-OSS-36B-Instruct",paramsB:36,kind:"chat"},{repo:"ERNIE-4.5-21B-A3B-PT",paramsB:21,kind:"chat"},{repo:"LFM2-24B-A2B",paramsB:24,kind:"chat"},{repo:"LFM2.5-1.2B-Instruct",paramsB:1.2,kind:"chat"},{repo:"LFM2.5-1.2B-Thinking",paramsB:1.2,kind:"reasoning"},{repo:"NVIDIA-Nemotron-3-Nano-4B",paramsB:4,kind:"chat"},{repo:"Hermes-4-70B",paramsB:70,kind:"chat"},{repo:"Llama-3.1-Tulu-3-8B",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama3-ChatQA-1.5-70B",paramsB:70,kind:"chat"},{repo:"Llama-3-Groq-8B-Tool-Use",paramsB:8,kind:"chat"},{repo:"aya-23-8B",paramsB:8,kind:"chat"},{repo:"aya-23-35B",paramsB:35,kind:"chat"},{repo:"SmolLM2-135M-Instruct",paramsB:.135,kind:"chat"},{repo:"Yi-Coder-1.5B",paramsB:1.5,kind:"code"},{repo:"Yi-Coder-9B-Chat",paramsB:9,kind:"code"},{repo:"OpenCoder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"stable-code-instruct-3b",paramsB:3,kind:"code"},{repo:"internlm2-math-plus-7b",paramsB:7,kind:"chat"},{repo:"internlm2-math-plus-20b",paramsB:20,kind:"chat"}],y={Q3_K_L:.55,Q4_K_M:.67,Q6_K:.9,Q8_0:1.13},z=[{id:"nomic-embed-q8",name:"nomic-embed-text-v1.5 (Q8_0)",url:"https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q8_0.gguf",params:"137M",quant:"Q8_0",sizeBytes:146e6,kind:"embed",paramsB:.137},...function(){let a=[];for(let d of x){var b,c;let e=d.vendor??"lmstudio-community";for(let f of(b=d.paramsB)<=9?["Q3_K_L","Q4_K_M","Q6_K","Q8_0"]:b<=34?["Q3_K_L","Q4_K_M","Q6_K"]:["Q3_K_L","Q4_K_M"]){let b=`${d.repo}-${f}.gguf`;a.push({id:`${d.repo}-${f}`.toLowerCase().replace(/[^a-z0-9]+/g,"-"),name:`${d.repo} (${f})`,url:`https://huggingface.co/${e}/${d.repo}-GGUF/resolve/main/${b}`,params:(c=d.paramsB)<1?`${Math.round(1e3*c)}M`:`${c}B`,quant:f,sizeBytes:Math.round(1e9*d.paramsB*y[f]),kind:d.kind,paramsB:d.paramsB})}}return a}()];var A=c(29635);let B=process.env.OLLAMA_URL??"http://127.0.0.1:11434",C=process.env.LLAMACPP_URL??"http://127.0.0.1:8082",D=process.env.CONSTELLA_EMBED_URL??"http://127.0.0.1:8083",E=null;async function F(){if(E){let a=f().totalmem()/0x40000000,b=f().freemem()/0x40000000;return{...E,ram:`${a.toFixed(0)} GB \xb7 ${b.toFixed(1)} free`}}let a=f().cpus(),b=(a[0]?.model??"Unknown CPU").replace(/\s+/g," ").trim(),c=a.length,d=f().totalmem()/0x40000000,e=f().freemem()/0x40000000,g=`${d.toFixed(0)} GB \xb7 ${e.toFixed(1)} free`,h=f().platform(),j="—",k="—",l="CPU",m=[];try{let a=(0,i.execSync)("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits",{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim();if(a){let[b,c]=a.split("\n")[0].split(",");j=b.trim(),k=`${Math.round(Number(c)/1024)} GB`,l="CUDA",m.push("CUDA")}}catch{}if("CPU"===l&&"darwin"===h){l="Metal",m.push("Metal");let a="Apple Silicon";try{let b=(0,i.execFileSync)("sysctl",["-n","machdep.cpu.brand_string"],{timeout:3e3,stdio:["ignore","pipe","ignore"]}).toString().trim();b&&(a=b)}catch{/apple/i.test(b)&&(a=b)}j=/apple/i.test(a)?`${a} GPU`:"Apple GPU","arm64"===f().arch()&&(k=`${Math.max(1,Math.round(.7*d))} GB unified`)}m.push("arm64"===f().arch()?"NEON":"AVX2");let n="—";try{if("win32"===h){let a=((0,t.r$)()[0]||"C").toUpperCase(),b=/^[A-Z]$/.test(a)?a:"C",c=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${b}).Free`],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim(),d=Number(c.replace(/[^\d]/g,""));d>0&&(n=`${(d/0x40000000).toFixed(0)} GB`)}else{let a=(0,i.execFileSync)("df",["-h",(0,t.r$)()],{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),b=(a[a.length-1]??"").split(/\s+/);b[3]&&(n=b[3])}}catch{}return E={cpu:b,cores:c,ram:g,gpu:j,vram:k,diskFree:n,backend:l,accel:m,recommendedQuant:d>=32?"Q5_K_M":d>=16?"Q4_K_M":"Q4_0",maxParams:d>=64?"70B":d>=32?"34B":d>=16?"13B":"7B"}}async function G(){try{return(0,i.execSync)("ollama --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function H(a){let b=await G(),c=[];if("start"===a){if(!b)return{up:!1,installed:!1,log:["Ollama is not installed — get it at https://ollama.com, then retry."]};if((await K()).up)return{up:!0,installed:b,log:[`server already running on ${B}`]};try{let a=(0,i.spawn)("ollama",["serve"],{detached:!0,stdio:"ignore"}),d="";a.on("error",a=>{d=String(a instanceof Error?a.message:a)}),a.unref(),c.push("$ ollama serve"),await new Promise(a=>setTimeout(a,2e3));let e=(await K()).up;return d&&c.push("spawn failed: "+d),c.push(e?`✓ ready \xb7 ${B}`:"still stopped — the port may be busy; run `ollama serve` in a terminal to see the error."),(0,p.revalidatePath)("/models"),{up:e,installed:b,log:c}}catch(a){return{up:!1,installed:b,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM ollama.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f 'ollama serve'",{stdio:"ignore",timeout:4e3}),c.push("server stopped")}catch{c.push("no running ollama process found")}return(0,p.revalidatePath)("/models"),{up:!1,installed:b,log:c}}async function I(){try{let a=await fetch(`${B}/api/ps`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{running:[]};return{running:((await a.json()).models??[]).map(a=>({name:a.name,vram:a.size_vram??0}))}}catch{return{running:[]}}}async function J(a){try{let b=await fetch(`${B}/api/generate`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({model:a,prompt:"",keep_alive:"30m"}),signal:AbortSignal.timeout(12e4)});if(!b.ok)return{ok:!1,error:`Ollama ${b.status}`};return await b.json().catch(()=>({})),(0,p.revalidatePath)("/models"),{ok:!0}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running":a}}}async function K(){try{let a=await fetch(`${B}/api/tags`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{up:!1,models:[]};let b=await a.json();return{up:!0,models:(b.models??[]).map(a=>({name:a.name,size:a.size??0}))}}catch{return{up:!1,models:[]}}}async function L(a){let b=await K(),[c]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a),(0,o.eq)(r.provider.catalogId,"ollama"))),d={status:b.up?"connected":"needs_sync",modelCount:b.models.length,lastSync:b.up?new Date:null};c?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,c.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a,catalogId:"ollama",adapter:"local_ollama",kind:"local",auth:"local",syncStatus:"implemented",...d})}async function M(a){let{workspace:b}=await (0,s.nP)();if(!a.trim())return{ok:!1,error:"no model name"};try{let c=await fetch(`${B}/api/pull`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:a.trim(),stream:!1}),signal:AbortSignal.timeout(18e5)});if(!c.ok){let a=await c.text().catch(()=>"");return{ok:!1,error:`Ollama ${c.status}${a?": "+a.slice(0,120):""}`}}let d=await c.json().catch(()=>({}));return await L(b.id),(0,p.revalidatePath)("/models"),{ok:"success"===d.status||null==d.error,error:d.error}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running — start it, then retry.":a}}}async function N(a){let{workspace:b}=await (0,s.nP)();try{await fetch(`${B}/api/delete`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({name:a})})}catch{}return await L(b.id),(0,p.revalidatePath)("/models"),{ok:!0}}async function O(a){let{workspace:b}=await (0,s.nP)(),c=z.find(b=>b.id===a);if(!c)return{ok:!1,error:"unknown model"};let d=(0,l.join)((0,t.r$)(),"models");(0,h.mkdirSync)(d,{recursive:!0});let e=function(a){try{if("win32"===f().platform()){let b=(a[0]||"C").toUpperCase(),c=/^[A-Z]$/.test(b)?b:"C",d=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${c}).Free`],{timeout:6e3,stdio:["ignore","pipe","ignore"]}).toString().trim();return Number(d.replace(/[^\d]/g,""))||0}let b=(0,i.execFileSync)("df",["-k",a],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),c=(b[b.length-1]??"").split(/\s+/),d=Number(c[3]);return d?1024*d:0}catch{return 0}}(d);if(e&&c.sizeBytes&&e<1.1*c.sizeBytes)return{ok:!1,error:`not enough free space — need ~${(c.sizeBytes/1e9).toFixed(1)} GB, ${(e/1e9).toFixed(1)} GB free`};let j=c.url.split("/").pop()??`${c.id}.gguf`,k=(0,l.join)(d,j);w.$.set(a,{received:0,total:0,done:!1});try{if(!(0,h.existsSync)(k)){let b=await fetch(c.url,{signal:AbortSignal.timeout(36e5)});if(!b.ok||!b.body)return w.$.set(a,{received:0,total:0,done:!0,error:`download failed (${b.status})`}),{ok:!1,error:`download failed (${b.status})`};let d=Number(b.headers.get("content-length"))||c.sizeBytes||0,e=0;w.$.set(a,{received:0,total:d,done:!1});let f=new m.PassThrough;f.on("data",b=>{e+=b.length;let c=w.$.get(a);c&&(c.received=e)}),await (0,n.pipeline)(m.Readable.fromWeb(b.body),f,(0,h.createWriteStream)(k));let g=v(k,d);if(!g.ok){try{(0,h.rmSync)(k)}catch{}return w.$.set(a,{received:e,total:d,done:!0,error:g.message}),{ok:!1,error:g.message}}}if((w.$.set(a,{received:1,total:1,done:!0}),c.sha256)&&await new Promise((a,b)=>{let c=(0,g.createHash)("sha256");(0,h.createReadStream)(k).on("data",a=>c.update(a)).on("end",()=>a(c.digest("hex"))).on("error",b)})!==c.sha256)return{ok:!1,error:"SHA-256 mismatch — file corrupt"};let d=(0,h.statSync)(k).size,[e]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.file,k));return e||await q.db.insert(r.localModel).values({id:(0,g.randomUUID)(),workspaceId:b.id,name:c.name,file:k,quant:c.quant,params:c.params,sizeBytes:d,sha256:c.sha256??"",bind:"127.0.0.1:8082"}),/embed|nomic|bge|mxbai|gte/i.test(c.name)&&ac().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,path:k}}catch(d){let b=String(d instanceof Error?d.message:d),c=w.$.get(a);return w.$.set(a,{received:c?.received??0,total:c?.total??0,done:!0,error:b}),{ok:!1,error:b}}}async function P(a){return w.$.get(a)??null}async function Q(a){await (0,s.nP)();let[b]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(!b)return{ok:!1,error:"model not found"};try{b.file&&(0,h.existsSync)(b.file)&&(0,h.rmSync)(b.file,{force:!0})}catch{}return await q.db.delete(r.localModel).where((0,o.eq)(r.localModel.file,b.file)),(0,p.revalidatePath)("/models"),{ok:!0}}function R(){return(0,l.join)((0,t.r$)(),"bin","llama")}function S(){try{let a=(0,l.join)(R(),"INSTALLED");if(!(0,h.existsSync)(a))return null;let b=(0,h.readFileSync)(a,"utf8").trim();return b&&(0,h.existsSync)(b)?b:null}catch{return null}}async function T(a,b,c,d){let e=/\.(tar\.gz|tgz)$/i.test(b),f=(0,l.join)(c,b.replace(/[^\w.\-]+/g,"_"));(0,h.mkdirSync)(c,{recursive:!0});let g=await fetch(a,{signal:AbortSignal.timeout(18e5)});if(!g.ok||!g.body)return d&&w.$.set(d,{received:0,total:0,done:!0,error:`download failed (${g.status})`}),`download failed (${g.status})`;let j=Number(g.headers.get("content-length"))||0,o=m.Readable.fromWeb(g.body);if(d){let a=0;w.$.set(d,{received:0,total:j,done:!1});let b=new m.PassThrough;b.on("data",b=>{a+=b.length;let c=w.$.get(d);c&&(c.received=a)}),await (0,n.pipeline)(o,b,(0,h.createWriteStream)(f))}else await (0,n.pipeline)(o,(0,h.createWriteStream)(f));let p=v(f,j);if(!p.ok){try{(0,h.rmSync)(f)}catch{}return p.message}e?(0,i.execFileSync)("tar",["-xzf",f,"-C",c],{stdio:"ignore",timeout:12e4}):new(k())(f).extractAllTo(c,!0);try{(0,h.rmSync)(f)}catch{}return null}async function U(){try{let a=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!a.ok)return null;return(await a.json()).assets??[]}catch{return null}}let V=!1;async function W(a=!1){let b;if("win32"!==f().platform())return{ok:!0,fetched:!1};let c=R();try{b=(0,h.readdirSync)(c)}catch{return{ok:!1,fetched:!1,reason:"no llama dir"}}let d=b.some(a=>/^ggml-cuda\.dll$/i.test(a)),e=b.some(a=>/^cudart64_\d+\.dll$/i.test(a));if(!d||e)return{ok:e||!d,fetched:!1};if(V&&!a)return{ok:!1,fetched:!1,reason:"already attempted this run"};V=!0;let g="12";try{let a=(0,h.readFileSync)((0,l.join)(c,"ggml-cuda.dll")).toString("latin1").match(/cudart64_(\d+)\.dll/i);a&&(g=a[1])}catch{}let i=await U();if(!i)return{ok:!1,fetched:!1,reason:"GitHub unreachable"};let j=i.filter(a=>/cudart/i.test(a.name)&&/x64|amd64/i.test(a.name)),k=j.find(a=>RegExp(`cuda-${g}\\.`,"i").test(a.name))??j[0];if(!k)return{ok:!1,fetched:!1,reason:"no cudart asset in the latest release"};let m=await T(k.browser_download_url,k.name,c).catch(a=>String(a instanceof Error?a.message:a));if(m)return{ok:!1,fetched:!1,reason:m};let n=!1;try{n=(0,h.readdirSync)(c).some(a=>/^cudart64_\d+\.dll$/i.test(a))}catch{}return{ok:n,fetched:n}}async function X(){let a;await (0,s.nP)();let b=[];if(S()||await Y()){let a=await W(!0).catch(()=>null);return{ok:!0,installed:!0,log:["llama-server already installed.",...a?.fetched?["✓ fetched the CUDA runtime DLLs — GPU enabled."]:a&&!a.ok?[`⚠ CUDA runtime still missing (${a.reason??"unknown"}).`]:[]]}}let c=await F(),d=/cuda|nvidia/i.test(c.backend)||(c.accel??[]).some(a=>/cuda|nvidia/i.test(a));b.push(`platform ${f().platform()}/${f().arch()} \xb7 backend ${c.backend} → ${d?"CUDA":"CPU"} build`);try{let c=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,installed:!1,log:b,error:403===c.status?"GitHub API rate-limited — try again later or install manually from the releases page.":`GitHub releases API ${c.status}`};a=(await c.json()).assets??[]}catch(a){return{ok:!1,installed:!1,log:b,error:"couldn't reach GitHub: "+String(a instanceof Error?a.message:a)}}let e=function(a,b){let c=f().platform(),d="win32"===c?/win/i:"darwin"===c?/macos/i:/(ubuntu|linux)/i,e="arm64"===f().arch(),g=a.filter(a=>/\.(zip|tar\.gz|tgz)$/i.test(a.name)&&d.test(a.name));e||(g=g.filter(a=>!/arm64|aarch64/i.test(a.name)));let h=/cuda|hip|vulkan|sycl|kompute|musa|cann|adreno/i,i=a=>{if(!a.length)return null;let b=e?a.filter(a=>/arm64|aarch64/i.test(a.name)):a.filter(a=>/x64|amd64/i.test(a.name)),c=(b.length?b:a).sort((a,b)=>a.name.length-b.name.length)[0];return c?{name:c.name,url:c.browser_download_url}:null};if(b){let a=g.filter(a=>/cuda/i.test(a.name));if(a.length)return i(a)}let j=g.filter(a=>!h.test(a.name));return i(j.length?j:g)}(a,!!d);if(!e)return{ok:!1,installed:!1,log:b,error:"no matching prebuilt for this platform — install manually from the releases page."};b.push(`downloading ${e.name}…`);let g=R();(0,h.mkdirSync)(g,{recursive:!0}),w.$.set("llama-server",{received:0,total:0,done:!1});try{let a=await T(e.url,e.name,g,"llama-server");if(a)return w.$.set("llama-server",{received:0,total:0,done:!0,error:a}),{ok:!1,installed:!1,log:b,error:a};if(d){let a=await W(!0);b.push(a.ok?a.fetched?"✓ CUDA runtime DLLs installed — GPU enabled.":"CUDA runtime already present.":`⚠ CUDA runtime not installed (${a.reason??"unknown"}) — runs on CPU; retries on next Start/Install.`)}}catch(a){return{ok:!1,installed:!1,log:b,error:"download/extract failed: "+String(a instanceof Error?a.message:a)}}let i=function a(b,c,d){let e;if(d<0)return null;try{e=(0,h.readdirSync)(b,{withFileTypes:!0})}catch{return null}for(let a of e)if(a.isFile()&&a.name===c)return(0,l.join)(b,a.name);for(let f of e)if(f.isDirectory()){let e=a((0,l.join)(b,f.name),c,d-1);if(e)return e}return null}(g,"win32"===f().platform()?"llama-server.exe":"llama-server",5);if(!i)return{ok:!1,installed:!1,log:b,error:"downloaded, but llama-server wasn't found in the archive."};if("win32"!==f().platform())try{(0,h.chmodSync)(i,493)}catch{}return(0,h.writeFileSync)((0,l.join)(g,"INSTALLED"),i,"utf8"),w.$.set("llama-server",{received:1,total:1,done:!0}),b.push(`✓ installed → ${i}`),await ah().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,installed:!0,path:i,log:b}}async function Y(){if(S())return!0;try{return(0,i.execSync)("llama-server --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function Z(){try{let a=await fetch(`${C}/v1/models`,{signal:AbortSignal.timeout(2500)});if(!a.ok)return{up:!1,model:null};let b=await a.json(),c=b.data?.[0]?.id;return{up:!0,model:c?c.split(/[\\/]/).pop()??c:null}}catch{return{up:!1,model:null}}}async function $(a){try{var b;let c,d=await F();if(!/cuda|metal/i.test(d.backend))return[];let e=(b=d.vram,(c=/([\d.]+)\s*GB/i.exec(b||""))?1e9*parseFloat(c[1]):0);if(a&&e&&1.15*a>e)return[];return["-ngl","99"]}catch{return[]}}function _(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name}).from(r.localModel).all().find(a=>/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name}:null}catch{return null}}function aa(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name,sizeBytes:r.localModel.sizeBytes}).from(r.localModel).all().find(a=>!/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name,sizeBytes:a.sizeBytes}:null}catch{return null}}async function ab(){try{return(await fetch(`${D}/health`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function ac(){if(await ab())return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=_();if(!b)return{up:!1,reason:"no embedding model installed (download nomic-embed-text)"};try{await W().catch(()=>{});let c=await $(),d=(0,i.spawn)(a,["-m",b.file,"--embeddings","--host","127.0.0.1","--port","8083","-c","2048","--pooling","mean",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),await ab())return{up:!0,model:b.name};return{up:!1,reason:"embedding server didn't come up in time"}}async function ad(){if((await Z()).up)return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=aa();if(!b)return{up:!1,reason:"no chat GGUF installed"};try{await W().catch(()=>{});let c=await $(b.sizeBytes),d=(0,i.spawn)(a,["-m",b.file,"--host","127.0.0.1","--port","8082","-c","4096",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),(await Z()).up)return{up:!0,model:b.name};return{up:!1,reason:"llama server didn't come up in time"}}async function ae(){let a=_();return{up:await ab(),model:a?.name??null,installed:!!a}}async function af(){let a=await ac();return(0,p.revalidatePath)("/models"),a}async function ag(){let{org:a}=await (0,s.nP)();await ac().catch(()=>{});let b=await (0,u.xV)(a.id);return(0,p.revalidatePath)("/models"),b}async function ah(){let{workspace:a}=await (0,s.nP)(),b=await Z(),c=new Set((await q.db.select({file:r.localModel.file}).from(r.localModel)).map(a=>a.file)).size,d={status:b.up?"connected":"needs_sync",modelCount:c,lastSync:b.up?new Date:null},[e]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a.id),(0,o.eq)(r.provider.catalogId,"llamacpp")));return e?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,e.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a.id,catalogId:"llamacpp",adapter:"local_llamacpp",kind:"local",auth:"local",syncStatus:"implemented",...d}),(0,p.revalidatePath)("/models"),{ok:!0}}async function ai(a){let b;await (0,s.nP)();let c=await Y(),d=[];if(!c)return{up:!1,installed:!1,log:["llama-server not found — install llama.cpp from https://github.com/ggml-org/llama.cpp/releases (or `brew install llama.cpp`), then retry."]};if((await Z()).up)return{up:!0,installed:c,log:[`server already running on ${C}`]};let e=0;if(a){let d,[f]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(f&&(d=f.name,/embed|nomic|bge|mxbai|gte/i.test(d))){let a=await ac();return{up:a.up,installed:c,log:[`${f.name} is an EMBEDDING model — started the RAG embedding server on :8083 (it can't power chat on :8082).`,a.up?`✓ embeddings ready \xb7 ${D}`:`embeddings: ${a.reason??"failed to start"}`]}}b=f?.file,e=f?.sizeBytes??0}if(!b){let a=aa();b=a?.file,e=a?.sizeBytes??0}if(!b||!(0,h.existsSync)(b)){let a=_();if(a){let b=await ac();return{up:!1,installed:c,log:[`Your only local model (${a.name}) is an EMBEDDING model — it powers RAG on the embeddings server (${D}), not the chat server.`,b.up?"✓ embeddings server is running.":`embeddings: ${b.reason??"not started"}`,"Download a chat/instruct GGUF (e.g. Qwen, Llama) below to run the chat server on :8082."]}}return{up:!1,installed:c,log:["no GGUF model on disk — download one below first."]}}try{let a=S()??"llama-server";await W().catch(()=>{});let f=await $(e),g=(0,i.spawn)(a,["-m",b,"--host","127.0.0.1","--port","8082","-c","4096",...f],{detached:!0,stdio:"ignore"}),h="";g.on("error",a=>{h=String(a instanceof Error?a.message:a)}),g.unref(),d.push(`$ llama-server -m ${b.split(/[\\/]/).pop()} --port 8082${f.length?" -ngl 99 (GPU)":" (CPU)"}`);let j=!1;for(let a=0;a<12&&!j;a++)await new Promise(a=>setTimeout(a,1e3)),j=(await Z()).up;return h&&d.push("spawn failed: "+h),d.push(j?`✓ ready \xb7 ${C}`:"still starting — large models take longer; run llama-server in a terminal to see progress."),await ah(),(0,p.revalidatePath)("/models"),{up:j,installed:c,log:d}}catch(a){return{up:!1,installed:c,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}async function aj(){let a=await Y(),b=[];try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM llama-server.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f llama-server",{stdio:"ignore",timeout:4e3}),b.push("server stopped")}catch{b.push("no running llama-server process found")}return await ah(),(0,p.revalidatePath)("/models"),{up:!1,installed:a,log:b}}(0,A.D)([F,G,H,I,J,K,M,N,O,P,Q,X,Y,Z,ab,ac,ad,ae,af,ag,ah,ai,aj]),(0,d.A)(F,"00daa0e798c3fae980f13d740da0302812a79f57e8",null),(0,d.A)(G,"00536447095474c778e31d137c01ba2646eec410e2",null),(0,d.A)(H,"40c31d0c3bcd690eee369475c1c5772af4c6636c01",null),(0,d.A)(I,"00da17592223a042104d81f22492389a1e1e008d8e",null),(0,d.A)(J,"40779f985ca90e272993f927af3b264654ffd01575",null),(0,d.A)(K,"009e52d167c1fcd9bb04626a33bcccd7d11b06c56b",null),(0,d.A)(M,"4023914c635fa47959e59550bc8bd4ebb3ff58154d",null),(0,d.A)(N,"40b6f01d2782f71ffb9a4f88359c559cabe8d1d62b",null),(0,d.A)(O,"409b4b698599507df3cf2a4c5ef4b0f7da4b348973",null),(0,d.A)(P,"40a5be704584d4e1fa658cda4dd1c7a71d8f91790a",null),(0,d.A)(Q,"40d9e768072a0ec8a2225a9244f11c952f11d3602c",null),(0,d.A)(X,"004127f319f0030f0735ffb3e28dd8a6a0aa375f1d",null),(0,d.A)(Y,"001b23c51ce307e905e932a5912a778512d80930bc",null),(0,d.A)(Z,"00863cc4e11209b21d28dfa05493150e8f5bbfda49",null),(0,d.A)(ab,"00a03d474f716d87fd1a86c79350a9d2bfd21ef575",null),(0,d.A)(ac,"004538216b4e3befaaea5128ea652fdfac43f7a052",null),(0,d.A)(ad,"000a3e709451c5019f171a5c5caf92c1502aba0a72",null),(0,d.A)(ae,"00f9d2fde982263fcecb9bc6e394fcefc9b542a707",null),(0,d.A)(af,"0071450d5b055dee29d288b92b722aa282778a0910",null),(0,d.A)(ag,"0016c9b8edb1408d7479d11a7e5416e9acf518f426",null),(0,d.A)(ah,"007273f380ef28b83dfa4900cdc4ee8e5f09e737ac",null),(0,d.A)(ai,"401ec303731bb342735f06451be7e3dd050b0efc3a",null),(0,d.A)(aj,"0035c2aadad3e1c2605284039c294418ee49820124",null)}};
@@ -0,0 +1,4 @@
1
+ "use strict";exports.id=8071,exports.ids=[7336,8071],exports.modules={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})]})}},18137:(a,b,c)=>{c.r(b),c.d(b,{"002fec2d26110a9739fa280853926b598d1a49bd44":()=>x,"003d1836382188603c5b40a8fd0c7735cec69e7922":()=>i.V,"004385fd0fd07982e82eeb3fc0a146319a0c4cddcf":()=>y.PG,"004ec7f252351e38a9c4baf338040eebc632b425d2":()=>j.f,"0051a52502b49e09ad171c2a611bc2418ed1c1a9dc":()=>e.PE,"005a226f73ea851bb80ec4f9fdf3aedb50fb7fbcd1":()=>e.y_,"00703229b811528142c40576d5c57f3467b87b9b61":()=>d.bt,"008945e940738840c2c3f8cf09a767e9dff2d1d34b":()=>k.dj,"00989a2c152ceb87b200f52f9d56d6a1006b3ae418":()=>j.O,"009be10f119924c7536924e7aa423be2a59d4a0f40":()=>y.eU,"00a3d5009503b1be561d7520e2b68ce0587a6740c0":()=>y.pM,"00bb81b2ee7b45ce9f2c558b5098b2acbe223d936e":()=>k.eg,"00cdd261029ea6d12df690e0b43e69818dbfeca142":()=>h.x7,"00ce8a19facd18b6c85993ebd6da347d63d0579dfa":()=>k.io,"00d423e1c54f47493dd9e26787f081501532d5754f":()=>d.xU,"00df7e6e08eaa29f35def8db35d7aefb6c9acb9ce2":()=>e.KO,"00e68579200e3df5cde1803035a93f8406aa41e3b0":()=>h.Mp,"00ee824db0a18ba9e4b113a979c27e43db14785003":()=>e.GK,"4004cb652b9955d22ac032162768b4e0579a46079b":()=>e.ey,"400cec94da616f674817927789cb26482bba22cfbd":()=>y.Kg,"4010339d35fee3f9209079d6bec35c010e1bbd23f5":()=>m.y,"4012df9fe60cdc771539fe5ed6ee353f894150d310":()=>g.L,"40180769811ee904607ab5b31116043b8c5f8be1a1":()=>i.E_,"401b5fdc3d8fb095679094c177536777e53f9c06fd":()=>y.lP,"4021ca58f6081eea2ecbd22b042f8eb7cb116a2fc3":()=>i.zS,"40242806df9ad69eb1c87ff62b4b2b34b3abad98dd":()=>e.jc,"40249f352fbd111bf83a85129254e9e18ef8ea9d64":()=>l.TX,"404005f581c185523c57ba4de7b6e623b00422d422":()=>l.IL,"4049b65fc61de5f15ea027c832048d695017a2cadc":()=>d.GW,"404aa55a36511316cdf338b098de663d429f9e7c1f":()=>k.De,"4055d44350781ccf3333fcaf2f5cb371866c797769":()=>i.F,"406201c1d173ad16581e88feb7fdf42ebbc95ef841":()=>d.VL,"407c52c4d4449ab61d90dcfa9cbf1ddd27160f6838":()=>e.RG,"4087e6e58cd4d57932fba61705c67f27c76e9dbebb":()=>d.Wu,"40972d5b822e66513389d5179af32bb5f9ab77ca88":()=>g.p,"409743adf88b2fc6a237494fd51038d3a4527b0203":()=>h.lR,"4098f6bc6c8bcf5e0704daf3a5a7bab7ffa82a196c":()=>d.H7,"40a6b782c452b9d7da8220c5630efb6277ba4077a1":()=>h.sE,"40a7dc12aa0d1b7b04c68ad7e482ba71fd189a44a7":()=>i.VJ,"40b05730806e4d6ca81c8b097bbe58fc8b2a6a9c19":()=>e.lJ,"40b85e5a61026f49480c36b5f71ce876512194b848":()=>e.S,"40dd7a9ba904e27f9eeac05cd7a750583e8de84545":()=>d.rd,"40e311db584b685c4692979c63d0c6e43ebfbb3776":()=>e.r7,"40eca98781164e186e8b92598018c0247eee2533ed":()=>l.q4,"40faf10ed1dd931e743694b6ab07acfffa9f1c5fff":()=>d.gg,"600d82e3d7031f663a63e6110ba9f565e1925bac77":()=>d.Fu,"602541726f950df2e46bd648c470b35caff4290401":()=>l.Jp,"6028f21157caf9e4ebf73d2a6dedcc869505c929ee":()=>w,"60301fe28cb811b08550b91045a0558179995780c0":()=>d.ME,"6043588d0686a7654ec852ff74b41a1990afb8ad5b":()=>l.bk,"60581df9364a1b92ebc0d853d7c78efa696792047f":()=>d.rm,"605cdb117d7636ebc2c1655a5624f369a8c5530ef3":()=>l.bV,"605ee4201fe65199f85db7180e840b038e2e8ffd10":()=>d.n4,"60641a6b24e31ba5d7c698743071a038d3366fc586":()=>e.AA,"6089bcc5361f39d22c01d6f92038ab1a71d519835f":()=>f.k,"60b6a569caae9899b156707b836ab2851f5218fa91":()=>e.q$,"60c1724f6f00fd2d33760b52f4dde31de692d1b203":()=>f.I,"60e6371f54999c9587eca32148839e4ce8eef9abc3":()=>e.LZ,"60e9b223d15847a611ea2b6fdf59614eceb4151ee9":()=>d.jw,"700e7dc42f9902ba897ac4e36d45bfd5032bd56211":()=>d._z,"706d88c745d18277356678742d9b6b2b19c4f6e86d":()=>e.M8});var d=c(97140),e=c(15487),f=c(79505),g=c(51605),h=c(46363),i=c(46282),j=c(387),k=c(13604),l=c(7482),m=c(58169),n=c(6866),o=c(77598),p=c(97603),q=c(65705),r=c(1890),s=c(53993),t=c(83963),u=c(70149),v=c(24701);async function w(a,b){let{org:c,workspace:d}=await (0,s.nP)(),[e]=await q.db.select().from(r.docIndex).where((0,p.Uo)((0,p.eq)(r.docIndex.id,a),(0,p.eq)(r.docIndex.workspaceId,d.id)));return e?(await (0,t.g)(c.id,e.path,b),{ok:!0}):{ok:!1}}async function x(){let{org:a,workspace:b}=await (0,s.nP)(),c=await q.db.select().from(r.agent).where((0,p.eq)(r.agent.workspaceId,b.id)),d=c.find(a=>"barbara"===a.handle)??c.find(a=>/docs|writer/i.test(a.role))??c[0];if(!d)return{ok:!1,error:"no docs agent"};let e=(0,u.hW)(d.adapter,d.model),f="claude"===e?d.model.includes("opus")?"opus":d.model.includes("haiku")?"haiku":"sonnet":void 0,g=`You are ${d.name} (@${d.handle}), ${d.role} at ${b.name}.
2
+ Review the current state of this workspace directory (code, specs, structure) and write or refresh a single piece of project documentation in GitHub-flavoured Markdown.
3
+ Begin with one H1 title line. Cover what exists, how it is organised, and how to work with it. Be specific and truthful — describe only what the files actually show; do not invent features.
4
+ Output ONLY the Markdown document (no code fences).`,h=await (0,u.JN)(g,{orgId:a.id,binary:e,model:f,timeoutMs:24e4});(h.usd>0||h.inputTokens+h.outputTokens>0)&&await q.db.insert(r.costEntry).values({id:(0,o.randomUUID)(),workspaceId:b.id,agentId:d.id,provider:h.binary,model:h.model??d.model,usd:h.usd,tokens:h.inputTokens+h.outputTokens,at:new Date});let i=h.text.trim();if(!h.ok||!i)return await (0,v.I)(b.id,{kind:"info",text:"Docs generation failed",detail:(h.error??"no output").slice(0,300),agentId:d.id}),{ok:!1,error:h.error};let j=(i.split("\n").find(a=>a.trim())??"Documentation").replace(/^#+\s*/,"").slice(0,120)||"Documentation",k=j.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,60)||"doc",l=`DOCS/${k}.md`;return await (0,t.g)(a.id,l,i),await (0,v.I)(b.id,{kind:"done",text:`${d.name} updated the docs: ${j}`,detail:`Saved to ${l}`,agentId:d.id}),{ok:!0,path:l}}(0,c(74252).D)([w,x]),(0,n.A)(w,"6028f21157caf9e4ebf73d2a6dedcc869505c929ee",null),(0,n.A)(x,"002fec2d26110a9739fa280853926b598d1a49bd44",null);var y=c(52932)},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;return"dev"===b?{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"}:"npx"===b?{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"}:"vps"===b?{ok:!1,context:b,command:"bash scripts/vps-update.sh",backupDir:d,needsRestart:!0,message:"On a VPS, update from a shell: `bash scripts/vps-update.sh` (or `npm install -g constellai@latest && sudo systemctl restart constella`). Your data in ~/.constella — DB, secrets, workspaces — is preserved; migrations run on the next boot."}: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,"400cec94da616f674817927789cb26482bba22cfbd",null),(0,d.A)(y,"401b5fdc3d8fb095679094c177536777e53f9c06fd",null),(0,d.A)(z,"00a3d5009503b1be561d7520e2b68ce0587a6740c0",null),(0,d.A)(A,"004385fd0fd07982e82eeb3fc0a146319a0c4cddcf",null),(0,d.A)(B,"009be10f119924c7536924e7aa423be2a59d4a0f40",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"}},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)}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=2939,exports.ids=[2939],exports.modules={38035:(a,b,c)=>{c.r(b),c.d(b,{"0059387b91e7e6a7a87cacf80370a17b5b8e4de460":()=>d.Kd,"0076794b895340e25999468b0bbd9287ae4d6bb0e4":()=>d.cT,"4025ecca1d0b72b4546d5f28641dfbe4aa87114faa":()=>d.j0,"408a24552b8ec7d87b85da3347a66b814e09560947":()=>d.OD});var d=c(14565)},80480:(a,b,c)=>{c.r(b),c.d(b,{"000092376504dffe42d6d7bbea8971004cfbf59aa1":()=>e.KO,"000a041d002c8ec4af941e0a6d667a3829b48260ce":()=>e.y_,"0012956bf2d3bbcb43f67d38b3aa8dfae55ac33977":()=>j.f,"002014c503129e70c12e060d2d82613f53e06ed951":()=>j.O,"002848aa56706bb4da36231d0469773010b5c65995":()=>h.Mp,"0034803147c448737f6a0164383dd37f8f93732bec":()=>d.bt,"003b0864cd6028ed215e860e8eab5e7c1ffff7c460":()=>k.io,"003de4055bdd508bb7e3a6a9715b3c76aa7c5bf19c":()=>k.eg,"00447576ecd8f610009a2c1071738c9934a1e9cd8f":()=>k.dj,"00469d0a33e26f3477a84aa01ef49f536b57179be4":()=>F.pM,"005378c98afb4c20e7152c9d11239ad09757831252":()=>e.PE,"0057467d49ea85739735767ccea6db330c76faeec8":()=>F.eU,"00582dbab5f37aed0f19eff37252e890c0a55f39d0":()=>e.GK,"005ea234d96275090327f7e2dcce8ca4432f5fe72c":()=>i.V,"008ea2654697a5afa8e73caa0804e4bf4857be09f9":()=>E,"00b1241dd421ffae4ebf008768be90ba5f35de7633":()=>d.xU,"00ee83073d8c45c4fef5ff93c2d8698fc6367bea0e":()=>h.x7,"00ef40b521ba111ae5cd40d15fc2fbe1a31aec511b":()=>F.PG,"40043b56e692c611ee1b3762d11ff2d59ad88f40e9":()=>g.p,"400afad86c243d920cb13488b8274bea36c18c21d3":()=>e.ey,"40211d14c88eb1be62ce200a5ef91e46df5e8444f8":()=>g.L,"40240213a9ee438876082ca59a072e1d2476d156c9":()=>e.jc,"403343bf523d7a6db1badd67fdb38e37203128bf13":()=>D,"4034047e3cec56354eae1ec41f866469d06078fb04":()=>i.zS,"4034b958c5291072ebed84a5d32e5682c0472c7c27":()=>d.gg,"403ad35020d0178cad6c5c90cc869fc00fd1b6370c":()=>l.IL,"403c300530e143bf5ac45f084006cbf49445591b83":()=>l.q4,"40448c5c20fb04ace2af739622349aa2d52ade65fa":()=>i.F,"4050a8de593aa91a64bc534081570b5672455b599f":()=>h.lR,"4058c9447c6db1cfaceee0db2490f11726cf348d6a":()=>k.De,"40595242ae0f18bb3fd06f543cf9b0c6ae3aad2899":()=>d.Wu,"4061d2fff9149f3df3f6807779c546d43b8913db00":()=>e.r7,"407b05843d34268cb4427338a3999bc6b7f3cdf833":()=>A,"407e9fe190944c10f3070a5cc70be22aa2590a8e61":()=>C,"407efc0bd72272aed2f1d86ee92ec53b31e5797f6a":()=>e.S,"4086d172d8b634174e36e833f36bc02f7b18021ebf":()=>d.VL,"40903ff4e8850de2b9b0ec69f26d96d30e134dd37d":()=>e.RG,"409364c2aeb5b3848eb49929913f7b33024d052ade":()=>l.TX,"40a6b07acdef8a3d7decbb3abd27a5e167f75ea818":()=>F.lP,"40bf3186ebd30c9abea9ad49c120b1f9b2c735c7ed":()=>d.H7,"40c17744973569bf9610916c2f6748f67f8ad28895":()=>d.GW,"40c2849ce4892a523c0f6826e0747a4a1bcb773954":()=>i.VJ,"40c8745e5d6d974d20084fff8a5273a8c2ca0f9c0e":()=>e.lJ,"40c976b278685e202b9a1713e53843aaf1c1f5d19f":()=>F.Kg,"40da0fa136729a64a58a5f45fc8b28376f4815c529":()=>i.E_,"40ddbf7e3d2270455bf3beb66604ddf5ddfedddf36":()=>z,"40dee46f36e4a9bb45be083e921cbcb6d63d8b3413":()=>h.sE,"40ec6c4022bb3dfafc90468d52e0b712636870219c":()=>d.rd,"40fea276f6a37289f66ea71a9be729e90d327aed30":()=>m.y,"6005fb86a682acf6b3948ce8d64f99a35da0711b34":()=>d.Fu,"604869f74335ae977b0d204b7a7725ea081c2e464b":()=>d.ME,"60837f6c4d61a9e9bad7a4274f4d0e34a2ffeb3ac2":()=>d.n4,"60b28e4da33b50b8648338a501ffdc93404dbe9967":()=>B,"60b2fea611b43792cdb4ef4bb5ea683665a4c11d10":()=>e.q$,"60b5011b57b25dd9d35c49e5581c26ff1450ffa84d":()=>e.AA,"60bd7f16418dc50dc8405ee52f569d6b76466e42c2":()=>f.k,"60d16690209bf12aea1d75ba6059b2f84df249820f":()=>l.bV,"60d1fe520970bf752f500c890281183070c12509ab":()=>d.rm,"60dc2159d814bcfe5bc8b5ca4c83c13d0fbc05d649":()=>f.I,"60dccbcd297b7188125f90cb3ce0fe028ae56f496a":()=>y,"60e054d3049e470186974cc7df6fc2dd249a75c60c":()=>l.bk,"60e981141c7241ed2a57000dff2d1ed708490a88d9":()=>e.LZ,"60ee693aca6ae1a7fcd00b81c6a6448ea3d1f0cf2c":()=>d.jw,"60fdda9dd1e684dbfc27b991588ef88964c62f95eb":()=>l.Jp,"7047cab3d785753e6eacfbdb8cb4bfa768b707c1fe":()=>d._z,"70ab3ef26c7e92e3e1c1e22461b0e2ef3159149053":()=>e.M8});var d=c(97140),e=c(15487),f=c(79505),g=c(51605),h=c(46363),i=c(46282),j=c(387),k=c(13604),l=c(7482),m=c(58169),n=c(6866),o=c(77598),p=c(97603),q=c(31371),r=c(65705),s=c(1890),t=c(53993),u=c(70149),v=c(56338),w=c(24701),x=c(83963);async function y(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.routine).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,c.id))),(0,q.revalidatePath)("/routines")}async function z(a){let{workspace:b}=await (0,t.nP)(),c=a.name.trim();return c?(await r.db.insert(s.routine).values({id:(0,o.randomUUID)(),workspaceId:b.id,name:c.slice(0,120),cmd:(a.cmd??"").trim().slice(0,500),freq:(a.freq??"Daily").trim()||"Daily",agentId:a.agentId||null,enabled:!0}),(0,q.revalidatePath)("/routines"),{ok:!0}):{ok:!1,error:"Name the routine."}}async function A(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.routine).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,b.id))),(0,q.revalidatePath)("/routines")}async function B(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.plugin).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.plugin.id,a),(0,p.eq)(s.plugin.workspaceId,c.id))),(0,q.revalidatePath)("/plugins")}async function C(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.inboxItem).where((0,p.Uo)((0,p.eq)(s.inboxItem.id,a),(0,p.eq)(s.inboxItem.workspaceId,b.id))),(0,q.revalidatePath)("/inbox")}async function D(a){let{workspace:b}=await (0,t.nP)();await r.db.update(s.finding).set({status:"fixed"}).where((0,p.Uo)((0,p.eq)(s.finding.id,a),(0,p.eq)(s.finding.workspaceId,b.id))),await r.db.insert(s.notification).values({id:(0,o.randomUUID)(),workspaceId:b.id,kind:"security",text:"Finding patched by the Code Review Agent",detail:"A security finding was fixed and a report was filed."}),(0,q.revalidatePath)("/security")}async function E(){let{org:a,workspace:b}=await (0,t.nP)(),c=await r.db.select().from(s.agent).where((0,p.eq)(s.agent.workspaceId,b.id)),d=c.find(a=>"whitfield"===a.handle)??c.find(a=>/cyber|sec/i.test(a.role))??c[0],e=(0,o.randomUUID)();if(!d)return{ok:!1,count:0,runId:e,error:"no agent"};await r.db.update(s.agent).set({status:"working"}).where((0,p.eq)(s.agent.id,d.id)),await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:"thinking",target:`${d.name} is reviewing the workspace…`});let g=await r.db.select({name:s.skill.name,instructions:s.skill.instructions,summary:s.skill.summary}).from(s.agentSkill).innerJoin(s.skill,(0,p.eq)(s.agentSkill.skillId,s.skill.id)).where((0,p.Uo)((0,p.eq)(s.agentSkill.agentId,d.id),(0,p.RV)(s.skill.name,["owasp-top-10","owasp-asvs","appsec-fundamentals","secrets-management","secure-auth-sessions","dependency-supply-chain","review-code-perf-security","code-review-practices"]))),h=g.length?`
1
+ "use strict";exports.id=8102,exports.ids=[8102],exports.modules={33379:(a,b,c)=>{c.r(b),c.d(b,{"0028f961902c9e2476af137bbeb472cd7073047824":()=>d.Kd,"007022a76790c9702b4391280231b2e171ccb37259":()=>d.cT,"405c3175ae584fd80327c8ee43d0a247dd50e3c25b":()=>d.j0,"40834c7dee509b9fe3747f69a43078710b318bcdf5":()=>d.OD});var d=c(14565)},76402:(a,b,c)=>{c.r(b),c.d(b,{"003d1836382188603c5b40a8fd0c7735cec69e7922":()=>i.V,"004385fd0fd07982e82eeb3fc0a146319a0c4cddcf":()=>F.PG,"004ec7f252351e38a9c4baf338040eebc632b425d2":()=>j.f,"0051a52502b49e09ad171c2a611bc2418ed1c1a9dc":()=>e.PE,"005a226f73ea851bb80ec4f9fdf3aedb50fb7fbcd1":()=>e.y_,"00703229b811528142c40576d5c57f3467b87b9b61":()=>d.bt,"008945e940738840c2c3f8cf09a767e9dff2d1d34b":()=>k.dj,"00989a2c152ceb87b200f52f9d56d6a1006b3ae418":()=>j.O,"009be10f119924c7536924e7aa423be2a59d4a0f40":()=>F.eU,"00a3d5009503b1be561d7520e2b68ce0587a6740c0":()=>F.pM,"00ba14d2b5c3a4f458d7d2061711c1f5378dd90b92":()=>E,"00bb81b2ee7b45ce9f2c558b5098b2acbe223d936e":()=>k.eg,"00cdd261029ea6d12df690e0b43e69818dbfeca142":()=>h.x7,"00ce8a19facd18b6c85993ebd6da347d63d0579dfa":()=>k.io,"00d423e1c54f47493dd9e26787f081501532d5754f":()=>d.xU,"00df7e6e08eaa29f35def8db35d7aefb6c9acb9ce2":()=>e.KO,"00e68579200e3df5cde1803035a93f8406aa41e3b0":()=>h.Mp,"00ee824db0a18ba9e4b113a979c27e43db14785003":()=>e.GK,"4004cb652b9955d22ac032162768b4e0579a46079b":()=>e.ey,"400cec94da616f674817927789cb26482bba22cfbd":()=>F.Kg,"4010339d35fee3f9209079d6bec35c010e1bbd23f5":()=>m.y,"4012df9fe60cdc771539fe5ed6ee353f894150d310":()=>g.L,"401571128a88231061daa7ab3ca11b65af45af2ac4":()=>z,"40180769811ee904607ab5b31116043b8c5f8be1a1":()=>i.E_,"401b5fdc3d8fb095679094c177536777e53f9c06fd":()=>F.lP,"4021ca58f6081eea2ecbd22b042f8eb7cb116a2fc3":()=>i.zS,"40242806df9ad69eb1c87ff62b4b2b34b3abad98dd":()=>e.jc,"40249f352fbd111bf83a85129254e9e18ef8ea9d64":()=>l.TX,"404005f581c185523c57ba4de7b6e623b00422d422":()=>l.IL,"4049b65fc61de5f15ea027c832048d695017a2cadc":()=>d.GW,"404aa55a36511316cdf338b098de663d429f9e7c1f":()=>k.De,"4055d44350781ccf3333fcaf2f5cb371866c797769":()=>i.F,"406201c1d173ad16581e88feb7fdf42ebbc95ef841":()=>d.VL,"407c52c4d4449ab61d90dcfa9cbf1ddd27160f6838":()=>e.RG,"4087e6e58cd4d57932fba61705c67f27c76e9dbebb":()=>d.Wu,"40972d5b822e66513389d5179af32bb5f9ab77ca88":()=>g.p,"409743adf88b2fc6a237494fd51038d3a4527b0203":()=>h.lR,"4098f6bc6c8bcf5e0704daf3a5a7bab7ffa82a196c":()=>d.H7,"40a01c0931ff061f0f56472a225b21888d3cd32089":()=>D,"40a0e2ee30f5d3805b41c5e1f9061840788d507f84":()=>A,"40a6b782c452b9d7da8220c5630efb6277ba4077a1":()=>h.sE,"40a7dc12aa0d1b7b04c68ad7e482ba71fd189a44a7":()=>i.VJ,"40b05730806e4d6ca81c8b097bbe58fc8b2a6a9c19":()=>e.lJ,"40b85e5a61026f49480c36b5f71ce876512194b848":()=>e.S,"40ba9a6a07e06f168c8e61d97eab0b139c0826c41f":()=>C,"40dd7a9ba904e27f9eeac05cd7a750583e8de84545":()=>d.rd,"40e311db584b685c4692979c63d0c6e43ebfbb3776":()=>e.r7,"40eca98781164e186e8b92598018c0247eee2533ed":()=>l.q4,"40faf10ed1dd931e743694b6ab07acfffa9f1c5fff":()=>d.gg,"600d82e3d7031f663a63e6110ba9f565e1925bac77":()=>d.Fu,"602541726f950df2e46bd648c470b35caff4290401":()=>l.Jp,"60301fe28cb811b08550b91045a0558179995780c0":()=>d.ME,"6043588d0686a7654ec852ff74b41a1990afb8ad5b":()=>l.bk,"60581df9364a1b92ebc0d853d7c78efa696792047f":()=>d.rm,"605cdb117d7636ebc2c1655a5624f369a8c5530ef3":()=>l.bV,"605ee4201fe65199f85db7180e840b038e2e8ffd10":()=>d.n4,"60641a6b24e31ba5d7c698743071a038d3366fc586":()=>e.AA,"6064a3ad18a5503a5d815a28fe065218575a8c1c8b":()=>B,"6089bcc5361f39d22c01d6f92038ab1a71d519835f":()=>f.k,"609166d96c2602d5d974ddca3a1d7cc4aae8af0e36":()=>y,"60b6a569caae9899b156707b836ab2851f5218fa91":()=>e.q$,"60c1724f6f00fd2d33760b52f4dde31de692d1b203":()=>f.I,"60e6371f54999c9587eca32148839e4ce8eef9abc3":()=>e.LZ,"60e9b223d15847a611ea2b6fdf59614eceb4151ee9":()=>d.jw,"700e7dc42f9902ba897ac4e36d45bfd5032bd56211":()=>d._z,"706d88c745d18277356678742d9b6b2b19c4f6e86d":()=>e.M8});var d=c(97140),e=c(15487),f=c(79505),g=c(51605),h=c(46363),i=c(46282),j=c(387),k=c(13604),l=c(7482),m=c(58169),n=c(6866),o=c(77598),p=c(97603),q=c(31371),r=c(65705),s=c(1890),t=c(53993),u=c(70149),v=c(56338),w=c(24701),x=c(83963);async function y(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.routine).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,c.id))),(0,q.revalidatePath)("/routines")}async function z(a){let{workspace:b}=await (0,t.nP)(),c=a.name.trim();return c?(await r.db.insert(s.routine).values({id:(0,o.randomUUID)(),workspaceId:b.id,name:c.slice(0,120),cmd:(a.cmd??"").trim().slice(0,500),freq:(a.freq??"Daily").trim()||"Daily",agentId:a.agentId||null,enabled:!0}),(0,q.revalidatePath)("/routines"),{ok:!0}):{ok:!1,error:"Name the routine."}}async function A(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.routine).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,b.id))),(0,q.revalidatePath)("/routines")}async function B(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.plugin).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.plugin.id,a),(0,p.eq)(s.plugin.workspaceId,c.id))),(0,q.revalidatePath)("/plugins")}async function C(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.inboxItem).where((0,p.Uo)((0,p.eq)(s.inboxItem.id,a),(0,p.eq)(s.inboxItem.workspaceId,b.id))),(0,q.revalidatePath)("/inbox")}async function D(a){let{workspace:b}=await (0,t.nP)();await r.db.update(s.finding).set({status:"fixed"}).where((0,p.Uo)((0,p.eq)(s.finding.id,a),(0,p.eq)(s.finding.workspaceId,b.id))),await r.db.insert(s.notification).values({id:(0,o.randomUUID)(),workspaceId:b.id,kind:"security",text:"Finding patched by the Code Review Agent",detail:"A security finding was fixed and a report was filed."}),(0,q.revalidatePath)("/security")}async function E(){let{org:a,workspace:b}=await (0,t.nP)(),c=await r.db.select().from(s.agent).where((0,p.eq)(s.agent.workspaceId,b.id)),d=c.find(a=>"whitfield"===a.handle)??c.find(a=>/cyber|sec/i.test(a.role))??c[0],e=(0,o.randomUUID)();if(!d)return{ok:!1,count:0,runId:e,error:"no agent"};await r.db.update(s.agent).set({status:"working"}).where((0,p.eq)(s.agent.id,d.id)),await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:"thinking",target:`${d.name} is reviewing the workspace…`});let g=await r.db.select({name:s.skill.name,instructions:s.skill.instructions,summary:s.skill.summary}).from(s.agentSkill).innerJoin(s.skill,(0,p.eq)(s.agentSkill.skillId,s.skill.id)).where((0,p.Uo)((0,p.eq)(s.agentSkill.agentId,d.id),(0,p.RV)(s.skill.name,["owasp-top-10","owasp-asvs","appsec-fundamentals","secrets-management","secure-auth-sessions","dependency-supply-chain","review-code-perf-security","code-review-practices"]))),h=g.length?`
2
2
  Apply these review skills (consult before judging):
3
3
  ${g.map(a=>`- ${a.name}: ${(a.instructions||a.summary).replace(/\s+/g," ").slice(0,300)}`).join("\n")}`:"",i=await (0,v.yY)(a.id,"security review: vulnerabilities, auth, secrets, prior findings and decisions",{agentHandle:d.handle,k:6}),j=i.context?`
4
4
  Project knowledge (prior findings, decisions, patterns — do not contradict):
@@ -9,4 +9,4 @@ _By @${d.handle} (${d.role}) \xb7 ${A}_
9
9
  `+(y.length?`Filed ${y.length} finding(s):
10
10
 
11
11
  `+y.slice(0,40).map(a=>`- **${a.sev??"med"}** ${a.title??"Finding"} — \`${a.file??"?"}\`
12
- - ${a.suggestion??""}`).join("\n")+"\n":"No findings — the workspace looks clean.\n");try{await (0,x.g)(a.id,"Reports/security-review.md",B)}catch(a){console.error("[review] security report write failed:",a)}return await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:n.ok?"done":"error",target:n.ok?`${y.length} finding(s) filed`:(n.error??"review failed").slice(0,200)}),await (0,w.I)(b.id,{kind:"security",text:"Security sweep finished",detail:`${d.name} filed ${y.length} finding(s).`,agentId:d.id}),(0,q.revalidatePath)("/security"),(0,q.revalidatePath)("/","layout"),{ok:n.ok,count:y.length,runId:e,error:n.error}}(0,c(74252).D)([y,z,A,B,C,D,E]),(0,n.A)(y,"60dccbcd297b7188125f90cb3ce0fe028ae56f496a",null),(0,n.A)(z,"40ddbf7e3d2270455bf3beb66604ddf5ddfedddf36",null),(0,n.A)(A,"407b05843d34268cb4427338a3999bc6b7f3cdf833",null),(0,n.A)(B,"60b28e4da33b50b8648338a501ffdc93404dbe9967",null),(0,n.A)(C,"407e9fe190944c10f3070a5cc70be22aa2590a8e61",null),(0,n.A)(D,"403343bf523d7a6db1badd67fdb38e37203128bf13",null),(0,n.A)(E,"008ea2654697a5afa8e73caa0804e4bf4857be09f9",null);var F=c(52932)},86450:(a,b,c)=>{c.d(b,{FixButton:()=>f,RunReviewButton:()=>g,Toggle:()=>e});var d=c(62060);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Toggle() from the server but Toggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","Toggle");(0,d.registerClientReference)(function(){throw Error("Attempted to call ResolveButton() from the server but ResolveButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","ResolveButton");let f=(0,d.registerClientReference)(function(){throw Error("Attempted to call FixButton() from the server but FixButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","FixButton"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call RunReviewButton() from the server but RunReviewButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","RunReviewButton")},87925:(a,b,c)=>{c.d(b,{FixButton:()=>n,RunReviewButton:()=>o,Toggle:()=>m});var d=c(4374),e=c(74679),f=c(2910);let g=(0,f.createServerReference)("60dccbcd297b7188125f90cb3ce0fe028ae56f496a",f.callServer,void 0,f.findSourceMapURL,"toggleRoutine"),h=(0,f.createServerReference)("60b28e4da33b50b8648338a501ffdc93404dbe9967",f.callServer,void 0,f.findSourceMapURL,"togglePlugin"),i=(0,f.createServerReference)("403343bf523d7a6db1badd67fdb38e37203128bf13",f.callServer,void 0,f.findSourceMapURL,"fixFinding"),j=(0,f.createServerReference)("008ea2654697a5afa8e73caa0804e4bf4857be09f9",f.callServer,void 0,f.findSourceMapURL,"runReview");var k=c(43526),l=c(31819);function m({kind:a,id:b,on:c}){let[f,i]=(0,e.useTransition)(),j="routine"===a?g:h;return(0,d.jsx)("div",{className:"toggle"+(c?" on":""),"aria-disabled":f,role:"switch","aria-checked":c,onClick:()=>!f&&i(()=>j(b,!c))})}function n({id:a}){let b=(0,l.k)(),[c,f]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"sc2-btn",disabled:c,onClick:()=>f(()=>i(a)),children:[(0,d.jsx)(k.I,{name:"bot",size:12})," ",b("security.letAgentFix")]})}function o(){let a=(0,l.k)(),[b,c]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"btn-accent",disabled:b,onClick:()=>{window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"security"}})),c(async()=>{await j()})},children:[(0,d.jsx)(k.I,{name:"refresh",size:14,className:b?"sync-spin":""})," ",a(b?"security.reviewing":"security.runReview")]})}}};
12
+ - ${a.suggestion??""}`).join("\n")+"\n":"No findings — the workspace looks clean.\n");try{await (0,x.g)(a.id,"Reports/security-review.md",B)}catch(a){console.error("[review] security report write failed:",a)}return await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:n.ok?"done":"error",target:n.ok?`${y.length} finding(s) filed`:(n.error??"review failed").slice(0,200)}),await (0,w.I)(b.id,{kind:"security",text:"Security sweep finished",detail:`${d.name} filed ${y.length} finding(s).`,agentId:d.id}),(0,q.revalidatePath)("/security"),(0,q.revalidatePath)("/","layout"),{ok:n.ok,count:y.length,runId:e,error:n.error}}(0,c(74252).D)([y,z,A,B,C,D,E]),(0,n.A)(y,"609166d96c2602d5d974ddca3a1d7cc4aae8af0e36",null),(0,n.A)(z,"401571128a88231061daa7ab3ca11b65af45af2ac4",null),(0,n.A)(A,"40a0e2ee30f5d3805b41c5e1f9061840788d507f84",null),(0,n.A)(B,"6064a3ad18a5503a5d815a28fe065218575a8c1c8b",null),(0,n.A)(C,"40ba9a6a07e06f168c8e61d97eab0b139c0826c41f",null),(0,n.A)(D,"40a01c0931ff061f0f56472a225b21888d3cd32089",null),(0,n.A)(E,"00ba14d2b5c3a4f458d7d2061711c1f5378dd90b92",null);var F=c(52932)},86450:(a,b,c)=>{c.d(b,{FixButton:()=>f,RunReviewButton:()=>g,Toggle:()=>e});var d=c(62060);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Toggle() from the server but Toggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","Toggle");(0,d.registerClientReference)(function(){throw Error("Attempted to call ResolveButton() from the server but ResolveButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","ResolveButton");let f=(0,d.registerClientReference)(function(){throw Error("Attempted to call FixButton() from the server but FixButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","FixButton"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call RunReviewButton() from the server but RunReviewButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","RunReviewButton")},95140:(a,b,c)=>{c.d(b,{FixButton:()=>n,RunReviewButton:()=>o,Toggle:()=>m});var d=c(4374),e=c(74679),f=c(2910);let g=(0,f.createServerReference)("609166d96c2602d5d974ddca3a1d7cc4aae8af0e36",f.callServer,void 0,f.findSourceMapURL,"toggleRoutine"),h=(0,f.createServerReference)("6064a3ad18a5503a5d815a28fe065218575a8c1c8b",f.callServer,void 0,f.findSourceMapURL,"togglePlugin"),i=(0,f.createServerReference)("40a01c0931ff061f0f56472a225b21888d3cd32089",f.callServer,void 0,f.findSourceMapURL,"fixFinding"),j=(0,f.createServerReference)("00ba14d2b5c3a4f458d7d2061711c1f5378dd90b92",f.callServer,void 0,f.findSourceMapURL,"runReview");var k=c(43526),l=c(31819);function m({kind:a,id:b,on:c}){let[f,i]=(0,e.useTransition)(),j="routine"===a?g:h;return(0,d.jsx)("div",{className:"toggle"+(c?" on":""),"aria-disabled":f,role:"switch","aria-checked":c,onClick:()=>!f&&i(()=>j(b,!c))})}function n({id:a}){let b=(0,l.k)(),[c,f]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"sc2-btn",disabled:c,onClick:()=>f(()=>i(a)),children:[(0,d.jsx)(k.I,{name:"bot",size:12})," ",b("security.letAgentFix")]})}function o(){let a=(0,l.k)(),[b,c]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"btn-accent",disabled:b,onClick:()=>{window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"security"}})),c(async()=>{await j()})},children:[(0,d.jsx)(k.I,{name:"refresh",size:14,className:b?"sync-spin":""})," ",a(b?"security.reviewing":"security.runReview")]})}}};
@@ -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}})).stdout.match(/https:\/\/github\.com\/\S+/)??[])[0];a&&(j.prUrl=a)}}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,"005ddda8f3a66691e67c306bef9847b8667b14a402",null),(0,d.A)(y,"40b0d489887ec87dcd0af108eff7a37cc4e9b1a6c4",null),(0,d.A)(z,"40af5bca204e9f035ec0c0bd88607d6f3ae5a5c86a",null),(0,d.A)(A,"403aa6627a3967b3dc05f17b294d6cdab5936cfd79",null),(0,d.A)(B,"0013b115fe3dd6dca93e3e55077f8d3a2c1bd17c46",null),(0,d.A)(D,"00f6740a30935cd4715d852275b45ba0077d0b30b3",null),(0,d.A)(E,"40ceb770c35ed6eac8bc8da767e3d4760ba86b2e1c",null),(0,d.A)(F,"4070dfecb0ee005a86d2ea1cd95938c6fb15995dca",null),(0,d.A)(G,"00294381ec9f25ec5af63f23a7b16d6084a6363f4b",null),(0,d.A)(H,"0034a229323e97b080590cd5f66eac9f35c36ac57f",null),(0,d.A)(I,"0059ee3de2c00051f1eb386a230ed7b555f02e51c8",null),(0,d.A)(J,"4082ef99d84b609643278f415d9cdf338e37b0f430",null)},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;return"dev"===b?{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"}:"npx"===b?{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"}:"vps"===b?{ok:!1,context:b,command:"bash scripts/vps-update.sh",backupDir:d,needsRestart:!0,message:"On a VPS, update from a shell: `bash scripts/vps-update.sh` (or `npm install -g constellai@latest && sudo systemctl restart constella`). Your data in ~/.constella — DB, secrets, workspaces — is preserved; migrations run on the next boot."}: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,"40c976b278685e202b9a1713e53843aaf1c1f5d19f",null),(0,d.A)(y,"40a6b07acdef8a3d7decbb3abd27a5e167f75ea818",null),(0,d.A)(z,"00469d0a33e26f3477a84aa01ef49f536b57179be4",null),(0,d.A)(A,"00ef40b521ba111ae5cd40d15fc2fbe1a31aec511b",null),(0,d.A)(B,"0057467d49ea85739735767ccea6db330c76faeec8",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"}},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)}}};
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,"00b24dc130bc1e5eb0ac672c3856acfaf53e5b81b4",null),(0,d.A)(y,"4042f2f471cd3fcbbdd23718617e2a3b647e85c624",null),(0,d.A)(z,"4056398e3a5dc6b605113e39a53c7771faef947710",null),(0,d.A)(A,"405bfac9c02c21bc6cadab55060d4b8a7cca6bed3a",null),(0,d.A)(B,"00cab1232ac0c1bd98e8401284969eeb045dd6e7e9",null),(0,d.A)(D,"005ee9ed1e496399593a288ca3e537ae07f83e5e3a",null),(0,d.A)(E,"400f44e38930e1c66530308dbc190c5bbd4e74101e",null),(0,d.A)(F,"4011fcde093f42112b28cc541723dbc225d6a714e5",null),(0,d.A)(G,"00e527fcbd0a7e3ebc46bb760dcd243017c97e03ba",null),(0,d.A)(H,"00e3350a78e964833511c5fa855d9b1a1e4153619e",null),(0,d.A)(I,"0018c89ba8d786c75ed1a506b878e976ef6879a79f",null),(0,d.A)(J,"409cdc6f254d50e330fe025ba8cfd74d25872f00d8",null)},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;return"dev"===b?{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"}:"npx"===b?{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"}:"vps"===b?{ok:!1,context:b,command:"bash scripts/vps-update.sh",backupDir:d,needsRestart:!0,message:"On a VPS, update from a shell: `bash scripts/vps-update.sh` (or `npm install -g constellai@latest && sudo systemctl restart constella`). Your data in ~/.constella — DB, secrets, workspaces — is preserved; migrations run on the next boot."}: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,"400cec94da616f674817927789cb26482bba22cfbd",null),(0,d.A)(y,"401b5fdc3d8fb095679094c177536777e53f9c06fd",null),(0,d.A)(z,"00a3d5009503b1be561d7520e2b68ce0587a6740c0",null),(0,d.A)(A,"004385fd0fd07982e82eeb3fc0a146319a0c4cddcf",null),(0,d.A)(B,"009be10f119924c7536924e7aa423be2a59d4a0f40",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"}},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)}}};
@@ -14,7 +14,7 @@ ${r}`,`
14
14
  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:
15
15
  ${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:
16
16
 
17
- ${c}`}):{ok:!1,error:"No conversation to plan from yet."}}(0,c(29635).D)([t,u,v,w,x,y,z,A,B,C,D,E,F]),(0,d.A)(t,"00a25f4a14c45f0cf711f2df9db27b2b26622d594d",null),(0,d.A)(u,"60e4a6566e54b290d19271fe219282f90bb5b87388",null),(0,d.A)(v,"007caca772011cb81eeb46a7011c6efe7c31f2c658",null),(0,d.A)(w,"00e90bbf2c3b50d73ef1863c6fda24ebc93b9b581f",null),(0,d.A)(x,"40084a275c8f82569ddc46cea40f7137fbab8a94df",null),(0,d.A)(y,"40c506ee382d6be0fcdcf2ddd0f8a435d2899a7851",null),(0,d.A)(z,"40f6cefa4c49de146bff195564cb4bad726f983b34",null),(0,d.A)(A,"402bb268e190517dba3ec80f63990e0c670ea8a39e",null),(0,d.A)(B,"40b69487299bb4a1bab6c65000956c09fee65f0c7b",null),(0,d.A)(C,"40c5b75b1eefde8e72991d1fa7b0cb3586972e7ca1",null),(0,d.A)(D,"40ce8ff3acb6cd90002b4b6d13915dd41eb2ccd7c1",null),(0,d.A)(E,"404f7094a24e2085f8d70af3a52425122969b3354b",null),(0,d.A)(F,"400c13ebb74975c10f9020d359252f44b19d1f0a9c",null)},96930:(a,b,c)=>{c.d(b,{generatePlanFor:()=>v,G:()=>u,startNewWorkFor:()=>w});var d=c(77598),e=c(1782),f=c(7852),g=c(83550),h=c(80280),i=c(25533),j=c(3188),k=c(20850),l=c(78848),m=c(18612);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".
17
+ ${c}`}):{ok:!1,error:"No conversation to plan from yet."}}(0,c(29635).D)([t,u,v,w,x,y,z,A,B,C,D,E,F]),(0,d.A)(t,"003febf4e7267ca98f9eb9b6dc436d9a4e2b65e7ca",null),(0,d.A)(u,"60eb6b77d80b13f25b83a55396fb595ef8099342e7",null),(0,d.A)(v,"0013275f5daef5cf97d9d2a604a968874bb91db236",null),(0,d.A)(w,"005cb5bb28bc19f2d5ed503834ad00dc741d78a51d",null),(0,d.A)(x,"40278c98b65eb6a42ba19ed36299f6ada32c9eea34",null),(0,d.A)(y,"409c5ecd26ccaec10a2e66bce9e702bf46d8cc21e0",null),(0,d.A)(z,"40aa8d10fe1fc7b3d00fb58cf6686d7e66a57a82de",null),(0,d.A)(A,"4067ca80a5da742c05fbb50e0a730ae4a24a79b000",null),(0,d.A)(B,"4096425e44cce93bbec45707a6319457d2f7f2d3cb",null),(0,d.A)(C,"4049840f63a4a408162f9433c695913d7d732f0cc3",null),(0,d.A)(D,"40a5db20e92cac0094f3ce6250a17ec8d42fc4d887",null),(0,d.A)(E,"409cee80b303bd917177f77ad49c5e1746aca73a8a",null),(0,d.A)(F,"408d0690db0d1f458d2753a2a425c6d0588dddbf99",null)},96930:(a,b,c)=>{c.d(b,{generatePlanFor:()=>v,G:()=>u,startNewWorkFor:()=>w});var d=c(77598),e=c(1782),f=c(7852),g=c(83550),h=c(80280),i=c(25533),j=c(3188),k=c(20850),l=c(78848),m=c(18612);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".
18
18
 
19
19
  Read in THIS order, then go deeper:
20
20
  1. Docs first: README*, CHANGELOG*, docs/**, any install/setup/usage guides, CONTRIBUTING.
@@ -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}})).stdout.match(/https:\/\/github\.com\/\S+/)??[])[0];a&&(j.prUrl=a)}}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,"005ddda8f3a66691e67c306bef9847b8667b14a402",null),(0,d.A)(y,"40b0d489887ec87dcd0af108eff7a37cc4e9b1a6c4",null),(0,d.A)(z,"40af5bca204e9f035ec0c0bd88607d6f3ae5a5c86a",null),(0,d.A)(A,"403aa6627a3967b3dc05f17b294d6cdab5936cfd79",null),(0,d.A)(B,"0013b115fe3dd6dca93e3e55077f8d3a2c1bd17c46",null),(0,d.A)(D,"00f6740a30935cd4715d852275b45ba0077d0b30b3",null),(0,d.A)(E,"40ceb770c35ed6eac8bc8da767e3d4760ba86b2e1c",null),(0,d.A)(F,"4070dfecb0ee005a86d2ea1cd95938c6fb15995dca",null),(0,d.A)(G,"00294381ec9f25ec5af63f23a7b16d6084a6363f4b",null),(0,d.A)(H,"0034a229323e97b080590cd5f66eac9f35c36ac57f",null),(0,d.A)(I,"0059ee3de2c00051f1eb386a230ed7b555f02e51c8",null),(0,d.A)(J,"4082ef99d84b609643278f415d9cdf338e37b0f430",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,"00b24dc130bc1e5eb0ac672c3856acfaf53e5b81b4",null),(0,d.A)(y,"4042f2f471cd3fcbbdd23718617e2a3b647e85c624",null),(0,d.A)(z,"4056398e3a5dc6b605113e39a53c7771faef947710",null),(0,d.A)(A,"405bfac9c02c21bc6cadab55060d4b8a7cca6bed3a",null),(0,d.A)(B,"00cab1232ac0c1bd98e8401284969eeb045dd6e7e9",null),(0,d.A)(D,"005ee9ed1e496399593a288ca3e537ae07f83e5e3a",null),(0,d.A)(E,"400f44e38930e1c66530308dbc190c5bbd4e74101e",null),(0,d.A)(F,"4011fcde093f42112b28cc541723dbc225d6a714e5",null),(0,d.A)(G,"00e527fcbd0a7e3ebc46bb760dcd243017c97e03ba",null),(0,d.A)(H,"00e3350a78e964833511c5fa855d9b1a1e4153619e",null),(0,d.A)(I,"0018c89ba8d786c75ed1a506b878e976ef6879a79f",null),(0,d.A)(J,"409cdc6f254d50e330fe025ba8cfd74d25872f00d8",null)}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/T0ETI55t9tc9pi5i_CGOe/_buildManifest.js","static/T0ETI55t9tc9pi5i_CGOe/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-222e3894b78c67db.js","static/chunks/23550918-ff694f70f4b0648c.js","static/chunks/6834-4759af1ce7d95fb6.js","static/chunks/main-app-761880af2b6f1962.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/N4KMSOY3i-qyXrbfm97sO/_buildManifest.js","static/N4KMSOY3i-qyXrbfm97sO/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-94c9726ec79ee4b4.js","static/chunks/23550918-ff694f70f4b0648c.js","static/chunks/6834-4759af1ce7d95fb6.js","static/chunks/main-app-761880af2b6f1962.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- self.__REACT_LOADABLE_MANIFEST='{"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_app":{"id":5920,"files":["static/chunks/5920.6451a68b63918988.js"]},"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_error":{"id":7509,"files":["static/chunks/7509.721cd47a931c5518.js"]}}';
1
+ self.__REACT_LOADABLE_MANIFEST='{"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_app":{"id":5920,"files":["static/chunks/5920.6451a68b63918988.js"]},"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_error":{"id":9890,"files":["static/chunks/7509.8d3cbebb5fbe6247.js"]}}';
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-222e3894b78c67db.js"/><script src="/_next/static/chunks/23550918-ff694f70f4b0648c.js" async=""></script><script src="/_next/static/chunks/6834-4759af1ce7d95fb6.js" async=""></script><script src="/_next/static/chunks/main-app-761880af2b6f1962.js" async=""></script><script src="/_next/static/chunks/3219-9684aa1c634212de.js" async=""></script><script src="/_next/static/chunks/app/error-09899a13c38b6e89.js" async=""></script><script src="/_next/static/chunks/app/global-error-c2ea8fef715f226d.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-222e3894b78c67db.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8926,[],\"\"]\n3:I[5419,[\"3219\",\"static/chunks/3219-9684aa1c634212de.js\",\"8039\",\"static/chunks/app/error-09899a13c38b6e89.js\"],\"default\"]\n4:I[5524,[],\"\"]\n5:I[4135,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n9:I[4135,[],\"ViewportBoundary\"]\nb:I[4135,[],\"MetadataBoundary\"]\nd:I[6279,[\"3219\",\"static/chunks/3219-9684aa1c634212de.js\",\"4219\",\"static/chunks/app/global-error-c2ea8fef715f226d.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,null]},null,false,\"$@8\"]},null,false,\"$@8\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"T0ETI55t9tc9pi5i_CGOe\"}\n"])</script><script>self.__next_f.push([1,"e:[]\n8:\"$We\"\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:null\nc:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-94c9726ec79ee4b4.js"/><script src="/_next/static/chunks/23550918-ff694f70f4b0648c.js" async=""></script><script src="/_next/static/chunks/6834-4759af1ce7d95fb6.js" async=""></script><script src="/_next/static/chunks/main-app-761880af2b6f1962.js" async=""></script><script src="/_next/static/chunks/3219-9684aa1c634212de.js" async=""></script><script src="/_next/static/chunks/app/error-09899a13c38b6e89.js" async=""></script><script src="/_next/static/chunks/app/global-error-c2ea8fef715f226d.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-94c9726ec79ee4b4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8926,[],\"\"]\n3:I[5419,[\"3219\",\"static/chunks/3219-9684aa1c634212de.js\",\"8039\",\"static/chunks/app/error-09899a13c38b6e89.js\"],\"default\"]\n4:I[5524,[],\"\"]\n5:I[4135,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n9:I[4135,[],\"ViewportBoundary\"]\nb:I[4135,[],\"MetadataBoundary\"]\nd:I[6279,[\"3219\",\"static/chunks/3219-9684aa1c634212de.js\",\"4219\",\"static/chunks/app/global-error-c2ea8fef715f226d.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,null]},null,false,\"$@8\"]},null,false,\"$@8\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"N4KMSOY3i-qyXrbfm97sO\"}\n"])</script><script>self.__next_f.push([1,"e:[]\n8:\"$We\"\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:null\nc:[]\n"])</script></body></html>