chorus-codes 0.7.3 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +7 -7
  3. package/.next/build-manifest.json +13 -14
  4. package/.next/next-minimal-server.js.nft.json +1 -1
  5. package/.next/next-server.js.nft.json +1 -1
  6. package/.next/prerender-manifest.json +3 -3
  7. package/.next/react-loadable-manifest.json +6 -0
  8. package/.next/required-server-files.js +2 -0
  9. package/.next/required-server-files.json +2 -0
  10. package/.next/server/app/_global-error/page.js +32 -10
  11. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  12. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -3
  13. package/.next/server/app/_global-error.html +1 -1
  14. package/.next/server/app/_global-error.meta +2 -1
  15. package/.next/server/app/_global-error.rsc +8 -9
  16. package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -9
  17. package/.next/server/app/_global-error.segments/{__PAGE__.segment.rsc → _global-error/__PAGE__.segment.rsc} +2 -2
  18. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  19. package/.next/server/app/_global-error.segments/_head.segment.rsc +3 -4
  20. package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  21. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  22. package/.next/server/app/_not-found/page.js +2 -13
  23. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  24. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -3
  25. package/.next/server/app/_not-found.html +1 -1
  26. package/.next/server/app/_not-found.rsc +12 -10
  27. package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -10
  28. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  29. package/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  30. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  32. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -2
  33. package/.next/server/app/api/daemon/[...path]/route.js +1 -7
  34. package/.next/server/app/api/daemon/[...path]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/daemon/[...path]/route_client-reference-manifest.js +1 -3
  36. package/.next/server/app/api/run-artifacts/[chatId]/route.js +1 -6
  37. package/.next/server/app/api/run-artifacts/[chatId]/route.js.nft.json +1 -1
  38. package/.next/server/app/api/run-artifacts/[chatId]/route_client-reference-manifest.js +1 -3
  39. package/.next/server/app/connect/page.js +2 -15
  40. package/.next/server/app/connect/page.js.nft.json +1 -1
  41. package/.next/server/app/connect/page_client-reference-manifest.js +1 -3
  42. package/.next/server/app/favicon.ico/route.js +1 -8
  43. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  44. package/.next/server/app/icon.svg/route.js +1 -7
  45. package/.next/server/app/icon.svg/route.js.nft.json +1 -1
  46. package/.next/server/app/new/page.js +2 -14
  47. package/.next/server/app/new/page.js.nft.json +1 -1
  48. package/.next/server/app/new/page_client-reference-manifest.js +1 -3
  49. package/.next/server/app/new.html +1 -1
  50. package/.next/server/app/new.rsc +14 -14
  51. package/.next/server/app/new.segments/_full.segment.rsc +14 -14
  52. package/.next/server/app/new.segments/_head.segment.rsc +4 -4
  53. package/.next/server/app/new.segments/_index.segment.rsc +4 -4
  54. package/.next/server/app/new.segments/_tree.segment.rsc +4 -4
  55. package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +4 -4
  56. package/.next/server/app/new.segments/new.segment.rsc +3 -3
  57. package/.next/server/app/onboarding/page.js +2 -14
  58. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  59. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -3
  60. package/.next/server/app/onboarding.html +1 -1
  61. package/.next/server/app/onboarding.rsc +14 -14
  62. package/.next/server/app/onboarding.segments/_full.segment.rsc +14 -14
  63. package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  64. package/.next/server/app/onboarding.segments/_index.segment.rsc +4 -4
  65. package/.next/server/app/onboarding.segments/_tree.segment.rsc +4 -4
  66. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  67. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  68. package/.next/server/app/page.js +2 -17
  69. package/.next/server/app/page.js.nft.json +1 -1
  70. package/.next/server/app/page_client-reference-manifest.js +1 -3
  71. package/.next/server/app/personas/page.js +2 -14
  72. package/.next/server/app/personas/page.js.nft.json +1 -1
  73. package/.next/server/app/personas/page_client-reference-manifest.js +1 -3
  74. package/.next/server/app/personas.html +1 -1
  75. package/.next/server/app/personas.rsc +14 -14
  76. package/.next/server/app/personas.segments/_full.segment.rsc +14 -14
  77. package/.next/server/app/personas.segments/_head.segment.rsc +4 -4
  78. package/.next/server/app/personas.segments/_index.segment.rsc +4 -4
  79. package/.next/server/app/personas.segments/_tree.segment.rsc +4 -4
  80. package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +4 -4
  81. package/.next/server/app/personas.segments/personas.segment.rsc +3 -3
  82. package/.next/server/app/runs/[runId]/page.js +2 -16
  83. package/.next/server/app/runs/[runId]/page.js.nft.json +1 -1
  84. package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +1 -3
  85. package/.next/server/app/runs/page.js +2 -15
  86. package/.next/server/app/runs/page.js.nft.json +1 -1
  87. package/.next/server/app/runs/page_client-reference-manifest.js +1 -3
  88. package/.next/server/app/settings/page.js +26 -14
  89. package/.next/server/app/settings/page.js.nft.json +1 -1
  90. package/.next/server/app/settings/page_client-reference-manifest.js +1 -3
  91. package/.next/server/app/settings/permissions/page.js +2 -14
  92. package/.next/server/app/settings/permissions/page.js.nft.json +1 -1
  93. package/.next/server/app/settings/permissions/page_client-reference-manifest.js +1 -3
  94. package/.next/server/app/settings.html +1 -1
  95. package/.next/server/app/settings.rsc +14 -14
  96. package/.next/server/app/settings.segments/_full.segment.rsc +14 -14
  97. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  98. package/.next/server/app/settings.segments/_index.segment.rsc +4 -4
  99. package/.next/server/app/settings.segments/_tree.segment.rsc +4 -4
  100. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  101. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  102. package/.next/server/app/templates/page.js +2 -14
  103. package/.next/server/app/templates/page.js.nft.json +1 -1
  104. package/.next/server/app/templates/page_client-reference-manifest.js +1 -3
  105. package/.next/server/app/templates.html +1 -1
  106. package/.next/server/app/templates.rsc +14 -14
  107. package/.next/server/app/templates.segments/_full.segment.rsc +14 -14
  108. package/.next/server/app/templates.segments/_head.segment.rsc +4 -4
  109. package/.next/server/app/templates.segments/_index.segment.rsc +4 -4
  110. package/.next/server/app/templates.segments/_tree.segment.rsc +4 -4
  111. package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +4 -4
  112. package/.next/server/app/templates.segments/templates.segment.rsc +3 -3
  113. package/.next/server/app-paths-manifest.json +7 -7
  114. package/.next/server/chunks/144.js +25 -0
  115. package/.next/server/chunks/332.js +18 -0
  116. package/.next/server/chunks/418.js +1 -0
  117. package/.next/server/chunks/429.js +1 -0
  118. package/.next/server/chunks/451.js +45 -0
  119. package/.next/server/chunks/498.js +1 -0
  120. package/.next/server/chunks/504.js +1 -0
  121. package/.next/server/chunks/557.js +5 -0
  122. package/.next/server/chunks/668.js +25 -0
  123. package/.next/server/chunks/681.js +1 -0
  124. package/.next/server/chunks/946.js +1 -0
  125. package/.next/server/chunks/95.js +1 -0
  126. package/.next/server/middleware-build-manifest.js +1 -21
  127. package/.next/server/middleware-manifest.json +2 -2
  128. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  129. package/.next/server/next-font-manifest.js +1 -1
  130. package/.next/server/next-font-manifest.json +1 -51
  131. package/.next/server/pages/404.html +1 -1
  132. package/.next/server/pages/500.html +1 -1
  133. package/.next/server/server-reference-manifest.js +1 -1
  134. package/.next/server/server-reference-manifest.json +1 -5
  135. package/.next/server/webpack-runtime.js +1 -0
  136. package/.next/static/VWSkj_Yx6OKSjPmYY8ewj/_buildManifest.js +1 -0
  137. package/.next/static/chunks/116-0372d11bc2a9ac4d.js +25 -0
  138. package/.next/static/chunks/128-a5d059bf5b2e5090.js +32 -0
  139. package/.next/static/chunks/15-d438a2b057302bed.js +1 -0
  140. package/.next/static/chunks/344-1f06059a92faa936.js +1 -0
  141. package/.next/static/chunks/720-9732eeb760e004e3.js +5 -0
  142. package/.next/static/chunks/744-2b89d96d64610581.js +1 -0
  143. package/.next/static/chunks/app/_global-error/page-c01ad9f9473ce080.js +1 -0
  144. package/.next/static/chunks/app/_not-found/page-715bac6dc7f3427d.js +1 -0
  145. package/.next/static/chunks/app/api/daemon/[...path]/route-c01ad9f9473ce080.js +1 -0
  146. package/.next/static/chunks/app/api/run-artifacts/[chatId]/route-c01ad9f9473ce080.js +1 -0
  147. package/.next/static/chunks/app/connect/page-c09d9fb410c468b7.js +1 -0
  148. package/.next/static/chunks/app/layout-df8acd5bd06cbe45.js +1 -0
  149. package/.next/static/chunks/app/new/page-e4923b87c7a7b6ae.js +1 -0
  150. package/.next/static/chunks/app/onboarding/page-4c87427335371aaa.js +1 -0
  151. package/.next/static/chunks/app/page-3c0d23c063b036eb.js +1 -0
  152. package/.next/static/chunks/app/personas/page-a130cd11d8cbd832.js +1 -0
  153. package/.next/static/chunks/app/runs/[runId]/page-aa118bfeb6508779.js +1 -0
  154. package/.next/static/chunks/app/runs/page-503439d57f433574.js +1 -0
  155. package/.next/static/chunks/app/settings/page-64d7d48d2413a18b.js +25 -0
  156. package/.next/static/chunks/app/settings/permissions/page-18bf0e6d84be8fad.js +1 -0
  157. package/.next/static/chunks/app/templates/page-db5165c6311bf6e1.js +1 -0
  158. package/.next/static/chunks/ed64ccb0-b7d2b5246d18ca7e.js +1 -0
  159. package/.next/static/chunks/framework-dc9b726cfb42e402.js +1 -0
  160. package/.next/static/chunks/main-2088f7ac0f762d6a.js +5 -0
  161. package/.next/static/chunks/main-app-e9f7985e32dc8a63.js +1 -0
  162. package/.next/static/chunks/next/dist/client/components/builtin/app-error-c01ad9f9473ce080.js +1 -0
  163. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-c01ad9f9473ce080.js +1 -0
  164. package/.next/static/chunks/next/dist/client/components/builtin/global-error-538b25894f1d36d8.js +1 -0
  165. package/.next/static/chunks/next/dist/client/components/builtin/not-found-c01ad9f9473ce080.js +1 -0
  166. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c01ad9f9473ce080.js +1 -0
  167. package/.next/static/chunks/webpack-87142ab87b87c8fb.js +1 -0
  168. package/.next/static/css/a552ff3997000a18.css +3 -0
  169. package/.next/trace +19 -1
  170. package/.next/trace-build +1 -1
  171. package/.next/types/app/api/daemon/[...path]/route.ts +351 -0
  172. package/.next/types/app/api/run-artifacts/[chatId]/route.ts +351 -0
  173. package/.next/types/app/connect/page.ts +87 -0
  174. package/.next/types/app/layout.ts +87 -0
  175. package/.next/types/app/new/page.ts +87 -0
  176. package/.next/types/app/onboarding/page.ts +87 -0
  177. package/.next/types/app/page.ts +87 -0
  178. package/.next/types/app/personas/page.ts +87 -0
  179. package/.next/types/app/runs/[runId]/page.ts +87 -0
  180. package/.next/types/app/runs/page.ts +87 -0
  181. package/.next/types/app/settings/page.ts +87 -0
  182. package/.next/types/app/settings/permissions/page.ts +87 -0
  183. package/.next/types/app/templates/page.ts +87 -0
  184. package/.next/types/package.json +1 -0
  185. package/dist/daemon/index.js +1 -1
  186. package/dist/mcp/index.js +1 -1
  187. package/package.json +3 -3
  188. package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js +0 -206
  189. package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js.map +0 -8
  190. package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js +0 -500
  191. package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js.map +0 -11
  192. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js +0 -13
  193. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js.map +0 -5
  194. package/.next/build/chunks/[turbopack]_runtime.js +0 -890
  195. package/.next/build/chunks/[turbopack]_runtime.js.map +0 -11
  196. package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js +0 -6681
  197. package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js.map +0 -47
  198. package/.next/build/package.json +0 -1
  199. package/.next/build/postcss.js +0 -6
  200. package/.next/build/postcss.js.map +0 -5
  201. package/.next/cache/.previewinfo +0 -1
  202. package/.next/cache/.rscinfo +0 -1
  203. package/.next/cache/.tsbuildinfo +0 -1
  204. package/.next/diagnostics/route-bundle-stats.json +0 -176
  205. package/.next/fallback-build-manifest.json +0 -13
  206. package/.next/server/app/_global-error/page/app-paths-manifest.json +0 -3
  207. package/.next/server/app/_global-error/page/build-manifest.json +0 -17
  208. package/.next/server/app/_global-error/page/next-font-manifest.json +0 -6
  209. package/.next/server/app/_global-error/page/react-loadable-manifest.json +0 -1
  210. package/.next/server/app/_global-error/page/server-reference-manifest.json +0 -4
  211. package/.next/server/app/_global-error/page.js.map +0 -5
  212. package/.next/server/app/_not-found/page/app-paths-manifest.json +0 -3
  213. package/.next/server/app/_not-found/page/build-manifest.json +0 -17
  214. package/.next/server/app/_not-found/page/next-font-manifest.json +0 -11
  215. package/.next/server/app/_not-found/page/react-loadable-manifest.json +0 -1
  216. package/.next/server/app/_not-found/page/server-reference-manifest.json +0 -4
  217. package/.next/server/app/_not-found/page.js.map +0 -5
  218. package/.next/server/app/api/daemon/[...path]/route/app-paths-manifest.json +0 -3
  219. package/.next/server/app/api/daemon/[...path]/route/build-manifest.json +0 -9
  220. package/.next/server/app/api/daemon/[...path]/route/server-reference-manifest.json +0 -4
  221. package/.next/server/app/api/daemon/[...path]/route.js.map +0 -5
  222. package/.next/server/app/api/run-artifacts/[chatId]/route/app-paths-manifest.json +0 -3
  223. package/.next/server/app/api/run-artifacts/[chatId]/route/build-manifest.json +0 -9
  224. package/.next/server/app/api/run-artifacts/[chatId]/route/server-reference-manifest.json +0 -4
  225. package/.next/server/app/api/run-artifacts/[chatId]/route.js.map +0 -5
  226. package/.next/server/app/connect/page/app-paths-manifest.json +0 -3
  227. package/.next/server/app/connect/page/build-manifest.json +0 -17
  228. package/.next/server/app/connect/page/next-font-manifest.json +0 -11
  229. package/.next/server/app/connect/page/react-loadable-manifest.json +0 -1
  230. package/.next/server/app/connect/page/server-reference-manifest.json +0 -4
  231. package/.next/server/app/connect/page.js.map +0 -5
  232. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
  233. package/.next/server/app/favicon.ico/route/build-manifest.json +0 -9
  234. package/.next/server/app/favicon.ico/route.js.map +0 -5
  235. package/.next/server/app/icon.svg/route/app-paths-manifest.json +0 -3
  236. package/.next/server/app/icon.svg/route/build-manifest.json +0 -9
  237. package/.next/server/app/icon.svg/route.js.map +0 -5
  238. package/.next/server/app/new/page/app-paths-manifest.json +0 -3
  239. package/.next/server/app/new/page/build-manifest.json +0 -17
  240. package/.next/server/app/new/page/next-font-manifest.json +0 -11
  241. package/.next/server/app/new/page/react-loadable-manifest.json +0 -1
  242. package/.next/server/app/new/page/server-reference-manifest.json +0 -4
  243. package/.next/server/app/new/page.js.map +0 -5
  244. package/.next/server/app/onboarding/page/app-paths-manifest.json +0 -3
  245. package/.next/server/app/onboarding/page/build-manifest.json +0 -17
  246. package/.next/server/app/onboarding/page/next-font-manifest.json +0 -11
  247. package/.next/server/app/onboarding/page/react-loadable-manifest.json +0 -1
  248. package/.next/server/app/onboarding/page/server-reference-manifest.json +0 -4
  249. package/.next/server/app/onboarding/page.js.map +0 -5
  250. package/.next/server/app/page/app-paths-manifest.json +0 -3
  251. package/.next/server/app/page/build-manifest.json +0 -17
  252. package/.next/server/app/page/next-font-manifest.json +0 -11
  253. package/.next/server/app/page/react-loadable-manifest.json +0 -1
  254. package/.next/server/app/page/server-reference-manifest.json +0 -4
  255. package/.next/server/app/page.js.map +0 -5
  256. package/.next/server/app/personas/page/app-paths-manifest.json +0 -3
  257. package/.next/server/app/personas/page/build-manifest.json +0 -17
  258. package/.next/server/app/personas/page/next-font-manifest.json +0 -11
  259. package/.next/server/app/personas/page/react-loadable-manifest.json +0 -1
  260. package/.next/server/app/personas/page/server-reference-manifest.json +0 -4
  261. package/.next/server/app/personas/page.js.map +0 -5
  262. package/.next/server/app/runs/[runId]/page/app-paths-manifest.json +0 -3
  263. package/.next/server/app/runs/[runId]/page/build-manifest.json +0 -17
  264. package/.next/server/app/runs/[runId]/page/next-font-manifest.json +0 -11
  265. package/.next/server/app/runs/[runId]/page/react-loadable-manifest.json +0 -1
  266. package/.next/server/app/runs/[runId]/page/server-reference-manifest.json +0 -4
  267. package/.next/server/app/runs/[runId]/page.js.map +0 -5
  268. package/.next/server/app/runs/page/app-paths-manifest.json +0 -3
  269. package/.next/server/app/runs/page/build-manifest.json +0 -17
  270. package/.next/server/app/runs/page/next-font-manifest.json +0 -11
  271. package/.next/server/app/runs/page/react-loadable-manifest.json +0 -1
  272. package/.next/server/app/runs/page/server-reference-manifest.json +0 -4
  273. package/.next/server/app/runs/page.js.map +0 -5
  274. package/.next/server/app/settings/page/app-paths-manifest.json +0 -3
  275. package/.next/server/app/settings/page/build-manifest.json +0 -17
  276. package/.next/server/app/settings/page/next-font-manifest.json +0 -11
  277. package/.next/server/app/settings/page/react-loadable-manifest.json +0 -1
  278. package/.next/server/app/settings/page/server-reference-manifest.json +0 -4
  279. package/.next/server/app/settings/page.js.map +0 -5
  280. package/.next/server/app/settings/permissions/page/app-paths-manifest.json +0 -3
  281. package/.next/server/app/settings/permissions/page/build-manifest.json +0 -17
  282. package/.next/server/app/settings/permissions/page/next-font-manifest.json +0 -11
  283. package/.next/server/app/settings/permissions/page/react-loadable-manifest.json +0 -1
  284. package/.next/server/app/settings/permissions/page/server-reference-manifest.json +0 -4
  285. package/.next/server/app/settings/permissions/page.js.map +0 -5
  286. package/.next/server/app/templates/page/app-paths-manifest.json +0 -3
  287. package/.next/server/app/templates/page/build-manifest.json +0 -17
  288. package/.next/server/app/templates/page/next-font-manifest.json +0 -11
  289. package/.next/server/app/templates/page/react-loadable-manifest.json +0 -1
  290. package/.next/server/app/templates/page/server-reference-manifest.json +0 -4
  291. package/.next/server/app/templates/page.js.map +0 -5
  292. package/.next/server/chunks/05w9_next_0xdex7s._.js +0 -13
  293. package/.next/server/chunks/05w9_next_0xdex7s._.js.map +0 -1
  294. package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js +0 -3
  295. package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js.map +0 -1
  296. package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js +0 -3
  297. package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +0 -1
  298. package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js +0 -3
  299. package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js.map +0 -1
  300. package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js +0 -3
  301. package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js.map +0 -1
  302. package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js +0 -3
  303. package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js.map +0 -1
  304. package/.next/server/chunks/[root-of-the-server]__12xxby8._.js +0 -3
  305. package/.next/server/chunks/[root-of-the-server]__12xxby8._.js.map +0 -1
  306. package/.next/server/chunks/[turbopack]_runtime.js +0 -903
  307. package/.next/server/chunks/[turbopack]_runtime.js.map +0 -11
  308. package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js +0 -3
  309. package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js.map +0 -1
  310. package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js +0 -3
  311. package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js.map +0 -1
  312. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +0 -3
  313. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +0 -1
  314. package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js +0 -3
  315. package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js.map +0 -1
  316. package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js +0 -3
  317. package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js.map +0 -1
  318. package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js +0 -6
  319. package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js.map +0 -1
  320. package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js +0 -6
  321. package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js.map +0 -1
  322. package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js +0 -3
  323. package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js.map +0 -1
  324. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js +0 -3
  325. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js.map +0 -1
  326. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js +0 -3
  327. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js.map +0 -1
  328. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js +0 -3
  329. package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js.map +0 -1
  330. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js +0 -4
  331. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js.map +0 -1
  332. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js +0 -4
  333. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js.map +0 -1
  334. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js +0 -4
  335. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js.map +0 -1
  336. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js +0 -4
  337. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js.map +0 -1
  338. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js +0 -4
  339. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js.map +0 -1
  340. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js +0 -4
  341. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js.map +0 -1
  342. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js +0 -4
  343. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js.map +0 -1
  344. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js +0 -4
  345. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js.map +0 -1
  346. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js +0 -4
  347. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js.map +0 -1
  348. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js +0 -4
  349. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js.map +0 -1
  350. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js +0 -4
  351. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js.map +0 -1
  352. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js +0 -4
  353. package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js.map +0 -1
  354. package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js +0 -3
  355. package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js.map +0 -1
  356. package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js +0 -3
  357. package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js.map +0 -1
  358. package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js +0 -3
  359. package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js.map +0 -1
  360. package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js +0 -3
  361. package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js.map +0 -1
  362. package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js +0 -3
  363. package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js.map +0 -1
  364. package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js +0 -3
  365. package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js.map +0 -1
  366. package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js +0 -3
  367. package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js.map +0 -1
  368. package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js +0 -3
  369. package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js.map +0 -1
  370. package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js +0 -3
  371. package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js.map +0 -1
  372. package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js +0 -3
  373. package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js.map +0 -1
  374. package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js +0 -3
  375. package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js.map +0 -1
  376. package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js +0 -3
  377. package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js.map +0 -1
  378. package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js +0 -33
  379. package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js.map +0 -1
  380. package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js +0 -3
  381. package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js.map +0 -1
  382. package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js +0 -3
  383. package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js.map +0 -1
  384. package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js +0 -3
  385. package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js.map +0 -1
  386. package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js +0 -19
  387. package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js.map +0 -1
  388. package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js +0 -3
  389. package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js.map +0 -1
  390. package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js +0 -3
  391. package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js.map +0 -1
  392. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +0 -3
  393. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +0 -1
  394. package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js +0 -3
  395. package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js.map +0 -1
  396. package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js +0 -3
  397. package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js.map +0 -1
  398. package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js +0 -33
  399. package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js.map +0 -1
  400. package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js +0 -3
  401. package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js.map +0 -1
  402. package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js +0 -3
  403. package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js.map +0 -1
  404. package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js +0 -3
  405. package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js.map +0 -1
  406. package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js +0 -3
  407. package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js.map +0 -1
  408. package/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -903
  409. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +0 -11
  410. package/.next/server/chunks/ssr/_01t~nag._.js +0 -30
  411. package/.next/server/chunks/ssr/_01t~nag._.js.map +0 -1
  412. package/.next/server/chunks/ssr/_097xk3e._.js +0 -3
  413. package/.next/server/chunks/ssr/_097xk3e._.js.map +0 -1
  414. package/.next/server/chunks/ssr/_0bxoss0._.js +0 -30
  415. package/.next/server/chunks/ssr/_0bxoss0._.js.map +0 -1
  416. package/.next/server/chunks/ssr/_0ck1n8_._.js +0 -7
  417. package/.next/server/chunks/ssr/_0ck1n8_._.js.map +0 -1
  418. package/.next/server/chunks/ssr/_0d-304b._.js +0 -30
  419. package/.next/server/chunks/ssr/_0d-304b._.js.map +0 -1
  420. package/.next/server/chunks/ssr/_0p-_ahq._.js +0 -30
  421. package/.next/server/chunks/ssr/_0p-_ahq._.js.map +0 -1
  422. package/.next/server/chunks/ssr/_0qlx_85._.js +0 -7
  423. package/.next/server/chunks/ssr/_0qlx_85._.js.map +0 -1
  424. package/.next/server/chunks/ssr/_0y43gyn._.js +0 -27
  425. package/.next/server/chunks/ssr/_0y43gyn._.js.map +0 -1
  426. package/.next/server/chunks/ssr/_11i54x9._.js +0 -30
  427. package/.next/server/chunks/ssr/_11i54x9._.js.map +0 -1
  428. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +0 -3
  429. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js.map +0 -1
  430. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +0 -3
  431. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js.map +0 -1
  432. package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js +0 -3
  433. package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js.map +0 -1
  434. package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js +0 -3
  435. package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js.map +0 -1
  436. package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js +0 -3
  437. package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js.map +0 -1
  438. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +0 -3
  439. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js.map +0 -1
  440. package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js +0 -3
  441. package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js.map +0 -1
  442. package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js +0 -3
  443. package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js.map +0 -1
  444. package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js +0 -3
  445. package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js.map +0 -1
  446. package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js +0 -3
  447. package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js.map +0 -1
  448. package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js +0 -3
  449. package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js.map +0 -1
  450. package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js +0 -3
  451. package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js.map +0 -1
  452. package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js +0 -33
  453. package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js.map +0 -1
  454. package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js +0 -3
  455. package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js.map +0 -1
  456. package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +0 -3
  457. package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js.map +0 -1
  458. package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js +0 -3
  459. package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js.map +0 -1
  460. package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +0 -27
  461. package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js.map +0 -1
  462. package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js +0 -3
  463. package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js.map +0 -1
  464. package/.next/server/chunks/ssr/src_components_0j77o23._.js +0 -3
  465. package/.next/server/chunks/ssr/src_components_0j77o23._.js.map +0 -1
  466. package/.next/server/chunks/ssr/src_components_0lc2g58._.js +0 -3
  467. package/.next/server/chunks/ssr/src_components_0lc2g58._.js.map +0 -1
  468. package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js +0 -3
  469. package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js.map +0 -1
  470. package/.next/static/UrNBcWJ5KltIL6ABEsC-R/_buildManifest.js +0 -11
  471. package/.next/static/UrNBcWJ5KltIL6ABEsC-R/_clientMiddlewareManifest.js +0 -1
  472. package/.next/static/chunks/0.dctgbd3j_xg.js +0 -2
  473. package/.next/static/chunks/0.~gqf.-9g-fh.js +0 -1
  474. package/.next/static/chunks/01as9r5n5k.xo.js +0 -1
  475. package/.next/static/chunks/034b~pjm7y20e.js +0 -1
  476. package/.next/static/chunks/05o4oa_9xfaun.js +0 -1
  477. package/.next/static/chunks/08dnw-0gzytmy.js +0 -5
  478. package/.next/static/chunks/08f2b7tuf53ep.js +0 -1
  479. package/.next/static/chunks/0a_u3vdu6tc~f.js +0 -1
  480. package/.next/static/chunks/0am72irwq2bx0.js +0 -5
  481. package/.next/static/chunks/0c-d1bhb8byrx.js +0 -1
  482. package/.next/static/chunks/0s4~w2~is76y1.js +0 -1
  483. package/.next/static/chunks/0ue4qcctkv016.js +0 -4
  484. package/.next/static/chunks/0uok5~eqi6zku.js +0 -1
  485. package/.next/static/chunks/0u~3g88j1g2xp.css +0 -3
  486. package/.next/static/chunks/0v3lyuj75aq50.js +0 -1
  487. package/.next/static/chunks/0whnu9t5k-ij7.js +0 -1
  488. package/.next/static/chunks/0x00t3du13-u4.js +0 -25
  489. package/.next/static/chunks/0xs3ktzdh4rw4.js +0 -1
  490. package/.next/static/chunks/0~8r6nhrrl~f9.js +0 -1
  491. package/.next/static/chunks/10jdu00ksgu69.js +0 -1
  492. package/.next/static/chunks/10ld26~0f71ye.js +0 -25
  493. package/.next/static/chunks/11k2wbc04r__f.js +0 -25
  494. package/.next/static/chunks/13-.xgv2t5u6m.js +0 -31
  495. package/.next/static/chunks/152ec.u3_e~ya.js +0 -25
  496. package/.next/static/chunks/172tpttbumwi1.js +0 -25
  497. package/.next/static/chunks/turbopack-0-al833jv3to~.js +0 -1
  498. package/.next/static/media/favicon.0i~66t__91s97.ico +0 -0
  499. package/.next/static/media/icon.15.86wme~cdlv.svg +0 -6
  500. package/.next/turbopack +0 -0
  501. /package/.next/static/{UrNBcWJ5KltIL6ABEsC-R → VWSkj_Yx6OKSjPmYY8ewj}/_ssgManifest.js +0 -0
  502. /package/.next/static/chunks/{03~yq9q893hmn.js → polyfills-42372ed130431b0a.js} +0 -0
  503. /package/.next/static/media/{caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 → 4cf2300e9c8272f7-s.p.woff2} +0 -0
  504. /package/.next/static/media/{bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 → 747892c23ea88013-s.woff2} +0 -0
  505. /package/.next/static/media/{8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 → 8d697b304b401681-s.woff2} +0 -0
  506. /package/.next/static/media/{797e433ab948586e-s.p.0.q-h669a_dqa.woff2 → 93f479601ee12b01-s.p.woff2} +0 -0
  507. /package/.next/static/media/{4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 → 9610d9e46709d722-s.woff2} +0 -0
  508. /package/.next/static/media/{7178b3e590c64307-s.11.cyxs5p-0z~.woff2 → ba015fad6dcf6784-s.woff2} +0 -0
