constellai 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +1 -1
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/(app)/activity/page.js +2 -2
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/agents/[handle]/page.js +2 -2
  9. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/code/page.js +2 -2
  12. package/.next/server/app/(app)/code/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/config/page.js +2 -2
  15. package/.next/server/app/(app)/config/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/costs/page.js +2 -2
  18. package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/cron/page.js +2 -2
  21. package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/dashboard/page.js +2 -2
  24. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/design/page.js +53 -53
  27. package/.next/server/app/(app)/design/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/docs/[id]/page.js +2 -2
  30. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
  31. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(app)/docs/page.js +2 -2
  33. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  34. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(app)/github/page.js +2 -2
  36. package/.next/server/app/(app)/github/page.js.nft.json +1 -1
  37. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(app)/goals/page.js +2 -2
  39. package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
  40. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/(app)/inbox/page.js +2 -2
  42. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
  43. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/(app)/knowledge/page.js +3 -3
  45. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
  46. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/(app)/models/page.js +2 -2
  48. package/.next/server/app/(app)/models/page.js.nft.json +1 -1
  49. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/(app)/notifications/page.js +2 -2
  51. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
  52. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/(app)/org/page.js +4 -4
  54. package/.next/server/app/(app)/org/page.js.nft.json +1 -1
  55. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/(app)/organizations/page.js +1 -1
  57. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
  58. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/(app)/page.js +3 -3
  60. package/.next/server/app/(app)/page.js.nft.json +1 -1
  61. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/(app)/planner/page.js +2 -2
  63. package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
  64. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/(app)/plugins/page.js +2 -2
  66. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
  67. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/(app)/pm/page.js +2 -2
  69. package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
  70. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/(app)/prepare-deploy/page.js +3 -3
  72. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
  73. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/(app)/profile/page.js +2 -2
  75. package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
  76. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/(app)/pulse/page.js +2 -2
  78. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
  79. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/(app)/reports/[id]/page.js +2 -2
  81. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
  82. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/(app)/reports/page.js +3 -3
  84. package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
  85. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
  86. package/.next/server/app/(app)/routines/page.js +2 -2
  87. package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
  88. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
  89. package/.next/server/app/(app)/search/page.js +2 -2
  90. package/.next/server/app/(app)/search/page.js.nft.json +1 -1
  91. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
  92. package/.next/server/app/(app)/security/page.js +2 -2
  93. package/.next/server/app/(app)/security/page.js.nft.json +1 -1
  94. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/(app)/skills/page.js +3 -3
  96. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  97. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/(app)/tasks/page.js +2 -2
  99. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
  100. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/(app)/test-dev/page.js +1 -1
  102. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
  103. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/(app)/update/page.js +3 -3
  105. package/.next/server/app/(app)/update/page.js.nft.json +1 -1
  106. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
  107. package/.next/server/app/(auth)/login/page.js +2 -2
  108. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/(auth)/onboarding/page.js +2 -2
  110. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/_global-error.html +1 -1
  113. package/.next/server/app/_global-error.rsc +1 -1
  114. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  116. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  117. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  119. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/cron/tick/route.js +2 -2
  122. package/.next/server/app/api/sync/file/route.js +1 -1
  123. package/.next/server/app/api/telegram/poll/route.js +3 -3
  124. package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
  125. package/.next/server/app-paths-manifest.json +1 -1
  126. package/.next/server/chunks/{2718.js → 1020.js} +16 -16
  127. package/.next/server/chunks/1033.js +1 -1
  128. package/.next/server/chunks/1986.js +1 -1
  129. package/.next/server/chunks/2118.js +1 -1
  130. package/.next/server/chunks/3489.js +12 -0
  131. package/.next/server/chunks/3744.js +1 -0
  132. package/.next/server/chunks/3949.js +21 -0
  133. package/.next/server/chunks/3987.js +3 -3
  134. package/.next/server/chunks/{6296.js → 4285.js} +2 -2
  135. package/.next/server/chunks/4288.js +1 -1
  136. package/.next/server/chunks/5864.js +1 -0
  137. package/.next/server/chunks/5878.js +1 -1
  138. package/.next/server/chunks/7867.js +1 -1
  139. package/.next/server/chunks/7905.js +1 -1
  140. package/.next/server/chunks/8134.js +1 -1
  141. package/.next/server/chunks/8211.js +1 -1
  142. package/.next/server/chunks/907.js +1 -1
  143. package/.next/server/chunks/9344.js +3 -3
  144. package/.next/server/chunks/9677.js +1 -1
  145. package/.next/server/chunks/9712.js +1 -0
  146. package/.next/server/middleware-build-manifest.js +1 -1
  147. package/.next/server/pages/500.html +1 -1
  148. package/.next/server/server-reference-manifest.js +1 -1
  149. package/.next/server/server-reference-manifest.json +1 -1
  150. package/.next/static/chunks/2316-6073e6bff34fc370.js +1 -0
  151. package/.next/static/chunks/2841-d91ec96d9d4e4ea9.js +4 -0
  152. package/.next/static/chunks/7036-191d3c139e8a80e3.js +1 -0
  153. package/.next/static/chunks/{7218-9fbc00e6cec34afa.js → 7218-6f2027c26145f70e.js} +2 -2
  154. package/.next/static/chunks/7852-ec66d38fa70e2faf.js +1 -0
  155. package/.next/static/chunks/{9279-467412113ad55642.js → 9279-4121fee5f86d247a.js} +1 -1
  156. package/.next/static/chunks/app/(app)/activity/{page-c6f3b54a1401c391.js → page-43354bff51b3f428.js} +1 -1
  157. package/.next/static/chunks/app/(app)/agents/[handle]/page-4f412cc37b2fc0fb.js +1 -0
  158. package/.next/static/chunks/app/(app)/code/page-4984a3a3197059b0.js +1 -0
  159. package/.next/static/chunks/app/(app)/config/page-b6bac0f1d9e34087.js +1 -0
  160. package/.next/static/chunks/app/(app)/costs/page-db8e0969e8091be9.js +1 -0
  161. package/.next/static/chunks/app/(app)/cron/page-ddc34be80c5d09a0.js +1 -0
  162. package/.next/static/chunks/app/(app)/dashboard/page-09096a31626dd4e7.js +1 -0
  163. package/.next/static/chunks/app/(app)/design/{page-dac84fe4a5e31454.js → page-502314daa85d634f.js} +3 -3
  164. package/.next/static/chunks/app/(app)/docs/[id]/page-77a60e909e38baec.js +1 -0
  165. package/.next/static/chunks/app/(app)/docs/page-54209ecfbc3d5d38.js +1 -0
  166. package/.next/static/chunks/app/(app)/github/page-d611a9cf6e8fa43b.js +1 -0
  167. package/.next/static/chunks/app/(app)/goals/{page-49682d30eb297a16.js → page-376f360adec55145.js} +1 -1
  168. package/.next/static/chunks/app/(app)/inbox/page-359b38ce09f36e3b.js +12 -0
  169. package/.next/static/chunks/app/(app)/knowledge/page-64c9fe3eb27afd11.js +1 -0
  170. package/.next/static/chunks/app/(app)/layout-15c2a92e66afca85.js +1 -0
  171. package/.next/static/chunks/app/(app)/models/page-2b99a50754145e5d.js +1 -0
  172. package/.next/static/chunks/app/(app)/notifications/page-9d957a9d0749993e.js +12 -0
  173. package/.next/static/chunks/app/(app)/org/page-e3a50d3f938ed3d9.js +12 -0
  174. package/.next/static/chunks/app/(app)/organizations/page-f8da2c9f2a03054f.js +1 -0
  175. package/.next/static/chunks/app/(app)/{page-f2a05b3f92886a0c.js → page-bfb069d7af9b5234.js} +1 -1
  176. package/.next/static/chunks/app/(app)/planner/{page-4241aa863f23a96d.js → page-3afcd4ee94db4214.js} +1 -1
  177. package/.next/static/chunks/app/(app)/plugins/page-cb068f8ace7d27d8.js +1 -0
  178. package/.next/static/chunks/app/(app)/pm/page-4c068e3598d170c2.js +1 -0
  179. package/.next/static/chunks/app/(app)/prepare-deploy/page-edda2129e990cd6a.js +1 -0
  180. package/.next/static/chunks/app/(app)/profile/page-803ebc37070d6293.js +1 -0
  181. package/.next/static/chunks/app/(app)/pulse/page-740075a048c0bff9.js +1 -0
  182. package/.next/static/chunks/app/(app)/reports/[id]/page-ddc34be80c5d09a0.js +1 -0
  183. package/.next/static/chunks/app/(app)/reports/page-a7d218e3211a08b2.js +1 -0
  184. package/.next/static/chunks/app/(app)/routines/page-d62a29827c6a0c28.js +1 -0
  185. package/.next/static/chunks/app/(app)/search/page-12585c429bc2a813.js +1 -0
  186. package/.next/static/chunks/app/(app)/security/page-ef48ae9664751090.js +1 -0
  187. package/.next/static/chunks/app/(app)/skills/page-7cbe9a8a4897a338.js +1 -0
  188. package/.next/static/chunks/app/(app)/tasks/page-e29a00e7cc8cfc2a.js +1 -0
  189. package/.next/static/chunks/app/(app)/test-dev/page-5cada58a89bbc540.js +1 -0
  190. package/.next/static/chunks/app/(app)/update/page-3611776014726012.js +1 -0
  191. package/.next/static/chunks/app/(auth)/login/page-6dfe2889305e3167.js +1 -0
  192. package/.next/static/chunks/app/(auth)/onboarding/page-f6e02c15b3d27f55.js +1 -0
  193. package/.next/trace-build +1 -1
  194. package/CHANGELOG.md +19 -0
  195. package/README.md +1 -1
  196. package/README.pt-BR.md +1 -1
  197. package/bin/worker.mjs +31 -11
  198. package/docs/UPDATE.md +11 -3
  199. package/package.json +1 -1
  200. package/.next/server/chunks/1881.js +0 -1
  201. package/.next/server/chunks/2170.js +0 -1
  202. package/.next/server/chunks/5580.js +0 -12
  203. package/.next/server/chunks/8013.js +0 -1
  204. package/.next/server/chunks/8236.js +0 -21
  205. package/.next/static/chunks/1352-1e5e6e2ea57a0821.js +0 -4
  206. package/.next/static/chunks/2171-7d8bf2df1d540a82.js +0 -1
  207. package/.next/static/chunks/2636-13f5de5bc9726cc3.js +0 -1
  208. package/.next/static/chunks/8834-3c7f77ceebbeb079.js +0 -1
  209. package/.next/static/chunks/app/(app)/agents/[handle]/page-38922257bbd82998.js +0 -1
  210. package/.next/static/chunks/app/(app)/code/page-51869dcdc0b0a50f.js +0 -1
  211. package/.next/static/chunks/app/(app)/config/page-ccaa231f4f64912a.js +0 -1
  212. package/.next/static/chunks/app/(app)/costs/page-864fe3407d0dc6c0.js +0 -1
  213. package/.next/static/chunks/app/(app)/cron/page-7be322a05e559da8.js +0 -1
  214. package/.next/static/chunks/app/(app)/dashboard/page-f181d957748f8f27.js +0 -1
  215. package/.next/static/chunks/app/(app)/docs/[id]/page-74da9f8a13f14a07.js +0 -1
  216. package/.next/static/chunks/app/(app)/docs/page-689045673b039708.js +0 -1
  217. package/.next/static/chunks/app/(app)/github/page-7b8ae16a0cd14bd3.js +0 -1
  218. package/.next/static/chunks/app/(app)/inbox/page-000769b0e849a435.js +0 -12
  219. package/.next/static/chunks/app/(app)/knowledge/page-c329694479ee85cb.js +0 -1
  220. package/.next/static/chunks/app/(app)/layout-21e16931eac987ab.js +0 -1
  221. package/.next/static/chunks/app/(app)/models/page-3e92db0acfbf844b.js +0 -1
  222. package/.next/static/chunks/app/(app)/notifications/page-646bdc5a20cac43b.js +0 -12
  223. package/.next/static/chunks/app/(app)/org/page-08141e549fea39ad.js +0 -12
  224. package/.next/static/chunks/app/(app)/organizations/page-b5617487ef2255ce.js +0 -1
  225. package/.next/static/chunks/app/(app)/plugins/page-2e96b6b32d288dca.js +0 -1
  226. package/.next/static/chunks/app/(app)/pm/page-182d8faa90ed2643.js +0 -1
  227. package/.next/static/chunks/app/(app)/prepare-deploy/page-15ba476bf716d7e2.js +0 -1
  228. package/.next/static/chunks/app/(app)/profile/page-e18ad0668e7e7305.js +0 -1
  229. package/.next/static/chunks/app/(app)/pulse/page-d528de016fb3ec49.js +0 -1
  230. package/.next/static/chunks/app/(app)/reports/[id]/page-7be322a05e559da8.js +0 -1
  231. package/.next/static/chunks/app/(app)/reports/page-67f64d0e809c2bca.js +0 -1
  232. package/.next/static/chunks/app/(app)/routines/page-cdb5f6e2ca82640b.js +0 -1
  233. package/.next/static/chunks/app/(app)/search/page-a91bfaab25cd6aff.js +0 -1
  234. package/.next/static/chunks/app/(app)/security/page-79d44198dd58f2dd.js +0 -1
  235. package/.next/static/chunks/app/(app)/skills/page-2af4de1e97575285.js +0 -1
  236. package/.next/static/chunks/app/(app)/tasks/page-c975303be89aaee5.js +0 -1
  237. package/.next/static/chunks/app/(app)/test-dev/page-2e0b655d1a79a326.js +0 -1
  238. package/.next/static/chunks/app/(app)/update/page-a1f8b007304e9bdc.js +0 -1
  239. package/.next/static/chunks/app/(auth)/login/page-a8d0d8f09f9794ef.js +0 -1
  240. package/.next/static/chunks/app/(auth)/onboarding/page-7ce367a9bc0bcbeb.js +0 -1
  241. /package/.next/static/{PjU7M0g-BKQT9AfTuZvgl → pNJ45PWSRHWRCwN5yZA5q}/_buildManifest.js +0 -0
  242. /package/.next/static/{PjU7M0g-BKQT9AfTuZvgl → pNJ45PWSRHWRCwN5yZA5q}/_ssgManifest.js +0 -0
package/CHANGELOG.md CHANGED
@@ -12,6 +12,25 @@ may still introduce breaking changes while the platform stabilises.
12
12
 
13
13
  ---
14
14
 
15
+ ## [0.3.11] — "Onboarding polish: provider logos · no double-handoff · quiet sync"
16
+
17
+ ### Fixed
18
+ - **"Hand off to Ada" could be double-submitted.** The button re-enabled and the progress bar reset when the
19
+ `useTransition` settled — which happens *before* the slow navigation to the Planner finishes — letting the
20
+ operator click again and kick off a second setup. The button + Back now stay locked and the bar pinned at
21
+ 100% through the redirect.
22
+ - **Worker sync flooded the log with `sync failed: fetch failed`.** A workspace seed creates hundreds of files
23
+ at once; the watcher fanned out hundreds of simultaneous `fetch()`es and exhausted undici's socket pool.
24
+ Sync POSTs are now concurrency-capped (8) and retry transient failures, and the watcher starts only after
25
+ the server is up (no boot-time failures).
26
+
27
+ ### Changed
28
+ - **Provider logos.** The detected-provider grid (onboarding) now shows real brand icons for the coding-agent
29
+ CLIs that have them — Cursor, Cline, GitHub Copilot, OpenCode, Kilo Code, Hermes (Nous), Windsurf — instead
30
+ of letter monograms. Aider / OpenClaw keep the monogram (no upstream icon).
31
+
32
+ ---
33
+
15
34
  ## [0.3.10] — "Hardening: fail-loud on an incomplete DB schema + passkey verify diagnostics"
16
35
 
17
36
  ### Changed
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  <p align="center">
7
7
  <a href="#-quickstart"><img alt="npx constella" src="https://img.shields.io/badge/npx-constellai-7c3aed?style=for-the-badge&logo=npm&logoColor=white"></a>
8
- <img alt="version" src="https://img.shields.io/badge/version-0.3.10-22d3ee?style=for-the-badge">
8
+ <img alt="version" src="https://img.shields.io/badge/version-0.3.11-22d3ee?style=for-the-badge">
9
9
  <img alt="node" src="https://img.shields.io/badge/node-%E2%89%A520-3fb950?style=for-the-badge&logo=node.js&logoColor=white">
10
10
  <img alt="license" src="https://img.shields.io/badge/license-MIT-a78bfa?style=for-the-badge">
11
11
  <img alt="agent CLIs" src="https://img.shields.io/badge/agent%20CLIs-claude%20%C2%B7%20codex%20%C2%B7%20%2B8-e879f9?style=for-the-badge">
package/README.pt-BR.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  <p align="center">
7
7
  <a href="#-início-rápido"><img alt="npx constella" src="https://img.shields.io/badge/npx-constellai-7c3aed?style=for-the-badge&logo=npm&logoColor=white"></a>
8
- <img alt="version" src="https://img.shields.io/badge/version-0.3.10-22d3ee?style=for-the-badge">
8
+ <img alt="version" src="https://img.shields.io/badge/version-0.3.11-22d3ee?style=for-the-badge">
9
9
  <img alt="node" src="https://img.shields.io/badge/node-%E2%89%A520-3fb950?style=for-the-badge&logo=node.js&logoColor=white">
10
10
  <img alt="license" src="https://img.shields.io/badge/license-MIT-a78bfa?style=for-the-badge">
11
11
  <img alt="agent CLIs" src="https://img.shields.io/badge/CLIs%20de%20agente-claude%20%C2%B7%20codex%20%C2%B7%20%2B8-e879f9?style=for-the-badge">
package/bin/worker.mjs CHANGED
@@ -71,16 +71,36 @@ function parse(abs) {
71
71
  }
72
72
 
73
73
  const pending = new Map();
