vibe64 0.1.35 → 0.1.36

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 (208) hide show
  1. package/bin/run.js +1919 -1660
  2. package/bin/server.js +158 -111
  3. package/bin/upgrade-state.js +5783 -5605
  4. package/dist/assets/GithubBrowserTabs-BzJF4k9Y.js +1 -0
  5. package/dist/assets/{StudioErrorNotice-sQfmeR-z.js → StudioErrorNotice-BdllGqRy.js} +1 -1
  6. package/dist/assets/{Vibe64AsyncModuleState-Dx7YKRPp.js → Vibe64AsyncModuleState-Bi0TqlIu.js} +1 -1
  7. package/dist/assets/Vibe64AuthSettingsButton-BuvmwGiT.js +5 -0
  8. package/dist/assets/Vibe64AuthSettingsButton-M44SSmZ9.css +1 -0
  9. package/dist/assets/{Vibe64DashboardBackButton-yE6cyYg2.js → Vibe64DashboardBackButton-Ccd4hpD6.js} +1 -1
  10. package/dist/assets/Vibe64DashboardShell-D67m4aWz.js +1 -0
  11. package/dist/assets/{Vibe64DashboardShell-MBkUHjs-.css → Vibe64DashboardShell-De2mbdpI.css} +1 -1
  12. package/dist/assets/{Vibe64DatabaseWorkspace-BONJdxBS.js → Vibe64DatabaseWorkspace-D3uK1gDm.js} +3 -3
  13. package/dist/assets/{Vibe64DatabaseWorkspace-CR4pzzcf.css → Vibe64DatabaseWorkspace-DPDMxhAW.css} +1 -1
  14. package/dist/assets/Vibe64OutputControls-BfESn5kJ.js +8 -0
  15. package/dist/assets/Vibe64OutputControls-D2CCECo5.css +1 -0
  16. package/dist/assets/{Vibe64RepositoryWorkspace-ByQlZbyO.js → Vibe64RepositoryWorkspace-0jAxvdA8.js} +2 -2
  17. package/dist/assets/{Vibe64RepositoryWorkspace-CVHcT93M.css → Vibe64RepositoryWorkspace-Agyt4O-V.css} +1 -1
  18. package/dist/assets/Vibe64SessionFiles-B3ONZrBL.css +1 -0
  19. package/dist/assets/Vibe64SessionFiles-BCOJ4QmR.js +41 -0
  20. package/dist/assets/{Vibe64TemporaryAiFixAction-BGlcrq4d.js → Vibe64TemporaryAiFixAction-DM2jpPbQ.js} +1 -1
  21. package/dist/assets/{Vibe64UiStoryboardView-Brlwdvqi.js → Vibe64UiStoryboardView-DP5af46a.js} +1 -1
  22. package/dist/assets/{Vibe64UnavailableSessions-zwlWlcZD.js → Vibe64UnavailableSessions-C7XwH1SS.js} +1 -1
  23. package/dist/assets/{_sessionId_-CvOkQbVy.js → _sessionId_-B1Ymr7c_.js} +1 -1
  24. package/dist/assets/{_sessionTool_-Dwod5ns9.js → _sessionTool_-DVYdREoI.js} +1 -1
  25. package/dist/assets/_slug_-CQseA9pt.css +1 -0
  26. package/dist/assets/_slug_-CYO2vjCd.js +24 -0
  27. package/dist/assets/{access-BVu5XYm2.js → access-Cb7dkN53.js} +1 -1
  28. package/dist/assets/app-BvgY7oVf.js +1 -0
  29. package/dist/assets/app-CZu7oxUO.css +1 -0
  30. package/dist/assets/{assistantRouting-CwbwfkwB.js → assistantRouting-B38ujQ7x.js} +1 -1
  31. package/dist/assets/{changes-olY8cnFK.js → changes-lsBcuikn.js} +1 -1
  32. package/dist/assets/client-CRI5CNKl.js +2 -0
  33. package/dist/assets/client-TGaWwOhc.css +1 -0
  34. package/dist/assets/conversation-CDEt9jBx.js +17 -0
  35. package/dist/assets/conversation-vxJGwmtW.css +1 -0
  36. package/dist/assets/{dashboard-BnXD-H4R.js → dashboard-D8HOAw46.js} +1 -1
  37. package/dist/assets/definitions-DLTX17nI.js +1 -0
  38. package/dist/assets/{env-DJhnLOH7.css → env-BzRtyO0w.css} +1 -1
  39. package/dist/assets/env-DJezQixO.js +1 -0
  40. package/dist/assets/health-BJvooRnJ.css +1 -0
  41. package/dist/assets/health-CtKdN_Nf.js +1 -0
  42. package/dist/assets/{history-BxlpB-YH.js → history-BdZFOtz4.js} +1 -1
  43. package/dist/assets/{incoming-BOxRVlOM.js → incoming-VsQNnL9m.js} +1 -1
  44. package/dist/assets/index-C-osVUKw.css +1 -0
  45. package/dist/assets/index-C4K3ntms.js +138 -0
  46. package/dist/assets/{integrations-BFltGDVI.js → integrations-CMQ9EDmt.js} +2 -2
  47. package/dist/assets/issues-DHpY5hSr.js +1 -0
  48. package/dist/assets/learning-DXlMuwzh.js +1 -0
  49. package/dist/assets/mdi-yXT-CQ6u.js +1 -0
  50. package/dist/assets/placement-NpX2s7u8.js +1 -0
  51. package/dist/assets/pull-requests-BcKNEUYH.js +1 -0
  52. package/dist/assets/{repository-JWLVST3D.js → repository-ClEgntHW.js} +1 -1
  53. package/dist/assets/roboto-latin-wght-normal-ccAYIvAh.woff2 +0 -0
  54. package/dist/assets/{session-C5Nj8Dlq.js → session-BlD46q-d.js} +1 -1
  55. package/dist/assets/settings-BwukeIKe.js +1 -0
  56. package/dist/assets/shared-BM2SV6fi.js +2 -0
  57. package/dist/assets/studioGateApi-DcCqiD9V.js +1 -0
  58. package/dist/assets/studioUrls-DmMMIScP.js +1 -0
  59. package/dist/assets/useArchivedVibe64Sessions-D5zUA-BC.js +1 -0
  60. package/dist/assets/useCommand-Bqxb-naz.js +1 -0
  61. package/dist/assets/useEndpointResource-DWoQ2keu.js +1 -0
  62. package/dist/assets/useRealtimeEvent-Bwapstla.js +1 -0
  63. package/dist/assets/{useUiFeedback-0FqKuZRP.js → useUiFeedback-BPBF_0bp.js} +1 -1
  64. package/dist/assets/useVibe64ConversationLog-Dy6YTPQn.js +1 -0
  65. package/dist/assets/useVibe64DatabaseTools-d6L09ugW.js +1 -0
  66. package/dist/assets/useVibe64Learning-cNKTv64W.js +1 -0
  67. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +1 -0
  68. package/dist/assets/useVibe64SessionData-C_jqncih.js +1 -0
  69. package/dist/assets/useVibe64SessionSelection-uCEIWd3b.js +1 -0
  70. package/dist/assets/useVibe64SystemGraph-B4RmsC9Y.js +1 -0
  71. package/dist/assets/{useVibe64Terminal-BPnN25WH.js → useVibe64Terminal-BbghGR4x.js} +1 -1
  72. package/dist/assets/vibe64AssistantHost-BL1bnKm8.js +1 -0
  73. package/dist/assets/{vibe64SessionFocus-kqPOPaOH.js → vibe64SessionFocus-DSJKVuRN.js} +1 -1
  74. package/dist/assets/{vibe64SessionInfo-BHxtTrLX.js → vibe64SessionInfo-B_r1OMN0.js} +1 -1
  75. package/dist/assets/{vibe64SessionPanelModel-BMf64fv7.js → vibe64SessionPanelModel-DDorOuiL.js} +1 -1
  76. package/dist/assets/{vibe64SessionToolDefinitions-NfLd1HZI.js → vibe64SessionToolDefinitions-BualCK_5.js} +1 -1
  77. package/dist/index.html +21 -20
  78. package/docs/colleague-usage/account-profile-and-appearance.md +8 -2
  79. package/docs/colleague-usage/ai-accounts-and-routing.md +123 -15
  80. package/docs/colleague-usage/ai-onboarding.md +230 -0
  81. package/docs/colleague-usage/coding-agent-goal-pause.md +5 -5
  82. package/docs/colleague-usage/coding-agents.md +17 -0
  83. package/docs/colleague-usage/colleague-watches.md +4 -23
  84. package/docs/colleague-usage/colleague.md +10 -2
  85. package/docs/colleague-usage/connected-projects.md +2 -2
  86. package/docs/colleague-usage/conversation-context.md +2 -0
  87. package/docs/colleague-usage/dashboard-navigation.md +19 -27
  88. package/docs/colleague-usage/database.md +6 -11
  89. package/docs/colleague-usage/development-copies.md +2 -1
  90. package/docs/colleague-usage/development-env.md +6 -0
  91. package/docs/colleague-usage/github-work.md +9 -0
  92. package/docs/colleague-usage/health-checks.md +11 -5
  93. package/docs/colleague-usage/integrations.md +3 -1
  94. package/docs/colleague-usage/learning-code-questions.md +23 -51
  95. package/docs/colleague-usage/learning-course-catalogue.md +8 -6
  96. package/docs/colleague-usage/learning-environment.md +345 -0
  97. package/docs/colleague-usage/learning-history.md +70 -101
  98. package/docs/colleague-usage/learning-mode-ui.md +122 -214
  99. package/docs/colleague-usage/learning-practice-projects.md +168 -78
  100. package/docs/colleague-usage/learning-teacher-guide.md +48 -26
  101. package/docs/colleague-usage/learning-with-colleague.md +171 -216
  102. package/docs/colleague-usage/lesson-authoring.md +32 -24
  103. package/docs/colleague-usage/managed-app-access.md +7 -0
  104. package/docs/colleague-usage/message-delivery-recovery.md +7 -6
  105. package/docs/colleague-usage/preview-browser-checks.md +9 -1
  106. package/docs/colleague-usage/preview-starting-application.md +0 -1
  107. package/docs/colleague-usage/preview.md +9 -1
  108. package/docs/colleague-usage/project-messages.md +2 -2
  109. package/docs/colleague-usage/project-setup.md +9 -2
  110. package/docs/colleague-usage/running-vibe64-on-your-computer.md +61 -0
  111. package/docs/colleague-usage/sessions.md +25 -33
  112. package/docs/colleague-usage/teaching-content.md +11 -40
  113. package/docs/colleague-usage/temporary-chats.md +23 -2
  114. package/docs/colleague-usage/voice-chat.md +5 -10
  115. package/docs/colleague-usage/voice-face-and-speaking-voice.md +6 -8
  116. package/docs/colleague-usage/voice-recovery.md +3 -2
  117. package/docs/templates/learn-topic/README.md +6 -6
  118. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +28 -7
  119. package/docs/templates/learn-topic/training/lessons/TOPIC-01/notes.md +19 -0
  120. package/docs/templates/learn-topic/training/lessons/TOPIC-01/steps/check-understanding.md +3 -0
  121. package/docs/templates/learn-topic/training/lessons/TOPIC-01/steps/explain-idea.md +3 -0
  122. package/docs/templates/learn-topic/training/lessons/TOPIC-01/steps/try-it.md +3 -0
  123. package/docs/templates/learn-topic/training/outline.md +1 -1
  124. package/docs/training-content.md +179 -65
  125. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  126. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  127. package/node_modules/@jskit-ai/assistant-runtime/patterns/assistant-surface/PATTERN.md +3 -2
  128. package/node_modules/@jskit-ai/assistant-runtime/patterns/assistant-surface/example/integrations.json +3 -2
  129. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  130. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  131. package/node_modules/@jskit-ai/connectors-catalog/patterns/ai-connections/PATTERN.md +4 -3
  132. package/node_modules/@jskit-ai/connectors-catalog/src/shared/ai-models.json +0 -1
  133. package/node_modules/@local/vibe64-accounts/package.json +1 -0
  134. package/node_modules/@local/vibe64-colleague/package.json +2 -1
  135. package/node_modules/@local/vibe64-core/package.json +3 -0
  136. package/node_modules/@local/vibe64-execution/package.json +1 -0
  137. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +171 -174
  138. package/node_modules/@local/vibe64-execution/src/server/engines/stdioBridge.js +9 -9
  139. package/node_modules/@local/vibe64-genesis/README.md +10 -37
  140. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +790 -779
  141. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  142. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +255 -0
  143. package/node_modules/@local/vibe64-genesis/src/server/index.js +473 -450
  144. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +148 -148
  145. package/node_modules/@local/vibe64-project/package.json +2 -1
  146. package/node_modules/@local/vibe64-runtime/package.json +1 -2
  147. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +526 -512
  148. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +0 -1
  149. package/node_modules/@local/vibe64-source-editor/package.json +1 -0
  150. package/node_modules/@local/vibe64-terminals/package.json +1 -0
  151. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +129 -131
  152. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1508 -1456
  153. package/node_modules/@local/vibe64-training/package.json +13 -27
  154. package/package.json +7 -7
  155. package/server.bundle.mjs +40946 -41456
  156. package/dist/assets/GithubBrowserTabs-DO5PHon-.js +0 -1
  157. package/dist/assets/GithubMarkdown-BQ6MfCDJ.js +0 -3
  158. package/dist/assets/GithubMarkdown-U7-j-qNI.css +0 -1
  159. package/dist/assets/Vibe64DashboardShell-CuCVMhOc.js +0 -1
  160. package/dist/assets/Vibe64OutputControls-DAAmA09l.js +0 -8
  161. package/dist/assets/Vibe64OutputControls-DPBsyDZM.css +0 -1
  162. package/dist/assets/Vibe64SessionFiles-B0u9HKdF.js +0 -107
  163. package/dist/assets/Vibe64SessionFiles-NjOMVwPR.css +0 -1
  164. package/dist/assets/_slug_-B31c15cc.css +0 -1
  165. package/dist/assets/_slug_-Dy35qLo1.js +0 -1
  166. package/dist/assets/app-DRXCcv05.css +0 -1
  167. package/dist/assets/app-zt7HwQKT.js +0 -1
  168. package/dist/assets/client-BrV4QPwG.js +0 -2
  169. package/dist/assets/client-C1bwIlu6.css +0 -1
  170. package/dist/assets/definitions-DaOPIkyB.js +0 -1
  171. package/dist/assets/env-DN0vW4EI.js +0 -1
  172. package/dist/assets/health-7oIQODer.css +0 -1
  173. package/dist/assets/health-Z6m96GDr.js +0 -1
  174. package/dist/assets/index-BUq-MczL.js +0 -86
  175. package/dist/assets/index-DtmBqE3h.css +0 -1
  176. package/dist/assets/issues-1iS5zoed.js +0 -1
  177. package/dist/assets/layout-BkWVNT37.js +0 -1
  178. package/dist/assets/mdi-C54lQ0i_.js +0 -1
  179. package/dist/assets/placement-DLsU3pCW.js +0 -1
  180. package/dist/assets/pull-requests-BJOwNL4k.js +0 -1
  181. package/dist/assets/settings-c273Ikrm.js +0 -1
  182. package/dist/assets/shared-YZb7ocaK.js +0 -2
  183. package/dist/assets/studioGateApi-DhA9IJGZ.js +0 -1
  184. package/dist/assets/studioUrls-Dj8rXeXO.js +0 -1
  185. package/dist/assets/useArchivedVibe64Sessions-CVZx2Rtm.js +0 -1
  186. package/dist/assets/useCommand-DWuxfAV0.js +0 -1
  187. package/dist/assets/useEndpointResource-MWVNfmMa.js +0 -1
  188. package/dist/assets/useVibe64ConversationLog-8cKh1eDm.js +0 -1
  189. package/dist/assets/useVibe64DatabaseTools-BcRG1s3i.js +0 -1
  190. package/dist/assets/useVibe64LearningMode-Bl0dGdCh.js +0 -28
  191. package/dist/assets/useVibe64LearningMode-C3PcXdVg.css +0 -1
  192. package/dist/assets/useVibe64ProjectScope-DOEVkBqX.js +0 -1
  193. package/dist/assets/useVibe64SessionData-DFTyLzci.js +0 -1
  194. package/dist/assets/useVibe64SessionSelection-j9lsllx4.js +0 -1
  195. package/dist/assets/useVibe64SystemGraph-tNkIwSBQ.js +0 -1
  196. package/dist/assets/vibe64AssistantHost-DdE_-lZF.js +0 -1
  197. package/dist/assets/vibe64LessonDashboard-DlKYjisq.js +0 -1
  198. package/dist/assets/vibe64ProjectScope.local-DqT6e5un.js +0 -1
  199. package/docs/colleague-usage/learning-chat-retention.md +0 -74
  200. package/docs/colleague-usage/learning-diagrams-and-voice.md +0 -97
  201. package/docs/colleague-usage/learning-lesson-watch.md +0 -95
  202. package/docs/colleague-usage/learning-native-session.md +0 -206
  203. package/docs/colleague-usage/learning-practical-exercises.md +0 -71
  204. package/docs/colleague-usage/learning-practical-gestures.md +0 -48
  205. package/docs/colleague-usage/learning-session-creation.md +0 -95
  206. package/docs/colleague-usage/lesson-practical-assessment.md +0 -54
  207. package/docs/colleague-usage/preview-lesson-presentation.md +0 -56
  208. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.md +0 -44
