vibe64 0.1.39 → 0.1.41

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 (262) hide show
  1. package/bin/run.js +1955 -1855
  2. package/bin/server.js +136 -112
  3. package/bin/upgrade-state.js +5514 -5343
  4. package/dist/assets/GithubBrowserTabs-YvIe2BdE.js +1 -0
  5. package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
  6. package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
  7. package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
  8. package/dist/assets/VAlert-gwuhYlYb.js +1 -0
  9. package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
  10. package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
  11. package/dist/assets/VBtn-BhVEwXLX.js +1 -0
  12. package/dist/assets/VCard-C3Hx769y.js +1 -0
  13. package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
  14. package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
  15. package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
  16. package/dist/assets/VChip-VVdtjfq-.js +1 -0
  17. package/dist/assets/VDialog-CQDhjRiV.js +1 -0
  18. package/dist/assets/VDivider-Dq25WsKu.js +1 -0
  19. package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
  20. package/dist/assets/VMenu-CDcBLYWR.js +1 -0
  21. package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
  22. package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
  23. package/dist/assets/VRow-BskP28jR.js +1 -0
  24. package/dist/assets/VSelect-D3oLvCcB.js +2 -0
  25. package/dist/assets/VSheet-DxYEFfnM.js +1 -0
  26. package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
  27. package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
  28. package/dist/assets/VSwitch-BxGuGypi.js +1 -0
  29. package/dist/assets/VTextField-C0b_0cSa.js +1 -0
  30. package/dist/assets/VTextField-F6unyhrS.css +1 -0
  31. package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
  32. package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
  33. package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
  34. package/dist/assets/Vibe64AuthSettingsButton-DLdfT68V.js +5 -0
  35. package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
  36. package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
  37. package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
  38. package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
  39. package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
  40. package/dist/assets/Vibe64DashboardShell-DMPz6fIx.js +1 -0
  41. package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +3 -3
  42. package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
  43. package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
  44. package/dist/assets/Vibe64OutputControls-DMoqL0VD.js +8 -0
  45. package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +2 -2
  46. package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
  47. package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-ChJWUOqm.js} +4 -4
  48. package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
  49. package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
  50. package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
  51. package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
  52. package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-Bw0KfJeR.js} +1 -1
  53. package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
  54. package/dist/assets/_slug_-CAmuBm-M.css +1 -0
  55. package/dist/assets/_slug_-q9prK_gX.js +25 -0
  56. package/dist/assets/{access-WlhPvPgy.js → access-C05Nkq6r.js} +1 -1
  57. package/dist/assets/app-D1CGY9Xm.js +1 -0
  58. package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
  59. package/dist/assets/{changes-CHJjrZAc.js → changes-D17XpgGz.js} +1 -1
  60. package/dist/assets/client-BxGiylrJ.js +2 -0
  61. package/dist/assets/client-C8jwAMY9.css +1 -0
  62. package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
  63. package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
  64. package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
  65. package/dist/assets/{dashboard-CuutW8iv.js → dashboard-BXXgeQ0Q.js} +1 -1
  66. package/dist/assets/definitions-SNvFDEFS.js +1 -0
  67. package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
  68. package/dist/assets/env-B5V1EC4M.css +1 -0
  69. package/dist/assets/env-sXAQqKWk.js +1 -0
  70. package/dist/assets/health-92hh8xXh.css +1 -0
  71. package/dist/assets/health-Cr34pf2p.js +1 -0
  72. package/dist/assets/{history-1_NU8azF.js → history-N1iRZaab.js} +1 -1
  73. package/dist/assets/incoming-Bdqo8z25.css +1 -0
  74. package/dist/assets/incoming-CNwZa_yD.js +2 -0
  75. package/dist/assets/{index-irlMYzLh.css → index-B17d4wpZ.css} +1 -1
  76. package/dist/assets/index-Mxalhei8.js +138 -0
  77. package/dist/assets/{integrations-BMzWQQpa.js → integrations-BmwFvHgZ.js} +10 -10
  78. package/dist/assets/integrations-Co8WvCiD.css +1 -0
  79. package/dist/assets/issues-BbiG7dCV.js +1 -0
  80. package/dist/assets/layout-B2Ap07aa.js +1 -0
  81. package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
  82. package/dist/assets/{learning-Bdi3XRS7.js → learning-CUCuuoHM.js} +1 -1
  83. package/dist/assets/mdi-Bt90Ns76.js +1 -0
  84. package/dist/assets/placement-CQy46H3H.js +1 -0
  85. package/dist/assets/publish-4r_4K5IY.js +3 -0
  86. package/dist/assets/publish-BFTsAMCF.css +1 -0
  87. package/dist/assets/pull-requests-BjwokcU0.css +1 -0
  88. package/dist/assets/pull-requests-DY9jg3cE.js +1 -0
  89. package/dist/assets/{repository-BL_2bgzC.js → repository-DhXdoMP6.js} +1 -1
  90. package/dist/assets/ripple-EFNA8EBu.js +11 -0
  91. package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
  92. package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
  93. package/dist/assets/{settings-1rpuL7eR.js → settings-Cj4u-76p.js} +1 -1
  94. package/dist/assets/settings-D8x4KUqV.css +1 -0
  95. package/dist/assets/shared-DZETtWRH.js +2 -0
  96. package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
  97. package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
  98. package/dist/assets/useArchivedVibe64Sessions-BXNg8oES.js +1 -0
  99. package/dist/assets/useCommand-nWFczmJy.js +1 -0
  100. package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
  101. package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
  102. package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
  103. package/dist/assets/useVibe64ConversationLog-C1xjhFtS.js +1 -0
  104. package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
  105. package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
  106. package/dist/assets/useVibe64SessionData-CnDOFFHb.js +1 -0
  107. package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
  108. package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
  109. package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
  110. package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
  111. package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
  112. package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
  113. package/dist/assets/vibe64SessionFocus-DlN8NwcE.js +1 -0
  114. package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
  115. package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
  116. package/dist/index.html +56 -46
  117. package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
  118. package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
  119. package/docs/colleague-usage/ai-model-setups.md +159 -0
  120. package/docs/colleague-usage/ai-onboarding.md +97 -22
  121. package/docs/colleague-usage/ai-personal-use.md +41 -0
  122. package/docs/colleague-usage/auto-workflow.md +8 -3
  123. package/docs/colleague-usage/codex-context-recovery.md +2 -1
  124. package/docs/colleague-usage/coding-agent-goals.md +7 -4
  125. package/docs/colleague-usage/coding-agents.md +8 -5
  126. package/docs/colleague-usage/colleague-watches.md +15 -4
  127. package/docs/colleague-usage/colleague.md +21 -5
  128. package/docs/colleague-usage/connected-contributions.md +13 -13
  129. package/docs/colleague-usage/connected-projects.md +2 -2
  130. package/docs/colleague-usage/conversation-context.md +1 -1
  131. package/docs/colleague-usage/dashboard-navigation.md +5 -3
  132. package/docs/colleague-usage/development-env.md +21 -4
  133. package/docs/colleague-usage/file-interfaces.md +1 -1
  134. package/docs/colleague-usage/github-work.md +8 -8
  135. package/docs/colleague-usage/health-checks.md +52 -18
  136. package/docs/colleague-usage/incoming-changes.md +3 -3
  137. package/docs/colleague-usage/integrations.md +5 -3
  138. package/docs/colleague-usage/learning-course-catalogue.md +3 -3
  139. package/docs/colleague-usage/learning-environment.md +78 -56
  140. package/docs/colleague-usage/learning-mode-ui.md +31 -19
  141. package/docs/colleague-usage/learning-practice-projects.md +15 -4
  142. package/docs/colleague-usage/learning-teacher-guide.md +10 -4
  143. package/docs/colleague-usage/learning-with-colleague.md +12 -8
  144. package/docs/colleague-usage/lesson-authoring.md +13 -13
  145. package/docs/colleague-usage/lesson-step-bar.md +47 -33
  146. package/docs/colleague-usage/main-chat-approvals.md +150 -0
  147. package/docs/colleague-usage/preview-browser-checks.md +5 -1
  148. package/docs/colleague-usage/preview-starting-application.md +10 -1
  149. package/docs/colleague-usage/project-language-tools.md +16 -2
  150. package/docs/colleague-usage/project-settings.md +1 -1
  151. package/docs/colleague-usage/project-setup.md +17 -7
  152. package/docs/colleague-usage/publishing.md +187 -0
  153. package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
  154. package/docs/colleague-usage/sessions.md +18 -10
  155. package/docs/colleague-usage/set-up-linux.md +254 -0
  156. package/docs/colleague-usage/set-up-macos.md +199 -0
  157. package/docs/colleague-usage/set-up-windows.md +76 -0
  158. package/docs/colleague-usage/starter-apps.md +23 -6
  159. package/docs/colleague-usage/teaching-content.md +2 -2
  160. package/docs/colleague-usage/team-ai-access.md +108 -0
  161. package/docs/colleague-usage/temporary-chats.md +9 -7
  162. package/docs/colleague-usage/workspace-preparation.md +50 -1
  163. package/docs/templates/learn-topic/README.md +3 -3
  164. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
  165. package/docs/training-content.md +37 -15
  166. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  167. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  168. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  169. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  170. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  171. package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
  172. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  173. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  174. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  175. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  176. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  177. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  178. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  179. package/node_modules/@local/vibe64-accounts/package.json +2 -1
  180. package/node_modules/@local/vibe64-core/package.json +4 -1
  181. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
  182. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +83 -82
  183. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  184. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
  185. package/node_modules/@local/vibe64-genesis/src/server/index.js +536 -449
  186. package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
  187. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -145
  188. package/node_modules/@local/vibe64-packaging/package.json +26 -0
  189. package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
  190. package/node_modules/@local/vibe64-project/package.json +3 -1
  191. package/node_modules/@local/vibe64-publishing/package.json +12 -0
  192. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
  193. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
  194. package/node_modules/@local/vibe64-terminals/package.json +2 -1
  195. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1341 -1300
  196. package/node_modules/@local/vibe64-training/package.json +2 -1
  197. package/package.json +19 -15
  198. package/server.bundle.mjs +43109 -41089
  199. package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
  200. package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
  201. package/dist/assets/VAlert-P256xaE0.js +0 -1
  202. package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
  203. package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
  204. package/dist/assets/VBtn-B2MBK2DL.js +0 -1
  205. package/dist/assets/VCard-mXy0k4aS.js +0 -1
  206. package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
  207. package/dist/assets/VChip-CcI-Oo2J.js +0 -1
  208. package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
  209. package/dist/assets/VDivider-BMEqUoAB.js +0 -1
  210. package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
  211. package/dist/assets/VMenu-C_x18lwb.js +0 -1
  212. package/dist/assets/VOverlay-CeMZurIN.js +0 -1
  213. package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
  214. package/dist/assets/VRow-Cpw7OHQV.js +0 -1
  215. package/dist/assets/VSelect-DL3HaA5m.js +0 -2
  216. package/dist/assets/VSheet-DZWsu0kL.js +0 -1
  217. package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
  218. package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
  219. package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
  220. package/dist/assets/VTextField-BR2eZeFT.js +0 -1
  221. package/dist/assets/VTextField-BiatYyd3.css +0 -1
  222. package/dist/assets/VTextarea-DbqamXJd.js +0 -1
  223. package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
  224. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
  225. package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
  226. package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
  227. package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
  228. package/dist/assets/_slug_-BclonbST.js +0 -24
  229. package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
  230. package/dist/assets/app-BNP_n_Tt.js +0 -1
  231. package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
  232. package/dist/assets/client-BWV84wi2.js +0 -2
  233. package/dist/assets/client-DGrP-2AJ.css +0 -1
  234. package/dist/assets/definitions-BrMvu6yV.js +0 -1
  235. package/dist/assets/env-BzRtyO0w.css +0 -1
  236. package/dist/assets/env-D3KQGvRe.js +0 -1
  237. package/dist/assets/health-BJvooRnJ.css +0 -1
  238. package/dist/assets/health-BhoO1d4h.js +0 -1
  239. package/dist/assets/incoming-DWDrmxyH.css +0 -1
  240. package/dist/assets/incoming-DzADFGqp.js +0 -2
  241. package/dist/assets/index-dNxr4Lg9.js +0 -138
  242. package/dist/assets/integrations-Cq1x-Di9.css +0 -1
  243. package/dist/assets/issues-Bywux4s7.js +0 -1
  244. package/dist/assets/mdi-CG9pWOSj.js +0 -1
  245. package/dist/assets/placement-BF-zIEhA.js +0 -1
  246. package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
  247. package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
  248. package/dist/assets/ripple-BVltMmyV.js +0 -11
  249. package/dist/assets/settings-BopLnpB0.css +0 -1
  250. package/dist/assets/shared-DpMvYJO3.js +0 -2
  251. package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
  252. package/dist/assets/studioUrls-DmMMIScP.js +0 -1
  253. package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
  254. package/dist/assets/useCommand-Bqxb-naz.js +0 -1
  255. package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
  256. package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
  257. package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
  258. package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
  259. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
  260. package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
  261. package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
  262. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
@@ -0,0 +1,2 @@
1
+ import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.js";import{$ as mergeModels,$n as normalizeProps,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,Ht as watch,J as inject,On as unref,Pt as useId,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,gn as reactive,gt as provide,it as onBeforeUnmount,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,w as createSlots,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{Mt as makeComponentProps,Nt as propsFactory,U as VDefaultsProvider,W as VExpandTransition,_t as useRender,ar as vShow,d as VProgressLinear,h as VIcon,ot as useDisplay,sr as withModifiers,tr as Transition,wt as genericComponent}from"./ripple-EFNA8EBu.js";import{J as useQueryClient,T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as vibe64ProjectQueryScope,u as getHttpWebClient}from"./vibe64ProjectScope.local-B06ABkhI.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{l as forwardRefs}from"./VOverlay-Cp4rFk6g.js";import{n as VList,s as VListItem}from"./VMenu-CDcBLYWR.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{d as createForm,f as makeFormProps,t as VTextField}from"./VTextField-C0b_0cSa.js";import{f as VIBE64_LEARNING_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{i as studioApiPath,n as resolveWebSocketUrl}from"./studioUrls-DpSS-0z1.js";import{An as mdiMapMarkerPath,C as mdiArrowRight,Dt as mdiEyeOutline,En as mdiLockOutline,Et as mdiEyeOffOutline,Fn as mdiMinusCircleOutline,L as mdiCheck,Lr as mdiTune,N as mdiBugCheckOutline,Or as mdiStopCircleOutline,R as mdiCheckCircle,Rn as mdiOpenInNew,Rr as mdiTuneVariant,S as mdiArrowLeft,V as mdiChevronDown,W as mdiChevronUp,X as mdiClose,Yn as mdiPlus,_r as mdiSitemapOutline,bn as mdiLaptop,f as mdiAlertCircleOutline,gr as mdiShieldLockOutline,gt as mdiCrown,ht as mdiCreditCardOutline,i as mdiAccountGroupOutline,kn as mdiMagnify,n as mdiAccountCircleOutline,nr as mdiRefresh,o as mdiAccountLock,or as mdiRobotHappyOutline,pr as mdiShieldCheckOutline,rn as mdiInformationOutline,sr as mdiRobotOutline,ut as mdiContentCopy,x as mdiArrowDown,z as mdiCheckCircleOutline,zt as mdiFileTreeOutline}from"./mdi-Bt90Ns76.js";import{t as VAvatar}from"./VAvatar-DvRBcmqv.js";import{i as VBtnToggle,r as VProgressCircular,t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VAutocomplete}from"./VAutocomplete-D7Vk5wq_.js";import{t as VCheckbox}from"./VCheckbox-DyCGSN0H.js";import{t as VDivider}from"./VDivider-Dq25WsKu.js";import{t as VSheet}from"./VSheet-DxYEFfnM.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-C3Hx769y.js";import{n as VCol,t as VRow}from"./VRow-BskP28jR.js";import{t as VSpacer}from"./VSpacer-CgWOWvBh.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-C1y-myl5.js";import{n as VRadio,t as VRadioGroup}from"./VRadioGroup-CAjNZwF7.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{n as VTooltip,t as Vibe64CopyCommand_default}from"./Vibe64CopyCommand-CYiZcy0d.js";import{t as VSwitch}from"./VSwitch-BxGuGypi.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{a as Vibe64Terminal_default,n as createWebSocketTerminalDriver,t as useVibe64Terminal}from"./useVibe64Terminal-I7Sf6xMW.js";import{_ as defineVibe64AssistantSelection,c as vibe64AssistantSelectionLabel,g as curatedCodexProvider,h as CURATED_CODEX_PROVIDERS,l as VIBE64_AGENT_PROVIDERS}from"./shared-DZETtWRH.js";import{_ as routingRunsInChoices,a as ASSISTANT_ROLE_PURPOSES,g as assistantSetupRoleValue,i as ASSISTANT_ROLE_DEFAULT_FOLLOWS,n as ASSISTANT_FOLLOWING_ROLES,o as ASSISTANT_ROUTING_ROLE_DEFINITIONS,s as ASSISTANT_SETUP_ROLES,u as assistantModeLabel}from"./assistantRouting-DeE8jvtE.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as isVibe64BrowserFlagEnabled}from"./shared-BEwrtWSp.js";import{r as vibe64ResourceResponseError}from"./vibe64ApiResponses-DNLY1Kel.js";import{f as STUDIO_TOOLS_ENDPOINT}from"./studioGateApi-BXHVBVEc.js";var makeVFormProps=propsFactory({...makeComponentProps(),...makeFormProps()},`VForm`);var VForm=genericComponent()({name:`VForm`,props:makeVFormProps(),emits:{"update:modelValue":val=>true,submit:e=>true},setup(props,{slots,emit}){const form=createForm(props);const formRef=ref();function onReset(e){e.preventDefault();form.reset()}function onSubmit(_e){const e=_e;const ready=form.validate();e.then=ready.then.bind(ready);e.catch=ready.catch.bind(ready);e.finally=ready.finally.bind(ready);emit(`submit`,e);if(!e.defaultPrevented)ready.then(({valid})=>{if(valid)formRef.value?.submit()});e.preventDefault()}useRender(()=>createBaseVNode(`form`,{"ref":formRef,"class":normalizeClass([`v-form`,props.class]),"style":normalizeStyle(props.style),"novalidate":true,"onReset":onReset,"onSubmit":onSubmit},[slots.default?.({get errors(){return form.errors.value},get isDisabled(){return form.isDisabled.value},get isReadonly(){return form.isReadonly.value},get isValidating(){return form.isValidating.value},get isValid(){return form.isValid.value},get items(){return form.items.value},validate:form.validate,reset:form.reset,resetValidation:form.resetValidation})]));return forwardRefs(form,formRef)}});var VIBE64_ACCOUNTS_AUTH_API_SUFFIX=`/vibe64/accounts/auth`;var VIBE64_ACCOUNTS_GIT_IDENTITY_API_SUFFIX=`/vibe64/accounts/git-identity`;var VIBE64_ACCOUNTS_PERSONAL_AI_PROFILE_API_SUFFIX=`/vibe64/accounts/personal-ai-profile`;var VIBE64_ACCOUNTS_CHANGED_EVENT=`vibe64.accounts.changed`;var VIBE64_ACCOUNT_AUTH_SESSION_CHANGED_EVENT=`vibe64.accounts.auth-session.changed`;var VIBE64_CONNECTIONS_CHANGED_EVENT=`vibe64.connections.changed`;var ACCOUNTS_ENDPOINT=studioApiPath(`vibe64/accounts`);var AI_CONNECTIONS_ENDPOINT=`${ACCOUNTS_ENDPOINT}/ai-connections`;var ACCOUNTS_AUTH_ENDPOINT=`${ACCOUNTS_ENDPOINT}/auth`;var ACCOUNTS_GIT_IDENTITY_ENDPOINT=`${ACCOUNTS_ENDPOINT}/git-identity`;var ACCOUNTS_LOGOUT_ENDPOINT=`${ACCOUNTS_ENDPOINT}/logout`;function accountsQueryKey(surfaceId,ownershipFilter,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`accounts`]}function accountAuthTerminalWebSocketUrl(sessionId=``){return resolveWebSocketUrl(`${ACCOUNTS_AUTH_ENDPOINT}/${encodeURIComponent(String(sessionId||``))}/ws`)}function useCodexProviderConnections({enabled=true}={}){const resource=useEndpointResource({enabled:computed(()=>Boolean(unref(enabled))),path:`${ACCOUNTS_ENDPOINT}/codex-providers`,queryKey:[`vibe64`,`codex-providers`],realtime:{event:VIBE64_ACCOUNTS_CHANGED_EVENT},queryOptions:{refetchOnMount:`always`,retry:false},fallbackLoadError:`Provider connections could not be loaded.`,requestRecoveryLabel:`AI providers`});const busy=ref(false);const command=useCommand({access:`never`,apiSuffix:`/vibe64/accounts/codex-providers`,buildCommandOptions:(_model,{context})=>({method:context.remove?`POST`:`PATCH`,path:`${ACCOUNTS_ENDPOINT}/codex-providers${context.remove?`/remove`:``}`}),buildRawPayload:(_model,{context})=>({modelProviderId:context.modelProviderId,engineId:context.engineId,...!context.remove?{apiKey:context.apiKey,useSavedKey:context.useSavedKey}:{}}),onRunSuccess(response){if(response?.ok!==true)throw new Error(response?.error||`The connection could not be updated.`)},fallbackRunError:`The AI connection could not be updated.`,messages:{success:`AI connection updated.`,error:`The AI connection could not be updated.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.codex-providers`,surfaceId:`app`,writeMethod:`PATCH`});async function change(input){if(busy.value)return null;busy.value=true;try{const result=await command.run(input);if(result?.ok===true)await resource.reload();return result}finally{busy.value=false}}return{resource,busy,change,connections:computed(()=>resource.data.value?.providers||[]),loadError:computed(()=>resource.loadError.value||(resource.data.value?.ok===false?resource.data.value.error:``))}}var _hoisted_1$17={key:0,class:`ma-0`};var _hoisted_2$17={class:`cli-install-notice__command`};var _hoisted_3$14=[`href`];var _hoisted_4$13={key:2,class:`cli-install-notice__details`};var _hoisted_5$12={class:`d-flex flex-wrap ga-2 mt-3`};function cliProblem(account={}){return account?.connected!==true&&[`not_installed`,`unavailable`].includes(account?.status)}var _sfc_main$21={__name:`CliInstallNotice`,props:{account:{type:Object,default:()=>({})},checking:Boolean},emits:[`check`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const problem=computed(()=>cliProblem(props.account));const name=computed(()=>props.account?.label||`This AI tool`);const copied=ref(false);watch(()=>props.account?.install?.command,()=>{copied.value=false});async function copy(){try{await navigator.clipboard.writeText(props.account.install.command);copied.value=true}catch{copied.value=false}}return(_ctx,_cache)=>{return problem.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,title:__props.account.title,class:`cli-install-notice`},{default:withCtx(()=>[__props.account.detail?(openBlock(),createElementBlock(`p`,_hoisted_1$17,toDisplayString(__props.account.detail),1)):createCommentVNode(``,true),__props.account.install?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[1]||(_cache[1]=createBaseVNode(`p`,{class:`mt-3 mb-2`},[createTextVNode(` Open a terminal on this computer, paste this command and press Enter. When it finishes, choose `),createBaseVNode(`strong`,null,`Check again`),createTextVNode(`. `)],-1)),createBaseVNode(`div`,_hoisted_2$17,[createBaseVNode(`code`,null,toDisplayString(__props.account.install.command),1),createVNode(VBtn,{"aria-label":`Copy the ${name.value} install command`,icon:copied.value?unref(mdiCheck):unref(mdiContentCopy),size:`40`,variant:`text`,onClick:copy},null,8,[`aria-label`,`icon`])]),createBaseVNode(`a`,{class:`cli-install-notice__guide`,href:__props.account.install.guideUrl,rel:`noopener`,target:`_blank`},` Other ways to install `+toDisplayString(name.value),9,_hoisted_3$14)],64)):createCommentVNode(``,true),__props.account.observed?(openBlock(),createElementBlock(`details`,_hoisted_4$13,[_cache[2]||(_cache[2]=createBaseVNode(`summary`,null,`Details`,-1)),createBaseVNode(`pre`,null,toDisplayString(__props.account.observed),1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5$12,[createVNode(VBtn,{variant:`flat`,color:`warning`,loading:__props.checking,"prepend-icon":unref(mdiRefresh),onClick:_cache[0]||(_cache[0]=$event=>emit(`check`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`,`prepend-icon`]),renderSlot(_ctx.$slots,`default`,{},void 0,true)])]),_:3},8,[`title`])):createCommentVNode(``,true)}}};var CliInstallNotice_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-17cadc5d`]]);function useModelRouting({enabled=true}={}){const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const queryKey=computed(()=>[`vibe64`,...vibe64ProjectQueryScope(unref(viewer)?.projectSlug),`model-routing`,unref(viewer)?.actorKey||`signed-out`]);const resource=useEndpointResource({enabled:computed(()=>Boolean(unref(enabled)&&unref(viewer)?.actorKey)),path:`${ACCOUNTS_ENDPOINT}/model-routing`,queryKey,realtime:{events:[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT]},queryOptions:{refetchOnMount:true,staleTime:3e4,retry:false},fallbackLoadError:`Models could not be loaded.`,requestRecoveryLabel:`Models`});const engines=computed(()=>resource.data.value?.engines||[]);return{resource,scopeKey:computed(()=>JSON.stringify(queryKey.value)),engines,connectedEngines:computed(()=>engines.value.filter(engine=>engine.connected)),setups:computed(()=>resource.data.value?.setups||null),viewerDecisions:computed(()=>resource.data.value?.viewer||{}),team:computed(()=>resource.data.value?.team||{available:false,ownerName:``,memberCount:0}),loadError:computed(()=>resource.loadError.value||(resource.data.value?.ok===false?resource.data.value.error:``))}}var _hoisted_1$16={key:1,class:`ai-personal-use__note`};var _hoisted_2$16={class:`mb-3`};var PERSONAL_PLANS=Object.freeze({anthropic:Object.freeze({provider:`Anthropic`,plan:`Claude subscription (Pro or Max)`}),openai:Object.freeze({provider:`OpenAI`,plan:`ChatGPT subscription`}),"zai-coding-plan":Object.freeze({provider:`Z.AI`,plan:`GLM Coding Plan`})});function personalUsePlan(providerId=``){return PERSONAL_PLANS[providerId]||{provider:`the provider`,plan:`plan`}}var _sfc_main$20={__name:`AiPersonalUse`,props:{providerId:{type:String,default:``},variant:{type:String,default:`chip`}},setup(__props){const props=__props;const open=ref(false);const plan=computed(()=>personalUsePlan(props.providerId));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`span`,{class:normalizeClass([`ai-personal-use`,`ai-personal-use--${__props.variant}`])},[__props.variant===`chip`||__props.variant===`badge`?(openBlock(),createBlock(VChip,{key:0,color:`warning`,variant:`flat`,size:`small`,"prepend-icon":unref(mdiAccountLock),class:`ai-personal-use__chip`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Personal use `,-1)])]),_:1},8,[`prepend-icon`])):__props.variant===`note`?(openBlock(),createElementBlock(`span`,_hoisted_1$16,[createVNode(VIcon,{icon:unref(mdiAccountLock),size:`18`,color:`warning`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,null,[_cache[4]||(_cache[4]=createBaseVNode(`strong`,null,`Personal use:`,-1)),createTextVNode(` only the workspace owner can use this `+toDisplayString(plan.value.plan)+`.`,1)])])):createCommentVNode(``,true),__props.variant!==`badge`?(openBlock(),createElementBlock(`button`,{key:2,type:`button`,class:`ai-personal-use__link`,onClick:_cache[0]||(_cache[0]=withModifiers($event=>open.value=true,[`stop`]))},`What does this mean?`)):createCommentVNode(``,true),__props.variant!==`badge`?(openBlock(),createBlock(VDialog,{key:3,modelValue:open.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>open.value=$event),"max-width":`30rem`,"aria-labelledby":`ai-personal-use-title`},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{id:`ai-personal-use-title`,class:`d-flex align-center ga-2 text-wrap`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiAccountLock),color:`warning`,"aria-hidden":`true`},null,8,[`icon`]),_cache[5]||(_cache[5]=createTextVNode(`Personal use: only the owner can use it `,-1))]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_2$16,`This `+toDisplayString(plan.value.plan)+` is a personal plan. Under `+toDisplayString(plan.value.provider)+`'s terms only the person who subscribed may use it, so Vibe64 lets only the workspace owner work with it.`,1),_cache[6]||(_cache[6]=createBaseVNode(`p`,{class:`mb-3`},`Other people in this workspace cannot use it, even in the owner's projects. For them, the owner can connect a Workspace-use account, such as an API key billed by use.`,-1)),_cache[7]||(_cache[7]=createBaseVNode(`p`,null,[createTextVNode(`In Models, the `),createBaseVNode(`strong`,null,`Team members`),createTextVNode(` setup chooses the Workspace-use models they use.`)],-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`flat`,color:`primary`,onClick:_cache[1]||(_cache[1]=$event=>open.value=false)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Got it`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true)],2)}}};var AiPersonalUse_default=_plugin_vue_export_helper_default(_sfc_main$20,[[`__scopeId`,`data-v-b643988c`]]);var AI_ONBOARDING_PROVIDERS=Object.freeze([Object.freeze({id:`claude`,rank:1,crown:true,mark:`C`,shape:`squircle`,tone:`primary`,name:`Claude`,tagline:`The best experience in Vibe64`,bullets:[[`intelligence`,5,`Very high intelligence`],[`quota`,5,`Very generous quota`],[`speed`,5,`Very high speed`]],why:`It plans whole features, writes clean code and fixes its own mistakes.`,plan:{name:`Claude Pro`,price:`$20/month`,budget:``,more:`Coding a lot? Max · $100/month`},note:``,upgrade:`Upgrade your experience: Claude is the biggest step up for Vibe64.`,signUp:{label:`Open claude.ai`,url:`https://claude.ai/login?plan=pro`,step:`Choose Claude Pro (recommended) or Max. Come back here when you're subscribed.`},haveTitle:`Already subscribed`,have:`Already subscribed? Connect`,connectStep:{title:`Sign in with Claude`,body:`Use the Claude account that has your plan, then paste the code it shows you.`},connect:{engineId:`claude`,modelProviderId:`anthropic`,access:`personal`},matches:{native:[`claude`],curated:[],opencode:[`anthropic`]}}),Object.freeze({id:`codex`,rank:2,mark:`O`,shape:`circle`,tone:`secondary`,name:`Codex`,tagline:`OpenAI · capable, with limits`,bullets:[[`intelligence`,4,`Very good intelligence`],[`quota`,2,`Quota issues`],[`speed`,2,`Speed issues`]],plan:{name:`ChatGPT Pro`,price:`$100/month`,budget:``,more:`Coding a lot? $200/month`},note:`Hits limits on long sessions.`,signUp:{label:`Open chatgpt.com`,url:`https://chatgpt.com/explore/pro`,step:`Choose ChatGPT Pro. Come back here when you're subscribed.`},haveTitle:`Already subscribed`,have:`Already subscribed? Connect`,connectStep:{title:`Sign in with ChatGPT`,body:`In ChatGPT's Security settings, turn on "Enable device code authorization for Codex", then sign in and enter the short code.`},connect:{engineId:`codex`,modelProviderId:`openai`,access:`personal`},matches:{native:[`codex`],curated:[],opencode:[`openai`]}}),Object.freeze({id:`deepseek`,rank:3,mark:`D`,shape:`hexagon`,tone:`tertiary`,name:`DeepSeek`,tagline:`Cheap, pay as you go`,bullets:[[`intelligence`,3,`Good, weaker on long coding tasks`],[`quota`,3,`Pay per use: cost grows with work`],[`speed`,3,`Speed varies by time of day`]],plan:{name:`Prepaid API credit`,price:`Pay as you go`,budget:`Budget about $20 to start.`,more:``},note:`Works, but you'll notice the gap. For $20 a month, Claude Pro gives a far better experience.`,signUp:{label:`Open platform.deepseek.com`,url:`https://platform.deepseek.com/api_keys`,step:`Top up your DeepSeek balance. Come back here when it shows credit.`},haveTitle:`Already have credit`,have:`Already have a key? Connect`,connectStep:{title:`Paste your DeepSeek API key`,body:`Create an API key on DeepSeek, then paste it here.`},connect:{engineId:`claude`,modelProviderId:`deepseek`,access:`workspace`},matches:{native:[],curated:[`deepseek`],opencode:[`deepseek`]}}),Object.freeze({id:`glm`,rank:4,mark:`G`,shape:`diamond`,tone:`neutral`,name:`GLM`,tagline:`Z.AI · budget subscription`,bullets:[[`intelligence`,3,`Decent intelligence`],[`quota`,3,`Good quota`],[`speed`,2,`Slower at busy times`]],plan:{name:`GLM Coding Plan`,price:`from $18/month`,budget:`Budget about $30/month for daily coding.`,more:``},note:`Works, but you'll notice the gap. There's no point in getting it when Claude Pro is $20/month.`,signUp:{label:`Open z.ai`,url:`https://z.ai/subscribe`,step:`Subscribe to the GLM Coding Plan. Come back here when you're subscribed.`},haveTitle:`Already subscribed`,have:`Already have a key? Connect`,connectStep:{title:`Paste your Z.AI Coding Plan key`,body:`Create a Coding Plan API key on Z.AI (Personal Coding Plan > Plan Overview), then paste it here.`},connect:{engineId:`codex`,modelProviderId:`zai-coding-plan`,access:`personal`},matches:{native:[],curated:[`zai-coding-plan`],opencode:[`zai-coding-plan`]},free:Object.freeze({id:`glm-free`,name:`GLM-4.7 Flash`,label:`Free option: GLM-4.7 Flash with a free Z.AI account`,detail:`GLM-4.7 Flash is free on Z.AI's regular API. Good for trying Vibe64; expect slower, simpler work.`,plan:{name:`Free Z.AI account`,price:`Free`,budget:`No plan or credit needed.`,more:``},signUp:{label:`Open z.ai API keys`,url:`https://z.ai/manage-apikey/apikey-list`,step:`Create a free Z.AI account, then create an API key.`},haveTitle:`Already have a Z.AI account`,have:`Already have a key? Connect`,connectStep:{title:`Paste your Z.AI API key`,body:`Use a key from Z.AI's API Keys page. Vibe64 checks it with one tiny free GLM-4.7 Flash request.`},connect:{engineId:`opencode`,modelProviderId:`zai`,access:`workspace`},matches:{native:[],curated:[],opencode:[`zai`]}})})]);var _hoisted_1$15=[`aria-labelledby`];var _hoisted_2$15=[`id`];var _hoisted_3$13={class:`routing-row__body`};var _hoisted_4$12={key:0,class:`routing-row__same`};var _hoisted_5$11={class:`routing-row__description`};var _hoisted_6$11={class:`routing-row__controls`};var _hoisted_7$11={class:`routing-row__option-title`};var _hoisted_8$10={class:`routing-row__model-name`};var _hoisted_9$10={key:2,class:`routing-row__status`};var _hoisted_10$8=[`title`];var _hoisted_11$7={class:`routing-row__model-name`};var _hoisted_12$5={key:0,class:`routing-row__runs-in`};var _hoisted_13$5={class:`routing-tool`,"aria-hidden":`true`};var _hoisted_14$5={class:`routing-row__footer`};var _hoisted_15$5={key:1,class:`routing-row__personal`};var _hoisted_16$4=[`id`];var _hoisted_17$4={key:0,class:`routing-row__fixed`};var _hoisted_18$4={class:`routing-tool`,"aria-hidden":`true`};var _hoisted_19$3={class:`routing-row__tool`};var _hoisted_20$2={class:`routing-tool`,"aria-hidden":`true`};var TOOL_MARKS=Object.freeze({claude:`CC`,codex:`CX`,opencode:`OC`});var PLAN_NAMES=Object.freeze({claude_plan:`Claude`,chatgpt_plan:`ChatGPT`});var toolLabel=engineId=>VIBE64_AGENT_PROVIDERS.find(({id})=>id===engineId)?.label||engineId;var routeKey$1=value=>JSON.stringify([value?.engineId,value?.modelProviderId,value?.modelId]);function toolCanRun(engineId,modelProviderId,billing){if(engineId===`opencode`)return billing===`key`;if(curatedCodexProvider(modelProviderId))return true;return engineId===`claude`?billing===`claude_subscription`:modelProviderId===`openai`}function defaultRunsIn(group){if(group.fixedRunsIn)return group.fixedRunsIn.engineId;const card=AI_ONBOARDING_PROVIDERS.flatMap(item=>[item,item.free].filter(Boolean)).find(({connect})=>connect.modelProviderId===group.modelProviderId);return card&&toolCanRun(card.connect.engineId,group.modelProviderId,group.billing)?card.connect.engineId:`opencode`}function routingSelectionText(choices=[],selection){if(!selection?.schema)return``;const choice=choices.find(item=>routeKey$1(item)===routeKey$1(selection));const variant=choice?.variants?.find(({id})=>id===selection.variantId)?.label||selection.variantId;return[choice?.label||selection.modelId,variant].filter(Boolean).join(` · `)}var _sfc_main$19={__name:`ModelRoutingRow`,props:{role:{type:Object,required:true},value:{type:Object,default:void 0},followedLabel:{type:String,default:``},defaultFollows:{type:String,default:``},choices:{type:Array,default:()=>[]},recommendation:{type:Object,default:null},error:{type:String,default:``},disabled:Boolean,readonly:Boolean,connectable:Boolean},emits:[`update`,`change`,`connect-provider`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const advanced=ref(false);const rowId=computed(()=>`routing-role-${props.role.id}`);function choiceStatus(choice){if(choice.compatibilityError)return`Compatibility pending`;if(!choice.available)return`Unavailable`;return[`junior`,`fix`].includes(props.role.id)&&choice.capabilities?.toolcall===false?`Tools unavailable`:``}const groups=computed(()=>routingRunsInChoices(props.choices).map(group=>{const usable=group.choices.filter(choice=>!choiceStatus(choice));const first=group.choices[0];return{...group,id:JSON.stringify([group.modelProviderId,group.modelId,group.billing]),usable,label:first.label||first.modelId,providerLabel:first.providerLabel,defaultEngineId:defaultRunsIn(group),personal:group.choices.some(choice=>choice.available===true&&choice.ownerOnly!==false),status:usable.length?``:choiceStatus(first),recommended:group.choices.some(choice=>routeKey$1(choice)===routeKey$1(props.recommendation))}}));const selection=computed(()=>props.value?.schema?props.value:null);const current=computed(()=>selection.value&&groups.value.find(group=>group.choices.some(choice=>routeKey$1(choice)===routeKey$1(selection.value))));const currentChoice=computed(()=>current.value?.choices.find(choice=>routeKey$1(choice)===routeKey$1(selection.value)));const items=computed(()=>[...selection.value&&!current.value?[{id:`saved`,label:selection.value.modelId,status:`Unavailable saved choice`,props:{disabled:true}}]:[],...groups.value.map(group=>({...group,props:{subtitle:group.providerLabel,disabled:Boolean(group.status)}}))]);const pickerValue=computed(()=>current.value?.id||(selection.value?`saved`:null));const offDefault=computed(()=>current.value&&selection.value.engineId!==current.value.defaultEngineId);const runsIn=computed(()=>current.value?.usable.map(({engineId})=>engineId)||[]);const elsewhere=computed(()=>!current.value||current.value.fixedRunsIn?[]:[`claude`,`codex`,`opencode`].filter(engineId=>!current.value.engineIds.includes(engineId)&&toolCanRun(engineId,current.value.modelProviderId,current.value.billing)));const hasAdvanced=computed(()=>Boolean(current.value?.fixedRunsIn)||runsIn.value.length>1);const fixedLine=computed(()=>{const fixed=current.value?.fixedRunsIn;return fixed?`Runs in ${toolLabel(fixed.engineId)} — required by your ${PLAN_NAMES[fixed.reason]} plan.`:``});const variants=computed(()=>currentChoice.value?.variants||[]);function pick(choice,variantId=selection.value?.variantId){const keep=choice.variants?.some(({id})=>id===variantId)?variantId:choice.variantId;emit(`update`,{...defineVibe64AssistantSelection({...choice,variantId:keep}),selectionSource:`explicit`})}function chooseModel(id){const group=groups.value.find(item=>item.id===id);if(!group)return;const engineId=group===current.value?selection.value.engineId:group.defaultEngineId;pick(group.usable.find(choice=>choice.engineId===engineId)||group.usable[0])}function chooseRunsIn(engineId){const choice=current.value?.usable.find(item=>item.engineId===engineId);if(choice)pick(choice)}function chooseThinking(variantId){emit(`update`,{...selection.value,variantId,selectionSource:`explicit`})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`routing-row`,{"routing-row--follows":__props.value?.follows}]),role:`group`,"aria-labelledby":`${rowId.value}-label`},[createBaseVNode(`div`,{id:`${rowId.value}-label`,class:`routing-row__label`},toDisplayString(__props.role.label),9,_hoisted_2$15),createBaseVNode(`div`,_hoisted_3$13,[__props.value?.follows?(openBlock(),createElementBlock(`p`,_hoisted_4$12,[createBaseVNode(`span`,null,`Same as `+toDisplayString(unref(assistantModeLabel)(__props.value.follows))+` · `+toDisplayString(__props.followedLabel||`Not chosen yet`),1),!__props.readonly?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,color:`primary`,size:`small`,class:`routing-row__change`,disabled:__props.disabled,"aria-label":`Change the ${__props.role.label} model`,onClick:_cache[0]||(_cache[0]=$event=>emit(`change`))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Change `,-1)])]),_:1},8,[`disabled`,`aria-label`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,_hoisted_5$11,toDisplayString(__props.role.description),1),createBaseVNode(`div`,_hoisted_6$11,[createVNode(VAutocomplete,{"model-value":pickerValue.value,items:items.value,"item-title":`label`,"item-value":`id`,label:`${__props.role.label} model`,placeholder:`Choose a model`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,readonly:__props.readonly,disabled:__props.disabled,"error-messages":__props.error,"filter-keys":[`title`,`raw.providerLabel`],"no-data-text":`No matching models`,class:`routing-row__model`,"onUpdate:modelValue":chooseModel},{item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{role:`option`,"min-height":56,class:`routing-row__option`,"aria-label":[item.label,item.providerLabel,item.personal?`Personal use`:``,item.status,item.recommended?`Recommended`:``].filter(Boolean).join(` · `)}),{title:withCtx(()=>[createBaseVNode(`span`,_hoisted_7$11,[createBaseVNode(`span`,_hoisted_8$10,toDisplayString(item.label),1),item.recommended&&!item.status?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,color:`primary`,variant:`tonal`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Recommended`,-1)])]),_:1})):createCommentVNode(``,true),item.personal?(openBlock(),createBlock(AiPersonalUse_default,{key:1,variant:`badge`})):createCommentVNode(``,true),item.status?(openBlock(),createElementBlock(`span`,_hoisted_9$10,toDisplayString(item.status),1)):createCommentVNode(``,true)])]),append:withCtx(({isSelected})=>[isSelected?(openBlock(),createBlock(VIcon,{key:0,icon:`$complete`,color:`primary`,size:`small`,"aria-hidden":`true`})):createCommentVNode(``,true)]),_:2},1040,[`aria-label`])]),selection:withCtx(()=>[createBaseVNode(`span`,{class:`routing-row__selection`,title:[current.value?.label||selection.value?.modelId,offDefault.value?`runs in ${toolLabel(__props.value.engineId)}`:``].filter(Boolean).join(` · `)},[createBaseVNode(`span`,_hoisted_11$7,toDisplayString(current.value?.label||selection.value?.modelId),1),offDefault.value?(openBlock(),createElementBlock(`span`,_hoisted_12$5,[_cache[6]||(_cache[6]=createTextVNode(` · `,-1)),createBaseVNode(`span`,_hoisted_13$5,toDisplayString(unref(TOOL_MARKS)[__props.value.engineId]),1),createTextVNode(`runs in `+toDisplayString(toolLabel(__props.value.engineId)),1)])):createCommentVNode(``,true)],8,_hoisted_10$8)]),_:1},8,[`model-value`,`items`,`label`,`readonly`,`disabled`,`error-messages`]),variants.value.length?(openBlock(),createBlock(VSelect,{key:0,"model-value":__props.value?.variantId||``,items:[{id:``,label:`Default`},...variants.value],"item-title":`label`,"item-value":`id`,label:`Thinking`,"aria-label":`${__props.role.label} thinking`,variant:`outlined`,density:`comfortable`,"hide-details":``,readonly:__props.readonly,disabled:__props.disabled,class:`routing-row__thinking`,"onUpdate:modelValue":chooseThinking},null,8,[`model-value`,`items`,`aria-label`,`readonly`,`disabled`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_14$5,[hasAdvanced.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,class:normalizeClass([`routing-row__advanced-toggle`,{"is-open":advanced.value}]),"append-icon":unref(mdiChevronDown),"aria-expanded":String(advanced.value),"aria-controls":`${rowId.value}-advanced`,onClick:_cache[1]||(_cache[1]=$event=>advanced.value=!advanced.value)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Advanced `,-1)])]),_:1},8,[`class`,`append-icon`,`aria-expanded`,`aria-controls`])):createCommentVNode(``,true),current.value?.personal?(openBlock(),createElementBlock(`span`,_hoisted_15$5,[createVNode(AiPersonalUse_default,{variant:`badge`})])):createCommentVNode(``,true),__props.defaultFollows&&!__props.readonly?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,color:`primary`,size:`small`,class:`routing-row__return`,disabled:__props.disabled,onClick:_cache[2]||(_cache[2]=$event=>emit(`update`,{follows:__props.defaultFollows}))},{default:withCtx(()=>[createTextVNode(` Use `+toDisplayString(unref(assistantModeLabel)(__props.defaultFollows))+`'s model `,1)]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),createVNode(VExpandTransition,null,{default:withCtx(()=>[hasAdvanced.value&&advanced.value?(openBlock(),createElementBlock(`div`,{key:0,id:`${rowId.value}-advanced`,class:`routing-row__advanced`},[fixedLine.value?(openBlock(),createElementBlock(`p`,_hoisted_17$4,[createBaseVNode(`span`,_hoisted_18$4,toDisplayString(unref(TOOL_MARKS)[current.value.fixedRunsIn.engineId]),1),createTextVNode(toDisplayString(fixedLine.value),1)])):(openBlock(),createBlock(VRadioGroup,{key:1,"model-value":__props.value.engineId,label:`${__props.role.label} runs in`,"hide-details":``,density:`compact`,readonly:__props.readonly,disabled:__props.disabled,class:`routing-row__runs-in-group`,"onUpdate:modelValue":chooseRunsIn},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(runsIn.value,engineId=>{return openBlock(),createBlock(VRadio,{key:engineId,value:engineId,color:`primary`},{label:withCtx(()=>[createBaseVNode(`span`,_hoisted_19$3,[createBaseVNode(`span`,_hoisted_20$2,toDisplayString(unref(TOOL_MARKS)[engineId]),1),createTextVNode(toDisplayString(toolLabel(engineId))+` `,1),engineId===current.value.defaultEngineId?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,color:`primary`,variant:`tonal`},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Recommended`,-1)])]),_:1})):createCommentVNode(``,true)])]),_:2},1032,[`value`])}),128))]),_:1},8,[`model-value`,`label`,`readonly`,`disabled`])),__props.connectable&&elsewhere.value.length&&!__props.readonly?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,color:`primary`,size:`small`,class:`routing-row__connect`,onClick:_cache[3]||(_cache[3]=$event=>emit(`connect-provider`,current.value.modelProviderId))},{default:withCtx(()=>[createTextVNode(` Connect `+toDisplayString(current.value.providerLabel)+` in another tool `,1)]),_:1})):createCommentVNode(``,true)],8,_hoisted_16$4)):createCommentVNode(``,true)]),_:1})],64))])],10,_hoisted_1$15)}}};var ModelRoutingRow_default=_plugin_vue_export_helper_default(_sfc_main$19,[[`__scopeId`,`data-v-9a5b35db`]]);var _hoisted_1$14={class:`model-routing`,"aria-label":`Models`};var _hoisted_2$14={class:`model-routing__body`};var _hoisted_3$12={class:`model-routing__title`};var _hoisted_4$11={key:0,class:`text-body-medium mb-4`};var _hoisted_5$10={key:0,class:`text-body-small`};var _hoisted_6$10={class:`text-body-medium`};var _hoisted_7$10={key:1,class:`text-body-small`};var _hoisted_8$9={key:1,class:`text-body-medium`};var _hoisted_9$9={key:1,class:`model-routing__intro`};var _hoisted_10$7={key:2,class:`model-routing__empty`,role:`status`};var _hoisted_11$6={key:0};var _hoisted_12$4={key:0,class:`model-routing__tools`};var _hoisted_13$4={key:1,class:`text-body-small`,role:`status`};var _hoisted_14$4=[`aria-labelledby`];var _hoisted_15$4=[`id`];var _hoisted_16$3={key:5,class:`text-body-medium`};var _hoisted_17$3={class:`model-routing__actions`};var _hoisted_18$3={key:0,class:`model-routing__checking`,role:`status`};var _hoisted_19$2={class:`model-routing__changes pl-4`};var _sfc_main$18={__name:`ModelRoutingForm`,props:{connectionId:{type:String,default:``},connectionLabel:{type:String,default:``},preferEngineId:{type:String,default:``},setupError:{type:String,default:``},focusRole:{type:String,default:``},readonly:Boolean,initialSetup:{type:String,default:`owner`},plain:Boolean,onAddTeamKey:{type:Function,default:null},onConnectProvider:{type:Function,default:null}},emits:[`close`,`saved`,`busy`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const SETUPS=[{id:`owner`,label:`Owner (you)`},{id:`nonOwner`,label:`Team members`}];const GROUPS=[{id:`main`,label:`Main chat`},{id:`helpers`,label:`Helpers`}];const MAIN_AI_ROLES=[`senior`,`junior`,`router`,`quickHelper`];const customizing=ref(false);const proposalMode=computed(()=>Boolean(props.connectionId)&&!customizing.value);const{resource,engines,scopeKey,team,loadError:resourceError}=useModelRouting();const refreshError=ref(``);const loadError=computed(()=>resourceError.value||refreshError.value);const draft=ref({owner:{},nonOwner:{}});const baseRevision=ref(null);const recommendationReview=ref(null);const proposals=ref([]);const preferred=ref(null);const saving=ref(false);const fieldErrors=ref({});const preview=ref(null);const previewPending=ref(false);const previewError=ref(``);const retryPreview=ref(0);const refreshingConnection=ref(Boolean(props.connectionId));const activeSetup=ref(props.initialSetup===`nonOwner`?`nonOwner`:`owner`);let savedPayload=``;let savedValues={owner:{},nonOwner:{}};let hydratedDraft=``;const draftSnapshot=()=>JSON.stringify({draft:draft.value,proposals:proposals.value,customizing:customizing.value});const owner=computed(()=>resource.data.value?.canConfigure===true);const canEdit=computed(()=>!props.readonly&&owner.value);const setup=computed(()=>owner.value?activeSetup.value:`nonOwner`);const connected=computed(()=>engines.value.some(engine=>engine.connected));const ownerName=computed(()=>team.value?.ownerName||`the workspace owner`);const roleState=(setupId,role,data=resource.data.value)=>data?.setups?.[setupId]?.roles?.[role];const teamConfigured=computed(()=>ASSISTANT_SETUP_ROLES.nonOwner.some(role=>roleState(`nonOwner`,role)?.configured||Object.hasOwn(draft.value.nonOwner,role)&&!implicitFollows(`nonOwner`,role,draft.value.nonOwner[role])));const showSwitch=computed(()=>owner.value&&(teamConfigured.value||props.initialSetup===`nonOwner`));const teamEmpty=computed(()=>!ASSISTANT_SETUP_ROLES.nonOwner.some(role=>assistantSetupRoleValue(draft.value.nonOwner,role).value?.schema));const teamChoices=computed(()=>(roleState(`nonOwner`,`colleague`)?.choices||[]).length>0);const rowRefs=ref({});watch([()=>resource.data.value?.setups,()=>props.focusRole],async()=>{if(!props.focusRole)return;await nextTick();const row=rowRefs.value[`${setup.value}.${props.focusRole}`]?.$el;row?.scrollIntoView?.({block:`center`});row?.querySelector?.(`input[role="combobox"]`)?.focus({preventScroll:true})},{immediate:true});const stale=computed(()=>baseRevision.value!==null&&resource.data.value?.revision!==baseRevision.value);const rolesFor=(setupId,group)=>ASSISTANT_ROUTING_ROLE_DEFINITIONS.filter(({id,group:roleGroup})=>ASSISTANT_SETUP_ROLES[setupId].includes(id)&&(!group||roleGroup===group));const groupsFor=setupId=>GROUPS.filter(({id})=>rolesFor(setupId,id).length);function sameValue(left,right){if(left?.follows||right?.follows)return left?.follows===right?.follows;return routeKey$1(left)===routeKey$1(right)&&left?.variantId===right?.variantId&&left?.agentId===right?.agentId}function choiceFor(setupId,role,selection){return(roleState(setupId,role)?.choices||[]).find(item=>routeKey$1(item)===routeKey$1(selection))}const followedLabel=(setupId,role)=>{const target=draft.value[setupId][role]?.follows;return target?routingSelectionText(roleState(setupId,target)?.choices,draft.value[setupId][target]):``};const defaultFollows=(setupId,role)=>ASSISTANT_FOLLOWING_ROLES.includes(role)&&!draft.value[setupId][role]?.follows?ASSISTANT_ROLE_DEFAULT_FOLLOWS[setupId][role]||``:``;const PLAIN_ROLES={senior:`Building`,junior:`Quick tasks`,quickHelper:`Background helpers`,router:`Request routing`};function selectionLabel(setupId,role,value){if(value?.follows)return`Same as ${assistantModeLabel(value.follows)}`;if(!value)return`No model selected`;return props.plain?choiceFor(setupId,role,value)?.label||value.modelId:vibe64AssistantSelectionLabel(value)}const recommendedChanges=computed(()=>rolesFor(setup.value).flatMap(({id,label})=>{const proposed=roleState(setup.value,id)?.recommendation;if(!proposed||sameValue(draft.value[setup.value][id],proposed))return[];return[{setup:setup.value,role:id,label,proposed,description:selectionLabel(setup.value,id,proposed)}]}));const suggestedChanges=computed(()=>!connected.value?[]:(preferred.value?MAIN_AI_ROLES:ASSISTANT_SETUP_ROLES.owner).flatMap(role=>{const value=roleState(`owner`,role)?.value;const recommendation=(preferred.value||resource.data.value?.setups?.owner?.roles)?.[role]?.recommendation;if(!recommendation?.schema||recommendation.modelProviderId!==props.connectionId||sameValue(value,recommendation))return[];return[{id:`owner:${role}`,setup:`owner`,role,label:assistantModeLabel(role),previous:value?.schema?value:null,proposed:recommendation}]}));function implicitFollows(setupId,role,value){return!Object.hasOwn(savedValues[setupId],role)&&Boolean(value?.follows)&&value.follows===ASSISTANT_ROLE_DEFAULT_FOLLOWS[setupId][role]}function payload(){const values=JSON.parse(JSON.stringify(draft.value));if(proposalMode.value){for(const proposal of suggestedChanges.value)if(proposals.value.includes(proposal.id))values[proposal.setup][proposal.role]=proposal.proposed}const changes=Object.fromEntries(SETUPS.map(({id:setupId})=>{const changed=Object.entries(values[setupId]).filter(([role,value])=>!sameValue(value,savedValues[setupId][role])||value===null!==(savedValues[setupId][role]===null));return[setupId,changed.some(([role,value])=>!implicitFollows(setupId,role,value))?Object.fromEntries(changed):{}]}).filter(([,roles])=>Object.keys(roles).length));return{revision:baseRevision.value,...changes}}const defaultProposals=()=>suggestedChanges.value.filter(({previous})=>preferred.value||!previous||previous.selectionSource===`recommended`).map(({id})=>id);function hydrate(data){if(!data?.ok)return;recommendationReview.value=null;baseRevision.value=data.revision;draft.value=Object.fromEntries(SETUPS.map(({id:setupId})=>[setupId,Object.fromEntries(ASSISTANT_SETUP_ROLES[setupId].filter(role=>roleState(setupId,role,data)?.configured).map(role=>[role,roleState(setupId,role,data).value]))]));fieldErrors.value={};savedValues=JSON.parse(JSON.stringify(draft.value));for(const{id:setupId}of SETUPS)for(const[role,follows]of Object.entries(ASSISTANT_ROLE_DEFAULT_FOLLOWS[setupId]))if(!Object.hasOwn(draft.value[setupId],role))draft.value[setupId][role]={follows};savedPayload=JSON.stringify({revision:data.revision});proposals.value=defaultProposals();preview.value=data;hydratedDraft=draftSnapshot()}watch(scopeKey,()=>{baseRevision.value=null;draft.value={owner:{},nonOwner:{}};savedValues={owner:{},nonOwner:{}};proposals.value=[];preferred.value=null;preview.value=null;fieldErrors.value={};customizing.value=false;recommendationReview.value=null},{flush:`sync`});watch(()=>resource.data.value,data=>{if(!refreshingConnection.value&&!saving.value&&(baseRevision.value===null||draftSnapshot()===hydratedDraft))hydrate(data)},{immediate:true});async function routingPreview(body,signal){const result=await getHttpWebClient().request(`${ACCOUNTS_ENDPOINT}/model-routing/preview`,{method:`POST`,body,signal});if(result?.ok!==true)throw new Error(result?.error||`Routing preview could not be loaded.`);return result}onMounted(async()=>{if(!refreshingConnection.value)return;await reload();if(props.preferEngineId&&baseRevision.value!==null&&!loadError.value)try{preferred.value=(await routingPreview({revision:baseRevision.value,preferProvider:{setup:`owner`,modelProviderId:props.connectionId,engineId:props.preferEngineId}})).setups.owner.roles;proposals.value=defaultProposals();hydratedDraft=draftSnapshot()}catch(error){refreshError.value=error.message}refreshingConnection.value=false});watch(saving,value=>emit(`busy`,value));const previewPayload=computed(()=>JSON.stringify(payload()));watch([previewPayload,retryPreview,canEdit,stale],([serialized],_previous,cleanup)=>{previewPending.value=false;if(baseRevision.value===null||!canEdit.value||stale.value)return;previewError.value=``;if(serialized===savedPayload){preview.value=resource.data.value;return}const controller=new AbortController;let current=true;previewPending.value=true;const timer=setTimeout(async()=>{try{const result=await routingPreview(JSON.parse(serialized),controller.signal);if(current)preview.value=result}catch(error){if(current)previewError.value=error.message}finally{if(current)previewPending.value=false}},250);cleanup(()=>{current=false;clearTimeout(timer);controller.abort()})},{immediate:true});const personalProviders=computed(()=>[...new Set(ASSISTANT_SETUP_ROLES.owner.flatMap(role=>{const choice=choiceFor(`owner`,role,draft.value.owner[role]);return choice?.available===true&&choice.ownerOnly!==false?[choice.modelProviderId]:[]}))]);function update(setupId,role,value){draft.value[setupId][role]=value;delete fieldErrors.value[`${setupId}.${role}`]}function changeFollowing(setupId,role){const target=draft.value[setupId][draft.value[setupId][role].follows];update(setupId,role,target?.schema?{...target,selectionSource:`explicit`}:null)}function roleError(setupId,role){if(fieldErrors.value[`${setupId}.${role}`])return fieldErrors.value[`${setupId}.${role}`];if(previewPending.value||stale.value)return``;const state=preview.value?.setups?.[setupId]?.roles?.[role];if(sameValue(state?.value,draft.value[setupId][role])&&state?.error)return state.error;const decision=preview.value?.setups?.[setupId]?.preview?.[ASSISTANT_ROLE_PURPOSES[role]];return draft.value[setupId][role]?.schema&&decision&&!decision.available?decision.message||`Unavailable`:``}function reviewRecommendations(){if(!canEdit.value||saving.value||stale.value||!recommendedChanges.value.length)return;recommendationReview.value={changes:recommendedChanges.value}}function useRecommendations(){if(!recommendationReview.value||!canEdit.value||saving.value||stale.value)return;for(const{setup:setupId,role,proposed}of recommendationReview.value.changes)update(setupId,role,proposed);recommendationReview.value=null}function customize(){const changes=payload();for(const{id:setupId}of SETUPS)if(changes[setupId])Object.assign(draft.value[setupId],changes[setupId]);customizing.value=true}const command=useCommand({access:`never`,apiSuffix:`/vibe64/accounts/model-routing`,buildCommandOptions:()=>({method:`PATCH`,path:`${ACCOUNTS_ENDPOINT}/model-routing`}),buildRawPayload:payload,onRunSuccess(response){fieldErrors.value=response?.fieldErrors||{};if(response?.ok!==true)throw new Error(response?.error||`Models were not saved.`)},messages:{success:`AI setup saved. New requests will use these models.`,error:`AI setup was not saved.`},fallbackRunError:`AI setup was not saved.`,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.model-routing`,surfaceId:`app`,writeMethod:`PATCH`});async function save(){if(saving.value||stale.value||!canEdit.value||previewPending.value||!connected.value)return;saving.value=true;try{if((await command.run())?.ok===true){await resource.reload();emit(`saved`)}}catch{}finally{saving.value=false}}function until(ready){return new Promise(resolve=>{const stop=watch(ready,value=>{if(value){queueMicrotask(()=>stop());resolve()}},{immediate:true})})}async function applySuggested(){await until(()=>loadError.value||baseRevision.value!==null&&!refreshingConnection.value);if(loadError.value)return;proposals.value=suggestedChanges.value.map(({id})=>id);if(!proposals.value.length)return emit(`saved`);await nextTick();await until(()=>!previewPending.value);await save()}__expose({applySuggested});async function reload(){refreshError.value=``;try{await resource.reload();if(!resourceError.value)hydrate(resource.data.value)}catch(error){refreshError.value=error.message||`Models could not be loaded.`}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$14,[createBaseVNode(`div`,_hoisted_2$14,[!__props.plain?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`h2`,_hoisted_3$12,toDisplayString(proposalMode.value?`${__props.connectionLabel||__props.connectionId} connected`:`Models`),1),proposalMode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$11,`Your connection is ready. Model changes are optional.`)):createCommentVNode(``,true)],64)):createCommentVNode(``,true),__props.setupError?(openBlock(),createBlock(VAlert,{key:1,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(`Your AI is connected, but its model defaults could not be saved. `+toDisplayString(__props.setupError)+` Review the choices below to finish setup.`,1)]),_:1})):createCommentVNode(``,true),unref(resource).isInitialLoading.value||baseRevision.value===null&&!loadError.value?(openBlock(),createBlock(VSkeletonLoader,{key:2,type:`list-item-two-line@5, actions`})):loadError.value?(openBlock(),createBlock(VAlert,{key:3,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:reload},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):connected.value?(openBlock(),createElementBlock(Fragment,{key:4},[stale.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createTextVNode(`Models changed in another tab. Your draft is retained. `,-1)),createVNode(VBtn,{variant:`text`,onClick:reload},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Reload current choices`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),proposalMode.value?(openBlock(),createElementBlock(Fragment,{key:1},[suggestedChanges.value.length?(openBlock(),createElementBlock(Fragment,{key:0},[!suggestedChanges.value.some(change=>change.role===`senior`)?(openBlock(),createElementBlock(`p`,_hoisted_5$10,toDisplayString(__props.plain?`Building`:`Senior`)+` stays `+toDisplayString(selectionLabel(`owner`,`senior`,draft.value.owner.senior))+`.`,1)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(suggestedChanges.value,proposal=>{return openBlock(),createBlock(VCheckbox,{key:proposal.id,modelValue:proposals.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>proposals.value=$event),value:proposal.id,disabled:saving.value||!canEdit.value,color:`primary`,"hide-details":``,class:`model-routing__proposal`},{label:withCtx(()=>[createBaseVNode(`span`,_hoisted_6$10,[createBaseVNode(`strong`,null,toDisplayString(__props.plain?PLAIN_ROLES[proposal.role]||proposal.label:proposal.label),1),_cache[11]||(_cache[11]=createBaseVNode(`br`,null,null,-1)),createTextVNode(`Current: `+toDisplayString(selectionLabel(`owner`,proposal.role,proposal.previous)),1),_cache[12]||(_cache[12]=createBaseVNode(`br`,null,null,-1)),createTextVNode(`Suggested: `+toDisplayString(selectionLabel(`owner`,proposal.role,proposal.proposed)),1),!__props.plain?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · `+toDisplayString(choiceFor(`owner`,proposal.role,proposal.proposed)?.accessLabel),1)],64)):createCommentVNode(``,true),_cache[13]||(_cache[13]=createBaseVNode(`br`,null,null,-1)),proposal.previous?.selectionSource===`explicit`?(openBlock(),createElementBlock(`span`,_hoisted_7$10,`You chose the current model. Select this change to replace it.`)):createCommentVNode(``,true)])]),_:2},1032,[`modelValue`,`value`,`disabled`])}),128))],64)):createCommentVNode(``,true),!suggestedChanges.value.length?(openBlock(),createElementBlock(`p`,_hoisted_8$9,`No model changes are suggested.`)):createCommentVNode(``,true),canEdit.value?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,class:`my-3`,disabled:saving.value,onClick:customize},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Configure AI setup`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(Fragment,{key:2},[showSwitch.value?(openBlock(),createBlock(VBtnToggle,{key:0,modelValue:activeSetup.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>activeSetup.value=$event),mandatory:``,divided:``,variant:`outlined`,color:`primary`,density:`comfortable`,class:`model-routing__switch`,"aria-label":`Which setup`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(SETUPS,item=>{return createVNode(VBtn,{key:item.id,value:item.id,disabled:saving.value},{default:withCtx(()=>[createTextVNode(toDisplayString(item.label),1)]),_:2},1032,[`value`,`disabled`])}),64))]),_:1},8,[`modelValue`])):createCommentVNode(``,true),setup.value===`nonOwner`?(openBlock(),createElementBlock(`div`,_hoisted_9$9,[owner.value?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[15]||(_cache[15]=createBaseVNode(`p`,null,`Team members' Colleague, Fix it with AI, Explain & check and Quick helper use these models. Main chat always runs on your setup, and you approve what team members send to it.`,-1)),_cache[16]||(_cache[16]=createBaseVNode(`p`,null,`Personal plans, like your Claude plan, can't be used by team members.`,-1))],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`p`,null,toDisplayString(ownerName.value[0].toUpperCase()+ownerName.value.slice(1))+` chose these models for team members. Main chat runs on `+toDisplayString(ownerName.value)+`'s setup.`,1),_cache[17]||(_cache[17]=createBaseVNode(`p`,null,`Change your own Colleague's model from Colleague's menu.`,-1))],64))])):createCommentVNode(``,true),setup.value===`nonOwner`&&teamEmpty.value?(openBlock(),createElementBlock(`div`,_hoisted_10$7,[createBaseVNode(`p`,null,`No team AI yet. `+toDisplayString(owner.value?`Team members can't open projects until you add one.`:`Ask ${ownerName.value} to set up AI for team members.`),1),canEdit.value&&teamChoices.value?(openBlock(),createElementBlock(`p`,_hoisted_11$6,`Or choose a Workspace-use model you already connected below.`)):createCommentVNode(``,true),canEdit.value&&__props.onAddTeamKey?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`flat`,disabled:saving.value,onClick:_cache[2]||(_cache[2]=$event=>__props.onAddTeamKey())},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Add a DeepSeek key`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),setup.value===`owner`||teamChoices.value||!teamEmpty.value?(openBlock(),createElementBlock(Fragment,{key:3},[canEdit.value&&!(setup.value===`nonOwner`&&teamEmpty.value)?(openBlock(),createElementBlock(`div`,_hoisted_12$4,[recommendedChanges.value.length?(openBlock(),createBlock(VBtn,{key:0,variant:`outlined`,color:`primary`,size:`small`,"min-height":`36`,disabled:saving.value||stale.value,onClick:reviewRecommendations},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`Review recommendations`,-1)])]),_:1},8,[`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_13$4,`No recommended changes.`))])):createCommentVNode(``,true),setup.value===`owner`?(openBlock(true),createElementBlock(Fragment,{key:1},renderList(personalProviders.value,providerId=>{return openBlock(),createBlock(AiPersonalUse_default,{key:providerId,"provider-id":providerId,variant:`note`,class:`model-routing__personal mb-4`},null,8,[`provider-id`])}),128)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(groupsFor(setup.value),group=>{return openBlock(),createElementBlock(`section`,{key:`${setup.value}-${group.id}`,class:`model-routing__group`,"aria-labelledby":`routing-group-${setup.value}-${group.id}`},[createBaseVNode(`h3`,{id:`routing-group-${setup.value}-${group.id}`,class:`model-routing__group-title`},toDisplayString(group.label),9,_hoisted_15$4),(openBlock(true),createElementBlock(Fragment,null,renderList(rolesFor(setup.value,group.id),role=>{return openBlock(),createBlock(ModelRoutingRow_default,{key:`${setup.value}-${role.id}`,ref_for:true,ref:row=>rowRefs.value[`${setup.value}.${role.id}`]=row,role,value:draft.value[setup.value][role.id],"followed-label":followedLabel(setup.value,role.id),"default-follows":defaultFollows(setup.value,role.id),choices:roleState(setup.value,role.id)?.choices||[],recommendation:roleState(setup.value,role.id)?.recommendation,error:roleError(setup.value,role.id),disabled:saving.value,readonly:!canEdit.value,onUpdate:$event=>update(setup.value,role.id,$event),onChange:$event=>changeFollowing(setup.value,role.id),connectable:Boolean(__props.onConnectProvider),onConnectProvider:_cache[3]||(_cache[3]=$event=>__props.onConnectProvider($event))},null,8,[`role`,`value`,`followed-label`,`default-follows`,`choices`,`recommendation`,`error`,`disabled`,`readonly`,`onUpdate`,`onChange`,`connectable`])}),128))],8,_hoisted_14$4)}),128))],64)):createCommentVNode(``,true)],64)),previewError.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`,class:`mt-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(previewError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>retryPreview.value++)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Retry preview`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(`p`,_hoisted_16$3,`Connect an AI to choose its models.`))]),createBaseVNode(`div`,_hoisted_17$3,[previewPending.value&&!proposalMode.value?(openBlock(),createElementBlock(`span`,_hoisted_18$3,`Checking access…`)):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,disabled:saving.value,onClick:_cache[5]||(_cache[5]=$event=>emit(`close`))},{default:withCtx(()=>[createTextVNode(toDisplayString(proposalMode.value?suggestedChanges.value.length?`Keep current models`:`Done`:canEdit.value?`Cancel`:`Close`),1)]),_:1},8,[`disabled`]),canEdit.value&&(proposalMode.value?suggestedChanges.value.length:connected.value)?(openBlock(),createBlock(VBtn,{key:1,variant:`flat`,color:`primary`,disabled:saving.value||stale.value||previewPending.value||Boolean(loadError.value)||baseRevision.value===null||Boolean(proposalMode.value&&!proposals.value.length),onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Saving…`:proposalMode.value?`Apply ${proposals.value.length} ${proposals.value.length===1?`change`:`changes`}`:`Save`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),canEdit.value?(openBlock(),createBlock(VDialog,{key:0,"model-value":Boolean(recommendationReview.value),"max-width":`36rem`,scrollable:``,"aria-label":`Recommended model changes`,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>!$event&&(recommendationReview.value=null))},{default:withCtx(()=>[recommendationReview.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`,title:`Recommended changes`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[stale.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Models changed. Close this review and reload current choices.`,-1)])]),_:1})):createCommentVNode(``,true),createBaseVNode(`ul`,_hoisted_19$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(recommendationReview.value.changes,change=>{return openBlock(),createElementBlock(`li`,{key:`${change.setup}.${change.role}`,class:`text-body-medium py-1`},[createBaseVNode(`strong`,null,toDisplayString(change.label),1),createTextVNode(` → `+toDisplayString(change.description),1)])}),128))])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>recommendationReview.value=null)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{variant:`flat`,color:`primary`,disabled:saving.value||stale.value,onClick:useRecommendations},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(`Apply to form`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`])):createCommentVNode(``,true)])}}};var ModelRoutingForm_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-0bf2ce5a`]]);var _hoisted_1$13={key:0,class:`ai-wait text-body-medium`,role:`status`,"data-test":`ai-wait`};var _hoisted_2$13={class:`ai-wait__text`};var _hoisted_3$11={class:`ai-wait__slow`};var _sfc_main$17={__name:`AiWaitStatus`,props:{active:Boolean,label:{type:String,default:``},slowAfterMs:{type:Number,default:2e4},slowLabel:{type:String,default:`Still working. This is taking longer than usual.`}},setup(__props){const props=__props;const slow=ref(false);let timer=null;watch(()=>props.active,active=>{clearTimeout(timer);slow.value=false;if(active)timer=setTimeout(()=>{slow.value=true},props.slowAfterMs)},{immediate:true});onBeforeUnmount(()=>clearTimeout(timer));return(_ctx,_cache)=>{return __props.active?(openBlock(),createElementBlock(`div`,_hoisted_1$13,[createVNode(VProgressCircular,{indeterminate:``,color:`primary`,size:`20`,width:`2`,class:`ai-wait__spinner`}),createBaseVNode(`div`,_hoisted_2$13,[createBaseVNode(`span`,null,toDisplayString(__props.label),1),slow.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`span`,_hoisted_3$11,toDisplayString(__props.slowLabel),1),renderSlot(_ctx.$slots,`slow`,{},void 0,true)],64)):createCommentVNode(``,true)])])):createCommentVNode(``,true)}}};var AiWaitStatus_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-c328aa94`]]);var _hoisted_1$12=[`aria-label`];var _hoisted_2$12={key:0,class:`d-flex align-center ga-2 mb-3`};var _hoisted_3$10={key:0,class:`text-title-large mt-0 mb-3`};var _hoisted_4$10={key:1,class:`d-flex align-center flex-wrap ga-2 mb-2`};var _hoisted_5$9={class:`text-title-large`};var _hoisted_6$9={key:2,class:`text-body-medium mb-3`};var _hoisted_7$9={key:3,class:`text-body-small mb-3`};var _hoisted_8$8={key:4,class:`text-body-small mb-3`};var _hoisted_9$8={key:5,class:`d-flex flex-wrap ga-1 mb-4`,"aria-label":`Available models`};var _hoisted_10$6={key:1,class:`text-body-small my-3`};var _hoisted_11$5={class:`d-flex ga-2 mt-2`};var _sfc_main$16={__name:`NativeProviderConnections`,props:mergeModels({actionsEnabled:{type:Boolean,default:true},adding:Boolean,cliAccount:{type:Object,default:()=>({})},cliChecking:Boolean,embedded:Boolean,title:{type:String,default:``},engineId:{type:String,default:`codex`},selectProvider:{type:Boolean,default:true},showBack:Boolean,showClose:Boolean},{"modelValue":{type:String,default:`openai`},"modelModifiers":{}}),emits:mergeModels([`changed`,`close`,`back`,`busy`,`check-cli`],[`update:modelValue`]),setup(__props,{emit:__emit}){const props=__props;const providerId=useModel(__props,`modelValue`);const emit=__emit;const{connections,resource,busy,change,loadError}=useCodexProviderConnections({enabled:computed(()=>props.actionsEnabled)});watch(busy,value=>emit(`busy`,value),{immediate:true});const cliBlocked=computed(()=>cliProblem(props.cliAccount));const provider=computed(()=>curatedCodexProvider(providerId.value));const connection=computed(()=>connections.value.find(({id})=>id===providerId.value));const engineLabel=computed(()=>props.engineId===`claude`?`Claude Code`:`Codex`);const connected=computed(()=>props.engineId===`claude`?connection.value?.claudeReady:connection.value?.connected);const connectionStatus=computed(()=>connection.value?.engineStates?.[props.engineId]?.status||`not_connected`);const useExistingKey=computed(()=>props.adding&&connectionStatus.value===`connected`);const choices=computed(()=>[props.engineId===`claude`?{id:`anthropic`,label:`Claude Code - Claude · Claude subscription`}:{id:`openai`,label:`Codex - GPT · ChatGPT or OpenAI API key`},...CURATED_CODEX_PROVIDERS.map(({id,label})=>{const row=connections.value.find(row=>row.id===id);const ready=props.engineId===`claude`?row?.claudeReady:row?.connected;return{id,label:`${engineLabel.value} - ${label}${ready?` · Connected`:``}`}})]);const apiKey=ref(``);const visible=ref(false);const confirmRemove=ref(false);const routingProposal=ref(false);const routingSetupError=ref(``);watch([providerId,()=>props.engineId],()=>{apiKey.value=``;visible.value=false;confirmRemove.value=false;routingProposal.value=false;routingSetupError.value=``},{immediate:true});async function save({remove=false,useSavedKey=false}={}){try{const result=await change({modelProviderId:providerId.value,engineId:props.engineId,apiKey:apiKey.value,remove,useSavedKey:useSavedKey||useExistingKey.value});if(result?.ok!==true)return;apiKey.value=``;visible.value=false;confirmRemove.value=false;emit(`changed`);if(remove)return;routingSetupError.value=result.routing?.ok===false?result.routing.error:``;if(props.embedded&&!routingSetupError.value)emit(`close`);else routingProposal.value=true}catch{}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{"aria-label":`${engineLabel.value} providers`,class:`native-providers`},[routingProposal.value?(openBlock(),createBlock(ModelRoutingForm_default,{key:0,"connection-id":providerId.value,"connection-label":provider.value?.label||providerId.value,"setup-error":routingSetupError.value,onBusy:_cache[0]||(_cache[0]=$event=>emit(`busy`,$event)),onClose:_cache[1]||(_cache[1]=$event=>{routingProposal.value=false;emit(`close`)}),onSaved:_cache[2]||(_cache[2]=$event=>{routingProposal.value=false;emit(`changed`);emit(`close`)})},null,8,[`connection-id`,`connection-label`,`setup-error`])):(openBlock(),createElementBlock(Fragment,{key:1},[__props.selectProvider?(openBlock(),createElementBlock(`div`,_hoisted_2$12,[createVNode(VSelect,{modelValue:providerId.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>providerId.value=$event),items:choices.value,"item-title":`label`,"item-value":`id`,label:`Use ${engineLabel.value} with`,variant:`outlined`,"hide-details":``,disabled:unref(busy)},null,8,[`modelValue`,`items`,`label`,`disabled`])])):createCommentVNode(``,true),provider.value?(openBlock(),createElementBlock(Fragment,{key:1},[__props.embedded?(openBlock(),createElementBlock(`h2`,_hoisted_3$10,toDisplayString(__props.title),1)):(openBlock(),createElementBlock(`div`,_hoisted_4$10,[createBaseVNode(`h2`,_hoisted_5$9,toDisplayString(engineLabel.value)+` - `+toDisplayString(provider.value.label),1),connected.value?(openBlock(),createBlock(VChip,{key:0,color:`success`,size:`small`,"prepend-icon":unref(mdiCheckCircleOutline)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Connected`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VSpacer),__props.showBack?(openBlock(),createBlock(VBtn,{key:1,icon:unref(mdiArrowLeft),"aria-label":`Back to providers`,variant:`text`,disabled:unref(busy),onClick:_cache[4]||(_cache[4]=$event=>emit(`back`))},null,8,[`icon`,`disabled`])):createCommentVNode(``,true),__props.showClose?(openBlock(),createBlock(VBtn,{key:2,icon:unref(mdiClose),"aria-label":`Close ${engineLabel.value} setup`,variant:`text`,disabled:unref(busy),onClick:_cache[5]||(_cache[5]=$event=>emit(`close`))},null,8,[`icon`,`aria-label`,`disabled`])):createCommentVNode(``,true)])),!__props.embedded?(openBlock(),createElementBlock(`p`,_hoisted_6$9,toDisplayString(provider.value.description)+`.`,1)):createCommentVNode(``,true),provider.value.setupNote?(openBlock(),createElementBlock(`p`,_hoisted_7$9,toDisplayString(provider.value.setupNote),1)):createCommentVNode(``,true),connectionStatus.value===`connected`&&!__props.embedded?(openBlock(),createElementBlock(`p`,_hoisted_8$8,` Saved for `+toDisplayString(engineLabel.value)+` only. Each tool has its own connection. `,1)):createCommentVNode(``,true),!__props.embedded?(openBlock(),createElementBlock(`div`,_hoisted_9$8,[(openBlock(true),createElementBlock(Fragment,null,renderList(provider.value.models,model=>{return openBlock(),createBlock(VChip,{key:model.id,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(model.label),1)]),_:2},1024)}),128))])):createCommentVNode(``,true),unref(loadError)?(openBlock(),createBlock(VAlert,{key:6,type:`error`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(loadError))+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>unref(resource).reload())},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),createVNode(CliInstallNotice_default,{account:__props.cliAccount,checking:__props.cliChecking,class:`mb-3`,onCheck:_cache[7]||(_cache[7]=$event=>emit(`check-cli`))},null,8,[`account`,`checking`]),unref(resource).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:7,type:`article, actions`})):!cliBlocked.value?(openBlock(),createBlock(VForm,{key:8,disabled:!__props.actionsEnabled||unref(busy),onSubmit:_cache[12]||(_cache[12]=withModifiers($event=>save(),[`prevent`]))},{default:withCtx(()=>[!useExistingKey.value?(openBlock(),createBlock(VTextField,{key:0,modelValue:apiKey.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>apiKey.value=$event),label:connectionStatus.value===`connected`?`Replace API key`:`API key`,type:visible.value?`text`:`password`,"append-inner-icon":visible.value?unref(mdiEyeOffOutline):unref(mdiEyeOutline),autocomplete:`off`,spellcheck:`false`,variant:`outlined`,hint:`Stored privately outside your projects. Existing keys are never shown.`,"persistent-hint":``,"onClick:appendInner":_cache[9]||(_cache[9]=$event=>visible.value=!visible.value)},null,8,[`modelValue`,`label`,`type`,`append-inner-icon`])):createCommentVNode(``,true),!__props.embedded?(openBlock(),createElementBlock(`p`,_hoisted_10$6,`Checks `+toDisplayString(engineLabel.value)+` only. This small request uses API credit or plan quota.`,1)):createCommentVNode(``,true),createBaseVNode(`div`,{class:normalizeClass([`d-flex flex-wrap ga-2 align-center`,{"mt-4":__props.embedded}])},[createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,loading:unref(busy)&&!confirmRemove.value,disabled:!__props.actionsEnabled||!unref(busy)&&!useExistingKey.value&&!apiKey.value.trim()||unref(busy)&&confirmRemove.value},{default:withCtx(()=>[createTextVNode(toDisplayString(useExistingKey.value||connectionStatus.value!==`connected`?`Check and connect`:`Check and replace key`),1)]),_:1},8,[`loading`,`disabled`]),!__props.adding&&connectionStatus.value===`connected`?(openBlock(),createBlock(VBtn,{key:0,variant:`outlined`,disabled:unref(busy)||!__props.actionsEnabled,onClick:_cache[10]||(_cache[10]=$event=>save({useSavedKey:true}))},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Check saved key`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),!__props.embedded?(openBlock(),createBlock(VBtn,{key:1,href:provider.value.keyUrl,target:`_blank`,rel:`noopener noreferrer`,variant:`text`,"append-icon":unref(mdiOpenInNew)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Get API key`,-1)])]),_:1},8,[`href`,`append-icon`])):createCommentVNode(``,true),!__props.adding&&!__props.embedded&&connectionStatus.value!==`not_connected`?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,disabled:!__props.actionsEnabled||unref(busy),onClick:_cache[11]||(_cache[11]=$event=>confirmRemove.value=true)},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(` Disconnect `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],2)]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(AiWaitStatus_default,{class:`mt-3`,active:unref(busy),label:confirmRemove.value?`Disconnecting ${provider.value.label}…`:`Checking the key with ${provider.value.label}. This can take up to a minute.`},null,8,[`active`,`label`]),provider.value.ownerOnly?(openBlock(),createBlock(AiPersonalUse_default,{key:9,"provider-id":providerId.value,variant:`note`,class:`text-body-small mt-3`},null,8,[`provider-id`])):createCommentVNode(``,true),confirmRemove.value?(openBlock(),createBlock(VAlert,{key:10,variant:`tonal`,class:`mt-3`},{default:withCtx(()=>[createTextVNode(` Disconnect `+toDisplayString(provider.value.label)+` from `+toDisplayString(engineLabel.value)+`? Work using this connection will stop. Your conversations and files remain. `,1),createBaseVNode(`div`,_hoisted_11$5,[createVNode(VBtn,{disabled:unref(busy),onClick:_cache[13]||(_cache[13]=$event=>confirmRemove.value=false)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Keep connected`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:unref(busy),onClick:_cache[14]||(_cache[14]=$event=>save({remove:true}))},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Disconnect`,-1)])]),_:1},8,[`loading`])])]),_:1})):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],64))],8,_hoisted_1$12)}}};var NativeProviderConnections_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-bbd421f7`]]);var codex_device_code_authorize_default=`/assets/codex-device-code-authorize-CJMiFx7C.png`;var codex_device_code_settings_default=`/assets/codex-device-code-settings-DuA-zGzh.png`;var CODEX_RECONNECT_REQUIRED_CODE=`vibe64_codex_reconnect_required`;var CODEX_RECONNECT_REQUIRED_MESSAGE=`Codex authentication was rejected. Reconnect Codex to continue.`;var DEFAULT_RECOVERY_POLL_INTERVAL_MS=3e4;var MAX_POLL_FAILURE_BACKOFF_MS=3e5;var AUTH_DEBUG_MARKER=`VIBE64_ACCOUNTS_DEBUG`;var AUTH_DEBUG_QUERY_PARAM=`vibe64_accounts_debug`;var AUTH_DEBUG_STORAGE_KEY=`vibe64:accounts-debug`;var CODEX_DEVICE_AUTH_URL=`https://auth.openai.com/codex/device`;var ANSI_ESCAPE_PATTERN$1=new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]*[@-~]`,`gu`);var VISIBLE_ANSI_ESCAPE_PATTERN$1=/\u00a4\[[0-?]*[ -/]*[@-~]/gu;var DEVICE_USER_CODE_PATTERN=/\b([A-Z0-9]{4}-[A-Z0-9]{4,8})\b/iu;function authDebug(event,fields={}){if(!isVibe64BrowserFlagEnabled({queryParam:AUTH_DEBUG_QUERY_PARAM,storageKey:AUTH_DEBUG_STORAGE_KEY}))return;console.debug(`[${AUTH_DEBUG_MARKER}] ${JSON.stringify({marker:AUTH_DEBUG_MARKER,timestamp:new Date().toISOString(),event,...fields})}`)}function useAccountAuthSessions(accounts,{accountRows,browserWindow=defaultBrowserWindow(),clearIntervalFn,clipboard=defaultClipboard(browserWindow),nowFn=Date.now,onConnected=()=>{},pollIntervalMs=DEFAULT_RECOVERY_POLL_INTERVAL_MS,setIntervalFn}={}){const activeSessions=reactive({});const authCopyStatus=reactive({});const localError=ref(``);const logoutAccountId=ref(``);const scheduler=createScheduler({browserWindow,clearIntervalFn,setIntervalFn});let pollTimer=null;let pollInFlight=false;let pollFailureCount=0;let nextPollAllowedAt=0;const authBusy=computed(()=>{return Object.values(activeSessions).some(session=>session?.status===`authenticating`)});const activeAuthSessionIds=computed(()=>{return new Set(Object.values(activeSessions).map(session=>String(session?.id||``).trim()).filter(Boolean))});const authSessionRealtime=useRealtimeEvent({enabled:computed(()=>activeAuthSessionIds.value.size>0),event:VIBE64_ACCOUNT_AUTH_SESSION_CHANGED_EVENT,matches({payload}={}){const sessionId=authSessionIdFromRealtimePayload(payload);return Boolean(sessionId)&&activeAuthSessionIds.value.has(sessionId)},async onEvent({payload}={}){const sessionId=authSessionIdFromRealtimePayload(payload);const session=await accounts.readAuthSession(sessionId);if(!isPlainAuthSession(session)||!session.id)return;authDebug(`client.auth.realtime.session`,authSessionDebugFields(session));await handleAuthSessionUpdate(session,{event:`client.auth.session.realtime`})}});const logoutBusy=computed(()=>Boolean(logoutAccountId.value));const errorMessage=computed(()=>{if(localError.value||unref(accounts.loadError))return localError.value||unref(accounts.loadError);return accounts.startAuthCommand?.messageType===`error`?accounts.startAuthCommand.message:``});function activeSessionFor(accountId){return activeSessions[accountId]||null}function loginDisabled(account={},authOptions={}){return authBusy.value||logoutBusy.value||account.connected===true&&account.gitIdentityRequired!==true||account.gitIdentityRequired===true&&!validGitIdentity(authOptions)}async function refreshStatus(){await accounts.refresh()}async function startBrowserAuth(accountId,authOptions={}){await startAuth(accountId,`browser`,authOptions)}async function startDeviceAuth(accountId=`codex`){await startAuth(accountId||`codex`,`device`)}async function startApiKeyAuth(accountId=`codex`,apiKey=``){await startAuth(accountId||`codex`,`api_key`,{apiKey})}async function startAuth(accountId,mode=`browser`,authOptions={}){localError.value=``;authDebug(`client.auth.start.request`,{accountId,mode});const account=accountFor(accountId);if(account?.gitIdentityRequired===true&&!validGitIdentity(authOptions)){localError.value=`Git user.name and user.email are required before GitHub login.`;authDebug(`client.auth.start.skip`,{accountId,reason:`missing_git_identity`});return}if(account?.connected===true&&account.gitIdentityRequired!==true){authDebug(`client.auth.start.skip`,{accountId,reason:`already_connected`});return}try{const startArgs=[accountId,mode];if(Object.keys(authOptions||{}).length)startArgs.push(authOptions);const session=await accounts.startAuth(...startArgs);authDebug(`client.auth.start.response`,authSessionDebugFields(session));if(!session?.id)throw new Error(`Login did not return an auth session.`);rememberAuthSession(session);await handleAuthSessionUpdate(session);if(authBusy.value)startRecoveryPolling()}catch(error){authDebug(`client.auth.start.error`,{accountId,message:String(error?.message||error||`Login could not start.`),mode});localError.value=String(error?.message||error||`Login could not start.`)}}async function logoutAccount(accountId){localError.value=``;logoutAccountId.value=String(accountId||``);try{await accounts.logout(accountId);await refreshStatus()}catch(error){localError.value=String(error?.message||error||`Logout failed.`)}finally{logoutAccountId.value=``}}async function cancelSession(session={}){if(!session.id)return;try{await accounts.cancelAuthSession(session.id);forgetSession(session);await refreshStatus();stopPollingIfIdle();return true}catch(error){localError.value=String(error?.message||error||`Login could not be cancelled. Try again.`);return false}}async function copyAuthUrl(session={}){const sessionId=String(session.id||``);const url=String(session.authUrl||``).trim();if(!sessionId||!url)return false;if(typeof clipboard?.writeText!==`function`){localError.value=`Auth link could not be copied because clipboard access is unavailable.`;return false}try{await clipboard.writeText(url);authCopyStatus[sessionId]=`Auth link copied.`;return true}catch(error){localError.value=String(error?.message||error||`Auth link could not be copied.`);return false}}async function copyAuthCode(session={}){const sessionId=String(session.id||``);const userCode=authSessionUserCode(session);if(!sessionId||!userCode)return false;if(typeof clipboard?.writeText!==`function`){localError.value=`One-time code could not be copied because clipboard access is unavailable.`;return false}try{await clipboard.writeText(userCode);authCopyStatus[sessionId]=`One-time code copied.`;return true}catch(error){localError.value=String(error?.message||error||`One-time code could not be copied.`);return false}}async function pollAuthSessions(){const sessions=Object.values(activeSessions).filter(session=>{return session?.id&&session.status===`authenticating`});authDebug(`client.auth.poll.start`,{sessionCount:sessions.length});if(!sessions.length){stopPolling();return}for(const session of sessions)try{const nextSession=await accounts.readAuthSession(session.id);authDebug(`client.auth.poll.response`,authSessionDebugFields(nextSession));if(!isPlainAuthSession(nextSession)||!nextSession.id)throw new Error(`Account login session did not return status.`);await handleAuthSessionUpdate(nextSession,{event:`client.auth.session.poll`,previousSession:session})}catch(error){const message=String(error?.message||error||`Login polling failed.`);authDebug(`client.auth.poll.error`,{accountId:session.account?.id||session.account||``,message,sessionId:session.id});localError.value=message;throw error}pollFailureCount=0;nextPollAllowedAt=0;stopPollingIfIdle()}function startRecoveryPolling(){if(pollTimer){authDebug(`client.auth.poll.reuse_timer`,{});return}authDebug(`client.auth.poll.start_timer`,{pollIntervalMs});pollTimer=scheduler.setInterval(()=>{runPollTick()},pollIntervalMs)}async function runPollTick(){const now=Number(typeof nowFn===`function`?nowFn():Date.now());if(pollInFlight||nextPollAllowedAt&&now<nextPollAllowedAt){authDebug(`client.auth.poll.skip_tick`,{inFlight:pollInFlight,nextPollAllowedAt});return}pollInFlight=true;try{await pollAuthSessions()}catch(error){pollFailureCount+=1;nextPollAllowedAt=now+pollFailureBackoffMs(pollFailureCount,pollIntervalMs);localError.value=String(error?.message||error||`Login polling failed.`)}finally{pollInFlight=false}}function stopPolling(){if(!pollTimer)return;authDebug(`client.auth.poll.stop_timer`,{});scheduler.clearInterval(pollTimer);pollTimer=null}function stopPollingIfIdle(){if(!Object.values(activeSessions).some(session=>session?.status===`authenticating`))stopPolling()}async function handleAuthSessionUpdate(nextSession={},{event=`client.auth.session.updated`,previousSession=null}={}){const accountId=authSessionAccountId(nextSession)||authSessionAccountId(previousSession);if(activeSessions[accountId]?.id!==nextSession.id)return;rememberAuthSession(nextSession);if(nextSession.status===`connected`){forgetSession(nextSession);localError.value=``;onConnected(nextSession.account);await refreshStatus();authDebug(`client.auth.session.connected`,{accountId,authSessionId:String(nextSession.id||previousSession?.id||``),event})}else if(nextSession.status===`failed`)await refreshStatus();stopPollingIfIdle()}function accountFor(accountId){return(Array.isArray(unref(accountRows))?unref(accountRows):[]).find(account=>account.id===accountId)||null}function openAuthUrl(session={}){const url=String(session.authUrl||``).trim();if(!url)return;browserWindow?.open?.(url,`_blank`,`noopener`)}function authSessionNeedsTerminalAttention(session={}){if(authSessionAccountId(session)===`claude`)return Boolean(session.id)&&session.status!==`connected`;return codexAuthSessionNeedsTerminalAttention(session)}function rememberAuthSession(session={}){const enrichedSession=enrichAuthSession(session);const accountId=enrichedSession.account?.id||enrichedSession.account||``;if(!accountId||!enrichedSession.id){authDebug(`client.auth.session.remember_skip`,{hasAccountId:Boolean(accountId),hasSessionId:Boolean(enrichedSession.id),status:enrichedSession.status||``});return}authDebug(`client.auth.session.remember`,authSessionDebugFields(enrichedSession));activeSessions[accountId]=enrichedSession}function forgetSession(session={}){const accountId=session.account?.id||session.account||``;if(!accountId)return;if(session.id)delete authCopyStatus[session.id];authDebug(`client.auth.session.forget`,{accountId,sessionId:session.id||``});delete activeSessions[accountId]}return{activeSessionFor,authCopyStatus,authLinkCopyStatus:authCopyStatus,authBusy,authSessionNeedsTerminalAttention,authSessionRealtime,cancelSession,copyAuthCode,copyAuthUrl,errorMessage,localError,loginDisabled,logoutAccount,logoutAccountId,logoutBusy,openAuthUrl,pollAuthSessions,refreshStatus,startBrowserAuth,startDeviceAuth,startApiKeyAuth,stopPolling}}function pollFailureBackoffMs(failureCount=1,pollIntervalMs=DEFAULT_RECOVERY_POLL_INTERVAL_MS){const interval=Number(pollIntervalMs);const base=Number.isFinite(interval)&&interval>0?interval:DEFAULT_RECOVERY_POLL_INTERVAL_MS;const count=Math.max(1,Number(failureCount)||1);return Math.min(base*2**count,MAX_POLL_FAILURE_BACKOFF_MS)}function authSessionDebugFields(session={}){const normalizedSession=plainAuthSession(session);return{accountId:normalizedSession.account?.id||normalizedSession.account||``,authUrlPresent:Boolean(normalizedSession.authUrl),exitCode:normalizedSession.exitCode??null,hasOutput:Boolean(normalizedSession.output),mode:normalizedSession.mode||``,outputLength:String(normalizedSession.output||``).length,outputTail:authSessionAccountId(normalizedSession)===`claude`?``:sanitizedAuthOutputTail(normalizedSession.output),sessionId:normalizedSession.id||``,status:normalizedSession.status||``,terminalStatus:normalizedSession.terminalStatus||``,userCodePresent:Boolean(normalizedSession.userCode)}}function sanitizedAuthOutputTail(output=``){return cleanAuthOutput(output).slice(-1200).replace(/https:\/\/[^\s"'<>]+/gu,url=>{try{const parsed=new URL(url.replace(/[),.;]+$/u,``));return`${parsed.origin}${parsed.pathname}`}catch{return`https://[redacted-url]`}}).replace(/\b[A-Z0-9]{4}-[A-Z0-9]{4,8}\b/gu,`[redacted-code]`)}function cleanAuthOutput(output=``){return String(output||``).replace(ANSI_ESCAPE_PATTERN$1,``).replace(VISIBLE_ANSI_ESCAPE_PATTERN$1,``)}function authSessionUserCode(session={}){const normalizedSession=plainAuthSession(session);const existing=String(normalizedSession.userCode||``).trim();if(existing)return existing.toUpperCase();if(normalizedSession.mode!==`device`)return``;return cleanAuthOutput(normalizedSession.output).match(DEVICE_USER_CODE_PATTERN)?.[1]?.toUpperCase()||``}function authSessionAccountId(session={}){const normalizedSession=plainAuthSession(session);return String(normalizedSession.account?.id||normalizedSession.account||``).trim()}function authSessionIdFromRealtimePayload(payload={}){const source=payload&&typeof payload===`object`&&!Array.isArray(payload)?payload:{};return String(source.sessionId||source.session?.id||source.id||``).trim()}function codexAuthSessionNeedsTerminalAttention(session={}){if(authSessionAccountId(session)!==`codex`||!session?.id||session.status===`connected`)return false;if(session.status===`failed`||session.terminalStatus===`exited`)return true;if(session.error||session.closeError||session.terminalError)return true;if(!cleanAuthOutput(session.output).trim())return false;if(session.mode===`device`)return!authSessionUserCode(session);return session.mode===`api_key`}function enrichAuthSession(session={}){if(!session||typeof session!==`object`||Array.isArray(session))return{};const userCode=authSessionUserCode(session);if(!userCode)return session;return{...session,authUrl:String(session.authUrl||``).trim()||CODEX_DEVICE_AUTH_URL,userCode}}function plainAuthSession(session={}){return session&&typeof session===`object`&&!Array.isArray(session)?session:{}}function isPlainAuthSession(session){return Boolean(session&&typeof session===`object`&&!Array.isArray(session))}function defaultBrowserWindow(){return typeof window===`undefined`?null:window}function defaultClipboard(browserWindow){return browserWindow?.navigator?.clipboard||globalThis.navigator?.clipboard||null}function createScheduler({browserWindow,clearIntervalFn,setIntervalFn}){return{clearInterval:clearIntervalFn||browserWindow?.clearInterval?.bind(browserWindow)||globalThis.clearInterval,setInterval:setIntervalFn||browserWindow?.setInterval?.bind(browserWindow)||globalThis.setInterval}}function validGitIdentity(input={}){const name=String(input.gitUserName||input.name||``).trim();const email=String(input.gitUserEmail||input.email||``).trim();return Boolean(name)&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/u.test(email)}var CHATGPT_SECURITY_SETTINGS_URL=`https://chatgpt.com/#settings/Security`;var ANSI_ESCAPE_PATTERN=new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]*[@-~]`,`gu`);var VISIBLE_ANSI_ESCAPE_PATTERN=/\u00a4\[[0-?]*[ -/]*[@-~]/gu;function useProviderAccountsSetup(props,{onConnected}={}){const accountRows=computed(()=>Array.isArray(props.accountRows)?props.accountRows:[]);const gitIdentityInputs=reactive({});const apiKeyInputs=reactive({});const apiKeyFormsVisible=reactive({});const statusReady=computed(()=>accountRows.value.length>0&&accountRows.value.every(account=>account.connected===true));const gitIdentitySaveBusy=computed(()=>props.accounts.saveGitIdentityCommand?.isRunning===true);const accountsLoading=computed(()=>Boolean(unref(props.accounts.isLoading)));const accountsReadyForActions=computed(()=>{return props.actionsEnabled===true&&props.statusLoaded===true&&!accountsLoading.value});const{activeSessionFor,authBusy,authCopyStatus,authSessionNeedsTerminalAttention:sessionNeedsTerminalAttention,cancelSession,copyAuthCode,errorMessage:authSessionErrorMessage,localError,loginDisabled,logoutAccount,logoutAccountId,openAuthUrl,refreshStatus,startApiKeyAuth,startBrowserAuth,startDeviceAuth,stopPolling}=useAccountAuthSessions(props.accounts,{accountRows,onConnected});const errorMessage=computed(()=>{if(authSessionErrorMessage.value)return authSessionErrorMessage.value;return props.accounts.saveGitIdentityCommand?.messageType===`error`?props.accounts.saveGitIdentityCommand.message:``});const codexAuthStepsBySessionId=reactive({});const authStartAccountId=ref(``);const authStartBusy=computed(()=>Boolean(authStartAccountId.value));const authTerminalSessionId=ref(``);const authTerminalExpanded=ref(false);const claudeCode=ref(``);const claudeCodePending=ref(false);const claudeCodeSubmitted=ref(false);const claudeCodeChecking=computed(()=>claudeCodePending.value||claudeCodeSubmitted.value);const authTerminal=useVibe64Terminal({driver:createWebSocketTerminalDriver({webSocketUrl:accountAuthTerminalWebSocketUrl}),resizeReportDelayMs:120});const authTerminalSession=computed(()=>{if(!authTerminalSessionId.value)return null;for(const account of accountRows.value){const session=activeSessionFor(account.id);if(session?.id===authTerminalSessionId.value)return session}return null});const authTerminalStage=computed(()=>{const status=String(authTerminal.terminalStatus.value||authTerminalSession.value?.status||``).trim();if(authTerminal.terminalStarting.value)return`Starting login`;if(status===`running`)return`Waiting for login`;if(status===`connected`)return`Connected`;if(status===`failed`||status===`exited`)return`Login stopped`;return`Login terminal`});const authTerminalTitle=computed(()=>{return`${String(authTerminalSession.value?.account?.label||`Account`).trim()} login terminal`});function accountStatusMessage(account={}){return account.connected?`${account.label} is connected.`:`${account.label} is not connected.`}function accountActiveSession(account={}){if(account.connected===true)return null;return activeSessionFor(account.id)}function activeAuthSessions(){return accountRows.value.map(account=>accountActiveSession(account)).filter(Boolean)}function requiresGitIdentity(account={}){return account.gitIdentityRequired===true}function gitIdentityInput(account={}){const accountId=String(account.id||``);if(!accountId)return{email:``,name:``};if(!gitIdentityInputs[accountId])gitIdentityInputs[accountId]={email:String(account.gitIdentity?.email||``),name:String(account.gitIdentity?.name||``)};return gitIdentityInputs[accountId]}function syncGitIdentityInput(account={}){if(!requiresGitIdentity(account))return;const input=gitIdentityInput(account);if(!input.name&&account.gitIdentity?.name)input.name=String(account.gitIdentity.name||``);if(!input.email&&account.gitIdentity?.email)input.email=String(account.gitIdentity.email||``)}function gitIdentityAuthOptions(account={}){const input=gitIdentityInput(account);return{gitUserEmail:input.email,gitUserName:input.name}}function accountLoginDisabled(account={}){if(authStartBusy.value)return true;if(requiresGitIdentity(account)&&account.connected===true)return gitIdentitySaveDisabled(account);return loginDisabled(account,requiresGitIdentity(account)?gitIdentityAuthOptions(account):{})}function gitIdentitySaveDisabled(account={}){return!accountsReadyForActions.value||gitIdentitySaveBusy.value||loginDisabled(account,gitIdentityAuthOptions(account))}function primaryAuthMode(account={}){const mode=String(account.authMode||``).trim().toLowerCase();if(mode)return mode;return account.deviceAuth===true?`device`:`browser`}async function startAccountAuth(account={}){if(!accountsReadyForActions.value||accountLoginDisabled(account))return;if(requiresGitIdentity(account)&&account.connected===true){await saveGitIdentity(account);return}const mode=primaryAuthMode(account);const options=requiresGitIdentity(account)?gitIdentityAuthOptions(account):{};const accountId=String(account.id||``);authStartAccountId.value=accountId;try{if(mode===`device`)await startDeviceAuth(accountId);else await startBrowserAuth(accountId,options)}finally{if(authStartAccountId.value===accountId)authStartAccountId.value=``}}async function saveGitIdentity(account={}){if(gitIdentitySaveDisabled(account))return;localError.value=``;try{await props.accounts.saveGitIdentity(gitIdentityAuthOptions(account));await refreshStatus()}catch(error){localError.value=String(error?.message||error||`Git identity could not be saved.`)}}function primaryAuthWaitLabel(account={}){if(requiresGitIdentity(account)&&account.connected===true)return`Saving your Git identity…`;return authStartAccountId.value===String(account.id||``)?`Starting ${account.label||`the`} sign-in. This can take up to a minute.`:`Sign-in in progress…`}function primaryAuthLabel(account={}){if(requiresGitIdentity(account)&&account.connected===true)return`Save Git identity`;return account.authLabel||`Auth ${account.label}`}function primaryAuthPending(account={}){if(requiresGitIdentity(account)&&account.connected===true)return gitIdentitySaveBusy.value;return authStartAccountId.value===String(account.id||``)||accountActiveSession(account)?.status===`authenticating`}function accountSupportsApiKeyAuth(account={}){return String(account.id||``)===`codex`&&account.connected!==true}function apiKeyInput(account={}){const accountId=String(account.id||``);if(!accountId)return{value:``};if(!apiKeyInputs[accountId])apiKeyInputs[accountId]={value:``};return apiKeyInputs[accountId]}function apiKeyFormVisible(account={}){return Boolean(apiKeyFormsVisible[String(account.id||``)])}function toggleApiKeyForm(account={}){if(!accountsReadyForActions.value)return;const accountId=String(account.id||``);if(!accountId)return;apiKeyFormsVisible[accountId]=!apiKeyFormsVisible[accountId]}function apiKeyLoginDisabled(account={}){return authStartBusy.value||authBusy.value||!apiKeyInput(account).value.trim()}async function startAccountApiKeyAuth(account={}){if(!accountsReadyForActions.value||apiKeyLoginDisabled(account))return;const input=apiKeyInput(account);const apiKey=input.value.trim();if(!apiKey)return;const accountId=String(account.id||``);authStartAccountId.value=accountId;try{await startApiKeyAuth(accountId,apiKey)}finally{input.value=``;if(authStartAccountId.value===accountId)authStartAccountId.value=``}}function isCodexDeviceSession(session={}){return String(session?.account?.id||``)===`codex`&&session?.mode===`device`}function codexAuthStep(session={}){if(!isCodexDeviceSession(session)||!session?.id)return`authorize`;return codexAuthStepsBySessionId[session.id]||`settings`}function setCodexAuthStep(session={},step=`settings`){if(!isCodexDeviceSession(session)||!session?.id)return;codexAuthStepsBySessionId[session.id]=step===`authorize`?`authorize`:`settings`}function codexSettingsStepVisible(session={}){return isCodexDeviceSession(session)&&codexAuthStep(session)===`settings`}function codexAuthorizeStepVisible(session={}){return isCodexDeviceSession(session)&&codexAuthStep(session)===`authorize`}function authSessionNeedsTerminalAttention(session={}){return sessionNeedsTerminalAttention(session)}function authTerminalVisible(session={}){return Boolean(session?.id&&authTerminalSessionId.value===session.id)}async function openAuthTerminal(session={}){if(!session?.id)return;if(authTerminalSessionId.value!==session.id){authTerminalExpanded.value=false;claudeCode.value=``;claudeCodeSubmitted.value=false}authTerminalSessionId.value=session.id;await authTerminal.attachTerminal(session,{ownership:`attached`,show:true})}function closeAuthTerminal(){claudeCode.value=``;claudeCodeSubmitted.value=false;authTerminalSessionId.value=``;authTerminal.hideTerminal({manual:true});authTerminal.disposeTerminalDisplay()}function updateAuthTerminalExpanded(value){authTerminalExpanded.value=Boolean(value)}async function submitClaudeCode(session){const code=claudeCode.value.trim();if(session?.account?.id!==`claude`||session.status!==`authenticating`||!accountsReadyForActions.value||claudeCodePending.value||!code)return;if(/[\s\p{Cc}]/u.test(code)||code.length>4096){localError.value=`Paste only the authorization code from Claude.`;return}claudeCodePending.value=true;localError.value=``;try{if(!authTerminalVisible(session))await openAuthTerminal(session);if(!await authTerminal.sendTerminalData(`${code}\r`))throw new Error(`The sign-in connection was interrupted. Try submitting the code again.`);claudeCode.value=``;claudeCodeSubmitted.value=true}catch(error){localError.value=error.message}finally{claudeCodePending.value=false}}async function retryAccountAuth(account,session){if(await cancelSession(session))await startAccountAuth(account)}function cleanAuthOutput(output=``){return String(output||``).replace(ANSI_ESCAPE_PATTERN,``).replace(VISIBLE_ANSI_ESCAPE_PATTERN,``)}function authSessionUserCode(session={}){const existing=String(session?.userCode||``).trim();if(existing)return existing.toUpperCase();if(session?.mode!==`device`)return``;return cleanAuthOutput([session?.output||``,authTerminalVisible(session)?authTerminal.terminalOutput.value:``].join(`
2
+ `)).match(/\b([A-Z0-9]{4}-[A-Z0-9]{4,8})\b/iu)?.[1]?.toUpperCase()||``}function authTerminalError(session={}){if(authSessionUserCode(session))return``;return authTerminal.terminalError.value}function sessionStatusMessage(session={}){if(session.status===`connected`)return`${session.account?.label||`Account`} is connected.`;if(session.account?.id===`claude`){if(session.status===`failed`)return`Claude sign-in did not finish. Try again, or open the login terminal for details.`;if(claudeCodeSubmitted.value)return`Checking your code with Claude. This can take up to a minute.`;return session.authUrl?`Sign in in the browser, then return here to finish connecting.`:`Starting Claude's sign-in. This can take up to a minute.`}if(authSessionNeedsTerminalAttention(session))return`Codex needs attention in the terminal. Review the terminal output and respond there.`;if(session.status===`failed`)return`Login did not finish cleanly. Review the logs and try again.`;if(session.mode===`api_key`)return`Signing in with the OpenAI API key. This can take up to a minute.`;if(session.mode===`device`&&authSessionUserCode(session))return`Enter the code in ChatGPT. This screen continues by itself once you approve it.`;if(session.mode===`device`)return`Starting the sign-in and getting your one-time code. This can take up to a minute.`;if(session.authUrl)return`Browser login is open. Complete authorization there, then Studio will continue.`;return`Starting the sign-in and getting its browser link. This can take up to a minute.`}function sessionWaiting(session={}){if(session.status===`failed`||session.status===`connected`)return false;if(session.account?.id===`claude`)return!session.authUrl||claudeCodeSubmitted.value;if(authSessionNeedsTerminalAttention(session))return false;if(session.mode===`api_key`)return true;return session.mode===`device`?!authSessionUserCode(session):!session.authUrl}onBeforeUnmount(()=>{stopPolling();authTerminal.disposeTerminalUi()});watch(authTerminalSession,session=>{if(!authTerminalSessionId.value)return;if(!session){closeAuthTerminal();return}authTerminal.applyTerminalSession(session,{preserveOutput:true})},{deep:true});watch(accountRows,rows=>{for(const account of rows)syncGitIdentityInput(account)},{deep:true,immediate:true});watch(()=>accountRows.value.map(account=>activeSessionFor(account.id)?.id).filter(Boolean),activeSessionIds=>{const activeSessionIdSet=new Set(activeSessionIds);for(const sessionId of Object.keys(codexAuthStepsBySessionId))if(!activeSessionIdSet.has(sessionId))delete codexAuthStepsBySessionId[sessionId]},{deep:true});watch(()=>activeAuthSessions().map(session=>[session.id,session.account?.id||session.account||``,session.mode||``,session.status||``,session.terminalStatus||``,session.outputVersion||0,String(session.output||``).length,String(session.userCode||``),String(session.closeError||session.error||session.terminalError||``)].join(`:`)),()=>{const sessions=activeAuthSessions();const selectedSession=sessions.find(session=>session.id===authTerminalSessionId.value)||sessions[0];if(!selectedSession){closeAuthTerminal();return}if(!authTerminalVisible(selectedSession))openAuthTerminal(selectedSession)},{immediate:true});return{CHATGPT_SECURITY_SETTINGS_URL,accountActiveSession,accountLoginDisabled,accountRows,accountStatusMessage,accountSupportsApiKeyAuth,accountsLoading,accountsReadyForActions,apiKeyFormVisible,apiKeyInput,apiKeyLoginDisabled,authSessionUserCode,authBusy,authStartBusy,authCopyStatus,authTerminal,authTerminalExpanded,authTerminalError,authTerminalStage,authTerminalTitle,authTerminalVisible,cancelSession,claudeCode,claudeCodeChecking,codexAuthorizeStepVisible,codexSettingsStepVisible,copyAuthCode,errorMessage,gitIdentityInput,logoutAccount,logoutAccountId,openAuthUrl,primaryAuthLabel,primaryAuthPending,primaryAuthWaitLabel,requiresGitIdentity,refreshStatus,retryAccountAuth,sessionStatusMessage,sessionWaiting,setCodexAuthStep,startAccountApiKeyAuth,startAccountAuth,submitClaudeCode,statusReady,toggleApiKeyForm,updateAuthTerminalExpanded}}var _hoisted_1$11={class:`accounts-setup`};var _hoisted_2$11={key:0,class:`accounts-setup__header`};var _hoisted_3$9={class:`accounts-setup__header-actions`};var _hoisted_4$9={key:0,class:`text-headline-small ma-0`};var _hoisted_5$8={key:0,class:`accounts-setup__close`};var _hoisted_6$8={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_7$8={class:`accounts-setup__items`};var _hoisted_8$7={key:1,class:`accounts-setup__item-main`};var _hoisted_9$7={class:`text-title-medium ma-0`};var _hoisted_10$5={class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_11$4={key:0,class:`accounts-setup__identity`};var _hoisted_12$3={key:1,class:`accounts-setup__identity`};var _hoisted_13$3={key:2,class:`accounts-setup__actions`};var _hoisted_14$3={key:0,class:`accounts-setup__identity-fields`};var _hoisted_15$3={key:4,class:`accounts-setup__api-key-form`};var _hoisted_16$2={key:3,class:`accounts-setup__session`};var _hoisted_17$2={key:0,"aria-label":`Connect Codex`,class:`accounts-setup__steps pa-0 mt-0 mb-2`};var _hoisted_18$2=[`aria-current`];var _hoisted_19$1={class:`accounts-setup__step-divider`,"aria-hidden":`true`};var _hoisted_20$1=[`aria-current`];var _hoisted_21$1={key:1,class:`accounts-setup__instruction-copy`};var _hoisted_22$1={class:`accounts-setup__settings-actions`};var _hoisted_23$1=[`src`];var _hoisted_24$1={key:2,class:`accounts-setup__instruction-copy`};var _hoisted_25$1=[`onSubmit`];var _hoisted_26$1={key:1,class:`text-body-medium text-medium-emphasis ma-0`,role:`status`};var _hoisted_27$1={key:3,class:`accounts-setup__instruction-copy`};var _hoisted_28$1={class:`accounts-setup__code-row`};var _hoisted_29$1={key:0,class:`accounts-setup__code text-headline-large`};var _hoisted_30$1={key:1,class:`text-body-medium ma-0`};var _hoisted_31$1={class:`accounts-setup__copy-status text-body-small text-medium-emphasis ma-0`,role:`status`};var _hoisted_32$1={key:2,class:`text-body-medium text-medium-emphasis ma-0`,role:`status`};var _hoisted_33$1=[`src`];var _hoisted_34$1={key:4,class:`accounts-setup__terminal`};var _sfc_main$15={__name:`ProviderAccountsSetup`,props:{accounts:{required:true,type:Object},actionsDisabledMessage:{default:``,type:String},actionsEnabled:{default:true,type:Boolean},accountRows:{default:()=>[],type:Array},backLabel:{default:``,type:String},continueLabel:{default:`Continue`,type:String},embedded:Boolean,lede:{default:``,type:String},neededLabel:{default:`Accounts needed`,type:String},readyLabel:{default:`Accounts ready`,type:String},showContinue:{default:true,type:Boolean},statusLoaded:{default:true,type:Boolean},title:{default:`Accounts`,type:String}},emits:[`back`,`continue`,`connected`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{CHATGPT_SECURITY_SETTINGS_URL,accountActiveSession,accountLoginDisabled,accountRows,accountStatusMessage,accountSupportsApiKeyAuth,accountsLoading,accountsReadyForActions,apiKeyFormVisible,apiKeyInput,apiKeyLoginDisabled,authSessionUserCode,authBusy,authStartBusy,authCopyStatus,authTerminal,authTerminalExpanded,authTerminalError,authTerminalStage,authTerminalTitle,authTerminalVisible,cancelSession,claudeCode,claudeCodeChecking,codexAuthorizeStepVisible,codexSettingsStepVisible,copyAuthCode,errorMessage,gitIdentityInput,logoutAccount,logoutAccountId,openAuthUrl,primaryAuthLabel,primaryAuthPending,primaryAuthWaitLabel,requiresGitIdentity,refreshStatus,retryAccountAuth,sessionStatusMessage,sessionWaiting,setCodexAuthStep,startAccountApiKeyAuth,startAccountAuth,submitClaudeCode,statusReady,toggleApiKeyForm,updateAuthTerminalExpanded}=useProviderAccountsSetup(props,{onConnected:account=>emit(`connected`,account)});const signInName=account=>({claude:`Claude`,codex:`ChatGPT`})[account.id]||account.label;const setupRows=computed(()=>accountRows.value.map(account=>{const session=accountActiveSession(account);return{account,session,userCode:session?authSessionUserCode(session):``,statusMessage:session?sessionStatusMessage(session):``,settingsStep:codexSettingsStepVisible(session),authorizeStep:codexAuthorizeStepVisible(session)}}));return(_ctx,_cache)=>{return openBlock(),createBlock(VDefaultsProvider,{defaults:{VBtn:{minHeight:48,rounded:`pill`}}},{default:withCtx(()=>[createBaseVNode(`section`,_hoisted_1$11,[!__props.embedded||__props.lede||_ctx.$slots.close||setupRows.value.some(({session,authorizeStep})=>session||authorizeStep)?(openBlock(),createElementBlock(`header`,_hoisted_2$11,[createBaseVNode(`div`,_hoisted_3$9,[!__props.embedded?(openBlock(),createElementBlock(`h1`,_hoisted_4$9,toDisplayString(__props.title),1)):createCommentVNode(``,true),!__props.embedded?(openBlock(),createBlock(VChip,{key:1,color:unref(statusReady)?`success`:void 0,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(statusReady)?__props.readyLabel:unref(authBusy)||unref(authStartBusy)?`Signing in`:__props.neededLabel),1)]),_:1},8,[`color`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(setupRows.value,({account,session,authorizeStep})=>{return openBlock(),createElementBlock(Fragment,{key:account.id},[authorizeStep?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,disabled:!unref(accountsReadyForActions),"prepend-icon":unref(mdiArrowLeft),variant:`text`,onClick:$event=>unref(setCodexAuthStep)(session,`settings`)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Previous step `,-1)])]),_:1},8,[`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),session?(openBlock(),createBlock(VBtn,{key:1,disabled:!unref(accountsReadyForActions)||!session.id,variant:`text`,onClick:$event=>unref(cancelSession)(session)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Cancel login `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),__props.backLabel&&!unref(authBusy)&&!__props.embedded?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>emit(`back`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.backLabel),1)]),_:1})):createCommentVNode(``,true),!unref(authBusy)&&!__props.embedded?(openBlock(),createBlock(VBtn,{key:3,"aria-busy":unref(accountsLoading)?`true`:void 0,color:`primary`,disabled:unref(accountsLoading),variant:`text`,"prepend-icon":unref(mdiRefresh),onClick:unref(refreshStatus)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(accountsLoading)?`Refreshing…`:`Refresh`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),unref(statusReady)&&__props.showContinue&&!__props.embedded?(openBlock(),createBlock(VBtn,{key:4,color:`primary`,disabled:!unref(accountsReadyForActions),variant:`flat`,onClick:_cache[1]||(_cache[1]=$event=>emit(`continue`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.continueLabel),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_ctx.$slots.close?(openBlock(),createElementBlock(`div`,_hoisted_5$8,[renderSlot(_ctx.$slots,`close`,{},void 0,true)])):createCommentVNode(``,true),__props.lede?(openBlock(),createElementBlock(`p`,_hoisted_6$8,toDisplayString(__props.lede),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),unref(errorMessage)?(openBlock(),createBlock(VAlert,{key:1,class:`accounts-setup__notice`,type:`error`,variant:`tonal`,border:`start`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(errorMessage)),1)]),_:1})):createCommentVNode(``,true),!__props.actionsEnabled&&__props.actionsDisabledMessage?(openBlock(),createBlock(VAlert,{key:2,class:`accounts-setup__notice`,type:`info`,variant:`tonal`,border:`start`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.actionsDisabledMessage),1)]),_:1})):createCommentVNode(``,true),unref(accountsLoading)&&unref(accountRows).length<1?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`list-item-avatar-two-line, actions`})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_7$8,[(openBlock(true),createElementBlock(Fragment,null,renderList(setupRows.value,({account,session,userCode,settingsStep,authorizeStep,statusMessage})=>{return openBlock(),createBlock(VSheet,{key:account.id,rounded:`xl`,border:!session,color:session?`transparent`:void 0,class:normalizeClass([`accounts-setup__item`,session?`pa-0`:`pa-4 pa-sm-6`,!unref(accountsReadyForActions)?`accounts-setup__item--busy`:``])},{default:withCtx(()=>[!session&&unref(cliProblem)(account)?(openBlock(),createBlock(CliInstallNotice_default,{key:0,account,checking:unref(accountsLoading),class:`mb-4`,onCheck:unref(refreshStatus)},{default:withCtx(()=>[__props.embedded?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>emit(`back`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Choose another AI`,-1)])]),_:1})):createCommentVNode(``,true)]),_:1},8,[`account`,`checking`,`onCheck`])):createCommentVNode(``,true),!session&&!unref(cliProblem)(account)&&(!__props.embedded||account.connected)?(openBlock(),createElementBlock(`div`,_hoisted_8$7,[createVNode(VIcon,{icon:account.connected?unref(mdiCheckCircle):unref(mdiAccountCircleOutline),color:account.connected?`success`:`primary`,size:`30`},null,8,[`icon`,`color`]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,_hoisted_9$7,toDisplayString(__props.embedded?`Signed in to ${signInName(account)}`:account.label),1),createBaseVNode(`p`,_hoisted_10$5,toDisplayString(account.message||unref(accountStatusMessage)(account)),1),account.username?(openBlock(),createElementBlock(`p`,_hoisted_11$4,toDisplayString(account.username),1)):account.previousUsername?(openBlock(),createElementBlock(`p`,_hoisted_12$3,` Previously linked: @`+toDisplayString(account.previousUsername),1)):createCommentVNode(``,true)])])):createCommentVNode(``,true),!session&&!unref(cliProblem)(account)?(openBlock(),createElementBlock(`div`,_hoisted_13$3,[unref(requiresGitIdentity)(account)?(openBlock(),createElementBlock(`div`,_hoisted_14$3,[createVNode(VTextField,{modelValue:unref(gitIdentityInput)(account).name,"onUpdate:modelValue":$event=>unref(gitIdentityInput)(account).name=$event,autocomplete:`name`,density:`compact`,"hide-details":`auto`,label:`Git user.name`,required:``,disabled:!unref(accountsReadyForActions),variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`]),createVNode(VTextField,{modelValue:unref(gitIdentityInput)(account).email,"onUpdate:modelValue":$event=>unref(gitIdentityInput)(account).email=$event,autocomplete:`email`,density:`compact`,"hide-details":`auto`,label:`Git user.email`,required:``,type:`email`,disabled:!unref(accountsReadyForActions),variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`])])):createCommentVNode(``,true),![`codex`,`claude`].includes(account.id)||!account.connected?(openBlock(),createBlock(VBtn,{key:1,"aria-busy":unref(primaryAuthPending)(account)?`true`:void 0,class:`accounts-setup__pending-action`,color:`primary`,variant:unref(apiKeyFormVisible)(account)?`text`:`flat`,disabled:!unref(accountsReadyForActions)||unref(accountLoginDisabled)(account)&&!unref(primaryAuthPending)(account),loading:unref(primaryAuthPending)(account),onClick:$event=>unref(startAccountAuth)(account)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(primaryAuthLabel)(account)),1)]),_:2},1032,[`aria-busy`,`variant`,`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),createVNode(AiWaitStatus_default,{class:`accounts-setup__wait`,active:unref(primaryAuthPending)(account),label:unref(primaryAuthWaitLabel)(account)},null,8,[`active`,`label`]),account.connected&&!__props.embedded?(openBlock(),createBlock(VBtn,{key:2,"aria-busy":unref(logoutAccountId)===account.id?`true`:void 0,color:`error`,variant:`text`,disabled:!unref(accountsReadyForActions)||unref(authBusy)||unref(authStartBusy)||unref(logoutAccountId)===account.id||!account.connected,onClick:$event=>unref(logoutAccount)(account.id)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(logoutAccountId)===account.id?`Disconnecting…`:`Disconnect`),1)]),_:2},1032,[`aria-busy`,`disabled`,`onClick`])):createCommentVNode(``,true),unref(accountSupportsApiKeyAuth)(account)?(openBlock(),createBlock(VBtn,{key:3,color:`primary`,variant:`tonal`,disabled:!unref(accountsReadyForActions)||unref(authBusy)||unref(authStartBusy),onClick:$event=>unref(toggleApiKeyForm)(account)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Use OpenAI API key `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true),unref(accountSupportsApiKeyAuth)(account)&&unref(apiKeyFormVisible)(account)?(openBlock(),createElementBlock(`div`,_hoisted_15$3,[createVNode(VTextField,{modelValue:unref(apiKeyInput)(account).value,"onUpdate:modelValue":$event=>unref(apiKeyInput)(account).value=$event,autocomplete:`off`,density:`compact`,"hide-details":`auto`,label:`OpenAI API key`,required:``,type:`password`,disabled:!unref(accountsReadyForActions)||unref(authStartBusy),variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`]),createVNode(VBtn,{"aria-busy":unref(primaryAuthPending)(account)?`true`:void 0,class:`accounts-setup__pending-action`,color:`primary`,variant:`flat`,disabled:!unref(accountsReadyForActions)||unref(apiKeyLoginDisabled)(account),loading:unref(primaryAuthPending)(account),onClick:$event=>unref(startAccountApiKeyAuth)(account)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Login with API key `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`loading`,`onClick`])])):createCommentVNode(``,true)])):createCommentVNode(``,true),session?(openBlock(),createElementBlock(`div`,_hoisted_16$2,[settingsStep||authorizeStep?(openBlock(),createElementBlock(`ol`,_hoisted_17$2,[createBaseVNode(`li`,{"aria-current":settingsStep?`step`:void 0,class:`d-flex align-center ga-2 text-label-large`},[createVNode(VAvatar,{color:`primary`,size:`28`,variant:settingsStep?`flat`:`tonal`},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` 1 `,-1)])]),_:1},8,[`variant`]),_cache[10]||(_cache[10]=createTextVNode(` Prepare `,-1))],8,_hoisted_18$2),createBaseVNode(`li`,_hoisted_19$1,[createVNode(VDivider)]),createBaseVNode(`li`,{"aria-current":authorizeStep?`step`:void 0,class:`d-flex align-center ga-2 text-label-large`},[createVNode(VAvatar,{color:authorizeStep?`primary`:void 0,size:`28`,variant:authorizeStep?`flat`:`tonal`},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` 2 `,-1)])]),_:1},8,[`color`,`variant`]),_cache[12]||(_cache[12]=createTextVNode(` Connect `,-1))],8,_hoisted_20$1)])):createCommentVNode(``,true),settingsStep?(openBlock(),createElementBlock(`div`,_hoisted_21$1,[_cache[17]||(_cache[17]=createBaseVNode(`h2`,{class:`text-title-large ma-0`},`Allow sign-in with a code`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis ma-0`},` In ChatGPT’s Security settings, turn on “Enable device code authorization for Codex”. `,-1)),createBaseVNode(`div`,_hoisted_22$1,[createVNode(VBtn,{class:`accounts-setup__settings-action`,color:`primary`,href:unref(CHATGPT_SECURITY_SETTINGS_URL),"append-icon":unref(mdiOpenInNew),rel:`noopener`,target:`_blank`,variant:`tonal`},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Open ChatGPT settings `,-1)])]),_:1},8,[`href`,`append-icon`]),createVNode(VBtn,{class:`accounts-setup__settings-action`,color:`primary`,disabled:!unref(accountsReadyForActions),variant:`flat`,onClick:$event=>unref(setCodexAuthStep)(session,`authorize`)},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` It’s enabled — continue `,-1)])]),_:1},8,[`disabled`,`onClick`])]),createVNode(VExpansionPanels,{variant:`accordion`,flat:``},{default:withCtx(()=>[createVNode(VExpansionPanel,{"bg-color":`transparent`,rounded:`lg`},{default:withCtx(()=>[createVNode(VExpansionPanelTitle,{"min-height":`48`,class:`text-body-medium px-0`},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Where is this setting? `,-1)])]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`img`,{alt:`ChatGPT Security settings with device code authorization for Codex enabled`,class:`accounts-setup__reference-image`,src:unref(codex_device_code_settings_default)},null,8,_hoisted_23$1),_cache[16]||(_cache[16]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis mt-3 mb-0`},` If your workspace manages this setting, ask a workspace admin to enable it. `,-1))]),_:1})]),_:1})]),_:1})])):account.id===`claude`?(openBlock(),createElementBlock(`div`,_hoisted_24$1,[_cache[26]||(_cache[26]=createBaseVNode(`h2`,{class:`text-title-large ma-0`},`Connect your Claude plan`,-1)),session.status!==`failed`?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[23]||(_cache[23]=createBaseVNode(`p`,{class:`text-body-medium ma-0`},`1. Sign in with the Claude account that has your subscription.`,-1)),createVNode(VBtn,{class:`accounts-setup__authorize-action`,color:`primary`,disabled:!unref(accountsReadyForActions),"append-icon":unref(mdiOpenInNew),loading:!session.authUrl,variant:`flat`,onClick:$event=>unref(openAuthUrl)(session)},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(` Continue to Claude `,-1)])]),_:1},8,[`disabled`,`append-icon`,`loading`,`onClick`]),createVNode(AiWaitStatus_default,{active:!session.authUrl,label:statusMessage},{slow:withCtx(()=>[createVNode(VBtn,{variant:`text`,color:`primary`,disabled:unref(authStartBusy),onClick:$event=>unref(retryAccountAuth)(account,session)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Start again`,-1)])]),_:1},8,[`disabled`,`onClick`])]),_:2},1032,[`active`,`label`]),_cache[24]||(_cache[24]=createBaseVNode(`p`,{class:`text-body-medium ma-0`},`2. Copy the authorization code from Claude and paste it here.`,-1)),createBaseVNode(`form`,{class:`d-flex flex-column ga-3`,onSubmit:withModifiers($event=>unref(submitClaudeCode)(session),[`prevent`])},[createVNode(VTextField,{modelValue:unref(claudeCode),"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>isRef(claudeCode)?claudeCode.value=$event:null),autocomplete:`one-time-code`,autocapitalize:`off`,spellcheck:false,label:`Authorization code`,placeholder:`Paste the code from Claude`,type:`password`,variant:`outlined`,"hide-details":`auto`,disabled:!unref(accountsReadyForActions)||!session.authUrl||unref(claudeCodeChecking)},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{class:`align-self-start`,color:`primary`,type:`submit`,variant:`flat`,disabled:!unref(accountsReadyForActions)||!unref(claudeCode).trim()&&!unref(claudeCodeChecking),loading:unref(claudeCodeChecking)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(` Connect Claude `,-1)])]),_:1},8,[`disabled`,`loading`]),createVNode(AiWaitStatus_default,{active:Boolean(session.authUrl)&&unref(claudeCodeChecking),label:statusMessage},{slow:withCtx(()=>[createVNode(VBtn,{variant:`text`,color:`primary`,disabled:unref(authStartBusy),onClick:$event=>unref(retryAccountAuth)(account,session)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Start again`,-1)])]),_:1},8,[`disabled`,`onClick`])]),_:2},1032,[`active`,`label`])],40,_hoisted_25$1)],64)):createCommentVNode(``,true),!unref(sessionWaiting)(session)?(openBlock(),createElementBlock(`p`,_hoisted_26$1,toDisplayString(statusMessage),1)):createCommentVNode(``,true),session.status===`failed`?(openBlock(),createBlock(VBtn,{key:2,class:`align-self-start`,color:`primary`,variant:`flat`,disabled:!unref(accountsReadyForActions)||unref(authStartBusy),onClick:$event=>unref(retryAccountAuth)(account,session)},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(` Try again `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_27$1,[userCode||authorizeStep?(openBlock(),createBlock(VSheet,{key:0,class:`accounts-setup__code-block pa-4`,color:`surface-light`,rounded:`lg`},{default:withCtx(()=>[_cache[27]||(_cache[27]=createBaseVNode(`p`,{class:`text-label-large text-medium-emphasis ma-0`},`One-time code`,-1)),createBaseVNode(`div`,_hoisted_28$1,[userCode?(openBlock(),createElementBlock(`p`,_hoisted_29$1,toDisplayString(userCode),1)):session?.status===`failed`?(openBlock(),createElementBlock(`p`,_hoisted_30$1,`Code unavailable`)):(openBlock(),createBlock(VSkeletonLoader,{key:2,"aria-label":`Waiting for your one-time code`,height:`48`,type:`heading`})),createVNode(VBtn,{"aria-label":`Copy one-time code`,color:`primary`,disabled:!unref(accountsReadyForActions)||!userCode,icon:unref(mdiContentCopy),size:`48`,title:`Copy one-time code`,variant:`tonal`,onClick:$event=>unref(copyAuthCode)(session)},null,8,[`disabled`,`icon`,`onClick`])]),createBaseVNode(`p`,_hoisted_31$1,[unref(authCopyStatus)[session.id]?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(toDisplayString(unref(authCopyStatus)[session.id]),1)],64)):userCode?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Copy this code before continuing.`)],64)):session.status===`failed`?(openBlock(),createElementBlock(Fragment,{key:2},[createTextVNode(`Cancel this attempt to try again.`)],64)):(openBlock(),createElementBlock(Fragment,{key:3},[createTextVNode(`Your code will appear here.`)],64))])]),_:2},1024)):createCommentVNode(``,true),authorizeStep||session?.authUrl?(openBlock(),createBlock(VBtn,{key:1,class:`accounts-setup__authorize-action`,color:`primary`,disabled:!unref(accountsReadyForActions)||!unref(sessionWaiting)(session)&&(!session?.authUrl||authorizeStep&&!userCode),"append-icon":unref(mdiOpenInNew),loading:unref(sessionWaiting)(session),variant:`flat`,onClick:$event=>unref(openAuthUrl)(session)},{default:withCtx(()=>[createTextVNode(toDisplayString(authorizeStep?`Continue to ChatGPT`:`Continue in browser`),1)]),_:2},1032,[`disabled`,`append-icon`,`loading`,`onClick`])):createCommentVNode(``,true),createVNode(AiWaitStatus_default,{active:unref(sessionWaiting)(session),label:statusMessage},{slow:withCtx(()=>[createVNode(VBtn,{variant:`text`,color:`primary`,disabled:unref(authStartBusy),onClick:$event=>unref(retryAccountAuth)(account,session)},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Start again`,-1)])]),_:1},8,[`disabled`,`onClick`])]),_:2},1032,[`active`,`label`]),statusMessage&&!unref(sessionWaiting)(session)?(openBlock(),createElementBlock(`p`,_hoisted_32$1,toDisplayString(statusMessage),1)):createCommentVNode(``,true),authorizeStep?(openBlock(),createBlock(VExpansionPanels,{key:3,variant:`accordion`,flat:``},{default:withCtx(()=>[createVNode(VExpansionPanel,{"bg-color":`transparent`,rounded:`lg`},{default:withCtx(()=>[createVNode(VExpansionPanelTitle,{"min-height":`48`,class:`text-body-medium px-0`},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(` What will I see in ChatGPT? `,-1)])]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`img`,{alt:`Codex device authorization page with one-time code entry fields`,class:`accounts-setup__reference-image`,src:unref(codex_device_code_authorize_default)},null,8,_hoisted_33$1)]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)])),unref(authTerminalVisible)(session)?(openBlock(),createElementBlock(`div`,_hoisted_34$1,[createVNode(Vibe64Terminal_default,{collapsible:true,"command-preview":unref(authTerminal).terminalCommandPreview.value,error:unref(authTerminalError)(session),expanded:unref(authTerminalExpanded),"mobile-takeover":``,presentation:`inline`,"show-close":false,"show-copy":``,"surface-class":`bg-surface-light`,stage:unref(authTerminalStage),status:unref(authTerminal).terminalStatus.value,subtitle:account.id===`claude`?`Open for sign-in details or to respond to Claude directly.`:`Use this only if the login asks for terminal input.`,terminal:unref(authTerminal),title:unref(authTerminalTitle),visible:true,"onUpdate:expanded":unref(updateAuthTerminalExpanded)},null,8,[`command-preview`,`error`,`expanded`,`stage`,`status`,`subtitle`,`terminal`,`title`,`onUpdate:expanded`])])):createCommentVNode(``,true)])):createCommentVNode(``,true)]),_:2},1032,[`border`,`color`,`class`])}),128))])])]),_:3})}}};var ProviderAccountsSetup_default=_plugin_vue_export_helper_default(_sfc_main$15,[[`__scopeId`,`data-v-5fcac264`]]);function accountsResourceQueryKey(){return computed(()=>accountsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,``))}function codexReconnectRequiredAccount(account={}){return{...account,code:CODEX_RECONNECT_REQUIRED_CODE,connected:false,id:`codex`,label:account.label||`Codex`,message:CODEX_RECONNECT_REQUIRED_MESSAGE,observed:account.observed||`Codex authentication was rejected during use.`,required:true,scope:account.scope||`app`,status:`reconnect_required`}}function statusWithCodexReconnectRequired(status={}){const source=status&&typeof status===`object`&&!Array.isArray(status)?status:{};const accounts=Array.isArray(source.accounts)?source.accounts:[];let codexAccountFound=false;const nextAccounts=accounts.map(account=>{if(String(account?.id||``).trim().toLowerCase()!==`codex`)return account;codexAccountFound=true;return codexReconnectRequiredAccount(account)});if(!codexAccountFound)nextAccounts.unshift(codexReconnectRequiredAccount());return{...source,accounts:nextAccounts,blockedReason:CODEX_RECONNECT_REQUIRED_MESSAGE,ok:source.ok!==false,ready:false}}function useVibe64Accounts({client=null}={}){const queryClient=useQueryClient();const forceRefresh=ref(false);const authSessionReadId=ref(``);const statusQueryKey=accountsResourceQueryKey();const statusResource=useEndpointResource({client,enabled:true,fallbackLoadError:`Account status could not load.`,path:ACCOUNTS_ENDPOINT,queryKey:statusQueryKey,readQuery:computed(()=>forceRefresh.value?{refresh:true}:null),realtime:{event:VIBE64_ACCOUNTS_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:`Account status`});const authSessionResource=useEndpointResource({client,enabled:false,fallbackLoadError:`Account login session could not load.`,path:computed(()=>authSessionReadId.value?`${ACCOUNTS_AUTH_ENDPOINT}/${encodeURIComponent(authSessionReadId.value)}`:``),queryKey:computed(()=>[`vibe64`,`accounts`,`auth-session`,authSessionReadId.value]),queryOptions:{retry:false},requestRecoveryLabel:`Account login session`});const startAuthCommand=useCommand({access:`never`,apiSuffix:VIBE64_ACCOUNTS_AUTH_API_SUFFIX,buildCommandOptions:()=>({method:`POST`}),buildRawPayload:(_model,{context})=>({accountId:String(context.accountId||``),...String(context.mode||``)===`api_key`?{apiKey:String(context.apiKey||``)}:{},gitUserEmail:String(context.gitUserEmail||``),gitUserName:String(context.gitUserName||``),mode:String(context.mode||`browser`)}),client,fallbackRunError:`Account login could not start.`,messages:{error:`Account login could not start.`,success:`Account login started.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.auth.start`,surfaceId:`app`,writeMethod:`POST`});const cancelAuthSessionCommand=useCommand({access:`never`,apiSuffix:VIBE64_ACCOUNTS_AUTH_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`DELETE`,path:`${ACCOUNTS_AUTH_ENDPOINT}/${encodeURIComponent(String(context?.sessionId||``))}`}),client,fallbackRunError:`Account login could not be cancelled.`,messages:{error:`Account login could not be cancelled.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.auth.cancel`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`DELETE`});const logoutCommand=useCommand({access:`never`,apiSuffix:`/vibe64/accounts/logout`,buildRawPayload:(_model,{context})=>({accountId:String(context?.accountId||``)}),client,fallbackRunError:`Account logout failed.`,messages:{error:`Account logout failed.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.logout`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});const saveGitIdentityCommand=useCommand({access:`never`,apiSuffix:VIBE64_ACCOUNTS_GIT_IDENTITY_API_SUFFIX,buildRawPayload:(_model,{context})=>({gitUserEmail:String(context.gitUserEmail||context.email||``),gitUserName:String(context.gitUserName||context.name||``)}),client,fallbackRunError:`Git identity could not be saved.`,messages:{error:`Git identity could not be saved.`,success:`Git identity saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.git-identity.save`,surfaceId:`app`,writeMethod:`POST`});const savePersonalAiProfileCommand=useCommand({access:`never`,apiSuffix:VIBE64_ACCOUNTS_PERSONAL_AI_PROFILE_API_SUFFIX,buildRawPayload:(_model,{context})=>({preferredName:String(context.preferredName||``)}),client,fallbackRunError:`Your name could not be saved.`,messages:{error:`Your name could not be saved.`,success:`Your name is saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.accounts.personal-ai-profile.save`,surfaceId:`app`,writeMethod:`PATCH`});async function startAuth(accountId,mode=`browser`,options={}){return startAuthCommand.run({accountId,apiKey:options.apiKey||``,gitUserEmail:options.gitUserEmail||options.email||``,gitUserName:options.gitUserName||options.name||``,mode})}async function readAuthSession(sessionId){authSessionReadId.value=String(sessionId||``).trim();if(!authSessionReadId.value)return null;return(await authSessionResource.reload())?.data||authSessionResource.data.value||null}async function cancelAuthSession(sessionId){return cancelAuthSessionCommand.run({sessionId})}async function logout(accountId){return logoutCommand.run({accountId})}async function saveGitIdentity(options={}){return saveGitIdentityCommand.run({gitUserEmail:options.gitUserEmail||options.email||``,gitUserName:options.gitUserName||options.name||``})}async function savePersonalAiProfile(options={}){const result=await savePersonalAiProfileCommand.run({preferredName:options.preferredName||``});await reloadLocalStatus();return result}async function refresh(){forceRefresh.value=true;try{return await statusResource.reload()}finally{forceRefresh.value=false}}async function reloadLocalStatus(){forceRefresh.value=false;return statusResource.reload()}function markCodexReconnectRequired(){queryClient.setQueryData(statusQueryKey.value,statusWithCodexReconnectRequired)}return{cancelAuthSession,isLoading:statusResource.isLoading,loadError:statusResource.loadError,logoutCommand,markCodexReconnectRequired,saveGitIdentity,saveGitIdentityCommand,savePersonalAiProfile,savePersonalAiProfileCommand,readAuthSession,reloadLocalStatus,refresh,logout,cancelAuthSessionCommand,startAuth,startAuthCommand,status:statusResource.data,authSessionResource,statusResource}}var _sfc_main$14={__name:`AIAccountsSetup`,props:{actionsDisabledMessage:{default:``,type:String},actionsEnabled:{default:true,type:Boolean},accountsClient:{default:null,type:Object},providerId:{default:`codex`,type:String},modelProviderId:{default:``,type:String},embedded:Boolean,backLabel:{default:``,type:String},continueLabel:{default:`Continue`,type:String},lede:{default:`Authenticate the shared AI accounts this Vibe64 environment uses.`,type:String},neededLabel:{default:`AI accounts needed`,type:String},readyLabel:{default:`AI accounts ready`,type:String},showContinue:{default:true,type:Boolean},title:{default:`AI Accounts`,type:String}},emits:[`back`,`continue`,`connected`],setup(__props,{emit:__emit}){const props=__props;const selectedModelProviderId=ref(``);watch(()=>[props.providerId,props.modelProviderId],([id,fixed])=>{selectedModelProviderId.value=fixed||(id===`claude`?`anthropic`:`openai`)},{immediate:true});const nativeLogin=computed(()=>[`openai`,`anthropic`].includes(selectedModelProviderId.value));const emit=__emit;const accounts=useVibe64Accounts({client:props.accountsClient});const statusLoaded=computed(()=>{return Boolean(accounts.status.value&&Array.isArray(accounts.status.value.accounts))});const aiAccountRows=computed(()=>{return[aiProviderRow((Array.isArray(accounts.status.value?.accounts)?accounts.status.value.accounts:[]).find(account=>String(account.id||``)===props.providerId)||{connected:false,id:props.providerId,label:props.providerId===`claude`?`Claude Code`:`Codex`,message:`Account status has not loaded yet.`,status:`unknown`})]});function aiProviderRow(account={}){if(account.id===`claude`)return{...account,authLabel:`Sign in with Claude`,authMode:`browser`,deviceAuth:false};return{...account,authLabel:`Login with ChatGPT`,authMode:`device`,deviceAuth:true}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[!__props.embedded&&[`codex`,`claude`].includes(__props.providerId)?(openBlock(),createBlock(NativeProviderConnections_default,{key:0,modelValue:selectedModelProviderId.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>selectedModelProviderId.value=$event),"engine-id":__props.providerId,"actions-enabled":__props.actionsEnabled,"cli-account":nativeLogin.value?{}:aiAccountRows.value[0],"cli-checking":Boolean(unref(accounts).isLoading.value),onCheckCli:_cache[1]||(_cache[1]=$event=>unref(accounts).refresh())},null,8,[`modelValue`,`engine-id`,`actions-enabled`,`cli-account`,`cli-checking`])):createCommentVNode(``,true),nativeLogin.value?(openBlock(),createBlock(ProviderAccountsSetup_default,{key:1,accounts:unref(accounts),"actions-disabled-message":__props.actionsDisabledMessage,"actions-enabled":__props.actionsEnabled,"account-rows":aiAccountRows.value,"back-label":__props.backLabel,"continue-label":__props.continueLabel,embedded:__props.embedded,lede:__props.embedded?``:__props.lede,"needed-label":__props.neededLabel,"ready-label":__props.readyLabel,"show-continue":__props.showContinue,"status-loaded":statusLoaded.value,title:__props.title,onBack:_cache[2]||(_cache[2]=$event=>emit(`back`)),onContinue:_cache[3]||(_cache[3]=$event=>emit(`continue`)),onConnected:_cache[4]||(_cache[4]=$event=>emit(`connected`,$event))},null,8,[`accounts`,`actions-disabled-message`,`actions-enabled`,`account-rows`,`back-label`,`continue-label`,`embedded`,`lede`,`needed-label`,`ready-label`,`show-continue`,`status-loaded`,`title`])):createCommentVNode(``,true)],64)}}};function useAiConnections({endpoint=AI_CONNECTIONS_ENDPOINT,catalogProviderId=``,enabled=true}={}){function providerPath(providerId=``,suffix=``){return`${endpoint}/${encodeURIComponent(String(providerId||``).trim())}${suffix}`}const normalizedCatalogProviderId=computed(()=>String(unref(catalogProviderId)||``).trim());const resource=useEndpointResource({enabled:computed(()=>Boolean(unref(enabled))),fallbackLoadError:`AI provider connections could not be loaded.`,path:endpoint,queryKey:[`vibe64`,`ai-connections`,endpoint],queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false},realtime:{event:VIBE64_CONNECTIONS_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:`AI provider connections`});const catalogResource=useEndpointResource({enabled:false,fallbackLoadError:`OpenCode providers could not be loaded.`,path:`${endpoint}/catalog`,queryKey:computed(()=>[`vibe64`,`ai-connections`,endpoint,`assistant-capabilities`,`opencode-provider`,normalizedCatalogProviderId.value||`none`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false,retry:false},readQuery:computed(()=>({engineId:`opencode`,limit:`100`,modelProviderId:normalizedCatalogProviderId.value})),requestRecoveryLabel:`OpenCode providers`});const registryResource=useEndpointResource({enabled:false,fallbackLoadError:`OpenCode providers could not be loaded.`,path:`${endpoint}/catalog`,queryKey:[`vibe64`,`ai-connections`,endpoint,`assistant-capabilities`,`opencode-providers`],queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false,retry:false},readQuery:computed(()=>({engineId:`opencode`})),requestRecoveryLabel:`OpenCode providers`});const saveCommand=useCommand({access:`never`,apiSuffix:endpoint.replace(/^\/api/u,``),buildCommandOptions:(_model,{context})=>({method:`PATCH`,path:providerPath(context?.providerId)}),buildRawPayload:(_model,{context})=>({apiKey:String(context?.apiKey||``),label:String(context?.label||``),providerRevision:String(context?.providerRevision||``)}),fallbackRunError:`The AI provider key could not be saved.`,fieldErrorKeys:[`apiKey`],messages:{error:`The AI provider key could not be saved.`,success:`AI provider connected.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.account.ai-connections.save`,surfaceId:`app`,writeMethod:`PATCH`});const removeCommand=useCommand({access:`never`,apiSuffix:endpoint.replace(/^\/api/u,``),buildCommandOptions:(_model,{context})=>({method:`POST`,path:providerPath(context?.providerId,`/remove`)}),buildRawPayload:()=>({}),fallbackRunError:`The AI provider connection could not be removed.`,messages:{error:`The AI provider connection could not be removed.`,success:`AI provider disconnected.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.account.ai-connections.remove`,surfaceId:`app`,writeMethod:`POST`});const modelAccessCommand=useCommand({access:`never`,apiSuffix:endpoint.replace(/^\/api/u,``),buildCommandOptions:(_model,{context})=>({method:`PATCH`,path:providerPath(context?.providerId,`/model-access`)}),buildRawPayload:(_model,{context})=>{const operation=String(context?.operation||``);return{operation,...[`disable-additional`,`enable-all`].includes(operation)?{unlocked:operation===`enable-all`}:{}}},fallbackRunError:`Provider model access could not be changed.`,messages:{error:`Provider model access could not be changed.`,success:`Provider model access updated.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.account.ai-connections.model-access`,surfaceId:`app`,writeMethod:`PATCH`});const savingProviderId=ref(``);const removingProviderId=ref(``);const updatingModelAccessProviderId=ref(``);const connections=computed(()=>Array.isArray(resource.data.value?.connections)?resource.data.value.connections:[]);function openCodeEngine(data=null){return(Array.isArray(data?.engines)?data.engines:[]).find(engine=>String(engine?.engineId||``)===`opencode`)||null}const catalogEngine=computed(()=>openCodeEngine(catalogResource.data.value));const catalogProviders=computed(()=>Array.isArray(catalogEngine.value?.modelProviders)?catalogEngine.value.modelProviders:[]);const catalogProvider=computed(()=>catalogProviders.value.find(provider=>String(provider?.id||``)===normalizedCatalogProviderId.value)||null);const catalogLoadError=computed(()=>vibe64ResourceResponseError(catalogResource.data.value,`OpenCode providers could not be loaded.`)||catalogResource.loadError.value);const registryProviders=computed(()=>{const engine=openCodeEngine(registryResource.data.value);return Array.isArray(engine?.modelProviders)?engine.modelProviders:[]});const registryLoadError=computed(()=>vibe64ResourceResponseError(registryResource.data.value,`OpenCode providers could not be loaded.`)||registryResource.loadError.value);const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value,`AI provider connections could not be loaded.`)||resource.loadError.value);async function saveConnection(input={}){const providerId=String(input.providerId||input.modelProviderId||``).trim();if(!providerId||savingProviderId.value)return null;savingProviderId.value=providerId;try{const response=await saveCommand.run({...input,providerId});if(response?.ok!==false)await resource.reload();return response}finally{savingProviderId.value=``}}async function removeConnection(providerId=``){const id=String(providerId||``).trim();if(!id||removingProviderId.value)return null;removingProviderId.value=id;try{const response=await removeCommand.run({providerId:id});if(response?.ok!==false)await resource.reload();return response}finally{removingProviderId.value=``}}async function updateModelAccess(providerId=``,operation=``){const id=String(providerId||``).trim();const requestedOperation=String(operation||``).trim();if(!id||!requestedOperation||updatingModelAccessProviderId.value)return null;updatingModelAccessProviderId.value=id;try{const response=await modelAccessCommand.run({operation:requestedOperation,providerId:id});if(response?.ok!==false)await resource.reload();return response}finally{updatingModelAccessProviderId.value=``}}return{catalogEngine,catalogLoadError,catalogProvider,connections,isInitialLoading:resource.isInitialLoading,loadError,reload:resource.reload,reloadCatalog:catalogResource.reload,reloadRegistry:registryResource.reload,removeConnection,removingProviderId,registryIsFetching:registryResource.isFetching,registryIsInitialLoading:registryResource.isInitialLoading,registryLoadError,registryLoaded:computed(()=>Boolean(openCodeEngine(registryResource.data.value))),registryProviders,saveConnection,savingProviderId,updateModelAccess,updatingModelAccessProviderId}}var PROVIDER_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;var PROVIDER_REVISION_PATTERN=/^sha256:[a-f0-9]{64}$/u;var AI_CONNECTION_MANAGER_KEY=Symbol(`vibe64.aiConnectionManager`);function useAiConnectionManager({endpoint=AI_CONNECTIONS_ENDPOINT,isOwner=false,emit=()=>null,followRoute=true}={}){const owner=computed(()=>Boolean(unref(isOwner)));const route=useRoute();const router=useRouter();const addAiOpen=ref(false);const nativeSetupOpen=ref(false);const nativeProviderPickerOpen=ref(false);const nativeSetupOrigin=ref(`manage`);const nativeSetupProviderId=ref(`codex`);const nativeSetupActivator=ref(null);const editorActivator=ref(null);const nativeRemoving=ref(false);const providerPickerOpen=ref(false);const providerPickerPending=ref(false);const providerSearch=ref(``);const catalogProviderId=ref(``);const preparedChoice=ref(null);const preparingProviderId=ref(``);const catalogPreparationError=ref(``);const editorOpen=ref(false);const routingOpen=ref(false);const routingSetup=ref(`owner`);const teamKeyRequests=ref(0);const routingSaving=ref(false);const editorRoutingPending=ref(false);const editorRoutingSetupError=ref(``);const nativeRoutingReady=ref(false);const nativeRoutingSetupError=ref(``);const editorOrigin=ref(`direct`);const editorProviderId=ref(``);const editorProviderRevision=ref(``);const editorLabel=ref(``);const editorApiKey=ref(``);const editorApiKeyVisible=ref(false);const editorError=ref(``);const removeOpen=ref(false);const removeTarget=ref(null);const modelAccessConfirmOpen=ref(false);const modelAccessTarget=ref(null);const refreshingAll=ref(false);let hydratedRequestIdentity=``;let providerPreparationId=0;let zenProgressDisposed=false;let zenProgressTimer=null;const nativeAccounts=useVibe64Accounts();const codexProviders=useCodexProviderConnections({enabled:owner});const nativeModelProviderId=ref(`openai`);const codexProviderSaving=ref(false);const{catalogEngine,catalogLoadError,catalogProvider,connections,isInitialLoading,loadError,reload,reloadCatalog,reloadRegistry,removeConnection,removingProviderId,registryIsFetching,registryIsInitialLoading,registryLoadError,registryLoaded,registryProviders,saveConnection,savingProviderId,updateModelAccess,updatingModelAccessProviderId}=useAiConnections({endpoint,catalogProviderId,enabled:owner});function queryText(value){return String(Array.isArray(value)?value[0]:value||``).trim()}const pendingProvider=computed(()=>{if(!followRoute)return null;const id=queryText(route.query.providerId);const providerRevision=queryText(route.query.providerRevision);if(!PROVIDER_ID_PATTERN.test(id)||!PROVIDER_REVISION_PATTERN.test(providerRevision))return null;return{id,label:queryText(route.query.providerLabel)||id,providerRevision}});const codexAccount=computed(()=>{return(Array.isArray(nativeAccounts.status.value?.accounts)?nativeAccounts.status.value.accounts:[]).find(account=>String(account?.id||``)===`codex`)||null});const codexConnected=computed(()=>codexAccount.value?.connected===true);const claudeAccount=computed(()=>nativeAccounts.status.value?.accounts?.find(account=>account.id===`claude`)||null);const claudeConnected=computed(()=>claudeAccount.value?.connected===true);function nativeAccountConfigured(account){return account?.connected===true||account?.previouslyLinked===true||[`reconnect_required`,`reconnecting`].includes(account?.status)}const nativeSetupAccount=computed(()=>nativeSetupProviderId.value===`claude`?claudeAccount.value:codexAccount.value);const nativeSetupConnected=computed(()=>nativeSetupAccount.value?.connected===true);const nativeSetupDetails=computed(()=>nativeSetupProviderId.value===`claude`?{label:`Claude Code`,authLabel:`Sign in with Claude`,authMode:`browser`,deviceAuth:false,message:`Connect your Claude subscription. Sign in in your browser, then paste the authorization code here.`}:{label:`Codex`,authLabel:`Login with ChatGPT`,authMode:`device`,deviceAuth:true,message:`Choose ChatGPT login or an OpenAI API key.`});const nativeChoices=computed(()=>[{id:`claude`,label:`Claude Code`,account:claudeAccount.value,provider:{id:`anthropic`,label:`Claude`,description:`Claude subscription`}},{id:`codex`,label:`Codex`,account:codexAccount.value,provider:{id:`openai`,label:`GPT`,description:`ChatGPT login or OpenAI API key`}}].map(({account,provider,...engine})=>({...engine,providers:[...!nativeAccountConfigured(account)?[provider]:[],...CURATED_CODEX_PROVIDERS.filter(({id})=>!codexProviders.connections.value.some(connection=>connection.id===id&&connection.configuredEngines?.includes(engine.id)))]})).filter(engine=>engine.providers.length));const nativeAvailableProviders=computed(()=>nativeChoices.value.find(engine=>engine.id===nativeSetupProviderId.value)?.providers||[]);const nativeSetupToolProblem=computed(()=>cliProblem(nativeSetupAccount.value)?nativeSetupAccount.value.status:``);const nativeSetupRows=computed(()=>[{...nativeSetupAccount.value||{connected:false,id:nativeSetupProviderId.value,status:`missing`},...nativeSetupDetails.value,label:nativeSetupToolProblem.value?nativeSetupDetails.value.label:nativeSetupAccount.value?.username||`${nativeSetupDetails.value.label} account`,username:``,message:nativeSetupConnected.value?`Connected`:nativeSetupToolProblem.value?nativeSetupAccount.value.message:nativeSetupDetails.value.message}]);function missingTool(id=``){return nativeAccounts.status.value?.missingTools?.find(tool=>tool.id===id)||null}const checkingOpenCode=ref(false);async function checkOpenCodeAgain(){checkingOpenCode.value=true;try{await nativeAccounts.refresh()}finally{checkingOpenCode.value=false}if(!missingTool(`opencode`))await openProviderPicker()}const configuredAiRows=computed(()=>[...nativeAccountConfigured(codexAccount.value)?[{ownerOnly:codexAccount.value?.ownerOnly,billingLabel:codexAccount.value?.username||`Codex account`,engineId:`codex`,id:`codex`,kind:`codex`,modelProviderId:`openai`,connected:codexConnected.value,keyHint:codexConnected.value?`Connected`:`Reconnect required`,managementUrl:``,modelLabel:`Available for Codex sessions`,providerLabel:`GPT`}]:[],...nativeAccountConfigured(claudeAccount.value)?[{ownerOnly:true,billingLabel:claudeAccount.value?.username||`Claude account`,engineId:`claude`,id:`claude`,kind:`claude`,modelProviderId:`anthropic`,connected:claudeConnected.value,keyHint:claudeConnected.value?`Connected`:`Reconnect required`,managementUrl:`https://claude.ai/settings/billing`,modelLabel:`Choose its models in Models`,providerLabel:`Anthropic`}]:[],...codexProviders.connections.value.flatMap(connection=>{const provider=curatedCodexProvider(connection.id);return(connection.configuredEngines||[]).map(engineId=>({...connection,engineId,connected:engineId===`claude`?connection.claudeReady:connection.connected,kind:`codex-provider`,modelProviderId:connection.id,providerLabel:provider.label,billingLabel:provider.description,ownerOnly:Boolean(provider.ownerOnly),keyHint:(engineId===`claude`?connection.claudeReady:connection.connected)?`Connected`:`Reconnect required`,modelLabel:provider.models.map(({label})=>label).join(` · `)}))}),...connections.value.map(connection=>({...connection,engineId:`opencode`,kind:`opencode`,modelProviderId:connection.id,modelLabel:connection.id===`zai`?`GLM-4.7 Flash is ready for new sessions`:connection.id===`opencode`?`Zen key ready; choose model access below`:`Choose its models in Models`,providerLabel:connection.productLabel||connection.label}))]);const configuredAiGroups=computed(()=>[{id:`claude`,label:`Claude Code`},{id:`codex`,label:`Codex`},{id:`opencode`,label:`OpenCode`}].map(engine=>({...engine,accounts:configuredAiRows.value.filter(account=>account.engineId===engine.id)})).filter(engine=>engine.accounts.length));const aiStatusLoaded=computed(()=>Boolean(nativeAccounts.status.value&&Array.isArray(nativeAccounts.status.value.accounts)));const nativeLoadError=computed(()=>String(nativeAccounts.loadError.value||codexProviders.loadError.value||``));const accountsInitialLoading=computed(()=>Boolean(isInitialLoading.value||codexProviders.resource.isInitialLoading.value||!aiStatusLoaded.value&&nativeAccounts.isLoading.value));const configuredProviderIds=computed(()=>new Set(connections.value.map(connection=>String(connection.id||``))));const availableProviders=computed(()=>registryProviders.value.filter(provider=>!configuredProviderIds.value.has(String(provider?.id||``))));const openCodeAddAvailable=computed(()=>!registryLoaded.value||Boolean(registryLoadError.value)||availableProviders.value.some(provider=>!providerUnavailableReason(provider)));const canAddConnection=computed(()=>nativeChoices.value.length>0||openCodeAddAvailable.value);const filteredProviders=computed(()=>{const search=providerSearch.value.trim().toLocaleLowerCase();if(!search)return availableProviders.value;return availableProviders.value.filter(provider=>`${provider?.label||``}\n${provider?.id||``}\n${provider?.description||``}`.toLocaleLowerCase().includes(search))});const providerPickerLoading=computed(()=>Boolean(providerPickerPending.value||registryIsInitialLoading.value||registryIsFetching.value&&!registryProviders.value.length));const existingEditorConnection=computed(()=>connections.value.find(connection=>connection.id===editorProviderId.value)||null);const editorConnectionPolicy=computed(()=>catalogProvider.value?.id===editorProviderId.value?catalogProvider.value.connectionPolicy||null:null);const editorRouteExplanation=computed(()=>{const policy=editorConnectionPolicy.value;if(!policy)return``;const access=policy.accessLabel===`Workspace use`?`Authorized workspace members may use this connection.`:`Only the Vibe64 owner may use this connection; members can suggest main-chat messages for approval.`;const replacement=existingEditorConnection.value?` Saving a replacement restarts active assistant runtimes with the new key.`:``;const routeNote=String(policy.routeNote||``).trim();return`${policy.billingLabel}. ${routeNote?`${routeNote} `:``}${access}${replacement}`});const editorCatalogModelCount=computed(()=>catalogProvider.value?.id===editorProviderId.value?Number(catalogEngine.value?.page?.total||catalogProvider.value?.models?.length||0):0);const editorPreparing=computed(()=>preparingProviderId.value===editorProviderId.value);const editorSaving=computed(()=>Boolean(editorProviderId.value)&&savingProviderId.value===editorProviderId.value);const editorVerificationCopy=computed(()=>{if(editorPreparing.value)return`Loading the current OpenCode provider details. You can paste the key now; verification becomes available when they are ready.`;if(editorProviderId.value===`zai`)return editorSaving.value?`Checking this key with one tiny GLM-4.7 Flash request on Z.AI's regular API before saving…`:`Vibe64 verifies this key with one tiny GLM-4.7 Flash request on Z.AI's regular API before storing it in a host-private file.`;if(editorProviderId.value===`zai-coding-plan`)return editorSaving.value?`Checking this key through Z.AI's Personal Coding Plan route before saving…`:`Vibe64 verifies this key through Z.AI's Personal Coding Plan route before storing it in a host-private file.`;return editorSaving.value?`Checking access with one tiny ${editorLabel.value||`provider`} test request before saving. First use can take up to 30 seconds…`:`Vibe64 checks the key and runs a tiny test request before storing it in a host-private file.`});const editorCanSave=computed(()=>Boolean(editorProviderId.value&&PROVIDER_REVISION_PATTERN.test(editorProviderRevision.value)&&editorConnectionPolicy.value&&editorApiKey.value.trim()&&!editorError.value&&!editorPreparing.value&&!editorSaving.value));const editorBackLabel=computed(()=>[`add`,`provider-picker`].includes(editorOrigin.value)?`Back`:`Cancel`);const editorEyebrow=computed(()=>{return existingEditorConnection.value?`Manage connection`:`Add connection`});const editorTitle=computed(()=>{if(existingEditorConnection.value){if(editorProviderId.value===`zai`)return`Update regular Z.AI API key`;if(editorProviderId.value===`zai-coding-plan`)return`Update Z.AI Personal Coding Plan key`;return`Replace provider key`}if(editorProviderId.value===`zai`)return`Connect regular Z.AI API`;if(editorProviderId.value===`zai-coding-plan`)return`Connect Z.AI Personal Coding Plan`;return`Connect ${editorLabel.value||`provider`}`});const removeRunning=computed(()=>codexProviders.busy.value||([`codex`,`claude`].includes(removeTarget.value?.kind)?nativeRemoving.value:Boolean(removingProviderId.value)&&removingProviderId.value===String(removeTarget.value?.id||``)));const modelAccessRunning=computed(()=>Boolean(updatingModelAccessProviderId.value)&&updatingModelAccessProviderId.value===String(modelAccessTarget.value?.id||``));const zenCheckRunning=computed(()=>connections.value.some(connection=>connection.id===`opencode`&&[`starting`,`running`,`cancelling`].includes(connection.modelAccess?.check?.status)));function zenCheck(account={}){return account.modelAccess?.check||{}}function zenCheckIsRunning(account={}){return[`starting`,`running`,`cancelling`].includes(zenCheck(account).status)}function zenCheckProgress(account={}){const check=zenCheck(account);return check.total>0?Math.min(100,check.checked/check.total*100):0}function zenAccessTitle(account={}){const mode=account.modelAccess?.mode;const check=zenCheck(account);if(zenCheckIsRunning(account))return check.status===`cancelling`?`Stopping model check…`:`Checking Zen models…`;if(mode===`all`)return`All current Zen models enabled`;if(mode===`verified`)return`${Number(check.enabled||0)} additional Zen models enabled`;return`Recommended Zen model only`}function zenCheckSummary(account={}){const check=zenCheck(account);if(!check.status)return``;if(zenCheckIsRunning(account))return`${check.total>0?`${check.checked} of ${check.total} checked`:`Reading the current Zen catalogue`}${check.currentModelId?` · Now checking ${check.currentModelId}`:``}`;const unchecked=Math.max(0,Number(check.total||0)-Number(check.checked||0));const result=`${Number(check.enabled||0)} enabled · ${Number(check.rejected||0)} rejected · ${Number(check.retryable||0)} could not be confirmed · ${unchecked} unchecked`;return check.message?`${result}. ${check.message}`:result}function scheduleZenProgressRefresh(){if(zenProgressDisposed||zenProgressTimer||!zenCheckRunning.value)return;zenProgressTimer=setTimeout(async()=>{zenProgressTimer=null;try{await reload()}finally{scheduleZenProgressRefresh()}},2e3)}function providerUnavailableReason(provider={}){if(provider.apiKeyCompatible===false)return`Requires provider-specific account details`;if(!String(provider.defaultModelId||``).trim())return`No usable default model is currently available`;return``}async function openProviderPicker(){const requestAlreadyPending=providerPickerPending.value;providerPickerPending.value=true;addAiOpen.value=false;providerPickerOpen.value=true;if(requestAlreadyPending)return;try{await reloadRegistry()}catch{}finally{providerPickerPending.value=false}}function chooseAiType(type=``){if([`codex`,`claude`].includes(type)){if(!nativeChoices.value.some(choice=>choice.id===type))return;nativeSetupProviderId.value=type;nativeSetupActivator.value=document.activeElement;addAiOpen.value=false;nativeProviderPickerOpen.value=true;return}if(type===`opencode`)openProviderPicker()}function chooseNativeProvider(providerId){if(!nativeAvailableProviders.value.some(provider=>provider.id===providerId))return;nativeModelProviderId.value=providerId;nativeSetupOrigin.value=`add`;nativeProviderPickerOpen.value=false;nativeSetupOpen.value=true}function backFromNativeSetup(){nativeSetupOpen.value=false;nativeProviderPickerOpen.value=true}watch(addAiOpen,async open=>{if(!open)return;try{await reloadRegistry()}catch{}});async function refreshAllAccounts(){if(refreshingAll.value)return;refreshingAll.value=true;try{await Promise.allSettled([reload(),nativeAccounts.refresh(),codexProviders.resource.reload()])}finally{refreshingAll.value=false}}async function chooseProvider(choice={},{origin=`direct`,preserveInput=false}={}){const id=String(choice.id||``);if(!id||preparingProviderId.value)return;if(origin===`provider-picker`&&configuredProviderIds.value.has(id))return;if(!preserveInput)editorActivator.value=document.activeElement;preparedChoice.value=choice;const preparationId=++providerPreparationId;preparingProviderId.value=id;catalogPreparationError.value=``;catalogProviderId.value=id;editorOrigin.value=origin;editorProviderId.value=id;editorProviderRevision.value=``;editorLabel.value=String(choice.connection?.label||choice.label||id);if(!preserveInput){editorApiKey.value=``;editorApiKeyVisible.value=false;editorError.value=``}providerPickerOpen.value=false;editorOpen.value=true;await nextTick();let catalogFailed=false;try{await reloadCatalog()}catch{catalogFailed=true}if(preparationId!==providerPreparationId||!editorOpen.value||editorProviderId.value!==id)return;const provider=catalogProvider.value;if(catalogFailed||catalogLoadError.value||provider?.id!==id||!PROVIDER_REVISION_PATTERN.test(String(provider.definitionRevision||``))){catalogPreparationError.value=String(catalogLoadError.value||`The live OpenCode catalog did not return this provider.`);preparingProviderId.value=``;return}editorProviderRevision.value=provider.definitionRevision;editorLabel.value=String(provider.label||choice.label||id);preparingProviderId.value=``}function retryPreparedProvider(){if(preparedChoice.value)chooseProvider(preparedChoice.value,{origin:editorOrigin.value,preserveInput:true})}function resetEditor(){providerPreparationId+=1;editorOpen.value=false;catalogProviderId.value=``;preparedChoice.value=null;preparingProviderId.value=``;catalogPreparationError.value=``;editorOrigin.value=`direct`;editorProviderId.value=``;editorProviderRevision.value=``;editorLabel.value=``;editorApiKey.value=``;editorApiKeyVisible.value=false;editorError.value=``}function closeEditor(){if(editorSaving.value)return;const origin=editorOrigin.value;resetEditor();if(origin===`provider-picker`)providerPickerOpen.value=true;else if(origin===`add`)addAiOpen.value=true}async function clearProviderQuery(){const query={...route.query};delete query.providerId;delete query.providerLabel;delete query.providerRevision;await router.replace({query})}async function saveEditor(){if(!editorCanSave.value){if(!editorApiKey.value.trim())editorError.value=`Enter the provider API key.`;return}let response=null;try{response=await saveConnection({apiKey:editorApiKey.value,label:editorLabel.value,providerId:editorProviderId.value,providerRevision:editorProviderRevision.value})}catch(error){editorError.value=String(error?.fieldErrors?.apiKey||``);return}if(response?.ok!==false){editorRoutingSetupError.value=response?.routing?.ok===false?response.routing.error:``;editorApiKey.value=``;editorApiKeyVisible.value=false;editorRoutingPending.value=true;await clearProviderQuery();emit(`changed`)}}function finishConnectionRouting(){editorRoutingPending.value=false;resetEditor();emit(`connected`)}function nativeConnected(account){if(!owner.value||!nativeSetupOpen.value||account?.id!==nativeSetupProviderId.value)return;nativeRoutingSetupError.value=account.routing?.ok===false?account.routing.error:``;nativeRoutingReady.value=true}watch(nativeSetupOpen,open=>{if(!open){nativeRoutingReady.value=false;nativeRoutingSetupError.value=``}});function requestRemove(connection={}){removeTarget.value=connection;removeOpen.value=true}function requestModelAccess(connection={},unlocked=false){if(!connection.modelAccess?.configurable||updatingModelAccessProviderId.value)return;modelAccessTarget.value=connection;if(unlocked===true){modelAccessConfirmOpen.value=true;return}applyModelAccess(false)}async function confirmModelAccessUnlock(){modelAccessConfirmOpen.value=false;await applyModelAccess(true)}async function applyModelAccess(unlocked){const providerId=String(modelAccessTarget.value?.id||``);if(!providerId||updatingModelAccessProviderId.value)return null;try{const response=await updateModelAccess(providerId,unlocked===true?`enable-all`:`disable-additional`);if(response?.ok!==false)emit(`changed`);return response}finally{if(!modelAccessConfirmOpen.value)modelAccessTarget.value=null}}async function applyZenModelAccess(account={},operation=``){const providerId=String(account.id||``);if(providerId!==`opencode`||!operation||updatingModelAccessProviderId.value)return null;const response=await updateModelAccess(providerId,operation);if(response?.ok!==false)emit(`changed`);return response}async function confirmRemove(){const target=removeTarget.value;const providerId=String(target?.id||``);if(!providerId||removeRunning.value)return;let response=null;try{if(target?.kind===`codex-provider`)response=await codexProviders.change({modelProviderId:providerId,engineId:target.engineId,remove:true});else if([`codex`,`claude`].includes(target?.kind)){nativeRemoving.value=true;response=await nativeAccounts.logout(target.kind);if(response?.ok!==false)await nativeAccounts.reloadLocalStatus()}else response=await removeConnection(providerId)}catch{return}finally{nativeRemoving.value=false}if(response?.ok!==false){removeOpen.value=false;removeTarget.value=null;emit(`changed`)}}function manageConfiguredAi(account={}){nativeModelProviderId.value=account.kind===`codex-provider`?account.id:account.kind===`claude`?`anthropic`:`openai`;if([`codex`,`claude`,`codex-provider`].includes(account.kind)){nativeSetupOrigin.value=`manage`;nativeSetupProviderId.value=account.kind===`codex-provider`?account.engineId||`codex`:account.kind;nativeSetupActivator.value=document.activeElement;nativeSetupOpen.value=true;return}chooseProvider({connection:account,id:account.id,label:account.label})}watch([pendingProvider,owner],([provider,ownerNow])=>{if(!provider){hydratedRequestIdentity=``;return}if(!ownerNow)return;const identity=`${provider.id}:${provider.providerRevision}`;if(hydratedRequestIdentity===identity)return;hydratedRequestIdentity=identity;chooseProvider(provider)},{immediate:true});watch(zenCheckRunning,running=>{if(!running&&zenProgressTimer){clearTimeout(zenProgressTimer);zenProgressTimer=null}if(running)scheduleZenProgressRefresh()},{immediate:true});onBeforeUnmount(()=>{zenProgressDisposed=true;if(zenProgressTimer)clearTimeout(zenProgressTimer);zenProgressTimer=null});function openProvider(providerId,{providerLabel=``,providerRevision=``}={}){if(PROVIDER_ID_PATTERN.test(providerId)&&PROVIDER_REVISION_PATTERN.test(providerRevision))chooseProvider({id:providerId,label:providerLabel||providerId,providerRevision});else if([`codex`,`claude`].includes(providerId))manageConfiguredAi({kind:providerId});else if(curatedCodexProvider(providerId))manageConfiguredAi({kind:`codex-provider`,id:providerId});else if(providerId===`opencode`)openProviderPicker();else addAiOpen.value=true}const busy=computed(()=>Boolean(routingSaving.value||editorSaving.value||removeRunning.value||modelAccessRunning.value||codexProviderSaving.value));watch(busy,value=>emit(`busy`,value));return{accountsInitialLoading,addAiOpen,aiStatusLoaded,applyModelAccess,applyZenModelAccess,availableProviders,backFromNativeSetup,busy,canAddConnection,catalogEngine,catalogLoadError,catalogPreparationError,catalogProvider,catalogProviderId,checkingOpenCode,checkOpenCodeAgain,chooseAiType,chooseNativeProvider,chooseProvider,claudeAccount,claudeConnected,clearProviderQuery,closeEditor,codexAccount,codexConnected,codexProviders,codexProviderSaving,configuredAiGroups,configuredAiRows,configuredProviderIds,confirmModelAccessUnlock,confirmRemove,connections,editorActivator,editorApiKey,editorApiKeyVisible,editorBackLabel,editorCanSave,editorCatalogModelCount,editorConnectionPolicy,editorError,editorEyebrow,editorLabel,editorOpen,editorOrigin,editorPreparing,editorProviderId,editorProviderRevision,editorRouteExplanation,editorRoutingPending,editorRoutingSetupError,editorSaving,editorTitle,editorVerificationCopy,emit,existingEditorConnection,filteredProviders,finishConnectionRouting,isInitialLoading,isOwner:owner,loadError,manageConfiguredAi,missingTool,modelAccessConfirmOpen,modelAccessRunning,modelAccessTarget,nativeAccountConfigured,nativeAccounts,nativeAvailableProviders,nativeChoices,nativeConnected,nativeLoadError,nativeModelProviderId,nativeProviderPickerOpen,nativeRemoving,nativeRoutingReady,nativeRoutingSetupError,nativeSetupAccount,nativeSetupActivator,nativeSetupConnected,nativeSetupDetails,nativeSetupOpen,nativeSetupOrigin,nativeSetupProviderId,nativeSetupRows,nativeSetupToolProblem,openCodeAddAvailable,openProvider,openProviderPicker,pendingProvider,preparedChoice,preparingProviderId,providerPickerLoading,providerPickerOpen,providerPickerPending,providerSearch,providerUnavailableReason,queryText,refreshAllAccounts,refreshingAll,registryIsFetching,registryIsInitialLoading,registryLoaded,registryLoadError,registryProviders,reload,reloadCatalog,reloadRegistry,removeConnection,removeOpen,removeRunning,removeTarget,removingProviderId,requestModelAccess,requestRemove,resetEditor,retryPreparedProvider,routingOpen,routingSetup,routingSaving,saveConnection,saveEditor,savingProviderId,scheduleZenProgressRefresh,teamKeyRequests,updateModelAccess,updatingModelAccessProviderId,zenAccessTitle,zenCheck,zenCheckIsRunning,zenCheckProgress,zenCheckRunning,zenCheckSummary}}function provideAiConnectionManager(manager){provide(AI_CONNECTION_MANAGER_KEY,manager);return manager}function injectAiConnectionManager(){return inject(AI_CONNECTION_MANAGER_KEY)}var _hoisted_1$10={key:0,class:`text-body-medium`};var _hoisted_2$10={class:`vibe64-dialog-eyebrow`};var _hoisted_3$8={key:1,class:`text-body-medium`};var _hoisted_4$8={key:0,"aria-busy":`true`,"aria-label":`Loading OpenCode providers`,class:`vibe64-provider-picker__list`};var _hoisted_5$7={key:1,class:`vibe64-provider-picker__recovery`};var _hoisted_6$7={key:0,class:`text-label-medium text-medium-emphasis`};var _hoisted_7$7={key:1,class:`text-label-large text-primary`};var _hoisted_8$6={class:`text-body-medium text-medium-emphasis`};var _hoisted_9$6={class:`vibe64-dialog-eyebrow`};var _hoisted_10$4={class:`vibe64-provider-editor__recovery`};var _hoisted_11$3={key:2,"aria-live":`polite`,class:`vibe64-provider-editor__security`};var _sfc_main$13={__name:`AiConnectionDialogs`,setup(__props){const{smAndDown}=useDisplay();const{addAiOpen,aiStatusLoaded,backFromNativeSetup,canAddConnection,catalogPreparationError,checkingOpenCode,checkOpenCodeAgain,chooseAiType,chooseNativeProvider,chooseProvider,closeEditor,codexProviders,codexProviderSaving,confirmModelAccessUnlock,confirmRemove,editorActivator,editorApiKey,editorApiKeyVisible,editorBackLabel,editorCanSave,editorCatalogModelCount,editorConnectionPolicy,editorError,editorEyebrow,editorLabel,editorOpen,editorOrigin,editorPreparing,editorProviderId,editorProviderRevision,editorRouteExplanation,editorRoutingPending,editorRoutingSetupError,editorSaving,editorTitle,editorVerificationCopy,emit,filteredProviders,finishConnectionRouting,isOwner,missingTool,modelAccessConfirmOpen,modelAccessRunning,modelAccessTarget,nativeAccounts,nativeAvailableProviders,nativeChoices,nativeConnected,nativeModelProviderId,nativeProviderPickerOpen,nativeRoutingReady,nativeRoutingSetupError,nativeSetupActivator,nativeSetupDetails,nativeSetupOpen,nativeSetupOrigin,nativeSetupProviderId,nativeSetupRows,nativeSetupToolProblem,openCodeAddAvailable,openProviderPicker,providerPickerLoading,providerPickerOpen,providerSearch,providerUnavailableReason,registryLoaded,registryLoadError,removeOpen,removeRunning,removeTarget,retryPreparedProvider,routingOpen,routingSetup,routingSaving,teamKeyRequests,saveEditor}=injectAiConnectionManager();const dialogClass=computed(()=>[`ai-dialog`,{"ai-dialog--compact":smAndDown.value}]);return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VDialog,{modelValue:unref(addAiOpen),"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>isRef(addAiOpen)?addAiOpen.value=$event:null),fullscreen:unref(smAndDown),"max-width":`46rem`},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[_cache[32]||(_cache[32]=createBaseVNode(`span`,null,[createBaseVNode(`small`,{class:`vibe64-dialog-eyebrow`},`Add connection`),createBaseVNode(`strong`,null,`Choose an orchestrator`)],-1)),createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close Add connection`,type:`button`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>addAiOpen.value=false)},null,8,[`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-add-ai__body`},{default:withCtx(()=>[createVNode(VRow,{align:`stretch`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(aiStatusLoaded)?unref(nativeChoices):[],choice=>{return openBlock(),createBlock(VCol,{key:choice.id,cols:`12`,sm:`6`},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-add-ai__choice fill-height`,rounded:`xl`,variant:`outlined`},{default:withCtx(()=>[createVNode(VCardItem,null,{prepend:withCtx(()=>[createVNode(VAvatar,{color:`secondary`,rounded:`lg`,size:`52`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiAccountCircleOutline),size:`28`},null,8,[`icon`])]),_:1})]),default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(choice.label),1)]),_:2},1024),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(unref(missingTool)(choice.id)?`Not installed on this computer`:`Choose a provider`),1)]),_:2},1024)]),_:2},1024),createVNode(VCardText,{class:`vibe64-add-ai__choice-copy text-body-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(choice.providers.map(provider=>provider.label).join(`, `)),1)]),_:2},1024),createVNode(VCardActions,{class:`vibe64-add-ai__choice-actions`},{default:withCtx(()=>[createVNode(VBtn,{class:`vibe64-add-ai__choice-action`,block:``,color:`primary`,type:`button`,variant:`tonal`,onClick:$event=>unref(chooseAiType)(choice.id)},{default:withCtx(()=>[createTextVNode(` Choose `+toDisplayString(choice.label),1)]),_:2},1032,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024)}),128)),unref(openCodeAddAvailable)?(openBlock(),createBlock(VCol,{key:0,cols:`12`,sm:unref(nativeChoices).length?6:12},{default:withCtx(()=>[!unref(registryLoaded)&&!unref(registryLoadError)?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`card`,"aria-label":`Loading OpenCode connections`})):(openBlock(),createBlock(VCard,{key:1,class:`vibe64-add-ai__choice fill-height`,rounded:`xl`,variant:`outlined`},{default:withCtx(()=>[createVNode(VCardItem,null,{prepend:withCtx(()=>[createVNode(VAvatar,{color:`secondary`,rounded:`lg`,size:`52`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRobotOutline),size:`28`},null,8,[`icon`])]),_:1})]),default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`OpenCode`,-1)])]),_:1}),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(unref(missingTool)(`opencode`)?`Not installed on this computer`:`Connect a provider API key`),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-add-ai__choice-copy text-body-medium`},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(` Choose from OpenCode’s provider catalog. Add as many providers as you need; each key stays an independent connection. `,-1)])]),_:1}),createVNode(VCardActions,{class:`vibe64-add-ai__choice-actions`},{default:withCtx(()=>[createVNode(VBtn,{class:`vibe64-add-ai__choice-action`,block:``,color:`primary`,type:`button`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>unref(chooseAiType)(`opencode`))},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(` Choose provider `,-1)])]),_:1})]),_:1})]),_:1}))]),_:1},8,[`sm`])):createCommentVNode(``,true)]),_:1}),!unref(canAddConnection)?(openBlock(),createElementBlock(`p`,_hoisted_1$10,`All available connections are configured. Use Manage to update them.`)):createCommentVNode(``,true)]),_:1})]),_:1},8,[`class`,`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:unref(nativeProviderPickerOpen),"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>isRef(nativeProviderPickerOpen)?nativeProviderPickerOpen.value=$event:null),fullscreen:unref(smAndDown),"max-width":`42rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`small`,_hoisted_2$10,`Add `+toDisplayString(unref(nativeSetupDetails).label)+` connection`,1),_cache[36]||(_cache[36]=createBaseVNode(`strong`,null,`Choose a provider`,-1))]),createVNode(VBtn,{icon:unref(mdiArrowLeft),"aria-label":`Back to orchestrators`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>{nativeProviderPickerOpen.value=false;addAiOpen.value=true})},null,8,[`icon`])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(nativeAvailableProviders).length?(openBlock(),createBlock(VList,{key:0,lines:`two`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(nativeAvailableProviders),provider=>{return openBlock(),createBlock(VListItem,{key:provider.id,title:provider.label,subtitle:provider.description,onClick:$event=>unref(chooseNativeProvider)(provider.id)},{append:withCtx(()=>[..._cache[37]||(_cache[37]=[createBaseVNode(`span`,{class:`text-label-large text-primary`},`Connect`,-1)])]),_:1},8,[`title`,`subtitle`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_3$8,`All available `+toDisplayString(unref(nativeSetupDetails).label)+` connections are configured.`,1))]),_:1})]),_:1},8,[`class`,`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:unref(providerPickerOpen),"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>isRef(providerPickerOpen)?providerPickerOpen.value=$event:null),fullscreen:unref(smAndDown),"max-width":`46rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[_cache[38]||(_cache[38]=createBaseVNode(`span`,null,[createBaseVNode(`small`,{class:`vibe64-dialog-eyebrow`},`Add OpenCode connection`),createBaseVNode(`strong`,null,`Choose a provider`)],-1)),createVNode(VBtn,{icon:unref(mdiArrowLeft),"aria-label":`Back to AI types`,type:`button`,variant:`text`,onClick:_cache[5]||(_cache[5]=$event=>{providerPickerOpen.value=false;addAiOpen.value=true})},null,8,[`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-provider-picker__body`},{default:withCtx(()=>[unref(missingTool)(`opencode`)?(openBlock(),createBlock(CliInstallNotice_default,{key:0,account:unref(missingTool)(`opencode`),checking:unref(checkingOpenCode),onCheck:unref(checkOpenCodeAgain)},null,8,[`account`,`checking`,`onCheck`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{modelValue:unref(providerSearch),"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>isRef(providerSearch)?providerSearch.value=$event:null),autofocus:``,clearable:``,disabled:unref(providerPickerLoading),"hide-details":``,"prepend-inner-icon":unref(mdiMagnify),label:`Search OpenCode providers`,placeholder:`Try OpenAI, Anthropic, GLM…`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`prepend-inner-icon`]),unref(providerPickerLoading)?(openBlock(),createElementBlock(`div`,_hoisted_4$8,[(openBlock(),createElementBlock(Fragment,null,renderList(6,index=>{return createVNode(VSkeletonLoader,{key:index,type:`list-item-avatar-two-line`})}),64))])):unref(registryLoadError)?(openBlock(),createElementBlock(`div`,_hoisted_5$7,[createVNode(VAlert,{text:unref(registryLoadError),title:`OpenCode providers could not load`,type:`error`,variant:`tonal`},null,8,[`text`]),createVNode(VBtn,{color:`primary`,type:`button`,variant:`tonal`,onClick:unref(openProviderPicker)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`onClick`])])):unref(filteredProviders).length?(openBlock(),createBlock(VSheet,{key:2,border:``,class:`vibe64-provider-picker__list`,rounded:`xl`},{default:withCtx(()=>[createVNode(VList,{lines:`two`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(filteredProviders),provider=>{return openBlock(),createBlock(VListItem,{key:provider.id,class:`vibe64-provider-picker__item`,disabled:Boolean(unref(providerUnavailableReason)(provider)),subtitle:unref(providerUnavailableReason)(provider)?`${provider.id} · ${unref(providerUnavailableReason)(provider)}`:`${provider.id} · ${provider.description}`,title:provider.label,onClick:$event=>unref(chooseProvider)(provider,{origin:`provider-picker`})},{prepend:withCtx(()=>[createVNode(VAvatar,{color:`primary`,size:`44`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRobotOutline),size:`22`},null,8,[`icon`])]),_:1})]),append:withCtx(()=>[unref(providerUnavailableReason)(provider)?(openBlock(),createElementBlock(`span`,_hoisted_6$7,` More setup needed `)):(openBlock(),createElementBlock(`span`,_hoisted_7$7,`Connect`))]),_:2},1032,[`disabled`,`subtitle`,`title`,`onClick`])}),128))]),_:1})]),_:1})):(openBlock(),createBlock(VSheet,{key:3,class:`vibe64-provider-picker__empty`,color:`surface-container-low`,rounded:`xl`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRobotOutline),color:`primary`,size:`36`},null,8,[`icon`]),createBaseVNode(`strong`,null,toDisplayString(unref(providerSearch).trim()?`No providers match “${unref(providerSearch).trim()}”`:`Every OpenCode provider is already connected`),1),createBaseVNode(`span`,_hoisted_8$6,toDisplayString(unref(providerSearch).trim()?`Try a provider name or its OpenCode ID.`:`Manage an existing connection, or remove one before adding it again.`),1)]),_:1}))],64))]),_:1})]),_:1},8,[`class`,`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:unref(nativeSetupOpen),"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>isRef(nativeSetupOpen)?nativeSetupOpen.value=$event:null),persistent:unref(codexProviderSaving),activator:unref(nativeSetupActivator),"open-on-click":false,fullscreen:unref(smAndDown),"max-width":`42rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardText,{class:`vibe64-codex-setup__body`},{default:withCtx(()=>[unref(nativeRoutingReady)?(openBlock(),createBlock(ModelRoutingForm_default,{key:0,"connection-id":unref(nativeSetupProviderId)===`codex`?`openai`:`anthropic`,"connection-label":unref(nativeSetupProviderId)===`codex`?`Codex login`:`Claude login`,"setup-error":unref(nativeRoutingSetupError),onBusy:_cache[8]||(_cache[8]=$event=>codexProviderSaving.value=$event),onClose:_cache[9]||(_cache[9]=$event=>nativeSetupOpen.value=false),onSaved:_cache[10]||(_cache[10]=$event=>{nativeSetupOpen.value=false;unref(emit)(`changed`)})},null,8,[`connection-id`,`connection-label`,`setup-error`])):(openBlock(),createBlock(NativeProviderConnections_default,{key:1,modelValue:unref(nativeModelProviderId),"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>isRef(nativeModelProviderId)?nativeModelProviderId.value=$event:null),"engine-id":unref(nativeSetupProviderId),"select-provider":false,adding:unref(nativeSetupOrigin)===`add`,"show-back":unref(nativeSetupOrigin)===`add`,"actions-enabled":unref(isOwner),"show-close":``,onBusy:_cache[12]||(_cache[12]=$event=>codexProviderSaving.value=$event),onClose:_cache[13]||(_cache[13]=$event=>nativeSetupOpen.value=false),onBack:unref(backFromNativeSetup),onChanged:_cache[14]||(_cache[14]=$event=>{unref(codexProviders).resource.reload();unref(emit)(`changed`)})},null,8,[`modelValue`,`engine-id`,`adding`,`show-back`,`actions-enabled`,`onBack`])),!unref(nativeRoutingReady)&&[`openai`,`anthropic`].includes(unref(nativeModelProviderId))?(openBlock(),createBlock(ProviderAccountsSetup_default,{key:2,accounts:unref(nativeAccounts),"actions-enabled":unref(isOwner),"actions-disabled-message":`Only the Vibe64 owner can manage this connection.`,"account-rows":unref(nativeSetupRows),"back-label":unref(nativeSetupOrigin)===`add`?`Back`:``,"needed-label":unref(nativeSetupToolProblem)===`not_installed`?`Not installed`:unref(nativeSetupToolProblem)?`Didn't start`:`Not connected`,"ready-label":`Connected`,"show-continue":false,"status-loaded":unref(aiStatusLoaded),title:unref(nativeSetupDetails).label,onBack:unref(backFromNativeSetup),onConnected:unref(nativeConnected)},{close:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close ${unref(nativeSetupDetails).label} setup`,type:`button`,variant:`text`,onClick:_cache[15]||(_cache[15]=$event=>nativeSetupOpen.value=false)},null,8,[`icon`,`aria-label`])]),_:1},8,[`accounts`,`actions-enabled`,`account-rows`,`back-label`,`needed-label`,`status-loaded`,`title`,`onBack`,`onConnected`])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`class`,`rounded`])]),_:1},8,[`modelValue`,`persistent`,`activator`,`fullscreen`]),createVNode(VDialog,{"model-value":unref(editorOpen),activator:unref(editorActivator),"open-on-click":false,fullscreen:unref(smAndDown),"max-width":`40rem`,persistent:unref(editorSaving)||unref(routingSaving),"onUpdate:modelValue":_cache[21]||(_cache[21]=open=>{if(!open&&!unref(routingSaving))unref(editorRoutingPending)?unref(finishConnectionRouting)():unref(closeEditor)()})},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[!unref(editorRoutingPending)?(openBlock(),createBlock(VCardTitle,{key:0,class:`vibe64-dialog-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`small`,_hoisted_9$6,toDisplayString(unref(editorEyebrow)),1),createBaseVNode(`strong`,null,toDisplayString(unref(editorTitle)),1)]),createVNode(VBtn,{icon:unref(editorOrigin)===`direct`?unref(mdiClose):unref(mdiArrowLeft),"aria-label":unref(editorOrigin)===`direct`?`Close provider setup`:`Back to AI choices`,disabled:unref(editorSaving),type:`button`,variant:`text`,onClick:unref(closeEditor)},null,8,[`icon`,`aria-label`,`disabled`,`onClick`])]),_:1})):createCommentVNode(``,true),unref(editorRoutingPending)?(openBlock(),createBlock(VCardText,{key:1},{default:withCtx(()=>[createVNode(ModelRoutingForm_default,{"connection-id":unref(editorProviderId),"connection-label":unref(editorLabel),"setup-error":unref(editorRoutingSetupError),onBusy:_cache[17]||(_cache[17]=$event=>routingSaving.value=$event),onClose:unref(finishConnectionRouting),onSaved:unref(finishConnectionRouting)},null,8,[`connection-id`,`connection-label`,`setup-error`,`onClose`,`onSaved`])]),_:1})):unref(catalogPreparationError)?(openBlock(),createBlock(VCardText,{key:2,class:`vibe64-provider-editor__body`},{default:withCtx(()=>[createVNode(VAlert,{border:`start`,text:unref(catalogPreparationError),title:`Provider could not be confirmed`,type:`error`,variant:`tonal`},null,8,[`text`]),createBaseVNode(`div`,_hoisted_10$4,[createVNode(VBtn,{type:`button`,variant:`text`,onClick:unref(closeEditor)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(editorBackLabel)),1)]),_:1},8,[`onClick`]),createVNode(VBtn,{color:`primary`,type:`button`,variant:`tonal`,onClick:unref(retryPreparedProvider)},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`onClick`])])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VCardText,{"aria-busy":unref(editorPreparing)?`true`:void 0,class:`vibe64-provider-editor__body`},{default:withCtx(()=>[createVNode(VSheet,{class:`vibe64-provider-editor__provider`,rounded:`lg`},{default:withCtx(()=>[createVNode(VAvatar,{color:`primary`,size:`44`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRobotOutline),size:`24`},null,8,[`icon`])]),_:1}),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(unref(editorLabel)),1),createBaseVNode(`small`,null,[createTextVNode(toDisplayString(unref(editorProviderId)),1),unref(editorCatalogModelCount)?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · `+toDisplayString(unref(editorCatalogModelCount))+` models found`,1)],64)):createCommentVNode(``,true)])])]),_:1}),unref(editorPreparing)?(openBlock(),createBlock(VSheet,{key:0,"aria-label":`Loading current provider details`,class:`vibe64-provider-editor__route`,rounded:`lg`},{default:withCtx(()=>[createVNode(VSkeletonLoader,{type:`heading, paragraph`})]),_:1})):unref(editorConnectionPolicy)?(openBlock(),createBlock(VSheet,{key:1,class:`vibe64-provider-editor__route`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(unref(editorConnectionPolicy).routeLabel||unref(editorConnectionPolicy).productLabel),1),unref(editorConnectionPolicy).accessLabel===`Workspace use`?(openBlock(),createBlock(VChip,{key:0,color:`primary`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(editorConnectionPolicy).accessLabel),1)]),_:1})):(openBlock(),createBlock(AiPersonalUse_default,{key:1,"provider-id":unref(editorProviderId)},null,8,[`provider-id`]))]),createBaseVNode(`p`,null,toDisplayString(unref(editorRouteExplanation)),1)]),_:1})):createCommentVNode(``,true),createVNode(VTextField,{modelValue:unref(editorApiKey),"onUpdate:modelValue":[_cache[19]||(_cache[19]=$event=>isRef(editorApiKey)?editorApiKey.value=$event:null),_cache[20]||(_cache[20]=$event=>editorError.value=``)],autocomplete:`new-password`,disabled:unref(editorSaving),"error-messages":unref(editorError)?[unref(editorError)]:[],hint:`Paste the key for this provider. It will not be shown again.`,label:`API key`,"persistent-hint":``,type:unref(editorApiKeyVisible)?`text`:`password`,variant:`outlined`},{"append-inner":withCtx(()=>[createVNode(VBtn,{"aria-label":unref(editorApiKeyVisible)?`Hide API key`:`Show API key`,disabled:unref(editorSaving),icon:unref(editorApiKeyVisible)?unref(mdiEyeOffOutline):unref(mdiEyeOutline),type:`button`,variant:`text`,onClick:_cache[18]||(_cache[18]=$event=>editorApiKeyVisible.value=!unref(editorApiKeyVisible))},null,8,[`aria-label`,`disabled`,`icon`])]),_:1},8,[`modelValue`,`disabled`,`error-messages`,`type`]),createVNode(AiWaitStatus_default,{active:unref(editorPreparing)||unref(editorSaving),label:unref(editorVerificationCopy)},null,8,[`active`,`label`]),!unref(editorPreparing)&&!unref(editorSaving)?(openBlock(),createElementBlock(`div`,_hoisted_11$3,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`18`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(unref(editorVerificationCopy)),1)])):createCommentVNode(``,true),!unref(editorPreparing)&&(!unref(editorProviderRevision)||!unref(editorConnectionPolicy))?(openBlock(),createBlock(VAlert,{key:3,text:`Vibe64 could not confirm this provider's current OpenCode definition. Go back and try again.`,title:`Provider confirmation required`,type:`warning`,variant:`tonal`})):createCommentVNode(``,true)]),_:1},8,[`aria-busy`]),createVNode(VCardActions,{class:`vibe64-provider-editor__actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(editorSaving),type:`button`,variant:`text`,onClick:unref(closeEditor)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(editorBackLabel)),1)]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{"aria-busy":unref(editorPreparing)||unref(editorSaving)?`true`:void 0,color:`primary`,disabled:!unref(editorCanSave)&&!unref(editorPreparing)&&!unref(editorSaving),loading:unref(editorPreparing)||unref(editorSaving),type:`button`,variant:`flat`,onClick:unref(saveEditor)},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(` Verify and connect `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`loading`,`onClick`])]),_:1})],64))]),_:1},8,[`class`,`rounded`])]),_:1},8,[`model-value`,`activator`,`fullscreen`,`persistent`]),createVNode(VDialog,{modelValue:unref(routingOpen),"onUpdate:modelValue":_cache[27]||(_cache[27]=$event=>isRef(routingOpen)?routingOpen.value=$event:null),"max-width":`44rem`,fullscreen:unref(smAndDown),persistent:unref(routingSaving),scrollable:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[unref(routingOpen)?(openBlock(),createBlock(ModelRoutingForm_default,{key:0,readonly:!unref(isOwner),"initial-setup":unref(routingSetup),onBusy:_cache[22]||(_cache[22]=$event=>routingSaving.value=$event),onClose:_cache[23]||(_cache[23]=$event=>routingOpen.value=false),onSaved:_cache[24]||(_cache[24]=$event=>{routingOpen.value=false;unref(emit)(`changed`)}),onAddTeamKey:_cache[25]||(_cache[25]=$event=>{routingOpen.value=false;teamKeyRequests.value++}),onConnectProvider:_cache[26]||(_cache[26]=$event=>{routingOpen.value=false;addAiOpen.value=true})},null,8,[`readonly`,`initial-setup`])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`class`,`rounded`])]),_:1},8,[`modelValue`,`fullscreen`,`persistent`]),createVNode(VDialog,{modelValue:unref(modelAccessConfirmOpen),"onUpdate:modelValue":_cache[29]||(_cache[29]=$event=>isRef(modelAccessConfirmOpen)?modelAccessConfirmOpen.value=$event:null),"max-width":`31rem`,persistent:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:`xl`},{default:withCtx(()=>[createVNode(VCardItem,{class:`vibe64-ai-connections__confirm-header`},{prepend:withCtx(()=>[createVNode(VAvatar,{color:`warning`,size:`44`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiCreditCardOutline),size:`23`},null,8,[`icon`])]),_:1})]),default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(unref(modelAccessTarget)?.modelAccess?.label||`Unlock provider models`)+`?`,1)]),_:1}),createVNode(VCardSubtitle,{class:`vibe64-ai-connections__confirm-subtitle`},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(` GLM-4.7 Flash stays available either way. `,-1)])]),_:1})]),_:1}),createVNode(VCardText,{class:`text-body-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(modelAccessTarget)?.modelAccess?.warning||`These models may consume paid provider credit.`),1)]),_:1}),createVNode(VCardActions,{class:`vibe64-ai-connections__confirm-actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(modelAccessRunning),type:`button`,variant:`text`,onClick:_cache[28]||(_cache[28]=$event=>{modelAccessConfirmOpen.value=false;modelAccessTarget.value=null})},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(` Keep free only `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`warning`,disabled:unref(modelAccessRunning),type:`button`,variant:`flat`,onClick:unref(confirmModelAccessUnlock)},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(` Unlock paid models `,-1)])]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1},8,[`class`])]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:unref(removeOpen),"onUpdate:modelValue":_cache[31]||(_cache[31]=$event=>isRef(removeOpen)?removeOpen.value=$event:null),"max-width":`30rem`,persistent:``},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(dialogClass.value),rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(` Remove AI connection? `,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(removeTarget)?.kind===`codex-provider`?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` Remove the `+toDisplayString(unref(removeTarget).providerLabel)+` connection from `+toDisplayString(unref(removeTarget).engineId===`claude`?`Claude Code`:`Codex`)+`? Turns using this key will stop. Conversations and files remain. `,1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(` New and resumed turns using this AI will stop until the owner connects it again. Existing conversation and project history remain intact. `)],64))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:unref(removeRunning),type:`button`,variant:`text`,onClick:_cache[30]||(_cache[30]=$event=>removeOpen.value=false)},{default:withCtx(()=>[..._cache[46]||(_cache[46]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{"aria-busy":unref(removeRunning)?`true`:void 0,color:`error`,disabled:unref(removeRunning),type:`button`,variant:`flat`,onClick:unref(confirmRemove)},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(` Remove AI `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`onClick`])]),_:1})]),_:1},8,[`class`])]),_:1},8,[`modelValue`])],64)}}};var AiConnectionDialogs_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-75267aac`]]);var _hoisted_1$9=[`aria-label`];var _hoisted_2$9={class:`ai-row__main`};var _hoisted_3$7={class:`ai-row__identity`};var _hoisted_4$7={class:`ai-row__title`};var _hoisted_5$6={key:0,class:`ai-row__via`};var _hoisted_6$6={key:0,class:`ai-row__detail`};var _hoisted_7$6={class:`ai-row__key`};var _hoisted_8$5={class:`ai-row__chips`};var _hoisted_9$5={key:0,class:`ai-row__chip`};var _hoisted_10$3={key:0,class:`ai-row__panel`,"aria-live":`polite`};var _hoisted_11$2={class:`ai-row__panel-copy`};var _hoisted_12$2={key:0,class:`ai-row__progress`};var _hoisted_13$2={class:`ai-row__panel-actions`};var _hoisted_14$2={class:`ai-row__panel-copy`};var _hoisted_15$2={class:`ai-row__actions`};var _sfc_main$12={__name:`AiConnectionRow`,props:{account:{type:Object,required:true},lead:{type:String,default:`engine`},details:{type:Boolean,default:true}},setup(__props){const props=__props;const ENGINES={claude:`Claude Code`,codex:`Codex`,opencode:`OpenCode`};const{applyZenModelAccess,manageConfiguredAi,requestModelAccess,requestRemove,updatingModelAccessProviderId,zenAccessTitle,zenCheck,zenCheckIsRunning,zenCheckProgress,zenCheckSummary}=injectAiConnectionManager();const working=computed(()=>props.account.kind===`opencode`?props.account.connected!==false:props.account.connected===true);const engine=computed(()=>ENGINES[props.account.engineId]||props.account.engineId);const title=computed(()=>props.lead===`engine`?engine.value:props.account.providerLabel);const via=computed(()=>props.lead===`pair`?`through ${engine.value}`:props.lead===`engine`&&props.account.kind===`opencode`?props.account.providerLabel:``);const detail=computed(()=>props.account.billingLabel);const status=computed(()=>{if(!working.value)return`Reconnect required`;if(props.account.id===`zai`)return`Free model ready for new sessions`;return props.account.modelLabel});const keyHint=computed(()=>working.value&&props.account.kind===`opencode`?props.account.keyHint:``);const native=computed(()=>[`claude`,`codex`].includes(props.account.kind));const changeLabel=computed(()=>!working.value?`Reconnect`:native.value?`Manage sign-in`:`Replace key`);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`article`,{class:normalizeClass([`ai-row`,{"ai-row--attention":!working.value}]),"aria-label":`${title.value}: ${working.value?`connected`:`reconnect required`}`},[createBaseVNode(`div`,_hoisted_2$9,[createBaseVNode(`span`,{class:normalizeClass([`ai-row__status`,working.value?`ai-row__status--ok`:`ai-row__status--warn`]),"aria-hidden":`true`},[createVNode(VIcon,{icon:working.value?unref(mdiCheck):unref(mdiAlertCircleOutline),size:`20`},null,8,[`icon`])],2),createBaseVNode(`div`,_hoisted_3$7,[createBaseVNode(`span`,_hoisted_4$7,[createBaseVNode(`strong`,null,toDisplayString(title.value),1),via.value?(openBlock(),createElementBlock(`span`,_hoisted_5$6,toDisplayString(via.value),1)):createCommentVNode(``,true)]),detail.value?(openBlock(),createElementBlock(`span`,_hoisted_6$6,toDisplayString(detail.value),1)):createCommentVNode(``,true),createBaseVNode(`span`,{class:normalizeClass([`ai-row__meta`,{"ai-row__meta--warn":!working.value}])},[createTextVNode(toDisplayString(status.value),1),keyHint.value?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[7]||(_cache[7]=createTextVNode(` · `,-1)),createBaseVNode(`span`,_hoisted_7$6,toDisplayString(keyHint.value),1)],64)):createCommentVNode(``,true)],2)]),createBaseVNode(`div`,_hoisted_8$5,[renderSlot(_ctx.$slots,`connection-access`,{connection:__props.account,place:`row`},void 0,true),__props.account.preferred?(openBlock(),createElementBlock(`span`,_hoisted_9$5,`Default`)):createCommentVNode(``,true)])]),__props.details&&__props.account.id===`opencode`&&__props.account.modelAccess?(openBlock(),createElementBlock(`div`,_hoisted_10$3,[createBaseVNode(`div`,_hoisted_11$2,[createVNode(VIcon,{icon:unref(zenCheckIsRunning)(__props.account)?unref(mdiRefresh):unref(mdiShieldCheckOutline),size:`20`,class:`ai-row__panel-icon`},null,8,[`icon`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(unref(zenAccessTitle)(__props.account)),1),_cache[8]||(_cache[8]=createBaseVNode(`small`,null,` The recommended Zen model always remains available. Checking sends one tiny, potentially billable request to each current Zen model, one at a time. `,-1))])]),unref(zenCheck)(__props.account).status?(openBlock(),createElementBlock(`div`,_hoisted_12$2,[unref(zenCheckIsRunning)(__props.account)?(openBlock(),createBlock(VProgressLinear,{key:0,color:`primary`,indeterminate:!unref(zenCheck)(__props.account).total,"model-value":unref(zenCheckProgress)(__props.account),rounded:``},null,8,[`indeterminate`,`model-value`])):createCommentVNode(``,true),createBaseVNode(`small`,null,toDisplayString(unref(zenCheckSummary)(__props.account)),1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_13$2,[createVNode(VBtn,{color:`primary`,disabled:Boolean(unref(updatingModelAccessProviderId))||unref(zenCheckIsRunning)(__props.account),variant:`tonal`,onClick:_cache[0]||(_cache[0]=$event=>unref(applyZenModelAccess)(__props.account,`check-available`))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Check & enable working models `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:Boolean(unref(updatingModelAccessProviderId))||unref(zenCheckIsRunning)(__props.account),variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>unref(applyZenModelAccess)(__props.account,`enable-all`))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(` Enable all current models `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:Boolean(unref(updatingModelAccessProviderId))||unref(zenCheckIsRunning)(__props.account),variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>unref(applyZenModelAccess)(__props.account,`disable-additional`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` Use the recommended model only `,-1)])]),_:1},8,[`disabled`]),unref(zenCheckIsRunning)(__props.account)?(openBlock(),createBlock(VBtn,{key:0,color:`error`,"prepend-icon":unref(mdiStopCircleOutline),variant:`text`,disabled:unref(updatingModelAccessProviderId)===__props.account.id||unref(zenCheck)(__props.account).status===`cancelling`,onClick:_cache[3]||(_cache[3]=$event=>unref(applyZenModelAccess)(__props.account,`cancel-check`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(zenCheck)(__props.account).status===`cancelling`?`Stopping…`:`Cancel check`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)])])):createCommentVNode(``,true),__props.details&&__props.account.id!==`opencode`&&__props.account.modelAccess?.configurable?(openBlock(),createElementBlock(`div`,{key:1,class:normalizeClass([`ai-row__panel ai-row__panel--switch`,{"ai-row__panel--paid":__props.account.modelAccess.mode===`all`}])},[createBaseVNode(`div`,_hoisted_14$2,[createVNode(VIcon,{icon:__props.account.modelAccess.mode===`all`?unref(mdiCreditCardOutline):unref(mdiShieldCheckOutline),size:`20`,class:`ai-row__panel-icon`},null,8,[`icon`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(__props.account.modelAccess.mode===`all`?`All Z.AI models unlocked`:`Free-only model access`),1),createBaseVNode(`small`,null,toDisplayString(__props.account.modelAccess.mode===`all`?`GLM-4.7 Flash remains free; other model choices can consume Z.AI API credit.`:`GLM-4.7 Flash stays available. Paid Z.AI models remain visible but locked.`),1)])]),createVNode(VSwitch,{color:`primary`,disabled:Boolean(unref(updatingModelAccessProviderId)),"hide-details":``,inset:``,density:`compact`,"aria-label":__props.account.modelAccess.label,label:unref(updatingModelAccessProviderId)===__props.account.id?__props.account.modelAccess.mode===`all`?`Returning to free only…`:`Unlocking paid models…`:__props.account.modelAccess.label,"model-value":__props.account.modelAccess.mode===`all`,onClick:_cache[4]||(_cache[4]=withModifiers($event=>unref(requestModelAccess)(__props.account,__props.account.modelAccess.mode!==`all`),[`prevent`]))},null,8,[`disabled`,`aria-label`,`label`,`model-value`])],2)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_15$2,[createVNode(VBtn,{color:working.value?void 0:`warning`,variant:working.value?`tonal`:`flat`,onClick:_cache[5]||(_cache[5]=$event=>unref(manageConfiguredAi)(__props.account))},{default:withCtx(()=>[createTextVNode(toDisplayString(changeLabel.value),1)]),_:1},8,[`color`,`variant`]),createVNode(VBtn,{class:`ai-row__remove`,color:`error`,variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>unref(requestRemove)(__props.account))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Remove `,-1)])]),_:1})])],10,_hoisted_1$9)}}};var AiConnectionRow_default=_plugin_vue_export_helper_default(_sfc_main$12,[[`__scopeId`,`data-v-a5fd1f17`]]);var _hoisted_1$8={class:`aio-mark__tile`};var _hoisted_2$8={class:`aio-mark__glyph`};var CROWN=`M10 22 4 9 26 16 48 4 70 16 92 9 86 22ZM10 23.5h76V27H10ZM1 8a3 3 0 1 0 6 0a3 3 0 1 0-6 0M44.7 3.5a3.3 3.3 0 1 0 6.6 0a3.3 3.3 0 1 0-6.6 0M89 8a3 3 0 1 0 6 0a3 3 0 1 0-6 0`;var _sfc_main$11={__name:`AiOnboardingMark`,props:{provider:{type:Object,required:true},size:{type:Number,default:48},settleDelay:{type:Number,default:-1}},setup(__props){const CROWN_MASK=`url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 28"><path d="${CROWN}"/></svg>`)}")`;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`span`,{class:normalizeClass([`aio-mark`,[`aio-mark--${__props.provider.tone}`,`aio-mark--${__props.provider.shape}`]]),style:normalizeStyle({"--aio-mark-size":`${__props.size}px`,"--aio-settle-delay":`${Math.max(__props.settleDelay,0)}ms`,"--aio-crown-mask":CROWN_MASK}),"aria-hidden":`true`},[createBaseVNode(`span`,_hoisted_1$8,[createBaseVNode(`span`,_hoisted_2$8,toDisplayString(__props.provider.mark),1)]),__props.provider.crown?(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass([`aio-mark__crown`,{"aio-mark__crown--settle":__props.settleDelay>=0}])},[..._cache[0]||(_cache[0]=[createBaseVNode(`i`,null,null,-1)])],2)):createCommentVNode(``,true)],6)}}};var AiOnboardingMark_default=_plugin_vue_export_helper_default(_sfc_main$11,[[`__scopeId`,`data-v-2085323f`]]);var registrations=shallowRef([]);var available=computed(()=>registrations.value.length>0);var NOT_OPEN=`Colleague is not open in this browser view.`;function registerVibe64ColleagueModel(entry){registrations.value=[...registrations.value,entry];return()=>{registrations.value=registrations.value.filter(item=>item!==entry)}}function useVibe64ColleagueModel(){const latest=()=>registrations.value.at(-1)||null;return{available,current:async()=>await latest()?.current()||null,select:async assistantSelection=>await latest()?.select(assistantSelection)||{ok:false,error:NOT_OPEN},sayHello:async message=>await latest()?.sayHello(message)||{ok:false,error:NOT_OPEN},reveal:async()=>{await latest()?.reveal?.()}}}var SNOOZE_MS=864e5;var TEAM_SNOOZE_MS=7*SNOOZE_MS;var ENGINES=[`claude`,`codex`,`opencode`];var MAIN_AI_ROLES=[`senior`,`junior`,`router`,`quickHelper`];var engineLabel=id=>VIBE64_AGENT_PROVIDERS.find(provider=>provider.id===id)?.label||id;var snoozeKey=actorKey=>`vibe64.aiOnboarding.snoozedUntil:${actorKey||`local`}`;var teamSnoozeKey=actorKey=>`vibe64.aiTeamSetup.snoozedUntil:${actorKey||`local`}`;var routeKey=selection=>JSON.stringify([`engineId`,`agentId`,`modelProviderId`,`modelId`,`variantId`].map(key=>selection?.[key]||``));function aiOnboardingSnoozed(actorKey,now=Date.now()){return Number(readLocalStorageJson(snoozeKey(actorKey),0))>now}function snoozeAiOnboarding(actorKey,now=Date.now()){try{writeLocalStorageJson(snoozeKey(actorKey),now+SNOOZE_MS)}catch{}}function aiTeamSetupSnoozed(actorKey,now=Date.now()){return Number(readLocalStorageJson(teamSnoozeKey(actorKey),0))>now}function snoozeAiTeamSetup(actorKey,now=Date.now()){try{writeLocalStorageJson(teamSnoozeKey(actorKey),now+TEAM_SNOOZE_MS)}catch{}}function aiIsSetUp({accounts,curated,openCode}){return accounts.some(({id,connected})=>[`claude`,`codex`].includes(id)&&connected)||curated.some(({connected,claudeReady})=>connected||claudeReady)||openCode.some(({connected})=>connected)}function usesProvider(selection,{connect}){return Boolean(selection)&&selection.modelProviderId===connect.modelProviderId}var providerCards=cards=>cards.flatMap(card=>[card,card.free].filter(Boolean));var cardForProvider=(cards,modelProviderId)=>providerCards(cards).find(({connect,matches})=>connect.modelProviderId===modelProviderId||matches.curated.includes(modelProviderId)||matches.opencode.includes(modelProviderId));var providerName=selection=>cardForProvider(AI_ONBOARDING_PROVIDERS,selection.modelProviderId)?.name||selection.modelId;var colleagueChoice=result=>result?.selection?{...result.selection,label:result.modelLabel}:null;var HELLO=`Say hello to me in one short, friendly sentence. No questions.`;function aiOnboardingConnections({matches},{accounts,curated,openCode}){return[...new Set([...accounts.filter(({id,connected})=>connected&&matches.native.includes(id)).map(({id})=>id),...curated.filter(({id})=>matches.curated.includes(id)).flatMap(({connected,claudeReady})=>[connected&&`codex`,claudeReady&&`claude`].filter(Boolean)),...openCode.filter(({connected,modelProviderId})=>connected&&matches.opencode.includes(modelProviderId)).map(()=>`opencode`)])]}function connectedEngine(card,lists){const through=aiOnboardingConnections(card,lists);return through.includes(card.connect.engineId)?card.connect.engineId:ENGINES.find(id=>through.includes(id))||``}function aiOnboardingMainAi(cards,senior){const card=senior?.schema?cardForProvider(cards,senior.modelProviderId):null;if(!card)return null;const via=card.matches.native.includes(senior.engineId)?``:engineLabel(senior.engineId);return{card,via,label:via?`${card.name}, via ${via}`:card.name}}function aiOnboardingRows({matches},rows=[]){return rows.filter(({kind,id,modelProviderId})=>[`claude`,`codex`].includes(kind)?matches.native.includes(id):kind===`codex-provider`?matches.curated.includes(id):kind===`opencode`&&matches.opencode.includes(modelProviderId||id))}async function routingRequest(path,body,method=`POST`){const result=await getHttpWebClient().request(`${ACCOUNTS_ENDPOINT}/model-routing${path}`,{method,body});if(result?.ok!==true)throw new Error(result?.error||`The AI setup could not be read.`);return result}function teamSummary(roles){const model=selection=>JSON.stringify([selection?.engineId,selection?.modelProviderId,selection?.modelId]);const label=role=>{const selection=roles[role]?.effective;return selection&&(roles[role].choices.find(choice=>model(choice)===model(selection))?.label||selection.modelId)};const[colleague,helper]=[label(`colleague`),label(`quickHelper`)];if(!helper||helper===colleague)return`Team members use ${colleague} for Colleague, Fix it with AI and helpers.`;return`Team members use ${colleague} for Colleague and Fix it with AI, and ${helper} for helpers.`}function useAiOnboarding({endpoint=``,enabled=true}={}){const accounts=useVibe64Accounts();const curated=useCodexProviderConnections({enabled});const openCode=useAiConnections({...endpoint?{endpoint}:{},enabled});const routingWanted=ref(false);const colleague=useVibe64ColleagueModel();const colleagueCurrent=ref(null);const lists=computed(()=>({accounts:accounts.status.value?.accounts,curated:curated.resource.data.value?.providers,openCode:openCode.connections.value}));const loadError=computed(()=>accounts.loadError.value||curated.loadError.value||openCode.loadError.value||``);const loaded=computed(()=>!loadError.value&&unref(enabled)&&Array.isArray(lists.value.accounts)&&Array.isArray(lists.value.curated)&&!openCode.isInitialLoading.value);const isSetUp=computed(()=>loaded.value&&aiIsSetUp(lists.value));const routing=useModelRouting({enabled:computed(()=>Boolean(unref(enabled))&&(routingWanted.value||isSetUp.value))});const card=provider=>{const through=loaded.value?aiOnboardingConnections(provider,lists.value):[];return{...provider,through,connected:through.length>0}};const cards=computed(()=>AI_ONBOARDING_PROVIDERS.map(provider=>({...card(provider),...provider.free?{free:card({...provider,note:``,upgrade:``,crown:false,free:null,...provider.free})}:{}})));const ownerRoles=computed(()=>routing.setups.value?.owner?.roles||{});const mainAi=computed(()=>aiOnboardingMainAi(cards.value,ownerRoles.value.senior?.effective));function reload(){return Promise.all([accounts.statusResource.reload(),curated.resource.reload(),openCode.reload()])}async function readRouting(){routingWanted.value=true;await nextTick();await routing.resource.reload()}async function preferredOwnerRoles(provider,engineId){return(await routingRequest(`/preview`,{revision:routing.resource.data.value?.revision??0,preferProvider:{setup:`owner`,modelProviderId:provider.connect.modelProviderId,engineId}})).setups.owner.roles}async function refreshColleague(){colleagueCurrent.value=colleague.available.value?colleagueChoice(await colleague.current().catch(()=>null)):null;return colleagueCurrent.value}async function selectForColleague(provider){await readRouting();let selection=ownerRoles.value.colleague?.effective;if(!usesProvider(selection,provider)){const engineId=connectedEngine(provider,lists.value);selection=engineId?(await preferredOwnerRoles(provider,engineId).catch(()=>null))?.senior?.recommendation:null}if(!usesProvider(selection,provider))return{error:`No ${provider.name} model is ready for Colleague.`};const result=await colleague.select(defineVibe64AssistantSelection(selection));if(!result?.ok)return{error:result?.error||`Colleague couldn't switch models.`};colleagueCurrent.value=colleagueChoice(result);return{selection:colleagueCurrent.value}}function sayHello(){return colleague.sayHello(HELLO).catch(error=>({ok:false,error:error?.message||`No reply.`}))}async function verify(provider){await Promise.all([reload(),readRouting()]);const engineId=connectedEngine(provider,lists.value);if(!engineId)return{connected:false};const senior=ownerRoles.value.senior||{};const routed=usesProvider(senior.effective,provider);const preferred=await preferredOwnerRoles(provider,engineId).catch(()=>null);const proposed=role=>preferred?.[role]?.recommendation;return{connected:true,engineId,available:routed?routing.viewerDecisions.value.senior?.available===true:usesProvider(proposed(`senior`),provider),routed,routingWouldChange:MAIN_AI_ROLES.some(role=>usesProvider(proposed(role),provider)&&routeKey(proposed(role))!==routeKey(ownerRoles.value[role]?.value)),currentSenior:senior.value?.schema?{...senior.value,name:providerName(senior.value)}:null}}async function fillTeamSetup({modelProviderId,engineId}){try{await readRouting();const revision=routing.resource.data.value?.revision??0;const preferProvider={setup:`nonOwner`,modelProviderId,engineId};const{setups:{nonOwner}}=await routingRequest(`/preview`,{revision,preferProvider});const values=Object.fromEntries(ASSISTANT_SETUP_ROLES.nonOwner.filter(role=>!nonOwner.roles[role].configured&&nonOwner.setupValues[role]).map(role=>[role,nonOwner.setupValues[role]]));if(!values.colleague?.schema)return{error:`No ${engineLabel(engineId)} model is ready for team members yet. Check the connection, then try again.`};const saved=await routingRequest(``,{revision,nonOwner:values,preferProvider},`PATCH`);await routing.resource.reload();return{ok:true,summary:teamSummary(saved.setups.nonOwner.roles)}}catch(error){return{error:error?.message||`Team models weren't saved.`}}}return{accounts,cards,colleague:colleagueCurrent,colleagueAvailable:colleague.available,fillTeamSetup,isSetUp,loadError,loaded,mainAi,refreshColleague,reload,revealColleague:colleague.reveal,routing,sayHello,selectForColleague,verify}}var _hoisted_1$7={class:`ai-manage__header`};var _hoisted_2$7={class:`ai-manage__heading`};var _hoisted_3$6={class:`ai-manage__title`};var _hoisted_4$6={class:`ai-manage__summary`};var _hoisted_5$5=[`aria-label`];var _hoisted_6$5={key:1,class:`ai-manage__group`,"aria-labelledby":`ai-manage-free`};var _hoisted_7$5={id:`ai-manage-free`,class:`ai-manage__group-title`};var _hoisted_8$4={key:2,class:`ai-manage__empty`};var _hoisted_9$4={class:`ai-manage__note`};var _sfc_main$10={__name:`AiProviderManage`,props:{modelValue:Boolean,card:{type:Object,default:null}},emits:[`update:modelValue`,`connect`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{xs}=useDisplay();const{busy,configuredAiRows}=injectAiConnectionManager();const ENGINES={claude:`Claude Code`,codex:`Codex`,opencode:`OpenCode`};const ORDER=[`claude`,`codex`,`opencode`];const activator=ref(null);const byEngine=rows=>[...rows].sort((a,b)=>ORDER.indexOf(a.engineId)-ORDER.indexOf(b.engineId));const rows=computed(()=>props.card?byEngine(aiOnboardingRows(props.card,configuredAiRows.value)):[]);const freeRows=computed(()=>props.card?.free?byEngine(aiOnboardingRows(props.card.free,configuredAiRows.value)):[]);const allRows=computed(()=>[...rows.value,...freeRows.value]);const working=row=>row.kind===`opencode`?row.connected!==false:row.connected===true;const billingUrl=computed(()=>allRows.value.find(row=>row.managementUrl)?.managementUrl||``);const summary=computed(()=>{const engines=[...new Set(allRows.value.filter(working).map(row=>ENGINES[row.engineId]))];const broken=allRows.value.filter(row=>!working(row)).length;return[engines.length?`Connected through ${engines.join(` and `)}`:``,broken?`${broken} ${broken===1?`connection needs`:`connections need`} reconnecting`:``].filter(Boolean).join(` · `)||`Nothing connected`});watch(()=>props.modelValue,open=>{if(open)activator.value=document.activeElement});function close(){if(!busy.value)emit(`update:modelValue`,false)}function connectAgain(){emit(`update:modelValue`,false);emit(`connect`,props.card)}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,activator:activator.value,"open-on-click":false,fullscreen:unref(xs),"max-width":`44rem`,scrollable:``,persistent:unref(busy),transition:unref(xs)?`dialog-bottom-transition`:`dialog-transition`,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>!$event&&close())},{default:withCtx(()=>[__props.card?(openBlock(),createBlock(VCard,{key:0,class:normalizeClass([`ai-manage`,[`ai-manage--${__props.card.tone}`,{"ai-manage--phone":unref(xs)}]]),rounded:unref(xs)?0:`xl`},{default:withCtx(()=>[createBaseVNode(`header`,_hoisted_1$7,[createVNode(AiOnboardingMark_default,{provider:__props.card,size:unref(xs)?44:52},null,8,[`provider`,`size`]),createBaseVNode(`div`,_hoisted_2$7,[_cache[1]||(_cache[1]=createBaseVNode(`p`,{class:`ai-manage__eyebrow`},`Manage`,-1)),createBaseVNode(`h2`,_hoisted_3$6,toDisplayString(__props.card.name),1),createBaseVNode(`p`,_hoisted_4$6,toDisplayString(summary.value),1)]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close ${__props.card.name} settings`,disabled:unref(busy),onClick:close},null,8,[`icon`,`aria-label`,`disabled`]),billingUrl.value?(openBlock(),createBlock(VBtn,{key:0,class:`ai-manage__billing`,href:billingUrl.value,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),variant:`text`,color:`primary`,size:`small`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Billing & usage`,-1),createBaseVNode(`span`,{class:`d-sr-only`},` (opens in a new tab)`,-1)])]),_:1},8,[`href`,`append-icon`])):createCommentVNode(``,true)]),createVNode(VCardText,{class:`ai-manage__body`},{default:withCtx(()=>[rows.value.length?(openBlock(),createElementBlock(`section`,{key:0,class:`ai-manage__group`,"aria-label":`${__props.card.name} connections`},[(openBlock(true),createElementBlock(Fragment,null,renderList(rows.value,row=>{return openBlock(),createBlock(AiConnectionRow_default,{key:`${row.kind}:${row.engineId}:${row.id}`,account:row},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,mergeProps({ref_for:true},scope),void 0,true)]),_:3},8,[`account`])}),128))],8,_hoisted_5$5)):createCommentVNode(``,true),freeRows.value.length?(openBlock(),createElementBlock(`section`,_hoisted_6$5,[createBaseVNode(`h3`,_hoisted_7$5,[_cache[3]||(_cache[3]=createTextVNode(` Free option`,-1)),createBaseVNode(`span`,null,toDisplayString(__props.card.free.name),1)]),(openBlock(true),createElementBlock(Fragment,null,renderList(freeRows.value,row=>{return openBlock(),createBlock(AiConnectionRow_default,{key:`${row.kind}:${row.engineId}:${row.id}`,account:row},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,mergeProps({ref_for:true},scope),void 0,true)]),_:3},8,[`account`])}),128))])):createCommentVNode(``,true),!allRows.value.length?(openBlock(),createElementBlock(`div`,_hoisted_8$4,[createBaseVNode(`p`,null,toDisplayString(__props.card.name)+` isn't connected any more.`,1),createVNode(VBtn,{color:`primary`,variant:`flat`,onClick:connectAgain},{default:withCtx(()=>[createTextVNode(`Connect `+toDisplayString(__props.card.name),1)]),_:1})])):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_9$4,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),_cache[4]||(_cache[4]=createBaseVNode(`span`,null,`Provider keys are redacted after saving. Only the Vibe64 owner can change sign-ins and keys.`,-1))])]),_:3})]),_:3},8,[`class`,`rounded`])):createCommentVNode(``,true)]),_:3},8,[`model-value`,`activator`,`fullscreen`,`persistent`,`transition`])}}};var AiProviderManage_default=_plugin_vue_export_helper_default(_sfc_main$10,[[`__scopeId`,`data-v-5472ebf5`]]);var _hoisted_1$6=[`aria-expanded`];var _hoisted_2$6={class:`ai-advanced__icon`,"aria-hidden":`true`};var _hoisted_3$5={class:`ai-advanced__heading`};var _hoisted_4$5={class:`ai-advanced__summary`};var _hoisted_5$4={id:`ai-advanced-body`,class:`ai-advanced__body`};var _hoisted_6$4={class:`ai-advanced__actions`};var _hoisted_7$4={key:0,"aria-busy":`true`,"aria-label":`Loading AI accounts`,class:`ai-advanced__loading`};var _hoisted_8$3={key:1,class:`ai-advanced__group`,"aria-labelledby":`ai-advanced-other`};var _hoisted_9$3=[`aria-label`];var _hoisted_10$2={class:`ai-advanced__group-title`};var _sfc_main$9={__name:`AiSetupAdvanced`,props:{otherRows:{type:Array,default:()=>[]}},setup(__props){const props=__props;const{accountsInitialLoading,addAiOpen,busy,canAddConnection,configuredAiGroups,configuredAiRows,loadError,nativeLoadError,refreshAllAccounts,refreshingAll}=injectAiConnectionManager();const open=ref(false);const summary=computed(()=>{const count=configuredAiRows.value.length;const parts=[count?`${count} ${count===1?`connection`:`connections`}`:`Exact connections and refresh`];if(props.otherRows.length)parts.push(`${props.otherRows.length} not on a card above`);return parts.join(` · `)});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`ai-advanced`,{"ai-advanced--open":open.value}]),"aria-labelledby":`ai-advanced-title`},[createBaseVNode(`button`,{type:`button`,class:`ai-advanced__toggle`,"aria-expanded":String(open.value),"aria-controls":`ai-advanced-body`,onClick:_cache[0]||(_cache[0]=$event=>open.value=!open.value)},[createBaseVNode(`span`,_hoisted_2$6,[createVNode(VIcon,{icon:unref(mdiTune),size:`20`},null,8,[`icon`])]),createBaseVNode(`span`,_hoisted_3$5,[_cache[2]||(_cache[2]=createBaseVNode(`span`,{id:`ai-advanced-title`,class:`ai-advanced__title`},`Advanced`,-1)),createBaseVNode(`span`,_hoisted_4$5,toDisplayString(summary.value),1)]),createVNode(VIcon,{icon:unref(mdiChevronDown),class:`ai-advanced__chevron`,"aria-hidden":`true`},null,8,[`icon`])],8,_hoisted_1$6),createVNode(VExpandTransition,null,{default:withCtx(()=>[withDirectives(createBaseVNode(`div`,_hoisted_5$4,[createBaseVNode(`div`,_hoisted_6$4,[createVNode(VBtn,{color:`primary`,variant:`tonal`,"prepend-icon":unref(mdiPlus),disabled:unref(busy)||unref(accountsInitialLoading)||Boolean(unref(loadError))||Boolean(unref(nativeLoadError))||!unref(canAddConnection),onClick:_cache[1]||(_cache[1]=$event=>addAiOpen.value=true)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Add a connection `,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{variant:`text`,"prepend-icon":unref(mdiRefresh),loading:unref(refreshingAll),disabled:unref(accountsInitialLoading)||unref(refreshingAll),"aria-label":`Refresh AI accounts`,onClick:unref(refreshAllAccounts)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Refresh `,-1)])]),_:1},8,[`prepend-icon`,`loading`,`disabled`,`onClick`])]),unref(accountsInitialLoading)?(openBlock(),createElementBlock(`div`,_hoisted_7$4,[(openBlock(),createElementBlock(Fragment,null,renderList(2,index=>{return createVNode(VSkeletonLoader,{key:index,type:`list-item-avatar-two-line`})}),64))])):unref(loadError)?(openBlock(),createBlock(VAlert,{key:1,title:`AI accounts could not load`,type:`error`,variant:`tonal`,class:`ai-advanced__error`},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(unref(loadError)),1),createVNode(VBtn,{variant:`tonal`,color:`error`,"prepend-icon":unref(mdiRefresh),onClick:unref(refreshAllAccounts)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`prepend-icon`,`onClick`])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:2},[unref(nativeLoadError)?(openBlock(),createBlock(VAlert,{key:0,text:unref(nativeLoadError),title:`AI account status could not load`,type:`warning`,variant:`tonal`},null,8,[`text`])):createCommentVNode(``,true),__props.otherRows.length?(openBlock(),createElementBlock(`section`,_hoisted_8$3,[_cache[6]||(_cache[6]=createBaseVNode(`h3`,{id:`ai-advanced-other`,class:`ai-advanced__group-title`},`Other connections`,-1)),_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`ai-advanced__group-note`},`Connected providers that have no card above.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.otherRows,row=>{return openBlock(),createBlock(AiConnectionRow_default,{key:`${row.kind}:${row.engineId}:${row.id}`,account:row,lead:`pair`},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,mergeProps({ref_for:true},scope),void 0,true)]),_:3},8,[`account`])}),128))])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(configuredAiGroups),group=>{return openBlock(),createElementBlock(`section`,{key:group.id,class:`ai-advanced__group`,"aria-label":`${group.label} connections`},[createBaseVNode(`h3`,_hoisted_10$2,`By tool · `+toDisplayString(group.label),1),(openBlock(true),createElementBlock(Fragment,null,renderList(group.accounts,row=>{return openBlock(),createBlock(AiConnectionRow_default,{key:`${row.kind}:${row.id}`,account:row,lead:`provider`,details:false},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,mergeProps({ref_for:true},scope),void 0,true)]),_:3},8,[`account`])}),128))],8,_hoisted_9$3)}),128))],64))],512),[[vShow,open.value]])]),_:3})],2)}}};var AiSetupAdvanced_default=_plugin_vue_export_helper_default(_sfc_main$9,[[`__scopeId`,`data-v-50e9c529`]]);var _sfc_main$8={__name:`AiOnboardingKeyConnect`,props:{modelProviderId:{type:String,required:true},label:{type:String,default:``}},emits:[`busy`,`connected`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const connections=useAiConnections({catalogProviderId:computed(()=>props.modelProviderId)});const apiKey=ref(``);const error=ref(``);const saving=ref(false);const revision=computed(()=>connections.catalogProvider.value?.id===props.modelProviderId?String(connections.catalogProvider.value.definitionRevision||``):``);onMounted(()=>connections.reloadCatalog().catch(()=>null));async function save(){error.value=``;if(!apiKey.value.trim()){error.value=`Paste your API key.`;return}if(!revision.value){await connections.reloadCatalog().catch(()=>null);if(!revision.value){error.value=connections.catalogLoadError.value||`The provider details could not be loaded. Try again.`;return}}saving.value=true;emit(`busy`,true);try{const response=await connections.saveConnection({apiKey:apiKey.value,label:props.label,providerId:props.modelProviderId,providerRevision:revision.value});if(response?.ok===false){error.value=response.fieldErrors?.apiKey||response.error||`The key could not be saved.`;return}apiKey.value=``;emit(`connected`)}catch(cause){error.value=cause?.fieldErrors?.apiKey||cause?.message||`The key could not be saved.`}finally{saving.value=false;emit(`busy`,false)}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`form`,{class:`aio-key`,onSubmit:withModifiers(save,[`prevent`])},[createVNode(VTextField,{modelValue:apiKey.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>apiKey.value=$event),label:`API key`,type:`password`,autocomplete:`off`,variant:`outlined`,"error-messages":error.value?[error.value]:[],disabled:saving.value},null,8,[`modelValue`,`error-messages`,`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,size:`large`,loading:saving.value},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Connect`,-1)])]),_:1},8,[`loading`]),createVNode(AiWaitStatus_default,{active:saving.value,label:`Checking the key with ${__props.label||`the provider`}. This can take up to a minute.`},null,8,[`active`,`label`])],32)}}};var AiOnboardingKeyConnect_default=_plugin_vue_export_helper_default(_sfc_main$8,[[`__scopeId`,`data-v-4e7cfd40`]]);var _hoisted_1$5={class:`ai-team-card__icon`,"aria-hidden":`true`};var _hoisted_2$5={class:`ai-team-card__body`};var _hoisted_3$4={id:`ai-team-card-title`,class:`ai-team-card__title`};var _hoisted_4$4={key:0,class:`ai-team-card__text`};var _hoisted_5$3={key:1,class:`ai-team-card__text`};var _hoisted_6$3={key:2,class:`ai-team-card__error`,role:`alert`};var _hoisted_7$3={class:`ai-team-card__actions`};var _sfc_main$7={__name:`AiTeamSetupCard`,props:{state:{type:String,default:`offer`},keyConnected:Boolean,busy:Boolean,error:{type:String,default:``},summary:{type:String,default:``}},emits:[`add`,`snooze`,`review`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`ai-team-card`,{"ai-team-card--ready":__props.state===`ready`}]),"aria-labelledby":`ai-team-card-title`,tabindex:`-1`},[createBaseVNode(`span`,_hoisted_1$5,[createVNode(VIcon,{icon:__props.state===`ready`?unref(mdiCheckCircle):unref(mdiAccountGroupOutline),size:`24`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_2$5,[createBaseVNode(`h2`,_hoisted_3$4,toDisplayString(__props.state===`ready`?`Team AI is ready`:`Let your team use this workspace`),1),__props.state===`ready`?(openBlock(),createElementBlock(`p`,_hoisted_4$4,toDisplayString(__props.summary),1)):(openBlock(),createElementBlock(`p`,_hoisted_5$3,` Your Claude plan is for you only. Add a DeepSeek key (runs inside Claude Code) and team members get Colleague, Fix it with AI and helpers. You still approve what they send to main chat. `)),__props.error?(openBlock(),createElementBlock(`p`,_hoisted_6$3,[createVNode(VIcon,{icon:unref(mdiAlertCircleOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createTextVNode(toDisplayString(__props.error),1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_7$3,[__props.state===`ready`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,onClick:_cache[0]||(_cache[0]=$event=>emit(`review`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Review team models`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{color:`primary`,variant:`flat`,loading:__props.busy,disabled:__props.busy,onClick:_cache[1]||(_cache[1]=$event=>emit(`add`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.keyConnected?`Use DeepSeek for team members`:`Add a DeepSeek key`),1)]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,disabled:__props.busy,onClick:_cache[2]||(_cache[2]=$event=>emit(`snooze`))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Not now`,-1)])]),_:1},8,[`disabled`])],64))])])],2)}}};var AiTeamSetupCard_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-e0ab11b3`]]);var _hoisted_1$4=[`data-tool-row`];var _hoisted_2$4={class:`tool-row__icon`,"aria-hidden":`true`};var _hoisted_3$3={class:`tool-row__body`};var _hoisted_4$3={class:`tool-row__heading`};var _hoisted_5$2={class:`tool-row__title`};var _hoisted_6$2=[`title`];var _hoisted_7$2={key:1,class:`tool-row__aside`};var _hoisted_8$2={key:1,class:`tool-row__note`};var _hoisted_9$2={class:`tool-row__actions`};var _sfc_main$6={__name:`ToolInstallRow`,props:{tool:{type:Object,required:true},checking:Boolean,flat:Boolean,optional:Boolean},emits:[`check`],setup(__props,{emit:__emit}){const props=__props;const fixId=`tool-row-fix-${useId()}`;const open=ref(false);const emit=__emit;const state=computed(()=>[`ready`,`broken`].includes(props.tool.status)?props.tool.status:`missing`);const foldable=computed(()=>props.optional&&state.value===`missing`);const folded=computed(()=>foldable.value&&!open.value);const plural=computed(()=>/s$/u.test(props.tool.name||``));const title=computed(()=>{const name=props.tool.name||`This tool`;if(state.value===`ready`)return[name,props.tool.version].filter(Boolean).join(` `);if(state.value===`broken`)return`${name} didn't start`;if(foldable.value)return name;return`${name} ${plural.value?`aren't`:`isn't`} installed on this computer`});const foundPath=computed(()=>String(props.tool.path||``));const command=computed(()=>String(props.tool.install?.command||``));const sentence=computed(()=>{return[state.value===`broken`&&foundPath.value?`Vibe64 found it at ${foundPath.value}, but it didn't run.`:props.tool.detail||``,command.value?`Paste this into a terminal on this computer, then choose Check again.`:`Install it the way that suits your computer, then choose Check again.`].filter(Boolean).join(` `)});const icon=computed(()=>{if(state.value===`ready`)return mdiCheckCircle;return props.optional&&state.value===`missing`?mdiMinusCircleOutline:mdiAlertCircleOutline});const feedback=ref(``);const asked=ref(false);function check(){asked.value=true;feedback.value=``;emit(`check`)}watch(()=>props.checking,(now,before)=>{if(!before||now||!asked.value)return;asked.value=false;feedback.value=state.value===`ready`?``:`Still not found. Did the command finish without errors?`});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`article`,{class:normalizeClass([`tool-row`,[`tool-row--${state.value}`,{"tool-row--flat":__props.flat,"tool-row--optional":__props.optional,"tool-row--folded":folded.value}]]),"data-tool-row":__props.tool.id||__props.tool.name},[createBaseVNode(`div`,_hoisted_2$4,[__props.checking&&state.value!==`ready`?(openBlock(),createBlock(VProgressCircular,{key:0,indeterminate:``,size:`18`,width:`2`})):(openBlock(),createBlock(VIcon,{key:1,icon:icon.value,size:`20`},null,8,[`icon`]))]),createBaseVNode(`div`,_hoisted_3$3,[createBaseVNode(`div`,_hoisted_4$3,[createBaseVNode(`strong`,_hoisted_5$2,toDisplayString(title.value),1),state.value===`ready`&&foundPath.value?(openBlock(),createElementBlock(`span`,{key:0,class:`tool-row__path`,title:foundPath.value},toDisplayString(foundPath.value),9,_hoisted_6$2)):foldable.value?(openBlock(),createElementBlock(`span`,_hoisted_7$2,`Not installed`)):createCommentVNode(``,true),foldable.value?(openBlock(),createBlock(VBtn,{key:2,"aria-controls":fixId,"aria-expanded":String(open.value),"aria-label":`How to install ${__props.tool.name}`,class:`tool-row__toggle`,color:`primary`,density:`comfortable`,"append-icon":open.value?unref(mdiChevronUp):unref(mdiChevronDown),variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>open.value=!open.value)},{default:withCtx(()=>[createTextVNode(toDisplayString(open.value?`Hide`:`How to install`),1)]),_:1},8,[`aria-expanded`,`aria-label`,`append-icon`])):createCommentVNode(``,true)]),createVNode(VExpandTransition,null,{default:withCtx(()=>[state.value!==`ready`&&(!foldable.value||open.value)?(openBlock(),createElementBlock(`div`,{key:0,id:fixId,class:`tool-row__fix`},[createBaseVNode(`p`,{class:normalizeClass([`tool-row__sentence`,{"tool-row__sentence--feedback":feedback.value}]),"aria-live":`polite`},toDisplayString(feedback.value||sentence.value),3),command.value?(openBlock(),createBlock(Vibe64CopyCommand_default,{key:0,command:command.value,label:`Copy the command that installs ${__props.tool.name}`},null,8,[`command`,`label`])):createCommentVNode(``,true),__props.tool.install?.note?(openBlock(),createElementBlock(`p`,_hoisted_8$2,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`14`},null,8,[`icon`]),createTextVNode(` `+toDisplayString(__props.tool.install.note),1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_9$2,[createVNode(VBtn,{class:`tool-row__check`,color:`primary`,loading:__props.checking,"prepend-icon":unref(mdiRefresh),rounded:`pill`,variant:`tonal`,onClick:check},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`,`prepend-icon`]),__props.tool.guideUrl?(openBlock(),createBlock(VBtn,{key:0,class:`tool-row__other`,color:`primary`,"append-icon":unref(mdiOpenInNew),href:__props.tool.guideUrl,rel:`noopener`,rounded:`pill`,target:`_blank`,variant:`text`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Other ways`,-1),createBaseVNode(`span`,{class:`d-sr-only`},` (opens in a new tab)`,-1)])]),_:1},8,[`append-icon`,`href`])):createCommentVNode(``,true)])])):createCommentVNode(``,true)]),_:1})])],10,_hoisted_1$4)}}};var ToolInstallRow_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-a5747c97`]]);function useLocalToolRows(ids,{enabled=true}={}){const list=computed(()=>[...new Set((toValue(ids)||[]).map(String))].filter(id=>/^[a-z0-9-]+$/u.test(id)).sort());const resource=useEndpointResource({enabled:computed(()=>toValue(enabled)!==false&&list.value.length>0),fallbackLoadError:`The tool check could not run.`,path:computed(()=>list.value.length?`${STUDIO_TOOLS_ENDPOINT}?ids=${encodeURIComponent(list.value.join(`,`))}`:``),queryKey:computed(()=>[`vibe64`,`studio-tools`,list.value.join(`,`)]),queryOptions:{refetchOnWindowFocus:`always`,staleTime:0},requestRecoveryLabel:`Tool check`});const tools=computed(()=>Array.isArray(resource.data.value?.tools)?resource.data.value.tools:[]);return{checking:resource.isFetching,check:()=>resource.reload(),missing:computed(()=>tools.value.filter(tool=>tool.status!==`ready`)),tools}}var _hoisted_1$3={key:`choose`,class:`ai-onboarding__choose`};var _hoisted_2$3={class:`ai-onboarding__intro`};var _hoisted_3$2={id:`ai-onboarding-title`,tabindex:`-1`,class:`ai-onboarding__headline`};var _hoisted_4$2={class:`ai-onboarding__lede`};var _hoisted_5$1={key:0,class:`ai-onboarding__lede`};var _hoisted_6$1={key:0,class:`aio-current`,role:`group`,"aria-label":`Currently using`};var _hoisted_7$1={class:`aio-current__marks`};var _hoisted_8$1={class:`aio-current__text`};var _hoisted_9$1={class:`aio-current__label`};var _hoisted_10$1={class:`aio-current__value`};var _hoisted_11$1={key:1,class:`aio-current__hint`};var _hoisted_12$1={key:3,class:`aio-current aio-ready-here`,role:`group`,"aria-label":`Ready on this computer`};var _hoisted_13$1={class:`aio-current__text`};var _hoisted_14$1={class:`aio-current__value`};var _hoisted_15$1={class:`ai-onboarding__cards`};var _hoisted_16$1=[`aria-labelledby`];var _hoisted_17$1={key:0,class:`aio-card__ribbon`};var _hoisted_18$1={key:1,class:`aio-card__connected`};var _hoisted_19={key:2,class:`aio-card__connected aio-card__connected--warn`};var _hoisted_20={key:0,class:`aio-card__rank`,"aria-hidden":`true`};var _hoisted_21={class:`aio-card__identity`};var _hoisted_22=[`id`];var _hoisted_23={class:`aio-card__tagline`};var _hoisted_24={class:`aio-card__facts`};var _hoisted_25={class:`aio-card__bullets`};var _hoisted_26=[`aria-label`,`title`];var _hoisted_27={key:1,class:`aio-card__why`};var _hoisted_28={class:`aio-card__note-row`};var _hoisted_29={key:0,class:`aio-card__note`};var _hoisted_30={class:`aio-card__offer`};var _hoisted_31={key:0,class:`aio-plan`};var _hoisted_32={class:`aio-plan__name`};var _hoisted_33={class:`aio-plan__price`};var _hoisted_34={key:0,class:`aio-plan__budget`};var _hoisted_35={key:1,class:`aio-plan__more`};var _hoisted_36={class:`aio-card__ctas`};var _hoisted_37=[`title`];var _hoisted_38={key:2,class:`aio-card__needs`};var _hoisted_39={key:4,class:`aio-card__free`};var _hoisted_40={class:`aio-card__free-label`};var _hoisted_41=[`title`];var _hoisted_42={key:1,class:`aio-card__needs`};var _hoisted_43={key:4,class:`aio-models`,"aria-labelledby":`aio-models-title`};var _hoisted_44={class:`aio-models__text`};var _hoisted_45={class:`aio-models__list`};var _hoisted_46={key:`connect`,class:`ai-onboarding__connect`};var _hoisted_47={class:`aio-chosen`};var _hoisted_48={class:`aio-chosen__text`};var _hoisted_49={id:`ai-onboarding-title`,tabindex:`-1`,class:`aio-chosen__title`};var _hoisted_50={class:`aio-chosen__plan`};var _hoisted_51={class:`aio-tabular`};var _hoisted_52={class:`aio-checklist`};var _hoisted_53={class:`aio-checklist__marker`,"aria-hidden":`true`};var _hoisted_54={class:`aio-checklist__title`};var _hoisted_55={key:0,class:`d-sr-only`};var _hoisted_56={class:`aio-checklist__body`};var _hoisted_57={class:`aio-checklist__setup`};var _hoisted_58={class:`aio-checklist__title`};var _hoisted_59={class:`aio-checklist__body`};var _hoisted_60={key:6,class:`ai-onboarding__security`};var _hoisted_61={key:`routing`,class:`ai-onboarding__routing`};var _hoisted_62={class:`ai-onboarding__intro`};var _hoisted_63={id:`ai-onboarding-title`,tabindex:`-1`,class:`ai-onboarding__headline`};var _hoisted_64={key:1,class:`ai-onboarding__lede`};var _hoisted_65={key:1,class:`aio-progress`,role:`status`};var _hoisted_66={key:2,class:`aio-options`,role:`group`,"aria-label":`Your main AI`};var _hoisted_67=[`disabled`];var _hoisted_68={class:`aio-option__title`};var _hoisted_69={class:`aio-option__body`};var _hoisted_70=[`disabled`];var _hoisted_71={class:`aio-option__title`};var _hoisted_72={class:`aio-option__body`};var _hoisted_73={class:`ai-onboarding__panel`};var _hoisted_74={key:`success`,class:`ai-onboarding__success`};var _hoisted_75={key:0,class:`aio-check`,viewBox:`0 0 40 40`,"aria-hidden":`true`};var _hoisted_76={id:`ai-onboarding-title`,tabindex:`-1`,class:`ai-onboarding__headline`};var _hoisted_77={key:0,class:`ai-onboarding__lede`};var _hoisted_78=[`aria-busy`];var _hoisted_79={class:`aio-proof__avatar`,"aria-hidden":`true`};var _hoisted_80={viewBox:`0 0 24 24`};var _hoisted_81=[`d`];var _hoisted_82={class:`aio-proof__body`};var _hoisted_83={class:`aio-proof__name`};var _hoisted_84={class:`aio-proof__reply`};var _hoisted_85={class:`aio-proof__actions`};var _hoisted_86={key:0,class:`aio-proof__typing`,role:`status`};var _hoisted_87={key:1,class:`aio-proof__reply`};var _hoisted_88={key:2,class:`aio-proof__reply aio-proof__reply--quiet`};var _hoisted_89={key:2,class:`ai-onboarding__colleague`};var _hoisted_90={key:3,class:`ai-onboarding__lede`};var _hoisted_91={key:5,class:`aio-recap`};var _hoisted_92={key:0};var _hoisted_93={class:`ai-onboarding__note`};var _hoisted_94={key:6,class:`ai-onboarding__note`};var _hoisted_95={key:7,class:`aio-success-actions`};var _hoisted_96={key:`owner`,class:`ai-onboarding__success`};var _hoisted_97={id:`ai-onboarding-title`,tabindex:`-1`,class:`ai-onboarding__headline`};var _hoisted_98={class:`d-sr-only`,"aria-live":`polite`};var CROWN_SETTLE_MS=420;var _sfc_main$5={__name:`AiSetup`,props:{open:{type:Boolean,default:true},endpoint:{type:String,default:``},redo:Boolean,onboarding:{type:Object,default:null},inline:Boolean,canConfigure:Boolean,ownerNotice:{type:String,default:`Only the Vibe64 owner can connect AI accounts.`},changeWhere:{type:String,default:`Account settings → AI Accounts`},focus:{type:String,default:``}},emits:[`close`,`changed`,`connected`,`busy`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const setup=props.onboarding||useAiOnboarding({endpoint:props.endpoint,enabled:computed(()=>props.canConfigure)});const{xs}=useDisplay();const RATINGS=[``,`poor`,`limited`,`good`,`very good`,`excellent`];const CTA_VARIANT=[`flat`,`tonal`,`outlined`,`outlined`];const screen=ref(`choose`);const direction=ref(`forward`);const stage=ref(null);const routingForm=ref(null);const wasSetUp=ref(false);const firstRun=ref(false);const chosen=ref(null);const signUp=ref(``);const expandedId=ref(``);const setupBusy=ref(false);const routingBusy=ref(false);const verifying=ref(false);const warning=ref(``);const notReady=ref(false);const makeMain=ref(false);const routingReviewed=ref(false);const fullRouting=ref(false);const routingDetails=ref(false);const currentSenior=ref(null);const chosenEngine=ref(``);const teamSnoozed=ref(false);const teamFlow=ref(false);const teamBusy=ref(false);const teamError=ref(``);const teamSummary=ref(``);const teamCard=ref(null);const autoRouting=ref(false);const outcome=ref({routed:true,colleague:null,error:``});const hello=ref({state:``,reply:``,error:``});const announcement=ref(``);const pointerMoved=ref(false);const manager=provideAiConnectionManager(useAiConnectionManager({...props.endpoint?{endpoint:props.endpoint}:{},isOwner:computed(()=>props.canConfigure),emit:(event,value)=>emit(event,value),followRoute:props.inline}));const manageOpen=ref(false);const managedCard=ref(null);const busy=computed(()=>setupBusy.value||routingBusy.value||verifying.value||manager.busy.value);const cards=computed(()=>setup.cards.value);const loaded=computed(()=>setup.loaded.value);const loadError=computed(()=>setup.loadError.value);const featured=computed(()=>cards.value.find(card=>card.crown));const others=computed(()=>cards.value.filter(card=>!card.crown));const connectedCards=computed(()=>cards.value.filter(card=>card.connected));const orderedCards=computed(()=>{const ranked=[featured.value,...others.value];return wasSetUp.value?[...ranked.filter(configured),...ranked.filter(card=>!configured(card))]:ranked});const otherRows=computed(()=>manager.configuredAiRows.value.filter(row=>!cards.value.some(card=>[card,card.free].some(item=>item&&aiOnboardingRows(item,[row]).length))));const otherConnected=computed(()=>[...new Set(otherRows.value.filter(row=>row.connected!==false).map(row=>row.providerLabel))]);const currentMarks=computed(()=>[...connectedCards.value,...otherConnected.value.length?[{id:`other`,mark:`+${otherConnected.value.length}`,shape:`circle`,tone:`neutral`}]:[]]);const currentNames=computed(()=>[...connectedCards.value.map(({name})=>name),...otherConnected.value]);const showAdvanced=computed(()=>props.canConfigure&&(wasSetUp.value||manager.configuredAiRows.value.length>0));const ownerRoles=computed(()=>setup.routing?.setups.value?.owner?.roles||null);const ownerSenior=computed(()=>ownerRoles.value?.senior?.effective||null);const mainKnown=computed(()=>Boolean(ownerRoles.value||setup.routing?.loadError.value));const mainAi=computed(()=>setup.mainAi?.value?.card.connected?setup.mainAi.value:null);const mainCard=computed(()=>mainAi.value?.card||null);const nativeLogin=computed(()=>[`anthropic`,`openai`].includes(chosen.value?.connect.modelProviderId));const missingTool=computed(()=>{const id=chosen.value?.connect.engineId;const status=setup.accounts?.status.value||{};return status.accounts?.find(account=>account.id===id&&cliProblem(account))||status.missingTools?.find(tool=>tool.id===id)||null});function neededTool(card){if(!card||card.connected)return null;return(setup.accounts?.status.value?.missingTools||[]).find(tool=>tool.id===card.connect.engineId)||null}const someToolMissing=computed(()=>(setup.accounts?.status.value?.missingTools||[]).length>0);const toolCheck=useLocalToolRows([`claude`,`codex`,`opencode`],{enabled:computed(()=>props.open&&props.canConfigure&&someToolMissing.value)});function cardTool(item){if(!item||item.connected||!someToolMissing.value)return null;const id=item.connect.engineId;const checked=toolCheck.tools.value.find(tool=>tool.id===id);if(checked)return checked;const missing=neededTool(item);return missing&&{id,name:missing.label,status:`missing`,install:missing.install,guideUrl:missing.install?.guideUrl}}function installFirst(item){const tool=cardTool(item);return tool&&tool.status!==`ready`&&!needsReconnect(item)?tool:null}const toolReady=item=>cardTool(item)?.status===`ready`;const noToolHere=computed(()=>!wasSetUp.value&&cards.value.every(card=>installFirst(card)));const readyHere=computed(()=>!wasSetUp.value&&installFirst(featured.value)?orderedCards.value.find(card=>toolReady(card)&&cardAction(card)===`get`)||null:null);const installOpen=ref(``);function toggleInstall(item){installOpen.value=installOpen.value===item.id?``:item.id}const checkingTools=ref(false);async function checkTools(){checkingTools.value=true;try{await Promise.all([setup.accounts?.refresh(),someToolMissing.value&&toolCheck.check()])}finally{checkingTools.value=false}}const skippable=computed(()=>!props.inline&&!wasSetUp.value&&![`success`,`owner`].includes(screen.value));const ownButtons=computed(()=>props.inline||!xs.value);const colleagueNote=computed(()=>usesProvider(outcome.value.colleague,chosen.value)?`uses`:setup.colleagueAvailable.value?`switch`:`menu`);const learning=inject(VIBE64_LEARNING_KEY,null);const learn=computed(()=>Boolean(unref(learning)?.learnMode));const inLesson=computed(()=>learn.value&&Boolean(unref(learning)?.mode?.currentAttemptId));const doneLabel=computed(()=>inLesson.value?`Back to the lesson`:learn.value?`Back to Learn`:`Start building`);const tourOffered=computed(()=>!props.inline&&firstRun.value&&!learn.value&&typeof unref(learning)?.openOrientation===`function`);function takeTour(){if(busy.value||!tourOffered.value)return;unref(learning).openOrientation();close(`tour`)}const proven=computed(()=>colleagueNote.value!==`uses`||learn.value||[`replied`,`dismissed`].includes(hello.value.state));const verifyLabel=computed(()=>!chosen.value?``:firstRun.value||makeMain.value?`Setting up ${chosen.value.name} as your main AI…`:`Checking ${chosen.value.name}…`);function readSetup(){const{isSetUp,loaded:known}=setup;wasSetUp.value=props.redo||isSetUp.value;firstRun.value=!props.redo&&known.value&&!isSetUp.value}watch(()=>props.open,open=>{if(!open)return;readSetup();setup.refreshColleague();direction.value=`forward`;screen.value=props.canConfigure?`choose`:`owner`;chosen.value=null;expandedId.value=``;announcement.value=``;resetAttempt()},{immediate:true});watch(()=>setup.loaded.value,known=>{if(props.open&&known&&!chosen.value)readSetup()});watch(()=>screen.value===`success`&&colleagueNote.value===`uses`,proving=>{if(proving&&!learn.value&&!hello.value.state)sayHello()});watch(routingForm,form=>{if(form&&autoRouting.value)useAsMain()});async function sayHello(){hello.value={state:`waiting`,reply:``,error:``};const result=await setup.sayHello();hello.value=result?.ok?{state:`replied`,reply:result.reply,error:``}:{state:`failed`,reply:``,error:result?.error||`No reply.`};announcement.value=result?.ok?`${chosen.value.name} is ready.`:`Colleague couldn't reach ${chosen.value.name}.`}function resetAttempt(){teamFlow.value=false;warning.value=``;chosenEngine.value=``;notReady.value=false;makeMain.value=false;routingReviewed.value=false;fullRouting.value=false;routingDetails.value=false;autoRouting.value=false;hello.value={state:``,reply:``,error:``}}function go(next,back=false){direction.value=back?`back`:`forward`;screen.value=next}function close(reason,card=null){if(busy.value)return;if(props.inline&&reason===`done`){chosen.value=null;readSetup();go(`choose`,true);return}emit(`close`,reason,card)}function openProvider(providerId=``,options={}){const id=String(providerId||``).trim();const card=Boolean(String(options.providerRevision||``).trim())?null:cards.value.find(item=>item.matches.native.includes(id)||item.matches.curated.includes(id));if(!card||!props.canConfigure){manager.openProvider(id,options);return}if(cardRows(card).length)openManage(card);else connect(card,`have`)}function focusTitle(){nextTick(()=>stage.value?.querySelector(`h1`)?.focus({preventScroll:true}))}function connect(card,step=``){chosen.value=card;signUp.value=step;resetAttempt();go(`connect`)}function makeMainAi(card){chosen.value=card;resetAttempt();makeMain.value=true;return finish()}function keep(card){chosen.value=card;resetAttempt();return finish({keep:true})}function cardRows(card){return card?aiOnboardingRows(card,manager.configuredAiRows.value):[]}function configured(card){return card.connected||cardRows(card).length>0||cardRows(card.free).length>0}function openManage(card){managedCard.value=card;manageOpen.value=true}function cardClass(card){return{"aio-card--featured":card.crown,"aio-card--connected":card.connected,"aio-card--reconnect":cardAction(card)===`reconnect`,"aio-card--collapsed":!expanded(card),"aio-card--needs-tool":cardAction(card)===`get`&&Boolean(installFirst(card)),"aio-card--installing":installOpen.value===card.id}}function needsReconnect(card){const rows=cardRows(card);return rows.length>0&&!rows.some(row=>row.kind===`opencode`?row.connected!==false:row.connected===true)}function cardAction(card){if(!card.connected)return needsReconnect(card)?`reconnect`:`get`;if(!wasSetUp.value)return`get`;if(!mainKnown.value)return`checking`;return usesProvider(ownerSenior.value,card)?`keep`:`main`}function cardNote(card){if(cardAction(card)===`reconnect`)return``;if(wasSetUp.value&&card.connected)return``;return card.crown&&wasSetUp.value&&connectedCards.value.length?card.upgrade:card.note}async function finish({keep:keeping=false}={}){if(teamFlow.value)return finishTeam();const card=chosen.value;verifying.value=true;warning.value=``;notReady.value=false;try{const[result,current]=await Promise.all([setup.verify(card),setup.refreshColleague()]);if(!result.connected){warning.value=`${card.name} isn't connected yet. Finish the connection step, then try again.`;if(screen.value!==`connect`)go(`connect`);return}chosenEngine.value=result.engineId;if(wasSetUp.value&&!keeping&&!routingReviewed.value&&result.routingWouldChange){currentSenior.value=result.currentSenior;autoRouting.value=!result.currentSenior;go(`routing`);return}if(!result.available){notReady.value=true;if(screen.value!==`connect`)go(`connect`);announcement.value=`${card.name} is connected, but no model is ready for Colleague yet.`;return}let colleague=current;let error=``;if((firstRun.value||makeMain.value)&&!usesProvider(colleague,card))({selection:colleague=colleague,error=``}=await setup.selectForColleague(card));outcome.value={routed:result.routed,colleague,error};go(`success`)}catch(error){warning.value=error?.message||`We couldn't check the connection. Try again.`}finally{verifying.value=false}}const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const team=computed(()=>setup.routing?.team.value||{available:false});const deepseekCard=computed(()=>cards.value.find(({id})=>id===`deepseek`));const deepseekInClaude=computed(()=>Boolean(deepseekCard.value?.through.includes(`claude`)));const teamUnset=computed(()=>Boolean(ownerRoles.value)&&ASSISTANT_SETUP_ROLES.nonOwner.every(role=>!setup.routing.setups.value.nonOwner?.roles?.[role]?.configured));const claudeMain=computed(()=>ownerSenior.value?.engineId===`claude`&&ownerSenior.value.modelProviderId===`anthropic`&&setup.routing?.viewerDecisions.value.senior?.available===true);const teamCardState=computed(()=>{if(!props.canConfigure||!wasSetUp.value)return``;if(teamSummary.value)return`ready`;return team.value.available&&claudeMain.value&&teamUnset.value&&(!teamSnoozed.value||props.focus===`team`)?`offer`:``});watch(()=>unref(viewer)?.actorKey,actorKey=>{teamSnoozed.value=aiTeamSetupSnoozed(actorKey)},{immediate:true});let teamFocusHandled=false;watch(()=>props.focus,()=>{teamFocusHandled=false});watch([()=>props.focus,teamCardState,()=>Boolean(ownerRoles.value)],async([focus,state,loaded])=>{if(focus!==`team`||!loaded||teamFocusHandled)return;teamFocusHandled=true;if(!state){if(props.canConfigure)openModels(`nonOwner`);return}await nextTick();teamCard.value?.$el?.scrollIntoView?.({block:`center`});teamCard.value?.$el?.focus?.({preventScroll:true})},{immediate:true});function snoozeTeam(){snoozeAiTeamSetup(unref(viewer)?.actorKey);teamSnoozed.value=true}function startTeamSetup(){teamError.value=``;if(deepseekInClaude.value)return fillTeam();connect(deepseekCard.value,`have`);teamFlow.value=true}async function fillTeam(){teamBusy.value=true;try{const result=await setup.fillTeamSetup({modelProviderId:`deepseek`,engineId:`claude`});teamSummary.value=result.ok?result.summary:``;teamError.value=result.ok?``:result.error;if(result.ok)announcement.value=`Team AI is ready.`;return result}finally{teamBusy.value=false}}async function finishTeam(){verifying.value=true;warning.value=``;try{await setup.reload();if(!deepseekInClaude.value){warning.value=`DeepSeek isn't connected in Claude Code yet. Finish the connection step, then try again.`;return}const result=await fillTeam();if(!result.ok){warning.value=result.error;return}teamFlow.value=false;chosen.value=null;go(`choose`,true)}finally{verifying.value=false}}function openModels(initialSetup=`owner`){manager.routingSetup.value=initialSetup;manager.routingOpen.value=true}watch(()=>manager.teamKeyRequests.value,startTeamSetup);const modelsSummary=computed(()=>{const text=(setupId,role)=>{const state=setup.routing?.setups.value?.[setupId]?.roles?.[role];return state?routingSelectionText(state.choices,state.effective):``};return[[`Senior`,text(`owner`,`senior`)],[`Junior`,text(`owner`,`junior`)],...team.value.available?[[`Team members`,text(`nonOwner`,`colleague`)||`Not set up`]]:[]].filter(([,value])=>value)});function reviewRouting(){fullRouting.value=true;go(`routing`)}function routingDone(){routingReviewed.value=true;return finish()}async function useAsMain(){makeMain.value=true;await routingForm.value?.applySuggested();if(screen.value!==`routing`)return;autoRouting.value=false;routingDetails.value=true}async function switchColleague(){verifying.value=true;try{const{selection=outcome.value.colleague,error=``}=await setup.selectForColleague(chosen.value);outcome.value={...outcome.value,colleague:selection,error}}finally{verifying.value=false}}function meterLabel([aspect,rating]){return`${aspect[0].toUpperCase()}${aspect.slice(1)}: ${RATINGS[rating]}`}function connectedLabel(card){return cardAction(card)===`keep`?`Connected · in use`:`Connected`}function collapsible(card){return xs.value&&!card.crown&&!configured(card)}function expanded(card){return!collapsible(card)||expandedId.value===card.id}watch(busy,value=>emit(`busy`,value));const route=useRoute();let routedProviderId=``;watch(()=>[props.inline?String(route?.query?.providerId||``):``,String(route?.query?.providerRevision||``),manager.accountsInitialLoading.value],([id,revision,loading])=>{if(!id||revision||loading||id===routedProviderId)return;routedProviderId=id;openProvider(id,{providerLabel:String(route.query.providerLabel||``)})},{immediate:true});__expose({busy,doneLabel,screen,skippable,tourOffered,wasSetUp,back:()=>go(`choose`,true),openProvider,takeTour});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{ref_key:`stage`,ref:stage,class:normalizeClass([`ai-setup`,{"ai-setup--phone":unref(xs),"ai-setup--pointer":pointerMoved.value,"ai-setup--inline":__props.inline}]),onPointermoveOnce:_cache[27]||(_cache[27]=$event=>pointerMoved.value=true)},[createVNode(Transition,{name:`aio-${direction.value}`,mode:`out-in`,onAfterEnter:focusTitle},{default:withCtx(()=>[screen.value===`choose`?(openBlock(),createElementBlock(`section`,_hoisted_1$3,[createBaseVNode(`header`,_hoisted_2$3,[createBaseVNode(`h1`,_hoisted_3$2,toDisplayString(wasSetUp.value?`Your AI setup`:`Pick the AI behind Vibe64`),1),createBaseVNode(`p`,_hoisted_4$2,toDisplayString(wasSetUp.value?`Keep what you have, switch your main AI, or add another. Nothing is removed.`:`Ranked by how good Vibe64 feels. Our honest advice: Claude.`),1),noToolHere.value?(openBlock(),createElementBlock(`p`,_hoisted_5$1,`No AI tool is on this computer yet. Install the one your AI needs first.`)):createCommentVNode(``,true)]),wasSetUp.value&&currentMarks.value.length?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[createBaseVNode(`span`,_hoisted_7$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(currentMarks.value,card=>{return openBlock(),createBlock(AiOnboardingMark_default,{key:card.id,provider:{...card,crown:false},size:36},null,8,[`provider`])}),128))]),createBaseVNode(`span`,_hoisted_8$1,[createBaseVNode(`span`,_hoisted_9$1,toDisplayString(mainCard.value?`Currently using`:`Connected`),1),createBaseVNode(`span`,_hoisted_10$1,toDisplayString(mainAi.value?`Main AI: ${mainAi.value.label}`:currentNames.value.join(`, `)),1)]),mainCard.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,size:`large`,disabled:verifying.value&&chosen.value?.id!==mainCard.value.id,loading:verifying.value&&chosen.value?.id===mainCard.value.id,class:`aio-current__keep`,onClick:_cache[0]||(_cache[0]=$event=>keep(mainCard.value))},{default:withCtx(()=>[createTextVNode(` Keep using `+toDisplayString(mainCard.value.name),1)]),_:1},8,[`disabled`,`loading`])):(openBlock(),createElementBlock(`span`,_hoisted_11$1,[createVNode(VIcon,{icon:unref(mdiArrowDown),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),_cache[28]||(_cache[28]=createTextVNode(`Choose a main AI below. We recommend Claude. `,-1))]))])):createCommentVNode(``,true),teamCardState.value?(openBlock(),createBlock(AiTeamSetupCard_default,{key:1,ref_key:`teamCard`,ref:teamCard,state:teamCardState.value,"key-connected":deepseekInClaude.value,busy:teamBusy.value,error:teamError.value,summary:teamSummary.value,onAdd:startTeamSetup,onSnooze:snoozeTeam,onReview:_cache[1]||(_cache[1]=$event=>openModels(`nonOwner`))},null,8,[`state`,`key-connected`,`busy`,`error`,`summary`])):createCommentVNode(``,true),loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,class:`mb-6`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>unref(setup).reload())},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Try again`,-1)])]),_:1})]),default:withCtx(()=>[_cache[30]||(_cache[30]=createTextVNode(` We couldn't check your current AI connections. `,-1))]),_:1})):createCommentVNode(``,true),createVNode(AiWaitStatus_default,{active:verifying.value,label:verifyLabel.value,class:`mb-6`},null,8,[`active`,`label`]),readyHere.value?(openBlock(),createElementBlock(`div`,_hoisted_12$1,[createVNode(VIcon,{icon:unref(mdiCheckCircle),class:`aio-ready-here__icon`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_13$1,[_cache[31]||(_cache[31]=createBaseVNode(`span`,{class:`aio-current__label`},`Ready on this computer`,-1)),createBaseVNode(`span`,_hoisted_14$1,toDisplayString(cardTool(readyHere.value).name),1)]),createVNode(VBtn,{color:`primary`,variant:`tonal`,size:`large`,"append-icon":unref(mdiArrowRight),class:`aio-current__keep`,onClick:_cache[3]||(_cache[3]=$event=>connect(readyHere.value))},{default:withCtx(()=>[createTextVNode(` Use `+toDisplayString(readyHere.value.name),1)]),_:1},8,[`append-icon`])])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_15$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(orderedCards.value,(card,index)=>{return openBlock(),createElementBlock(`article`,{key:card.id,class:normalizeClass([`aio-card`,cardClass(card)]),style:normalizeStyle({"--aio-index":index}),"aria-labelledby":`aio-card-${card.id}`},[card.crown?(openBlock(),createElementBlock(`span`,_hoisted_17$1,`Recommended`)):createCommentVNode(``,true),card.connected?(openBlock(),createElementBlock(`span`,_hoisted_18$1,[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`16`,"aria-hidden":`true`},null,8,[`icon`]),createTextVNode(toDisplayString(connectedLabel(card)),1),renderSlot(_ctx.$slots,`connection-access`,{card,place:`badge`},void 0,true)])):cardAction(card)===`reconnect`?(openBlock(),createElementBlock(`span`,_hoisted_19,[createVNode(VIcon,{icon:unref(mdiAlertCircleOutline),size:`16`,"aria-hidden":`true`},null,8,[`icon`]),_cache[32]||(_cache[32]=createTextVNode(`Reconnect required `,-1))])):createCommentVNode(``,true),(openBlock(),createBlock(resolveDynamicComponent(collapsible(card)?`button`:`div`),{class:`aio-card__head`,type:collapsible(card)?`button`:void 0,"aria-expanded":collapsible(card)?String(expanded(card)):void 0,onClick:$event=>collapsible(card)&&(expandedId.value=expandedId.value===card.id?``:card.id)},{default:withCtx(()=>[!card.crown?(openBlock(),createElementBlock(`span`,_hoisted_20,toDisplayString(card.rank),1)):createCommentVNode(``,true),createVNode(AiOnboardingMark_default,{provider:card,size:card.crown?unref(xs)?52:64:44,"settle-delay":card.crown?CROWN_SETTLE_MS:-1},null,8,[`provider`,`size`,`settle-delay`]),createBaseVNode(`span`,_hoisted_21,[createBaseVNode(`span`,{id:`aio-card-${card.id}`,class:`aio-card__name`},toDisplayString(card.name),9,_hoisted_22),createBaseVNode(`span`,_hoisted_23,toDisplayString(card.tagline),1)]),collapsible(card)?(openBlock(),createBlock(VIcon,{key:1,icon:unref(mdiChevronDown),class:`aio-card__chevron`,"aria-hidden":`true`},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`type`,`aria-expanded`,`onClick`])),card.connected?renderSlot(_ctx.$slots,`connection-access`,{card,place:`card`},void 0,true,3):createCommentVNode(``,true),expanded(card)?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`div`,_hoisted_24,[!loaded.value&&!loadError.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`chip`,width:`120`,height:`24`})):createCommentVNode(``,true),createBaseVNode(`ul`,_hoisted_25,[(openBlock(true),createElementBlock(Fragment,null,renderList(card.bullets,bullet=>{return openBlock(),createElementBlock(`li`,{key:bullet[0]},[createBaseVNode(`span`,{class:normalizeClass([`aio-meter`,{"aio-meter--low":bullet[1]<=2}]),role:`img`,"aria-label":meterLabel(bullet),title:meterLabel(bullet)},[(openBlock(),createElementBlock(Fragment,null,renderList(5,segment=>{return createBaseVNode(`i`,{key:segment,class:normalizeClass({"is-filled":segment<=bullet[1]})},null,2)}),64))],10,_hoisted_26),createBaseVNode(`span`,null,toDisplayString(bullet[2]),1)])}),128))]),card.why?(openBlock(),createElementBlock(`p`,_hoisted_27,toDisplayString(card.why),1)):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_28,[cardNote(card)?(openBlock(),createElementBlock(`p`,_hoisted_29,[createVNode(VIcon,{icon:unref(mdiInformationOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createTextVNode(toDisplayString(cardNote(card)),1)])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_30,[cardAction(card)===`get`?(openBlock(),createElementBlock(`div`,_hoisted_31,[createBaseVNode(`span`,_hoisted_32,toDisplayString(card.plan.name),1),createBaseVNode(`span`,_hoisted_33,toDisplayString(card.plan.price),1),card.plan.budget?(openBlock(),createElementBlock(`span`,_hoisted_34,toDisplayString(card.plan.budget),1)):createCommentVNode(``,true),card.plan.more?(openBlock(),createElementBlock(`span`,_hoisted_35,toDisplayString(card.plan.more),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_36,[cardAction(card)===`main`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,size:`large`,disabled:verifying.value,"aria-label":`Use ${card.name} as my main AI`,onClick:$event=>makeMainAi(card)},{default:withCtx(()=>[createTextVNode(toDisplayString(card.crown?`Use ${card.name} as my main AI`:`Use as main AI`),1)]),_:2},1032,[`disabled`,`aria-label`,`onClick`])):cardAction(card)===`checking`?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,size:`large`,loading:``,disabled:``,"aria-label":`Checking which AI is your main AI`})):cardAction(card)===`reconnect`?(openBlock(),createBlock(VBtn,{key:2,color:`warning`,variant:`flat`,size:`large`,disabled:verifying.value,onClick:$event=>connect(card,`have`)},{default:withCtx(()=>[createTextVNode(` Reconnect `+toDisplayString(card.name),1)]),_:2},1032,[`disabled`,`onClick`])):cardAction(card)===`get`&&installFirst(card)?(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VBtn,{color:`primary`,variant:CTA_VARIANT[card.rank-1],size:`large`,"aria-expanded":String(installOpen.value===card.id),"aria-controls":`aio-install-${card.id}`,onClick:$event=>toggleInstall(card)},{default:withCtx(()=>[createTextVNode(` Install `+toDisplayString(installFirst(card).name)+` first `,1)]),_:2},1032,[`variant`,`aria-expanded`,`aria-controls`,`onClick`]),createVNode(VBtn,{variant:`text`,color:`primary`,class:`aio-card__link`,href:card.signUp.url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),onClick:$event=>connect(card,`opened`)},{default:withCtx(()=>[createTextVNode(` Get `+toDisplayString(card.name),1),_cache[33]||(_cache[33]=createBaseVNode(`span`,{class:`d-sr-only`},` (opens in a new tab)`,-1))]),_:2},1032,[`href`,`append-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,color:`primary`,class:`aio-card__link`,onClick:$event=>connect(card,`have`)},{default:withCtx(()=>[createTextVNode(toDisplayString(card.have),1)]),_:2},1032,[`onClick`])],64)):cardAction(card)===`get`?(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VBtn,{color:`primary`,variant:CTA_VARIANT[card.rank-1],size:`large`,href:card.signUp.url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),onClick:$event=>connect(card,`opened`)},{default:withCtx(()=>[createTextVNode(` Get `+toDisplayString(card.name),1),_cache[34]||(_cache[34]=createBaseVNode(`span`,{class:`d-sr-only`},` (opens in a new tab)`,-1))]),_:2},1032,[`variant`,`href`,`append-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,color:`primary`,class:`aio-card__link`,onClick:$event=>connect(card,`have`)},{default:withCtx(()=>[createTextVNode(toDisplayString(card.have),1)]),_:2},1032,[`onClick`])],64)):createCommentVNode(``,true),cardRows(card).length?(openBlock(),createBlock(VBtn,{key:5,variant:`text`,color:`primary`,class:`aio-card__link`,"prepend-icon":unref(mdiTuneVariant),"aria-label":`Manage ${card.name}`,onClick:$event=>openManage(card)},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(` Manage `,-1)])]),_:1},8,[`prepend-icon`,`aria-label`,`onClick`])):createCommentVNode(``,true)]),toolReady(card)?(openBlock(),createElementBlock(`p`,{key:1,class:`aio-card__needs aio-card__needs--ready`,title:cardTool(card).path},[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),_cache[36]||(_cache[36]=createTextVNode(`Ready on this computer `,-1))],8,_hoisted_37)):neededTool(card)&&!installFirst(card)?(openBlock(),createElementBlock(`p`,_hoisted_38,[createVNode(VIcon,{icon:unref(mdiLaptop),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createTextVNode(`Needs `+toDisplayString(neededTool(card).label)+` on this computer `,1)])):createCommentVNode(``,true),installOpen.value===card.id&&cardTool(card)?(openBlock(),createBlock(ToolInstallRow_default,{key:3,id:`aio-install-${card.id}`,class:`aio-card__install`,tool:cardTool(card),checking:checkingTools.value,onCheck:checkTools},null,8,[`id`,`tool`,`checking`])):createCommentVNode(``,true),card.free?(openBlock(),createElementBlock(`div`,_hoisted_39,[createBaseVNode(`p`,_hoisted_40,[createBaseVNode(`strong`,null,toDisplayString(card.free.label),1),createBaseVNode(`span`,null,toDisplayString(card.free.connected?`Connected.`:card.free.detail),1),toolReady(card.free)?(openBlock(),createElementBlock(`span`,{key:0,class:`aio-card__needs aio-card__needs--ready`,title:cardTool(card.free).path},[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),_cache[37]||(_cache[37]=createTextVNode(`Ready on this computer `,-1))],8,_hoisted_41)):neededTool(card.free)&&!installFirst(card.free)?(openBlock(),createElementBlock(`span`,_hoisted_42,[createVNode(VIcon,{icon:unref(mdiLaptop),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createTextVNode(`Needs `+toDisplayString(neededTool(card.free).label)+` on this computer `,1)])):createCommentVNode(``,true)]),installFirst(card.free)?(openBlock(),createBlock(VBtn,{key:0,variant:`outlined`,color:`primary`,"aria-expanded":String(installOpen.value===card.free.id),"aria-controls":`aio-install-${card.free.id}`,onClick:$event=>toggleInstall(card.free)},{default:withCtx(()=>[createTextVNode(` Install `+toDisplayString(installFirst(card.free).name)+` first `,1)]),_:2},1032,[`aria-expanded`,`aria-controls`,`onClick`])):createCommentVNode(``,true),!card.free.connected?(openBlock(),createBlock(VBtn,{key:1,variant:installFirst(card.free)?`text`:`outlined`,color:`primary`,href:card.free.signUp.url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),onClick:$event=>connect(card.free,`opened`)},{default:withCtx(()=>[..._cache[38]||(_cache[38]=[createTextVNode(` Start free`,-1),createBaseVNode(`span`,{class:`d-sr-only`},` (opens Z.AI in a new tab)`,-1)])]),_:1},8,[`variant`,`href`,`append-icon`,`onClick`])):createCommentVNode(``,true),!card.free.connected?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,color:`primary`,class:`aio-card__link`,onClick:$event=>connect(card.free,`have`)},{default:withCtx(()=>[createTextVNode(toDisplayString(card.free.have),1)]),_:2},1032,[`onClick`])):cardAction(card.free)===`main`?(openBlock(),createBlock(VBtn,{key:3,variant:`text`,color:`primary`,disabled:verifying.value,onClick:$event=>makeMainAi(card.free)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(` Use the free option as my main AI `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true),cardRows(card.free).length&&!cardRows(card).length?(openBlock(),createBlock(VBtn,{key:4,variant:`text`,color:`primary`,class:`aio-card__link`,"prepend-icon":unref(mdiTuneVariant),"aria-label":`Manage ${card.free.name}`,onClick:$event=>openManage(card)},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(` Manage `,-1)])]),_:1},8,[`prepend-icon`,`aria-label`,`onClick`])):createCommentVNode(``,true),installOpen.value===card.free.id&&cardTool(card.free)?(openBlock(),createBlock(ToolInstallRow_default,{key:5,id:`aio-install-${card.free.id}`,class:`aio-card__install`,tool:cardTool(card.free),checking:checkingTools.value,onCheck:checkTools},null,8,[`id`,`tool`,`checking`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true)],14,_hoisted_16$1)}),128))]),__props.canConfigure&&wasSetUp.value&&modelsSummary.value.length?(openBlock(),createElementBlock(`section`,_hoisted_43,[createBaseVNode(`div`,_hoisted_44,[_cache[41]||(_cache[41]=createBaseVNode(`h2`,{id:`aio-models-title`,class:`aio-models__title`},`Models`,-1)),createBaseVNode(`dl`,_hoisted_45,[(openBlock(true),createElementBlock(Fragment,null,renderList(modelsSummary.value,([label,value])=>{return openBlock(),createElementBlock(`div`,{key:label},[createBaseVNode(`dt`,null,toDisplayString(label),1),createBaseVNode(`dd`,null,toDisplayString(value),1)])}),128))])]),createVNode(VBtn,{color:`primary`,variant:`tonal`,"prepend-icon":unref(mdiTuneVariant),class:`aio-models__open`,onClick:_cache[4]||(_cache[4]=$event=>openModels())},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Review models`,-1)])]),_:1},8,[`prepend-icon`])])):createCommentVNode(``,true),showAdvanced.value?(openBlock(),createBlock(AiSetupAdvanced_default,{key:5,"other-rows":otherRows.value},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,normalizeProps(guardReactiveProps(scope)),void 0,true)]),_:3},8,[`other-rows`])):createCommentVNode(``,true),_cache[44]||(_cache[44]=createBaseVNode(`p`,{class:`ai-onboarding__footnote`},`Prices are set by each provider and can change. You pay them directly; Vibe64 never resells AI.`,-1)),unref(xs)&&skippable.value?(openBlock(),createBlock(VBtn,{key:6,block:``,variant:`text`,class:`mt-4`,onClick:_cache[5]||(_cache[5]=$event=>close(`later`))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Set up later`,-1)])]),_:1})):createCommentVNode(``,true)])):screen.value===`connect`?(openBlock(),createElementBlock(`section`,_hoisted_46,[ownButtons.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,class:`aio-back`,"prepend-icon":unref(mdiArrowLeft),disabled:busy.value,onClick:_cache[6]||(_cache[6]=$event=>go(`choose`,true))},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Back`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createBaseVNode(`header`,_hoisted_47,[createVNode(AiOnboardingMark_default,{provider:chosen.value,size:56,"settle-delay":chosen.value.crown?150:-1},null,8,[`provider`,`settle-delay`]),createBaseVNode(`div`,_hoisted_48,[createBaseVNode(`h1`,_hoisted_49,`Connect `+toDisplayString(chosen.value.name),1),createBaseVNode(`p`,_hoisted_50,[teamFlow.value?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(`For team members · runs inside Claude Code`)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(chosen.value.plan.name)+` · `,1),createBaseVNode(`span`,_hoisted_51,toDisplayString(chosen.value.plan.price),1)],64))])])]),createBaseVNode(`ol`,_hoisted_52,[createBaseVNode(`li`,{class:normalizeClass({"is-done":signUp.value===`opened`})},[createBaseVNode(`span`,_hoisted_53,[signUp.value===`opened`?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`18`},null,8,[`icon`])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`1`)],64))]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,_hoisted_54,[createTextVNode(toDisplayString(signUp.value===`have`?chosen.value.haveTitle:`Get a plan`),1),signUp.value===`opened`?(openBlock(),createElementBlock(`span`,_hoisted_55,` (done)`)):createCommentVNode(``,true)]),createBaseVNode(`p`,_hoisted_56,toDisplayString(signUp.value===`have`?`Go straight to the next step. Need one after all? Open the sign-up page.`:[chosen.value.signUp.step,chosen.value.plan.budget].filter(Boolean).join(` `)),1),createVNode(VBtn,{variant:`tonal`,color:`primary`,href:chosen.value.signUp.url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),onClick:_cache[7]||(_cache[7]=$event=>signUp.value=`opened`)},{default:withCtx(()=>[createTextVNode(toDisplayString(chosen.value.signUp.label),1),_cache[46]||(_cache[46]=createBaseVNode(`span`,{class:`d-sr-only`},` (opens in a new tab)`,-1))]),_:1},8,[`href`,`append-icon`])])],2),createBaseVNode(`li`,null,[_cache[51]||(_cache[51]=createBaseVNode(`span`,{class:`aio-checklist__marker`,"aria-hidden":`true`},`2`,-1)),createBaseVNode(`div`,_hoisted_57,[createBaseVNode(`h2`,_hoisted_58,toDisplayString(chosen.value.connectStep.title),1),createBaseVNode(`p`,_hoisted_59,toDisplayString(chosen.value.connectStep.body),1),nativeLogin.value?(openBlock(),createBlock(_sfc_main$14,{key:0,embedded:``,"provider-id":chosen.value.connect.engineId,"model-provider-id":chosen.value.connect.modelProviderId,onConnected:_cache[8]||(_cache[8]=$event=>finish()),onBack:_cache[9]||(_cache[9]=$event=>go(`choose`,true))},null,8,[`provider-id`,`model-provider-id`])):missingTool.value?(openBlock(),createBlock(CliInstallNotice_default,{key:1,account:missingTool.value,checking:checkingTools.value,onCheck:checkTools},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:_cache[10]||(_cache[10]=$event=>go(`choose`,true))},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(`Choose another AI`,-1)])]),_:1})]),_:1},8,[`account`,`checking`])):chosen.value.connect.engineId===`opencode`?(openBlock(),createBlock(AiOnboardingKeyConnect_default,{key:2,"model-provider-id":chosen.value.connect.modelProviderId,label:chosen.value.name,onBusy:_cache[11]||(_cache[11]=$event=>setupBusy.value=$event),onConnected:_cache[12]||(_cache[12]=$event=>finish())},null,8,[`model-provider-id`,`label`])):(openBlock(),createBlock(NativeProviderConnections_default,{key:3,embedded:``,adding:``,"select-provider":false,"engine-id":chosen.value.connect.engineId,"model-value":chosen.value.connect.modelProviderId,onBusy:_cache[13]||(_cache[13]=$event=>setupBusy.value=$event),onClose:_cache[14]||(_cache[14]=$event=>finish())},null,8,[`engine-id`,`model-value`])),createVNode(AiWaitStatus_default,{active:verifying.value,label:verifyLabel.value,class:`mt-4`},null,8,[`active`,`label`]),warning.value?(openBlock(),createBlock(VAlert,{key:4,type:`warning`,variant:`tonal`,class:`mt-4`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[15]||(_cache[15]=$event=>finish())},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(warning.value)+` `,1)]),_:1})):createCommentVNode(``,true),notReady.value?(openBlock(),createBlock(VAlert,{key:5,type:`warning`,variant:`tonal`,class:`mt-4`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:reviewRouting},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Review models`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(chosen.value.name)+` is connected, but no model is ready for Colleague yet. `,1)]),_:1})):createCommentVNode(``,true),nativeLogin.value?(openBlock(),createElementBlock(`p`,_hoisted_60,[createVNode(VIcon,{icon:unref(mdiShieldLockOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),_cache[50]||(_cache[50]=createTextVNode(` Your sign-in is stored privately, outside your projects. `,-1))])):createCommentVNode(``,true)])])]),unref(xs)&&skippable.value?(openBlock(),createBlock(VBtn,{key:1,block:``,variant:`text`,class:`mt-6`,disabled:busy.value,onClick:_cache[16]||(_cache[16]=$event=>close(`later`))},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Set up later`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):screen.value===`routing`?(openBlock(),createElementBlock(`section`,_hoisted_61,[ownButtons.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,class:`aio-back`,"prepend-icon":unref(mdiArrowLeft),disabled:busy.value,onClick:_cache[17]||(_cache[17]=$event=>go(`choose`,true))},{default:withCtx(()=>[..._cache[53]||(_cache[53]=[createTextVNode(`Back`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createBaseVNode(`header`,_hoisted_62,[!fullRouting.value?(openBlock(),createBlock(AiOnboardingMark_default,{key:0,provider:chosen.value,size:56,class:`mb-5`},null,8,[`provider`])):createCommentVNode(``,true),_cache[54]||(_cache[54]=createBaseVNode(`p`,{class:`ai-onboarding__eyebrow`},`YOUR MAIN AI`,-1)),createBaseVNode(`h1`,_hoisted_63,toDisplayString(fullRouting.value?`Review models`:autoRouting.value?`Setting up ${chosen.value.name}…`:`Build with ${chosen.value.name}?`),1),!fullRouting.value&&!autoRouting.value?(openBlock(),createElementBlock(`p`,_hoisted_64,toDisplayString(chosen.value.name)+` is connected. Choose what Vibe64 builds with.`,1)):createCommentVNode(``,true)]),autoRouting.value?(openBlock(),createElementBlock(`div`,_hoisted_65,[createVNode(VProgressCircular,{indeterminate:``,color:`primary`,size:`24`,width:`3`}),createTextVNode(`Making `+toDisplayString(chosen.value.name)+` your main AI `,1)])):!fullRouting.value?(openBlock(),createElementBlock(`div`,_hoisted_66,[createBaseVNode(`button`,{type:`button`,class:`aio-option aio-option--primary`,disabled:busy.value,onClick:useAsMain},[createBaseVNode(`span`,_hoisted_68,`Use `+toDisplayString(chosen.value.name)+` for building`,1),createBaseVNode(`span`,_hoisted_69,`Vibe64 uses `+toDisplayString(chosen.value.name)+` for its main work. `+toDisplayString(currentSenior.value?.name)+` stays connected.`,1),routingBusy.value?(openBlock(),createBlock(VProgressCircular,{key:0,indeterminate:``,size:`20`,width:`2`,class:`aio-option__busy`})):createCommentVNode(``,true)],8,_hoisted_67),createBaseVNode(`button`,{type:`button`,class:`aio-option`,disabled:busy.value,onClick:routingDone},[createBaseVNode(`span`,_hoisted_71,`Keep `+toDisplayString(currentSenior.value?.name)+` for building`,1),createBaseVNode(`span`,_hoisted_72,toDisplayString(chosen.value.name)+` stays connected and ready in AI Accounts.`,1)],8,_hoisted_70)])):createCommentVNode(``,true),!fullRouting.value&&!autoRouting.value?(openBlock(),createBlock(VBtn,{key:3,variant:`text`,class:normalizeClass([`aio-details-toggle`,{"is-open":routingDetails.value}]),"append-icon":unref(mdiChevronDown),"aria-expanded":String(routingDetails.value),onClick:_cache[18]||(_cache[18]=$event=>routingDetails.value=!routingDetails.value)},{default:withCtx(()=>[createTextVNode(toDisplayString(routingDetails.value?`Hide details`:`Show details`),1)]),_:1},8,[`append-icon`,`class`,`aria-expanded`])):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,_hoisted_73,[createVNode(ModelRoutingForm_default,{ref_key:`routingForm`,ref:routingForm,plain:!fullRouting.value,"connection-id":fullRouting.value?``:chosen.value.connect.modelProviderId,"connection-label":fullRouting.value?``:chosen.value.name,"prefer-engine-id":fullRouting.value?``:chosenEngine.value,onBusy:_cache[19]||(_cache[19]=$event=>routingBusy.value=$event),onSaved:routingDone,onClose:routingDone},null,8,[`plain`,`connection-id`,`connection-label`,`prefer-engine-id`])],512),[[vShow,fullRouting.value||routingDetails.value]])])):screen.value===`success`?(openBlock(),createElementBlock(`section`,_hoisted_74,[createBaseVNode(`div`,{class:normalizeClass([`aio-success-mark`,`aio-success-mark--${chosen.value.tone}`])},[createVNode(AiOnboardingMark_default,{provider:chosen.value,size:96,"settle-delay":chosen.value.crown?350:-1},null,8,[`provider`,`settle-delay`]),proven.value?(openBlock(),createElementBlock(`svg`,_hoisted_75,[..._cache[55]||(_cache[55]=[createBaseVNode(`circle`,{cx:`20`,cy:`20`,r:`18`},null,-1),createBaseVNode(`path`,{d:`M12 20.5 l5.5 5.5 l10.5 -11`},null,-1)])])):createCommentVNode(``,true)],2),createBaseVNode(`h1`,_hoisted_76,toDisplayString(hello.value.state===`failed`?`Almost there`:hello.value.state===`waiting`?`${chosen.value.name} is connected`:`${chosen.value.name} is ready`),1),colleagueNote.value!==`menu`&&hello.value.state!==`failed`?(openBlock(),createElementBlock(`p`,_hoisted_77,toDisplayString(learn.value?`Next: ${inLesson.value?`back to your lesson`:`choose a lesson`}.`:`Next: Colleague opens so you can ask it to build your first page.`),1)):createCommentVNode(``,true),colleagueNote.value===`uses`?(openBlock(),createElementBlock(`div`,{key:1,class:normalizeClass([`aio-proof`,{"aio-proof--failed":hello.value.state===`failed`}]),"aria-busy":hello.value.state===`waiting`?`true`:void 0},[createBaseVNode(`span`,_hoisted_79,[(openBlock(),createElementBlock(`svg`,_hoisted_80,[createBaseVNode(`path`,{d:hello.value.state===`failed`?unref(mdiAlertCircleOutline):unref(mdiRobotHappyOutline)},null,8,_hoisted_81)]))]),createBaseVNode(`div`,_hoisted_82,[hello.value.state===`failed`?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`span`,_hoisted_83,`Colleague couldn't reach `+toDisplayString(chosen.value.name),1),createBaseVNode(`p`,_hoisted_84,toDisplayString(hello.value.error),1),createBaseVNode(`div`,_hoisted_85,[createVNode(VBtn,{color:`primary`,variant:`tonal`,onClick:sayHello},{default:withCtx(()=>[..._cache[56]||(_cache[56]=[createTextVNode(`Retry`,-1)])]),_:1}),createVNode(VBtn,{variant:`text`,color:`primary`,onClick:_cache[20]||(_cache[20]=$event=>go(`connect`,true))},{default:withCtx(()=>[..._cache[57]||(_cache[57]=[createTextVNode(`Check connection`,-1)])]),_:1}),createVNode(VBtn,{variant:`text`,onClick:_cache[21]||(_cache[21]=$event=>hello.value.state=`dismissed`)},{default:withCtx(()=>[..._cache[58]||(_cache[58]=[createTextVNode(`Continue anyway`,-1)])]),_:1})])],64)):(openBlock(),createElementBlock(Fragment,{key:1},[_cache[60]||(_cache[60]=createBaseVNode(`span`,{class:`aio-proof__name`},`Colleague`,-1)),hello.value.state===`waiting`?(openBlock(),createElementBlock(`span`,_hoisted_86,[..._cache[59]||(_cache[59]=[createBaseVNode(`span`,{class:`d-sr-only`},`Colleague is replying…`,-1),createBaseVNode(`i`,null,null,-1),createBaseVNode(`i`,null,null,-1),createBaseVNode(`i`,null,null,-1)])])):hello.value.state===`replied`?(openBlock(),createElementBlock(`p`,_hoisted_87,toDisplayString(hello.value.reply),1)):(openBlock(),createElementBlock(`p`,_hoisted_88,toDisplayString(learn.value?`Your teacher uses ${chosen.value.name} from your next message.`:`Ready when you are. Say hi in the Colleague panel.`),1))],64))])],10,_hoisted_78)):colleagueNote.value===`switch`?(openBlock(),createElementBlock(`div`,_hoisted_89,[outcome.value.colleague?(openBlock(),createBlock(VChip,{key:0,variant:`tonal`},{default:withCtx(()=>[createTextVNode(`Colleague: still using `+toDisplayString(outcome.value.colleague.label),1)]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,color:`primary`,loading:verifying.value,onClick:switchColleague},{default:withCtx(()=>[createTextVNode(`Use `+toDisplayString(chosen.value.name)+` for Colleague`,1)]),_:1},8,[`loading`])])):(openBlock(),createElementBlock(`p`,_hoisted_90,`Choose `+toDisplayString(chosen.value.name)+` in Colleague's model menu to use it there.`,1)),outcome.value.error?(openBlock(),createBlock(VAlert,{key:4,type:`warning`,variant:`tonal`,class:`ai-onboarding__colleague-error`},{default:withCtx(()=>[createTextVNode(` Colleague couldn't switch to `+toDisplayString(chosen.value.name)+`: `+toDisplayString(outcome.value.error),1)]),_:1})):createCommentVNode(``,true),colleagueNote.value===`uses`?(openBlock(),createElementBlock(`dl`,_hoisted_91,[_cache[61]||(_cache[61]=createBaseVNode(`dt`,null,`Main AI`,-1)),createBaseVNode(`dd`,null,[createTextVNode(toDisplayString(mainAi.value?.card.id===chosen.value.id?mainAi.value.label:chosen.value.name),1),outcome.value.colleague?.label?(openBlock(),createElementBlock(`span`,_hoisted_92,` · `+toDisplayString(outcome.value.colleague.label),1)):createCommentVNode(``,true)])])):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_93,`Change it any time in `+toDisplayString(__props.changeWhere)+`.`,1),!outcome.value.routed?(openBlock(),createElementBlock(`p`,_hoisted_94,` Your current models stay as they are. `+toDisplayString(chosen.value.name)+` is ready in AI Accounts whenever you want it. `,1)):createCommentVNode(``,true),renderSlot(_ctx.$slots,`connection-access`,{card:chosen.value,place:`success`},void 0,true),ownButtons.value?(openBlock(),createElementBlock(`div`,_hoisted_95,[createVNode(VBtn,{color:`primary`,variant:`flat`,size:`large`,block:unref(xs),"append-icon":unref(mdiArrowRight),onClick:_cache[22]||(_cache[22]=$event=>close(`done`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.inline?`Done`:doneLabel.value),1)]),_:1},8,[`block`,`append-icon`]),tourOffered.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,size:`large`,block:unref(xs),"prepend-icon":unref(mdiMapMarkerPath),"data-test":`ai-setup-take-tour`,onClick:takeTour},{default:withCtx(()=>[..._cache[62]||(_cache[62]=[createTextVNode(` Take a 5-minute tour `,-1)])]),_:1},8,[`block`,`prepend-icon`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`section`,_hoisted_96,[createVNode(VIcon,{icon:unref(mdiAlertCircleOutline),size:`48`,color:`primary`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`h1`,_hoisted_97,toDisplayString(__props.ownerNotice),1),createVNode(VBtn,{variant:`tonal`,color:`primary`,size:`large`,onClick:_cache[23]||(_cache[23]=$event=>openModels(`nonOwner`))},{default:withCtx(()=>[..._cache[63]||(_cache[63]=[createTextVNode(`See team members' models`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,size:`large`,onClick:_cache[24]||(_cache[24]=$event=>close(`dismiss`))},{default:withCtx(()=>[..._cache[64]||(_cache[64]=[createTextVNode(`Close`,-1)])]),_:1})]))]),_:3},8,[`name`]),createBaseVNode(`p`,_hoisted_98,toDisplayString(announcement.value),1),createVNode(AiProviderManage_default,{modelValue:manageOpen.value,"onUpdate:modelValue":_cache[25]||(_cache[25]=$event=>manageOpen.value=$event),card:managedCard.value,onConnect:_cache[26]||(_cache[26]=$event=>connect($event,`have`))},{"connection-access":withCtx(scope=>[renderSlot(_ctx.$slots,`connection-access`,normalizeProps(guardReactiveProps(scope)),void 0,true)]),_:3},8,[`modelValue`,`card`]),createVNode(AiConnectionDialogs_default)],34)}}};var AiSetup_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-c29462b1`]]);var _hoisted_1$2={class:`ai-onboarding__bar`};var _hoisted_2$2={key:1,class:`ai-onboarding__wordmark`};var _hoisted_3$1={key:2,class:`ai-onboarding__dots`,"aria-hidden":`true`};var _hoisted_4$1={class:`ai-onboarding__bar-actions`};var _hoisted_5={class:`ai-onboarding__main`};var _hoisted_6={key:0,class:`d-sr-only`};var _hoisted_7={key:`why`,class:`ai-onboarding__why`};var _hoisted_8={class:`aio-hero`,"aria-hidden":`true`};var _hoisted_9={class:`aio-hero__identity`};var _hoisted_10={class:`aio-hero__name`};var _hoisted_11={class:`aio-hero__tagline`};var _hoisted_12={class:`ai-onboarding__why-copy`};var _hoisted_13={class:`ai-onboarding__differences`};var _hoisted_14={class:`ai-onboarding__difference-icon`};var _hoisted_15={key:0,class:`ai-onboarding__actions`};var _hoisted_16={key:1,class:`ai-onboarding__footnote`};var _hoisted_17={key:0,class:`ai-onboarding__dock`};var _hoisted_18={class:`ai-onboarding__dock-note`};var _sfc_main$4={__name:`AiOnboarding`,props:{open:Boolean,start:{type:String,default:`why`},endpoint:{type:String,default:``},redo:Boolean,onboarding:{type:Object,required:true},canConfigure:Boolean,ownerNotice:{type:String,default:void 0},changeWhere:{type:String,default:`Account settings → AI Accounts`}},emits:[`close`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{xs}=useDisplay();const DIFFERENCES=[{icon:mdiSitemapOutline,label:`Plans before it codes`},{icon:mdiBugCheckOutline,label:`Fixes its own bugs`},{icon:mdiFileTreeOutline,label:`Understands your whole app`}];const STEP={why:1,choose:2,connect:3,routing:3,success:3};const view=ref(`why`);const direction=ref(`forward`);const stage=ref(null);const setup=ref(null);const pointerMoved=ref(false);const screen=computed(()=>view.value===`why`?`why`:setup.value?.screen||`choose`);const wasSetUp=computed(()=>view.value===`setup`&&Boolean(setup.value?.wasSetUp));const busy=computed(()=>Boolean(setup.value?.busy));const cards=computed(()=>props.onboarding.cards.value);const skippable=computed(()=>view.value===`why`||Boolean(setup.value?.skippable));const dock=computed(()=>xs.value&&(screen.value===`success`||screen.value===`why`&&skippable.value));const doneLabel=computed(()=>setup.value?.doneLabel||``);const tourOffered=computed(()=>Boolean(setup.value?.tourOffered));function startsAtWhy(){return props.canConfigure&&props.start===`why`&&!props.redo&&!props.onboarding.isSetUp.value}watch(()=>props.open,open=>{if(!open)return;direction.value=`forward`;view.value=startsAtWhy()?`why`:`setup`},{immediate:true});watch(()=>props.onboarding.loaded.value,known=>{if(props.open&&known&&view.value===`why`&&!startsAtWhy())view.value=`setup`});function chooseMyAi(){direction.value=`forward`;view.value=`setup`}function close(reason,card=null){if(!busy.value)emit(`close`,reason,card)}function focusTitle(){nextTick(()=>stage.value?.querySelector(`h1`)?.focus({preventScroll:true}))}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.open,fullscreen:``,scrim:false,persistent:busy.value,"z-index":2500,transition:`fade-transition`,"aria-labelledby":`ai-onboarding-title`,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>!$event&&close(`dismiss`)),onAfterEnter:focusTitle},{default:withCtx(()=>[createBaseVNode(`div`,{ref_key:`stage`,ref:stage,class:normalizeClass([`ai-onboarding`,{"ai-onboarding--phone":unref(xs),"ai-onboarding--pointer":pointerMoved.value}]),onPointermoveOnce:_cache[7]||(_cache[7]=$event=>pointerMoved.value=true)},[createBaseVNode(`header`,_hoisted_1$2,[unref(xs)&&[`connect`,`routing`].includes(screen.value)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiArrowLeft),variant:`text`,"aria-label":`Back`,disabled:busy.value,onClick:_cache[0]||(_cache[0]=$event=>setup.value?.back())},null,8,[`icon`,`disabled`])):(openBlock(),createElementBlock(`span`,_hoisted_2$2,[..._cache[9]||(_cache[9]=[createTextVNode(`Vibe`,-1),createBaseVNode(`span`,null,`64`,-1)])])),!wasSetUp.value&&STEP[screen.value]?(openBlock(),createElementBlock(`div`,_hoisted_3$1,[(openBlock(),createElementBlock(Fragment,null,renderList(3,step=>{return createBaseVNode(`span`,{key:step,class:normalizeClass({"is-active":STEP[screen.value]===step,"is-done":STEP[screen.value]>step})},null,2)}),64))])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$1,[createVNode(VTooltip,{disabled:!busy.value,text:`Finish or cancel the current step first`,location:`bottom`},{activator:withCtx(({props:tip})=>[createBaseVNode(`span`,mergeProps(tip,{class:`d-inline-flex align-center`}),[skippable.value&&screen.value!==`why`&&!unref(xs)?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,disabled:busy.value,onClick:_cache[1]||(_cache[1]=$event=>close(`later`))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Set up later`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close`,disabled:busy.value,onClick:_cache[2]||(_cache[2]=$event=>close(`dismiss`))},null,8,[`icon`,`disabled`])],16)]),_:1},8,[`disabled`])])]),createBaseVNode(`main`,_hoisted_5,[!wasSetUp.value&&STEP[screen.value]?(openBlock(),createElementBlock(`p`,_hoisted_6,`Step `+toDisplayString(STEP[screen.value])+` of 3`,1)):createCommentVNode(``,true),createVNode(Transition,{name:`aio-${direction.value}`,mode:`out-in`,onAfterEnter:focusTitle},{default:withCtx(()=>[screen.value===`why`?(openBlock(),createElementBlock(`section`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[(openBlock(true),createElementBlock(Fragment,null,renderList(cards.value,(card,index)=>{return openBlock(),createElementBlock(`div`,{key:card.id,class:normalizeClass([`aio-hero__card`,{"aio-hero__card--crown":card.crown}]),style:normalizeStyle({"--aio-index":index,"--aio-fade":[1,1,.7,.5][index]})},[createVNode(AiOnboardingMark_default,{provider:card,size:card.crown?unref(xs)?96:64:unref(xs)?64:40,"settle-delay":card.crown?600:-1},null,8,[`provider`,`size`,`settle-delay`]),createBaseVNode(`span`,_hoisted_9,[createBaseVNode(`span`,_hoisted_10,toDisplayString(card.name),1),createBaseVNode(`span`,_hoisted_11,toDisplayString(card.crown?`Best for Vibe64`:card.tagline),1)]),createBaseVNode(`span`,{class:normalizeClass([`aio-meter aio-hero__meter`,{"aio-meter--low":card.bullets[0][1]<=2}])},[(openBlock(),createElementBlock(Fragment,null,renderList(5,segment=>{return createBaseVNode(`i`,{key:segment,class:normalizeClass({"is-filled":segment<=card.bullets[0][1]})},null,2)}),64))],2)],6)}),128))]),createBaseVNode(`div`,_hoisted_12,[_cache[13]||(_cache[13]=createBaseVNode(`p`,{class:`ai-onboarding__eyebrow`},`WELCOME TO VIBE64`,-1)),_cache[14]||(_cache[14]=createBaseVNode(`h1`,{id:`ai-onboarding-title`,tabindex:`-1`,class:`ai-onboarding__headline`},[createTextVNode(` First, give Vibe64 a `),createBaseVNode(`span`,{class:`ai-onboarding__accent`},`brilliant mind.`)],-1)),_cache[15]||(_cache[15]=createBaseVNode(`p`,{class:`ai-onboarding__lede`},`Frontier AI makes Vibe64 dramatically better. Pick yours in two minutes.`,-1)),createBaseVNode(`ul`,_hoisted_13,[(openBlock(),createElementBlock(Fragment,null,renderList(DIFFERENCES,difference=>{return createBaseVNode(`li`,{key:difference.label},[createBaseVNode(`span`,_hoisted_14,[createVNode(VIcon,{icon:difference.icon,size:`24`,"aria-hidden":`true`},null,8,[`icon`])]),createTextVNode(toDisplayString(difference.label),1)])}),64))]),!unref(xs)?(openBlock(),createElementBlock(`div`,_hoisted_15,[createVNode(VBtn,{color:`primary`,variant:`flat`,size:`large`,"append-icon":unref(mdiArrowRight),onClick:chooseMyAi},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Choose my AI`,-1)])]),_:1},8,[`append-icon`]),createVNode(VBtn,{variant:`text`,size:`large`,onClick:_cache[3]||(_cache[3]=$event=>close(`later`))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Set up later`,-1)])]),_:1})])):createCommentVNode(``,true),!unref(xs)?(openBlock(),createElementBlock(`p`,_hoisted_16,`You can change this any time in `+toDisplayString(__props.changeWhere)+`.`,1)):createCommentVNode(``,true)])])):(openBlock(),createBlock(AiSetup_default,{key:`setup`,ref_key:`setup`,ref:setup,open:__props.open,redo:__props.redo,onboarding:__props.onboarding,endpoint:__props.endpoint,"can-configure":__props.canConfigure,"owner-notice":__props.ownerNotice,"change-where":__props.changeWhere,onClose:close},createSlots({_:2},[renderList(_ctx.$slots,(_,name)=>{return{name,fn:withCtx(scope=>[renderSlot(_ctx.$slots,name,normalizeProps(guardReactiveProps(scope||{})),void 0,true)])}})]),1032,[`open`,`redo`,`onboarding`,`endpoint`,`can-configure`,`owner-notice`,`change-where`]))]),_:3},8,[`name`])]),dock.value?(openBlock(),createElementBlock(`footer`,_hoisted_17,[screen.value===`why`?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{block:``,color:`primary`,variant:`flat`,size:`large`,"append-icon":unref(mdiArrowRight),onClick:chooseMyAi},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Choose my AI`,-1)])]),_:1},8,[`append-icon`]),createVNode(VBtn,{block:``,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>close(`later`))},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Set up later`,-1)])]),_:1}),createBaseVNode(`p`,_hoisted_18,`You can change this any time in `+toDisplayString(__props.changeWhere)+`.`,1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{block:``,color:`primary`,variant:`flat`,size:`large`,"append-icon":unref(mdiArrowRight),onClick:_cache[5]||(_cache[5]=$event=>close(`done`))},{default:withCtx(()=>[createTextVNode(toDisplayString(doneLabel.value),1)]),_:1},8,[`append-icon`]),tourOffered.value?(openBlock(),createBlock(VBtn,{key:0,block:``,color:`primary`,variant:`tonal`,size:`large`,"data-test":`ai-setup-take-tour`,onClick:_cache[6]||(_cache[6]=$event=>setup.value?.takeTour())},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Take a 5-minute tour`,-1)])]),_:1})):createCommentVNode(``,true)],64))])):createCommentVNode(``,true)],34)]),_:3},8,[`model-value`,`persistent`])}}};var AiOnboarding_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-8c82723c`]]);var VIBE64_AI_ONBOARDING_OPEN_EVENT=`vibe64:ai-onboarding:open`;var aiOnboardingAvailable=ref(false);var aiOnboardingNeeded=ref(false);var aiOnboardingBlocked=ref(false);function requestVibe64AiOnboarding({start=`choose`,redo=false,returnFocus=null}={}){if(aiOnboardingBlocked.value||typeof window===`undefined`||typeof window.dispatchEvent!==`function`)return false;window.dispatchEvent(new CustomEvent(VIBE64_AI_ONBOARDING_OPEN_EVENT,{detail:{start:start===`why`?`why`:`choose`,redo:redo===true,...returnFocus?{returnFocus}:{}}}));return true}function onVibe64AiOnboardingRequested(handler){if(typeof window===`undefined`||typeof window.addEventListener!==`function`)return()=>null;window.addEventListener(VIBE64_AI_ONBOARDING_OPEN_EVENT,handler);return()=>window.removeEventListener(VIBE64_AI_ONBOARDING_OPEN_EVENT,handler)}var autoOpened=false;var _sfc_main$3={__name:`AiOnboardingHost`,props:{endpoint:{type:String,default:``},canConfigure:Boolean,actorKey:{type:String,default:`local`},ownerNotice:{type:String,default:void 0},changeWhere:{type:String,default:void 0}},setup(__props){const props=__props;const route=useRoute();const onboarding=useAiOnboarding({endpoint:props.endpoint,enabled:computed(()=>props.canConfigure)});const open=ref(false);const start=ref(`why`);const redo=ref(false);let opener=null;let request=null;const inLearning=computed(()=>String(route?.path||``).startsWith(`/app/learning`)||route?.query?.mode===`learning`);const needed=computed(()=>props.canConfigure&&onboarding.loaded.value&&!onboarding.isSetUp.value);function show(screen,detail=null){opener=document.activeElement;request=detail;start.value=screen;redo.value=detail?.redo===true;open.value=true}watch(needed,value=>{aiOnboardingNeeded.value=value},{immediate:true});watch(()=>props.canConfigure,value=>{aiOnboardingAvailable.value=value},{immediate:true});watch([needed,inLearning],()=>{if(autoOpened||open.value||!needed.value||inLearning.value||aiOnboardingSnoozed(props.actorKey)||document.querySelector(`.v-dialog.v-overlay--active`))return;autoOpened=true;show(`why`)},{immediate:true});const stopListening=onVibe64AiOnboardingRequested(event=>show(event.detail?.start||`choose`,event.detail));onBeforeUnmount(()=>{stopListening();aiOnboardingNeeded.value=false;aiOnboardingAvailable.value=false});async function close(reason){if(reason===`later`)snoozeAiOnboarding(props.actorKey);open.value=false;await nextTick();if(reason===`done`&&onboarding.colleagueAvailable.value)await onboarding.revealColleague();else{const target=request?.returnFocus||opener;if(target?.isConnected!==false)target?.focus?.({preventScroll:true})}opener=null;request=null}return(_ctx,_cache)=>{return openBlock(),createBlock(AiOnboarding_default,{open:open.value,start:start.value,redo:redo.value,onboarding:unref(onboarding),"can-configure":__props.canConfigure,endpoint:__props.endpoint,"owner-notice":__props.ownerNotice,"change-where":__props.changeWhere,onClose:close},createSlots({_:2},[renderList(_ctx.$slots,(_,name)=>{return{name,fn:withCtx(scope=>[renderSlot(_ctx.$slots,name,normalizeProps(guardReactiveProps(scope||{})))])}})]),1032,[`open`,`start`,`redo`,`onboarding`,`can-configure`,`endpoint`,`owner-notice`,`change-where`])}}};var _hoisted_1$1={key:0,class:`aio-nudge`,"aria-label":`Set up your AI`};var _hoisted_2$1={class:`aio-nudge__crown`,viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_3=[`d`];var _hoisted_4={class:`aio-nudge__actions`};var dismissed=ref(false);var _sfc_main$2={__name:`AiOnboardingNudge`,setup(__props){return(_ctx,_cache)=>{return unref(aiOnboardingNeeded)&&!dismissed.value?(openBlock(),createElementBlock(`aside`,_hoisted_1$1,[(openBlock(),createElementBlock(`svg`,_hoisted_2$1,[createBaseVNode(`path`,{d:unref(mdiCrown)},null,8,_hoisted_3)])),_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`aio-nudge__text`},`Vibe64 has no AI yet. Connect Claude for the best experience, or start free with GLM-4.7.`,-1)),createBaseVNode(`div`,_hoisted_4,[createVNode(VBtn,{variant:`text`,color:`primary`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)({start:`choose`}))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Set up your AI`,-1)])]),_:1}),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Dismiss`,onClick:_cache[1]||(_cache[1]=$event=>dismissed.value=true)},null,8,[`icon`])])])):createCommentVNode(``,true)}}};var AiOnboardingNudge_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-1b0a8909`]]);var _hoisted_1={viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_2=[`d`];var _sfc_main$1={__name:`AiOnboardingSetUpPill`,setup(__props){return(_ctx,_cache)=>{return unref(aiOnboardingNeeded)?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`aio-setup-pill`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)({start:`choose`,returnFocus:$event.currentTarget}))},[(openBlock(),createElementBlock(`svg`,_hoisted_1,[createBaseVNode(`path`,{d:unref(mdiCrown)},null,8,_hoisted_2)])),_cache[1]||(_cache[1]=createTextVNode(` Set up AI `,-1))])):createCommentVNode(``,true)}}};var AiOnboardingSetUpPill_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-41d81c9e`]]);var accountsSetupEmits=[`back`,`continue`];var accountsSetupProps={accountsClient:{default:null,type:Object},backLabel:{default:``,type:String},autoContinueWhenReady:{default:false,type:Boolean},continueLabel:{default:`Continue`,type:String},lede:{default:`Choose and authenticate the providers used by Studio.`,type:String},neededLabel:{default:`Accounts needed`,type:String},onAccountConnected:{default:null,type:Function},providerIds:{default:()=>[`codex`,`github`],type:Array},readyLabel:{default:`Accounts ready`,type:String},showContinue:{default:true,type:Boolean},title:{default:`Accounts`,type:String}};var fallbackProviderRows=Object.freeze({codex:{connected:false,id:`codex`,label:`Codex`,message:`Codex status has not loaded yet.`,status:`unknown`},github:{connected:false,id:`github`,label:`GitHub`,message:`GitHub status has not loaded yet.`,status:`unknown`}});function useAccountsSetup(props,emit){const accounts=useVibe64Accounts({client:props.accountsClient});const autoContinueStarted=ref(false);const autoContinueVerificationActive=ref(false);const notifiedConnectedAccounts=new Set;const statusLoaded=computed(()=>{return Boolean(accounts.status.value&&Array.isArray(accounts.status.value.accounts))});const enabledProviderIds=computed(()=>{return(Array.isArray(props.providerIds)?props.providerIds:[]).map(providerId=>normalizeProviderId(providerId)).filter(Boolean)});const accountRows=computed(()=>{return accountRowsForStatus(accounts.status.value,enabledProviderIds.value,{includeFallbackRows:true})});const allEnabledProvidersConnected=computed(()=>{return allRowsConnected(accountRows.value)});watch(accountRows,rows=>{if(props.autoContinueWhenReady){if(allEnabledProvidersConnected.value&&!autoContinueStarted.value)verifyAutoContinueReady();return}notifyConnectedRows(rows)},{immediate:true});return{accounts,accountRows,statusLoaded};async function verifyAutoContinueReady(){if(autoContinueStarted.value||autoContinueVerificationActive.value)return;autoContinueVerificationActive.value=true;try{const liveRows=accountRowsForStatus((await accounts.refresh())?.data||accounts.status.value||null,enabledProviderIds.value);if(!allRowsConnected(liveRows)||autoContinueStarted.value)return;await notifyConnectedRows(liveRows);autoContinueStarted.value=true;emit(`continue`)}finally{autoContinueVerificationActive.value=false}}async function notifyConnectedRows(rows=[]){if(typeof props.onAccountConnected!==`function`)return;for(const row of rows){if(row?.connected!==true)continue;const key=connectedAccountKey(row);if(!key||notifiedConnectedAccounts.has(key))continue;notifiedConnectedAccounts.add(key);try{await props.onAccountConnected(row)}catch{notifiedConnectedAccounts.delete(key)}}}}function normalizeProviderId(providerId=``){return String(providerId||``).trim().toLowerCase()}function accountRowsForStatus(status={},providerIds=[],{includeFallbackRows=false}={}){const rows=Array.isArray(status?.accounts)?status.accounts:[];const rowsById=new Map(rows.map(account=>[normalizeProviderId(account?.id),account]));return providerIds.map(providerId=>rowsById.get(providerId)||(includeFallbackRows?fallbackProviderRows[providerId]:null)).filter(Boolean).map(providerAccountRow)}function allRowsConnected(rows=[]){return rows.length>0&&rows.every(row=>row.connected===true)}function providerAccountRow(account={}){const id=String(account.id||``);return{...account,authLabel:id===`github`?`Sign in or create GitHub account`:`Login with ChatGPT`,authMode:id===`codex`?`device`:`browser`,deviceAuth:id===`codex`,gitIdentityRequired:id===`github`}}function connectedAccountKey(account={}){const id=normalizeProviderId(account.id);if(!id)return``;return`${id}:${String(account.username||account.previousUsername||``).trim()}`}var _sfc_main={__name:`AccountsSetup`,props:accountsSetupProps,emits:accountsSetupEmits,setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{accounts,accountRows,statusLoaded}=useAccountsSetup(props,emit);return(_ctx,_cache)=>{return openBlock(),createBlock(ProviderAccountsSetup_default,{accounts:unref(accounts),"account-rows":unref(accountRows),"back-label":_ctx.backLabel,"continue-label":_ctx.continueLabel,lede:_ctx.lede,"needed-label":_ctx.neededLabel,"ready-label":_ctx.readyLabel,"show-continue":_ctx.showContinue,"status-loaded":unref(statusLoaded),title:_ctx.title,onBack:_cache[0]||(_cache[0]=$event=>emit(`back`)),onContinue:_cache[1]||(_cache[1]=$event=>emit(`continue`))},null,8,[`accounts`,`account-rows`,`back-label`,`continue-label`,`lede`,`needed-label`,`ready-label`,`show-continue`,`status-loaded`,`title`])}}};var client_exports=__exportAll({ACCOUNTS_AUTH_ENDPOINT:()=>ACCOUNTS_AUTH_ENDPOINT,ACCOUNTS_ENDPOINT:()=>ACCOUNTS_ENDPOINT,ACCOUNTS_GIT_IDENTITY_ENDPOINT:()=>ACCOUNTS_GIT_IDENTITY_ENDPOINT,ACCOUNTS_LOGOUT_ENDPOINT:()=>ACCOUNTS_LOGOUT_ENDPOINT,AIAccountsSetup:()=>_sfc_main$14,AccountsSetup:()=>_sfc_main,AiOnboardingHost:()=>_sfc_main$3,AiOnboardingNudge:()=>AiOnboardingNudge_default,AiOnboardingSetUpPill:()=>AiOnboardingSetUpPill_default,AiPersonalUse:()=>AiPersonalUse_default,AiSetup:()=>AiSetup_default,ModelRoutingForm:()=>ModelRoutingForm_default,NativeProviderConnections:()=>NativeProviderConnections_default,ProviderAccountsSetup:()=>ProviderAccountsSetup_default,VIBE64_ACCOUNTS_AUTH_API_SUFFIX:()=>VIBE64_ACCOUNTS_AUTH_API_SUFFIX,VIBE64_ACCOUNTS_CHANGED_EVENT:()=>VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_ACCOUNTS_GIT_IDENTITY_API_SUFFIX:()=>VIBE64_ACCOUNTS_GIT_IDENTITY_API_SUFFIX,VIBE64_ACCOUNTS_PERSONAL_AI_PROFILE_API_SUFFIX:()=>VIBE64_ACCOUNTS_PERSONAL_AI_PROFILE_API_SUFFIX,VIBE64_ACCOUNT_AUTH_SESSION_CHANGED_EVENT:()=>VIBE64_ACCOUNT_AUTH_SESSION_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT:()=>VIBE64_CONNECTIONS_CHANGED_EVENT,accountAuthTerminalWebSocketUrl:()=>accountAuthTerminalWebSocketUrl,accountRowsForStatus:()=>accountRowsForStatus,accountsQueryKey:()=>accountsQueryKey,accountsSetupEmits:()=>accountsSetupEmits,accountsSetupProps:()=>accountsSetupProps,aiOnboardingAvailable:()=>aiOnboardingAvailable,aiOnboardingBlocked:()=>aiOnboardingBlocked,aiOnboardingNeeded:()=>aiOnboardingNeeded,codexAuthSessionNeedsTerminalAttention:()=>codexAuthSessionNeedsTerminalAttention,onVibe64AiOnboardingRequested:()=>onVibe64AiOnboardingRequested,personalUsePlan:()=>personalUsePlan,requestVibe64AiOnboarding:()=>requestVibe64AiOnboarding,useAccountAuthSessions:()=>useAccountAuthSessions,useAccountsSetup:()=>useAccountsSetup,useCodexProviderConnections:()=>useCodexProviderConnections,useModelRouting:()=>useModelRouting,useProviderAccountsSetup:()=>useProviderAccountsSetup,useVibe64Accounts:()=>useVibe64Accounts});export{VForm as C,VIBE64_CONNECTIONS_CHANGED_EVENT as S,CODEX_RECONNECT_REQUIRED_CODE as _,_sfc_main$3 as a,useModelRouting as b,aiOnboardingNeeded as c,AiSetup_default as d,useLocalToolRows as f,ProviderAccountsSetup_default as g,useVibe64Accounts as h,AiOnboardingNudge_default as i,onVibe64AiOnboardingRequested as l,registerVibe64ColleagueModel as m,accountRowsForStatus as n,aiOnboardingAvailable as o,ToolInstallRow_default as p,AiOnboardingSetUpPill_default as r,aiOnboardingBlocked as s,client_exports as t,requestVibe64AiOnboarding as u,CODEX_RECONNECT_REQUIRED_MESSAGE as v,VIBE64_ACCOUNTS_CHANGED_EVENT as x,ModelRoutingForm_default as y};