74
+
75
+ // Cap concurrent sync POSTs. A workspace seed (onboarding) creates HUNDREDS of files at once; without a cap
76
+ // the debounced flush fans out hundreds of simultaneous fetch()es and exhausts undici's socket pool → a flood
77
+ // of "sync failed: fetch failed". Cap to a handful, queue the rest, and retry transient failures (the file is
78
+ // on disk regardless; retrying keeps the DB index correct without the noise).
79
+ const SYNC_CONCURRENCY = 8;
80
+ let syncActive = 0;
81
+ const syncQueue = [];
82
+ function pumpSync() {
83
+ while (syncActive < SYNC_CONCURRENCY && syncQueue.length) {
84
+ syncActive++;
85
+ syncQueue.shift()().finally(() => { syncActive--; pumpSync(); });
86
+ }
87
+ }
88
+ function enqueueSync(orgId, rel, event) { syncQueue.push(() => syncFile(orgId, rel, event)); pumpSync(); }
89
+
74
90
  async function syncFile(orgId, rel, event) {
75
- try {
76
- const res = await fetch(BASE + "/api/sync/file", {
77
- method: "POST",
78
- headers: { ...headers, "content-type": "application/json" },
79
- body: JSON.stringify({ orgId, rel, event }),
80
- });
81
- console.log(new Date().toISOString(), "sync", event, rel, res.status);
82
- } catch (e) {
83
- console.error(new Date().toISOString(), "sync failed:", e?.message ?? e);
91
+ for (let attempt = 1; attempt <= 3; attempt++) {
92
+ try {
93
+ const res = await fetch(BASE + "/api/sync/file", {
94
+ method: "POST",
95
+ headers: { ...headers, "content-type": "application/json" },
96
+ body: JSON.stringify({ orgId, rel, event }),
97
+ });
98
+ console.log(new Date().toISOString(), "sync", event, rel, res.status);
99
+ return;
100
+ } catch (e) {
101
+ if (attempt === 3) { console.error(new Date().toISOString(), "sync failed:", e?.message ?? e); return; }
102
+ await new Promise((r) => setTimeout(r, 250 * attempt)); // brief backoff, then retry the POST
103
+ }
84
104
  }
85
105
  }
86
106
  function schedule(abs, event) {
@@ -88,7 +108,7 @@ function schedule(abs, event) {
88
108
  if (!hit) return;
89
109
  const key = hit.orgId + "::" + hit.rel;
90
110
  clearTimeout(pending.get(key));
91
- pending.set(key, setTimeout(() => { pending.delete(key); syncFile(hit.orgId, hit.rel, event); }, 400));
111
+ pending.set(key, setTimeout(() => { pending.delete(key); enqueueSync(hit.orgId, hit.rel, event); }, 400));
92
112
  }
93
113
 
94
114
  function startWatcher() {
@@ -134,9 +154,9 @@ async function waitForServer() {
134
154
  }
135
155
 
136
156
  console.log(`Constella worker → tick ${BASE}/api/cron/tick every ${INTERVAL}ms; telegram poll; watching ${ORGS}`);
137
- startWatcher();
138
157
  (async () => {
139
158
  await waitForServer();
159
+ startWatcher(); // start watching only after the server can accept POSTs — no boot-time "sync failed: fetch failed"
140
160
  tick();
141
161
  setInterval(tick, INTERVAL);
142
162
  telegramLoop();
package/docs/UPDATE.md CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  ![](./assets/divider-orbit.svg)
6
6
 
7
- **Current stable release: `v0.3.10`** — hardening: the launcher now fails loud on an incomplete DB schema
8
- (instead of booting a tableless app), and passkey verify logs the real failure reason. See what changed in the
9
- [Changelog](../CHANGELOG.md) (the Update module also shows it inline as “What's new”).
7
+ **Current stable release: `v0.3.11`** — onboarding polish: real provider logos, the "Hand off to Ada" button
8
+ can no longer be double-submitted, and the worker's file-sync no longer floods the log with "fetch failed".
9
+ See what changed in the [Changelog](../CHANGELOG.md) (the Update module also shows it inline as “What's new”).
10
10
 
11
11
  > This is the page the **Update** module's “docs” button opens. It tells you, in plain terms, how to move Constella
12
12
  > to a newer version — from the app or the terminal — and how to roll back if you ever need to. Your data
@@ -24,6 +24,14 @@ it didn't earn: the updater writes the real result and the screen reflects it tr
24
24
  Latest first. The in-app **Update** module shows the changelog inline as “What's new”; this is the same history, kept
25
25
  here so the “docs” button always shows what each release added. Full detail: [Changelog](../CHANGELOG.md).
26
26
 
27
+ ### v0.3.11 — onboarding polish
28
+ - **No double-handoff.** "Hand off to Ada" stays locked through the redirect to the Planner (the button used to
29
+ re-enable mid-navigation and allow a second setup).
30
+ - **Quiet sync.** The worker caps concurrent file-sync POSTs + retries transient failures, and watches only
31
+ after the server is up — no more `sync failed: fetch failed` floods during a workspace seed.
32
+ - **Provider logos.** Real brand icons for Cursor / Cline / GitHub Copilot / OpenCode / Kilo Code / Hermes /
33
+ Windsurf in the detected-provider grid.
34
+
27
35
  ### v0.3.10 — hardening (schema guard + passkey diagnostics)
28
36
  - **Launcher fails loud on an incomplete schema** — after migrate it checks the `user` table exists; if not, it
29
37
  aborts with a clear message (instead of a tableless app that 500s `no such table: user`). This is the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "constellai",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "description": "Constella — run autonomous AI agent-companies locally: real claude/codex agents, Goals → Specs → Issues → Plans, local models, GitHub & Telegram, all from one cosmic control plane.",
5
5
  "//name": "Published as `constellai` (the unscoped `constella` was taken). Ships BOTH a `constellai` and a `constella` bin (same launcher): `npx constellai` needs a bin matching the package name to run on Windows, and a global install also gives the short `constella` command.",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- "use strict";exports.id=1881,exports.ids=[1881,2392],exports.modules={1186:(a,b,c)=>{c.d(b,{K:()=>e});var d=c(26021);let e=(0,d.createServerReference)("40e1d428a35224b686669e65eb8c74dc34e5ce1d04",d.callServer,void 0,d.findSourceMapURL,"previewFrameableAction")},9450:(a,b,c)=>{c.d(b,{Fy:()=>m,KD:()=>q,Rr:()=>l,TH:()=>s,Xu:()=>r,j0:()=>n,nx:()=>o,zC:()=>p});var d=c(80501),e=c(3770),f=c(96405),g=c(99398),h=c(62758),i=c(88193),j=c(17730),k=c(55593);async function l(){let{org:a,workspace:b}=await (0,f.nP)(),c=await (0,g.ZF)(b.id,a.id);return(0,e.revalidatePath)("/test-dev"),c}async function m(){let{workspace:a}=await (0,f.nP)(),b=await (0,g.n9)(a.id);return(0,e.revalidatePath)("/test-dev"),b}async function n(){let{workspace:a}=await (0,f.nP)();return(0,g.CS)(a.id)}async function o(){let{org:a,workspace:b}=await (0,f.nP)(),c=(0,g.CS)(b.id);if("running"!==c.status&&"starting"!==c.status&&(c=await (0,g.ZF)(b.id,a.id)),!c.url||"running"!==c.status&&"starting"!==c.status)return{ok:!1,error:"The dev server isn't running — start the app first."};let d=await (0,h.nK)(b.id,c.url);return d?{ok:!0,url:d.url}:{ok:!1,error:"Could not start the inspect proxy."}}async function p(){let{workspace:a}=await (0,f.nP)();return(0,h.hA)(a.id),{ok:!0}}async function q(a){if(await (0,f.nP)(),!/^https?:\/\/(127\.0\.0\.1|localhost)(:\d+)?/i.test(a))return{frameable:!0};try{let b=await fetch(a,{redirect:"manual",signal:AbortSignal.timeout(3e3)}),c=(b.headers.get("x-frame-options")||"").toLowerCase(),d=(b.headers.get("content-security-policy")||"").toLowerCase(),e=/frame-ancestors\s+([^;]+)/.exec(d)?.[1]??"",f=c.includes("deny")||c.includes("sameorigin"),g=!!e&&!/(\*|localhost|127\.0\.0\.1)/.test(e);return{frameable:!(f||g)}}catch{return{frameable:!0}}}async function r(a){let{org:b,workspace:c}=await (0,f.nP)(),d=a?.issueId?await (0,i.B)(c.id,a.issueId):void 0,g=await (0,i.z)(c.id,b.id,{goalId:a?.goalId,issueId:a?.issueId,routes:d,by:"operator"});return(0,e.revalidatePath)("/test-dev"),g}async function s(a,b){let{workspace:c}=await (0,f.nP)();return await (0,j.vE)(c.id,{kind:"validation",refType:"validation",refId:a,title:`Validate ${a}`,detail:b.slice(0,500)}),await (0,k.I)(c.id,{kind:"review",text:`Validation requested — ${a}`,detail:b.slice(0,300)}),(0,e.revalidatePath)("/inbox"),{ok:!0}}(0,c(64185).D)([l,m,n,o,p,q,r,s]),(0,d.A)(l,"001c80e5c76a900238fcefc34ad7fb27d2674c43b3",null),(0,d.A)(m,"00d1bff8cab30eda9c022a4bf2bf5b522c0b9c9f87",null),(0,d.A)(n,"00b498e03039c3b92608017ce7cca973d20d814eb9",null),(0,d.A)(o,"00cc6a4a8d7fbc1c44ae2272bd07ec8b2505315ca0",null),(0,d.A)(p,"00dcead2b0a30143fabfb7089cd18130a9e2493036",null),(0,d.A)(q,"40e1d428a35224b686669e65eb8c74dc34e5ce1d04",null),(0,d.A)(r,"40c3b9140f05ada027c6e018f19b0cd88916d79baa",null),(0,d.A)(s,"60eebdcd0502ac56444fb6454b2a523d2998fb16ae",null)},13389:(a,b,c)=>{c.d(b,{ViewChrome:()=>h});var d=c(40201),e=c(77758),f=c(3218),g=c(71955);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})]})}},35023:(a,b,c)=>{c.d(b,{R:()=>e});var d=c(26021);let e=(0,d.createServerReference)("001c80e5c76a900238fcefc34ad7fb27d2674c43b3",d.callServer,void 0,d.findSourceMapURL,"startDevServerAction")},41323:(a,b,c)=>{c.d(b,{ViewChrome:()=>d});let d=(0,c(97879).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")},47385:(a,b,c)=>{c.d(b,{l:()=>g});var d=c(46309),e=c(34925);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)}},51439:(a,b,c)=>{c.d(b,{pM:()=>z,lP:()=>y,Kg:()=>x,eU:()=>B,PG:()=>A});var d=c(80501),e=c(96405),f=c(90127),g=c(59627),h=c(24582);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(52392),k=c(73024),l=c(76760),m=c(48161),n=c(31421),o=c(37989);let p=()=>new Date().toISOString().replace(/[:.]/g,"-"),q=()=>(0,l.join)((0,o.r$)(),"backups","last-update.json");async function r(){let a=await (0,j.checkForUpdate)(!0),b=i(),c=a.command;if(!a.updateAvailable)return{ok:!0,context:b,command:c,message:"Already up to date."};let d=function(){try{let a=(0,o.r$)(),b=(0,l.join)(a,"backups",p());for(let c of((0,k.mkdirSync)(b,{recursive:!0}),[".env","constella.db","constella.db-wal","constella.db-shm"])){let d=(0,l.join)(a,c);if((0,k.existsSync)(d))try{(0,k.copyFileSync)(d,(0,l.join)(b,c))}catch{}}return b}catch{return null}}()??void 0;if("dev"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"};if("npx"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"};if("vps"===b){var e="bash scripts/vps-update.sh";try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let b=(0,o.r$)(),c=process.env.CONSTELLA_PKG_ROOT||process.cwd(),f=(0,l.join)(c,"bin","constella-update.mjs"),g=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[f,"--quiet","--mode","vps","--home",b,...g],{detached:!0,stdio:"ignore",cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:"vps",command:e,backupDir:d,message:`Updating to ${a.latest} and restarting the service — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:"vps",command:e,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}return function(a,b,c,d){try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let e=process.env.CONSTELLA_RUN_MODE||"start",f=process.env.CONSTELLA_LAUNCHER_PID||"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(73591),t=c(54813),u=c(406),v=c(96977);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(64185).D)([x,y,z,A,B]),(0,d.A)(x,"40644e55de636cef1c787d94b0eec56070b94d360d",null),(0,d.A)(y,"40ae3fb3067456973e13f9899fb17d02e903c10635",null),(0,d.A)(z,"008ed9fe976118b805388b321772fcf38c55ff881e",null),(0,d.A)(A,"0098fd0858edaddfb6c02d1de1be8dd97b9a28589d",null),(0,d.A)(B,"00ea39c63126fa6fef31973d3d768a7cb76f836fe2",null)},52392:(a,b,c)=>{c.d(b,{checkForUpdate:()=>m});var d=c(73024),e=c(76760),f=c(90127);let g="constellai",h=null,i=a=>a.replace(/^v/,"").split("-")[0].split(".").map(a=>parseInt(a,10)||0),j=a=>a.replace(/^v/,"").split("-")[1]??"";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.json():null}catch{return null}}async function l(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 m(a=!1){let b,c,n=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"}(),o=`npm install -g ${g}@latest`;if(!a&&h&&Date.now()-h.at<216e5)return h.info;let p=await k(`https://registry.npmjs.org/${g}/latest`),q=p?.version??null,r=!!q&&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))return!1}return!j(a)&&!!j(b)}(q,n),s=null;if(r&&q){let a=await l("https://raw.githubusercontent.com/gabriel7silva/constella/main/CHANGELOG.md");s=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,q):null}let t={current:n,latest:q,updateAvailable:r,type:q?(b=i(q),c=i(n),b[0]>c[0]?"major":b[1]>c[1]?"minor":b[2]>c[2]||!j(q)&&j(n)?"patch":null):null,command:o,changelog:s};return h={at:Date.now(),info:t},t}},59627:(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"}},64543:(a,b,c)=>{c.d(b,{_:()=>g});var d=c(50727),e=c(48578),f=c(41323);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})]})}},66151:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(26021);let e=(0,d.createServerReference)("00b498e03039c3b92608017ce7cca973d20d814eb9",d.callServer,void 0,d.findSourceMapURL,"devServerStatusAction")},66408:(a,b,c)=>{c.d(b,{r$:()=>h,EX:()=>p,CS:()=>function a(b,c=""){let d=[];for(let e of l(b,c))if(e.isDir){if(m.has(e.name))continue;d.push(...a(b,e.path))}else d.push(e.path);return d},HZ:()=>j,Ci:()=>l,sL:()=>n,dx:()=>o});var d=c(73024),e=c(76760),f=c(48161),g=c(45570);function h(){return process.env.CONSTELLA_HOME?(0,g.Y)(process.env.CONSTELLA_HOME):(0,e.join)((0,f.homedir)(),".constella")}let i=new Set;function j(a){if(!/^[A-Za-z0-9_-]{6,64}$/.test(a))throw Error("Invalid orgId");let b=(0,e.join)(h(),"organizations",a,"workspace");if(!i.has(a)){i.add(a);try{let c=(0,e.join)(h(),"organizations",a,"constella"),f=!(0,d.existsSync)(b)||0===(0,d.readdirSync)(b).length;if((0,d.existsSync)(c)&&f)try{(0,d.renameSync)(c,b)}catch{(0,d.existsSync)(c)&&((0,d.mkdirSync)(b,{recursive:!0}),0===(0,d.readdirSync)(b).length&&(0,d.cpSync)(c,b,{recursive:!0}))}}catch{}}return b}function k(a,b){let c=(0,e.normalize)((0,e.join)(a,b));if(c!==a&&!c.startsWith(a+e.sep))throw Error("Path escapes workspace: "+b);if((0,d.existsSync)(a)){let f;try{f=d.realpathSync.native(a)}catch{f=a}let g=function(a){let b=a;for(;;){if((0,d.existsSync)(b))try{return d.realpathSync.native(b)}catch{return b}let a=(0,e.dirname)(b);if(a===b)return b;b=a}}(c);if(g!==f&&!g.startsWith(f+e.sep))throw Error("Path escapes workspace (symlink): "+b)}return c}function l(a,b=""){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readdirSync)(c).map(a=>{let f=(0,e.join)(c,a),g=(b?b+"/":"")+a;return{name:a,path:g,isDir:(0,d.statSync)(f).isDirectory()}}).sort((a,b)=>a.isDir===b.isDir?a.name.localeCompare(b.name):a.isDir?-1:1):[]}let m=new Set(["node_modules",".git",".next",".turbo","dist","build","out","coverage",".cache","archives",".testdev",".pnpm-store",".vercel","vendor"]);function n(a,b){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readFileSync)(c,"utf8"):null}function o(a,b,c){let f=k(j(a),b);(0,d.mkdirSync)((0,e.dirname)(f),{recursive:!0}),(0,d.writeFileSync)(f,c,"utf8")}function p(a,b){let c=k(j(a),b);(0,d.existsSync)(c)&&(0,d.rmSync)(c,{recursive:!0,force:!0})}},95777:(a,b,c)=>{c.r(b),c.d(b,{"0044875440d0e500d70bb545f5b7ef7c97908fe28e":()=>d.cT,"008cb10418da2f4293b27c6c5438d9197a6ad7e234":()=>d.Kd,"40c6dc9ec4bbc533c4ce92eb7dad66b0bfece831cd":()=>d.OD,"40fdf8926bc3fb9ab5cdb6c5aa59b419d7ccda7236":()=>d.j0});var d=c(54489)}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=2170,exports.ids=[2170,2392],exports.modules={13389:(a,b,c)=>{c.d(b,{ViewChrome:()=>h});var d=c(40201),e=c(77758),f=c(3218),g=c(71955);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})]})}},40870:(a,b,c)=>{c.d(b,{IZ:()=>k,Ix:()=>j,ZF:()=>m,h6:()=>n,w1:()=>l});var d=c(50730),e=c(76760),f=c(12940),g=c(76561),h=c(66408),i=c(76381);function j(a,b){if(!b)return null;let c=(0,h.HZ)(a),d=((0,e.isAbsolute)(b)?(0,e.relative)(c,b):b).replace(/\\/g,"/");return!d||d.startsWith("..")||d.startsWith(".git/")||d.startsWith(".claude/")||d.startsWith("archives/")?null:d}async function k(a,b,c){let e=(0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.path,b)),[h]=await f.db.select().from(g.fileLock).where(e);if(h){let a=!!c.taskId&&h.taskId===c.taskId,b=!h.taskId&&!!c.agentId&&h.agentId===c.agentId;return a||b?(await f.db.update(g.fileLock).set({heartbeatAt:new Date}).where(e),{ok:!0}):{ok:!1,heldBy:{handle:h.agentHandle,taskId:h.taskId}}}try{return await f.db.insert(g.fileLock).values({workspaceId:a,path:b,taskId:c.taskId||"",agentId:c.agentId||"",agentHandle:c.handle||"",acquiredAt:new Date,heartbeatAt:new Date}),{ok:!0}}catch{let[a]=await f.db.select().from(g.fileLock).where(e);if(a&&(a.taskId===c.taskId||a.agentId===c.agentId))return{ok:!0};return{ok:!1,heldBy:a?{handle:a.agentHandle,taskId:a.taskId}:void 0}}}async function l(a,b){if(b)try{let c=await f.db.select({path:g.fileLock.path}).from(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b)));for(let e of(await f.db.delete(g.fileLock).where((0,d.Uo)((0,d.eq)(g.fileLock.workspaceId,a),(0,d.eq)(g.fileLock.taskId,b))),c))await (0,i.W_)(a,"task",`lock:${e.path}`)}catch{}}async function m(a=3e5){try{await f.db.delete(g.fileLock).where((0,d.lt)(g.fileLock.heartbeatAt,new Date(Date.now()-a)))}catch{}}async function n(a){try{return await f.db.select({path:g.fileLock.path,agentHandle:g.fileLock.agentHandle,taskId:g.fileLock.taskId}).from(g.fileLock).where((0,d.eq)(g.fileLock.workspaceId,a))}catch{return[]}}},41323:(a,b,c)=>{c.d(b,{ViewChrome:()=>d});let d=(0,c(97879).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")},47385:(a,b,c)=>{c.d(b,{l:()=>g});var d=c(46309),e=c(34925);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)}},51439:(a,b,c)=>{c.d(b,{pM:()=>z,lP:()=>y,Kg:()=>x,eU:()=>B,PG:()=>A});var d=c(80501),e=c(96405),f=c(90127),g=c(59627),h=c(24582);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(52392),k=c(73024),l=c(76760),m=c(48161),n=c(31421),o=c(37989);let p=()=>new Date().toISOString().replace(/[:.]/g,"-"),q=()=>(0,l.join)((0,o.r$)(),"backups","last-update.json");async function r(){let a=await (0,j.checkForUpdate)(!0),b=i(),c=a.command;if(!a.updateAvailable)return{ok:!0,context:b,command:c,message:"Already up to date."};let d=function(){try{let a=(0,o.r$)(),b=(0,l.join)(a,"backups",p());for(let c of((0,k.mkdirSync)(b,{recursive:!0}),[".env","constella.db","constella.db-wal","constella.db-shm"])){let d=(0,l.join)(a,c);if((0,k.existsSync)(d))try{(0,k.copyFileSync)(d,(0,l.join)(b,c))}catch{}}return b}catch{return null}}()??void 0;if("dev"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"};if("npx"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"};if("vps"===b){var e="bash scripts/vps-update.sh";try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let b=(0,o.r$)(),c=process.env.CONSTELLA_PKG_ROOT||process.cwd(),f=(0,l.join)(c,"bin","constella-update.mjs"),g=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[f,"--quiet","--mode","vps","--home",b,...g],{detached:!0,stdio:"ignore",cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:"vps",command:e,backupDir:d,message:`Updating to ${a.latest} and restarting the service — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:"vps",command:e,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}return function(a,b,c,d){try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let e=process.env.CONSTELLA_RUN_MODE||"start",f=process.env.CONSTELLA_LAUNCHER_PID||"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(73591),t=c(54813),u=c(406),v=c(96977);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(64185).D)([x,y,z,A,B]),(0,d.A)(x,"40644e55de636cef1c787d94b0eec56070b94d360d",null),(0,d.A)(y,"40ae3fb3067456973e13f9899fb17d02e903c10635",null),(0,d.A)(z,"008ed9fe976118b805388b321772fcf38c55ff881e",null),(0,d.A)(A,"0098fd0858edaddfb6c02d1de1be8dd97b9a28589d",null),(0,d.A)(B,"00ea39c63126fa6fef31973d3d768a7cb76f836fe2",null)},52392:(a,b,c)=>{c.d(b,{checkForUpdate:()=>m});var d=c(73024),e=c(76760),f=c(90127);let g="constellai",h=null,i=a=>a.replace(/^v/,"").split("-")[0].split(".").map(a=>parseInt(a,10)||0),j=a=>a.replace(/^v/,"").split("-")[1]??"";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.json():null}catch{return null}}async function l(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 m(a=!1){let b,c,n=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"}(),o=`npm install -g ${g}@latest`;if(!a&&h&&Date.now()-h.at<216e5)return h.info;let p=await k(`https://registry.npmjs.org/${g}/latest`),q=p?.version??null,r=!!q&&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))return!1}return!j(a)&&!!j(b)}(q,n),s=null;if(r&&q){let a=await l("https://raw.githubusercontent.com/gabriel7silva/constella/main/CHANGELOG.md");s=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,q):null}let t={current:n,latest:q,updateAvailable:r,type:q?(b=i(q),c=i(n),b[0]>c[0]?"major":b[1]>c[1]?"minor":b[2]>c[2]||!j(q)&&j(n)?"patch":null):null,command:o,changelog:s};return h={at:Date.now(),info:t},t}},59627:(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"}},64543:(a,b,c)=>{c.d(b,{_:()=>g});var d=c(50727),e=c(48578),f=c(41323);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})]})}},67462:(a,b,c)=>{c.r(b),c.d(b,{"001753190fa67d17b5d60448ac668d6e682a0b8106":()=>k.io,"001f48cc922c18bb43a165e0ce05529ac7a6dd765e":()=>d.bt,"0032ba29fe2163f67cc17abd0182466fd3daea7438":()=>i.V,"003ae871834a9af5eb24abfdfe21f3064c90e62de2":()=>e.y_,"004f9b95e1741322e3112550681c550c997c145596":()=>h.x7,"0055942e891435647cabc6c599617ed4a8a193419a":()=>k.eg,"006b6ae0772c20c457f52763c8b4793a7746279525":()=>k.dj,"008ed9fe976118b805388b321772fcf38c55ff881e":()=>n.pM,"0093cdb3723759f8b886121f7b3645c05b0ada7266":()=>e.PE,"0098fd0858edaddfb6c02d1de1be8dd97b9a28589d":()=>n.PG,"009a802d7a10b4fa53ab94c5ea252e140c419cfddc":()=>j.f,"00a201ea9d490512db00e808a0522d59e16f95e635":()=>e.KO,"00a4ea65e1d6c843f9aa4e405ea7dc3fc687587fad":()=>e.GK,"00a544ce011932a4f86247c0404dc9738b9cde64e5":()=>d.xU,"00ea39c63126fa6fef31973d3d768a7cb76f836fe2":()=>n.eU,"00f305a272d492a750d1d84b3b6fd0ef76438f31e3":()=>h.Mp,"00f54d59905f1573397b6c6dfb47d2518383a0e842":()=>j.O,"4014900b76ae4e93f9d64d32eeef8f3c8b6c055901":()=>d.VL,"401dcf593491c959aa2941197e9844da28852318de":()=>e.ey,"40293c48ef9855275a704947ae0948f08794f5b5a6":()=>d.gg,"4032e516c941a709ed429b1b33031dbe93cba24473":()=>e.S,"40343fb2c7a295742ebca1767fa14fcd2c21b904e5":()=>i.VJ,"40366fb416ed85ef99ca10414516ad9562c1c58c2f":()=>h.sE,"403f611b66e137fb6023eed4a17ed731ade4e08c27":()=>i.E_,"4047b8b9ef3c77625328ca8205b8496fc9717a7808":()=>i.zS,"404aec4627a3cd9e917472cfe7b25e811c767adcb6":()=>m.y,"404cfe0365356f68d9ab8cc0460ce0038113a3d3b7":()=>e.lJ,"405bf50b285cb36f1c7d322eabd52fce61258b81b4":()=>e.RG,"406432a294113c63a023aac9034323bed88e594c72":()=>d.H7,"40644e55de636cef1c787d94b0eec56070b94d360d":()=>n.Kg,"4069fb27cc316df45124b669f08c4ac45fa8492163":()=>l.TX,"406ec5456555044ff621f786671ee4e35d94b2f65f":()=>d.Wu,"4074b44a5cb46ad2bdf5bcb2edd58f00358bc2068b":()=>e.jc,"407c9a869e794c461ec1b8cf091f5e6ca94e51e94b":()=>d.rd,"4082706f8ace57ddac49e2fd8033b1c7e464d0c082":()=>l.q4,"4089c7c6d599f9d772a060655cf3aed9d7e7d87481":()=>i.F,"40aadad454b3fc484d18736e506b6a2a32819a21ab":()=>g.L,"40ae3fb3067456973e13f9899fb17d02e903c10635":()=>n.lP,"40da78b7a5e90d5964458af7c93b47c292977675d4":()=>d.GW,"40ddcb3ade0787a2037bdf513d2e0e2c32c0098173":()=>e.r7,"40e6adc406e47d04473ea0bc19a8a1ffcc9ab842f2":()=>l.IL,"40f7f2996bbcd52ba2ad38b79d1c5e7df5007ddc03":()=>h.lR,"40f888aafd1073418e5f8a3f6e24eb8de1c2793eba":()=>g.p,"40f95e0db5e9b267d12150b25b4ec0751b2d6eddb2":()=>k.De,"600a283d3c155b52846ffdf59d78d6fb8408c82a2b":()=>f.I,"600ebacb31118bedff5d6ae08b9bcb8222f114b274":()=>e.LZ,"603c4915dad1c1fc6d7767b2122640c79ec86c517a":()=>d.jw,"60430815af320310f550540902bb24e9a101760d26":()=>d.rm,"60553f6dbe343d8b101946e5db9ff495afb68a9e43":()=>e.AA,"60626d0409e32354c4ff8aca40af49144d115b3b13":()=>l.bV,"60631bd184ec0f172d4bf794ce7b4eac7caa9fd5d8":()=>d.ME,"60687b23eb88a4b6d050ea1eff119a716ca285d2f1":()=>f.k,"606e0d84167d264aa8fddbb0e6797ac1f3f814e9f7":()=>d.Fu,"607f771aba769575c8218d60f1a0437f7dfc84de80":()=>e.q$,"60b77e74d6b20877d163d94b4e0332fc17d9a5da72":()=>l.bk,"60e179d438e55fab7e87067be4ecd9ee6954962299":()=>l.Jp,"60eb5dad694b28ac8e7faed523b4073fc551ba4eb9":()=>d.n4,"7005da7d2727c971fded555e72ed66d88f62bda987":()=>d._z,"702407577e954ae5e1358c72dcfba53d656fff783e":()=>e.M8});var d=c(13712),e=c(4619),f=c(37181),g=c(8937),h=c(86591),i=c(10222),j=c(34567),k=c(78387),l=c(74774),m=c(51773),n=c(51439)},81170:(a,b,c)=>{c.d(b,{O:()=>e});var d=c(26021);let e=(0,d.createServerReference)("00f54d59905f1573397b6c6dfb47d2518383a0e842",d.callServer,void 0,d.findSourceMapURL,"curateKbAction")}};
@@ -1,12 +0,0 @@
1
- "use strict";exports.id=5580,exports.ids=[5580],exports.modules={15438:(a,b,c)=>{c.d(b,{FixButton:()=>f,RunReviewButton:()=>g,Toggle:()=>e});var d=c(97879);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")},44894:(a,b,c)=>{c.d(b,{FixButton:()=>n,RunReviewButton:()=>o,Toggle:()=>m});var d=c(40201),e=c(98604),f=c(26021);let g=(0,f.createServerReference)("6045d6793cdfc6938e51321051cd18e17cb0facfbb",f.callServer,void 0,f.findSourceMapURL,"toggleRoutine"),h=(0,f.createServerReference)("60e4a48144ad4db162bbf71f9ea2f2db47c39eac92",f.callServer,void 0,f.findSourceMapURL,"togglePlugin"),i=(0,f.createServerReference)("40110d61fae7e010a834a17c368dcb779bad2b8360",f.callServer,void 0,f.findSourceMapURL,"fixFinding"),j=(0,f.createServerReference)("0027f6d0771434b98c70943839f14e3f014b39f095",f.callServer,void 0,f.findSourceMapURL,"runReview");var k=c(77758),l=c(71955);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")]})}},69804:(a,b,c)=>{c.r(b),c.d(b,{"001753190fa67d17b5d60448ac668d6e682a0b8106":()=>k.io,"001f48cc922c18bb43a165e0ce05529ac7a6dd765e":()=>d.bt,"0027f6d0771434b98c70943839f14e3f014b39f095":()=>E,"0032ba29fe2163f67cc17abd0182466fd3daea7438":()=>i.V,"003ae871834a9af5eb24abfdfe21f3064c90e62de2":()=>e.y_,"004f9b95e1741322e3112550681c550c997c145596":()=>h.x7,"0055942e891435647cabc6c599617ed4a8a193419a":()=>k.eg,"006b6ae0772c20c457f52763c8b4793a7746279525":()=>k.dj,"008ed9fe976118b805388b321772fcf38c55ff881e":()=>F.pM,"0093cdb3723759f8b886121f7b3645c05b0ada7266":()=>e.PE,"0098fd0858edaddfb6c02d1de1be8dd97b9a28589d":()=>F.PG,"009a802d7a10b4fa53ab94c5ea252e140c419cfddc":()=>j.f,"00a201ea9d490512db00e808a0522d59e16f95e635":()=>e.KO,"00a4ea65e1d6c843f9aa4e405ea7dc3fc687587fad":()=>e.GK,"00a544ce011932a4f86247c0404dc9738b9cde64e5":()=>d.xU,"00ea39c63126fa6fef31973d3d768a7cb76f836fe2":()=>F.eU,"00f305a272d492a750d1d84b3b6fd0ef76438f31e3":()=>h.Mp,"00f54d59905f1573397b6c6dfb47d2518383a0e842":()=>j.O,"40110d61fae7e010a834a17c368dcb779bad2b8360":()=>D,"4014900b76ae4e93f9d64d32eeef8f3c8b6c055901":()=>d.VL,"401dcf593491c959aa2941197e9844da28852318de":()=>e.ey,"40293c48ef9855275a704947ae0948f08794f5b5a6":()=>d.gg,"4032e516c941a709ed429b1b33031dbe93cba24473":()=>e.S,"40343fb2c7a295742ebca1767fa14fcd2c21b904e5":()=>i.VJ,"40366fb416ed85ef99ca10414516ad9562c1c58c2f":()=>h.sE,"403f611b66e137fb6023eed4a17ed731ade4e08c27":()=>i.E_,"4047b8b9ef3c77625328ca8205b8496fc9717a7808":()=>i.zS,"404aec4627a3cd9e917472cfe7b25e811c767adcb6":()=>m.y,"404cfe0365356f68d9ab8cc0460ce0038113a3d3b7":()=>e.lJ,"405bf50b285cb36f1c7d322eabd52fce61258b81b4":()=>e.RG,"406432a294113c63a023aac9034323bed88e594c72":()=>d.H7,"40644e55de636cef1c787d94b0eec56070b94d360d":()=>F.Kg,"4069fb27cc316df45124b669f08c4ac45fa8492163":()=>l.TX,"406ec5456555044ff621f786671ee4e35d94b2f65f":()=>d.Wu,"4074b44a5cb46ad2bdf5bcb2edd58f00358bc2068b":()=>e.jc,"407c9a869e794c461ec1b8cf091f5e6ca94e51e94b":()=>d.rd,"407e6f719ec3ce48780979b3a1575186eebeae002e":()=>z,"4080565e68e484d5b660f1b2a2569f80b4a468672c":()=>C,"4082706f8ace57ddac49e2fd8033b1c7e464d0c082":()=>l.q4,"4089c7c6d599f9d772a060655cf3aed9d7e7d87481":()=>i.F,"40a58c58aa5a2dea1241d7c96702c841101894f751":()=>A,"40aadad454b3fc484d18736e506b6a2a32819a21ab":()=>g.L,"40ae3fb3067456973e13f9899fb17d02e903c10635":()=>F.lP,"40da78b7a5e90d5964458af7c93b47c292977675d4":()=>d.GW,"40ddcb3ade0787a2037bdf513d2e0e2c32c0098173":()=>e.r7,"40e6adc406e47d04473ea0bc19a8a1ffcc9ab842f2":()=>l.IL,"40f7f2996bbcd52ba2ad38b79d1c5e7df5007ddc03":()=>h.lR,"40f888aafd1073418e5f8a3f6e24eb8de1c2793eba":()=>g.p,"40f95e0db5e9b267d12150b25b4ec0751b2d6eddb2":()=>k.De,"600a283d3c155b52846ffdf59d78d6fb8408c82a2b":()=>f.I,"600ebacb31118bedff5d6ae08b9bcb8222f114b274":()=>e.LZ,"603c4915dad1c1fc6d7767b2122640c79ec86c517a":()=>d.jw,"60430815af320310f550540902bb24e9a101760d26":()=>d.rm,"6045d6793cdfc6938e51321051cd18e17cb0facfbb":()=>y,"60553f6dbe343d8b101946e5db9ff495afb68a9e43":()=>e.AA,"60626d0409e32354c4ff8aca40af49144d115b3b13":()=>l.bV,"60631bd184ec0f172d4bf794ce7b4eac7caa9fd5d8":()=>d.ME,"60687b23eb88a4b6d050ea1eff119a716ca285d2f1":()=>f.k,"606e0d84167d264aa8fddbb0e6797ac1f3f814e9f7":()=>d.Fu,"607f771aba769575c8218d60f1a0437f7dfc84de80":()=>e.q$,"60b77e74d6b20877d163d94b4e0332fc17d9a5da72":()=>l.bk,"60e179d438e55fab7e87067be4ecd9ee6954962299":()=>l.Jp,"60e4a48144ad4db162bbf71f9ea2f2db47c39eac92":()=>B,"60eb5dad694b28ac8e7faed523b4073fc551ba4eb9":()=>d.n4,"7005da7d2727c971fded555e72ed66d88f62bda987":()=>d._z,"702407577e954ae5e1358c72dcfba53d656fff783e":()=>e.M8});var d=c(13712),e=c(4619),f=c(37181),g=c(8937),h=c(86591),i=c(10222),j=c(34567),k=c(78387),l=c(74774),m=c(51773),n=c(80501),o=c(77598),p=c(73591),q=c(3770),r=c(54813),s=c(406),t=c(96405),u=c(81585),v=c(3233),w=c(55593),x=c(45900);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
- Apply these review skills (consult before judging):
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
- Project knowledge (prior findings, decisions, patterns — do not contradict):
5
- ${i.context}`:"",k=[`You are ${d.name}, the security reviewer. Review the code in the current workspace directory for vulnerabilities, secret/token exposure, permission & workspace-isolation issues, and risky patterns.`,h,j,"Output ONLY a JSON array (no prose, no markdown fences) of findings:",'[{"sev":"high"|"med"|"low","title":"short title","file":"relative/path","suggestion":"how to fix"}]',"If the workspace is clean or empty, output []. Do not modify any files."].filter(Boolean).join("\n"),l=(0,u.hW)(d.adapter,d.model),m=(0,u.qX)(d.adapter),n=await (0,u.p1)(k,{orgId:a.id,binary:l,model:m,timeoutMs:24e4},a=>{(0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:a.kind,target:a.target,detail:a.detail})}),y=[],z=n.text.match(/\[[\s\S]*\]/);if(z)try{y=JSON.parse(z[0])}catch{y=[]}for(let a of y.slice(0,40)){let c="high"===a.sev||"low"===a.sev?a.sev:"med";await r.db.insert(s.finding).values({id:(0,o.randomUUID)(),workspaceId:b.id,sev:c,title:String(a.title??"Finding").slice(0,200),file:String(a.file??""),suggestion:String(a.suggestion??""),status:"open"})}y.length&&(0,v.ru)(a.id,y.slice(0,40).map(a=>({type:"vuln",title:String(a.title??"Finding").slice(0,120),summary:`${a.sev??"med"}: ${String(a.suggestion??"")}`.slice(0,1e3),paths:a.file?[String(a.file)]:void 0,agentHandle:d.handle,sourceKind:"review",sourceRef:`${String(a.file??"")}::${String(a.title??"")}`.slice(0,200)}))).catch(()=>{}),(n.usd>0||n.inputTokens+n.outputTokens>0)&&await r.db.insert(s.costEntry).values({id:(0,o.randomUUID)(),workspaceId:b.id,agentId:d.id,provider:n.binary,model:n.model??d.model,usd:n.usd,tokens:n.inputTokens+n.outputTokens,at:new Date}),await r.db.update(s.workspace).set({settings:{...b.settings??{},lastSecurityRun:Date.now()}}).where((0,p.eq)(s.workspace.id,b.id)),await r.db.update(s.agent).set({status:"idle"}).where((0,p.eq)(s.agent.id,d.id));let A=new Date().toISOString().replace("T"," ").slice(0,19),B=`# Security review
6
-
7
- _By @${d.handle} (${d.role}) \xb7 ${A}_
8
-
9
- `+(y.length?`Filed ${y.length} finding(s):
10
-
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(64185).D)([y,z,A,B,C,D,E]),(0,n.A)(y,"6045d6793cdfc6938e51321051cd18e17cb0facfbb",null),(0,n.A)(z,"407e6f719ec3ce48780979b3a1575186eebeae002e",null),(0,n.A)(A,"40a58c58aa5a2dea1241d7c96702c841101894f751",null),(0,n.A)(B,"60e4a48144ad4db162bbf71f9ea2f2db47c39eac92",null),(0,n.A)(C,"4080565e68e484d5b660f1b2a2569f80b4a468672c",null),(0,n.A)(D,"40110d61fae7e010a834a17c368dcb779bad2b8360",null),(0,n.A)(E,"0027f6d0771434b98c70943839f14e3f014b39f095",null);var F=c(51439)},95777:(a,b,c)=>{c.r(b),c.d(b,{"0044875440d0e500d70bb545f5b7ef7c97908fe28e":()=>d.cT,"008cb10418da2f4293b27c6c5438d9197a6ad7e234":()=>d.Kd,"40c6dc9ec4bbc533c4ce92eb7dad66b0bfece831cd":()=>d.OD,"40fdf8926bc3fb9ab5cdb6c5aa59b419d7ccda7236":()=>d.j0});var d=c(54489)}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=8013,exports.ids=[8013],exports.modules={27136:(a,b,c)=>{c.d(b,{J:()=>e});var d=c(26021);let e=(0,d.createServerReference)("406ba323fdd094cd6be0fe6a52da6e5a82ed902480",d.callServer,void 0,d.findSourceMapURL,"rejectSpec")},39075:(a,b,c)=>{c.d(b,{IssueApprove:()=>g,PlanGate:()=>f,PlanGateLive:()=>e,Run247Button:()=>h});var d=c(97879);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call PlanGateLive() from the server but PlanGateLive is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","PlanGateLive");(0,d.registerClientReference)(function(){throw Error("Attempted to call GeneratePlanButton() from the server but GeneratePlanButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","GeneratePlanButton");let f=(0,d.registerClientReference)(function(){throw Error("Attempted to call PlanGate() from the server but PlanGate is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","PlanGate");(0,d.registerClientReference)(function(){throw Error("Attempted to call SpecApprove() from the server but SpecApprove is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","SpecApprove");let g=(0,d.registerClientReference)(function(){throw Error("Attempted to call IssueApprove() from the server but IssueApprove is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","IssueApprove"),h=(0,d.registerClientReference)(function(){throw Error("Attempted to call Run247Button() from the server but Run247Button is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\plan-gate.tsx","Run247Button")},43403:(a,b,c)=>{c.d(b,{IssueApprove:()=>x,PlanGate:()=>v,PlanGateLive:()=>u,Run247Button:()=>y,p:()=>w});var d=c(40201),e=c(98604),f=c(27499),g=c(77758),h=c(71955),i=c(67622),j=c(26021);let k=(0,j.createServerReference)("40e30755c609a5f0104cb804f584fc0a8e4ee681b5",j.callServer,void 0,j.findSourceMapURL,"generatePlan"),l=(0,j.createServerReference)("0001025c89be533c6ae88d481b09f093b98dc8063a",j.callServer,void 0,j.findSourceMapURL,"requestPlanChanges");var m=c(61034),n=c(66364),o=c(27136),p=c(88409),q=c(89294);let r=(0,j.createServerReference)("4075dfc880f582744abc6fd205a1e398e8171d338b",j.callServer,void 0,j.findSourceMapURL,"setAuto247"),s=(0,j.createServerReference)("0077f2278034c406de1ccda97e8e5a1cb8b4778021",j.callServer,void 0,j.findSourceMapURL,"skipDesignGate");function t(a,b){window.dispatchEvent(new CustomEvent("constella:open-dm",{detail:{handle:a,text:b}}))}function u({planning:a,planSince:b,designRecommended:c=!1,designPending:j=!1}){let l=(0,h.k)(),[m,n]=(0,e.useTransition)(),o=(0,f.useRouter)(),[p,q]=(0,e.useState)(!1),[r,t]=(0,e.useState)(""),v=a||p;function w(){t(""),q(!0),window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"planner"}})),n(async()=>{try{let a=await k();(!a?.ok||!1===a.started)&&(q(!1),a?.error&&t(a.error)),o.refresh()}catch{q(!1),t(l("planner.gate.staleTab"))}})}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.AgentRunLive,{channel:"planner",resume:a,sinceSeq:a?b-1:0,onFinish:()=>q(!1)}),v?(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:l("planner.gate.drafting.t")}),(0,d.jsx)("div",{className:"pg-d",children:l("planner.gate.drafting.d")})]})]}):c||j?(0,d.jsxs)("div",{className:"plan-gate",style:{borderColor:"rgba(99,102,241,.45)"},children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0,style:{background:"#6366f1"}}),(0,d.jsx)("div",{className:"pg-ic",style:{background:"rgba(99,102,241,.16)",color:"#6366f1"},children:(0,d.jsx)(g.I,{name:"skill",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:j?"Design step pending":"Recommended: prototype the design first"}),(0,d.jsx)("div",{className:"pg-d",children:j?"Ada is holding the plan on the design step. Open the Design module, build & approve the prototype with Grace, then Send to execution — Ada turns the approved design into specs & issues (zero drift).":"This is a frontend product. Prototype & approve the UI in the Design module before generating the plan — Grace turns the brief into a real visual reference, so the specs are precise and you avoid rework."}),r&&(0,d.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:r})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("button",{className:"btn-accent",onClick:()=>o.push("/design"),children:[(0,d.jsx)(g.I,{name:"skill",size:14})," Open Design"]}),(0,d.jsxs)("button",{className:"btn-ghost",disabled:m,onClick:function(){n(async()=>{try{await s()}catch{}}),w()},style:{fontSize:12},children:[(0,d.jsx)(g.I,{name:m?"refresh":"bot",size:13,className:m?"sync-spin":""})," ",m?l("planner.gate.analyzing"):"Skip design & plan anyway"]})]})]}):(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:l("planner.gate.noPlan.t")}),(0,d.jsx)("div",{className:"pg-d",children:l("planner.gate.noPlan.d")}),r&&(0,d.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:r})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("div",{className:"plan-hint",children:[(0,d.jsx)("div",{className:"plan-hint-t",children:l("planner.gate.hint.t")}),(0,d.jsx)("div",{className:"plan-hint-d",children:l("planner.gate.hint.d")})]}),(0,d.jsxs)("button",{className:"btn-accent",disabled:m,onClick:w,children:[(0,d.jsx)(g.I,{name:m?"refresh":"bot",size:14,className:m?"sync-spin":""})," ",m?l("planner.gate.analyzing"):l("planner.gate.generate")]})]})]})]})}function v({specs:a,total:b}){let c=(0,h.k)(),[f,i]=(0,e.useTransition)();return(0,d.jsxs)("div",{className:"plan-gate",children:[(0,d.jsx)("div",{className:"pg-ic",children:(0,d.jsx)(g.I,{name:"bot",size:20})}),(0,d.jsxs)("div",{className:"pg-main",children:[(0,d.jsx)("div",{className:"pg-t",children:c("planner.gate.ready.t")}),(0,d.jsx)("div",{className:"pg-d",children:c("planner.gate.ready.d",{specs:a,total:b})})]}),(0,d.jsxs)("div",{className:"pg-actions",children:[(0,d.jsxs)("button",{className:"btn-ghost",disabled:f,onClick:()=>i(async()=>{await l(),t("ada",c("planner.gate.rejectPlanDm"))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:13})," ",c("planner.gate.requestChanges")]}),(0,d.jsxs)("button",{className:"btn-accent",disabled:f,onClick:()=>i(()=>(0,m.P)()),children:[(0,d.jsx)(g.I,{name:"check",size:14})," ",c("planner.gate.approvePlan")]})]})]})}function w({specId:a,specKey:b,approved:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)();return c?(0,d.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approved")]}):(0,d.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,d.jsxs)("button",{className:"sc2-btn",disabled:i,onClick:()=>j(()=>(0,n.B)(a)),children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approve")]}),(0,d.jsxs)("button",{className:"sc2-btn danger",disabled:i,onClick:()=>j(async()=>{t((await (0,o.J)(a)).handle,f("planner.rejectItemDm",{key:b}))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:11})," ",f("planner.reject")]})]})}function x({issueId:a,issueKey:b,approved:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)();return c?(0,d.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approved")]}):(0,d.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,d.jsxs)("button",{className:"sc2-btn",disabled:i,onClick:()=>j(()=>(0,p.t)(a)),children:[(0,d.jsx)(g.I,{name:"check",size:11})," ",f("planner.approve")]}),(0,d.jsxs)("button",{className:"sc2-btn danger",disabled:i,onClick:()=>j(async()=>{t((await (0,q.d)(a)).handle,f("planner.rejectItemDm",{key:b}))}),children:[(0,d.jsx)(g.I,{name:"refresh",size:11})," ",f("planner.reject")]})]})}function y({auto:a,approved:b,state:c}){let f=(0,h.k)(),[i,j]=(0,e.useTransition)(),k=f(i?a?"planner.run247.pausing":"planner.run247.starting":"waiting-approval"===c?"planner.run247.approveToRun":"all-done"===c?"planner.run247.allDone":a?"planner.run247.pause":"planner.run247.run"),l="blocked"===c?f("planner.run247.blockedTip"):void 0,m="off"===c&&!i;return(0,d.jsxs)("button",{className:"btn-"+(a?"ghost":"accent")+(m?" run-attn":""),disabled:!b||"all-done"===c||i,title:l,onClick:()=>j(()=>r(!a)),children:[(0,d.jsx)(g.I,{name:i?"refresh":"waiting-approval"===c?"bot":"all-done"===c?"check":a?"close":"play",size:14,className:i?"sync-spin":""})," ",k,("running"===c||m)&&(0,d.jsx)("span",{className:"dotpulse",style:{marginLeft:6}})]})}},61034:(a,b,c)=>{c.d(b,{P:()=>e});var d=c(26021);let e=(0,d.createServerReference)("006910fc45d9bd87178dc83b87fb23580d680f1b14",d.callServer,void 0,d.findSourceMapURL,"approvePlan")},66364:(a,b,c)=>{c.d(b,{B:()=>e});var d=c(26021);let e=(0,d.createServerReference)("4060d874ebb500e0e00ccb4b93d6305ec6dc34ba0c",d.callServer,void 0,d.findSourceMapURL,"approveSpec")},67622:(a,b,c)=>{c.d(b,{AgentRunLive:()=>j});var d=c(40201),e=c(98604),f=c(27499),g=c(77758);c(33595);var h=c(71955);let i=["read","create","edit","run","search","thinking","done","error"];function j({channel:a,resume:b=!1,sinceSeq:c=0,onFinish:k}){let l=(0,h.k)();(0,f.useRouter)();let[m,n]=(0,e.useState)(b),[o,p]=(0,e.useState)([]),[q,r]=(0,e.useState)(0);if((0,e.useRef)(b?c:0),(0,e.useRef)(!1),(0,e.useRef)(0),!m&&0===o.length)return null;let s=function(a){let b=[];for(let c of a)if("text"===c.kind){let a=(c.detail||"").replace(/\s+/g," ").trim();if(!a)continue;let d=b[b.length-1];d&&"text"===d.kind?d.content=(d.content+" "+a).slice(-600):b.push({id:c.id,kind:"text",content:a})}else if("thinking"===c.kind){let a=(c.detail||c.target||"").replace(/\s+/g," ").trim();a&&b.push({id:c.id,kind:"thinking",content:a})}else b.push({id:c.id,kind:c.kind,content:function(a){if(!a)return"";let b=a.split(/[\\/]/);return b.length>1?b.slice(-2).join("/"):a}(c.target)||c.detail||""});return b}(o),t=s.slice(-5),u=s.length-t.length,v=o.some(a=>"done"===a.kind||"error"===a.kind),w=o.some(a=>"error"===a.kind),x=String(Math.floor(q/60)).padStart(2,"0"),y=String(q%60).padStart(2,"0");return(0,d.jsxs)("div",{className:"card live-stream",style:{marginBottom:16,borderColor:w?"var(--sx-keyword)":"var(--accent)"},children:[(0,d.jsxs)("div",{className:"set-desc",style:{marginBottom:8,display:"flex",alignItems:"center",gap:7},children:[m&&!v?(0,d.jsx)("span",{className:"dotpulse"}):(0,d.jsx)(g.I,{name:w?"close":"check",size:13,style:{color:w?"var(--sx-keyword)":"var(--sx-string)"}}),m&&!v?l("agent.run.working"):w?l("agent.run.failed"):l("agent.run.finished"),s.length>0&&(0,d.jsxs)("span",{style:{color:"var(--text-faint)"},children:["\xb7 ",l(1===s.length?"agent.run.steps.one":"agent.run.steps.other",{n:s.length})]}),(0,d.jsxs)("span",{className:"live-elapsed",style:{marginLeft:"auto"},children:[x,":",y]})]}),0===t.length?(0,d.jsxs)("div",{className:"muted",style:{fontSize:12,display:"flex",alignItems:"center",gap:7},children:[(0,d.jsx)("span",{className:"sync-spin",children:(0,d.jsx)(g.I,{name:"refresh",size:12})})," ",l("agent.run.reading")]}):(0,d.jsxs)(d.Fragment,{children:[u>0&&(0,d.jsx)("div",{className:"live-more",children:l(1===u?"agent.run.earlier.one":"agent.run.earlier.other",{n:u})}),(0,d.jsx)("div",{className:"live-stream-lines",children:t.map(a=>(0,d.jsxs)("div",{className:"live-line "+a.kind,children:["text"!==a.kind&&(0,d.jsx)("span",{className:"ll-k",children:i.includes(a.kind)?l(`agent.verb.${a.kind}`):a.kind}),(0,d.jsxs)("span",{className:"ll-c",children:[a.content,!v&&a===t[t.length-1]&&"text"===a.kind&&(0,d.jsx)("span",{className:"ll-caret"})]})]},a.id))})]})]})}},88409:(a,b,c)=>{c.d(b,{t:()=>e});var d=c(26021);let e=(0,d.createServerReference)("4033e7726f1645fd69f4a34fdb34b307c97d034641",d.callServer,void 0,d.findSourceMapURL,"approveIssue")},89294:(a,b,c)=>{c.d(b,{d:()=>e});var d=c(26021);let e=(0,d.createServerReference)("40fbd1fb24c8548e39971f010ae94d301e3ef53fde",d.callServer,void 0,d.findSourceMapURL,"rejectIssue")},95777:(a,b,c)=>{c.r(b),c.d(b,{"0044875440d0e500d70bb545f5b7ef7c97908fe28e":()=>d.cT,"008cb10418da2f4293b27c6c5438d9197a6ad7e234":()=>d.Kd,"40c6dc9ec4bbc533c4ce92eb7dad66b0bfece831cd":()=>d.OD,"40fdf8926bc3fb9ab5cdb6c5aa59b419d7ccda7236":()=>d.j0});var d=c(54489)}};
@@ -1,21 +0,0 @@
1
- "use strict";exports.id=8236,exports.ids=[8236],exports.modules={10707:(a,b,c)=>{c.d(b,{A:()=>e});var d=c(26021);let e=(0,d.createServerReference)("4056e638c4d638ae4f128726021faa4f588b516ca0",d.callServer,void 0,d.findSourceMapURL,"listCatalogModels")},18834:(a,b,c)=>{c.d(b,{m:()=>i});var d=c(40201),e=c(98604),f=c(77758),g=c(98661),h=c(71955);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))]})]})}},38437:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(26021);let e=(0,d.createServerReference)("40f71ff46956872e248e34ec53aad9c8776a0a80c9",d.callServer,void 0,d.findSourceMapURL,"pullModel")},43101:(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(80501),e=c(77598),f=c(73591),g=c(3770),h=c(54813),i=c(406),j=c(96405),k=c(39522),l=c(39639),m=c(81585);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(37989);let t={anthropic:"anthropic",openai:"openai",google_gemini:"google",xai_grok:"xai",deepseek:"deepseek",cohere:"cohere",groq:"groq",nvidia_nim:"nvidia",together:"togetherai",fireworks:"fireworks-ai",cerebras:"cerebras",perplexity:"perplexity",openrouter:"openrouter",mistral:"mistral",moonshot:"moonshotai",dashscope:"alibaba",zhipu:"zhipuai",azure_openai:"azure",aws_bedrock:"amazon-bedrock",vertex_ai:"google-vertex",claude_code:"anthropic",gemini_cli:"google",codex_cli:"openai"};function u(a){return t[a]?t[a]:a.replace(/_(grok|gemini|nim|cli|openai|api|server|rt)$/g,"").replace(/_/g,"-")}let v={anthropic:["sonnet-4","sonnet","opus-4","opus"],openai:["gpt-5.2","gpt-5.1","gpt-5","gpt-4.1","o4"],google:["gemini-3-pro","gemini-3","gemini-2.5-pro","pro"],xai:["grok-4","grok-3","grok"],groq:["llama-4","llama-3.3","llama-3.1"],deepseek:["deepseek-chat","deepseek-v3","deepseek-reasoner"],mistral:["mistral-large","mistral-medium"],openrouter:["claude-sonnet","gpt-5","gemini"]},w=(a,b,c,d,e,f,g,h)=>({id:a,name:b,context:c,outputLimit:d,inputCost:e,outputCost:f,caps:{reasoning:!!g.reasoning,tools:!!g.tools,vision:!!g.vision},released:h}),x={anthropic:[w("claude-opus-4-8","Claude Opus 4.8",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("claude-opus-4-7","Claude Opus 4.7",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("claude-sonnet-4-6","Claude Sonnet 4.6",1e6,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-01-15"),w("claude-haiku-4-5","Claude Haiku 4.5",2e5,32e3,1,5,{tools:!0,vision:!0},"2025-10-01")],openai:[w("gpt-5.2","GPT-5.2",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2026-03-01"),w("gpt-5.1","GPT-5.1",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("gpt-5","GPT-5",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-08-01"),w("o4-mini","o4-mini",2e5,1e5,1.1,4.4,{reasoning:!0,tools:!0},"2025-04-01")],google:[w("gemini-3-pro","Gemini 3 Pro",2e6,64e3,2,12,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("gemini-3-flash","Gemini 3 Flash",1e6,64e3,.3,2.5,{tools:!0,vision:!0},"2026-02-01"),w("gemini-2.5-pro","Gemini 2.5 Pro",2e6,64e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-06-01")],xai:[w("grok-4.3","Grok 4.3",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("grok-4","Grok 4",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2025-09-01"),w("grok-3","Grok 3",131072,32e3,3,15,{tools:!0,vision:!0},"2025-02-01")],deepseek:[w("deepseek-chat","DeepSeek Chat",128e3,8e3,.27,1.1,{tools:!0},"2025-12-01"),w("deepseek-reasoner","DeepSeek Reasoner",128e3,64e3,.55,2.19,{reasoning:!0,tools:!0},"2025-12-01")],groq:[w("llama-4-scout","Llama 4 Scout",131072,8e3,.11,.34,{tools:!0,vision:!0},"2025-04-01"),w("llama-3.3-70b","Llama 3.3 70B",131072,32e3,.59,.79,{tools:!0},"2024-12-01")]},y=null;function z(){return(0,r.join)((0,s.r$)(),"cache","models-dev.json")}async function A(){try{let a=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4),headers:{accept:"application/json"}});if(!a.ok)return null;let b=await a.json();if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b)){let b=d?.models,e=function(a){if(!a||"object"!=typeof a)return[];let b=[];for(let[c,d]of Object.entries(a)){let a=d??{},e=String(a.id??c),f=e.includes("/")?e.split("/").pop():e;if(!f)continue;let g=a.modalities??{},h=Array.isArray(g.input)?g.input:[],i=a.limit??{},j=a.cost??{},k={reasoning:!0===a.reasoning,tools:!0===a.tool_call,vision:!0===a.attachment||h.includes("image")};b.push({id:f,name:String(a.name??f),context:Number(i.context??0)||0,outputLimit:Number(i.output??0)||0,inputCost:Number(j.input??0)||0,outputCost:Number(j.output??0)||0,caps:k,released:"string"==typeof a.release_date?a.release_date:""})}return b}(b);e.length&&(c[a]=e)}return Object.keys(c).length?c:null}catch{return null}}async function B(){if(y&&Date.now()-y.at<864e5)return y.data;let a=function(){try{let a=z();if(!(0,q.existsSync)(a))return null;let b=JSON.parse((0,q.readFileSync)(a,"utf8"));if(!b?.data||"object"!=typeof b.data)return null;return{at:Number(b.at??(0,q.statSync)(a).mtimeMs),data:b.data}}catch{return null}}();if(a&&Date.now()-a.at<864e5)return y=a,a.data;let b=await A();if(b){y={at:Date.now(),data:b};try{(0,q.mkdirSync)((0,r.join)((0,s.r$)(),"cache"),{recursive:!0}),(0,q.writeFileSync)(z(),JSON.stringify({at:Date.now(),data:b}),"utf8")}catch{}return b}return a?(y=a,a.data):{}}async function C(a){let b=u(a),c=await B();return c[b]?.length?c[b]:x[b]??[]}async function D(a,b,c=9e3){try{let d=await fetch(a,{headers:b,signal:AbortSignal.timeout(c)});if(!d.ok)return null;return await d.json()}catch{return null}}async function E(a){let{catalogId:b,adapter:c,baseUrl:d,apiKey:e}=a;if(c.startsWith("cli_"))return"cli_opencode"===c?(await (0,m.ZB)("opencode")).map(a=>({id:a})):"cli_aider"===c?(await (0,m.ZB)("aider")).map(a=>({id:a})):null;if(/ollama/i.test(b)||c.includes("ollama")){let a=(d||"http://127.0.0.1:11434").replace(/\/$/,"").replace(/\/v1$/,""),b=await D(`${a}/api/tags`,{});return b?(b.models??[]).map(a=>({id:String(a.name??"")})).filter(a=>a.id):[]}if(!d)return null;let f=d.replace(/\/$/,""),g="http_anthropic"===c||"anthropic"===b,h=g?"https://api.anthropic.com/v1/models":f.endsWith("/models")?f:f+(f.includes("/v1")?"/models":"/v1/models"),i=g?e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{}:e?{authorization:`Bearer ${e}`}:{},j=await D(h,i);return j?(Array.isArray(j.data)?j.data:Array.isArray(j.models)?j.models:[]).map(a=>{let b=String(a.id??a.name??"");if(!b)return null;let c={id:b};"string"==typeof a.display_name?c.name=a.display_name:"string"==typeof a.name&&(c.name=a.name),"number"==typeof a.context_length&&(c.context=a.context_length);let d=a.pricing;if(d){let a=Number(d.prompt),b=Number(d.completion);Number.isFinite(a)&&a>0&&(c.inputCost=1e6*a),Number.isFinite(b)&&b>0&&(c.outputCost=1e6*b)}return c}).filter(a=>!!a).slice(0,200):[]}async function F(){let a=await B(),b=new Map;for(let c of Object.values(a))for(let a of c){let c=a.id.toLowerCase();b.has(c)||b.set(c,a)}return b}async function G(a,b){let c=await C(a);if(!b||0===b.length)return c;let d=new Map;for(let a of c)d.set(a.id.toLowerCase(),a);let e=await F(),f=a=>{let b=a.toLowerCase(),c=a.includes("/")?a.split("/").pop().toLowerCase():b;return d.get(b)??d.get(c)??e.get(b)??e.get(c)},g=[];for(let a of b){let b=f(a.id);g.push({id:a.id,name:a.name||b?.name||a.id,context:a.context??b?.context??0,outputLimit:b?.outputLimit??0,inputCost:a.inputCost??b?.inputCost??0,outputCost:a.outputCost??b?.outputCost??0,caps:b?.caps??{reasoning:!1,tools:!1,vision:!1},released:b?.released??""})}return g}async function H(a,b){let{workspace:c}=await (0,j.nP)(),d=(0,l.kH)(a);if(!d)return;let f=(0,e.randomUUID)();await h.db.insert(i.provider).values({id:f,workspaceId:c.id,catalogId:a,adapter:d.defaultAdapter,kind:"cli"===d.category?"cli":"local_runtime"===d.category?"local":"cloud",auth:d.connectionTypes.includes("api_key")?"api_key":d.connectionTypes[0],status:"needs_sync",syncStatus:d.supportsModelSync?"implemented":"manual"}),b&&await (0,k.IW)(c.id,`${a}_api_key`,b,f),(0,g.revalidatePath)("/models"),await I(f)}async function I(a){let b,{workspace:c}=await (0,j.nP)(),[d]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,c.id)));if(!d)return{ok:!1,error:"not found"};let e=(0,l.kH)(d.catalogId);if(!e)return{ok:!1,error:"unknown provider"};let n=await (0,k.r6)(c.id,`${d.catalogId}_api_key`),o=await p(e,n),q=null;if("cli"===e.category){let a=(0,m.hW)(e.defaultAdapter);b=(q=await (0,m.$g)(a).catch(()=>null))?await (0,m.Kp)(a).catch(()=>"unknown"):"needs_login"}else b="local_runtime"===e.category?o.ok?"ready":"unknown":n&&o.ok?"ready":"needs_key";return await h.db.update(i.provider).set({status:o.ok?"connected":"error",modelCount:o.count,lastSync:new Date,cliVersion:q,authState:b}).where((0,f.eq)(i.provider.id,a)),o.ok&&await J(a).catch(()=>{}),(0,g.revalidatePath)("/models"),o}async function J(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,count:0,error:"not found"};let d=await K(c);return(0,g.revalidatePath)("/models"),d}async function K(a){let b,c,d,g=(0,l.kH)(a.catalogId);if(!g)return{ok:!1,count:0,error:"unknown provider"};let j=await (0,k.r6)(a.workspaceId,`${a.catalogId}_api_key`),n="cli"===g.category;try{b=await E({catalogId:a.catalogId,adapter:a.adapter,baseUrl:g.baseUrl,apiKey:j})}catch{b=null}if(n){let e=(0,m.hW)(a.adapter);d=(c=await (0,m.$g)(e).catch(()=>null))?await (0,m.Kp)(e).catch(()=>"unknown"):"needs_login",null===b&&(b=(m.w5[a.adapter]??[]).filter(a=>"(default)"!==a).map(a=>({id:a})))}if(null===b)return{ok:!0,count:0};let o=await G(a.catalogId,b),p=new Date,q=o.length?function(a,b){if(!b.length)return"";let c=v[u(a)];if(c)for(let a of c){let c=b.filter(b=>b.id.toLowerCase().includes(a));if(c.length)return c.sort((a,b)=>(b.released||"").localeCompare(a.released||"")),c[0].id}let d=b.filter(a=>a.released);return d.length?(d.sort((a,b)=>b.released.localeCompare(a.released)),d[0].id):b[0].id}(a.catalogId,o):null;if(o.length)await h.db.delete(i.providerModel).where((0,f.eq)(i.providerModel.providerId,a.id)),await h.db.insert(i.providerModel).values(o.map(b=>({id:(0,e.randomUUID)(),workspaceId:a.workspaceId,providerId:a.id,catalogId:a.catalogId,modelId:b.id,name:b.name,context:b.context,outputLimit:b.outputLimit,inputCost:b.inputCost,outputCost:b.outputCost,caps:b.caps,released:b.released,isDefault:b.id===q,lastSeen:p})));else if(!n)return{ok:!1,count:0,error:"no models returned"};let r=n&&!c?"needs_sync":"connected";return await h.db.update(i.provider).set({status:r,modelCount:o.length||(n?a.modelCount:0),lastSync:p,defaultModel:q||a.defaultModel,...n?{cliVersion:c??null,authState:d??null}:{}}).where((0,f.eq)(i.provider.id,a.id)),{ok:!0,count:o.length}}async function L(a=12){let b,c=new Date(Date.now()-60*a*6e4);try{b=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.status,"connected"),(0,f.or)((0,f.kZ)(i.provider.lastSync),(0,f.lt)(i.provider.lastSync,c))))}catch{return{refreshed:0}}let d=0;for(let a of b.slice(0,50))try{let b=await K(a);b.ok&&b.count>0&&d++}catch{}return{refreshed:d}}async function M(a){let{workspace:b}=await (0,j.nP)(),c=(await h.db.select().from(i.providerModel).where((0,f.Uo)((0,f.eq)(i.providerModel.providerId,a),(0,f.eq)(i.providerModel.workspaceId,b.id)))).map(a=>({id:a.modelId,name:a.name,context:a.context,outputLimit:a.outputLimit,inputCost:a.inputCost,outputCost:a.outputCost,caps:a.caps??{reasoning:!1,tools:!1,vision:!1},released:a.released,isDefault:a.isDefault}));return c.sort((a,b)=>Number(b.isDefault)-Number(a.isDefault)||(b.released||"").localeCompare(a.released||"")||a.name.localeCompare(b.name)),{models:c}}async function N(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d)return{ok:!1,error:"unknown provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),m=await p(d,e);return await h.db.update(i.provider).set({status:m.ok?"connected":"error"}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"),{ok:m.ok,error:m.error}}async function O(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{models:[],error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d?.baseUrl)return{models:[],error:"no public endpoint for this provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),g=d.baseUrl.replace(/\/$/,"");try{let a=/ollama/i.test(c.catalogId)||c.adapter.includes("ollama")?`${g.replace(/\/v1$/,"")}/api/tags`:`${g}/models`,b=await fetch(a,{headers:e?{authorization:`Bearer ${e}`}:{},signal:AbortSignal.timeout(8e3)});if(!b.ok)return{models:[],error:`endpoint ${b.status}`};let d=await b.json();return{models:(d.data??d.models??[]).map(a=>a.id??a.name??"").filter(Boolean).slice(0,80)}}catch(b){let a=String(b instanceof Error?b.message:b);return{models:[],error:/abort|fetch failed|ECONN/i.test(a)?"endpoint unreachable":a}}}async function P(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.delete(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id))),(0,g.revalidatePath)("/models")}async function Q(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&(await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.update(i.provider).set({auth:"none",status:"needs_sync",modelCount:0}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"))}(0,c(64185).D)([H,I,J,L,M,N,O,P,Q]),(0,d.A)(H,"6083539b3e87e0ba2754b76f95c69b6a04fcd2b3a0",null),(0,d.A)(I,"408e35f6fde4cc7d723301647fb3e3d2b3ca266b3b",null),(0,d.A)(J,"408c87c59a67a7d876179590ddef054a5561dd4274",null),(0,d.A)(L,"40d8403e49be3ac104385693217dae85f8236d3c35",null),(0,d.A)(M,"4056e638c4d638ae4f128726021faa4f588b516ca0",null),(0,d.A)(N,"405b388cf587856e95466bcdc08d80d1b8d65d7da7",null),(0,d.A)(O,"40f6633f8af41aa18842e6933cb62e806eaad1b5d2",null),(0,d.A)(P,"400509c9b98f6d73562f9d5eb6bf1b6e615cb0cbb9",null),(0,d.A)(Q,"4067706ba517cafd33fce796a5221c541b9e790050",null)},47255:(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.replace(/[-_.\s]\d+(?:x\d+)?[bm]\b/i,""),c=b.match(/(\d+(?:[.\-]\d+){0,2})(?!.*\d)/),d=c?c[1].replace(/-/g,"."):"";return{label:(c?b.slice(0,c.index).replace(/[-_.\s]+$/,""):b).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:d}}},52376:(a,b,c)=>{c.d(b,{E:()=>e});var d=c(26021);let e=(0,d.createServerReference)("40f6633f8af41aa18842e6933cb62e806eaad1b5d2",d.callServer,void 0,d.findSourceMapURL,"listProviderModels")},54768:(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,(a,b)=>`${b}${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,(a,d)=>`${d}## ${b}
4
- ${c}`):a.replace(/\s*$/,"")+`
5
-
6
- ## ${b}
7
- ${c}
8
- `}c.d(b,{a$:()=>e,c4:()=>f,tT:()=>d})},74203:(a,b,c)=>{c.d(b,{k:()=>e});var d=c(26021);let e=(0,d.createServerReference)("60453660dee437bb42f9f0c5458ca07b9ce46def3a",d.callServer,void 0,d.findSourceMapURL,"saveAgentModel")},85304:(a,b,c)=>{c.d(b,{bv:()=>t,eH:()=>q,iw:()=>o,jM:()=>n,kq:()=>p,yS:()=>s,z6:()=>r});var d=c(80501),e=c(73591),f=c(3770),g=c(54813),h=c(406),i=c(96405),j=c(37989),k=c(45900),l=c(54768),m=c(41581);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(64185).D)([n,o,p,q,r,s,t]),(0,d.A)(n,"601fb0abcca095924f19ea9fa627d8fb6ae37ed5cf",null),(0,d.A)(o,"60019ccf5cb44f88532a51709d1a6f116d0ebe2e7b",null),(0,d.A)(p,"60453660dee437bb42f9f0c5458ca07b9ce46def3a",null),(0,d.A)(q,"6079a30c2af74adc944e22e8116b6a2d5b5f8154f1",null),(0,d.A)(r,"60479edc6e0c56e3fc5f87f0d3f1d4cf99e3ff2a5d",null),(0,d.A)(s,"700e3c8ff5750f41152fdc601e31290373971395a1",null),(0,d.A)(t,"60d9f131506a3040cdd76e3599bc9a3b8e8e3d5dcd",null)},97187:(a,b,c)=>{c.d(b,{Y:()=>j});var d=c(40201),e=c(98604),f=c(18834),g=c(71955);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(47255);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(10707),c(52376)},98661:(a,b,c)=>{c.d(b,{W:()=>h});var d=c(40201),e=c(98604);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})}}};
@@ -1,4 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1352],{379:(e,s,t)=>{t.d(s,{m:()=>i});var a=t(4275),n=t(5904),l=t(888),r=t(869);let c=e=>(e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e))+" tks";function i({stat:e,onCompact:s,compacting:t}){let d=(0,r.k)(),o=2*Math.PI*15,m=Math.min(1,e.used/e.max)*o,h=Math.min(1,e.reserve/e.max)*o,u=e.usedPct>=85?"#e8688f":e.usedPct>=65?"#e0a44e":"#b3d97a",p=e.remainingPct<=35,x=e.used>0&&e.usedPct<1?"<1%":`${e.usedPct}%`;return(0,a.jsxs)("div",{className:"ctx-donut-wrap",children:[(0,a.jsxs)("div",{className:"ctx-donut",tabIndex:0,children:[(0,a.jsxs)("svg",{width:38,height:38,viewBox:"0 0 38 38",children:[(0,a.jsx)("circle",{cx:19,cy:19,r:15,fill:"none",stroke:"var(--border)",strokeWidth:4}),(0,a.jsx)("circle",{cx:19,cy:19,r:15,fill:"none",stroke:u,strokeWidth:4,strokeLinecap:"round",strokeDasharray:`${m} ${o}`,transform:"rotate(-90 19 19)"}),(0,a.jsx)("circle",{cx:19,cy:19,r:15,fill:"none",stroke:"var(--text-faint)",strokeWidth:4,strokeDasharray:`${h} ${o}`,strokeDashoffset:-m,transform:"rotate(-90 19 19)"}),(0,a.jsx)("text",{x:19,y:20,textAnchor:"middle",dominantBaseline:"middle",fontSize:10,fontWeight:700,fill:"var(--text)",children:x})]}),(0,a.jsxs)("div",{className:"ctx-pop",children:[(0,a.jsxs)("div",{className:"ctx-pop-title",children:[(0,a.jsx)(l.I,{name:"pulse",size:12})," ",d("chrome.ctx.title")]}),(0,a.jsxs)("div",{className:"ctx-rows",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:d("chrome.ctx.max")}),(0,a.jsx)("b",{children:c(e.max)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:d("chrome.ctx.used")}),(0,a.jsxs)("b",{style:{color:u},children:[c(e.used)," \xb7 ",x]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:d("chrome.ctx.reserve")}),(0,a.jsxs)("b",{children:[c(e.reserve)," \xb7 ",e.reservePct,"%"]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:d("chrome.ctx.remaining")}),(0,a.jsxs)("b",{children:[c(e.remaining)," \xb7 ",e.remainingPct,"%"]})]})]}),e.perAgent.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"ctx-pop-sub",children:d("chrome.ctx.byAgent")}),(0,a.jsx)("div",{className:"ctx-agents",children:e.perAgent.slice(0,8).map(e=>(0,a.jsxs)("div",{className:"ctx-agent",children:[(0,a.jsx)(n.e,{name:e.name,color:e.color,size:18}),(0,a.jsx)("span",{className:"ctx-agent-name",children:e.name}),(0,a.jsx)("span",{className:"ctx-agent-bar",children:(0,a.jsx)("span",{style:{width:`${e.pct}%`,background:e.color}})}),(0,a.jsxs)("span",{className:"ctx-agent-tok",children:[c(e.tokens)," \xb7 ",e.pct,"%",e.usd>0?` \xb7 $${e.usd.toFixed(2)}`:""]})]},e.handle))})]}),(0,a.jsx)("div",{className:"ctx-pop-note",children:d("chrome.ctx.explain")})]})]}),p&&(0,a.jsxs)("button",{className:"ctx-compact",onClick:s,disabled:t,title:d("chrome.ctx.compactHint"),children:[t?(0,a.jsx)("span",{className:"spin",children:(0,a.jsx)(l.I,{name:"refresh",size:12})}):(0,a.jsx)(l.I,{name:"collapse",size:12}),d(t?"chrome.ctx.compacting":"chrome.ctx.compact")]})]})}},953:(e,s,t)=>{t.d(s,{L:()=>n});var a=t(7797);let n=(0,a.createServerReference)("40aadad454b3fc484d18736e506b6a2a32819a21ab",a.callServer,void 0,a.findSourceMapURL,"compactConversation")},1417:(e,s,t)=>{t.d(s,{V:()=>n});var a=t(7797);let n=(0,a.createServerReference)("0032ba29fe2163f67cc17abd0182466fd3daea7438",a.callServer,void 0,a.findSourceMapURL,"seedDefaultBlocksAction")},1995:(e,s,t)=>{t.d(s,{V4:()=>w,H8:()=>M,qs:()=>b});var a=t(4275),n=t(2899),l=t(6295),r=t(8343),c=t(6054),i=t(5904),d=t(888),o=t(869),m=t(7797);let h=(0,m.createServerReference)("406ec5456555044ff621f786671ee4e35d94b2f65f",m.callServer,void 0,m.findSourceMapURL,"pullKbForComposer"),u=(0,m.createServerReference)("40293c48ef9855275a704947ae0948f08794f5b5a6",m.callServer,void 0,m.findSourceMapURL,"sendMessageToKb"),p=(0,m.createServerReference)("407c9a869e794c461ec1b8cf091f5e6ca94e51e94b",m.callServer,void 0,m.findSourceMapURL,"taskRef");var x=t(1417),g=t(4494);let j={read:"Read",create:"Create",edit:"Edit",run:"Run",search:"Search"},f=[{cmd:"/help",descKey:"help"},{cmd:"/kb",descKey:"kb",arg:"<question>"},{cmd:"/search",descKey:"search",arg:"<query>"},{cmd:"/graph",descKey:"graph",arg:"<key>"},{cmd:"/status",descKey:"status"},{cmd:"/agents",descKey:"agents"},{cmd:"/agent",descKey:"agent",arg:"<handle>"},{cmd:"/new-goal",descKey:"newGoal",arg:"<brief>"},{cmd:"/new-issue",descKey:"newIssue",arg:"<title>"},{cmd:"/new-spec",descKey:"newSpec",arg:"<title>"},{cmd:"/generate-plan",descKey:"generatePlan",arg:"<brief>"},{cmd:"/approve",descKey:"approve"},{cmd:"/reject",descKey:"reject",arg:"<reason>"},{cmd:"/run-247",descKey:"run247"},{cmd:"/pause",descKey:"pause"},{cmd:"/cancel",descKey:"cancel"},{cmd:"/archive",descKey:"archive"},{cmd:"/assign",descKey:"assign",arg:"<issue> <@agent>"},{cmd:"/review",descKey:"review"},{cmd:"/close-sprint",descKey:"closeSprint"},{cmd:"/test-dev",descKey:"testDev"},{cmd:"/github",descKey:"github"},{cmd:"/prepare-deploy",descKey:"prepareDeploy"},{cmd:"/export-source",descKey:"exportSource",arg:"<repo>"},{cmd:"/models",descKey:"models"},{cmd:"/skills",descKey:"skills"},{cmd:"/locks",descKey:"locks"},{cmd:"/telegram",descKey:"telegram"},{cmd:"/reindex",descKey:"reindex"},{cmd:"/curate",descKey:"curate"},{cmd:"/clear",descKey:"clear"}],v={idle:{c:"#6b7390",bg:"rgba(120,130,160,.16)"},working:{c:"#b3d97a",bg:"rgba(179,217,122,.15)"},review:{c:"#e0a44e",bg:"rgba(224,164,78,.16)"},blocked:{c:"#e8688f",bg:"rgba(232,104,143,.16)"}};function b({status:e}){let s=(0,o.k)(),t=v[e]??v.idle;return(0,a.jsx)("span",{className:"status-pill",style:{color:t.c,background:t.bg},children:e in v?s("chat.status."+e):e})}function k(e,s,t){let n=t?Object.fromEntries(t.map(e=>[e.key.toLowerCase(),e])):{},l=t&&t.length>0;return e.split(l?/(@[a-z0-9-]+|#[a-z0-9_-]+)/gi:/(@[a-z0-9-]+)/gi).map((e,t)=>{if(/^@[a-z0-9-]+$/i.test(e)&&s.has(e.slice(1).toLowerCase()))return(0,a.jsx)("span",{className:"mention",children:e},t);if(l&&/^#[a-z0-9_-]+$/i.test(e)){let s=n[e.slice(1).toLowerCase()];if(s){let n="goal"===s.kind?"/goals":"spec"===s.kind?"/planner":"/pm";return(0,a.jsx)("a",{className:"ref-chip",href:n,title:s.title,children:e},t)}}return(0,a.jsx)("span",{children:e},t)})}function N({step:e}){let s,t,n=(0,o.k)(),l=e.kind in j?n("chat.verb."+e.kind):e.kind,r="run"===e.kind,c="edit"===e.kind&&!!e.detail,i="create"===e.kind&&!!e.detail,d=c?e.detail.split("\n"):[],m=c?d.filter(e=>e.startsWith("+")).length:0,h=c?d.filter(e=>e.startsWith("-")).length:0,u=i?e.detail.slice(0,4e3).split("\n"):[];return(0,a.jsxs)("div",{className:"work-step",children:[(0,a.jsxs)("div",{className:"wstep-head",children:[(0,a.jsx)("span",{className:"wstep-verb "+e.kind,children:l}),(0,a.jsx)("span",{className:"wstep-file",children:e.target}),c&&(0,a.jsxs)("span",{className:"wstep-badge",children:[(0,a.jsxs)("span",{className:"plus",children:["+",m]})," ",(0,a.jsxs)("span",{className:"minus",children:["−",h]})]}),i&&(0,a.jsx)("span",{className:"wstep-badge",children:(0,a.jsxs)("span",{className:"plus",children:["+",u.length]})})]}),i&&(0,a.jsx)("div",{className:"wstep-code scroll",children:u.map((e,s)=>(0,a.jsxs)("div",{className:"wcode-line",children:[(0,a.jsx)("span",{className:"wcode-gutter",children:s+1}),(0,a.jsx)("span",{className:"wcode-text",children:e||"​"})]},s))}),c&&(0,a.jsx)("div",{className:"wstep-code scroll",children:d.map((e,s)=>{let t=e.startsWith("+")?"add":e.startsWith("-")?"del":"ctx";return(0,a.jsxs)("div",{className:"wdiff-line "+t,children:[(0,a.jsx)("span",{className:"wdiff-sign",children:"add"===t?"+":"del"===t?"−":" "}),(0,a.jsx)("span",{className:"wdiff-text",children:e.slice(1)||"​"})]},s)})}),r&&e.detail&&(t=(s=e.detail.split("\n")).slice(0,14),(0,a.jsxs)("div",{className:"wstep-term",children:[t.map((e,s)=>(0,a.jsx)("div",{className:/✓|passed|ok\b/i.test(e)?"ok":"",children:e||"​"},s)),s.length>t.length&&(0,a.jsxs)("div",{className:"wstep-more",children:["… +",s.length-t.length," lines"]})]}))]})}function y({steps:e,live:s}){let t=(0,o.k)(),l=e.filter(e=>["read","create","edit","run","search"].includes(e.kind)),r=l.filter(e=>"create"===e.kind||"edit"===e.kind).length,c=[...e].reverse().find(e=>"thinking"===e.kind),i=!s,[m,h]=(0,n.useState)(s);return 0!==l.length||c?(0,a.jsxs)("div",{className:"work-block"+(m?"":" collapsed"),children:[(0,a.jsxs)("button",{type:"button",className:"work-head",onClick:()=>h(e=>!e),children:[i?(0,a.jsx)("span",{className:"done-check",children:(0,a.jsx)(d.I,{name:"check",size:15})}):(0,a.jsx)("span",{className:"spin",children:(0,a.jsx)(d.I,{name:"refresh",size:14})}),(0,a.jsx)("span",{className:"wlabel",children:t(i?"chat.work.done":"chat.work.working")}),(0,a.jsx)("span",{className:"wmeta",children:i?t(1===l.length?"chat.work.actions.one":"chat.work.actions.other",{n:l.length}):t("chat.work.workingEllipsis")}),i&&r>0&&(0,a.jsxs)("span",{className:"wmeta wfiles",title:"files changed",children:["✎ ",r]}),(0,a.jsx)("span",{className:"work-toggle"+(m?" open":""),children:(0,a.jsx)(d.I,{name:"chevronRight",size:13})})]}),m&&(0,a.jsxs)(a.Fragment,{children:[c?.detail&&(0,a.jsxs)("div",{className:"work-thinking",children:[(0,a.jsx)("span",{className:"ti",children:(0,a.jsx)(d.I,{name:"bot",size:13})}),(0,a.jsx)("span",{children:c.detail})]}),(0,a.jsx)("div",{className:"work-steps",children:l.map(e=>(0,a.jsx)(N,{step:e},e.id))})]})]}):null}function w({onSend:e,placeholder:s,agents:t,defaultText:l="",requireMention:r=!1,enableAttachments:c=!0,refs:m}){let[u,p]=(0,n.useState)(l),x=(0,o.k)(),g=!r||u.trim().startsWith("/")||(u.match(/@([a-z0-9-]+)/gi)||[]).some(e=>t.some(s=>s.handle.toLowerCase()===e.slice(1).toLowerCase())),[j,v]=(0,n.useState)(!1),[b,k]=(0,n.useState)(null),[N,y]=(0,n.useState)(null),[S,z]=(0,n.useState)(null),[D,I]=(0,n.useState)([]),[K,R]=(0,n.useState)(""),[C,M]=(0,n.useState)(!1),[A,L]=(0,n.useState)(!1),[E,$]=(0,n.useState)(""),[P,T]=(0,n.useState)(null),[F,W]=(0,n.useState)(""),[U,q]=(0,n.useTransition)(),H=(0,n.useRef)(null),B=(0,n.useRef)(null),_=(0,n.useRef)(null),V=void 0!==m;async function O(e){if(!e||!e.length)return;R("");let s=10-D.length,t=Array.from(e).slice(0,Math.max(0,s));if(!t.length)return void R(x("chat.composer.maxAttachments"));let a=new FormData;for(let e of t)a.append("files",e);M(!0);try{let e=await fetch("/api/upload",{method:"POST",body:a}),s=await e.json();if(!e.ok||!s.ok)return void R(s.error??x("chat.composer.uploadFailed"));I(e=>[...e,...s.attachments].slice(0,10))}catch{R(x("chat.composer.uploadFailed"))}finally{M(!1),B.current&&(B.current.value="")}}function G(e){e.style.height="auto",e.style.height=Math.min(e.scrollHeight,260)+"px"}function J(e){if(!b||!H.current)return;let s=u.slice(0,b.start),t=u.slice(H.current.selectionStart),a="@"+e.handle+" ";p(s+a+t),_.current=(s+a).length,k(null),requestAnimationFrame(()=>H.current?.focus())}function Q(e){if(!N||!H.current)return;let s=u.slice(0,N.start),t=u.slice(H.current.selectionStart),a="#"+e.key+" ";p(s+a+t),_.current=(s+a).length,y(null),requestAnimationFrame(()=>H.current?.focus())}function X(e){let s=e.cmd+(e.arg?" ":"");p(s),_.current=s.length,z(null),requestAnimationFrame(()=>H.current?.focus())}function Y(){let e=E.trim();if(!e){T(null),W(x("chat.kbPull.empty"));return}W(""),T(null),q(async()=>{let s=await h(e);s.ok&&s.text?T({text:s.text,sources:s.sources??[]}):W(x("chat.kbPull.noResult"))})}function Z(){let s=u.trim();!s&&0===D.length||g&&(e(s,D.length?D:void 0),p(""),I([]),R(""),H.current&&(H.current.style.height="auto"),k(null),z(null),y(null),L(!1))}return(0,n.useEffect)(()=>{null!=_.current&&H.current&&(H.current.setSelectionRange(_.current,_.current),_.current=null)}),(0,a.jsxs)("div",{className:"chat-composer",children:[b&&(0,a.jsxs)("div",{className:"mention-pop",children:[(0,a.jsxs)("div",{className:"mention-head",children:[(0,a.jsx)(d.I,{name:"at",size:12})," ",x("chat.composer.mentionAgent")]}),(0,a.jsxs)("div",{className:"mention-list scroll",children:[0===b.items.length&&(0,a.jsx)("div",{className:"mention-empty",children:x("chat.noAgentMatch",{q:b.query})}),b.items.map((e,s)=>(0,a.jsxs)("div",{className:"mention-item"+(s===b.index?" active":""),onMouseEnter:()=>k(e=>e&&{...e,index:s}),onMouseDown:s=>{s.preventDefault(),J(e)},children:[(0,a.jsx)(i.e,{name:e.name,color:e.color,image:e.image,size:24}),(0,a.jsx)("div",{className:"mi-text",children:(0,a.jsxs)("div",{className:"mi-name",children:[e.name," ",(0,a.jsxs)("span",{className:"mi-handle",children:["@",e.handle]})]})}),(0,a.jsx)("span",{className:"mi-role",children:e.role})]},e.handle))]})]}),N&&(0,a.jsxs)("div",{className:"mention-pop",children:[(0,a.jsxs)("div",{className:"mention-head",children:[(0,a.jsx)(d.I,{name:"branch",size:12})," ",x("chat.composer.referenceItem")]}),(0,a.jsxs)("div",{className:"mention-list scroll",children:[0===N.items.length&&(0,a.jsx)("div",{className:"mention-empty",children:x("chat.noRefMatch",{q:N.query})}),N.items.map((e,s)=>(0,a.jsxs)("div",{className:"mention-item"+(s===N.index?" active":""),onMouseEnter:()=>y(e=>e&&{...e,index:s}),onMouseDown:s=>{s.preventDefault(),Q(e)},children:[(0,a.jsx)("span",{className:"mi-ref-kind",children:x("chat.composer.refKind."+e.kind)}),(0,a.jsx)("div",{className:"mi-text",children:(0,a.jsxs)("div",{className:"mi-name",children:[(0,a.jsxs)("span",{className:"mi-handle",children:["#",e.key]})," ",e.title]})})]},e.id))]})]}),S&&(0,a.jsxs)("div",{className:"mention-pop",children:[(0,a.jsxs)("div",{className:"mention-head",children:[(0,a.jsx)(d.I,{name:"command",size:12})," ",x("chat.commands")]}),(0,a.jsx)("div",{className:"mention-list scroll",children:S.items.map((e,s)=>(0,a.jsxs)("div",{className:"mention-item"+(s===S.index?" active":""),onMouseEnter:()=>z(e=>e&&{...e,index:s}),onMouseDown:s=>{s.preventDefault(),X(e)},children:[(0,a.jsx)("div",{className:"mi-text",children:(0,a.jsxs)("div",{className:"mi-name",children:[e.cmd,e.arg&&(0,a.jsxs)("span",{className:"mi-handle",children:[" ",e.arg]})]})}),(0,a.jsx)("span",{className:"mi-role",children:x("chat.slash."+e.descKey)})]},e.cmd))})]}),A&&(0,a.jsxs)("div",{className:"mention-pop kb-pull-pop",children:[(0,a.jsxs)("div",{className:"mention-head",children:[(0,a.jsx)(d.I,{name:"branch",size:12})," ",x("chat.kbPull.title")]}),(0,a.jsxs)("div",{className:"kb-pull-body",children:[(0,a.jsxs)("div",{className:"kb-pull-row",children:[(0,a.jsx)("input",{className:"kb-pull-input",value:E,placeholder:x("chat.kbPull.placeholder"),onChange:e=>{$(e.target.value),W("")},onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),Y()),"Escape"===e.key&&(e.preventDefault(),L(!1))}}),(0,a.jsxs)("button",{type:"button",className:"att-btn",disabled:U,onMouseDown:e=>e.preventDefault(),onClick:Y,children:[U?(0,a.jsx)("span",{className:"spin",children:(0,a.jsx)(d.I,{name:"refresh",size:13})}):(0,a.jsx)(d.I,{name:"search",size:13}),x("chat.kbPull.search")]})]}),(0,a.jsx)("div",{className:"kb-pull-preview",children:U?(0,a.jsx)("div",{className:"kb-pull-muted",children:x("chat.kbPull.searching")}):P?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"kb-pull-text",children:P.text}),P.sources.length>0&&(0,a.jsx)("div",{className:"kb-pull-sources",children:P.sources.map(e=>(0,a.jsx)("span",{children:e},e))})]}):(0,a.jsx)("div",{className:F?"kb-pull-error":"kb-pull-muted",children:F||x("chat.kbPull.empty")})}),P&&(0,a.jsx)("div",{className:"kb-pull-actions",children:(0,a.jsxs)("button",{type:"button",className:"send-btn",onMouseDown:e=>e.preventDefault(),onClick:function(){if(!P)return;let e=P.sources.length?`
2
- Sources: ${P.sources.join(", ")}`:"",s=`KB: ${P.text}${e}`;p(e=>e.trim()?`${e.trimEnd()}
3
-
4
- ${s}`:s),L(!1),T(null),W(""),requestAnimationFrame(()=>{H.current&&(G(H.current),H.current.focus())})},children:[(0,a.jsx)(d.I,{name:"add",size:13})," ",x("chat.kbPull.insert")]})})]})]}),(0,a.jsxs)("div",{className:"composer-box"+(j?" focus":""),children:[D.length>0&&(0,a.jsx)("div",{className:"att-row",children:D.map((e,s)=>(0,a.jsxs)("span",{className:"att-chip",children:[(0,a.jsx)(d.I,{name:/^image\//.test(e.type)||"application/pdf"===e.type?"doc":"files",size:11}),(0,a.jsx)("span",{className:"att-name",children:e.name}),(0,a.jsx)("button",{className:"att-x",onClick:()=>I(e=>e.filter((e,t)=>t!==s)),children:(0,a.jsx)(d.I,{name:"close",size:10})})]},e.path))}),K&&(0,a.jsx)("div",{style:{fontSize:10.5,color:"#e8688f",padding:"2px 8px"},children:K}),(0,a.jsx)("textarea",{ref:H,className:"composer-input",value:u,rows:1,placeholder:s,onChange:e=>{p(e.target.value),function(e,s){let a=e.match(/^\/([a-z-]*)$/i);if(a){let e=a[1].toLowerCase(),s=f.filter(s=>s.cmd.slice(1).startsWith(e));k(null),y(null),z(s.length?{items:s,index:0}:null);return}z(null);let n=e.slice(0,s).match(/#([a-z0-9_-]*)$/i);if(n&&m&&m.length>0){let e=n[1].toLowerCase(),t=m.filter(s=>s.key.toLowerCase().includes(e)||s.title.toLowerCase().includes(e));k(null),y({query:e,start:s-n[0].length,items:t,index:0});return}y(null);let l=e.slice(0,s).match(/@([a-z0-9-]*)$/i);if(!l)return k(null);let r=l[1].toLowerCase(),c=t.filter(e=>e.handle.includes(r)||e.name.toLowerCase().includes(r)||e.role.toLowerCase().includes(r));k({query:r,start:s-l[0].length,items:c,index:0})}(e.target.value,e.target.selectionStart),G(e.target)},onKeyDown:function(e){if(S&&S.items.length){if("ArrowDown"===e.key){e.preventDefault(),z(e=>e&&{...e,index:(e.index+1)%e.items.length});return}if("ArrowUp"===e.key){e.preventDefault(),z(e=>e&&{...e,index:(e.index-1+e.items.length)%e.items.length});return}if("Enter"===e.key||"Tab"===e.key){e.preventDefault(),X(S.items[S.index]);return}if("Escape"===e.key){e.preventDefault(),z(null);return}}if(N&&N.items.length){if("ArrowDown"===e.key){e.preventDefault(),y(e=>e&&{...e,index:(e.index+1)%e.items.length});return}if("ArrowUp"===e.key){e.preventDefault(),y(e=>e&&{...e,index:(e.index-1+e.items.length)%e.items.length});return}if("Enter"===e.key||"Tab"===e.key){e.preventDefault(),Q(N.items[N.index]);return}if("Escape"===e.key){e.preventDefault(),y(null);return}}if(b&&b.items.length){if("ArrowDown"===e.key){e.preventDefault(),k(e=>e&&{...e,index:(e.index+1)%e.items.length});return}if("ArrowUp"===e.key){e.preventDefault(),k(e=>e&&{...e,index:(e.index-1+e.items.length)%e.items.length});return}if("Enter"===e.key||"Tab"===e.key){e.preventDefault(),J(b.items[b.index]);return}if("Escape"===e.key){e.preventDefault(),k(null);return}}if("Escape"===e.key&&A){e.preventDefault(),L(!1);return}"Enter"!==e.key||e.shiftKey||(e.preventDefault(),Z())},onFocus:()=>v(!0),onBlur:()=>v(!1)}),c&&(0,a.jsx)("input",{ref:B,type:"file",multiple:!0,hidden:!0,accept:".png,.jpg,.jpeg,.gif,.webp,.bmp,.pdf,.txt,.md,.csv,.json,.log,.zip,.doc,.docx,.xls,.xlsx,.ppt,.pptx",onChange:e=>O(e.target.files)}),(0,a.jsxs)("div",{className:"composer-foot",children:[(0,a.jsxs)("span",{className:"composer-actions",children:[c&&(0,a.jsxs)("button",{type:"button",className:"att-btn",title:x("chat.composer.attachTitle"),disabled:C||D.length>=10,onClick:()=>B.current?.click(),children:[C?(0,a.jsx)("span",{className:"spin",children:(0,a.jsx)(d.I,{name:"refresh",size:13})}):(0,a.jsx)(d.I,{name:"add",size:14})," ",D.length>0?`${D.length}/10`:x("chat.composer.attach")]}),V&&(0,a.jsxs)("button",{type:"button",className:"att-btn kb-pull-btn",title:x("chat.kbPull.open"),disabled:U,onMouseDown:e=>e.preventDefault(),onClick:function(){$(u.replace(/@[a-z0-9-]+/gi,"").trim().slice(0,180)),T(null),W(""),k(null),z(null),y(null),L(e=>!e)},children:[(0,a.jsx)(d.I,{name:"branch",size:13})," ",x("chat.kbPull.open")]})]}),r&&u.trim()&&!g?(0,a.jsxs)("span",{className:"composer-hint",style:{color:"#f0a35e"},children:[(0,a.jsx)(d.I,{name:"at",size:11})," ",x("chat.composer.mentionToSend")]}):(0,a.jsxs)("span",{className:"composer-hint",children:[(0,a.jsx)("kbd",{children:"↵"})," ",x("chat.composer.send")," \xb7 ",(0,a.jsx)("kbd",{children:"⇧↵"})," ",x("chat.composer.newline")]}),(0,a.jsxs)("button",{className:"send-btn",disabled:!u.trim()&&0===D.length||!g,onMouseDown:e=>e.preventDefault(),onClick:Z,children:[(0,a.jsx)(d.I,{name:"send",size:13})," ",x("home.cmd.run")]})]})]})]})}function S({atts:e}){return(0,a.jsx)("div",{className:"msg-atts",children:e.map(e=>{let s=`/api/upload?path=${encodeURIComponent(e.path)}`;return/^image\//.test(e.type)?(0,a.jsx)("a",{href:s,target:"_blank",rel:"noreferrer",className:"msg-att-img",title:e.name,children:(0,a.jsx)("img",{src:s,alt:e.name,loading:"lazy"})},e.path):(0,a.jsxs)("a",{href:s,target:"_blank",rel:"noreferrer",className:"msg-att-doc",title:e.name,children:[(0,a.jsx)(d.I,{name:"doc",size:13})," ",(0,a.jsx)("span",{className:"mad-name",children:e.name})]},e.path)})})}function z({id:e}){let s=(0,o.k)(),[t,l]=(0,n.useTransition)(),[r,c]=(0,n.useState)(!1);return(0,a.jsx)("button",{type:"button",className:"cmsg-kb",disabled:t||r,title:s(r?"chat.kbSave.saved":"chat.kbSave.send"),onClick:()=>l(async()=>{(await u(e)).ok&&c(!0)}),style:{background:"none",border:"none",cursor:r?"default":"pointer",padding:0,marginLeft:2,display:"inline-flex",alignItems:"center",color:r?"var(--accent)":"var(--text-faint)",opacity:t?.5:1},children:(0,a.jsx)(d.I,{name:r?"check":"branch",size:11,className:t?"sync-spin":""})})}function D({taskId:e}){let[s,t]=(0,n.useState)(null);return((0,n.useEffect)(()=>{let s=!0;return p(e).then(e=>{s&&t(e)}).catch(()=>{}),()=>{s=!1}},[e]),s)?(0,a.jsxs)("div",{style:{marginTop:5,fontSize:10.5,color:"var(--text-faint)",display:"flex",alignItems:"center",gap:5,flexWrap:"wrap"},children:[(0,a.jsx)(d.I,{name:"branch",size:10}),(0,a.jsx)("span",{style:{color:"var(--accent)",fontWeight:600},children:s.taskKey}),s.issueKey&&(0,a.jsxs)("span",{children:["\xb7 ",s.issueKey]}),s.goalTitle&&(0,a.jsxs)("span",{children:["\xb7 ",s.goalTitle.slice(0,40)]}),s.col&&(0,a.jsx)("span",{style:{padding:"0 5px",borderRadius:5,border:"1px solid var(--border)",textTransform:"capitalize"},children:s.col})]}):null}function I({blocks:e}){let s=(0,l.useRouter)(),t=(0,o.k)();return(0,a.jsxs)("div",{style:{marginTop:5,fontSize:10.5,color:"var(--text-faint)",display:"flex",alignItems:"center",gap:5,flexWrap:"wrap"},children:[(0,a.jsx)(d.I,{name:"doc",size:10}),(0,a.jsx)("span",{children:t("chat.touchedBlocks")}),e.map(e=>(0,a.jsx)("button",{type:"button",title:t("chat.touchedBlocks"),onClick:()=>s.push("/knowledge"),style:{color:"var(--accent)",fontWeight:600,background:"rgba(120,100,255,.10)",border:"1px solid rgba(120,100,255,.25)",borderRadius:4,padding:"0 5px",cursor:"pointer"},children:e},e))]})}function K({sources:e}){let[s,t]=(0,n.useState)(!1),l=(0,o.k)();return(0,a.jsxs)("div",{className:"msg-sources",children:[(0,a.jsxs)("button",{type:"button",className:"msg-sources-toggle",onClick:()=>t(e=>!e),children:[(0,a.jsx)(d.I,{name:"pulse",size:10})," ",l("chat.sources",{n:e.length})," ",(0,a.jsx)(d.I,{name:s?"chevronDown":"chevronRight",size:11})]}),s&&(0,a.jsx)("div",{className:"msg-sources-list",children:e.map((e,s)=>(0,a.jsx)("span",{children:e},s))})]})}function R({text:e,markdown:s,known:t,refs:l}){let i=(0,o.k)(),[d,m]=(0,n.useState)(!1),h=e.length>900;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"cmsg-bubble"+(h&&!d?" clamped":"")+(h&&d?" expanded":""),children:s?(0,a.jsx)("div",{className:"md cmsg-md",children:(0,a.jsx)(r.oz,{remarkPlugins:[c.A],children:e})}):k(e,t,l)}),h&&(0,a.jsx)("button",{type:"button",className:"cmsg-more",onClick:()=>m(e=>!e),children:i(d?"chat.showLess":"chat.showMore")})]})}function C({m:e}){let s=(0,o.k)(),t=(0,l.useRouter)(),[i,m]=(0,n.useTransition)(),[h,u]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null);return(0,a.jsxs)("div",{className:"kb-card",children:[(0,a.jsxs)("div",{className:"kb-card-head",children:[(0,a.jsx)(d.I,{name:"branch",size:14})," ",s("kbcard.title")]}),(0,a.jsx)("div",{className:"kb-card-body cmsg-md",children:(0,a.jsx)(r.oz,{remarkPlugins:[c.A],children:e.text})}),p&&(0,a.jsxs)("div",{className:"kb-card-note",children:[(0,a.jsx)(d.I,{name:"check",size:12})," ",p]}),(0,a.jsxs)("div",{className:"kb-card-actions",children:[(0,a.jsx)("button",{className:"kbc-btn primary",disabled:i,onClick:()=>m(async()=>{j(s("kbcard.created",{n:(await (0,x.V)()).seeded})),t.refresh()}),children:s("home.createBlocks")}),(0,a.jsx)("button",{className:"kbc-btn",onClick:()=>t.push("/knowledge"),children:s("home.openKnowledge")}),(0,a.jsx)("button",{className:"kbc-btn",disabled:i,onClick:()=>m(async()=>{j(s("kb.reindexResult",{n:(await (0,g.f)()).chunks})),t.refresh()}),children:s("kb.reindex")})]}),e.sources&&e.sources.length>0&&(0,a.jsxs)("div",{className:"kb-card-sources",children:[(0,a.jsxs)("button",{type:"button",className:"msg-sources-toggle",onClick:()=>u(e=>!e),children:[(0,a.jsx)(d.I,{name:"pulse",size:10})," ",s("chat.sources",{n:e.sources.length})," ",(0,a.jsx)(d.I,{name:h?"chevronDown":"chevronRight",size:11})]}),h&&(0,a.jsx)("div",{className:"msg-sources-list",children:e.sources.map((e,s)=>(0,a.jsx)("span",{children:e},s))})]})]})}function M({msgs:e,typing:s,agents:t,byRun:l,liveRuns:r,loading:c,highlightId:d,operator:m,markdownAgent:h=!1,emptyHint:u,avatarSize:p=30,refs:x}){let g=(0,o.k)(),j=(0,n.useRef)(null),f=(0,n.useRef)(!0),v=Object.fromEntries(t.map(e=>[e.handle,e])),b=new Set(t.map(e=>e.handle));return(0,n.useEffect)(()=>{let e=j.current;e&&f.current&&(e.scrollTop=e.scrollHeight)},[e,s,l,r]),(0,n.useEffect)(()=>{d&&document.getElementById("m-"+d)?.scrollIntoView({block:"center",behavior:"smooth"})},[d,e]),(0,a.jsxs)("div",{className:"chat-stream scroll",ref:j,onScroll:()=>{let e=j.current;e&&(f.current=e.scrollHeight-e.scrollTop-e.clientHeight<120)},children:[[...e].sort((e,s)=>{let t=e.createdAt?new Date(e.createdAt).getTime():0,a=s.createdAt?new Date(s.createdAt).getTime():0;return t!==a?t-a:("operator"!==e.fromKind)-("operator"!==s.fromKind)}).map(e=>{let s="operator"===e.fromKind,t=e.fromHandle?v[e.fromHandle]:null,n=l[e.id],r=!s&&"kb-card"===e.kind;return(0,a.jsxs)("div",{className:"cmsg"+(s?" operator":"")+(d===e.id?" highlight":""),id:"m-"+e.id,children:[s?m?.image?(0,a.jsx)(i.e,{name:m.name||g("chat.you"),color:"#9a5cff",image:m.image,size:p}):(0,a.jsx)("div",{className:"avatar",style:{background:"linear-gradient(150deg,#e0a44e,#9a5cff)",color:"#1a1206",width:p,height:p,borderRadius:Math.round(.3*p),display:"grid",placeItems:"center",fontWeight:700,fontSize:Math.round(.4*p)},children:"OP"}):t?(0,a.jsx)(i.e,{name:t.name,color:t.color,image:t.image,size:p}):(0,a.jsx)(i.e,{name:"?",color:"#6b7390",size:p}),(0,a.jsxs)("div",{className:"cmsg-body",children:[(0,a.jsxs)("div",{className:"cmsg-head",children:[(0,a.jsx)("span",{className:"cmsg-name",children:s?g("chat.you"):t?.name??e.fromHandle}),!s&&t&&(0,a.jsx)("span",{className:"cmsg-role",children:t.role}),(0,a.jsx)("span",{className:"cmsg-when",children:function(e){if(!e)return"";let s="string"==typeof e?new Date(e):e,t=s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),a=s.toLocaleDateString([],{day:"2-digit",month:"short"});return`${a}, ${t}`}(e.createdAt)}),!s&&e.text&&(0,a.jsx)(z,{id:e.id})]}),n&&n.length>0&&(0,a.jsx)(y,{steps:n,live:!1}),r?(0,a.jsx)(C,{m:e}):e.text&&(0,a.jsx)(R,{text:e.text,markdown:h&&!s,known:b,refs:x}),e.attachments&&e.attachments.length>0&&(0,a.jsx)(S,{atts:e.attachments}),!s&&!r&&e.sources&&e.sources.length>0&&(0,a.jsx)(K,{sources:e.sources}),!s&&e.taskId&&(0,a.jsx)(D,{taskId:e.taskId}),!s&&e.blocks&&e.blocks.length>0&&(0,a.jsx)(I,{blocks:e.blocks})]})]},e.id)}),r.map(([e,s])=>{let n=s.find(e=>e.agentId)?.agentId,l=t.find(e=>e.id===n);if(!l)return null;let r=s.reduce((e,s)=>Math.max(e,s.seq||0),0),c=s.some(e=>"done"===e.kind)||r>0&&Date.now()-r>12e4,d=s.filter(e=>"text"===e.kind).map(e=>e.detail).join("");return(0,a.jsxs)("div",{className:"cmsg",children:[(0,a.jsx)(i.e,{name:l.name,color:l.color,image:l.image,size:p}),(0,a.jsxs)("div",{className:"cmsg-body",children:[(0,a.jsxs)("div",{className:"cmsg-head",children:[(0,a.jsx)("span",{className:"cmsg-name",children:l.name}),(0,a.jsx)("span",{className:"cmsg-role",children:l.role})]}),(0,a.jsx)(y,{steps:s,live:!c}),d&&(0,a.jsxs)("div",{className:"cmsg-bubble",children:[k(d,b,x),!c&&(0,a.jsx)("span",{className:"live-caret"})]})]})]},"live-"+e)}),s.filter(e=>{let s=v[e];return s&&!r.some(([,e])=>e.some(e=>e.agentId===s.id))}).map(e=>{let s=v[e];return s?(0,a.jsxs)("div",{className:"cmsg",children:[(0,a.jsx)(i.e,{name:s.name,color:s.color,image:s.image,size:p}),(0,a.jsxs)("div",{className:"cmsg-body",children:[(0,a.jsxs)("div",{className:"cmsg-head",children:[(0,a.jsx)("span",{className:"cmsg-name",children:s.name}),(0,a.jsx)("span",{className:"cmsg-role",children:s.role})]}),(0,a.jsxs)("div",{className:"typing-bubble",children:[(0,a.jsx)("span",{}),(0,a.jsx)("span",{}),(0,a.jsx)("span",{})]})]})]},"typing-"+e):null}),c&&0===e.length&&0===r.length&&(0,a.jsx)("div",{className:"chat-skel","aria-label":g("home.chat.loading"),children:[0,1,2].map(e=>(0,a.jsxs)("div",{className:"skel-row",style:{animationDelay:`${.12*e}s`},children:[(0,a.jsx)("div",{className:"skel-avatar"}),(0,a.jsxs)("div",{className:"skel-lines",children:[(0,a.jsx)("div",{className:"skel-line",style:{width:"38%"}}),(0,a.jsx)("div",{className:"skel-line",style:{width:1===e?"82%":"64%"}}),2!==e&&(0,a.jsx)("div",{className:"skel-line",style:{width:"48%"}})]})]},e))}),!c&&0===e.length&&0===s.length&&0===r.length&&(0,a.jsx)("div",{className:"mention-empty",style:{textAlign:"center",padding:22},children:u??g("chat.stream.emptyHint")})]})}},3090:(e,s,t)=>{t.d(s,{k:()=>n});var a=t(7797);let n=(0,a.createServerReference)("60687b23eb88a4b6d050ea1eff119a716ca285d2f1",a.callServer,void 0,a.findSourceMapURL,"getEvents")},4494:(e,s,t)=>{t.d(s,{f:()=>n});var a=t(7797);let n=(0,a.createServerReference)("009a802d7a10b4fa53ab94c5ea252e140c419cfddc",a.callServer,void 0,a.findSourceMapURL,"reindexKbAction")},5904:(e,s,t)=>{t.d(s,{e:()=>n});var a=t(4275);function n({name:e,color:s,size:t=24,health:l,image:r}){let c=Math.max(6,Math.round(.3*t)),i=Math.round(.28*t),d=r?/^(data:|https?:|\/)/.test(r)?r:`/api/upload?path=${encodeURIComponent(r)}`:null;return(0,a.jsxs)("span",{style:{position:"relative",width:t,height:t,flex:`0 0 ${t}px`,display:"inline-block"},children:[d?(0,a.jsx)("img",{src:d,alt:e,width:t,height:t,style:{width:t,height:t,borderRadius:i,objectFit:"cover",display:"block"}}):(0,a.jsx)("span",{style:{width:t,height:t,borderRadius:i,background:s,color:"#fff",display:"grid",placeItems:"center",fontSize:Math.round(.42*t),fontWeight:700},children:(e[0]||"?").toUpperCase()}),l&&(0,a.jsx)("span",{style:{position:"absolute",right:-1,bottom:-1,width:c,height:c,borderRadius:"50%",background:"alive"===l?"var(--sx-string)":"stale"===l?"var(--sx-number)":"var(--text-faint)",border:"1.5px solid var(--bg-elevated)"}})]})}},6268:(e,s,t)=>{t.d(s,{p:()=>n});var a=t(7797);let n=(0,a.createServerReference)("40f888aafd1073418e5f8a3f6e24eb8de1c2793eba",a.callServer,void 0,a.findSourceMapURL,"conversationContext")},7674:(e,s,t)=>{t.d(s,{V:()=>n});var a=t(7797);let n=(0,a.createServerReference)("4014900b76ae4e93f9d64d32eeef8f3c8b6c055901",a.callServer,void 0,a.findSourceMapURL,"getMessages")}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2171],{1029:(e,n,a)=>{a.d(n,{J:()=>r});var s=a(7797);let r=(0,s.createServerReference)("406ba323fdd094cd6be0fe6a52da6e5a82ed902480",s.callServer,void 0,s.findSourceMapURL,"rejectSpec")},1291:(e,n,a)=>{a.d(n,{P:()=>r});var s=a(7797);let r=(0,s.createServerReference)("006910fc45d9bd87178dc83b87fb23580d680f1b14",s.callServer,void 0,s.findSourceMapURL,"approvePlan")},1476:(e,n,a)=>{a.d(n,{t:()=>r});var s=a(7797);let r=(0,s.createServerReference)("4033e7726f1645fd69f4a34fdb34b307c97d034641",s.callServer,void 0,s.findSourceMapURL,"approveIssue")},2171:(e,n,a)=>{a.d(n,{IssueApprove:()=>y,PlanGate:()=>k,PlanGateLive:()=>b,Run247Button:()=>S,p:()=>N});var s=a(4275),r=a(2899),t=a(6295),l=a(888),i=a(869),c=a(4906),d=a(7797);let o=(0,d.createServerReference)("40e30755c609a5f0104cb804f584fc0a8e4ee681b5",d.callServer,void 0,d.findSourceMapURL,"generatePlan"),p=(0,d.createServerReference)("0001025c89be533c6ae88d481b09f093b98dc8063a",d.callServer,void 0,d.findSourceMapURL,"requestPlanChanges");var u=a(1291),h=a(9865),g=a(1029),v=a(1476),m=a(5335);let f=(0,d.createServerReference)("4075dfc880f582744abc6fd205a1e398e8171d338b",d.callServer,void 0,d.findSourceMapURL,"setAuto247"),x=(0,d.createServerReference)("0077f2278034c406de1ccda97e8e5a1cb8b4778021",d.callServer,void 0,d.findSourceMapURL,"skipDesignGate");function j(e,n){window.dispatchEvent(new CustomEvent("constella:open-dm",{detail:{handle:e,text:n}}))}function b({planning:e,planSince:n,designRecommended:a=!1,designPending:d=!1}){let p=(0,i.k)(),[u,h]=(0,r.useTransition)(),g=(0,t.useRouter)(),[v,m]=(0,r.useState)(!1),[f,j]=(0,r.useState)(""),k=e||v;function N(){j(""),m(!0),window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"planner"}})),h(async()=>{try{let e=await o();(!e?.ok||!1===e.started)&&(m(!1),e?.error&&j(e.error)),g.refresh()}catch{m(!1),j(p("planner.gate.staleTab"))}})}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.AgentRunLive,{channel:"planner",resume:e,sinceSeq:e?n-1:0,onFinish:()=>m(!1)}),k?(0,s.jsxs)("div",{className:"plan-gate",children:[(0,s.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,s.jsx)("div",{className:"pg-ic",children:(0,s.jsx)(l.I,{name:"bot",size:20})}),(0,s.jsxs)("div",{className:"pg-main",children:[(0,s.jsx)("div",{className:"pg-t",children:p("planner.gate.drafting.t")}),(0,s.jsx)("div",{className:"pg-d",children:p("planner.gate.drafting.d")})]})]}):a||d?(0,s.jsxs)("div",{className:"plan-gate",style:{borderColor:"rgba(99,102,241,.45)"},children:[(0,s.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0,style:{background:"#6366f1"}}),(0,s.jsx)("div",{className:"pg-ic",style:{background:"rgba(99,102,241,.16)",color:"#6366f1"},children:(0,s.jsx)(l.I,{name:"skill",size:20})}),(0,s.jsxs)("div",{className:"pg-main",children:[(0,s.jsx)("div",{className:"pg-t",children:d?"Design step pending":"Recommended: prototype the design first"}),(0,s.jsx)("div",{className:"pg-d",children:d?"Ada is holding the plan on the design step. Open the Design module, build & approve the prototype with Grace, then Send to execution — Ada turns the approved design into specs & issues (zero drift).":"This is a frontend product. Prototype & approve the UI in the Design module before generating the plan — Grace turns the brief into a real visual reference, so the specs are precise and you avoid rework."}),f&&(0,s.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:f})]}),(0,s.jsxs)("div",{className:"pg-actions",children:[(0,s.jsxs)("button",{className:"btn-accent",onClick:()=>g.push("/design"),children:[(0,s.jsx)(l.I,{name:"skill",size:14})," Open Design"]}),(0,s.jsxs)("button",{className:"btn-ghost",disabled:u,onClick:function(){h(async()=>{try{await x()}catch{}}),N()},style:{fontSize:12},children:[(0,s.jsx)(l.I,{name:u?"refresh":"bot",size:13,className:u?"sync-spin":""})," ",u?p("planner.gate.analyzing"):"Skip design & plan anyway"]})]})]}):(0,s.jsxs)("div",{className:"plan-gate",children:[(0,s.jsx)("div",{className:"plan-gate-bar","aria-hidden":!0}),(0,s.jsx)("div",{className:"pg-ic",children:(0,s.jsx)(l.I,{name:"bot",size:20})}),(0,s.jsxs)("div",{className:"pg-main",children:[(0,s.jsx)("div",{className:"pg-t",children:p("planner.gate.noPlan.t")}),(0,s.jsx)("div",{className:"pg-d",children:p("planner.gate.noPlan.d")}),f&&(0,s.jsx)("div",{className:"pg-d",style:{color:"var(--sx-keyword)",marginTop:6},children:f})]}),(0,s.jsxs)("div",{className:"pg-actions",children:[(0,s.jsxs)("div",{className:"plan-hint",children:[(0,s.jsx)("div",{className:"plan-hint-t",children:p("planner.gate.hint.t")}),(0,s.jsx)("div",{className:"plan-hint-d",children:p("planner.gate.hint.d")})]}),(0,s.jsxs)("button",{className:"btn-accent",disabled:u,onClick:N,children:[(0,s.jsx)(l.I,{name:u?"refresh":"bot",size:14,className:u?"sync-spin":""})," ",u?p("planner.gate.analyzing"):p("planner.gate.generate")]})]})]})]})}function k({specs:e,total:n}){let a=(0,i.k)(),[t,c]=(0,r.useTransition)();return(0,s.jsxs)("div",{className:"plan-gate",children:[(0,s.jsx)("div",{className:"pg-ic",children:(0,s.jsx)(l.I,{name:"bot",size:20})}),(0,s.jsxs)("div",{className:"pg-main",children:[(0,s.jsx)("div",{className:"pg-t",children:a("planner.gate.ready.t")}),(0,s.jsx)("div",{className:"pg-d",children:a("planner.gate.ready.d",{specs:e,total:n})})]}),(0,s.jsxs)("div",{className:"pg-actions",children:[(0,s.jsxs)("button",{className:"btn-ghost",disabled:t,onClick:()=>c(async()=>{await p(),j("ada",a("planner.gate.rejectPlanDm"))}),children:[(0,s.jsx)(l.I,{name:"refresh",size:13})," ",a("planner.gate.requestChanges")]}),(0,s.jsxs)("button",{className:"btn-accent",disabled:t,onClick:()=>c(()=>(0,u.P)()),children:[(0,s.jsx)(l.I,{name:"check",size:14})," ",a("planner.gate.approvePlan")]})]})]})}function N({specId:e,specKey:n,approved:a}){let t=(0,i.k)(),[c,d]=(0,r.useTransition)();return a?(0,s.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,s.jsx)(l.I,{name:"check",size:11})," ",t("planner.approved")]}):(0,s.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,s.jsxs)("button",{className:"sc2-btn",disabled:c,onClick:()=>d(()=>(0,h.B)(e)),children:[(0,s.jsx)(l.I,{name:"check",size:11})," ",t("planner.approve")]}),(0,s.jsxs)("button",{className:"sc2-btn danger",disabled:c,onClick:()=>d(async()=>{j((await (0,g.J)(e)).handle,t("planner.rejectItemDm",{key:n}))}),children:[(0,s.jsx)(l.I,{name:"refresh",size:11})," ",t("planner.reject")]})]})}function y({issueId:e,issueKey:n,approved:a}){let t=(0,i.k)(),[c,d]=(0,r.useTransition)();return a?(0,s.jsxs)("span",{className:"pill",style:{background:"var(--sx-string)22",color:"var(--sx-string)"},children:[(0,s.jsx)(l.I,{name:"check",size:11})," ",t("planner.approved")]}):(0,s.jsxs)("span",{style:{display:"inline-flex",gap:6},children:[(0,s.jsxs)("button",{className:"sc2-btn",disabled:c,onClick:()=>d(()=>(0,v.t)(e)),children:[(0,s.jsx)(l.I,{name:"check",size:11})," ",t("planner.approve")]}),(0,s.jsxs)("button",{className:"sc2-btn danger",disabled:c,onClick:()=>d(async()=>{j((await (0,m.d)(e)).handle,t("planner.rejectItemDm",{key:n}))}),children:[(0,s.jsx)(l.I,{name:"refresh",size:11})," ",t("planner.reject")]})]})}function S({auto:e,approved:n,state:a}){let t=(0,i.k)(),[c,d]=(0,r.useTransition)(),o=t(c?e?"planner.run247.pausing":"planner.run247.starting":"waiting-approval"===a?"planner.run247.approveToRun":"all-done"===a?"planner.run247.allDone":e?"planner.run247.pause":"planner.run247.run"),p="blocked"===a?t("planner.run247.blockedTip"):void 0,u="off"===a&&!c;return(0,s.jsxs)("button",{className:"btn-"+(e?"ghost":"accent")+(u?" run-attn":""),disabled:!n||"all-done"===a||c,title:p,onClick:()=>d(()=>f(!e)),children:[(0,s.jsx)(l.I,{name:c?"refresh":"waiting-approval"===a?"bot":"all-done"===a?"check":e?"close":"play",size:14,className:c?"sync-spin":""})," ",o,("running"===a||u)&&(0,s.jsx)("span",{className:"dotpulse",style:{marginLeft:6}})]})}},3090:(e,n,a)=>{a.d(n,{k:()=>r});var s=a(7797);let r=(0,s.createServerReference)("60687b23eb88a4b6d050ea1eff119a716ca285d2f1",s.callServer,void 0,s.findSourceMapURL,"getEvents")},4906:(e,n,a)=>{a.d(n,{AgentRunLive:()=>o});var s=a(4275),r=a(2899),t=a(6295),l=a(888),i=a(3090),c=a(869);let d=["read","create","edit","run","search","thinking","done","error"];function o({channel:e,resume:n=!1,sinceSeq:a=0,onFinish:p}){let u=(0,c.k)(),h=(0,t.useRouter)(),[g,v]=(0,r.useState)(n),[m,f]=(0,r.useState)([]),[x,j]=(0,r.useState)(0),b=(0,r.useRef)(n?a:0),k=(0,r.useRef)(!1),N=(0,r.useRef)(0);if((0,r.useEffect)(()=>{n&&(b.current=a,k.current=!1,N.current=a>0?a:Date.now(),f([]),j(Math.max(0,Math.floor((Date.now()-N.current)/1e3))),v(!0))},[n,a]),(0,r.useEffect)(()=>{function n(n){let a=n.detail;a?.channel===e&&(b.current=Date.now()-1,k.current=!1,N.current=Date.now(),f([]),j(0),v(!0))}return window.addEventListener("constella:agent-run",n),()=>window.removeEventListener("constella:agent-run",n)},[e]),(0,r.useEffect)(()=>{if(!g)return;N.current||(N.current=Date.now());let e=setInterval(()=>j(Math.floor((Date.now()-N.current)/1e3)),1e3);return()=>clearInterval(e)},[g]),(0,r.useEffect)(()=>{if(!g)return;let n=!0,a=Date.now();async function s(){let s=await (0,i.k)(e,b.current);n&&(s.length&&(b.current=Math.max(b.current,...s.map(e=>e.seq)),f(e=>{let n=new Set(e.map(e=>e.id));return[...e,...s.filter(e=>!n.has(e.id))]}),s.some(e=>"done"===e.kind||"error"===e.kind)&&(k.current||(k.current=!0,h.refresh(),p?.()),setTimeout(()=>{n&&v(!1)},2500))),Date.now()-a>96e4&&v(!1))}s();let r=setInterval(s,700);return()=>{n=!1,clearInterval(r)}},[g,e,h,p]),!g&&0===m.length)return null;let y=function(e){let n=[];for(let a of e)if("text"===a.kind){let e=(a.detail||"").replace(/\s+/g," ").trim();if(!e)continue;let s=n[n.length-1];s&&"text"===s.kind?s.content=(s.content+" "+e).slice(-600):n.push({id:a.id,kind:"text",content:e})}else if("thinking"===a.kind){let e=(a.detail||a.target||"").replace(/\s+/g," ").trim();e&&n.push({id:a.id,kind:"thinking",content:e})}else n.push({id:a.id,kind:a.kind,content:function(e){if(!e)return"";let n=e.split(/[\\/]/);return n.length>1?n.slice(-2).join("/"):e}(a.target)||a.detail||""});return n}(m),S=y.slice(-5),w=y.length-S.length,I=m.some(e=>"done"===e.kind||"error"===e.kind),R=m.some(e=>"error"===e.kind),z=String(Math.floor(x/60)).padStart(2,"0"),C=String(x%60).padStart(2,"0");return(0,s.jsxs)("div",{className:"card live-stream",style:{marginBottom:16,borderColor:R?"var(--sx-keyword)":"var(--accent)"},children:[(0,s.jsxs)("div",{className:"set-desc",style:{marginBottom:8,display:"flex",alignItems:"center",gap:7},children:[g&&!I?(0,s.jsx)("span",{className:"dotpulse"}):(0,s.jsx)(l.I,{name:R?"close":"check",size:13,style:{color:R?"var(--sx-keyword)":"var(--sx-string)"}}),g&&!I?u("agent.run.working"):R?u("agent.run.failed"):u("agent.run.finished"),y.length>0&&(0,s.jsxs)("span",{style:{color:"var(--text-faint)"},children:["\xb7 ",u(1===y.length?"agent.run.steps.one":"agent.run.steps.other",{n:y.length})]}),(0,s.jsxs)("span",{className:"live-elapsed",style:{marginLeft:"auto"},children:[z,":",C]})]}),0===S.length?(0,s.jsxs)("div",{className:"muted",style:{fontSize:12,display:"flex",alignItems:"center",gap:7},children:[(0,s.jsx)("span",{className:"sync-spin",children:(0,s.jsx)(l.I,{name:"refresh",size:12})})," ",u("agent.run.reading")]}):(0,s.jsxs)(s.Fragment,{children:[w>0&&(0,s.jsx)("div",{className:"live-more",children:u(1===w?"agent.run.earlier.one":"agent.run.earlier.other",{n:w})}),(0,s.jsx)("div",{className:"live-stream-lines",children:S.map(e=>(0,s.jsxs)("div",{className:"live-line "+e.kind,children:["text"!==e.kind&&(0,s.jsx)("span",{className:"ll-k",children:d.includes(e.kind)?u(`agent.verb.${e.kind}`):e.kind}),(0,s.jsxs)("span",{className:"ll-c",children:[e.content,!I&&e===S[S.length-1]&&"text"===e.kind&&(0,s.jsx)("span",{className:"ll-caret"})]})]},e.id))})]})]})}},5335:(e,n,a)=>{a.d(n,{d:()=>r});var s=a(7797);let r=(0,s.createServerReference)("40fbd1fb24c8548e39971f010ae94d301e3ef53fde",s.callServer,void 0,s.findSourceMapURL,"rejectIssue")},9865:(e,n,a)=>{a.d(n,{B:()=>r});var s=a(7797);let r=(0,s.createServerReference)("4060d874ebb500e0e00ccb4b93d6305ec6dc34ba0c",s.callServer,void 0,s.findSourceMapURL,"approveSpec")}}]);