@@ -1,2 +0,0 @@
1
- import{B as VDefaultsProvider,Kn as withModifiers,Yn as __exportAll,d as VProgressLinear,gt as propsFactory,h as VIcon,ht as makeComponentProps,it as useRender,st as genericComponent}from"./ripple-BVltMmyV.js";import{$ as mergeModels,D as createVNode,E as createTextVNode,Ft as useModel,Ht as watch,J as inject,On as unref,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,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,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-MWVNfmMa.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{j as useRealtimeEvent,o as vibe64ProjectQueryScope,u as getHttpWebClient}from"./vibe64ProjectScope.local-DqT6e5un.js";import{t as VSelect}from"./VSelect-DL3HaA5m.js";import{l as forwardRefs}from"./VOverlay-CeMZurIN.js";import{g as useDisplay,t as VAvatar}from"./VAvatar-DPzqDH4r.js";import{n as VList,o as VListSubheader,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{d as createForm,f as makeFormProps,t as VTextField}from"./VTextField-BR2eZeFT.js";import{n as VIBE64_ASSISTANT_VIEWER_KEY}from"./vibe64AssistantHost-DdE_-lZF.js";import{$n as mdiStopCircleOutline,A as mdiCheckCircleOutline,An as mdiPlus,B as mdiClose,Fn as mdiRefresh,Hn as mdiShieldCheckOutline,O as mdiCheck,Ot as mdiFlashOutline,Pt as mdiGiftOutline,Rn as mdiRobotOutline,W as mdiCodeBraces,_ as mdiArrowRight,at as mdiCreditCardOutline,et as mdiContentCopy,fn as mdiLockOutline,g as mdiArrowLeft,hn as mdiMagnify,ht as mdiEyeOutline,k as mdiCheckCircle,mt as mdiEyeOffOutline,t as mdiAccountCircleOutline,xn as mdiOpenInNew}from"./mdi-C54lQ0i_.js";import{t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VAutocomplete}from"./VAutocomplete-BDb95qJX.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VDivider}from"./VDivider-BMEqUoAB.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-mXy0k4aS.js";import{n as VCol,t as VRow}from"./VRow-Cpw7OHQV.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VSwitch}from"./VSwitch-BRHeDJkH.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{a as Vibe64Terminal_default,n as createWebSocketTerminalDriver,t as useVibe64Terminal}from"./useVibe64Terminal-BPnN25WH.js";import{_ as curatedCodexProvider,c as vibe64AssistantSelectionLabel,g as CURATED_CODEX_PROVIDERS,l as VIBE64_AGENT_PROVIDERS,y as defineVibe64AssistantSelection}from"./shared-YZb7ocaK.js";import{n as ASSISTANT_ROUTING_ASSIGNMENTS,r as ASSISTANT_ROUTING_ROLE_DEFINITIONS}from"./assistantRouting-CwbwfkwB.js";import{t as useCommand}from"./useCommand-DWuxfAV0.js";import{i as studioApiPath,n as resolveWebSocketUrl}from"./studioUrls-Dj8rXeXO.js";import{t as isVibe64BrowserFlagEnabled}from"./shared-BEwrtWSp.js";import{r as vibe64ResourceResponseError}from"./vibe64ApiResponses-DNLY1Kel.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:``))}}function useModelRouting({enabled=true,workflowsOnly=false,engineId=``,includeOtherModels=false}={}){const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const queryKey=computed(()=>[`vibe64`,...vibe64ProjectQueryScope(unref(viewer)?.projectSlug),`model-routing`,unref(viewer)?.actorKey||`signed-out`,workflowsOnly?`workflows`:`configuration`,unref(engineId)||`all`,includeOtherModels?`all-models`:`assigned-models`]);const resource=useEndpointResource({enabled:computed(()=>Boolean(unref(enabled)&&unref(viewer)?.actorKey)),path:`${ACCOUNTS_ENDPOINT}/model-routing${workflowsOnly?`/workflows`:``}`,queryKey,realtime:{events:[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT]},readQuery:computed(()=>workflowsOnly?{}:{...unref(engineId)?{engineId:unref(engineId)}:{},...includeOtherModels?{includeOtherModels:true}:{}}),queryOptions:{refetchOnMount:true,staleTime:3e4,retry:false},fallbackLoadError:`Model routing could not be loaded.`,requestRecoveryLabel:`Model routing`});return{resource,scopeKey:computed(()=>JSON.stringify(queryKey.value)),engines:computed(()=>resource.data.value?.engines||[]),connectedWorkflows:computed(()=>(resource.data.value?.workflows||[]).filter(choice=>choice.connected)),loadError:computed(()=>resource.loadError.value||(resource.data.value?.ok===false?resource.data.value.error:``))}}var _hoisted_1$4={class:`model-routing`,"aria-label":`Model routing`};var _hoisted_2$4={class:`model-routing__body`};var _hoisted_3$4={class:`text-title-large mb-2`};var _hoisted_4$4={key:0,class:`text-body-medium mb-4`};var _hoisted_5$4={key:1,class:`text-body-small mb-4`};var _hoisted_6$4={class:`text-title-medium mt-4`};var _hoisted_7$4={key:0,class:`text-body-small`};var _hoisted_8$3={class:`text-body-medium`};var _hoisted_9$3={key:0,class:`text-body-small`};var _hoisted_10$3={key:1,class:`text-body-medium`};var _hoisted_11$3={key:2,class:`text-body-small mb-4`,role:`status`};var _hoisted_12$3={class:`text-title-medium mb-3`};var _hoisted_13$2={class:`model-routing__option-title`};var _hoisted_14$2={class:`model-routing__model-name`};var _hoisted_15$2={key:1,class:`text-body-small`};var _hoisted_16$2={class:`model-routing__selection`};var _hoisted_17$2={class:`model-routing__model-name`};var _hoisted_18$2={key:0,class:`text-body-small model-routing__selection-detail`};var _hoisted_19$2={key:7,class:`text-body-medium`};var _hoisted_20$2={class:`d-flex justify-end flex-wrap ga-2 pt-4`};var _hoisted_21$2={class:`model-routing__changes pl-4`};var _sfc_main$6={__name:`ModelRoutingForm`,props:{connectionId:{type:String,default:``},connectionLabel:{type:String,default:``},setupError:{type:String,default:``},engineId:{type:String,required:true},focusRole:{type:String,default:``},readonly:Boolean},emits:[`close`,`saved`,`busy`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{smAndDown}=useDisplay();const selectedEngine=computed(()=>props.engineId);const customizing=ref(false);const proposalMode=computed(()=>Boolean(props.connectionId)&&!customizing.value);const{resource,engines,scopeKey,loadError:resourceError}=useModelRouting({engineId:selectedEngine});const otherModelsRequested=ref(false);const otherModels=useModelRouting({engineId:selectedEngine,includeOtherModels:true,enabled:computed(()=>otherModelsRequested.value&&!proposalMode.value)});const refreshError=ref(``);const loadError=computed(()=>resourceError.value||refreshError.value);const draft=ref({});const baseRevision=ref(null);const recommendationReview=ref(null);watch(selectedEngine,()=>{recommendationReview.value=null},{flush:`sync`});const proposals=ref([]);const saving=ref(false);const fieldErrors=ref({});const reviewedHelpers=ref([]);const preview=ref(null);const previewPending=ref(false);const previewError=ref(``);const retryPreview=ref(0);const refreshingConnection=ref(Boolean(props.connectionId));let savedPayload=``;let savedAssignments={};let hydratedDraft=``;const draftSnapshot=()=>JSON.stringify({draft:draft.value,proposals:proposals.value,reviewedHelpers:reviewedHelpers.value,customizing:customizing.value});const canEdit=computed(()=>!props.readonly&&resource.data.value?.canConfigure===true);const modelEngines=computed(()=>otherModelsRequested.value&&otherModels.resource.data.value?.revision===baseRevision.value?otherModels.engines.value:engines.value);const engine=computed(()=>modelEngines.value.find(({engineId})=>engineId===selectedEngine.value));const engineLabel=computed(()=>VIBE64_AGENT_PROVIDERS.find(({id})=>id===selectedEngine.value)?.label||selectedEngine.value);const roleFields=ref({});watch([engine,()=>props.focusRole],async()=>{if(!props.focusRole)return;await nextTick();const field=roleFields.value[props.focusRole]?.$el;field?.scrollIntoView({block:`center`});field?.querySelector(`input[role="combobox"]`)?.focus({preventScroll:true})},{immediate:true});const stale=computed(()=>baseRevision.value!==null&&resource.data.value?.revision!==baseRevision.value);const roles=[ASSISTANT_ROUTING_ROLE_DEFINITIONS.find(({id})=>id===`router`),...ASSISTANT_ROUTING_ROLE_DEFINITIONS.filter(({id})=>id!==`router`),{id:`sharedBackup`,label:`Shared backup`}].map(role=>({...role,crossOrchestrator:![`senior`,`junior`].includes(role.id)}));function choiceId(selection){return selection?JSON.stringify([selection.engineId,selection.modelProviderId,selection.modelId]):``}function sameChoice(left,right){return choiceId(left)===choiceId(right)&&left?.variantId===right?.variantId&&left?.agentId===right?.agentId}const recommendedChanges=computed(()=>!engine.value?[]:roles.flatMap(({id,label})=>{const proposed=engine.value.roles[id].recommendation;const previous=draft.value[selectedEngine.value]?.[id];if(!proposed||sameChoice(previous,proposed))return[];const choice=choiceFor(proposed,id);const changes=[selectionLabel(proposed)];if(previous?.modelId===proposed.modelId&&previous?.modelProviderId!==proposed.modelProviderId)changes.push(choice?.providerLabel||proposed.modelProviderId);if(previous&&previous.agentId!==proposed.agentId)changes.push(`${proposed.agentId} agent`);return[{role:id,label,proposed,description:changes.join(` · `)}]}));const suggestedChanges=computed(()=>!engine.value?.connected||!engine.value.roles.senior.recommendation||!engine.value.roles.junior.recommendation?[]:ASSISTANT_ROUTING_ASSIGNMENTS.flatMap(role=>{const{assignment,recommendation}=engine.value.roles[role];if(!recommendation||recommendation.modelProviderId!==props.connectionId||recommendation.engineId!==selectedEngine.value||sameChoice(assignment,recommendation))return[];return[{id:`${selectedEngine.value}:${role}`,engineId:selectedEngine.value,role,label:roles.find(({id})=>id===role).label,previous:assignment,proposed:recommendation}]}));function payload(){const orchestrators=JSON.parse(JSON.stringify(draft.value));if(proposalMode.value){for(const proposal of suggestedChanges.value)if(proposals.value.includes(proposal.id))orchestrators[proposal.engineId][proposal.role]=proposal.proposed}const inScope=Object.entries(orchestrators).filter(([engineId])=>engineId===selectedEngine.value);const changes=Object.fromEntries(inScope.map(([engineId,assignments])=>[engineId,Object.fromEntries(Object.entries(assignments).filter(([role,selection])=>!sameChoice(selection,savedAssignments[engineId]?.[role])))]).filter(([,assignments])=>Object.keys(assignments).length));return{revision:baseRevision.value,engineId:selectedEngine.value,orchestrators:changes,reviewedHelperWorkflows:reviewedHelpers.value.filter(id=>id===selectedEngine.value)}}function hydrate(data){if(!data?.ok)return;recommendationReview.value=null;baseRevision.value=data.revision;draft.value=Object.fromEntries(data.engines.map(item=>[item.engineId,Object.fromEntries(ASSISTANT_ROUTING_ASSIGNMENTS.map(role=>[role,item.roles[role].assignment||null]))]));reviewedHelpers.value=[];fieldErrors.value={};savedAssignments=JSON.parse(JSON.stringify(draft.value));savedPayload=JSON.stringify({revision:data.revision,engineId:selectedEngine.value,orchestrators:{},reviewedHelperWorkflows:[]});proposals.value=suggestedChanges.value.filter(({previous})=>!previous||previous.selectionSource===`recommended`).map(({id})=>id);preview.value=data;hydratedDraft=draftSnapshot()}watch(scopeKey,()=>{otherModelsRequested.value=false;baseRevision.value=null;draft.value={};savedAssignments={};proposals.value=[];preview.value=null;reviewedHelpers.value=[];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});onMounted(async()=>{if(!refreshingConnection.value)return;await reload();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 getHttpWebClient().request(`${ACCOUNTS_ENDPOINT}/model-routing/preview`,{method:`POST`,body:JSON.parse(serialized),signal:controller.signal});if(result?.ok!==true)throw new Error(result?.error||`Routing preview could not be loaded.`);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 previewEngine=computed(()=>preview.value?.engines?.find(({engineId})=>engineId===selectedEngine.value));const decisions=computed(()=>previewEngine.value?.preview?.[canEdit.value?`collaborator`:`viewer`]||{});function choiceFor(selection,role=`senior`){return modelEngines.value.flatMap(item=>item.roles[role]?.choices||[]).find(item=>choiceId(item)===choiceId(selection))}function selectionLabel(selection){if(!selection)return`No model selected`;return vibe64AssistantSelectionLabel(selection)}function items(role){const current=draft.value[selectedEngine.value]?.[role];const choices=(engine.value?.roles[role]?.choices||[]).map(choice=>{const agent=VIBE64_AGENT_PROVIDERS.find(({id})=>id===choice.engineId)?.label||choice.engineId;const status=choice.compatibilityError?`Compatibility pending`:!choice.available?`Unavailable`:[`junior`,`sharedBackup`].includes(role)&&choice.capabilities?.toolcall===false?`Tools unavailable`:``;return{id:choiceId(choice),engineId:choice.engineId,agent,label:choice.label||choice.modelId,status,recommended:!status&&choiceId(choice)===choiceId(engine.value.roles[role].recommendation),props:{subtitle:`${choice.providerLabel} · ${choice.accessLabel}`,disabled:Boolean(status)}}});if(current&&!choices.some(({id})=>id===choiceId(current))){const agent=VIBE64_AGENT_PROVIDERS.find(({id})=>id===current.engineId)?.label||current.engineId;choices.unshift({id:choiceId(current),engineId:current.engineId,agent,label:current.modelId,status:`Unavailable saved choice`,props:{disabled:true}})}const groups=[...new Set([selectedEngine.value,...choices.map(choice=>choice.engineId)])].flatMap(engineId=>{const models=choices.filter(choice=>choice.engineId===engineId);return models.length?[{type:`subheader`,id:`group:${engineId}`,label:models[0].agent},...models]:[]});return[{id:``,label:role===`sharedBackup`?`No shared backup`:`Choose a model`},...groups]}function choose(role,id){const choice=engine.value.roles[role].choices.find(item=>choiceId(item)===id);draft.value[selectedEngine.value][role]=choice?{...defineVibe64AssistantSelection(choice),selectionSource:`explicit`}:null;delete fieldErrors.value[`${selectedEngine.value}.${role}`];if(role===`helper`)reviewedHelpers.value=[]}function changeEffort(role,variantId){draft.value[selectedEngine.value][role]={...draft.value[selectedEngine.value][role],variantId,selectionSource:`explicit`};delete fieldErrors.value[`${selectedEngine.value}.${role}`];if(role===`helper`)reviewedHelpers.value=[]}function variants(role){return choiceFor(draft.value[selectedEngine.value]?.[role],role)?.variants||[]}function roleHint(role){if(role.id===`sharedBackup`)return``;if(stale.value)return`Reload current choices to check access.`;if(previewPending.value)return`Checking access…`;if(previewError.value)return`Access could not be checked.`;const decision=decisions.value[role.id===`router`?`request_routing`:role.id===`helper`?`prompt_hint`:role.id];const result=decision?.available?`${selectionLabel(decision.effectiveSelection)}${decision.backupUsed?` (shared backup)`:``}`:decision?.message||`Unavailable`;return`${canEdit.value?`Collaborators`:`You will get`}: ${result}`}function roleError(role){if(fieldErrors.value[`${selectedEngine.value}.${role}`])return fieldErrors.value[`${selectedEngine.value}.${role}`];const state=previewEngine.value?.roles[role];return!previewPending.value&&sameChoice(state?.assignment,draft.value[selectedEngine.value]?.[role])?state?.error||``:``}function reviewRecommendations(){if(!canEdit.value||saving.value||stale.value||!recommendedChanges.value.length)return;recommendationReview.value={engineId:selectedEngine.value,changes:recommendedChanges.value}}function useRecommendations(){if(!recommendationReview.value||!canEdit.value||saving.value||stale.value)return;for(const{role,proposed}of recommendationReview.value.changes){draft.value[recommendationReview.value.engineId][role]=proposed;delete fieldErrors.value[`${recommendationReview.value.engineId}.${role}`]}recommendationReview.value=null}function customize(){const assignments=payload().orchestrators[selectedEngine.value];if(assignments)Object.assign(draft.value[selectedEngine.value],assignments);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||`Model routing was not saved.`)},messages:{success:`Model routing saved. New requests will use these assignments.`,error:`Model routing was not saved.`},fallbackRunError:`Model routing 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||!engine.value?.connected)return;saving.value=true;try{if((await command.run())?.ok===true){await resource.reload();emit(`saved`)}}catch{}finally{saving.value=false}}async function reload(){refreshError.value=``;try{await resource.reload();if(!resourceError.value)hydrate(resource.data.value)}catch(error){refreshError.value=error.message||`Model routing could not be loaded.`}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$4,[createBaseVNode(`div`,_hoisted_2$4,[createBaseVNode(`p`,_hoisted_3$4,toDisplayString(proposalMode.value?`${__props.connectionLabel||__props.connectionId} connected`:`${engineLabel.value} routing`),1),proposalMode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$4,`Your connection is ready. Model changes are optional.`)):(openBlock(),createElementBlock(`p`,_hoisted_5$4,`Used by all chats with `+toDisplayString(engineLabel.value)+`.`,1)),__props.setupError?(openBlock(),createBlock(VAlert,{key:2,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(`Your AI is connected, but its routing 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:3,type:`list-item-two-line@5, actions`})):loadError.value?(openBlock(),createBlock(VAlert,{key:4,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:reload},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):engine.value?.error&&!engine.value.connected?(openBlock(),createBlock(VAlert,{key:5,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(engine.value.error)+` `,1),createVNode(VBtn,{variant:`text`,onClick:reload},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):engine.value?.connected?(openBlock(),createElementBlock(Fragment,{key:6},[stale.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createTextVNode(`Routing 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},[createBaseVNode(`p`,_hoisted_6$4,toDisplayString(engineLabel.value),1),suggestedChanges.value.length?(openBlock(),createElementBlock(Fragment,{key:0},[!suggestedChanges.value.some(change=>change.role===`senior`)?(openBlock(),createElementBlock(`p`,_hoisted_7$4,`Senior stays `+toDisplayString(selectionLabel(engine.value.roles.senior.assignment))+`.`,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,"hide-details":``},{label:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$3,[createBaseVNode(`strong`,null,toDisplayString(proposal.label),1),_cache[11]||(_cache[11]=createBaseVNode(`br`,null,null,-1)),createTextVNode(`Current: `+toDisplayString(selectionLabel(proposal.previous)),1),_cache[12]||(_cache[12]=createBaseVNode(`br`,null,null,-1)),createTextVNode(`Suggested: `+toDisplayString(selectionLabel(proposal.proposed))+` · `+toDisplayString(choiceFor(proposal.proposed,proposal.role)?.accessLabel),1),_cache[13]||(_cache[13]=createBaseVNode(`br`,null,null,-1)),proposal.previous?.selectionSource===`explicit`?(openBlock(),createElementBlock(`span`,_hoisted_9$3,`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_10$3,`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(()=>[createTextVNode(`Configure `+toDisplayString(engineLabel.value)+` routing`,1)]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true),!proposalMode.value?(openBlock(),createElementBlock(Fragment,{key:2},[engine.value?.error?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(toDisplayString(engine.value.error),1)]),_:1})):createCommentVNode(``,true),canEdit.value&&recommendedChanges.value.length?(openBlock(),createBlock(VBtn,{key:1,variant:`outlined`,color:`primary`,size:`small`,"min-height":`36`,class:`mb-4`,disabled:saving.value||stale.value,onClick:reviewRecommendations},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Review recommendations`,-1)])]),_:1},8,[`disabled`])):canEdit.value?(openBlock(),createElementBlock(`p`,_hoisted_11$3,`No recommended changes.`)):createCommentVNode(``,true),otherModelsRequested.value&&unref(otherModels).loadError.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(` Additional model choices could not load. `+toDisplayString(unref(otherModels).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>unref(otherModels).resource.reload())},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(roles),role=>{return openBlock(),createElementBlock(Fragment,{key:`${selectedEngine.value}-${role.id}`},[createBaseVNode(`h3`,_hoisted_12$3,toDisplayString(role.id===`sharedBackup`?`Fallback for personal models`:role.label),1),createBaseVNode(`div`,{class:normalizeClass([`model-routing__role mb-4`,{"model-routing__role--compact":unref(smAndDown)}])},[createVNode(VAutocomplete,{ref_for:true,ref:field=>roleFields.value[role.id]=field,"model-value":choiceId(draft.value[selectedEngine.value]?.[role.id]),items:items(role.id),"item-title":`label`,"item-value":`id`,label:role.label,variant:`outlined`,disabled:saving.value||!canEdit.value,hint:roleHint(role),"persistent-hint":``,"error-messages":roleError(role.id),"filter-keys":[`title`,`raw.agent`,`props.subtitle`],"no-data-text":`No matching models`,class:`model-routing__model`,loading:otherModelsRequested.value&&role.crossOrchestrator&&unref(otherModels).resource.isInitialLoading.value,"onUpdate:menu":open=>{if(open&&role.crossOrchestrator)otherModelsRequested.value=true},"onUpdate:modelValue":$event=>choose(role.id,$event)},{subheader:withCtx(({props:group})=>[createVNode(VListSubheader,{class:`model-routing__group`},{default:withCtx(()=>[createTextVNode(toDisplayString(group.label),1)]),_:2},1024)]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps({ref_for:true},itemProps,{role:`option`,"aria-label":[item.agent,item.label,item.props?.subtitle,item.status,item.recommended?`Recommended`:``].filter(Boolean).join(` · `),class:[`model-routing__option`,{"model-routing__option--model":item.id}],"min-height":item.id?68:44}),{title:withCtx(()=>[createBaseVNode(`div`,_hoisted_13$2,[createBaseVNode(`span`,_hoisted_14$2,toDisplayString(item.label),1),item.recommended?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,color:`primary`,variant:`tonal`},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Recommended`,-1)])]),_:1})):createCommentVNode(``,true),item.status?(openBlock(),createElementBlock(`span`,_hoisted_15$2,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`,`class`,`min-height`])]),selection:withCtx(({item})=>[createBaseVNode(`span`,_hoisted_16$2,[createBaseVNode(`span`,_hoisted_17$2,toDisplayString(item.label),1),item.agent?(openBlock(),createElementBlock(`span`,_hoisted_18$2,[createTextVNode(toDisplayString(item.agent),1),item.props.subtitle?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · `+toDisplayString(item.props.subtitle),1)],64)):createCommentVNode(``,true)])):createCommentVNode(``,true)])]),_:1},8,[`model-value`,`items`,`label`,`disabled`,`hint`,`error-messages`,`loading`,`onUpdate:menu`,`onUpdate:modelValue`]),variants(role.id).length?(openBlock(),createBlock(VSelect,{key:0,"model-value":draft.value[selectedEngine.value]?.[role.id]?.variantId||``,items:[{id:``,label:`Default`},...variants(role.id)],"item-title":`label`,"item-value":`id`,label:`${role.label} thinking`,variant:`outlined`,"hide-details":``,disabled:saving.value||!canEdit.value,"onUpdate:modelValue":$event=>changeEffort(role.id,$event)},null,8,[`model-value`,`items`,`label`,`disabled`,`onUpdate:modelValue`])):createCommentVNode(``,true)],2),role.id===`helper`&&engine.value?.helperRoutingReview?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[reviewedHelpers.value.includes(selectedEngine.value)?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(`Helper choice confirmed. Save routing to apply.`)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[_cache[18]||(_cache[18]=createTextVNode(` Earlier settings used different models for helper tasks. Confirm the Helper selected above for future background tasks. `,-1)),createVNode(VBtn,{variant:`outlined`,class:`mt-2`,disabled:saving.value||!canEdit.value||!draft.value[selectedEngine.value]?.helper,onClick:_cache[2]||(_cache[2]=$event=>reviewedHelpers.value=[selectedEngine.value])},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Confirm Helper`,-1)])]),_:1},8,[`disabled`])],64))]),_:1})):createCommentVNode(``,true)],64)}),128))],64)):createCommentVNode(``,true),previewError.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(previewError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>retryPreview.value++)},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`Retry preview`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(`p`,_hoisted_19$2,toDisplayString(engineLabel.value?`Connect a model to ${engineLabel.value} to configure its routing.`:`Connect an assistant account to configure its modes.`),1))]),createBaseVNode(`div`,_hoisted_20$2,[createVNode(VBtn,{variant:`text`,disabled:saving.value,onClick:_cache[4]||(_cache[4]=$event=>emit(`close`))},{default:withCtx(()=>[createTextVNode(toDisplayString(proposalMode.value?suggestedChanges.value.length?`Keep current routing`:`Done`:`Cancel`),1)]),_:1},8,[`disabled`]),canEdit.value&&(proposalMode.value?suggestedChanges.value.length:engine.value?.connected)?(openBlock(),createBlock(VBtn,{key:0,variant:`flat`,color:`primary`,disabled:saving.value||stale.value||previewPending.value||Boolean(loadError.value)||baseRevision.value===null||!unref(engines).length||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 routing`),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[6]||(_cache[6]=$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[20]||(_cache[20]=[createTextVNode(`Routing changed. Close this review and reload current choices.`,-1)])]),_:1})):createCommentVNode(``,true),createBaseVNode(`ul`,_hoisted_21$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(recommendationReview.value.changes,change=>{return openBlock(),createElementBlock(`li`,{key: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[5]||(_cache[5]=$event=>recommendationReview.value=null)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{variant:`flat`,color:`primary`,disabled:saving.value||stale.value,onClick:useRecommendations},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[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$6,[[`__scopeId`,`data-v-1ddae204`]]);var _hoisted_1$3=[`aria-label`];var _hoisted_2$3={key:0,class:`d-flex align-center ga-2 mb-3`};var _hoisted_3$3={class:`d-flex align-center flex-wrap ga-2 mb-2`};var _hoisted_4$3={class:`text-title-large`};var _hoisted_5$3={class:`text-body-medium mb-3`};var _hoisted_6$3={key:0,class:`text-body-small mb-3`};var _hoisted_7$3={key:1,class:`text-body-small mb-3`};var _hoisted_8$2={class:`d-flex flex-wrap ga-1 mb-4`,"aria-label":`Available models`};var _hoisted_9$2={class:`text-body-small my-3`};var _hoisted_10$2={class:`d-flex flex-wrap ga-2 align-center`};var _hoisted_11$2={key:5,class:`text-body-small mt-3`};var _hoisted_12$2={class:`d-flex ga-2 mt-2`};var _sfc_main$5={__name:`NativeProviderConnections`,props:mergeModels({actionsEnabled:{type:Boolean,default:true},adding:Boolean,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`],[`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 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){routingSetupError.value=result.routing?.ok===false?result.routing.error:``;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,"engine-id":__props.engineId,"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,[`engine-id`,`connection-id`,`connection-label`,`setup-error`])):(openBlock(),createElementBlock(Fragment,{key:1},[__props.selectProvider?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[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},[createBaseVNode(`div`,_hoisted_3$3,[createBaseVNode(`h2`,_hoisted_4$3,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[14]||(_cache[14]=[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)]),createBaseVNode(`p`,_hoisted_5$3,toDisplayString(provider.value.description)+`.`,1),provider.value.setupNote?(openBlock(),createElementBlock(`p`,_hoisted_6$3,toDisplayString(provider.value.setupNote),1)):createCommentVNode(``,true),connectionStatus.value===`connected`?(openBlock(),createElementBlock(`p`,_hoisted_7$3,` Saved for `+toDisplayString(engineLabel.value)+` only. Each orchestrator has its own connection. `,1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_8$2,[(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))]),unref(loadError)?(openBlock(),createBlock(VAlert,{key:2,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[15]||(_cache[15]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),unref(resource).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`article, actions`})):(openBlock(),createBlock(VForm,{key:4,disabled:!__props.actionsEnabled||unref(busy),onSubmit:_cache[11]||(_cache[11]=withModifiers($event=>save(),[`prevent`]))},{default:withCtx(()=>[!useExistingKey.value?(openBlock(),createBlock(VTextField,{key:0,modelValue:apiKey.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$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[8]||(_cache[8]=$event=>visible.value=!visible.value)},null,8,[`modelValue`,`label`,`type`,`append-inner-icon`])):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_9$2,`Checks `+toDisplayString(engineLabel.value)+` only. This small request uses API credit or plan quota.`,1),createBaseVNode(`div`,_hoisted_10$2,[createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,disabled:!__props.actionsEnabled||!useExistingKey.value&&!apiKey.value.trim()||unref(busy)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(busy)?`Checking…`:useExistingKey.value||connectionStatus.value!==`connected`?`Check and connect`:`Check and replace key`),1)]),_:1},8,[`disabled`]),!__props.adding&&connectionStatus.value===`connected`?(openBlock(),createBlock(VBtn,{key:0,variant:`outlined`,disabled:unref(busy)||!__props.actionsEnabled,onClick:_cache[9]||(_cache[9]=$event=>save({useSavedKey:true}))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Check saved key`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{href:provider.value.keyUrl,target:`_blank`,rel:`noopener noreferrer`,variant:`text`,"append-icon":unref(mdiOpenInNew)},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Get API key`,-1)])]),_:1},8,[`href`,`append-icon`]),!__props.adding&&connectionStatus.value!==`not_connected`?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,disabled:!__props.actionsEnabled||unref(busy),onClick:_cache[10]||(_cache[10]=$event=>confirmRemove.value=true)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(` Disconnect `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])]),_:1},8,[`disabled`])),provider.value.ownerOnly?(openBlock(),createElementBlock(`p`,_hoisted_11$2,`This plan connection is available to the workspace owner.`)):createCommentVNode(``,true),confirmRemove.value?(openBlock(),createBlock(VAlert,{key:6,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_12$2,[createVNode(VBtn,{disabled:unref(busy),onClick:_cache[12]||(_cache[12]=$event=>confirmRemove.value=false)},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`Keep connected`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,disabled:unref(busy),onClick:_cache[13]||(_cache[13]=$event=>save({remove:true}))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(busy)?`Disconnecting…`:`Disconnect`),1)]),_:1},8,[`disabled`])])]),_:1})):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],64))],8,_hoisted_1$3)}}};var NativeProviderConnections_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-e5b14c8f`]]);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 primaryAuthLabel(account={}){if(primaryAuthPending(account)){if(requiresGitIdentity(account)&&account.connected===true)return`Saving identity…`;return authStartAccountId.value===String(account.id||``)?`Starting login…`:`Login in progress`}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 sign-in. This screen will update when Claude confirms the connection.`;return session.authUrl?`Sign in in the browser, then return here to finish connecting.`:`Preparing your Claude sign-in link…`}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. Open the terminal if Vibe64 needs more details.`;if(session.mode===`device`&&authSessionUserCode(session))return``;if(session.mode===`device`&&session.authUrl)return`Waiting for Codex to print the one-time code.`;if(session.mode===`device`)return`Starting code login and waiting for Codex to print a device code.`;if(session.authUrl)return`Browser login is open. Complete authorization there, then Studio will continue.`;return`Starting login and waiting for the browser URL.`}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,requiresGitIdentity,refreshStatus,retryAccountAuth,sessionStatusMessage,setCodexAuthStep,startAccountApiKeyAuth,startAccountAuth,submitClaudeCode,statusReady,toggleApiKeyForm,updateAuthTerminalExpanded}}var _hoisted_1$2={class:`accounts-setup`};var _hoisted_2$2={class:`accounts-setup__header`};var _hoisted_3$2={class:`accounts-setup__header-actions`};var _hoisted_4$2={class:`text-headline-small ma-0`};var _hoisted_5$2={key:0,class:`accounts-setup__close`};var _hoisted_6$2={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_7$2={class:`accounts-setup__items`};var _hoisted_8$1={key:0,class:`accounts-setup__item-main`};var _hoisted_9$1={class:`text-title-medium ma-0`};var _hoisted_10$1={class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_11$1={key:0,class:`accounts-setup__identity`};var _hoisted_12$1={key:1,class:`accounts-setup__identity`};var _hoisted_13$1={key:1,class:`accounts-setup__actions`};var _hoisted_14$1={key:0,class:`accounts-setup__identity-fields`};var _hoisted_15$1={key:4,class:`accounts-setup__api-key-form`};var _hoisted_16$1={key:2,class:`accounts-setup__session`};var _hoisted_17$1={key:0,"aria-label":`Connect Codex`,class:`accounts-setup__steps pa-0 mt-0 mb-2`};var _hoisted_18$1=[`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={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$4={__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},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,requiresGitIdentity,refreshStatus,retryAccountAuth,sessionStatusMessage,setCodexAuthStep,startAccountApiKeyAuth,startAccountAuth,submitClaudeCode,statusReady,toggleApiKeyForm,updateAuthTerminalExpanded}=useProviderAccountsSetup(props,{onConnected:account=>emit(`connected`,account)});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$2,[createBaseVNode(`header`,_hoisted_2$2,[createBaseVNode(`div`,_hoisted_3$2,[createBaseVNode(`h1`,_hoisted_4$2,toDisplayString(__props.title),1),createVNode(VChip,{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`]),(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[3]||(_cache[3]=[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[4]||(_cache[4]=[createTextVNode(` Cancel login `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)],64)}),128)),__props.backLabel&&!unref(authBusy)?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>emit(`back`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.backLabel),1)]),_:1})):createCommentVNode(``,true),!unref(authBusy)?(openBlock(),createBlock(VBtn,{key:1,"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?(openBlock(),createBlock(VBtn,{key:2,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$2,[renderSlot(_ctx.$slots,`close`,{},void 0,true)])):createCommentVNode(``,true),__props.lede?(openBlock(),createElementBlock(`p`,_hoisted_6$2,toDisplayString(__props.lede),1)):createCommentVNode(``,true)]),unref(errorMessage)?(openBlock(),createBlock(VAlert,{key:0,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:1,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:2,type:`list-item-avatar-two-line, actions`})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_7$2,[(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?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[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$1,toDisplayString(account.label),1),createBaseVNode(`p`,_hoisted_10$1,toDisplayString(account.message||unref(accountStatusMessage)(account)),1),account.username?(openBlock(),createElementBlock(`p`,_hoisted_11$1,toDisplayString(account.username),1)):account.previousUsername?(openBlock(),createElementBlock(`p`,_hoisted_12$1,` Previously linked: @`+toDisplayString(account.previousUsername),1)):createCommentVNode(``,true)])])):createCommentVNode(``,true),!session?(openBlock(),createElementBlock(`div`,_hoisted_13$1,[unref(requiresGitIdentity)(account)?(openBlock(),createElementBlock(`div`,_hoisted_14$1,[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),onClick:$event=>unref(startAccountAuth)(account)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(primaryAuthLabel)(account)),1)]),_:2},1032,[`aria-busy`,`variant`,`disabled`,`onClick`])):createCommentVNode(``,true),account.connected?(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[5]||(_cache[5]=[createTextVNode(` Use OpenAI API key `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true),unref(accountSupportsApiKeyAuth)(account)&&unref(apiKeyFormVisible)(account)?(openBlock(),createElementBlock(`div`,_hoisted_15$1,[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),onClick:$event=>unref(startAccountApiKeyAuth)(account)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(primaryAuthPending)(account)?`Starting login…`:`Login with API key`),1)]),_:2},1032,[`aria-busy`,`disabled`,`onClick`])])):createCommentVNode(``,true)])):createCommentVNode(``,true),session?(openBlock(),createElementBlock(`div`,_hoisted_16$1,[settingsStep||authorizeStep?(openBlock(),createElementBlock(`ol`,_hoisted_17$1,[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[6]||(_cache[6]=[createTextVNode(` 1 `,-1)])]),_:1},8,[`variant`]),_cache[7]||(_cache[7]=createTextVNode(` Prepare `,-1))],8,_hoisted_18$1),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[8]||(_cache[8]=[createTextVNode(` 2 `,-1)])]),_:1},8,[`color`,`variant`]),_cache[9]||(_cache[9]=createTextVNode(` Connect `,-1))],8,_hoisted_20$1)])):createCommentVNode(``,true),settingsStep?(openBlock(),createElementBlock(`div`,_hoisted_21$1,[_cache[14]||(_cache[14]=createBaseVNode(`h2`,{class:`text-title-large ma-0`},`Allow sign-in with a code`,-1)),_cache[15]||(_cache[15]=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[10]||(_cache[10]=[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[11]||(_cache[11]=[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[12]||(_cache[12]=[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[13]||(_cache[13]=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[19]||(_cache[19]=createBaseVNode(`h2`,{class:`text-title-large ma-0`},`Connect your Claude plan`,-1)),session.status!==`failed`?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[16]||(_cache[16]=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)||!session.authUrl,"append-icon":unref(mdiOpenInNew),variant:`flat`,onClick:$event=>unref(openAuthUrl)(session)},{default:withCtx(()=>[createTextVNode(toDisplayString(session.authUrl?`Continue to Claude`:`Preparing sign-in…`),1)]),_:2},1032,[`disabled`,`append-icon`,`onClick`]),_cache[17]||(_cache[17]=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[2]||(_cache[2]=$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`,"aria-busy":unref(claudeCodeChecking)?`true`:void 0,disabled:!unref(accountsReadyForActions)||!unref(claudeCode).trim()||unref(claudeCodeChecking)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(claudeCodeChecking)?`Checking sign-in…`:`Connect Claude`),1)]),_:1},8,[`aria-busy`,`disabled`])],40,_hoisted_25$1)],64)):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_26$1,toDisplayString(statusMessage),1),session.status===`failed`?(openBlock(),createBlock(VBtn,{key:1,class:`align-self-start`,color:`primary`,variant:`flat`,disabled:!unref(accountsReadyForActions)||unref(authStartBusy),onClick:$event=>unref(retryAccountAuth)(account,session)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[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[20]||(_cache[20]=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)||!session?.authUrl||authorizeStep&&!userCode,"append-icon":unref(mdiOpenInNew),variant:`flat`,onClick:$event=>unref(openAuthUrl)(session)},{default:withCtx(()=>[createTextVNode(toDisplayString(authorizeStep?`Continue to ChatGPT`:`Continue in browser`),1)]),_:2},1032,[`disabled`,`append-icon`,`onClick`])):createCommentVNode(``,true),statusMessage?(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[21]||(_cache[21]=[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$4,[[`__scopeId`,`data-v-daf0b8e4`]]);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}}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 REGULAR_ZAI_STARTER=Object.freeze({accountAction:`Create a regular Z.AI API key`,accountUrl:`https://z.ai/manage-apikey/apikey-list`,id:`zai`,label:`GLM-4.7 Flash`});var _hoisted_1$1={class:`vibe64-free-ai__intro`};var _hoisted_2$1={class:`text-body-large text-medium-emphasis`};var _hoisted_3$1={class:`vibe64-free-ai__card-header`};var _hoisted_4$1={class:`vibe64-free-ai__identity`};var _hoisted_5$1={class:`vibe64-free-ai__badges`};var _hoisted_6$1={class:`text-body-large`};var _hoisted_7$1={class:`vibe64-free-ai__facts text-body-medium`};var _sfc_main$3={__name:`FreeAiSelector`,props:{connections:{default:()=>[],type:Array},error:{default:``,type:String},loading:{default:false,type:Boolean}},emits:[`retry`,`select`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const{smAndDown}=useDisplay();const choices=[{...REGULAR_ZAI_STARTER,badge:`Optional`,description:`Connect a regular Z.AI API key to use GLM-4.7 Flash through OpenCode, then review its suggested roles in Model routing.`,facts:[`Free through Z.AI's regular API—not Coding Plan quota`,`Existing model choices stay in place unless you change them`,`Other regular-API models stay locked until you explicitly enable paid access`],icon:mdiFlashOutline,recommended:true,summary:`Connect with Z.AI`},{accountAction:`Open Zen and create an optional API key`,accountUrl:`https://opencode.ai/auth`,badge:`Included`,description:`Big Pickle is ready the moment you join—no account, key, or settings. A Zen key is needed only for the wider Zen catalogue.`,facts:[`Big Pickle works from day one`,`No key is needed for the included model`,`A Zen key lets you check or enable more models`],icon:mdiCodeBraces,id:`opencode`,label:`Big Pickle · OpenCode Zen`,recommended:false,summary:`Ready now, no setup`}];const connectedIds=computed(()=>new Set(props.connections.map(connection=>String(connection?.id||``))));const choiceButtons=new Map;function connected(choice){return connectedIds.value.has(choice.id)}const visibleChoices=computed(()=>{const missing=choices.filter(choice=>!connected(choice));return missing.length?missing:choices});const allChoicesConnected=computed(()=>choices.every(choice=>connected(choice)));const introduction=computed(()=>{if(connectedIds.value.has(`opencode`)&&!connectedIds.value.has(`zai`))return`Big Pickle is ready now. You can also connect GLM-4.7 Flash through Z.AI's regular API and choose its roles in Model routing.`;return allChoicesConnected.value?`Big Pickle and GLM-4.7 Flash are available. Model routing controls which models your workflows use.`:`Big Pickle needs no setup. You can also connect GLM-4.7 Flash through Z.AI's regular API.`});function focusOption(providerId=``){choiceButtons.get(String(providerId||``))?.$el?.focus?.()}function setChoiceButton(providerId,component){if(component)choiceButtons.set(providerId,component);else choiceButtons.delete(providerId)}__expose({focusOption});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{"aria-labelledby":`vibe64-free-ai-title`,class:normalizeClass([`vibe64-free-ai`,{"vibe64-free-ai--compact":unref(smAndDown)}])},[createBaseVNode(`header`,_hoisted_1$1,[!unref(smAndDown)?(openBlock(),createBlock(VAvatar,{key:0,color:`primary`,rounded:`lg`,size:`56`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiGiftOutline),size:`30`},null,8,[`icon`])]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,null,[_cache[1]||(_cache[1]=createBaseVNode(`p`,{class:`text-label-large text-primary`},`FREE FROM DAY ONE`,-1)),_cache[2]||(_cache[2]=createBaseVNode(`h2`,{id:`vibe64-free-ai-title`,class:`text-headline-medium`},`Start with Big Pickle. Add models when you need them.`,-1)),createBaseVNode(`p`,_hoisted_2$1,toDisplayString(introduction.value),1)])]),__props.loading?(openBlock(),createBlock(VRow,{key:0,"aria-busy":`true`,"aria-label":`Loading free AI choices`,align:`stretch`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(2,index=>{return createVNode(VCol,{key:index,cols:`12`,md:`6`},{default:withCtx(()=>[createVNode(VSkeletonLoader,{class:`vibe64-free-ai__skeleton fill-height`,type:`list-item-avatar-two-line, paragraph, paragraph, button`})]),_:1})}),64))]),_:1})):__props.error?(openBlock(),createBlock(VAlert,{key:1,border:`start`,text:__props.error,title:`Free AI choices could not load`,type:`error`,variant:`tonal`},{append:withCtx(()=>[createVNode(VBtn,{type:`button`,variant:`tonal`,onClick:_cache[0]||(_cache[0]=$event=>emit(`retry`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1},8,[`text`])):(openBlock(),createBlock(VRow,{key:2,align:`stretch`,justify:`center`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleChoices.value,choice=>{return openBlock(),createBlock(VCol,{key:choice.id,cols:`12`,md:visibleChoices.value.length===1?8:6},{default:withCtx(()=>[createVNode(VCard,{color:choice.recommended?`primary`:`secondary`,class:`vibe64-free-ai__card fill-height`,elevation:choice.recommended?1:0,rounded:`xl`,variant:`tonal`},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$1,[createVNode(VAvatar,{color:choice.recommended?`primary`:`secondary`,rounded:`lg`,size:`56`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:choice.icon,size:`30`},null,8,[`icon`])]),_:2},1032,[`color`]),createBaseVNode(`div`,_hoisted_4$1,[createVNode(VCardSubtitle,{class:`vibe64-free-ai__summary text-label-large`},{default:withCtx(()=>[createTextVNode(toDisplayString(choice.summary),1)]),_:2},1024),createVNode(VCardTitle,{class:`vibe64-free-ai__name text-title-large`},{default:withCtx(()=>[createTextVNode(toDisplayString(choice.label),1)]),_:2},1024)]),createBaseVNode(`div`,_hoisted_5$1,[connected(choice)?(openBlock(),createBlock(VChip,{key:0,color:`success`,size:`small`,variant:`tonal`},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Connected `,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VChip,{color:choice.recommended?`primary`:void 0,size:`small`,variant:choice.recommended?`flat`:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(choice.badge),1)]),_:2},1032,[`color`,`variant`])])])]),_:2},1024),createVNode(VCardText,{class:`vibe64-free-ai__body`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_6$1,toDisplayString(choice.description),1),createBaseVNode(`ul`,_hoisted_7$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(choice.facts,fact=>{return openBlock(),createElementBlock(`li`,{key:fact},[createVNode(VIcon,{color:`primary`,icon:unref(mdiCheckCircleOutline),size:`20`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(fact),1)])}),128))])]),_:2},1024),createVNode(VCardActions,{class:`vibe64-free-ai__actions`},{default:withCtx(()=>[createVNode(VBtn,{ref_for:true,ref:component=>setChoiceButton(choice.id,component),"append-icon":unref(mdiArrowRight),block:``,class:`vibe64-free-ai__action`,color:choice.recommended?`primary`:void 0,size:`large`,type:`button`,variant:choice.recommended?`flat`:`tonal`,onClick:$event=>emit(`select`,choice)},{default:withCtx(()=>[createTextVNode(toDisplayString(connected(choice)?choice.id===`zai`?`Manage regular Z.AI API`:`View included Big Pickle`:choice.id===`zai`?`Connect regular Z.AI API`:`Use included Big Pickle`),1)]),_:2},1032,[`append-icon`,`color`,`variant`,`onClick`])]),_:2},1024)]),_:2},1032,[`color`,`elevation`])]),_:2},1032,[`md`])}),128))]),_:1})),_cache[5]||(_cache[5]=createBaseVNode(`p`,{class:`vibe64-free-ai__note text-body-small text-medium-emphasis`},` Providers control availability, limits, and account requirements. Vibe64 verifies your key before saving it. `,-1))],2)}}};var FreeAiSelector_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-83dda190`]]);var _hoisted_1={key:0,class:`vibe64-ai-connections__page-actions`,"aria-label":`AI account actions`};var _hoisted_2={key:0,"aria-busy":`true`,"aria-label":`Loading AI accounts`,class:`vibe64-ai-connections__list`};var _hoisted_3={key:1,class:`vibe64-ai-connections__load-error`};var _hoisted_4={class:`vibe64-ai-connections__recommendation-body`};var _hoisted_5={class:`vibe64-ai-connections__recommendation-actions`};var _hoisted_6={class:`text-body-small text-medium-emphasis`};var _hoisted_7={key:2,class:`vibe64-ai-connections__zero-state`};var _hoisted_8={key:3,"aria-label":`Configured AI accounts`,class:`vibe64-ai-connections__accounts`};var _hoisted_9={class:`d-flex align-center justify-space-between flex-wrap ga-2 vibe64-ai-connections__group-title`};var _hoisted_10={class:`text-title-large`};var _hoisted_11={class:`vibe64-ai-connections__identity`};var _hoisted_12={key:0};var _hoisted_13={key:1};var _hoisted_14={key:2};var _hoisted_15={key:3};var _hoisted_16={key:4};var _hoisted_17={key:5};var _hoisted_18={class:`vibe64-ai-connections__status`,"aria-label":`Connection status`};var _hoisted_19={class:`vibe64-ai-connections__row-actions`};var _hoisted_20={class:`vibe64-ai-connections__model-access-copy`};var _hoisted_21={key:0,class:`vibe64-ai-connections__zen-progress`,"aria-live":`polite`};var _hoisted_22={class:`vibe64-ai-connections__zen-actions`};var _hoisted_23={key:0};var _hoisted_24={key:1};var _hoisted_25={class:`vibe64-ai-connections__model-access-copy`};var _hoisted_26={class:`vibe64-ai-connections__security-note`};var _hoisted_27={key:0,class:`text-body-medium`};var _hoisted_28={class:`vibe64-dialog-eyebrow`};var _hoisted_29={key:1,class:`text-body-medium`};var _hoisted_30={key:0,"aria-busy":`true`,"aria-label":`Loading OpenCode providers`,class:`vibe64-provider-picker__list`};var _hoisted_31={key:1,class:`vibe64-provider-picker__recovery`};var _hoisted_32={key:0,class:`text-label-medium text-medium-emphasis`};var _hoisted_33={key:1,class:`text-label-large text-primary`};var _hoisted_34={class:`text-body-medium text-medium-emphasis`};var _hoisted_35={class:`vibe64-dialog-eyebrow`};var _hoisted_36={class:`vibe64-provider-editor__recovery`};var _hoisted_37={"aria-live":`polite`,class:`vibe64-provider-editor__security`};var _sfc_main$2={__name:`AiConnectionsSettings`,props:{endpoint:{type:String,default:AI_CONNECTIONS_ENDPOINT},isOwner:{default:false,type:Boolean},onboarding:{default:false,type:Boolean}},emits:[`changed`,`connected`,`busy`],setup(__props,{expose:__expose,emit:__emit}){const PROVIDER_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;const PROVIDER_REVISION_PATTERN=/^sha256:[a-f0-9]{64}$/u;const props=__props;const emit=__emit;const route=useRoute();const router=useRouter();const{smAndDown}=useDisplay();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 onboardingSelector=ref(null);const zeroStateSelector=ref(null);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 routingEngineId=ref(``);const{connectedWorkflows}=useModelRouting({workflowsOnly:true,enabled:computed(()=>props.isOwner&&!props.onboarding)});const routingSaving=ref(false);const editorRoutingPending=ref(false);const editorRoutingSetupError=ref(``);const nativeRoutingReady=ref(false);const nativeRoutingSetupError=ref(``);const editorOrigin=ref(`direct`);const editorStarter=ref(null);const editorStarterSurface=ref(``);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:computed(()=>props.isOwner)});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:props.endpoint,catalogProviderId,enabled:computed(()=>props.isOwner)});function queryText(value){return String(Array.isArray(value)?value[0]:value||``).trim()}const pendingProvider=computed(()=>{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:`codex`,label:`Codex`,account:codexAccount.value,provider:{id:`openai`,label:`GPT`,description:`ChatGPT login or OpenAI API key`}},{id:`claude`,label:`Claude Code`,account:claudeAccount.value,provider:{id:`anthropic`,label:`Claude`,description:`Claude subscription`}}].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 nativeSetupRows=computed(()=>[{...nativeSetupAccount.value||{connected:false,id:nativeSetupProviderId.value,status:`missing`},...nativeSetupDetails.value,label:nativeSetupAccount.value?.username||`${nativeSetupDetails.value.label} account`,username:``,message:nativeSetupConnected.value?`Connected`:nativeSetupDetails.value.message}]);const configuredAiRows=computed(()=>[...nativeAccountConfigured(codexAccount.value)?[{accessLabel:codexAccount.value?.ownerOnly===true?`Personal use`:codexAccount.value?.ownerOnly===false?`Workspace use`:``,billingLabel:codexAccount.value?.username||`Codex account`,engineId:`codex`,id:`codex`,kind:`codex`,connected:codexConnected.value,keyHint:codexConnected.value?`Connected`:`Reconnect required`,managementUrl:``,modelLabel:`Available for Codex sessions`,providerLabel:`GPT`}]:[],...nativeAccountConfigured(claudeAccount.value)?[{accessLabel:`Personal use`,billingLabel:claudeAccount.value?.username||`Claude account`,engineId:`claude`,id:`claude`,kind:`claude`,connected:claudeConnected.value,keyHint:claudeConnected.value?`Connected`:`Reconnect required`,managementUrl:`https://claude.ai/settings/billing`,modelLabel:`Choose model roles in Model routing`,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`,providerLabel:provider.label,billingLabel:provider.description,accessLabel:provider.ownerOnly?`Personal use`:`Workspace use`,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`,modelLabel:connection.builtIn?`Big Pickle is included and ready`:connection.id===`zai`?`GLM-4.7 Flash is ready for new sessions`:connection.id===`opencode`?`Zen key ready; choose model access below`:`Choose model roles in Model routing`,providerLabel:connection.id===`opencode`&&connection.builtIn?`Big Pickle`:connection.productLabel||connection.label}))]);const configuredAiGroups=computed(()=>[{id:`codex`,label:`Codex`},{id:`claude`,label:`Claude Code`},{id:`opencode`,label:`OpenCode`}].map(engine=>({...engine,accounts:configuredAiRows.value.filter(account=>account.engineId===engine.id)})).filter(engine=>engine.accounts.length));const glmConnected=computed(()=>connections.value.some(connection=>(connection.id===`zai`||connection.id===`zai-coding-plan`)&&connection.connected===true)||codexProviders.connections.value.some(connection=>[`zai`,`zai-coding-plan`].includes(connection.id)&&(connection.connected||connection.claudeReady)));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?.builtIn?` Adding a Zen key keeps Big Pickle available and lets you check or enable Zen's current models. Choose their roles in Model routing.`: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(()=>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`,`starter`].includes(editorOrigin.value)?`Back`:`Cancel`);const editorEyebrow=computed(()=>{if(existingEditorConnection.value)return`Manage connection`;if(editorProviderId.value===`zai`&&editorStarter.value)return`Regular Z.AI API`;if(editorStarter.value)return`Free AI setup`;return`Add connection`});const editorTitle=computed(()=>{if(existingEditorConnection.value?.builtIn)return`Add a Zen API key`;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`;if(editorStarter.value)return`Connect ${editorStarter.value.label}`;return`Connect ${editorLabel.value||`provider`}`});const removeRunning=computed(()=>codexProviders.busy.value||([`codex`,`claude`].includes(removeTarget.value?.kind)?nativeRemoving.value:removingProviderId.value===String(removeTarget.value?.id||``)));const modelAccessRunning=computed(()=>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`Big Pickle 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}}function connectStarterProvider(starter={},surface=`inline`){editorStarterSurface.value=surface;chooseProvider(starter,{origin:surface===`recommendation`?`direct`:`starter`,starter})}async function chooseProvider(choice={},{origin=`direct`,preserveInput=false,starter=null}={}){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;editorStarter.value=starter;editorProviderId.value=id;editorProviderRevision.value=``;editorLabel.value=String(starter?.label||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;if(!starter)editorLabel.value=String(provider.label||choice.label||id);preparingProviderId.value=``}function retryPreparedProvider(){if(preparedChoice.value)chooseProvider(preparedChoice.value,{origin:editorOrigin.value,preserveInput:true,starter:editorStarter.value})}function resetEditor(){providerPreparationId+=1;editorOpen.value=false;catalogProviderId.value=``;preparedChoice.value=null;preparingProviderId.value=``;catalogPreparationError.value=``;editorOrigin.value=`direct`;editorStarter.value=null;editorStarterSurface.value=``;editorProviderId.value=``;editorProviderRevision.value=``;editorLabel.value=``;editorApiKey.value=``;editorApiKeyVisible.value=false;editorError.value=``}async function closeEditor(){if(editorSaving.value)return;const origin=editorOrigin.value;const providerId=editorProviderId.value;const starterSurface=editorStarterSurface.value;resetEditor();if(origin===`starter`){await nextTick();(starterSurface===`onboarding`?onboardingSelector.value:zeroStateSelector.value)?.focusOption(providerId)}else 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(!props.isOwner||!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={}){if(connection.removable===false)return;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`||account.builtIn||!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,()=>props.isOwner],([provider,isOwner])=>{if(!provider){hydratedRequestIdentity=``;return}if(!isOwner)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}watch(()=>Boolean(routingSaving.value||editorSaving.value||removeRunning.value||modelAccessRunning.value||codexProviderSaving.value),busy=>emit(`busy`,busy));__expose({openProvider});return(_ctx,_cache)=>{return openBlock(),createBlock(VSheet,{border:!__props.onboarding,class:normalizeClass([`vibe64-ai-connections`,{"vibe64-ai-connections--compact":unref(smAndDown),"vibe64-ai-connections--onboarding":__props.onboarding}]),rounded:`xl`},{default:withCtx(()=>[__props.onboarding?(openBlock(),createBlock(FreeAiSelector_default,{key:0,ref_key:`onboardingSelector`,ref:onboardingSelector,connections:unref(connections),error:unref(loadError),loading:unref(isInitialLoading),onRetry:unref(reload),onSelect:_cache[0]||(_cache[0]=choice=>connectStarterProvider(choice,`onboarding`))},null,8,[`connections`,`error`,`loading`,`onRetry`])):(openBlock(),createElementBlock(Fragment,{key:1},[__props.isOwner?(openBlock(),createElementBlock(`div`,_hoisted_1,[createVNode(VBtn,{icon:unref(mdiRefresh),"aria-label":`Refresh AI accounts`,disabled:accountsInitialLoading.value||refreshingAll.value,type:`button`,variant:`text`,onClick:refreshAllAccounts},null,8,[`icon`,`disabled`]),createVNode(VBtn,{color:`primary`,disabled:accountsInitialLoading.value||Boolean(unref(loadError))||Boolean(nativeLoadError.value)||!canAddConnection.value,"prepend-icon":unref(mdiPlus),type:`button`,variant:`flat`,onClick:_cache[1]||(_cache[1]=$event=>addAiOpen.value=true)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(` Add connection `,-1)])]),_:1},8,[`disabled`,`prepend-icon`])])):createCommentVNode(``,true),!__props.isOwner?(openBlock(),createBlock(VAlert,{key:1,text:`Only the Vibe64 owner can add, change, or remove AI accounts. Workspace members can use connections marked Workspace use.`,title:`Owner required`,type:`info`,variant:`tonal`})):(openBlock(),createElementBlock(Fragment,{key:2},[accountsInitialLoading.value?(openBlock(),createElementBlock(`div`,_hoisted_2,[(openBlock(),createElementBlock(Fragment,null,renderList(3,index=>{return createVNode(VSkeletonLoader,{key:index,type:`list-item-avatar-three-line, actions`})}),64))])):unref(loadError)?(openBlock(),createElementBlock(`div`,_hoisted_3,[createVNode(VAlert,{text:unref(loadError),title:`AI accounts could not load`,type:`error`,variant:`tonal`},null,8,[`text`]),createVNode(VBtn,{type:`button`,variant:`tonal`,onClick:refreshAllAccounts},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Try again`,-1)])]),_:1})])):(openBlock(),createElementBlock(Fragment,{key:2},[nativeLoadError.value?(openBlock(),createBlock(VAlert,{key:0,text:nativeLoadError.value,title:`AI account status could not load`,type:`warning`,variant:`tonal`},null,8,[`text`])):createCommentVNode(``,true),!glmConnected.value?(openBlock(),createBlock(VSheet,{key:1,border:``,class:`vibe64-ai-connections__recommendation`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4,[_cache[41]||(_cache[41]=createBaseVNode(`h2`,{class:`text-title-medium`},`Add GLM-4.7 Flash`,-1)),_cache[42]||(_cache[42]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},` Connect a regular Z.AI API key to use GLM-4.7 Flash through OpenCode. Review its suggested roles in Model routing; your existing choices stay in place unless you change them. This connection uses Z.AI's regular API. `,-1)),createBaseVNode(`div`,_hoisted_5,[createVNode(VBtn,{class:`vibe64-ai-connections__recommendation-primary`,color:`primary`,type:`button`,variant:`flat`,onClick:_cache[2]||(_cache[2]=$event=>connectStarterProvider(unref(REGULAR_ZAI_STARTER),`recommendation`))},{default:withCtx(()=>[..._cache[38]||(_cache[38]=[createTextVNode(` Connect regular Z.AI API `,-1)])]),_:1}),createBaseVNode(`span`,_hoisted_6,[_cache[40]||(_cache[40]=createTextVNode(` Have a Z.AI Personal Coding Plan? `,-1)),createVNode(VBtn,{class:`vibe64-ai-connections__recommendation-plan-action`,type:`button`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>{chooseAiType(`codex`);chooseNativeProvider(`zai-coding-plan`)})},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(` Connect Coding Plan with Codex `,-1)])]),_:1})])])])]),_:1})):createCommentVNode(``,true),!configuredAiRows.value.length?(openBlock(),createElementBlock(`div`,_hoisted_7,[createVNode(FreeAiSelector_default,{ref_key:`zeroStateSelector`,ref:zeroStateSelector,connections:unref(connections),error:unref(loadError),onRetry:unref(reload),onSelect:_cache[4]||(_cache[4]=choice=>connectStarterProvider(choice,`inline`))},null,8,[`connections`,`error`,`onRetry`])])):(openBlock(),createElementBlock(`section`,_hoisted_8,[(openBlock(true),createElementBlock(Fragment,null,renderList(configuredAiGroups.value,group=>{return openBlock(),createBlock(VSheet,{key:group.id,tag:`section`,"aria-label":group.label,border:``,class:`vibe64-ai-connections__account-list`,rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_9,[createBaseVNode(`h2`,_hoisted_10,toDisplayString(group.label),1),unref(connectedWorkflows).some(choice=>choice.engineId===group.id)?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,"aria-label":`Configure ${group.label} routing`,onClick:$event=>{routingEngineId.value=group.id;routingOpen.value=true}},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(` Configure routing `,-1)])]),_:1},8,[`aria-label`,`onClick`])):createCommentVNode(``,true)]),(openBlock(true),createElementBlock(Fragment,null,renderList(group.accounts,account=>{return openBlock(),createElementBlock(`article`,{key:`${account.kind}:${account.id}`,class:`vibe64-ai-connections__row`},[createBaseVNode(`div`,_hoisted_11,[createVNode(VAvatar,{color:account.kind===`codex-provider`&&!account.connected?`warning`:`success`,size:`44`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:account.kind===`codex-provider`&&!account.connected?unref(mdiRefresh):unref(mdiCheck),size:`22`},null,8,[`icon`])]),_:2},1032,[`color`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(account.providerLabel),1),account.id===`zai`?(openBlock(),createElementBlock(`small`,_hoisted_12,toDisplayString(account.billingLabel),1)):account.id===`opencode`&&account.builtIn?(openBlock(),createElementBlock(`small`,_hoisted_13,`OpenCode Zen · included with Vibe64`)):(openBlock(),createElementBlock(`small`,_hoisted_14,toDisplayString(account.billingLabel),1)),account.id===`zai`?(openBlock(),createElementBlock(`small`,_hoisted_15,`Free model ready for new sessions · `+toDisplayString(account.keyHint),1)):account.id===`opencode`&&account.builtIn?(openBlock(),createElementBlock(`small`,_hoisted_16,`Ready for the whole workspace · `+toDisplayString(account.keyHint),1)):(openBlock(),createElementBlock(`small`,_hoisted_17,toDisplayString(account.modelLabel)+` · `+toDisplayString(account.keyHint),1))])]),createBaseVNode(`div`,_hoisted_18,[account.accessLabel?(openBlock(),createBlock(VChip,{key:0,color:account.accessLabel===`Workspace use`?`primary`:void 0,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(account.accessLabel),1)]),_:2},1032,[`color`])):createCommentVNode(``,true),account.preferred?(openBlock(),createBlock(VChip,{key:1,color:`success`,size:`small`,variant:`tonal`},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(` Default `,-1)])]),_:1})):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_19,[account.managementUrl?(openBlock(),createBlock(VBtn,{key:0,"append-icon":unref(mdiOpenInNew),href:account.managementUrl,rel:`noopener noreferrer`,target:`_blank`,variant:`text`},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(` Billing & usage `,-1)])]),_:1},8,[`append-icon`,`href`])):createCommentVNode(``,true),createVNode(VBtn,{type:`button`,variant:`text`,onClick:$event=>manageConfiguredAi(account)},{default:withCtx(()=>[..._cache[46]||(_cache[46]=[createTextVNode(`Manage`,-1)])]),_:1},8,[`onClick`]),account.removable!==false?(openBlock(),createBlock(VBtn,{key:1,color:`error`,type:`button`,variant:`text`,onClick:$event=>requestRemove(account)},{default:withCtx(()=>[createTextVNode(toDisplayString(account.id===`opencode`?`Use included Big Pickle`:`Remove`),1)]),_:2},1032,[`onClick`])):createCommentVNode(``,true)]),account.id===`opencode`&&!account.builtIn&&account.modelAccess?(openBlock(),createBlock(VSheet,{key:0,class:`vibe64-ai-connections__account-child vibe64-ai-connections__zen-access`,rounded:`md`},{default:withCtx(()=>[_cache[50]||(_cache[50]=createBaseVNode(`small`,{class:`vibe64-ai-connections__account-child-label`},`For this connection`,-1)),createBaseVNode(`div`,_hoisted_20,[createVNode(VAvatar,{color:account.modelAccess.mode===`all`?`warning`:`primary`,size:`40`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:zenCheckIsRunning(account)?unref(mdiRefresh):unref(mdiShieldCheckOutline),size:`21`},null,8,[`icon`])]),_:2},1032,[`color`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(zenAccessTitle(account)),1),_cache[47]||(_cache[47]=createBaseVNode(`small`,null,` Big Pickle always remains available. Checking sends one tiny, potentially billable request to each current Zen model, one at a time. `,-1))])]),zenCheck(account).status?(openBlock(),createElementBlock(`div`,_hoisted_21,[zenCheckIsRunning(account)?(openBlock(),createBlock(VProgressLinear,{key:0,color:`primary`,indeterminate:!zenCheck(account).total,"model-value":zenCheckProgress(account),rounded:``},null,8,[`indeterminate`,`model-value`])):createCommentVNode(``,true),createBaseVNode(`small`,null,toDisplayString(zenCheckSummary(account)),1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_22,[createVNode(VBtn,{color:`primary`,disabled:Boolean(unref(updatingModelAccessProviderId))||zenCheckIsRunning(account),type:`button`,variant:`flat`,onClick:$event=>applyZenModelAccess(account,`check-available`)},{default:withCtx(()=>[unref(smAndDown)?(openBlock(),createElementBlock(`span`,_hoisted_23,`Check & enable models`)):(openBlock(),createElementBlock(`span`,_hoisted_24,`Check & enable working models`))]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{disabled:Boolean(unref(updatingModelAccessProviderId))||zenCheckIsRunning(account),type:`button`,variant:`tonal`,onClick:$event=>applyZenModelAccess(account,`enable-all`)},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(` Enable all current models `,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{disabled:Boolean(unref(updatingModelAccessProviderId))||zenCheckIsRunning(account),type:`button`,variant:`text`,onClick:$event=>applyZenModelAccess(account,`disable-additional`)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(` Use Big Pickle only `,-1)])]),_:1},8,[`disabled`,`onClick`]),zenCheckIsRunning(account)?(openBlock(),createBlock(VBtn,{key:0,color:`error`,disabled:unref(updatingModelAccessProviderId)===account.id||zenCheck(account).status===`cancelling`,"prepend-icon":unref(mdiStopCircleOutline),type:`button`,variant:`text`,onClick:$event=>applyZenModelAccess(account,`cancel-check`)},{default:withCtx(()=>[createTextVNode(toDisplayString(zenCheck(account).status===`cancelling`?`Stopping…`:`Cancel check`),1)]),_:2},1032,[`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true)])]),_:2},1024)):createCommentVNode(``,true),account.id!==`opencode`&&account.modelAccess?.configurable?(openBlock(),createBlock(VSheet,{key:1,class:normalizeClass([`vibe64-ai-connections__account-child vibe64-ai-connections__model-access`,{"vibe64-ai-connections__model-access--paid":account.modelAccess.mode===`all`}]),rounded:`md`},{default:withCtx(()=>[_cache[51]||(_cache[51]=createBaseVNode(`small`,{class:`vibe64-ai-connections__account-child-label`},`For this connection`,-1)),createBaseVNode(`div`,_hoisted_25,[createVNode(VAvatar,{color:account.modelAccess.mode===`all`?`warning`:`success`,size:`40`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:account.modelAccess.mode===`all`?unref(mdiCreditCardOutline):unref(mdiShieldCheckOutline),size:`21`},null,8,[`icon`])]),_:2},1032,[`color`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(account.modelAccess.mode===`all`?`All Z.AI models unlocked`:`Free-only model access`),1),createBaseVNode(`small`,null,toDisplayString(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:``,label:unref(updatingModelAccessProviderId)===account.id?account.modelAccess.mode===`all`?`Returning to free only…`:`Unlocking paid models…`:account.modelAccess.label,"model-value":account.modelAccess.mode===`all`,onClick:withModifiers($event=>requestModelAccess(account,account.modelAccess.mode!==`all`),[`prevent`])},null,8,[`disabled`,`label`,`model-value`,`onClick`])]),_:2},1032,[`class`])):createCommentVNode(``,true)])}),128))]),_:2},1032,[`aria-label`])}),128))])),pendingProvider.value&&!editorOpen.value?(openBlock(),createBlock(VAlert,{key:4,class:`vibe64-ai-connections__requested`,text:`${pendingProvider.value.label} needs an API key before the requested OpenCode session can start.`,title:`Provider setup requested`,type:`info`,variant:`tonal`},{append:withCtx(()=>[createVNode(VBtn,{color:`primary`,type:`button`,variant:`flat`,onClick:_cache[5]||(_cache[5]=$event=>chooseProvider(pendingProvider.value))},{default:withCtx(()=>[..._cache[52]||(_cache[52]=[createTextVNode(`Connect`,-1)])]),_:1})]),_:1},8,[`text`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_26,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`18`},null,8,[`icon`]),_cache[53]||(_cache[53]=createBaseVNode(`span`,null,`Provider keys are redacted after saving. Sign-ins and keys can be managed only by the Vibe64 owner.`,-1))])],64))],64))],64)),createVNode(VDialog,{modelValue:addAiOpen.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>addAiOpen.value=$event),fullscreen:unref(smAndDown),"max-width":`46rem`},{default:withCtx(()=>[createVNode(VCard,{rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[_cache[54]||(_cache[54]=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[6]||(_cache[6]=$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(aiStatusLoaded.value?nativeChoices.value:[],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(()=>[..._cache[55]||(_cache[55]=[createTextVNode(`Choose a provider`,-1)])]),_:1})]),_: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=>chooseAiType(choice.id)},{default:withCtx(()=>[createTextVNode(` Choose `+toDisplayString(choice.label),1)]),_:2},1032,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024)}),128)),openCodeAddAvailable.value?(openBlock(),createBlock(VCol,{key:0,cols:`12`,sm:nativeChoices.value.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[56]||(_cache[56]=[createTextVNode(`OpenCode`,-1)])]),_:1}),createVNode(VCardSubtitle,null,{default:withCtx(()=>[..._cache[57]||(_cache[57]=[createTextVNode(`Connect a provider API key`,-1)])]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-add-ai__choice-copy text-body-medium`},{default:withCtx(()=>[..._cache[58]||(_cache[58]=[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[7]||(_cache[7]=$event=>chooseAiType(`opencode`))},{default:withCtx(()=>[..._cache[59]||(_cache[59]=[createTextVNode(` Choose provider `,-1)])]),_:1})]),_:1})]),_:1}))]),_:1},8,[`sm`])):createCommentVNode(``,true)]),_:1}),!canAddConnection.value?(openBlock(),createElementBlock(`p`,_hoisted_27,`All available connections are configured. Use Manage to update them.`)):createCommentVNode(``,true)]),_:1})]),_:1},8,[`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:nativeProviderPickerOpen.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>nativeProviderPickerOpen.value=$event),fullscreen:unref(smAndDown),"max-width":`42rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`small`,_hoisted_28,`Add `+toDisplayString(nativeSetupDetails.value.label)+` connection`,1),_cache[60]||(_cache[60]=createBaseVNode(`strong`,null,`Choose a provider`,-1))]),createVNode(VBtn,{icon:unref(mdiArrowLeft),"aria-label":`Back to orchestrators`,variant:`text`,onClick:_cache[9]||(_cache[9]=$event=>{nativeProviderPickerOpen.value=false;addAiOpen.value=true})},null,8,[`icon`])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[nativeAvailableProviders.value.length?(openBlock(),createBlock(VList,{key:0,lines:`two`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(nativeAvailableProviders.value,provider=>{return openBlock(),createBlock(VListItem,{key:provider.id,title:provider.label,subtitle:provider.description,onClick:$event=>chooseNativeProvider(provider.id)},{append:withCtx(()=>[..._cache[61]||(_cache[61]=[createBaseVNode(`span`,{class:`text-label-large text-primary`},`Connect`,-1)])]),_:1},8,[`title`,`subtitle`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_29,`All available `+toDisplayString(nativeSetupDetails.value.label)+` connections are configured.`,1))]),_:1})]),_:1},8,[`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:providerPickerOpen.value,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>providerPickerOpen.value=$event),fullscreen:unref(smAndDown),"max-width":`46rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-dialog-title`},{default:withCtx(()=>[_cache[62]||(_cache[62]=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[11]||(_cache[11]=$event=>{providerPickerOpen.value=false;addAiOpen.value=true})},null,8,[`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-provider-picker__body`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:providerSearch.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>providerSearch.value=$event),autofocus:``,clearable:``,disabled:providerPickerLoading.value,"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`]),providerPickerLoading.value?(openBlock(),createElementBlock(`div`,_hoisted_30,[(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_31,[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:openProviderPicker},{default:withCtx(()=>[..._cache[63]||(_cache[63]=[createTextVNode(`Try again`,-1)])]),_:1})])):filteredProviders.value.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(filteredProviders.value,provider=>{return openBlock(),createBlock(VListItem,{key:provider.id,class:`vibe64-provider-picker__item`,disabled:Boolean(providerUnavailableReason(provider)),subtitle:providerUnavailableReason(provider)?`${provider.id} · ${providerUnavailableReason(provider)}`:`${provider.id} · ${provider.description}`,title:provider.label,onClick:$event=>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(()=>[providerUnavailableReason(provider)?(openBlock(),createElementBlock(`span`,_hoisted_32,` More setup needed `)):(openBlock(),createElementBlock(`span`,_hoisted_33,`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(providerSearch.value.trim()?`No providers match “${providerSearch.value.trim()}”`:`Every OpenCode provider is already connected`),1),createBaseVNode(`span`,_hoisted_34,toDisplayString(providerSearch.value.trim()?`Try a provider name or its OpenCode ID.`:`Manage an existing connection, or remove one before adding it again.`),1)]),_:1}))]),_:1})]),_:1},8,[`rounded`])]),_:1},8,[`modelValue`,`fullscreen`]),createVNode(VDialog,{modelValue:nativeSetupOpen.value,"onUpdate:modelValue":_cache[22]||(_cache[22]=$event=>nativeSetupOpen.value=$event),persistent:codexProviderSaving.value,activator:nativeSetupActivator.value,"open-on-click":false,fullscreen:unref(smAndDown),"max-width":`42rem`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[createVNode(VCardText,{class:`vibe64-codex-setup__body`},{default:withCtx(()=>[nativeRoutingReady.value?(openBlock(),createBlock(ModelRoutingForm_default,{key:0,"engine-id":nativeSetupProviderId.value,"connection-id":nativeSetupProviderId.value===`codex`?`openai`:`anthropic`,"connection-label":nativeSetupProviderId.value===`codex`?`Codex login`:`Claude login`,"setup-error":nativeRoutingSetupError.value,onBusy:_cache[14]||(_cache[14]=$event=>codexProviderSaving.value=$event),onClose:_cache[15]||(_cache[15]=$event=>nativeSetupOpen.value=false),onSaved:_cache[16]||(_cache[16]=$event=>{nativeSetupOpen.value=false;emit(`changed`)})},null,8,[`engine-id`,`connection-id`,`connection-label`,`setup-error`])):(openBlock(),createBlock(NativeProviderConnections_default,{key:1,modelValue:nativeModelProviderId.value,"onUpdate:modelValue":_cache[17]||(_cache[17]=$event=>nativeModelProviderId.value=$event),"engine-id":nativeSetupProviderId.value,"select-provider":false,adding:nativeSetupOrigin.value===`add`,"show-back":nativeSetupOrigin.value===`add`,"actions-enabled":__props.isOwner,"show-close":``,onBusy:_cache[18]||(_cache[18]=$event=>codexProviderSaving.value=$event),onClose:_cache[19]||(_cache[19]=$event=>nativeSetupOpen.value=false),onBack:backFromNativeSetup,onChanged:_cache[20]||(_cache[20]=$event=>{unref(codexProviders).resource.reload();emit(`changed`)})},null,8,[`modelValue`,`engine-id`,`adding`,`show-back`,`actions-enabled`])),!nativeRoutingReady.value&&[`openai`,`anthropic`].includes(nativeModelProviderId.value)?(openBlock(),createBlock(ProviderAccountsSetup_default,{key:2,accounts:unref(nativeAccounts),"actions-enabled":__props.isOwner,"actions-disabled-message":`Only the Vibe64 owner can manage this connection.`,"account-rows":nativeSetupRows.value,"back-label":nativeSetupOrigin.value===`add`?`Back`:``,"needed-label":`Not connected`,"ready-label":`Connected`,"show-continue":false,"status-loaded":aiStatusLoaded.value,title:nativeSetupDetails.value.label,onBack:backFromNativeSetup,onConnected:nativeConnected},{close:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close ${nativeSetupDetails.value.label} setup`,type:`button`,variant:`text`,onClick:_cache[21]||(_cache[21]=$event=>nativeSetupOpen.value=false)},null,8,[`icon`,`aria-label`])]),_:1},8,[`accounts`,`actions-enabled`,`account-rows`,`back-label`,`status-loaded`,`title`])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`rounded`])]),_:1},8,[`modelValue`,`persistent`,`activator`,`fullscreen`]),createVNode(VDialog,{"model-value":editorOpen.value,activator:editorActivator.value,"open-on-click":false,fullscreen:unref(smAndDown),"max-width":`40rem`,persistent:editorSaving.value||routingSaving.value,"onUpdate:modelValue":_cache[27]||(_cache[27]=open=>{if(!open&&!routingSaving.value)editorRoutingPending.value?finishConnectionRouting():closeEditor()})},{default:withCtx(()=>[createVNode(VCard,{rounded:unref(smAndDown)?0:`xl`},{default:withCtx(()=>[!editorRoutingPending.value?(openBlock(),createBlock(VCardTitle,{key:0,class:`vibe64-dialog-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`small`,_hoisted_35,toDisplayString(editorEyebrow.value),1),createBaseVNode(`strong`,null,toDisplayString(editorTitle.value),1)]),createVNode(VBtn,{icon:editorOrigin.value===`direct`?unref(mdiClose):unref(mdiArrowLeft),"aria-label":editorOrigin.value===`direct`?`Close provider setup`:`Back to AI choices`,disabled:editorSaving.value,type:`button`,variant:`text`,onClick:closeEditor},null,8,[`icon`,`aria-label`,`disabled`])]),_:1})):createCommentVNode(``,true),editorRoutingPending.value?(openBlock(),createBlock(VCardText,{key:1},{default:withCtx(()=>[createVNode(ModelRoutingForm_default,{"engine-id":`opencode`,"connection-id":editorProviderId.value,"connection-label":editorLabel.value,"setup-error":editorRoutingSetupError.value,onBusy:_cache[23]||(_cache[23]=$event=>routingSaving.value=$event),onClose:finishConnectionRouting,onSaved:finishConnectionRouting},null,8,[`connection-id`,`connection-label`,`setup-error`])]),_:1})):catalogPreparationError.value?(openBlock(),createBlock(VCardText,{key:2,class:`vibe64-provider-editor__body`},{default:withCtx(()=>[createVNode(VAlert,{border:`start`,text:catalogPreparationError.value,title:`Provider could not be confirmed`,type:`error`,variant:`tonal`},null,8,[`text`]),createBaseVNode(`div`,_hoisted_36,[createVNode(VBtn,{type:`button`,variant:`text`,onClick:closeEditor},{default:withCtx(()=>[createTextVNode(toDisplayString(editorBackLabel.value),1)]),_:1}),createVNode(VBtn,{color:`primary`,type:`button`,variant:`tonal`,onClick:retryPreparedProvider},{default:withCtx(()=>[..._cache[64]||(_cache[64]=[createTextVNode(`Try again`,-1)])]),_:1})])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VCardText,{"aria-busy":editorPreparing.value?`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(editorLabel.value),1),createBaseVNode(`small`,null,[createTextVNode(toDisplayString(editorProviderId.value),1),editorCatalogModelCount.value?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · `+toDisplayString(editorCatalogModelCount.value)+` models found`,1)],64)):createCommentVNode(``,true)])])]),_:1}),editorStarter.value?(openBlock(),createBlock(VBtn,{key:0,"append-icon":unref(mdiOpenInNew),block:``,color:`primary`,href:editorStarter.value.accountUrl,rel:`noopener noreferrer`,size:`large`,target:`_blank`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(editorStarter.value.accountAction),1)]),_:1},8,[`append-icon`,`href`])):createCommentVNode(``,true),editorPreparing.value?(openBlock(),createBlock(VSheet,{key:1,"aria-label":`Loading current provider details`,class:`vibe64-provider-editor__route`,rounded:`lg`},{default:withCtx(()=>[createVNode(VSkeletonLoader,{type:`heading, paragraph`})]),_:1})):editorConnectionPolicy.value?(openBlock(),createBlock(VSheet,{key:2,class:`vibe64-provider-editor__route`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(editorConnectionPolicy.value.routeLabel||editorConnectionPolicy.value.productLabel),1),createVNode(VChip,{color:editorConnectionPolicy.value.accessLabel===`Workspace use`?`primary`:`warning`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(editorConnectionPolicy.value.accessLabel),1)]),_:1},8,[`color`])]),createBaseVNode(`p`,null,toDisplayString(editorRouteExplanation.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VTextField,{modelValue:editorApiKey.value,"onUpdate:modelValue":[_cache[25]||(_cache[25]=$event=>editorApiKey.value=$event),_cache[26]||(_cache[26]=$event=>editorError.value=``)],autocomplete:`new-password`,disabled:editorSaving.value,"error-messages":editorError.value?[editorError.value]:[],hint:`Paste the key for this provider. It will not be shown again.`,label:`API key`,"persistent-hint":``,type:editorApiKeyVisible.value?`text`:`password`,variant:`outlined`},{"append-inner":withCtx(()=>[createVNode(VBtn,{"aria-label":editorApiKeyVisible.value?`Hide API key`:`Show API key`,disabled:editorSaving.value,icon:editorApiKeyVisible.value?unref(mdiEyeOffOutline):unref(mdiEyeOutline),type:`button`,variant:`text`,onClick:_cache[24]||(_cache[24]=$event=>editorApiKeyVisible.value=!editorApiKeyVisible.value)},null,8,[`aria-label`,`disabled`,`icon`])]),_:1},8,[`modelValue`,`disabled`,`error-messages`,`type`]),createBaseVNode(`div`,_hoisted_37,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`18`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(editorVerificationCopy.value),1)]),!editorPreparing.value&&(!editorProviderRevision.value||!editorConnectionPolicy.value)?(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:editorSaving.value,type:`button`,variant:`text`,onClick:closeEditor},{default:withCtx(()=>[createTextVNode(toDisplayString(editorBackLabel.value),1)]),_:1},8,[`disabled`]),createVNode(VBtn,{"aria-busy":editorPreparing.value||editorSaving.value?`true`:void 0,color:`primary`,disabled:!editorCanSave.value,type:`button`,variant:`flat`,onClick:saveEditor},{default:withCtx(()=>[createTextVNode(toDisplayString(editorPreparing.value?`Loading provider details…`:__props.onboarding?`Verify key and start Vibe64`:`Verify and connect`),1)]),_:1},8,[`aria-busy`,`disabled`])]),_:1})],64))]),_:1},8,[`rounded`])]),_:1},8,[`model-value`,`activator`,`fullscreen`,`persistent`]),createVNode(VDialog,{modelValue:routingOpen.value,"onUpdate:modelValue":_cache[31]||(_cache[31]=$event=>routingOpen.value=$event),"max-width":`38rem`,fullscreen:unref(smAndDown),persistent:routingSaving.value,scrollable:``},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[routingOpen.value?(openBlock(),createBlock(ModelRoutingForm_default,{key:0,"engine-id":routingEngineId.value,readonly:!__props.isOwner,onBusy:_cache[28]||(_cache[28]=$event=>routingSaving.value=$event),onClose:_cache[29]||(_cache[29]=$event=>routingOpen.value=false),onSaved:_cache[30]||(_cache[30]=$event=>{routingOpen.value=false;emit(`changed`)})},null,8,[`engine-id`,`readonly`])):createCommentVNode(``,true)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`fullscreen`,`persistent`]),createVNode(VDialog,{modelValue:modelAccessConfirmOpen.value,"onUpdate:modelValue":_cache[33]||(_cache[33]=$event=>modelAccessConfirmOpen.value=$event),"max-width":`31rem`,persistent:``},{default:withCtx(()=>[createVNode(VCard,{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(modelAccessTarget.value?.modelAccess?.label||`Unlock provider models`)+`?`,1)]),_:1}),createVNode(VCardSubtitle,{class:`vibe64-ai-connections__confirm-subtitle`},{default:withCtx(()=>[..._cache[65]||(_cache[65]=[createTextVNode(` GLM-4.7 Flash stays available either way. `,-1)])]),_:1})]),_:1}),createVNode(VCardText,{class:`text-body-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(modelAccessTarget.value?.modelAccess?.warning||`These models may consume paid provider credit.`),1)]),_:1}),createVNode(VCardActions,{class:`vibe64-ai-connections__confirm-actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:modelAccessRunning.value,type:`button`,variant:`text`,onClick:_cache[32]||(_cache[32]=$event=>{modelAccessConfirmOpen.value=false;modelAccessTarget.value=null})},{default:withCtx(()=>[..._cache[66]||(_cache[66]=[createTextVNode(` Keep free only `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`warning`,disabled:modelAccessRunning.value,type:`button`,variant:`flat`,onClick:confirmModelAccessUnlock},{default:withCtx(()=>[..._cache[67]||(_cache[67]=[createTextVNode(` Unlock paid models `,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:removeOpen.value,"onUpdate:modelValue":_cache[35]||(_cache[35]=$event=>removeOpen.value=$event),"max-width":`30rem`,persistent:``},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(removeTarget.value?.id===`opencode`?`Return to included Big Pickle`:`Remove AI connection`)+`? `,1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[removeTarget.value?.id===`opencode`?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` The saved Zen key will be removed and paid or key-only Zen models will stop. Included Big Pickle remains available. `)],64)):removeTarget.value?.kind===`codex-provider`?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(` Remove the `+toDisplayString(removeTarget.value.providerLabel)+` connection from `+toDisplayString(removeTarget.value.engineId===`claude`?`Claude Code`:`Codex`)+`? Turns using this key will stop. Conversations and files remain. `,1)],64)):(openBlock(),createElementBlock(Fragment,{key:2},[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:removeRunning.value,type:`button`,variant:`text`,onClick:_cache[34]||(_cache[34]=$event=>removeOpen.value=false)},{default:withCtx(()=>[..._cache[68]||(_cache[68]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{"aria-busy":removeRunning.value?`true`:void 0,color:`error`,disabled:removeRunning.value,type:`button`,variant:`flat`,onClick:confirmRemove},{default:withCtx(()=>[createTextVNode(toDisplayString(removeTarget.value?.id===`opencode`?`Use included Big Pickle`:`Remove AI`),1)]),_:1},8,[`aria-busy`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`border`,`class`])}}};var AiConnectionsSettings_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-77854f65`]]);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$1={__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 _sfc_main={__name:`AIAccountsSetup`,props:{actionsDisabledMessage:{default:``,type:String},actionsEnabled:{default:true,type:Boolean},accountsClient:{default:null,type:Object},providerId:{default:`codex`,type:String},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`],setup(__props,{emit:__emit}){const props=__props;const modelProviderId=ref(``);watch(()=>props.providerId,id=>{modelProviderId.value=id===`claude`?`anthropic`:`openai`},{immediate:true});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,[[`codex`,`claude`].includes(__props.providerId)?(openBlock(),createBlock(NativeProviderConnections_default,{key:0,"engine-id":__props.providerId,modelValue:modelProviderId.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>modelProviderId.value=$event),"actions-enabled":__props.actionsEnabled},null,8,[`engine-id`,`modelValue`,`actions-enabled`])):createCommentVNode(``,true),[`openai`,`anthropic`].includes(modelProviderId.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,lede:__props.lede,"needed-label":__props.neededLabel,"ready-label":__props.readyLabel,"show-continue":__props.showContinue,"status-loaded":statusLoaded.value,title:__props.title,onBack:_cache[1]||(_cache[1]=$event=>emit(`back`)),onContinue:_cache[2]||(_cache[2]=$event=>emit(`continue`))},null,8,[`accounts`,`actions-disabled-message`,`actions-enabled`,`account-rows`,`back-label`,`continue-label`,`lede`,`needed-label`,`ready-label`,`show-continue`,`status-loaded`,`title`])):createCommentVNode(``,true)],64)}}};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,AccountsSetup:()=>_sfc_main$1,AiConnectionsSettings:()=>AiConnectionsSettings_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,codexAuthSessionNeedsTerminalAttention:()=>codexAuthSessionNeedsTerminalAttention,useAccountAuthSessions:()=>useAccountAuthSessions,useAccountsSetup:()=>useAccountsSetup,useCodexProviderConnections:()=>useCodexProviderConnections,useModelRouting:()=>useModelRouting,useProviderAccountsSetup:()=>useProviderAccountsSetup,useVibe64Accounts:()=>useVibe64Accounts});export{ProviderAccountsSetup_default as a,ModelRoutingForm_default as c,VIBE64_CONNECTIONS_CHANGED_EVENT as d,VForm as f,useVibe64Accounts as i,useModelRouting as l,accountRowsForStatus as n,CODEX_RECONNECT_REQUIRED_CODE as o,AiConnectionsSettings_default as r,CODEX_RECONNECT_REQUIRED_MESSAGE as s,client_exports as t,VIBE64_ACCOUNTS_CHANGED_EVENT as u};
@@ -1 +0,0 @@
1
- .model-routing[data-v-1ddae204]{flex-direction:column;min-width:0;max-height:calc(100dvh - 96px);display:flex}.model-routing__body[data-v-1ddae204]{min-height:0;padding-top:4px;overflow-y:auto}.model-routing__role[data-v-1ddae204]{grid-template-columns:minmax(0,1fr) minmax(120px,.4fr);align-items:start;gap:12px;display:grid}.model-routing__role--compact[data-v-1ddae204]{grid-template-columns:minmax(0,1fr)}.model-routing__changes[data-v-1ddae204]{overflow-wrap:anywhere}.model-routing__group[data-v-1ddae204]{color:rgb(var(--v-theme-on-surface));background:rgba(var(--v-theme-on-surface), .04);font-weight:600}.model-routing__option--model[data-v-1ddae204]{padding-inline-start:32px}.model-routing__option-title[data-v-1ddae204]{white-space:normal;flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.model-routing__model-name[data-v-1ddae204]{overflow-wrap:anywhere;font-weight:500}.model-routing__option[data-v-1ddae204] .v-list-item-subtitle{opacity:.75;color:rgb(var(--v-theme-on-surface));margin-top:4px;line-height:1.4}.model-routing__selection[data-v-1ddae204]{flex-direction:column;min-width:0;padding-block:2px;display:flex}.model-routing__selection-detail[data-v-1ddae204]{opacity:.75}.model-routing__model[data-v-1ddae204] .v-autocomplete__selection{max-width:100%}.native-providers[data-v-e5b14c8f]{min-width:0}.accounts-setup[data-v-daf0b8e4]{gap:1.5rem;width:100%;display:grid}.accounts-setup__header[data-v-daf0b8e4],.accounts-setup__notice[data-v-daf0b8e4],.accounts-setup__items[data-v-daf0b8e4]{width:100%;min-width:0;max-width:68rem;margin-inline:auto}.accounts-setup__header[data-v-daf0b8e4],.accounts-setup__items[data-v-daf0b8e4]{gap:.75rem;display:grid}.accounts-setup__header-actions[data-v-daf0b8e4],.accounts-setup__actions[data-v-daf0b8e4]{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.accounts-setup__header[data-v-daf0b8e4]{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:.5rem}.accounts-setup__header>p[data-v-daf0b8e4]{grid-column:1/-1}.accounts-setup__identity-fields[data-v-daf0b8e4]{grid-template-columns:repeat(auto-fit,minmax(min(12rem,100%),1fr));gap:.5rem;width:100%;display:grid}.accounts-setup__api-key-form[data-v-daf0b8e4]{flex-basis:100%;align-items:start;gap:.75rem;max-width:42rem;display:grid}.accounts-setup__identity[data-v-daf0b8e4]{color:rgba(var(--v-theme-on-surface), .7);overflow-wrap:anywhere;margin-top:.25rem;font-weight:500}.accounts-setup__item[data-v-daf0b8e4]{gap:1.5rem;min-width:0;display:grid}.accounts-setup__item-main[data-v-daf0b8e4]{grid-template-columns:auto minmax(0,1fr);align-items:start;gap:.75rem;display:grid}.accounts-setup__session[data-v-daf0b8e4],.accounts-setup__instruction-copy[data-v-daf0b8e4]{gap:1rem;min-width:0;display:grid}.accounts-setup__steps[data-v-daf0b8e4]{align-items:center;gap:1rem;list-style:none;display:flex}.accounts-setup__steps li[data-v-daf0b8e4]{flex-shrink:0}.accounts-setup__steps .accounts-setup__step-divider[data-v-daf0b8e4]{flex:1}.accounts-setup__steps [aria-current=step][data-v-daf0b8e4]{color:rgb(var(--v-theme-primary))}.accounts-setup__code-block[data-v-daf0b8e4]{gap:.5rem;display:grid;container-type:inline-size}.accounts-setup__code-row[data-v-daf0b8e4]{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;display:grid}.accounts-setup__code[data-v-daf0b8e4]{white-space:nowrap;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;letter-spacing:.04em!important;font-size:clamp(1rem,7cqi,2rem)!important}.accounts-setup__copy-status[data-v-daf0b8e4]{min-height:1.25rem}.accounts-setup__settings-actions[data-v-daf0b8e4]{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.accounts-setup__settings-action[data-v-daf0b8e4]{max-width:100%}.accounts-setup__authorize-action[data-v-daf0b8e4]{width:100%}.accounts-setup__reference-image[data-v-daf0b8e4]{max-width:100%;height:auto;display:block}.accounts-setup__terminal[data-v-daf0b8e4]{min-width:0}.accounts-setup__pending-action[data-v-daf0b8e4]{min-inline-size:9rem}.vibe64-free-ai[data-v-83dda190]{gap:1.5rem;display:grid}.vibe64-free-ai__intro[data-v-83dda190]{align-items:center;gap:1rem;max-width:52rem;display:flex}.vibe64-free-ai__intro p[data-v-83dda190],.vibe64-free-ai__intro h2[data-v-83dda190],.vibe64-free-ai__body p[data-v-83dda190],.vibe64-free-ai__note[data-v-83dda190]{margin:0}.vibe64-free-ai__intro>div[data-v-83dda190]{gap:.25rem;display:grid}.vibe64-free-ai__card[data-v-83dda190],.vibe64-free-ai__skeleton[data-v-83dda190]{min-height:22rem}.vibe64-free-ai__card[data-v-83dda190]{flex-direction:column;display:flex}.vibe64-free-ai__card-header[data-v-83dda190]{grid-template-columns:3.5rem minmax(0,1fr) auto;align-items:center;gap:.75rem;display:grid}.vibe64-free-ai__identity[data-v-83dda190]{min-width:0}.vibe64-free-ai__summary[data-v-83dda190],.vibe64-free-ai__name[data-v-83dda190]{text-overflow:clip;white-space:normal;padding:0;overflow:visible}.vibe64-free-ai__badges[data-v-83dda190]{flex-direction:column;align-items:flex-end;gap:.35rem;display:flex}.vibe64-free-ai__body[data-v-83dda190]{flex:1;gap:1rem;display:grid}.vibe64-free-ai__facts[data-v-83dda190]{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.vibe64-free-ai__facts li[data-v-83dda190]{align-items:flex-start;gap:.625rem;display:flex}.vibe64-free-ai__facts .v-icon[data-v-83dda190]{flex:none;margin-top:.1rem}.vibe64-free-ai__actions[data-v-83dda190]{padding:0 1rem 1rem}.vibe64-free-ai__action[data-v-83dda190]{min-height:3rem}.vibe64-free-ai--compact .vibe64-free-ai__intro[data-v-83dda190]{align-items:flex-start}.vibe64-free-ai--compact .vibe64-free-ai__card[data-v-83dda190],.vibe64-free-ai--compact .vibe64-free-ai__skeleton[data-v-83dda190]{min-height:0}.vibe64-free-ai--compact .vibe64-free-ai__card-header[data-v-83dda190]{grid-template-columns:3.5rem minmax(0,1fr)}.vibe64-free-ai--compact .vibe64-free-ai__badges[data-v-83dda190]{flex-flow:wrap;grid-column:1/-1;align-items:center}.vibe64-ai-connections[data-v-77854f65]{gap:1.5rem;padding:clamp(1rem,3vw,1.5rem);display:grid}.vibe64-ai-connections--onboarding[data-v-77854f65]{background:0 0}.vibe64-ai-connections__page-actions[data-v-77854f65],.vibe64-ai-connections__identity[data-v-77854f65],.vibe64-ai-connections__status[data-v-77854f65],.vibe64-ai-connections__row-actions[data-v-77854f65],.vibe64-ai-connections__model-access[data-v-77854f65],.vibe64-ai-connections__model-access-copy[data-v-77854f65],.vibe64-ai-connections__zen-actions[data-v-77854f65],.vibe64-ai-connections__recommendation-actions[data-v-77854f65],.vibe64-ai-connections__recommendation-actions>span[data-v-77854f65],.vibe64-ai-connections__security-note[data-v-77854f65],.vibe64-dialog-title[data-v-77854f65],.vibe64-provider-editor__provider[data-v-77854f65],.vibe64-provider-editor__route>span[data-v-77854f65],.vibe64-provider-editor__security[data-v-77854f65],.vibe64-provider-editor__recovery[data-v-77854f65]{display:flex}.vibe64-add-ai__body>p[data-v-77854f65],.vibe64-ai-connections__recommendation-body>p[data-v-77854f65],.vibe64-provider-editor__route p[data-v-77854f65]{margin:0}.vibe64-dialog-eyebrow[data-v-77854f65]{color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));letter-spacing:.08em;text-transform:uppercase;font-size:.75rem;font-weight:700}.vibe64-ai-connections__page-actions[data-v-77854f65],.vibe64-ai-connections__status[data-v-77854f65],.vibe64-ai-connections__row-actions[data-v-77854f65]{flex-wrap:wrap;align-items:center;gap:.5rem}.vibe64-ai-connections__page-actions[data-v-77854f65]{justify-content:flex-end}.vibe64-ai-connections__recommendation-body[data-v-77854f65]{gap:.75rem;min-width:0;display:grid}.vibe64-ai-connections__recommendation[data-v-77854f65]{background:rgb(var(--v-theme-surface-container-low));padding:1.25rem}.vibe64-ai-connections__recommendation-body>p[data-v-77854f65]{overflow-wrap:anywhere}.vibe64-ai-connections__recommendation-actions[data-v-77854f65],.vibe64-ai-connections__recommendation-actions>span[data-v-77854f65]{flex-wrap:wrap;align-items:center;gap:.25rem .75rem}.vibe64-ai-connections__recommendation-plan-action[data-v-77854f65]{white-space:normal;max-width:100%;padding-inline:0}.vibe64-ai-connections__list[data-v-77854f65],.vibe64-ai-connections__load-error[data-v-77854f65],.vibe64-ai-connections__accounts[data-v-77854f65],.vibe64-ai-connections__zen-access[data-v-77854f65],.vibe64-ai-connections__zen-progress[data-v-77854f65],.vibe64-provider-picker__body[data-v-77854f65],.vibe64-provider-picker__empty[data-v-77854f65],.vibe64-provider-picker__recovery[data-v-77854f65],.vibe64-provider-editor__body[data-v-77854f65],.vibe64-provider-editor__provider>span[data-v-77854f65]:last-child{display:grid}.vibe64-ai-connections__list[data-v-77854f65],.vibe64-ai-connections__load-error[data-v-77854f65],.vibe64-ai-connections__accounts[data-v-77854f65],.vibe64-provider-picker__body[data-v-77854f65],.vibe64-provider-picker__empty[data-v-77854f65],.vibe64-provider-picker__recovery[data-v-77854f65],.vibe64-provider-editor__body[data-v-77854f65]{gap:1rem}.vibe64-ai-connections__account-list[data-v-77854f65]{overflow:hidden}.vibe64-ai-connections__group-title[data-v-77854f65]{padding:1rem 1rem 0}.vibe64-ai-connections__row[data-v-77854f65]{grid-template-columns:minmax(15rem,1fr) auto auto;align-items:center;gap:1rem;min-height:5.75rem;padding:1rem;display:grid}.vibe64-ai-connections__row+.vibe64-ai-connections__row[data-v-77854f65]{border-top:1px solid rgba(var(--v-theme-outline), var(--v-border-opacity))}.vibe64-ai-connections__identity[data-v-77854f65]{align-items:center;gap:.75rem;min-width:0}.vibe64-ai-connections__status[data-v-77854f65],.vibe64-ai-connections__row-actions[data-v-77854f65]{justify-content:flex-end}.vibe64-ai-connections__identity>span[data-v-77854f65]:last-child{gap:.15rem;min-width:0;display:grid}.vibe64-ai-connections__identity strong[data-v-77854f65],.vibe64-ai-connections__identity small[data-v-77854f65]{overflow-wrap:anywhere}.vibe64-ai-connections__identity small[data-v-77854f65],.vibe64-ai-connections__model-access small[data-v-77854f65],.vibe64-ai-connections__zen-access small[data-v-77854f65],.vibe64-provider-editor__provider small[data-v-77854f65]{color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))}.vibe64-ai-connections__model-access[data-v-77854f65]{background:rgba(var(--v-theme-primary), .05);border:1px solid rgba(var(--v-theme-primary), .14);color:rgb(var(--v-theme-on-surface));flex-wrap:wrap;grid-column:1/-1;justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem}.vibe64-ai-connections__model-access--paid[data-v-77854f65]{background:rgba(var(--v-theme-warning), .1);border-color:rgba(var(--v-theme-warning), .2)}.vibe64-ai-connections__zen-access[data-v-77854f65]{background:rgba(var(--v-theme-primary), .05);border:1px solid rgba(var(--v-theme-primary), .14);color:rgb(var(--v-theme-on-surface));grid-column:1/-1;gap:.75rem;padding:.9rem 1rem}.vibe64-ai-connections__account-child[data-v-77854f65]{border-inline-start:.25rem solid rgba(var(--v-theme-primary), .55);margin-inline:3.5rem .5rem;position:relative}.vibe64-ai-connections__account-child[data-v-77854f65]:before{border-block-end:2px solid rgba(var(--v-theme-primary), .35);border-inline-start:2px solid rgba(var(--v-theme-primary), .35);content:"";border-end-start-radius:.5rem;block-size:2.25rem;inline-size:1.75rem;position:absolute;inset-block-start:-1rem;inset-inline-start:-2rem}.vibe64-ai-connections__account-child-label[data-v-77854f65]{color:rgb(var(--v-theme-primary));letter-spacing:.05em;text-transform:uppercase;flex:none;width:100%;font-size:.75rem;font-weight:700}.vibe64-ai-connections__zen-progress[data-v-77854f65]{gap:.35rem}.vibe64-ai-connections__zen-actions[data-v-77854f65]{flex-wrap:wrap;align-items:center;gap:.5rem;width:100%;min-width:0}.vibe64-ai-connections__model-access small[data-v-77854f65]{color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))}.vibe64-ai-connections__model-access-copy[data-v-77854f65]{flex:24rem;align-items:center;gap:.75rem;min-width:0}.vibe64-ai-connections__model-access-copy>span[data-v-77854f65]:last-child{gap:.15rem;min-width:0;display:grid}.vibe64-ai-connections__model-access .v-switch[data-v-77854f65]{flex:none}.vibe64-provider-editor__route>span[data-v-77854f65]{flex-wrap:wrap;align-items:center;gap:.5rem}.vibe64-ai-connections__security-note[data-v-77854f65]{color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))}.vibe64-ai-connections__security-note[data-v-77854f65],.vibe64-provider-editor__security[data-v-77854f65]{align-items:center;gap:.5rem;font-size:.8125rem}.vibe64-ai-connections__zero-state[data-v-77854f65]{padding-block:.25rem}.vibe64-dialog-title[data-v-77854f65]{justify-content:space-between;align-items:center;gap:1rem;padding:1.25rem 1.5rem .5rem}.vibe64-dialog-title>span[data-v-77854f65]{white-space:normal;gap:.15rem;min-width:0;display:grid}.vibe64-dialog-title strong[data-v-77854f65]{overflow-wrap:anywhere}.vibe64-dialog-title[data-v-77854f65]>:last-child{flex:none}.vibe64-add-ai__body[data-v-77854f65],.vibe64-provider-picker__body[data-v-77854f65],.vibe64-provider-editor__body[data-v-77854f65]{padding:1rem 1.5rem 1.5rem}.vibe64-add-ai__body[data-v-77854f65]{align-content:start;gap:1rem;display:grid}.vibe64-add-ai__choice[data-v-77854f65]{flex-direction:column;display:flex}.vibe64-add-ai__choice-copy[data-v-77854f65]{flex:1}.vibe64-add-ai__choice-actions[data-v-77854f65]{padding:0 1rem 1rem}.vibe64-add-ai__choice-action[data-v-77854f65]{min-height:3rem}.vibe64-codex-setup__body[data-v-77854f65]{padding:1.5rem}.vibe64-provider-picker__list[data-v-77854f65]{border-color:rgba(var(--v-theme-outline), var(--v-border-opacity));overflow:hidden}.vibe64-provider-picker__item[data-v-77854f65]{min-height:4.75rem}.vibe64-provider-picker__item+.vibe64-provider-picker__item[data-v-77854f65]{border-top:1px solid rgba(var(--v-theme-outline), var(--v-border-opacity))}.vibe64-provider-picker__empty[data-v-77854f65]{text-align:center;justify-items:center;padding:2.5rem 1.5rem}.vibe64-provider-picker__recovery .v-btn[data-v-77854f65]{justify-self:end}.vibe64-provider-editor__provider[data-v-77854f65]{background:rgba(var(--v-theme-primary), .06);border:1px solid rgba(var(--v-theme-outline), var(--v-border-opacity));align-items:center;gap:.75rem;padding:.85rem}.vibe64-provider-editor__provider>span[data-v-77854f65]:last-child{gap:.1rem}.vibe64-provider-editor__route[data-v-77854f65]{background:rgba(var(--v-theme-primary), .06);border:1px solid rgba(var(--v-theme-outline), var(--v-border-opacity));gap:.45rem;padding:.85rem;display:grid}.vibe64-provider-editor__route p[data-v-77854f65]{color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));font-size:.875rem;line-height:1.45}.vibe64-provider-editor__recovery[data-v-77854f65]{justify-content:flex-end;gap:.5rem}.vibe64-provider-editor__actions[data-v-77854f65]{justify-content:flex-end;gap:.5rem;padding:0 1.5rem 1.25rem}.vibe64-ai-connections__confirm-header[data-v-77854f65]{padding:1.25rem 1.25rem .5rem}.vibe64-ai-connections__confirm-actions[data-v-77854f65]{justify-content:flex-end;gap:.5rem;padding:.75rem 1.25rem 1.25rem}.vibe64-ai-connections__confirm-subtitle[data-v-77854f65]{text-overflow:initial;white-space:normal;overflow:visible}.vibe64-ai-connections--compact .vibe64-ai-connections__page-actions[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__row-actions[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-provider-editor__actions .v-btn[data-v-77854f65]{width:100%}.vibe64-ai-connections--compact .vibe64-ai-connections__recommendation-actions[data-v-77854f65]{flex-direction:column;align-items:stretch}.vibe64-ai-connections--compact .vibe64-ai-connections__recommendation-primary[data-v-77854f65]{width:100%}.vibe64-ai-connections--compact .vibe64-ai-connections__recommendation-actions>span[data-v-77854f65]{align-items:flex-start;display:grid}.vibe64-ai-connections--compact .vibe64-ai-connections__row[data-v-77854f65]{grid-template-columns:minmax(0,1fr);align-items:stretch}.vibe64-ai-connections--compact .vibe64-ai-connections__identity[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__status[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__row-actions[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__model-access[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__zen-access[data-v-77854f65]{grid-column:1}.vibe64-ai-connections--compact .vibe64-ai-connections__account-child[data-v-77854f65]{margin-inline:1rem 0}.vibe64-ai-connections--compact .vibe64-ai-connections__account-child[data-v-77854f65]:before{inline-size:.75rem;inset-inline-start:-1rem}.vibe64-ai-connections--compact .vibe64-ai-connections__status[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__row-actions[data-v-77854f65]{justify-content:flex-start}.vibe64-ai-connections--compact .vibe64-ai-connections__row-actions .v-btn[data-v-77854f65]{flex:auto}.vibe64-ai-connections--compact .vibe64-ai-connections__model-access[data-v-77854f65]{flex-flow:column;align-items:stretch}.vibe64-ai-connections--compact .vibe64-ai-connections__model-access-copy[data-v-77854f65]{flex:0 auto;width:100%}.vibe64-ai-connections--compact .vibe64-ai-connections__model-access .v-switch[data-v-77854f65]{width:100%}.vibe64-ai-connections--compact .vibe64-ai-connections__zen-actions .v-btn[data-v-77854f65]{width:100%;min-width:0}.vibe64-ai-connections--compact .vibe64-provider-editor__recovery .v-btn[data-v-77854f65]{width:100%}.vibe64-ai-connections--compact .vibe64-provider-editor__actions[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-provider-editor__recovery[data-v-77854f65],.vibe64-ai-connections--compact .vibe64-ai-connections__confirm-actions[data-v-77854f65]{flex-direction:column-reverse;align-items:stretch}.vibe64-ai-connections--compact .vibe64-ai-connections__confirm-actions .v-btn[data-v-77854f65]{width:100%}.vibe64-ai-connections--compact .vibe64-codex-setup__body[data-v-77854f65]{padding:4rem 1rem 1rem}@media (width<=600px){.vibe64-ai-connections__confirm-actions[data-v-77854f65]{flex-direction:column-reverse;align-items:stretch}.vibe64-ai-connections__confirm-actions .v-btn[data-v-77854f65]{width:100%}}