@@ -1,3 +0,0 @@
1
- module.exports=[51493,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(84623),e=a.i(3438),f=a.i(24094),g=a.i(64837);a.i(30005);var h=a.i(57966),i=a.i(92415),j=a.i(24897),k=a.i(88923),l=a.i(68114);let m={claude:"claude-code",codex:"codex-cli",gemini:"gemini-cli",opencode:"opencode-cli",kimi:"kimi-cli"},n={dot:"bg-muted-foreground/40",gradient:"bg-gradient-to-br from-muted/30 via-card to-card"};function o({label:a,value:c,selected:e,disabled:f,onClick:g}){return(0,b.jsxs)("button",{type:"button",disabled:f,onClick:g,title:c,className:(0,l.cn)("flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60",e?"border-primary/50 bg-primary/10 text-foreground":"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground"),children:[(0,b.jsx)("div",{className:(0,l.cn)("grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition",e?"border-primary bg-primary text-primary-foreground":"border-border"),children:e&&(0,b.jsx)(d.Check,{className:"h-2 w-2"})}),(0,b.jsx)("span",{className:"truncate font-mono",children:a})]})}a.s(["OrchestratorCard",0,function({initial:a,voices:p}){var q;let[r,s]=(0,c.useState)(a),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1),z=m[a.name],[A,B]=(0,c.useState)(p),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)(null),G=!!z&&A.length>0,H=A.filter(a=>a.enabled).length,I="opencode-cli"===z,J=r.connected,K=r.approvedTools>0&&!J,L=(q=a.name)in k.UI_LINEAGE_BRAND?k.UI_LINEAGE_BRAND[q]:n,M=async()=>{u(!0),w(null);try{let a=await (0,h.connectOrchestrator)(r.name);s(a.status),y(a.added.length>0)}catch(a){w(a instanceof i.DaemonError?a.message:"Failed to connect — is the daemon running?")}finally{u(!1)}},N=async a=>{D(a.id),F(null);try{let b=await (0,j.updateVoice)(a.id,{enabled:!a.enabled});B(a=>a.map(a=>a.id===b.id?b:a))}catch(a){F(a instanceof i.DaemonError?a.message:"Couldn't save. Is the daemon running?")}finally{D(null)}},O=new Map;if(I)for(let a of A){let b=a.model_id.indexOf("/"),c=b>0?a.model_id.slice(0,b):"other",d=O.get(c)??[];d.push(a),O.set(c,d)}let P=Array.from(O.keys()).sort();return(0,b.jsxs)("div",{className:(0,l.cn)("flex h-72 flex-col rounded-lg border border-border",L.gradient),children:[(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-3 px-4 py-3",children:(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[(0,b.jsx)("span",{className:(0,l.cn)("h-2 w-2 shrink-0 rounded-full",L.dot)}),(0,b.jsx)("h3",{className:"whitespace-nowrap text-sm font-semibold",children:r.label}),J?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300",children:[(0,b.jsx)(d.Check,{className:"h-3 w-3"})," Connected"]}):K?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:[r.approvedTools,"/",r.totalTools," tools"]}):r.supported?(0,b.jsx)("span",{className:"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground",children:"Not connected"}):(0,b.jsx)("span",{className:"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground",children:"Coming soon"}),G&&(0,b.jsxs)("span",{className:"whitespace-nowrap text-[10px] text-muted-foreground",children:["· ",H," model",1===H?"":"s"]})]})}),(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-3 overflow-y-auto border-t border-border bg-card/30 p-4",children:[(0,b.jsx)("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:r.note}),!r.supported&&(0,b.jsx)("p",{className:"text-[11px] italic text-muted-foreground/70",children:"Wiring will land in a future release."}),r.supported&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("button",{type:"button",onClick:M,disabled:t||J&&!K,className:"inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground transition hover:bg-primary/90 disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground",children:[t?(0,b.jsx)(e.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(f.Plug,{className:"h-3.5 w-3.5"}),J?"Already connected":K?"Approve remaining tools":`Connect ${r.label}`]}),x&&!v&&(0,b.jsxs)("p",{className:"text-[11px] text-emerald-400",children:["✓ Done. Restart ",r.label," for the change to take effect."]}),v&&(0,b.jsxs)("p",{className:"flex items-start gap-1 text-[11px] text-destructive",children:[(0,b.jsx)(g.AlertTriangle,{className:"mt-0.5 h-3 w-3 shrink-0"})," ",v]})]}),J&&"prompts_once"===r.firstCallBehavior&&(0,b.jsx)("p",{className:"text-[11px] text-amber-300/90",children:'⚠ First chorus.* call will show a one-time prompt — click "Always allow".'}),G&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:"Models"}),E&&(0,b.jsx)("p",{className:"text-[11px] text-destructive",children:E}),I?(0,b.jsx)("div",{className:"space-y-2",children:P.map(a=>{let c=O.get(a)??[];return(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("p",{className:"text-[10px] font-mono text-muted-foreground/80",children:[a,"/"]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2",children:c.map(c=>(0,b.jsx)(o,{label:c.model_id.slice(a.length+1),value:c.model_id,selected:c.enabled,disabled:C===c.id,onClick:()=>N(c)},c.id))})]},a)})}):(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2",children:A.map(a=>(0,b.jsx)(o,{label:a.model_id,value:a.model_id,selected:a.enabled,disabled:C===a.id,onClick:()=>N(a)},a.id))})]})]})]})}])},91549,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(84623),e=a.i(3438),f=a.i(64837),g=a.i(23596),h=a.i(39908),i=a.i(68114),j=a.i(16215),k=a.i(24897),l=a.i(88923);function m(a){return void 0===a?"?":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`}a.s(["OpenRouterCard",0,function({voices:a}){let[n,o]=(0,c.useState)(a),[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(!1),[D,E]=(0,c.useState)(""),[F,G]=(0,c.useState)(new Set),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(null),[L,M]=(0,c.useState)(null),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(null),R=n.filter(a=>a.enabled).length,S=n.length>0;async function T(){if(!r){s(!0),A(null),u(!0);try{let{models:a}=await (0,j.listOpenRouterModels)();a.sort((a,b)=>a.id.localeCompare(b.id)),q(a),C(!1)}catch(b){let a=b instanceof Error?b.message:String(b);C(!0),/no openrouter api key/i.test(a)||A(a)}finally{s(!1)}}}async function U(){if(0!==v.trim().length){y(!0),A(null);try{let a=await (0,j.saveOpenRouterKey)(v.trim());if(!a.valid)return void A(a.error??"Validation failed");w(""),C(!1);let{models:b}=await (0,j.listOpenRouterModels)();b.sort((a,b)=>a.id.localeCompare(b.id)),q(b),u(!0)}catch(a){A(a instanceof Error?a.message:String(a))}finally{y(!1)}}}async function V(){if(0!==F.size){I(!0),K(null),M(null);try{let a=await (0,j.addOpenRouterVoices)(Array.from(F)),b=a.added.length,c=a.skipped.length;M(`Added ${b} voice${1===b?"":"s"}`+(c>0?` \xb7 skipped ${c} (unknown id)`:"")),G(new Set);try{let a=await (0,k.listVoices)({source:"api",provider:"openrouter"});o(a)}catch{}}catch(a){K(a instanceof Error?a.message:String(a))}finally{I(!1)}}}async function W(a){O(a.id),Q(null);try{let b=await (0,k.updateVoice)(a.id,{enabled:!a.enabled});o(a=>a.map(a=>a.id===b.id?b:a))}catch(a){Q(a instanceof Error?a.message:String(a))}finally{O(null)}}let X=D.trim()?(p??[]).filter(a=>a.id.toLowerCase().includes(D.toLowerCase().trim())||a.name.toLowerCase().includes(D.toLowerCase().trim())):p??[];return(0,b.jsxs)("div",{className:(0,i.cn)("flex h-72 flex-col rounded-lg border border-border",l.UI_LINEAGE_BRAND.openrouter.gradient),children:[(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-3 px-4 py-3",children:(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[(0,b.jsx)("span",{className:(0,i.cn)("h-2 w-2 shrink-0 rounded-full",l.UI_LINEAGE_BRAND.openrouter.dot)}),(0,b.jsx)("h3",{className:"whitespace-nowrap text-sm font-semibold",children:"OpenRouter"}),S?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300",children:[(0,b.jsx)(d.Check,{className:"h-3 w-3"})," ",R," enabled"]}):(0,b.jsx)("span",{className:"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground",children:"Not configured"})]})}),(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-3 overflow-y-auto border-t border-border bg-card/30 p-4",children:[!S&&(0,b.jsx)("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:"Voices added here run via OpenRouter's chat-completions API. Costs come back per-call from the API and surface on the run page."}),S&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:"Models"}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2",children:n.map(a=>(0,b.jsxs)("button",{type:"button",disabled:N===a.id,onClick:()=>W(a),title:a.model_id,className:(0,i.cn)("flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60",a.enabled?"border-primary/50 bg-primary/10 text-foreground":"border-border bg-card text-muted-foreground hover:border-muted-foreground/30"),children:[(0,b.jsx)("div",{className:(0,i.cn)("grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition",a.enabled?"border-primary bg-primary text-primary-foreground":"border-border"),children:a.enabled&&(0,b.jsx)(d.Check,{className:"h-2 w-2"})}),(0,b.jsx)("span",{className:"truncate font-mono",children:a.model_id})]},a.id))}),P&&(0,b.jsx)("p",{className:"text-[11px] text-destructive",children:P})]}),(B||!S)&&(0,b.jsxs)("div",{className:"space-y-2 rounded-md border border-border bg-background/40 p-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:S?"Replace API key":"OpenRouter API key"}),(0,b.jsxs)("a",{href:"https://openrouter.ai/keys",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground",children:["Get a key ",(0,b.jsx)(h.ExternalLink,{className:"h-2.5 w-2.5"})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"password",value:v,onChange:a=>w(a.target.value),placeholder:"sk-or-v1-…",disabled:x,className:"h-8 flex-1 rounded-md border border-border bg-background px-2 font-mono text-xs focus:border-primary/60 focus:outline-none"}),(0,b.jsxs)("button",{type:"button",onClick:U,disabled:x||0===v.trim().length,className:"inline-flex h-8 items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-3 text-[11px] font-medium text-primary transition hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50",children:[x?(0,b.jsx)(e.Loader2,{className:"h-3 w-3 animate-spin"}):(0,b.jsx)(d.Check,{className:"h-3 w-3"}),x?"Saving…":"Save"]})]}),z&&(0,b.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-destructive",children:[(0,b.jsx)(f.AlertTriangle,{className:"h-3 w-3"}),z]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[S&&!t&&(0,b.jsxs)("button",{type:"button",onClick:T,disabled:r,className:"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-card px-3 text-[11px] font-medium text-foreground transition hover:border-muted-foreground/30 disabled:opacity-50",children:[r?(0,b.jsx)(e.Loader2,{className:"h-3 w-3 animate-spin"}):null,"Add more models"]}),S&&!B&&(0,b.jsx)("button",{type:"button",onClick:()=>C(!0),className:"text-[11px] text-muted-foreground underline-offset-2 hover:underline",children:"Replace API key"})]}),t&&(0,b.jsxs)(b.Fragment,{children:[r&&(0,b.jsxs)("p",{className:"flex items-center gap-2 text-[11px] text-muted-foreground",children:[(0,b.jsx)(e.Loader2,{className:"h-3 w-3 animate-spin"})," Loading catalog…"]}),p&&p.length>0&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:S?"Add more models":"Pick models"}),(0,b.jsxs)("button",{type:"button",onClick:V,disabled:0===F.size||H,className:"inline-flex h-7 items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-2.5 text-[11px] font-medium text-primary transition hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50",children:[H?(0,b.jsx)(e.Loader2,{className:"h-3 w-3 animate-spin"}):null,"Add ",F.size>0?F.size:""]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-md border border-border bg-background/40 px-2",children:[(0,b.jsx)(g.Search,{className:"h-3 w-3 text-muted-foreground"}),(0,b.jsx)("input",{type:"text",value:D,onChange:a=>E(a.target.value),placeholder:"filter by id or name…",className:"h-7 flex-1 bg-transparent text-[11px] focus:outline-none"}),(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[X.length,"/",p.length]})]}),L&&(0,b.jsx)("p",{className:"text-[11px] text-emerald-300",children:L}),J&&(0,b.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-destructive",children:[(0,b.jsx)(f.AlertTriangle,{className:"h-3 w-3"}),J]}),(0,b.jsx)("div",{className:"max-h-72 overflow-y-auto rounded-md border border-border",children:X.map(a=>{let c=F.has(a.id),d=n.some(b=>b.model_id===a.id);return(0,b.jsxs)("label",{className:(0,i.cn)("flex cursor-pointer items-center gap-2 border-b border-border px-2 py-1.5 text-[11px] last:border-b-0 hover:bg-card/40",d&&"opacity-50"),children:[(0,b.jsx)("input",{type:"checkbox",checked:c,disabled:d,onChange:b=>{G(c=>{let d=new Set(c);return b.target.checked?d.add(a.id):d.delete(a.id),d})},className:"h-3 w-3 shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"truncate font-mono text-[11px]",children:[a.id,d&&(0,b.jsx)("span",{className:"ml-1 text-[10px] text-muted-foreground",children:"· added"})]}),(0,b.jsxs)("div",{className:"truncate text-[10px] text-muted-foreground",children:[a.name,a.contextLength?` \xb7 ${(a.contextLength/1e3).toFixed(0)}k ctx`:"",void 0!==a.inputCostPerMtok||void 0!==a.outputCostPerMtok?` \xb7 ${m(a.inputCostPerMtok)}/${m(a.outputCostPerMtok)} per Mtok`:""]})]})]},a.id)})})]})]})]})]})}])}];
2
-
3
- //# sourceMappingURL=src_components_0j77o23._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/orchestrator-card.tsx","../../../../src/components/openrouter-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Check, Loader2, Plug, AlertTriangle } from \"lucide-react\";\nimport {\n connectOrchestrator,\n type OrchestratorStatus,\n type OrchestratorName,\n DaemonError,\n} from \"@/lib/api\";\nimport { updateVoice, type Voice } from \"@/lib/api/voices\";\nimport { UI_LINEAGE_BRAND, type UILineage } from \"@/lib/lineage-maps\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * One unified card per CLI on the /connect page. Combines MCP wiring\n * status (connect button) and inline voice picker. Header is always\n * visible; body shows inline whenever the CLI is actually usable so\n * users don't have to click-to-reveal model toggles they actually need.\n */\ninterface Props {\n initial: OrchestratorStatus;\n /** Voices for this orchestrator's provider — both enabled and disabled. */\n voices: Voice[];\n}\n\nconst ORCHESTRATOR_TO_PROVIDER: Record<string, string> = {\n claude: \"claude-code\",\n codex: \"codex-cli\",\n gemini: \"gemini-cli\",\n opencode: \"opencode-cli\",\n kimi: \"kimi-cli\",\n};\n\nconst NEUTRAL_BRAND = {\n dot: \"bg-muted-foreground/40\",\n gradient: \"bg-gradient-to-br from-muted/30 via-card to-card\",\n} as const;\n\nfunction brandForOrchestrator(name: string) {\n if (name in UI_LINEAGE_BRAND) {\n return UI_LINEAGE_BRAND[name as UILineage];\n }\n return NEUTRAL_BRAND;\n}\n\nexport function OrchestratorCard({ initial, voices: initialVoices }: Props) {\n const [status, setStatus] = useState<OrchestratorStatus>(initial);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [justConnected, setJustConnected] = useState(false);\n\n const provider = ORCHESTRATOR_TO_PROVIDER[initial.name];\n const [voices, setVoices] = useState<Voice[]>(initialVoices);\n const [saving, setSaving] = useState<string | null>(null);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n const supportsModels = !!provider && voices.length > 0;\n const enabledCount = voices.filter((v) => v.enabled).length;\n const isOpencode = provider === \"opencode-cli\";\n const isConnected = status.connected;\n const partial = status.approvedTools > 0 && !isConnected;\n const brand = brandForOrchestrator(initial.name);\n\n // Body always renders so every card has the same height. For\n // Coming-soon CLIs we show a placeholder note so the body isn't empty.\n\n const connect = async () => {\n setBusy(true);\n setError(null);\n try {\n const result = await connectOrchestrator(status.name as OrchestratorName);\n setStatus(result.status);\n setJustConnected(result.added.length > 0);\n } catch (err) {\n setError(\n err instanceof DaemonError\n ? err.message\n : \"Failed to connect — is the daemon running?\",\n );\n } finally {\n setBusy(false);\n }\n };\n\n const toggleVoice = async (v: Voice) => {\n setSaving(v.id);\n setSaveError(null);\n try {\n const next = await updateVoice(v.id, { enabled: !v.enabled });\n setVoices((prev) => prev.map((p) => (p.id === next.id ? next : p)));\n } catch (err) {\n setSaveError(\n err instanceof DaemonError ? err.message : \"Couldn't save. Is the daemon running?\",\n );\n } finally {\n setSaving(null);\n }\n };\n\n // Group OpenCode voices by gateway prefix in model_id.\n const opencodeGroups = new Map<string, Voice[]>();\n if (isOpencode) {\n for (const v of voices) {\n const slash = v.model_id.indexOf(\"/\");\n const gw = slash > 0 ? v.model_id.slice(0, slash) : \"other\";\n const list = opencodeGroups.get(gw) ?? [];\n list.push(v);\n opencodeGroups.set(gw, list);\n }\n }\n const sortedGateways = Array.from(opencodeGroups.keys()).sort();\n\n return (\n <div\n className={cn(\n \"flex h-72 flex-col rounded-lg border border-border\",\n brand.gradient,\n )}\n >\n <div className=\"flex shrink-0 items-center gap-3 px-4 py-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className={cn(\"h-2 w-2 shrink-0 rounded-full\", brand.dot)} />\n <h3 className=\"whitespace-nowrap text-sm font-semibold\">{status.label}</h3>\n {isConnected ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300\">\n <Check className=\"h-3 w-3\" /> Connected\n </span>\n ) : partial ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300\">\n {status.approvedTools}/{status.totalTools} tools\n </span>\n ) : status.supported ? (\n <span className=\"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n Not connected\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n Coming soon\n </span>\n )}\n {supportsModels && (\n <span className=\"whitespace-nowrap text-[10px] text-muted-foreground\">\n · {enabledCount} model{enabledCount === 1 ? \"\" : \"s\"}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-1 flex-col gap-3 overflow-y-auto border-t border-border bg-card/30 p-4\">\n <p className=\"text-[11px] leading-relaxed text-muted-foreground\">\n {status.note}\n </p>\n\n {!status.supported && (\n <p className=\"text-[11px] italic text-muted-foreground/70\">\n Wiring will land in a future release.\n </p>\n )}\n\n {status.supported && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={connect}\n disabled={busy || (isConnected && !partial)}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground transition hover:bg-primary/90 disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground\"\n >\n {busy ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Plug className=\"h-3.5 w-3.5\" />\n )}\n {isConnected\n ? \"Already connected\"\n : partial\n ? \"Approve remaining tools\"\n : `Connect ${status.label}`}\n </button>\n {justConnected && !error && (\n <p className=\"text-[11px] text-emerald-400\">\n ✓ Done. Restart {status.label} for the change to take effect.\n </p>\n )}\n {error && (\n <p className=\"flex items-start gap-1 text-[11px] text-destructive\">\n <AlertTriangle className=\"mt-0.5 h-3 w-3 shrink-0\" /> {error}\n </p>\n )}\n </div>\n )}\n\n {isConnected && status.firstCallBehavior === \"prompts_once\" && (\n <p className=\"text-[11px] text-amber-300/90\">\n ⚠ First chorus.* call will show a one-time prompt — click &quot;Always allow&quot;.\n </p>\n )}\n\n {supportsModels && (\n <div className=\"space-y-2\">\n <p className=\"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\">\n Models\n </p>\n {saveError && <p className=\"text-[11px] text-destructive\">{saveError}</p>}\n\n {isOpencode ? (\n <div className=\"space-y-2\">\n {sortedGateways.map((gateway) => {\n const list = opencodeGroups.get(gateway) ?? [];\n return (\n <div key={gateway} className=\"space-y-1\">\n <p className=\"text-[10px] font-mono text-muted-foreground/80\">\n {gateway}/\n </p>\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n {list.map((v) => (\n <ModelToggle\n key={v.id}\n label={v.model_id.slice(gateway.length + 1)}\n value={v.model_id}\n selected={v.enabled}\n disabled={saving === v.id}\n onClick={() => toggleVoice(v)}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n {voices.map((v) => (\n <ModelToggle\n key={v.id}\n label={v.model_id}\n value={v.model_id}\n selected={v.enabled}\n disabled={saving === v.id}\n onClick={() => toggleVoice(v)}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\ninterface ModelToggleProps {\n label: string;\n value: string;\n selected: boolean;\n disabled: boolean;\n onClick: () => void;\n}\n\nfunction ModelToggle({ label, value, selected, disabled, onClick }: ModelToggleProps) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n title={value}\n className={cn(\n \"flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60\",\n selected\n ? \"border-primary/50 bg-primary/10 text-foreground\"\n : \"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground\",\n )}\n >\n <div\n className={cn(\n \"grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition\",\n selected\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border\",\n )}\n >\n {selected && <Check className=\"h-2 w-2\" />}\n </div>\n <span className=\"truncate font-mono\">{label}</span>\n </button>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n Check,\n Loader2,\n AlertTriangle,\n Search,\n ExternalLink,\n} from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n saveOpenRouterKey,\n listOpenRouterModels,\n addOpenRouterVoices,\n type OpenRouterModel,\n} from \"@/lib/api/openrouter\";\nimport { listVoices, updateVoice, type Voice } from \"@/lib/api/voices\";\nimport { UI_LINEAGE_BRAND } from \"@/lib/lineage-maps\";\n\n/**\n * OpenRouter \"connection\" card on /connect. Header is always visible;\n * body shows inline. Two states:\n * - No voices yet: header + key input + Save button.\n * - Already-added voices: header + toggleable voice grid; \"Add more\n * models\" button lazy-loads the catalog (300+ models — too heavy\n * to fetch unconditionally on every page load).\n */\n\ninterface Props {\n /** Existing openrouter voices (provider=openrouter, source=api). */\n voices: Voice[];\n}\n\nexport function OpenRouterCard({ voices: initialVoices }: Props) {\n const [voices, setVoices] = useState<Voice[]>(initialVoices);\n const [catalog, setCatalog] = useState<OpenRouterModel[] | null>(null);\n const [loadingCatalog, setLoadingCatalog] = useState(false);\n const [showCatalog, setShowCatalog] = useState(false);\n\n const [apiKey, setApiKey] = useState(\"\");\n const [keyBusy, setKeyBusy] = useState(false);\n const [keyError, setKeyError] = useState<string | null>(null);\n const [showKeyInput, setShowKeyInput] = useState(false);\n\n const [filter, setFilter] = useState(\"\");\n const [picked, setPicked] = useState<Set<string>>(new Set());\n const [adding, setAdding] = useState(false);\n const [addError, setAddError] = useState<string | null>(null);\n const [addedMsg, setAddedMsg] = useState<string | null>(null);\n\n const [savingId, setSavingId] = useState<string | null>(null);\n const [toggleError, setToggleError] = useState<string | null>(null);\n\n const enabledCount = voices.filter((v) => v.enabled).length;\n const hasVoices = voices.length > 0;\n\n async function loadCatalog() {\n if (loadingCatalog) return;\n setLoadingCatalog(true);\n setKeyError(null);\n setShowCatalog(true);\n try {\n const { models } = await listOpenRouterModels();\n models.sort((a, b) => a.id.localeCompare(b.id));\n setCatalog(models);\n setShowKeyInput(false);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setShowKeyInput(true);\n if (!/no openrouter api key/i.test(message)) {\n setKeyError(message);\n }\n } finally {\n setLoadingCatalog(false);\n }\n }\n\n async function saveKey() {\n if (apiKey.trim().length === 0) return;\n setKeyBusy(true);\n setKeyError(null);\n try {\n const v = await saveOpenRouterKey(apiKey.trim());\n if (!v.valid) {\n setKeyError(v.error ?? \"Validation failed\");\n return;\n }\n setApiKey(\"\");\n setShowKeyInput(false);\n const { models } = await listOpenRouterModels();\n models.sort((a, b) => a.id.localeCompare(b.id));\n setCatalog(models);\n setShowCatalog(true);\n } catch (err) {\n setKeyError(err instanceof Error ? err.message : String(err));\n } finally {\n setKeyBusy(false);\n }\n }\n\n async function addPicked() {\n if (picked.size === 0) return;\n setAdding(true);\n setAddError(null);\n setAddedMsg(null);\n try {\n const r = await addOpenRouterVoices(Array.from(picked));\n const added = r.added.length;\n const skipped = r.skipped.length;\n setAddedMsg(\n `Added ${added} voice${added === 1 ? \"\" : \"s\"}` +\n (skipped > 0 ? ` · skipped ${skipped} (unknown id)` : \"\"),\n );\n setPicked(new Set());\n try {\n const next = await listVoices({ source: \"api\", provider: \"openrouter\" });\n setVoices(next);\n } catch {\n /* best-effort reload — voices were inserted regardless */\n }\n } catch (err) {\n setAddError(err instanceof Error ? err.message : String(err));\n } finally {\n setAdding(false);\n }\n }\n\n async function toggleVoice(v: Voice) {\n setSavingId(v.id);\n setToggleError(null);\n try {\n const next = await updateVoice(v.id, { enabled: !v.enabled });\n setVoices((prev) => prev.map((p) => (p.id === next.id ? next : p)));\n } catch (err) {\n setToggleError(err instanceof Error ? err.message : String(err));\n } finally {\n setSavingId(null);\n }\n }\n\n const filtered = filter.trim()\n ? (catalog ?? []).filter(\n (m) =>\n m.id.toLowerCase().includes(filter.toLowerCase().trim()) ||\n m.name.toLowerCase().includes(filter.toLowerCase().trim()),\n )\n : catalog ?? [];\n\n return (\n <div\n className={cn(\n \"flex h-72 flex-col rounded-lg border border-border\",\n UI_LINEAGE_BRAND.openrouter.gradient,\n )}\n >\n <div className=\"flex shrink-0 items-center gap-3 px-4 py-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full\",\n UI_LINEAGE_BRAND.openrouter.dot,\n )}\n />\n <h3 className=\"whitespace-nowrap text-sm font-semibold\">OpenRouter</h3>\n {hasVoices ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300\">\n <Check className=\"h-3 w-3\" /> {enabledCount} enabled\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full border border-border bg-card px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n Not configured\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-1 flex-col gap-3 overflow-y-auto border-t border-border bg-card/30 p-4\">\n {!hasVoices && (\n <p className=\"text-[11px] leading-relaxed text-muted-foreground\">\n Voices added here run via OpenRouter&apos;s chat-completions API.\n Costs come back per-call from the API and surface on the run page.\n </p>\n )}\n\n {hasVoices && (\n <div className=\"space-y-2\">\n <p className=\"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\">\n Models\n </p>\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n {voices.map((v) => (\n <button\n key={v.id}\n type=\"button\"\n disabled={savingId === v.id}\n onClick={() => toggleVoice(v)}\n title={v.model_id}\n className={cn(\n \"flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60\",\n v.enabled\n ? \"border-primary/50 bg-primary/10 text-foreground\"\n : \"border-border bg-card text-muted-foreground hover:border-muted-foreground/30\",\n )}\n >\n <div\n className={cn(\n \"grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition\",\n v.enabled\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border\",\n )}\n >\n {v.enabled && <Check className=\"h-2 w-2\" />}\n </div>\n <span className=\"truncate font-mono\">{v.model_id}</span>\n </button>\n ))}\n </div>\n {toggleError && (\n <p className=\"text-[11px] text-destructive\">{toggleError}</p>\n )}\n </div>\n )}\n\n {(showKeyInput || !hasVoices) && (\n <div className=\"space-y-2 rounded-md border border-border bg-background/40 p-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\">\n {hasVoices ? \"Replace API key\" : \"OpenRouter API key\"}\n </label>\n <a\n href=\"https://openrouter.ai/keys\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Get a key <ExternalLink className=\"h-2.5 w-2.5\" />\n </a>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder=\"sk-or-v1-…\"\n disabled={keyBusy}\n className=\"h-8 flex-1 rounded-md border border-border bg-background px-2 font-mono text-xs focus:border-primary/60 focus:outline-none\"\n />\n <button\n type=\"button\"\n onClick={saveKey}\n disabled={keyBusy || apiKey.trim().length === 0}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-3 text-[11px] font-medium text-primary transition hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {keyBusy ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <Check className=\"h-3 w-3\" />\n )}\n {keyBusy ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n {keyError && (\n <p className=\"flex items-center gap-1 text-[11px] text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n {keyError}\n </p>\n )}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {hasVoices && !showCatalog && (\n <button\n type=\"button\"\n onClick={loadCatalog}\n disabled={loadingCatalog}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-card px-3 text-[11px] font-medium text-foreground transition hover:border-muted-foreground/30 disabled:opacity-50\"\n >\n {loadingCatalog ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : null}\n Add more models\n </button>\n )}\n {hasVoices && !showKeyInput && (\n <button\n type=\"button\"\n onClick={() => setShowKeyInput(true)}\n className=\"text-[11px] text-muted-foreground underline-offset-2 hover:underline\"\n >\n Replace API key\n </button>\n )}\n </div>\n\n {showCatalog && (\n <>\n {loadingCatalog && (\n <p className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n <Loader2 className=\"h-3 w-3 animate-spin\" /> Loading catalog…\n </p>\n )}\n\n {catalog && catalog.length > 0 && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-[11px] font-medium uppercase tracking-wider text-muted-foreground\">\n {hasVoices ? \"Add more models\" : \"Pick models\"}\n </p>\n <button\n type=\"button\"\n onClick={addPicked}\n disabled={picked.size === 0 || adding}\n className=\"inline-flex h-7 items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-2.5 text-[11px] font-medium text-primary transition hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {adding ? <Loader2 className=\"h-3 w-3 animate-spin\" /> : null}\n Add {picked.size > 0 ? picked.size : \"\"}\n </button>\n </div>\n\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-background/40 px-2\">\n <Search className=\"h-3 w-3 text-muted-foreground\" />\n <input\n type=\"text\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n placeholder=\"filter by id or name…\"\n className=\"h-7 flex-1 bg-transparent text-[11px] focus:outline-none\"\n />\n <span className=\"text-[10px] text-muted-foreground\">\n {filtered.length}/{catalog.length}\n </span>\n </div>\n\n {addedMsg && (\n <p className=\"text-[11px] text-emerald-300\">{addedMsg}</p>\n )}\n {addError && (\n <p className=\"flex items-center gap-1 text-[11px] text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n {addError}\n </p>\n )}\n\n <div className=\"max-h-72 overflow-y-auto rounded-md border border-border\">\n {filtered.map((m) => {\n const checked = picked.has(m.id);\n const already = voices.some((v) => v.model_id === m.id);\n return (\n <label\n key={m.id}\n className={cn(\n \"flex cursor-pointer items-center gap-2 border-b border-border px-2 py-1.5 text-[11px] last:border-b-0 hover:bg-card/40\",\n already && \"opacity-50\",\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={already}\n onChange={(e) => {\n setPicked((prev) => {\n const next = new Set(prev);\n if (e.target.checked) next.add(m.id);\n else next.delete(m.id);\n return next;\n });\n }}\n className=\"h-3 w-3 shrink-0\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-mono text-[11px]\">\n {m.id}\n {already && (\n <span className=\"ml-1 text-[10px] text-muted-foreground\">\n · added\n </span>\n )}\n </div>\n <div className=\"truncate text-[10px] text-muted-foreground\">\n {m.name}\n {m.contextLength\n ? ` · ${(m.contextLength / 1000).toFixed(0)}k ctx`\n : \"\"}\n {m.inputCostPerMtok !== undefined ||\n m.outputCostPerMtok !== undefined\n ? ` · ${formatPrice(m.inputCostPerMtok)}/${formatPrice(m.outputCostPerMtok)} per Mtok`\n : \"\"}\n </div>\n </div>\n </label>\n );\n })}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n\nfunction formatPrice(usd?: number): string {\n if (usd === undefined) return \"?\";\n if (usd < 0.01) return `$${usd.toFixed(4)}`;\n return `$${usd.toFixed(2)}`;\n}\n"],"names":["ORCHESTRATOR_TO_PROVIDER","claude","codex","gemini","opencode","kimi","NEUTRAL_BRAND","dot","gradient","brandForOrchestrator","name","OrchestratorCard","initial","voices","initialVoices","status","setStatus","busy","setBusy","error","setError","justConnected","setJustConnected","provider","setVoices","saving","setSaving","saveError","setSaveError","supportsModels","length","enabledCount","filter","v","enabled","isOpencode","isConnected","connected","partial","approvedTools","brand","connect","result","added","err","message","toggleVoice","id","next","prev","map","p","opencodeGroups","Map","slash","model_id","indexOf","gw","slice","list","get","push","set","sortedGateways","Array","from","keys","sort","className","label","totalTools","supported","note","type","onClick","disabled","firstCallBehavior","gateway","ModelToggle","value","selected","title","OpenRouterCard","catalog","setCatalog","loadingCatalog","setLoadingCatalog","showCatalog","setShowCatalog","apiKey","setApiKey","keyBusy","setKeyBusy","keyError","setKeyError","showKeyInput","setShowKeyInput","setFilter","picked","setPicked","Set","adding","setAdding","addError","setAddError","addedMsg","setAddedMsg","savingId","setSavingId","toggleError","setToggleError","hasVoices","loadCatalog","models","a","b","localeCompare","Error","String","test","saveKey","trim","valid","addPicked","size","r","skipped","source","filtered","m","toLowerCase","includes","openrouter","href","target","rel","onChange","e","placeholder","checked","has","already","some","add","delete","contextLength","toFixed","inputCostPerMtok","undefined","outputCostPerMtok","formatPrice","usd"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- module.exports=[52218,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(68103),e=a.i(64837),f=a.i(32349),g=a.i(84623),h=a.i(88923),i=a.i(24897),j=a.i(92415),k=a.i(68114);function l({status:a}){switch(a){case"auth_invalid":case"quota_exhausted":case"rate_limited":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(e.AlertTriangle,{className:"h-3 w-3"}),"auth_invalid"===a?"Auth broken":"quota_exhausted"===a?"Quota out":"Rate-limited"]});default:return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3 w-3"}),"Connected"]})}}a.s(["OpencodeFleetCard",0,function({health:a,voices:d}){let[e,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(d),[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(null);async function t(a){s(a.id),q(null);try{let b=await (0,i.updateVoice)(a.id,{enabled:!a.enabled});o(a=>a.map(a=>a.id===b.id?b:a))}catch(a){q(a instanceof j.DaemonError?a.message:"Couldn't save. Is the daemon running?")}finally{s(null)}}let u=new Map;for(let a of n){let b=a.model_id.indexOf("/"),c=b>0?a.model_id.slice(0,b):"other",d=u.get(c)??[];d.push(a),u.set(c,d)}let v=Array.from(u.keys()).sort(),w=n.filter(a=>a.enabled).length;return(0,b.jsxs)("div",{className:(0,k.cn)("rounded-lg border border-border transition-colors hover:border-foreground/20",h.UI_LINEAGE_BRAND.opencode.gradient),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>m(a=>!a),className:"flex w-full items-center gap-3 p-3 text-left",children:[(0,b.jsx)("span",{className:(0,k.cn)("h-2 w-2 shrink-0 rounded-full",h.UI_LINEAGE_BRAND.opencode.dot)}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:"OpenCode"}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-2",children:[(0,b.jsx)(l,{status:a.status}),(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[w," model",1===w?"":"s"," enabled"]})]})]}),(0,b.jsx)(f.ChevronDown,{className:(0,k.cn)("h-4 w-4 shrink-0 text-muted-foreground transition-transform",e&&"rotate-180")})]}),e&&(0,b.jsxs)("div",{className:"space-y-3 border-t border-border bg-card/50 p-3",children:[p&&(0,b.jsx)("p",{className:"text-[11px] text-destructive",children:p}),0===n.length?(0,b.jsxs)("p",{className:"text-[11px] text-muted-foreground",children:["No OpenCode voices detected yet. Run ",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"opencode models"})," ","and restart the daemon."]}):(0,b.jsxs)("div",{className:"space-y-3",children:[v.map(a=>{let c=u.get(a)??[];return(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("p",{className:"text-[11px] font-mono text-muted-foreground/80",children:[a,"/"]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2",children:c.map(c=>{let d=c.enabled,e=c.model_id.slice(a.length+1);return(0,b.jsxs)("button",{type:"button",disabled:r===c.id,onClick:()=>t(c),title:c.model_id,className:(0,k.cn)("flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60",d?"border-primary/50 bg-primary/10 text-foreground":"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground"),children:[(0,b.jsx)("div",{className:(0,k.cn)("grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition",d?"border-primary bg-primary text-primary-foreground":"border-border"),children:d&&(0,b.jsx)(g.Check,{className:"h-2 w-2"})}),(0,b.jsx)("span",{className:"truncate font-mono",children:e})]},c.id)})})]},a)}),(0,b.jsx)("p",{className:"text-[11px] leading-relaxed text-muted-foreground/70",children:"Toggles save automatically. Templates and the New Chat dialog will only offer models you've enabled here."})]})]})]})}])},10241,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(68103),e=a.i(64837),f=a.i(14342),g=a.i(32349),h=a.i(84623),i=a.i(88923),j=a.i(24897),k=a.i(92415),l=a.i(68114);let m={anthropic:"claude",openai:"codex",google:"gemini",opencode:"opencode",moonshot:"kimi"},n={dot:"bg-muted-foreground/40",gradient:"bg-gradient-to-br from-muted/30 via-card to-card"};function o({status:a}){switch(a){case"auth_invalid":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(e.AlertTriangle,{className:"h-3 w-3"}),"Auth broken"]});case"quota_exhausted":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(e.AlertTriangle,{className:"h-3 w-3"}),"Quota out"]});case"rate_limited":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:[(0,b.jsx)(f.Clock,{className:"h-3 w-3"}),"Rate-limited"]});default:return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3 w-3"}),"Connected"]})}}a.s(["LineageFleetCard",0,function({lineage:a,label:d,voices:e,health:f}){let p,[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(e),[u,v]=(0,c.useState)(null),[w,x]=(0,c.useState)(null);async function y(a){x(a.id),v(null);try{let b=await (0,j.updateVoice)(a.id,{enabled:!a.enabled});t(a=>a.map(a=>a.id===b.id?b:a))}catch(a){v(a instanceof k.DaemonError?a.message:"Couldn't save. Is the daemon running?")}finally{x(null)}}let z=s.filter(a=>a.enabled).length,A=(p=m[a])?i.UI_LINEAGE_BRAND[p]:n;return(0,b.jsxs)("div",{className:(0,l.cn)("rounded-lg border border-border transition-colors hover:border-foreground/20",A.gradient),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>r(a=>!a),className:"flex w-full items-center gap-3 p-3 text-left",children:[(0,b.jsx)("span",{className:(0,l.cn)("h-2 w-2 shrink-0 rounded-full",A.dot)}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:d}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-2",children:[(0,b.jsx)(o,{status:f.status}),(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[z," model",1===z?"":"s"," enabled"]})]})]}),(0,b.jsx)(g.ChevronDown,{className:(0,l.cn)("h-4 w-4 shrink-0 text-muted-foreground transition-transform",q&&"rotate-180")})]}),q&&(0,b.jsxs)("div",{className:"space-y-2 border-t border-border bg-card/50 p-3",children:[u&&(0,b.jsx)("p",{className:"text-[11px] text-destructive",children:u}),0===s.length?(0,b.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"No voices detected for this provider yet."}):(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1",children:s.map(a=>{let c=a.enabled;return(0,b.jsxs)("button",{type:"button",disabled:w===a.id,onClick:()=>y(a),title:a.model_id,className:(0,l.cn)("flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60",c?"border-primary/50 bg-primary/10 text-foreground":"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground"),children:[(0,b.jsx)("div",{className:(0,l.cn)("grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition",c?"border-primary bg-primary text-primary-foreground":"border-border"),children:c&&(0,b.jsx)(h.Check,{className:"h-2 w-2"})}),(0,b.jsx)("span",{className:"truncate font-mono",children:a.model_id})]},a.id)})}),(0,b.jsx)("p",{className:"text-[11px] leading-relaxed text-muted-foreground/70",children:"Toggles save automatically. Voice list is curated per chorus release — new models appear after upgrades."})]})]})}])},61087,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(53905),e=a.i(68103),f=a.i(32349),g=a.i(84623),h=a.i(64837),i=a.i(7090),j=a.i(14342),k=a.i(88923),l=a.i(24897),m=a.i(92415),n=a.i(68114);a.s(["OpenRouterFleetCard",0,function({voices:a,health:o}){let p=o?.status==="auth_invalid",[q,r]=(0,c.useState)(p),[s,t]=(0,c.useState)(a),[u,v]=(0,c.useState)(null),[w,x]=(0,c.useState)(null);async function y(a){x(a.id),v(null);try{let b=await (0,l.updateVoice)(a.id,{enabled:!a.enabled});t(a=>a.map(a=>a.id===b.id?b:a))}catch(a){v(a instanceof m.DaemonError?a.message:"Couldn't save. Is the daemon running?")}finally{x(null)}}let z=s.filter(a=>a.enabled).length;return(0,b.jsxs)("div",{className:(0,n.cn)("rounded-lg border border-border transition-colors hover:border-foreground/20",k.UI_LINEAGE_BRAND.openrouter.gradient),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>r(a=>!a),className:"flex w-full items-center gap-3 p-3 text-left",children:[(0,b.jsx)("span",{className:(0,n.cn)("h-2 w-2 shrink-0 rounded-full",k.UI_LINEAGE_BRAND.openrouter.dot)}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-sm font-medium",children:"OpenRouter"}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-2",children:[function(a){switch(a){case"quota_exhausted":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(h.AlertTriangle,{className:"h-3 w-3"}),"Credits out"]});case"auth_invalid":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(h.AlertTriangle,{className:"h-3 w-3"}),"Auth broken"]});case"rate_limited":return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:[(0,b.jsx)(j.Clock,{className:"h-3 w-3"}),"Rate-limited"]});default:return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300",children:[(0,b.jsx)(e.CheckCircle2,{className:"h-3 w-3"}),"Configured"]})}}(o?.status??"healthy"),(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[z," model",1===z?"":"s"," enabled"]})]})]}),(0,b.jsx)(f.ChevronDown,{className:(0,n.cn)("h-4 w-4 shrink-0 text-muted-foreground transition-transform",q&&"rotate-180")})]}),q&&(0,b.jsxs)("div",{className:"space-y-2 border-t border-border bg-card/50 p-3",children:[p&&(0,b.jsxs)("div",{className:"flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2.5",children:[(0,b.jsx)(h.AlertTriangle,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-destructive"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 space-y-1.5",children:[(0,b.jsxs)("p",{className:"text-[11px] leading-relaxed text-destructive",children:["OpenRouter rejected the saved API key",o?.message?`: ${o.message}`:"."]}),(0,b.jsxs)(d.default,{href:"/connect",className:"inline-flex items-center gap-1 rounded border border-destructive/50 bg-destructive/10 px-2 py-1 text-[11px] font-medium text-destructive transition hover:bg-destructive/20",children:["Fix on Connect",(0,b.jsx)(i.ArrowRight,{className:"h-3 w-3"})]})]})]}),u&&(0,b.jsx)("p",{className:"text-[11px] text-destructive",children:u}),0===s.length?(0,b.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"No OpenRouter voices yet. Add some on the Connect page."}):(0,b.jsx)("div",{className:"grid grid-cols-1 gap-1",children:s.map(a=>(0,b.jsxs)("button",{type:"button",disabled:w===a.id,onClick:()=>y(a),title:a.model_id,className:(0,n.cn)("flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60",a.enabled?"border-primary/50 bg-primary/10 text-foreground":"border-border bg-card text-muted-foreground hover:border-muted-foreground/30"),children:[(0,b.jsx)("div",{className:(0,n.cn)("grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition",a.enabled?"border-primary bg-primary text-primary-foreground":"border-border"),children:a.enabled&&(0,b.jsx)(g.Check,{className:"h-2 w-2"})}),(0,b.jsx)("span",{className:"truncate font-mono",children:a.model_id})]},a.id))}),!p&&(0,b.jsx)("p",{className:"text-[11px] leading-relaxed text-muted-foreground/70",children:"Add or replace your API key on Connect. Toggles save automatically."})]})]})}])}];
2
-
3
- //# sourceMappingURL=src_components_0lc2g58._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/opencode-fleet-card.tsx","../../../../src/components/lineage-fleet-card.tsx","../../../../src/components/openrouter-fleet-card.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Inline-expandable OpenCode card for the home-page reviewer fleet.\n *\n * Shows count of currently-enabled voices; clicking expands a panel with\n * the gateway-grouped checkbox grid. Toggling a model PUTs /voices/:id\n * immediately so the change is live without a save button.\n *\n * Data source: voices table, filtered to provider='opencode-cli'. The\n * daemon's Phase 2 background warmup populates these from `opencode\n * models`. Includes both enabled + disabled rows (per round 1 cdx-1\n * BLOCKER) so users can re-enable from the fleet card.\n */\n\nimport { useState } from \"react\";\nimport { CheckCircle2, AlertTriangle, ChevronDown, Check } from \"lucide-react\";\nimport { UI_LINEAGE_BRAND } from \"@/lib/lineage-maps\";\nimport { updateVoice, type Voice } from \"@/lib/api/voices\";\nimport { DaemonError } from \"@/lib/api/client\";\nimport { cn } from \"@/lib/utils\";\n\ninterface OpencodeFleetCardProps {\n health: {\n status: \"healthy\" | \"quota_exhausted\" | \"auth_invalid\" | \"rate_limited\" | \"unknown\";\n message?: string;\n };\n /** OpenCode voices — both enabled and disabled. */\n voices: Voice[];\n}\n\nexport function OpencodeFleetCard({ health, voices: initialVoices }: OpencodeFleetCardProps) {\n const [open, setOpen] = useState(false);\n const [voices, setVoices] = useState<Voice[]>(initialVoices);\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saving, setSaving] = useState<string | null>(null);\n\n async function toggleVoice(v: Voice) {\n setSaving(v.id);\n setSaveError(null);\n try {\n const next = await updateVoice(v.id, { enabled: !v.enabled });\n setVoices((prev) => prev.map((p) => (p.id === next.id ? next : p)));\n } catch (err) {\n const message =\n err instanceof DaemonError ? err.message : \"Couldn't save. Is the daemon running?\";\n setSaveError(message);\n } finally {\n setSaving(null);\n }\n }\n\n // Group voices by gateway prefix for the card layout. The `model_id`\n // column carries the gateway-prefixed qualified name (e.g.\n // \"opencode-go/kimi-k2.6\") so the prefix is everything up to the\n // first slash.\n const grouped = new Map<string, Voice[]>();\n for (const v of voices) {\n const slash = v.model_id.indexOf(\"/\");\n const gw = slash > 0 ? v.model_id.slice(0, slash) : \"other\";\n const list = grouped.get(gw) ?? [];\n list.push(v);\n grouped.set(gw, list);\n }\n const sortedGateways = Array.from(grouped.keys()).sort();\n\n const enabledCount = voices.filter((v) => v.enabled).length;\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-border transition-colors hover:border-foreground/20\",\n UI_LINEAGE_BRAND.opencode.gradient,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-3 p-3 text-left\"\n >\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full\",\n UI_LINEAGE_BRAND.opencode.dot,\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium\">OpenCode</div>\n <div className=\"mt-0.5 flex items-center gap-2\">\n <StatusBadge status={health.status} />\n <span className=\"text-[10px] text-muted-foreground\">\n {enabledCount} model{enabledCount === 1 ? \"\" : \"s\"} enabled\n </span>\n </div>\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n\n {open && (\n <div className=\"space-y-3 border-t border-border bg-card/50 p-3\">\n {saveError && <p className=\"text-[11px] text-destructive\">{saveError}</p>}\n\n {voices.length === 0 ? (\n <p className=\"text-[11px] text-muted-foreground\">\n No OpenCode voices detected yet. Run <code className=\"rounded bg-muted px-1\">opencode models</code>{\" \"}\n and restart the daemon.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {sortedGateways.map((gateway) => {\n const list = grouped.get(gateway) ?? [];\n return (\n <div key={gateway} className=\"space-y-1\">\n <p className=\"text-[11px] font-mono text-muted-foreground/80\">{gateway}/</p>\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n {list.map((v) => {\n const sel = v.enabled;\n const shortName = v.model_id.slice(gateway.length + 1);\n return (\n <button\n key={v.id}\n type=\"button\"\n disabled={saving === v.id}\n onClick={() => toggleVoice(v)}\n title={v.model_id}\n className={cn(\n \"flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60\",\n sel\n ? \"border-primary/50 bg-primary/10 text-foreground\"\n : \"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground\",\n )}\n >\n <div\n className={cn(\n \"grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition\",\n sel\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border\",\n )}\n >\n {sel && <Check className=\"h-2 w-2\" />}\n </div>\n <span className=\"truncate font-mono\">{shortName}</span>\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n <p className=\"text-[11px] leading-relaxed text-muted-foreground/70\">\n Toggles save automatically. Templates and the New Chat dialog will only offer\n models you&apos;ve enabled here.\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction StatusBadge({ status }: { status: OpencodeFleetCardProps[\"health\"][\"status\"] }) {\n // Card only renders for already-connected CLIs — see comment in\n // LineageFleetCard's StatusBadge for the rationale.\n switch (status) {\n case \"auth_invalid\":\n case \"quota_exhausted\":\n case \"rate_limited\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n {status === \"auth_invalid\" ? \"Auth broken\" : status === \"quota_exhausted\" ? \"Quota out\" : \"Rate-limited\"}\n </span>\n );\n case \"healthy\":\n default:\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Connected\n </span>\n );\n }\n}\n","\"use client\";\n\n/**\n * Inline-expandable fleet card for single-subscription CLIs (Claude Code,\n * Codex CLI, Gemini CLI, Kimi CLI). Shares the toggle UX of\n * OpencodeFleetCard but skips the gateway grouping — these CLIs back a\n * single subscription with a flat list of models.\n *\n * Data source: voices table via /voices?provider=<id>. Each toggle calls\n * PUT /voices/:id immediately so changes are live without a save button.\n *\n * Shows ALL voices (enabled + disabled) so users can re-enable from the\n * fleet card without going through onboarding.\n */\n\nimport { useState } from \"react\";\nimport {\n CheckCircle2,\n AlertTriangle,\n Clock,\n ChevronDown,\n Check,\n} from \"lucide-react\";\nimport { UI_LINEAGE_BRAND, type UILineage } from \"@/lib/lineage-maps\";\nimport { updateVoice, type Voice } from \"@/lib/api/voices\";\nimport { DaemonError } from \"@/lib/api/client\";\nimport { cn } from \"@/lib/utils\";\n\nconst DAEMON_TO_UI_LINEAGE: Record<string, UILineage> = {\n anthropic: \"claude\",\n openai: \"codex\",\n google: \"gemini\",\n opencode: \"opencode\",\n moonshot: \"kimi\",\n};\n\nconst NEUTRAL_BRAND = {\n dot: \"bg-muted-foreground/40\",\n gradient: \"bg-gradient-to-br from-muted/30 via-card to-card\",\n} as const;\n\nfunction brandForDaemonLineage(lineage: string) {\n const ui = DAEMON_TO_UI_LINEAGE[lineage];\n return ui ? UI_LINEAGE_BRAND[ui] : NEUTRAL_BRAND;\n}\n\ninterface LineageFleetCardProps {\n /** Daemon-side lineage name — \"anthropic\", \"openai\", \"google\", \"moonshot\". */\n lineage: string;\n /** Display label — \"Claude Code\", \"Codex CLI\", etc. */\n label: string;\n /** Voices for this provider — both enabled and disabled. */\n voices: Voice[];\n health: {\n status: \"healthy\" | \"quota_exhausted\" | \"auth_invalid\" | \"rate_limited\" | \"unknown\";\n message?: string;\n };\n}\n\nexport function LineageFleetCard({\n lineage,\n label,\n voices: initialVoices,\n health,\n}: LineageFleetCardProps) {\n const [open, setOpen] = useState(false);\n const [voices, setVoices] = useState<Voice[]>(initialVoices);\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saving, setSaving] = useState<string | null>(null);\n\n async function toggleVoice(v: Voice) {\n setSaving(v.id);\n setSaveError(null);\n try {\n const next = await updateVoice(v.id, { enabled: !v.enabled });\n setVoices((prev) => prev.map((p) => (p.id === next.id ? next : p)));\n } catch (err) {\n const message =\n err instanceof DaemonError ? err.message : \"Couldn't save. Is the daemon running?\";\n setSaveError(message);\n } finally {\n setSaving(null);\n }\n }\n\n const enabledCount = voices.filter((v) => v.enabled).length;\n const brand = brandForDaemonLineage(lineage);\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-border transition-colors hover:border-foreground/20\",\n brand.gradient,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-3 p-3 text-left\"\n >\n <span className={cn(\"h-2 w-2 shrink-0 rounded-full\", brand.dot)} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium\">{label}</div>\n <div className=\"mt-0.5 flex items-center gap-2\">\n <StatusBadge status={health.status} />\n <span className=\"text-[10px] text-muted-foreground\">\n {enabledCount} model{enabledCount === 1 ? \"\" : \"s\"} enabled\n </span>\n </div>\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n\n {open && (\n <div className=\"space-y-2 border-t border-border bg-card/50 p-3\">\n {saveError && <p className=\"text-[11px] text-destructive\">{saveError}</p>}\n {voices.length === 0 ? (\n <p className=\"text-[11px] text-muted-foreground\">\n No voices detected for this provider yet.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-1\">\n {voices.map((v) => {\n const sel = v.enabled;\n return (\n <button\n key={v.id}\n type=\"button\"\n disabled={saving === v.id}\n onClick={() => toggleVoice(v)}\n title={v.model_id}\n className={cn(\n \"flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60\",\n sel\n ? \"border-primary/50 bg-primary/10 text-foreground\"\n : \"border-border bg-card hover:border-muted-foreground/30 text-muted-foreground\",\n )}\n >\n <div\n className={cn(\n \"grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition\",\n sel\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border\",\n )}\n >\n {sel && <Check className=\"h-2 w-2\" />}\n </div>\n <span className=\"truncate font-mono\">{v.model_id}</span>\n </button>\n );\n })}\n </div>\n )}\n <p className=\"text-[11px] leading-relaxed text-muted-foreground/70\">\n Toggles save automatically. Voice list is curated per chorus release —\n new models appear after upgrades.\n </p>\n </div>\n )}\n </div>\n );\n}\n\nfunction StatusBadge({ status }: { status: LineageFleetCardProps[\"health\"][\"status\"] }) {\n // Card is only rendered for already-connected CLIs (panel filters on\n // orchestrator.connected), so the baseline state is \"Connected\" rather\n // than \"Untested\" — the latter never made sense to surface here. Real\n // failure states (auth/quota/rate-limit) still override and show their\n // amber/red badge.\n switch (status) {\n case \"auth_invalid\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n Auth broken\n </span>\n );\n case \"quota_exhausted\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n Quota out\n </span>\n );\n case \"rate_limited\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300\">\n <Clock className=\"h-3 w-3\" />\n Rate-limited\n </span>\n );\n case \"healthy\":\n default:\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Connected\n </span>\n );\n }\n}\n","\"use client\";\n\n/**\n * Inline-expandable OpenRouter card for the home-page reviewer fleet.\n * Mirrors LineageFleetCard's shape but for HTTP-dispatched OpenRouter\n * voices (provider='openrouter', source='api'). No /cli/health probe —\n * OpenRouter is HTTP-only, so health is implicit (\"Configured\" if any\n * voices exist; the panel filters this card out otherwise).\n */\n\nimport { useState } from \"react\";\nimport Link from \"next/link\";\nimport {\n CheckCircle2,\n ChevronDown,\n Check,\n AlertTriangle,\n ArrowRight,\n Clock,\n} from \"lucide-react\";\nimport { UI_LINEAGE_BRAND } from \"@/lib/lineage-maps\";\nimport { updateVoice, type Voice } from \"@/lib/api/voices\";\nimport { DaemonError } from \"@/lib/api/client\";\nimport { cn } from \"@/lib/utils\";\n\ntype HealthStatus =\n | \"healthy\"\n | \"quota_exhausted\"\n | \"auth_invalid\"\n | \"rate_limited\"\n | \"unknown\";\n\ninterface OpenRouterFleetCardProps {\n voices: Voice[];\n health?: { status: HealthStatus; message?: string };\n}\n\nexport function OpenRouterFleetCard({\n voices: initialVoices,\n health,\n}: OpenRouterFleetCardProps) {\n // Auto-expand when auth is broken so the \"Fix on Connect\" CTA is visible\n // without the user having to discover that the card is clickable.\n const isBroken = health?.status === \"auth_invalid\";\n const [open, setOpen] = useState(isBroken);\n const [voices, setVoices] = useState<Voice[]>(initialVoices);\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saving, setSaving] = useState<string | null>(null);\n\n async function toggleVoice(v: Voice) {\n setSaving(v.id);\n setSaveError(null);\n try {\n const next = await updateVoice(v.id, { enabled: !v.enabled });\n setVoices((prev) => prev.map((p) => (p.id === next.id ? next : p)));\n } catch (err) {\n setSaveError(\n err instanceof DaemonError ? err.message : \"Couldn't save. Is the daemon running?\",\n );\n } finally {\n setSaving(null);\n }\n }\n\n const enabledCount = voices.filter((v) => v.enabled).length;\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-border transition-colors hover:border-foreground/20\",\n UI_LINEAGE_BRAND.openrouter.gradient,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-3 p-3 text-left\"\n >\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full\",\n UI_LINEAGE_BRAND.openrouter.dot,\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium\">OpenRouter</div>\n <div className=\"mt-0.5 flex items-center gap-2\">\n {renderStatusBadge(health?.status ?? \"healthy\")}\n <span className=\"text-[10px] text-muted-foreground\">\n {enabledCount} model{enabledCount === 1 ? \"\" : \"s\"} enabled\n </span>\n </div>\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n\n {open && (\n <div className=\"space-y-2 border-t border-border bg-card/50 p-3\">\n {isBroken && (\n <div className=\"flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2.5\">\n <AlertTriangle className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-destructive\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <p className=\"text-[11px] leading-relaxed text-destructive\">\n OpenRouter rejected the saved API key\n {health?.message ? `: ${health.message}` : \".\"}\n </p>\n <Link\n href=\"/connect\"\n className=\"inline-flex items-center gap-1 rounded border border-destructive/50 bg-destructive/10 px-2 py-1 text-[11px] font-medium text-destructive transition hover:bg-destructive/20\"\n >\n Fix on Connect\n <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n </div>\n )}\n {saveError && <p className=\"text-[11px] text-destructive\">{saveError}</p>}\n {voices.length === 0 ? (\n <p className=\"text-[11px] text-muted-foreground\">\n No OpenRouter voices yet. Add some on the Connect page.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-1\">\n {voices.map((v) => (\n <button\n key={v.id}\n type=\"button\"\n disabled={saving === v.id}\n onClick={() => toggleVoice(v)}\n title={v.model_id}\n className={cn(\n \"flex items-center gap-2 rounded border px-2 py-1.5 text-left text-[11px] transition disabled:opacity-60\",\n v.enabled\n ? \"border-primary/50 bg-primary/10 text-foreground\"\n : \"border-border bg-card text-muted-foreground hover:border-muted-foreground/30\",\n )}\n >\n <div\n className={cn(\n \"grid h-3 w-3 shrink-0 place-items-center rounded-sm border transition\",\n v.enabled\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border\",\n )}\n >\n {v.enabled && <Check className=\"h-2 w-2\" />}\n </div>\n <span className=\"truncate font-mono\">{v.model_id}</span>\n </button>\n ))}\n </div>\n )}\n {!isBroken && (\n <p className=\"text-[11px] leading-relaxed text-muted-foreground/70\">\n Add or replace your API key on Connect. Toggles save automatically.\n </p>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction renderStatusBadge(status: HealthStatus): React.ReactNode {\n switch (status) {\n case \"quota_exhausted\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n Credits out\n </span>\n );\n case \"auth_invalid\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive\">\n <AlertTriangle className=\"h-3 w-3\" />\n Auth broken\n </span>\n );\n case \"rate_limited\":\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300\">\n <Clock className=\"h-3 w-3\" />\n Rate-limited\n </span>\n );\n case \"healthy\":\n case \"unknown\":\n default:\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-300\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Configured\n </span>\n );\n }\n}\n"],"names":["OpencodeFleetCard","health","voices","initialVoices","open","setOpen","setVoices","saveError","setSaveError","saving","setSaving","toggleVoice","v","id","next","enabled","prev","map","p","err","message","grouped","Map","slash","model_id","indexOf","gw","slice","list","get","push","set","sortedGateways","Array","from","keys","sort","enabledCount","filter","length","className","opencode","gradient","type","onClick","dot","StatusBadge","status","gateway","sel","shortName","disabled","title","DAEMON_TO_UI_LINEAGE","anthropic","openai","google","moonshot","NEUTRAL_BRAND","brandForDaemonLineage","lineage","ui","LineageFleetCard","label","brand","OpenRouterFleetCard","isBroken","openrouter","renderStatusBadge","href"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- module.exports=[3665,a=>{"use strict";var b=a.i(81673),c=a.i(53905),d=a.i(91870);let e=(0,d.default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);var f=a.i(76015),g=a.i(39726),h=a.i(48994);function i({work:a}){let[c,d]=(0,f.useState)(!1),e=(0,h.chatDisplayTitle)(a),g=a.trim()!==e.trim()||a.length>100;return(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("button",{type:"button",onClick:g?()=>d(a=>!a):void 0,title:g?c?"Hide full brief":"Click to show full brief":e,disabled:!g,className:"block w-full min-w-0 text-left disabled:cursor-default",children:(0,b.jsx)("h1",{className:"truncate text-sm font-medium tracking-tight",children:e})}),g&&c&&(0,b.jsx)("pre",{className:"mt-2 max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-background px-5 py-4 font-mono text-[12px] leading-relaxed text-foreground/90",children:a})]})}var j=a.i(64837),k=a.i(7090),l=a.i(19546),m=a.i(63845),n=a.i(88923);let o=Object.fromEntries(Object.entries(n.UI_LINEAGE_BRAND).map(([a,b])=>[a,b.gradient]));var p=a.i(68103),q=a.i(3438);function r({state:a}){switch(a){case"done":return(0,b.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-medium text-emerald-400",children:[(0,b.jsx)(p.CheckCircle2,{className:"h-3 w-3"})," DONE"]});case"errored":return(0,b.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-destructive/10 px-1.5 py-0.5 text-[10px] font-medium text-destructive",children:[(0,b.jsx)(j.AlertTriangle,{className:"h-3 w-3"})," ERRORED"]});case"working":return(0,b.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:[(0,b.jsx)(q.Loader2,{className:"h-3 w-3 animate-spin"})," WORKING"]});case"pending":return(0,b.jsx)("span",{className:"flex items-center gap-1 rounded-md bg-muted/40 px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground/80",children:"QUEUED"});default:return(0,b.jsx)("span",{className:"rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:"IDLE"})}}function s({participant:a,isActive:c,liveTail:d,chatTerminal:e,chatId:g,reviewOnly:h,swaps:i}){var p,q;let u,v,[w,x]=(0,f.useState)(!1),y=function(a){let b;if(!a)return null;let c=a.trimStart();if(!/^##\s+(?:REVIEWER|DOER)\s+FAILED/i.test(c))return null;let d=c.match(/\*\*Kind:\*\*\s*(.+?)(?:\n|$)/),e=d?d[1].trim():"failed",f=c.match(/\*\*Resets:\*\*\s*(.+?)(?:\n|$)/);if(f){let a=Date.parse(f[1].trim());Number.isFinite(a)&&(b=a)}let g=c.search(/\n\n[^*]/),h=g>=0?c.slice(g+2).trim():"",i=h.length>0?h:"(no error message reported)",j=function(a){switch(a){case"quota_exhausted":return"Check your subscription dashboard or swap the account in CHORUS_CODEX_HOME / chorus settings.";case"stream_failure":return"Subprocess died mid-stream — check disk space and CLI version.";case"cli_failed":case"cli_error":return"Re-auth the CLI (codex/gemini/opencode login) and retry.";default:return}}(e);return{kind:e,message:i,...j?{cta:j}:{},...b?{resetAt:b}:{}}}(a.answer),z=a.pending?"pending":a.hasAnswer?"done":y||e?"errored":"working",A="opencode-cli"===a.binaryUsed?"opencode":a.lineage;return(0,b.jsxs)("div",{className:`flex h-[320px] flex-col overflow-hidden rounded-lg border transition-[opacity,border-color,box-shadow] duration-300 ${o[A]??"bg-card"} ${"done"===z?"border-emerald-500/30":"working"===z?"border-primary/60 shadow-[0_0_0_1px_rgba(124,58,237,0.25),0_0_24px_-6px_rgba(124,58,237,0.45)] animate-pulse-soft":"errored"===z?"border-destructive/40":"pending"===z?"border-border/40 opacity-50 grayscale-[0.6]":"border-border"}`,children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border bg-card/60 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-xs leading-none",children:[(0,b.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${(0,n.uiLineageDot)(A)} ${"working"===z?"animate-pulse-soft":""}`}),(0,b.jsx)("span",{className:"font-medium capitalize text-foreground",children:a.role}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"·"}),(0,b.jsx)("span",{className:"uppercase tracking-wider text-muted-foreground",children:(0,n.uiLineageLabel)(A)}),(a.modelUsed??a.model)&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-muted-foreground/60",children:"·"}),(0,b.jsx)("span",{className:"truncate font-mono text-muted-foreground",children:a.modelUsed??a.model})]})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:["working"===z&&g&&(0,b.jsx)("button",{type:"button",disabled:w,onClick:async()=>{if(!w){x(!0);try{let b=await fetch(`/api/daemon/chats/${g}/participants/${encodeURIComponent(a.participant)}/cancel`,{method:"POST"});if(!b.ok)return void x(!1);let c=await b.json();if(!c.ok){window.alert(`Couldn't cancel: ${c.error?.message??"unknown error"}`),x(!1);return}setTimeout(()=>x(!1),15e3)}catch{x(!1)}}},"aria-label":"Cancel this reviewer",title:"Cancel this reviewer (chat continues with others)",className:"grid h-6 w-6 shrink-0 place-items-center rounded-md border border-border bg-card/40 text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)(m.X,{className:"h-3 w-3"})}),(0,b.jsx)(r,{state:z})]})]}),i&&i.length>0&&(v=i.slice().sort((a,b)=>a.fallbackIdx-b.fallbackIdx),(0,b.jsx)("div",{className:"space-y-1.5 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px]",children:v.map((a,c)=>{let d="lineage_fallback"===a.reason,e=c===v.length-1;return(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)(l.Shuffle,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-300"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,b.jsx)("div",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:d?"Cross-lineage fallback":"Model fallback"}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-[11px] text-amber-100/90",children:[(0,b.jsxs)("span",{className:"text-amber-100/60 line-through",children:[a.fromLineage,"/",a.fromModel]}),(0,b.jsx)(k.ArrowRight,{className:"h-3 w-3 shrink-0 text-amber-300"}),(0,b.jsxs)("span",{className:e?"font-medium text-amber-100":"text-amber-100/60 line-through",children:[a.toLineage,"/",a.toModel]}),e&&(0,b.jsx)("span",{className:"rounded bg-amber-500/15 px-1 py-0.5 font-mono text-[9px] text-amber-200",children:"actually ran"})]})]})]},`${a.fromLineage}-${a.fromModel}-${c}`)})})),a.warnings&&a.warnings.length>0&&(0,b.jsx)("div",{className:"space-y-1 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px] text-amber-200/90",children:a.warnings.map((a,c)=>(0,b.jsxs)("div",{className:"flex items-start gap-1.5",children:[(0,b.jsx)(j.AlertTriangle,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-400"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("span",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:a.kind}),(0,b.jsx)("div",{className:"mt-0.5 break-words font-mono text-[11px] leading-snug text-amber-100/85",children:a.message})]})]},c))}),(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-3 font-mono text-xs leading-relaxed text-muted-foreground",children:a.findingsPreview&&a.findingsPreview.length>0?a.findingsPreview.map((a,c)=>(0,b.jsx)("div",{className:"py-0.5 text-foreground/90",children:a},c)):"working"===z&&d&&d.length>0?(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col-reverse overflow-y-auto",children:(0,b.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:d})}):"working"===z?(0,b.jsx)("div",{className:"text-muted-foreground",children:"Thinking…"}):"pending"===z?(0,b.jsx)("div",{className:"text-muted-foreground/70",children:h?"Queued — waiting for an open slot.":"Queued — runs after the doer."}):"errored"===z?y?(0,b.jsxs)("div",{className:"space-y-1.5 text-destructive/90",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider",children:y.kind}),y.resetAt&&(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:["Resets ",function(a){let b=a-Date.now();if(b<=0)return"now";let c=Math.round(b/1e3);if(c<60)return`in ${c}s`;let d=Math.round(c/60);if(d<60)return`in ${d}m`;let e=Math.round(d/60);if(e<24){let b=new Date(a);return`at ${b.getHours().toString().padStart(2,"0")}:${b.getMinutes().toString().padStart(2,"0")}`}let f=Math.round(e/24);return`in ${f}d`}(y.resetAt)]})]}),(0,b.jsx)("div",{className:"whitespace-pre-wrap break-words text-foreground/85",children:y.message}),y.cta&&(0,b.jsx)("div",{className:"text-[11px] text-muted-foreground/80",children:y.cta})]}):(0,b.jsx)("div",{className:"text-destructive/80",children:"The program finished but didn't produce any output."}):"done"===z&&a.answer?(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:a.answer})}):(0,b.jsx)("div",{className:"text-muted-foreground/70",children:"No output yet."})}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 border-t border-border bg-card/60 px-4 py-2 font-mono text-[10px] text-muted-foreground",children:[(0,b.jsx)("span",{className:"truncate",children:a.binaryUsed??a.agentName}),(0,b.jsxs)("span",{className:"flex shrink-0 items-center gap-2",children:[void 0!==a.durationMs&&(0,b.jsx)("span",{title:"Wall-clock time the CLI took to finish.",children:function(a){if(a<1e3)return`${a} ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60),d=Math.round(b-60*c);return`${c}m${d.toString().padStart(2,"0")}s`}(a.durationMs)}),a.usage?.costUsd!==void 0&&(0,b.jsx)("span",{title:"USD cost reported by the CLI for this run.",children:(p=a.usage.costUsd)<=0?"$0.00":p<.01?"<$0.01":p<1?`$${p.toFixed(3)}`:`$${p.toFixed(2)}`}),a.usage&&t(a.usage)&&(0,b.jsx)("span",{title:(q=a.usage,u=[],void 0!==q.inputTokens&&u.push(`in ${q.inputTokens.toLocaleString()}`),void 0!==q.outputTokens&&u.push(`out ${q.outputTokens.toLocaleString()}`),void 0!==q.cachedInputTokens&&u.push(`cached ${q.cachedInputTokens.toLocaleString()}`),u.join(" · ")),children:t(a.usage)}),(0,b.jsx)("span",{children:a.hasAnswer?`${(a.answer?.length??0).toLocaleString()} B`:"—"})]})]})]})}function t(a){let b=(a.inputTokens??0)+(a.outputTokens??0);return b<=0?null:b<1e3?`${b} tok`:`${(b/1e3).toFixed(1)}k tok`}function u({round:a,isLatest:c,activeFor:d,liveTails:e,chatTerminal:f,reviewOnly:g,chatId:h,swaps:i}){let j=g?a.participants.filter(a=>"doer"!==a.role):a.participants,k=(i??[]).filter(b=>b.round===a.round);return(0,b.jsxs)("section",{children:[!g&&(0,b.jsxs)("h2",{className:"mb-3 text-xs uppercase tracking-wider text-muted-foreground",children:["Round ",a.round,c&&(0,b.jsx)("span",{className:"ml-2 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:"current"})]}),(0,b.jsx)("div",{className:"grid items-start gap-4 sm:grid-cols-2 xl:grid-cols-3",children:j.map(a=>{let c;return(0,b.jsx)(s,{participant:a,isActive:d(a),liveTail:e[a.participant],chatTerminal:f,chatId:h,reviewOnly:g,swaps:(c=a.participant.replace(/^(reviewer-|doer-)/,""),k.filter(a=>a.agent===c))},a.participant)})})]})}let v={claude:"claude-code",codex:"codex-cli",gemini:"gemini-cli",opencode:"opencode-cli",kimi:"kimi-cli",openrouter:"openrouter"},w={anthropic:"claude",openai:"codex",google:"gemini",opencode:"opencode",moonshot:"kimi"},x={drafting:{text:"DRAFTING · doer working",color:"primary"},reviewing:{text:"REVIEWING · cross-lineage check",color:"primary"},approved:{text:"APPROVED",color:"emerald"},merged:{text:"PR OPENED",color:"emerald"},blocked:{text:"BLOCKED · ship error",color:"amber"},no_review:{text:"NO REVIEW · reviewers unavailable",color:"amber"},failed:{text:"FAILED",color:"destructive"},cancelled:{text:"CANCELLED",color:"muted"}},y={primary:"bg-primary",emerald:"bg-emerald-400",amber:"bg-amber-400",destructive:"bg-destructive",muted:"bg-muted-foreground"},z=["approved","merged","blocked","failed","cancelled","no_review"];function A(a,b){return b&&b.startsWith("openrouter:")?"openrouter":w[a]??a}let B=(0,d.default)("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]),C=(0,d.default)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);var D=a.i(58858),E=a.i(8251);function F({chatId:a,status:d,isTerminal:e,template:g,onCancel:h}){let i=(0,E.useRouter)(),[j,k]=(0,f.useState)(!1),[l,n]=(0,f.useState)(!1),o=async()=>{k(!0);try{let b=await fetch(`/api/daemon/chats/${a}/rerun`,{method:"POST"});if(!b.ok){window.alert("Couldn't start a new run — Chorus didn't respond. Try restarting it from your terminal: chorus start"),k(!1);return}let c=await b.json();if(!c.ok){let a=c.error?.message??"Unknown error from Chorus.";window.alert(`Couldn't start a new run: ${a}`),k(!1);return}let d=c.data?.slug??c.data?.id;d?(i.push(`/runs/${d}`),i.refresh()):(window.alert("Chorus accepted the retry but didn't return a chat id. Refresh and try again."),k(!1))}catch{window.alert("Retry failed. Network error."),k(!1)}},p=async()=>{if(window.confirm("Delete this chat permanently? This removes all reviewer output and history. You cannot undo this.")){n(!0);try{(await fetch(`/api/daemon/chats/${a}`,{method:"DELETE"})).ok?(i.push("/runs"),i.refresh()):(window.alert("Couldn't delete this chat — Chorus didn't respond. Try restarting it from your terminal: chorus start"),n(!1))}catch{window.alert("Delete failed. Network error."),n(!1)}}};return(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:["cancelled"===d||"failed"===d?(0,b.jsxs)("button",{type:"button",disabled:j,onClick:o,className:"flex items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-3 py-1.5 text-xs font-medium text-primary transition hover:border-primary hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(C,{className:`h-3.5 w-3.5 ${j?"animate-spin":""}`}),j?"Restarting…":"Retry"]}):(0,b.jsxs)("button",{type:"button",disabled:e,onClick:async()=>{await fetch(`/api/daemon/chats/${a}/cancel`,{method:"POST"}),h()},className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(m.X,{className:"h-3.5 w-3.5"}),"Cancel"]}),e&&g&&(0,b.jsxs)(c.default,{href:`/new?template=${encodeURIComponent(g.id)}`,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-primary/40 hover:text-primary",children:[(0,b.jsx)(B,{className:"h-3.5 w-3.5"}),"Run again"]}),(0,b.jsxs)("button",{type:"button",disabled:l,onClick:p,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,b.jsx)(D.Trash2,{className:"h-3.5 w-3.5"}),l?"Deleting…":"Delete"]})]})}var G=a.i(84623),H=a.i(65296),I=a.i(97535),J=a.i(9106),K=a.i(61281),L=a.i(23596),M=a.i(85553),N=a.i(87102),O=a.i(68737);let P={review:I.Eye,review_only:I.Eye,plan:M.ClipboardList,spec:N.FileCode2,tests:O.TestTube2,implement:J.Code2,verify:K.FlaskConical,pr:H.GitPullRequest,divergence:l.Shuffle,recon:L.Search},Q={pending:"bg-muted-foreground/20 text-muted-foreground",active:"bg-primary/20 text-primary ring-2 ring-primary/40 ring-offset-2 ring-offset-background",done:"bg-emerald-500/20 text-emerald-300",blocked:"bg-amber-500/20 text-amber-300",skipped:"bg-muted-foreground/10 text-muted-foreground/50 line-through"},R={pending:"queued",active:"active",done:"done",blocked:"blocked",skipped:"skipped"};function S({phases:a,activeIndex:c,states:d,onSelect:e}){return(0,b.jsx)("div",{className:"flex items-center gap-0 overflow-x-auto pb-1",children:a.map((f,g)=>{let h=d[g]??"pending",i=P[f.kind],j=e&&("done"===h||"active"===h);return(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsxs)("button",{type:"button",disabled:!j,onClick:()=>j&&e?.(g),className:`group flex items-center gap-2 rounded-md border px-3 py-1.5 text-left transition ${g===c?"border-primary/40 bg-primary/5":"done"===h?"border-emerald-500/30 bg-emerald-500/5":"blocked"===h?"border-amber-500/40 bg-amber-500/5":"border-border bg-card/30"} ${j?"hover:border-foreground/30":"cursor-default"}`,children:[(0,b.jsx)("span",{className:`grid h-6 w-6 shrink-0 place-items-center rounded-md ${Q[h]}`,children:"done"===h?(0,b.jsx)(G.Check,{className:"h-3.5 w-3.5"}):"active"===h?(0,b.jsx)(q.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i,{className:"h-3.5 w-3.5"})}),(0,b.jsxs)("span",{className:"flex flex-col leading-tight",children:[(0,b.jsxs)("span",{className:"text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:[String(g+1).padStart(2,"0")," · ",R[h]]}),(0,b.jsx)("span",{className:`text-xs font-medium ${"skipped"===h?"text-muted-foreground/50":"text-foreground"}`,children:f.name})]})]}),g<a.length-1&&(0,b.jsx)("span",{className:`mx-1.5 h-px w-6 ${"done"===d[g]?"bg-emerald-500/40":"bg-border"}`})]},f.id)})})}function T({template:a,status:c,totalPhases:d,completedPhaseCount:e,rounds:f,enrichedRounds:g,prUrl:h,shipError:i}){return(0,b.jsx)("div",{className:"border-b border-border bg-card/20 px-4 py-3 sm:px-8",children:(0,b.jsxs)("div",{className:"mx-auto flex w-full flex-col gap-3",children:[h&&(0,b.jsxs)("div",{className:"rounded-md border border-emerald-500/40 bg-emerald-500/5 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-emerald-300",children:[(0,b.jsx)(p.CheckCircle2,{className:"h-4 w-4"}),"Pull request opened"]}),(0,b.jsx)("a",{href:h,target:"_blank",rel:"noreferrer",className:"rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-1.5 text-xs font-medium text-emerald-300 transition hover:bg-emerald-500/20",children:"View PR →"})]}),(0,b.jsx)("p",{className:"mt-1 break-all font-mono text-[11px] text-emerald-200/70",children:h})]}),i&&!h&&(0,b.jsxs)("div",{className:"rounded-md border border-amber-500/40 bg-amber-500/5 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-amber-300",children:[(0,b.jsx)(j.AlertTriangle,{className:"h-4 w-4"}),"Ship phase blocked"]}),(0,b.jsx)("p",{className:"mt-1 break-words font-mono text-[11px] text-amber-200/80",children:i}),(0,b.jsx)("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:"The reviewers approved the doer's output, but chorus couldn't open a PR. Resolve the issue above and re-run."})]}),a?.phases&&a.phases.length>0&&(0,b.jsx)("div",{className:"flex justify-center",children:(0,b.jsx)(S,{phases:a.phases,activeIndex:Math.min(e,d-1),states:a.phases.map((a,b)=>"approved"===c?"done":"no_review"===c?b<e?"done":"blocked":"failed"===c||"cancelled"===c?b<e?"done":"skipped":b<e?"done":b===e?"active":"pending")})}),(0,b.jsx)(U,{template:a,status:c,totalPhases:d,completedPhaseCount:e,rounds:f,enrichedRounds:g})]})})}function U({template:a,status:c,totalPhases:d,completedPhaseCount:e,rounds:f,enrichedRounds:g}){let h=a?.maxRounds??1,i="approved"===c||"merged"===c||"no_review"===c||"blocked"===c||"failed"===c||"cancelled"===c,j=d>1,k=!j&&h>1,l=g[g.length-1],m=l?.participants.filter(a=>"reviewer"===a.role)??[],n=m.length,o=m.filter(a=>a.hasAnswer).length;if(!j&&!k&&!(!j&&!k&&n>1))return null;let p=j?d:k?h:n,q=j?Math.min(e,d):k?Math.min(Math.max(f.length,1),h):o,r=j&&i?p:q,s=j?`${r} / ${p} phases`:k?`Round ${r} / ${p}`:`${r} / ${p} complete`;return(0,b.jsxs)("div",{className:"mx-auto flex w-full max-w-xs items-center gap-2",children:[(0,b.jsx)("div",{className:"flex h-1 flex-1 overflow-hidden rounded-full bg-muted",children:(0,b.jsx)("div",{className:`transition-[width] duration-700 ease-out ${"approved"===c?"bg-emerald-400":"bg-primary"}`,style:{width:`${r/p*100}%`}})}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground",children:s})]})}a.s(["LiveRunReal",0,function({chatId:a,initialStatus:d,initialRounds:h,templateId:j,template:k,work:l,projectName:m,initialPrUrl:o,initialShipError:p,initialVerdict:q,demoDataSource:r}){var s,t;let[w,B]=(0,f.useState)(d),[C,D]=(0,f.useState)(q),[E,G]=(0,f.useState)(h),[H,I]=(0,f.useState)(new Set),[J,K]=(0,f.useState)(o),[L,M]=(0,f.useState)(p),[N,O]=(0,f.useState)({}),[P,Q]=(0,f.useState)(-1),[R,S]=(0,f.useState)({}),[U,V]=(0,f.useState)([]),W=a=>`${a.round}:${a.phaseId}:${a.role}:${a.agent}:${a.fromLineage}:${a.fromModel}`,X=a=>{V(b=>{let c=new Set(b.map(W)),d=[...b];for(let b of a){let a=W(b);c.has(a)||(c.add(a),d.push(b))}return d})},Y=z.includes(w);(0,f.useEffect)(()=>{if(Y||r)return;let b=setInterval(async()=>{try{let b=await fetch(`/api/run-artifacts/${a}`);if(!b.ok)return;let c=await b.json();G(c.rounds),Array.isArray(c.swaps)&&c.swaps.length>0&&X(c.swaps)}catch{}},8e3);return()=>clearInterval(b)},[a,Y,r]),(0,f.useEffect)(()=>{if(Y)return;let b=r?r.createEventSource():new EventSource(`/api/daemon/chats/${a}/stream`);return b.onmessage=c=>{try{let d=JSON.parse(c.data),e=d.payload.role,f=d.payload.agent,g=d.payload.phaseId;if("phase_start"===d.type&&e&&f&&g&&(I(a=>{let b=new Set(a);return b.add(`${e}-${f}-${g}`),b}),r)){let a=r.fetchArtifacts();G(a.rounds),Array.isArray(a.swaps)&&X(a.swaps)}if("phase_progress"===d.type&&e&&f){let a=d.payload.output;if("string"==typeof a&&a.length>0){let b=`${e}-${f}`;O(c=>({...c,[b]:a}))}}if(("phase_done"===d.type||"phase_failed"===d.type)&&(I(new Set),"phase_done"===d.type)){let a=d.payload?.phaseIdx??-1;Number.isInteger(a)&&a>=0&&Q(b=>a>b?a:b)}if("cli_warning"===d.type&&f&&e){let a="doer"===e?`doer-${f}`:`reviewer-${f}`,b=d.payload.reason??void 0,c=b??d.payload.kind??"warning",g=d.payload.message??"(no detail)";if(S(b=>{let e={...b},f=e[a]??[];return f.some(a=>a.kind===c&&a.message===g)?b:(e[a]=[...f,{kind:c,message:g,ts:d.ts??Date.now()}],e)}),("lineage_fallback"===b||"model_fallback"===b)&&"string"==typeof d.payload.fromLineage&&"string"==typeof d.payload.toLineage){let a=d.payload.round??1,c=d.payload.phaseId??"",g=d.payload.fromModel??"(default)",h=d.payload.toModel??"(default)",i=d.payload.fallbackIdx??0,j={round:a,phaseId:c,role:e,agent:f,reason:b,fromLineage:d.payload.fromLineage,toLineage:d.payload.toLineage,fromModel:g,toModel:h,fallbackIdx:i,ts:d.ts??Date.now()};V(a=>{let b=W(j);return a.some(a=>W(a)===b)?a:[...a,j]})}}if("participant_done"===d.type)if(r){let a=r.fetchArtifacts();G(a.rounds),Array.isArray(a.swaps)&&X(a.swaps)}else fetch(`/api/run-artifacts/${a}`).then(a=>a.ok?a.json():null).then(a=>{a&&(G(a.rounds),Array.isArray(a.swaps)&&X(a.swaps))}).catch(()=>{});if("chat_done"===d.type){let c=d.payload.status;"merged"===c?B("merged"):"blocked"===c?B("blocked"):"no_review"===c?B("no_review"):"failed"===c?B("failed"):"cancelled"===c?B("cancelled"):B("approved");let e=d.payload.verdict;"string"==typeof e&&e.length>0&&D(e);let f=d.payload.prUrl;"string"==typeof f&&f.length>0&&K(f);let g=d.payload.shipError;if("string"==typeof g&&g.length>0&&M(g),b.close(),r){let a=r.fetchArtifacts();G(a.rounds),Array.isArray(a.swaps)&&X(a.swaps)}else fetch(`/api/run-artifacts/${a}`).then(a=>a.ok?a.json():null).then(a=>{a&&(G(a.rounds),Array.isArray(a.swaps)&&X(a.swaps))}).catch(()=>{})}}catch{}},()=>b.close()},[a,Y,r]),(0,f.useEffect)(()=>{if(r)return;let b=!1;return fetch(`/api/run-artifacts/${a}`).then(a=>a.ok?a.json():null).then(a=>{!b&&a&&Array.isArray(a.swaps)&&X(a.swaps)}).catch(()=>{}),()=>{b=!0}},[a,r]);let Z=(s=w,t=C,"approved"===s&&t&&"approved"!==t?"request_changes"===t?{text:"REVIEW · CHANGES REQUESTED",color:"amber"}:{text:`REVIEW \xb7 ${t.toUpperCase()}`,color:"amber"}:x[s]??{text:s.toUpperCase(),color:"muted"}),$=k?.phases?.length??1,_=(0,f.useMemo)(()=>"approved"===w||"merged"===w||"no_review"===w||"blocked"===w?$:"failed"===w||"cancelled"===w?0:Math.min(Math.max(0,P+1),$),[w,$,P]),aa=(0,f.useMemo)(()=>(0,g.isReviewOnlyTemplate)(k),[k]),ab=(0,f.useMemo)(()=>(function(a,b,c){if(!b?.phases?.length)return a;let d=(0,g.isReviewOnlyTemplate)(b),e=function(a,b){let c=a.phases[0],d=(a,b)=>b?.[0]??(0,n.uiLineageDefaultModel)(a),e=[];if(!b){let a=c.doer.models?.[0],b=A(c.doer.lineage,a);e.push({role:"doer",lineage:b,model:a??d(b,c.doer.models)})}for(let[a,b]of(c.reviewer?.candidatesWithModels??[]).entries()){let c=b.models?.[0],f=A(b.lineage,c);e.push({role:"reviewer",lineage:f,model:c??d(f,b.models),reviewerIdx:a})}return e}(b,d);return a.map(a=>{let b=[],d=new Set;for(let f of e){let e="doer"===f.role?`doer-${f.lineage}`:`reviewer-${f.lineage}-${f.reviewerIdx}`,g=a.participants.find(a=>"doer"===f.role?"doer"===a.role&&a.lineage===f.lineage:"reviewer"===a.role&&a.lineage===f.lineage&&parseInt(a.participant.match(/-(\d+)$/)?.[1]??"0",10)===f.reviewerIdx);g?(b.push({...g,model:f.model,...c[g.participant]?{warnings:c[g.participant]}:{}}),d.add(g.participant)):b.push({participant:e,role:f.role,agentName:v[f.lineage]??f.lineage,lineage:f.lineage,hasAnswer:!1,model:f.model,pending:!0,...c[e]?{warnings:c[e]}:{}})}for(let e of a.participants)d.has(e.participant)||b.push({...e,...c[e.participant]?{warnings:c[e.participant]}:{}});return{...a,participants:b}})})(E,k,R),[E,k,R]),ac=ab[ab.length-1],ad=ab.slice(0,-1);return(0,b.jsxs)("div",{className:"flex h-full flex-col",children:[(0,b.jsxs)("div",{className:"sticky top-0 z-20 border-b border-border bg-card/80 backdrop-blur-sm px-4 py-3 sm:px-8",children:[(0,b.jsxs)("div",{className:"mb-2 flex w-full items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,b.jsxs)(c.default,{href:"/runs",className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition hover:text-foreground",children:[(0,b.jsx)(e,{className:"h-3 w-3"}),(0,b.jsx)("span",{children:m??"Runs"})]}),(0,b.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,b.jsxs)("span",{title:Z.text,className:"inline-flex shrink-0 items-center gap-1.5 text-[11px] uppercase tracking-wider text-muted-foreground",children:[(0,b.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${y[Z.color]} ${Y?"":"animate-pulse-soft"}`}),w]}),(k||j)&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,b.jsxs)(c.default,{href:`/templates${k?`#${encodeURIComponent(k.id)}`:""}`,title:k?`Template: ${k.name}`:`Template (deleted): ${j}`,className:"inline-flex min-w-0 shrink items-center gap-1.5 text-[11px] text-muted-foreground transition hover:text-primary",children:[(0,b.jsx)("span",{className:"font-mono uppercase tracking-wider",children:"tpl"}),(0,b.jsx)("span",{className:"truncate font-medium text-foreground",children:k?.name??j})]})]})]}),(0,b.jsx)(F,{chatId:a,status:w,isTerminal:Y,template:k,onCancel:()=>B("cancelled")})]}),(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)(i,{work:l})})]}),(0,b.jsx)(T,{template:k,status:w,totalPhases:$,completedPhaseCount:_,rounds:E,enrichedRounds:ab,prUrl:J,shipError:L}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-6 sm:px-8",children:(0,b.jsxs)("div",{className:"mx-auto w-full space-y-8",children:[0===E.length&&(0,b.jsx)("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:"Waiting for first phase to start…"}),ac&&(0,b.jsx)(u,{round:ac,isLatest:!0,activeFor:a=>{let b=`${a.participant}-`;for(let a of H)if(a.startsWith(b))return!0;return!1},liveTails:N,chatTerminal:Y,reviewOnly:aa,chatId:a,swaps:U}),!aa&&ad.length>0&&(0,b.jsxs)("details",{className:"rounded-lg border border-border bg-card",children:[(0,b.jsxs)("summary",{className:"cursor-pointer px-4 py-3 text-xs uppercase tracking-wider text-muted-foreground hover:text-foreground",children:["Earlier rounds (",ad.length,")"]}),(0,b.jsx)("div",{className:"space-y-6 border-t border-border p-4",children:ad.slice().reverse().map(a=>(0,b.jsx)(u,{round:a,activeFor:()=>!1,liveTails:{},chatTerminal:Y,swaps:U},a.round))})]})]})})]})}],3665)}];
2
-
3
- //# sourceMappingURL=src_components_live-run-real_index_tsx_0zzsdt9._.js.map