vibe64 0.1.52 → 0.1.53

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 (52) hide show
  1. package/bin/upgrade-state.js +975 -974
  2. package/dist/assets/{GithubBrowserTabs-D7DveB8M.js → GithubBrowserTabs-DG2nCSNW.js} +1 -1
  3. package/dist/assets/{Vibe64AuthSettingsButton-DDArM5uw.js → Vibe64AuthSettingsButton-9OLqOZao.js} +1 -1
  4. package/dist/assets/{Vibe64DashboardShell-Ab65VYSS.js → Vibe64DashboardShell-hWNziCur.js} +1 -1
  5. package/dist/assets/{Vibe64DatabaseWorkspace-DHLt5bST.js → Vibe64DatabaseWorkspace-TqXOZJpI.js} +1 -1
  6. package/dist/assets/{Vibe64FileArea-DCqpclYH.js → Vibe64FileArea-BljhpApn.js} +1 -1
  7. package/dist/assets/{Vibe64OutputControls-BPDF1XfG.js → Vibe64OutputControls-Dk_DWuFb.js} +1 -1
  8. package/dist/assets/{Vibe64RepositoryWorkspace-C107tX19.js → Vibe64RepositoryWorkspace-CDnsAlIz.js} +1 -1
  9. package/dist/assets/{Vibe64SessionFiles-BKJ1Qem_.js → Vibe64SessionFiles-DjeEvtpc.js} +1 -1
  10. package/dist/assets/{Vibe64UiStoryboardView-CJajdYSt.js → Vibe64UiStoryboardView-idZz86bx.js} +1 -1
  11. package/dist/assets/{_sessionId_-BaNhTTVN.js → _sessionId_-DLLJsju9.js} +1 -1
  12. package/dist/assets/{_slug_-D7mzZsk3.css → _slug_-BRPxP_Yn.css} +1 -1
  13. package/dist/assets/{_slug_-nHO3Bg-f.js → _slug_-JgF_FQ6F.js} +7 -7
  14. package/dist/assets/{app-DbGzTUVN.js → app-Cuw9E-ru.js} +1 -1
  15. package/dist/assets/{changes-D7NjgKWf.js → changes-CoR0-8EL.js} +1 -1
  16. package/dist/assets/{conversation-DV8qCsqw.js → conversation-B1UoWMaA.js} +1 -1
  17. package/dist/assets/{dashboard-DL95BPsz.js → dashboard-DnuIxR1s.js} +1 -1
  18. package/dist/assets/{english-definitions-ChTTs3cC.js → english-definitions-By4b_Yl2.js} +1 -1
  19. package/dist/assets/{env-BdJvhqF-.js → env-KUPen-sS.js} +1 -1
  20. package/dist/assets/{history-DmGNxMVh.js → history-S_cJLehJ.js} +1 -1
  21. package/dist/assets/{index-BXZp5ztx.js → index-CNkd6O5t.js} +3 -3
  22. package/dist/assets/{integrations-DAYe7RkJ.js → integrations-Dmbbbs_A.js} +1 -1
  23. package/dist/assets/{issues-D_zOo2IW.js → issues-EeBajY3I.js} +1 -1
  24. package/dist/assets/{learning-ilyEoffw.js → learning-DDRM-FoP.js} +1 -1
  25. package/dist/assets/{project-files-CJWdFXh4.js → project-files-CQ1BLaaP.js} +1 -1
  26. package/dist/assets/{publish-D728amkk.js → publish-bvwc-KoQ.js} +1 -1
  27. package/dist/assets/{pull-requests-BsbM-5MA.js → pull-requests-Ce1ECyuL.js} +1 -1
  28. package/dist/assets/{repository-C8NwO4bj.js → repository-CK3osHmp.js} +1 -1
  29. package/dist/assets/{settings-DTLY7ZT5.js → settings-PQGw4vfn.js} +1 -1
  30. package/dist/assets/{useArchivedVibe64Sessions-Cc9GdKlD.js → useArchivedVibe64Sessions-BAQjW01a.js} +1 -1
  31. package/dist/assets/{useAssistantAttachments-DJKqt1hL.js → useAssistantAttachments-DJWb1KdF.js} +1 -1
  32. package/dist/assets/{useVibe64ConversationLog-Co0DhC3R.js → useVibe64ConversationLog-CjUZuvV7.js} +1 -1
  33. package/dist/assets/{useVibe64SessionData-D7fBm9xf.js → useVibe64SessionData-CbY_B5mC.js} +1 -1
  34. package/dist/assets/{vibe64SessionFocus-8fHAeoyU.js → vibe64SessionFocus-Bd3JuuZe.js} +1 -1
  35. package/dist/index.html +4 -4
  36. package/docs/colleague-usage/conversation-context.md +3 -1
  37. package/docs/colleague-usage/temporary-chats.md +26 -1
  38. package/docs/colleague-usage/workspace-preparation.md +17 -0
  39. package/node_modules/@jskit-ai/assistant-core/locales/en.json +1 -0
  40. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  41. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  42. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  43. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  44. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  45. package/node_modules/@jskit-ai/connectors-core/locales/en.json +1 -0
  46. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  47. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +43 -43
  48. package/node_modules/@local/vibe64-genesis/src/server/index.js +189 -182
  49. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +68 -61
  50. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +532 -532
  51. package/package.json +7 -7
  52. package/server.bundle.mjs +28835 -28791
@@ -1,11 +1,11 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BXZp5ztx.js","assets/VChip-BRhZ1px1.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/VChip-C9-RJ9kL.css","assets/error-CqUuwdsr.js","assets/normalize-Cecw_kDB.js","assets/useEndpointResource-BaT7yEQ5.js","assets/httpClient-Dj5wBWSr.js","assets/returnToPath-Bo_EqKki.js","assets/vibe64ProjectScope.local-BbrorE15.js","assets/errorMessageHelpers-KoewcxJa.js","assets/useRealtimeEvent-DbrYLgvU.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/linkPath-CKec_fF-.js","assets/preload-helper-BvdcsxN9.js","assets/VSelect-CFmsjLP4.js","assets/VOverlay-9ll66gE0.js","assets/lazy-Cwu1R3nk.js","assets/VOverlay-DG-PukqI.css","assets/VMenu-BaCC4Of9.js","assets/VTextField-Dmm1M-tz.js","assets/VTextField-F6unyhrS.css","assets/VDivider-DY2s_j83.js","assets/VDivider-DvkP_iX7.css","assets/VMenu-D_W8zRGm.css","assets/VCheckboxBtn-CbJIEQdu.js","assets/VCheckboxBtn-DCyuVH7W.css","assets/VSheet-C1Vro_q8.js","assets/VSheet-BbLSwuzR.css","assets/VSelect-y7fezdfU.css","assets/layout-BQWbsRzI.js","assets/vibe64AssistantHost-CP6oxv5b.js","assets/surface-Mq3WFjki.js","assets/studioUrls-BcpEogWH.js","assets/errors-4Oktlo2s.js","assets/client-DCzQQhFB.js","assets/asyncModuleRecovery-BzjXulBW.js","assets/mdi-DwGK7nOu.js","assets/VBtn-B6ryRXW-.js","assets/VBtn-uSpaN2Ha.css","assets/VAlert-CBpSKTfy.js","assets/VAlert-DVXMoK42.css","assets/VAutocomplete-WEsn78My.js","assets/VAutocomplete-D48FgPMA.css","assets/VCheckbox-Bybg_FNE.js","assets/VCheckbox-ChRKi1kj.css","assets/VDialog-CYfdjZRu.js","assets/VDialog-DP-kc9Gx.css","assets/VCard-BzaViLPx.js","assets/VCard-dv-Dc592.css","assets/VRow-B1RzhBIx.js","assets/VRow-DIr3-SqU.css","assets/VSpacer-B5ip6FSG.js","assets/VSpacer-DfbUir7X.css","assets/VExpansionPanels-vKIuai-q.js","assets/VExpansionPanels-cvCWEkWz.css","assets/client-CBSWtYl4.js","assets/VRadioGroup-C021gapy.js","assets/VRadioGroup-C9f4tbih.css","assets/VSkeletonLoader-DFBUIKJZ.js","assets/VSkeletonLoader-LCPSxykp.css","assets/VSwitch-fUpmdN4R.js","assets/VSwitch-FGoTnWb6.css","assets/_plugin-vue_export-helper-DNW4j-dv.js","assets/shared-MIKdzAzL.js","assets/assistantRouting-CX0aG7dC.js","assets/useCommand-DGM7l3ja.js","assets/placement-CWSo4Kid.js","assets/usePaths-DaWJ_Tvi.js","assets/pathname-Bb895US8.js","assets/useUiFeedback-CZj76aLa.js","assets/shared-CEFaGI9L.js","assets/vibe64ApiResponses-B4VY77Q_.js","assets/useVibe64Terminal-B8qevIXQ.js","assets/StudioErrorNotice-Bo6gBu5l.js","assets/StudioErrorNotice-1K8E_MXD.css","assets/browserLocalStorage-B4C7rHrs.js","assets/clipboard-CZs9aH3L.js","assets/useVibe64Terminal-Cw13QF0R.css","assets/studioGateApi-1C9rkDqt.js","assets/client-DZaytu6o.css","assets/VSnackbar-B38PV3iX.js","assets/VSnackbar-BjpINqLT.css","assets/VTextarea-CFF7cmcU.js","assets/VTextarea-DDl63AeD.css","assets/useAssistantAttachments-DJKqt1hL.js","assets/conversation-DV8qCsqw.js","assets/conversation-T8Yax4Gz.js","assets/conversation-fz3qfk_X.css","assets/useVibe64ProjectScope-C4-hpbwc.js","assets/vibe64BrowserTabOrigin-D6Mxx-QS.js","assets/vibe64SessionRequestConfig-DvrfyP8A.js","assets/useVibe64DatabaseTools-BWZjnV6r.js","assets/useVibe64SystemGraph-BdvumnPL.js","assets/index-FHlApQ90.css","assets/Vibe64OutputControls-BPDF1XfG.js","assets/Vibe64SessionFiles-BKJ1Qem_.js","assets/Vibe64FileArea-DCqpclYH.js","assets/vibe64AttachmentDownload-Cngh16Hf.js","assets/Vibe64FileArea-_K7HHx8W.css","assets/dist-CDa9Iec1.js","assets/vibe64SessionViewModel-B0cCumM8.js","assets/vibe64SessionDebugLog-D6ibBX8L.js","assets/libesm-CR-iGldz.js","assets/Vibe64SessionFiles-Z4UgqKSG.css","assets/Vibe64TemporaryAiFixAction-DT62W459.js","assets/Vibe64TemporaryAiFixAction-D_mq1dFE.css","assets/Vibe64OutputControls-CK2T32OB.css"])))=>i.map(i=>d[i]);
2
- import{_ as VProgressLinear,_r as __exportAll,a as VAvatar,cr as Transition,fr as vShow,ht as useDisplay,mr as withModifiers,o as VBadge,pr as withKeys,t as VChip,x as VIcon}from"./VChip-BRhZ1px1.js";import{$ as mergeModels,$n as normalizeProps,B as h,Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,H as hasInjectionContext,Ht as watch,J as inject,O as defineAsyncComponent,On as unref,Pt as useId,T as createStaticVNode,Ut as watchEffect,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,fn as markRaw,g as computed,gn as reactive,gt as provide,hn as proxyRefs,it as onBeforeUnmount,k as defineComponent,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,un as isRef,v as createBlock,vn as ref,w as createSlots,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{r as useShellWebErrorRuntime}from"./error-CqUuwdsr.js";import{U as useQueryClient,t as useEndpointResource}from"./useEndpointResource-BaT7yEQ5.js";import{_ as useRouter,c as isNavigationFailure,g as useRoute,t as NavigationFailureType}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{f as normalizeText$1}from"./normalize-Cecw_kDB.js";import{r as getHttpWebClient}from"./httpClient-Dj5wBWSr.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VSelect}from"./VSelect-CFmsjLP4.js";import{c as VListItemTitle,n as VList,s as VListItem,t as VMenu}from"./VMenu-BaCC4Of9.js";import{t as VTextField}from"./VTextField-Dmm1M-tz.js";import{c as VIBE64_COLLEAGUE_PLAN_KEY,d as VIBE64_HOST_CONVERSATION_KEY,l as VIBE64_COLLEAGUE_PREVIEW_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY,s as VIBE64_COLLEAGUE_LAYOUT_KEY,t as VIBE64_ASSISTANT_HOST_KEY,u as VIBE64_COLLEAGUE_VIEW_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{a as projectSlugFromPathname,c as vibe64ProjectScopedStorageKey,i as projectListPath,n as normalizeProjectRoutePath,o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BbrorE15.js";import{i as studioApiPath,n as resolveWebSocketUrl,r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-BcpEogWH.js";import{s as ROUTE_VISIBILITY_PUBLIC}from"./errorMessageHelpers-KoewcxJa.js";import{a as isDynamicImportError,n as dynamicImportErrorMessage}from"./asyncModuleRecovery-BzjXulBW.js";import{A as mdiBookOpenPageVariantOutline,B as mdiCheckCircle,C as mdiArrowLeft,D as mdiArrowUp,Dt as mdiDotsVertical,E as mdiArrowTopRight,Et as mdiDotsHorizontalCircleOutline,Fr as mdiSourceBranchSync,G as mdiChevronRight,Hn as mdiMagnify,Hr as mdiStop,I as mdiCameraOutline,Ir as mdiSourceCommit,It as mdiFileDocumentEditOutline,J as mdiCircleOutline,K as mdiChevronUp,Ln as mdiLinkVariantOff,Lt as mdiFileDocumentOutline,Mt as mdiEyePlusOutline,Nr as mdiSourceBranch,O as mdiAutoFix,Pr as mdiSourceBranchPlus,Q as mdiClose,Rr as mdiSourcePull,S as mdiArrowDown,Tr as mdiSend,U as mdiChevronDown,V as mdiCheckCircleOutline,Vr as mdiStarOutline,W as mdiChevronLeft,Wr as mdiSwapVertical,Y as mdiCircleSlice4,Z as mdiClockOutline,_ as mdiArchiveArrowDownOutline,ar as mdiPin,c as mdiAccountOutline,cn as mdiHistory,cr as mdiPlayCircleOutline,dt as mdiConsoleNetworkOutline,ei as mdiTuneVariant,f as mdiAlertCircleOutline,g as mdiApplicationOutline,gr as mdiRefresh,hn as mdiInformationOutline,ht as mdiContentSaveOutline,i as mdiAccountGroupOutline,ii as mdiViewDashboardOutline,ir as mdiPencilOutline,k as mdiAutorenew,l as mdiAccountStarOutline,lr as mdiPlus,mn as mdiIncognito,mt as mdiContentSaveAlertOutline,ni as mdiUndoVariant,nr as mdiPause,or as mdiPinOutline,ot as mdiCogOutline,pi as mdiWrenchOutline,q as mdiCircle,rn as mdiGithub,sn as mdiHelpCircleOutline,sr as mdiPlay,tr as mdiPaperclip,tt as mdiCloudDownloadOutline,vr as mdiRestart,wr as mdiSchoolOutline,x as mdiArchiveOutline,y as mdiArchiveCheckOutline,yr as mdiRestore,z as mdiCheck,zr as mdiSourceRepository}from"./mdi-DwGK7nOu.js";import{r as VProgressCircular,t as VBtn}from"./VBtn-B6ryRXW-.js";import{t as VAlert}from"./VAlert-CBpSKTfy.js";import{t as VCheckbox}from"./VCheckbox-Bybg_FNE.js";import{t as VDivider}from"./VDivider-DY2s_j83.js";import{t as VSheet}from"./VSheet-C1Vro_q8.js";import{t as VDialog}from"./VDialog-CYfdjZRu.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-BzaViLPx.js";import{t as VSpacer}from"./VSpacer-B5ip6FSG.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-vKIuai-q.js";import{S as VIBE64_ACCOUNTS_CHANGED_EVENT,T as VForm,_ as useVibe64Accounts,b as ModelRoutingForm_default,c as aiOnboardingNeeded,f as useLocalToolRows,m as Vibe64CopyCommand_default,o as aiOnboardingAvailable,p as ToolInstallRow_default,u as requestVibe64AiOnboarding,v as CODEX_RECONNECT_REQUIRED_CODE,w as VTooltip,x as useModelRouting,y as CODEX_RECONNECT_REQUIRED_MESSAGE}from"./client-CBSWtYl4.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-DFBUIKJZ.js";import{t as VSwitch}from"./VSwitch-fUpmdN4R.js";import{t as VTextarea}from"./VTextarea-CFF7cmcU.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{r as assistantAttachmentFilesFromPasteEvent}from"./useAssistantAttachments-DJKqt1hL.js";import{a as useAssistantQuestions,c as AssistantModelControl_default,d as AssistantGoalControl_default,f as AssistantComposerSupport_default,l as AssistantQuestionInputs_default,n as draftWithRestoredMessage,o as useAssistantSuggestions,r as unmatchedOptimisticMessages,s as AssistantConversationElement_default,v as LongTextPreviewBlocks_default,y as parseLongTextReviewBlocks}from"./conversation-DV8qCsqw.js";import"./conversation-T8Yax4Gz.js";import{n as useRealtimeEvent,r as useRealtimeSocket}from"./useRealtimeEvent-DbrYLgvU.js";import{t as usePaths}from"./usePaths-DaWJ_Tvi.js";import{c as VIBE64_AGENT_TASK_RESULT_SCHEMA,d as VIBE64_AGENT_PROVIDERS,f as VIBE64_DEFAULT_AGENT_PROVIDER_ID,h as normalizeVibe64AgentSettings,l as vibe64AssistantSelectionLabel,m as findVibe64AgentProvider,n as normalizedPromptHintSuggestion,o as normalizeVibe64ConversationAttachments,p as defaultVibe64AgentSettings,r as normalizedPromptHintSuggestions,s as VIBE64_ASSISTANT_ACCESS_ERROR_CODES,t as normalizedPromptHintDraft,u as vibe64ProviderPresentation}from"./shared-MIKdzAzL.js";import{_ as assistantRoutingStatusLabel,d as assistantRoutingAutomation,f as assistantRoutingFromMetadata,g as assistantRoutingStatusIsPending,h as assistantRoutingRequestForDisplay,m as assistantRoutingRequestCanBeReplaced,p as assistantRoutingOutcomeNotice,r as ASSISTANT_MODES,t as ASSISTANT_FIX_MODE,u as assistantModeLabel}from"./assistantRouting-CX0aG7dC.js";import{a as thinkingMessagePresentation,c as Vibe64ConversationStatus_default,d as _sfc_main$60,f as useAgentAttachments,i as Vibe64StarredFilesList_default,l as _sfc_main$58,m as sourceEditorLinkTarget,n as Vibe64SessionSourceEditor_default,o as usesCommentaryForThinking,p as useVibe64AttachmentCommands,r as Vibe64ConversationLog_default,s as conversationAttribution,t as Vibe64SessionFiles_default,u as _sfc_main$59}from"./Vibe64SessionFiles-BKJ1Qem_.js";import{t as useCommand}from"./useCommand-DGM7l3ja.js";import{t as useUiFeedback}from"./useUiFeedback-CZj76aLa.js";import"./shared-CEFaGI9L.js";import{i as vibe64ResourceResponseError,n as vibe64ApiResponseError,r as vibe64RequestAccepted,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-Bo6gBu5l.js";import{a as Vibe64Terminal_default,i as createWebSocketTerminalDriver,o as Vibe64TerminalSurface_default,r as useShellAsyncModuleRecoveryRuntime,s as terminalLastMeaningfulLine,t as useVibe64Terminal}from"./useVibe64Terminal-B8qevIXQ.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{A as projectSettingsQueryKey,C as VIBE64_PROJECT_CREATE_API_SUFFIX,S as VIBE64_PROJECT_CHANGED_EVENT,h as VIBE64_CONNECTIONS_CHANGED_EVENT,k as projectSelectionQueryKey,l as PROJECT_SELECTION_ENDPOINT,u as PROJECT_SETTINGS_ENDPOINT,w as VIBE64_PROJECT_SELECT_API_SUFFIX}from"./studioGateApi-1C9rkDqt.js";import{n as useVibe64ProjectSlug,t as provideVibe64OpenedProjectSlug}from"./useVibe64ProjectScope-C4-hpbwc.js";import{i as vibe64RealtimePayloadFromCurrentTab,n as vibe64BrowserTabOriginId,r as vibe64RealtimeOriginPayload,t as browserTabSessionStorage}from"./vibe64BrowserTabOrigin-D6Mxx-QS.js";import{B as vibe64SessionQueryKey,C as vibe64OutputRunPath,F as vibe64SessionEventMatchesScope,I as vibe64SessionPath,P as vibe64SessionCheckUpdatesPath,R as vibe64SessionPromptHintsCancelPath,_ as vibe64AgentTerminalPath,c as VIBE64_SESSION_SUMMARY_CHANGED_EVENT,et as vibe64SourceEditorStarsPath,f as agentTurnControlPayloadFromContext,g as vibe64AgentTerminalControlTextPath,l as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,nt as vibe64TemporaryConversationPath,o as VIBE64_SESSIONS_API_SUFFIX,rt as vibe64TemporaryConversationsPath,s as VIBE64_SESSION_CHANGED_EVENT,t as VIBE64_API_SUFFIX,z as vibe64SessionPromptHintsPath}from"./vibe64SessionRequestConfig-DvrfyP8A.js";import{A as readRefOrGetterValue,B as mainConversationId,C as Vibe64LearningMarkdown_default,D as useVibe64LearningCourses,E as courseProgress,F as useAssistantConversationFactory,H as temporaryConversationId,I as latestAssistantMessageAwaitingUserReply,L as createAssistantApi,M as requestVibe64AccountConnectionsDialog,N as useVibe64AssistantCatalog,O as useVibe64Learning,P as useAssistantConversation,R as VIBE64_TRAINING_LEARNER_CHANGED_EVENT,U as useVibe64Voice,V as mainConversationTarget,X as VTab,Y as VTabs,_t as projectSubtitle,at as usePageActivity,ct as VIBE64_LEARNING_MODE_NOTE,dt as checkNote,ft as lessonShownIn,g as useShellLayoutState,gt as projectDisplayName,ht as isPracticeProjectSlug,k as Vibe64SessionAssistantMenu_default,lt as VIBE64_LEARNING_MODE_PROJECT_CODE,mt as withoutLesson,o as Vibe64UsageRecordingIndicator_default,ot as revealCurrentStep,pt as reviewRunNote,st as STEP_STATUS_LABELS,tt as VBottomSheet,ut as VIBE64_LEARNING_ROUTES,vt as RouterView}from"./index-BXZp5ztx.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-DT62W459.js";import{a as vibe64SessionPullRequest,c as vibe64SessionStatusColor,i as vibe64SessionDisplayTitle,l as vibe64SessionStatusLabel,o as vibe64SessionRevision,s as vibe64SessionShortLabel,t as isArchivedVibe64Session}from"./vibe64SessionViewModel-B0cCumM8.js";import{i as vibe64SessionDebugSummary,n as vibe64SessionDebugError,r as vibe64SessionDebugLog,t as vibe64SessionDebugDurationMs}from"./vibe64SessionDebugLog-D6ibBX8L.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-DDArM5uw.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";import{i as githubProjectAvailable,o as invalidateGithubIssueQueries,s as invalidateGithubProjectQueries}from"./vibe64GithubProject-Bct-bzKq.js";import{n as Vibe64AssistantSessionDialog_default,r as Vibe64CreatePullRequestDialog_default,t as focusCreatedVibe64SessionTab}from"./vibe64SessionFocus-8fHAeoyU.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-B2RiXjBp.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-DcRTYHoG.js";import{n as normalizeRoutePath,r as routePathContainsSection,t as Vibe64DashboardShell_default}from"./Vibe64DashboardShell-Ab65VYSS.js";import{a as vibe64SessionToolGuideId,i as vibe64SessionToolDashboardSuffix,o as vibe64SessionToolIdFromDashboardPath,r as VIBE64_SESSION_TOOL_DEFINITIONS}from"./vibe64SessionToolDefinitions-DL5fOyzl.js";import{t as vibe64SessionInfoFacts}from"./vibe64SessionInfo-Cdoyt2T_.js";import{a as mountedSessionDetailRefreshReason,c as sessionRecordHasActiveAgentWork,d as sessionWithAgentTurnRealtimeOverlay,f as refetchEndpointResource,i as mountedSessionDetailLoadState,l as agentTurnRealtimeOverlayFromPayload,n as useVibe64SessionData,o as mountedSessionRealtimeShouldRefresh,r as latestSessionDetailRecord,s as mountedSessionRecord,u as latestAgentTurnRealtimeOverlay}from"./useVibe64SessionData-D7fBm9xf.js";import{n as enrichVibe64SessionForDisplay,t as blockingVibe64SessionPageError}from"./vibe64SessionPanelModel-DoorGDCG.js";import{n as useVibe64ConversationLog}from"./useVibe64ConversationLog-Co0DhC3R.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-CK0feE7T.js";import{i as repositoryStatusSessionId,n as repositoryStatusRealtimeNeedsCanonicalCheck,r as repositoryStatusRealtimeShouldRefresh,t as REPOSITORY_UPDATE_CHECK_FAILED_REASON}from"./vibe64RepositoryRealtime-CHT4-6VN.js";var VIBE64_SESSION_PRESENCE_CHANGED_EVENT=`vibe64.session.presence.changed`;var VIBE64_SESSION_PRESENCE_DEBOUNCE_MS=5e3;var VIBE64_SESSION_PRESENCE_IDLE_MS=1e4;var VIBE64_RESOURCE_RECOVERY_KEY=Symbol(`vibe64-resource-recovery`);var VIBE64_SESSIONS_ENDPOINT=`${studioApiPath(`vibe64`)}/sessions`;function appendQueryParam(url=``,key=``,value=``){const normalizedValue=String(value||``).trim();if(!normalizedValue)return url;return`${url}${String(url||``).includes(`?`)?`&`:`?`}${encodeURIComponent(key)}=${encodeURIComponent(normalizedValue)}`}function vibe64AgentTerminalWebSocketUrl(sessionId,terminalSessionId){const endpoint=appendQueryParam(`${vibe64AgentTerminalPath(VIBE64_SESSIONS_ENDPOINT,sessionId,terminalSessionId)}/ws`,`originId`,vibe64BrowserTabOriginId());return resolveWebSocketUrl(endpoint)}function vibe64OutputTerminalWebSocketUrl(sessionId,terminalSessionId,sessionsEndpoint=VIBE64_SESSIONS_ENDPOINT){return resolveWebSocketUrl(`${vibe64OutputRunPath(sessionsEndpoint,sessionId,terminalSessionId)}/ws`)}function normalizedText$1(value=``){return String(value||``).trim()}function terminalErrorCode(source={}){if(!source||typeof source!==`object`)return``;return normalizedText$1(source.code||source.errors?.[0]?.code||source.cause?.code)}function terminalErrorText(source={}){if(!source||typeof source!==`object`)return normalizedText$1(source);return normalizedText$1(source.error||source.message||source.errors?.[0]?.message||source.cause?.message)}function terminalOwnerAccessDenied(source={}){const code=terminalErrorCode(source);if(code===`vibe64_terminal_owner_mismatch`||code===`vibe64_terminal_owner_required`)return true;const message=terminalErrorText(source).toLowerCase();return message.includes(`belongs to a different vibe64 user`)||message.includes(`restart it before using it again`)||message.includes(`recorded terminal ownership`)}function terminalSessionMissingError(message=``){return/terminal session not found/iu.test(String(message||``))}function vibe64TerminalErrorMessage(source={},fallback=`Terminal action failed.`){const code=terminalErrorCode(source);if(code===`vibe64_terminal_owner_mismatch`)return`This terminal belongs to a different Vibe64 user. Open a new terminal for your account.`;if(code===`vibe64_terminal_owner_required`)return`This terminal is from an older Vibe64 session. Restart it before using it again.`;if(code===`vibe64_github_required`||code===`vibe64_github_reconnect_required`||code===`vibe64_github_user_required`||code===`vibe64_user_required`)return terminalErrorText(source)||`Connect GitHub before using this terminal.`;if(code===`vibe64_github_confirmation_required`)return`This GitHub operation needs explicit confirmation before Codex can run it.`;return terminalErrorText(source)||fallback}var _hoisted_1$49={class:`vibe64-team-ai-gate__icon`};var _hoisted_2$41={class:`vibe64-team-ai-gate__text`};var _hoisted_3$36={class:`vibe64-team-ai-gate__ask`,"data-test":`team-ai-gate-ask`};var _hoisted_4$29={class:`vibe64-team-ai-gate__actions`};var _sfc_main$57={__name:`Vibe64TeamAiGate`,props:{checking:{type:Boolean,default:false},ownerName:{type:String,default:``},projectsPath:{type:String,default:``}},emits:[`check`],setup(__props){const props=__props;const owner=computed(()=>props.ownerName.trim()||`the workspace owner`);const ownerAtStart=computed(()=>props.ownerName.trim()||`The workspace owner`);return(_ctx,_cache)=>{return openBlock(),createBlock(VSheet,{class:`vibe64-team-ai-gate`,rounded:`lg`,border:``,role:`status`,"data-test":`team-ai-gate`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$49,[createVNode(VIcon,{icon:unref(mdiAccountGroupOutline),size:`28`},null,8,[`icon`])]),_cache[3]||(_cache[3]=createBaseVNode(`h2`,{class:`vibe64-team-ai-gate__title`},`Team AI isn't set up yet`,-1)),createBaseVNode(`p`,_hoisted_2$41,toDisplayString(ownerAtStart.value)+` needs to set up AI for team members before you can open projects here. `,1),createBaseVNode(`p`,_hoisted_3$36,` Ask `+toDisplayString(owner.value)+` to set up AI for team members. `,1),createBaseVNode(`div`,_hoisted_4$29,[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,loading:__props.checking,"data-test":`team-ai-gate-check`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`check`))},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`]),__props.projectsPath?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,"min-height":`48`,to:__props.projectsPath,"data-test":`team-ai-gate-projects`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Back to projects `,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true)])]),_:1})}}};var Vibe64TeamAiGate_default=_plugin_vue_export_helper_default(_sfc_main$57,[[`__scopeId`,`data-v-206f9f1c`]]);var cachedProjectSelections=new Map;var PRACTICE_PROJECT_DELETED_CODE=`vibe64_practice_project_deleted`;var TEAM_AI_REQUIRED_CODE=`vibe64_team_ai_required`;function useProjectSelectionGate(emit,{scopeSelectionToCurrentProject=false}={}){const creating=ref(false);const selectingSlug=ref(``);const newProjectName=ref(``);const projectSlug=useVibe64ProjectSlug();const selectionPath=computed(()=>projectSelectionGateEndpoint({projectSlug:projectSlug.value,scopeSelectionToCurrentProject}));const selectionResource=useEndpointResource({fallbackLoadError:`Projects could not load.`,path:selectionPath,queryKey:computed(()=>projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:projectSlug.value,scopeSelectionToCurrentProject,surfaceId:`app`})),refreshOnPull:true,requestRecoveryLabel:`Projects`,realtime:scopeSelectionToCurrentProject?{events:[VIBE64_PROJECT_CHANGED_EVENT,VIBE64_TRAINING_LEARNER_CHANGED_EVENT],matches:({event,payload}={})=>event!==`vibe64.training.learner.changed`||isPracticeNoticeForProject(payload,projectSlug.value)}:{event:VIBE64_PROJECT_CHANGED_EVENT}});if(scopeSelectionToCurrentProject)rereadSelectionWhenProjectDeleted();const projectSelectionView=proxyRefs({isInitialLoading:selectionResource.isInitialLoading,isLoading:selectionResource.isLoading,loadError:selectionResource.loadError,record:selectionResource.data,refresh:selectionResource.reload});const createProjectCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROJECT_CREATE_API_SUFFIX,buildCommandOptions:()=>({method:`POST`,path:PROJECT_SELECTION_ENDPOINT}),buildRawPayload:(_model,{context})=>({name:context.name||``}),fallbackRunError:`Project could not be created.`,messages:{error:`Project could not be created.`,success:`Project created.`},onRunSuccess:loadProjectSelection,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.projects.create`,surfaceId:`app`,writeMethod:`POST`});const selectProjectCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROJECT_SELECT_API_SUFFIX,buildCommandOptions:()=>({method:`POST`,path:`${PROJECT_SELECTION_ENDPOINT}/select`}),buildRawPayload:(_model,{context})=>({slug:context.slug||``}),fallbackRunError:`Project could not be selected.`,messages:{error:`Project could not be selected.`,success:`Project selected.`},onRunSuccess:loadProjectSelection,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.projects.select`,surfaceId:`app`,writeMethod:`POST`});const learning=useVibe64Learning();const learnMode=computed(()=>learning.learnMode===true);const learningModeBlocked=computed(()=>selectionResource.query?.error?.value?.code===VIBE64_LEARNING_MODE_PROJECT_CODE);const learningModeMessage=computed(()=>learningModeBlocked.value?String(selectionResource.query.error.value.message||``):``);const teamAiBlocked=computed(()=>selectionResource.query?.error?.value?.code===TEAM_AI_REQUIRED_CODE);const teamAiOwnerName=computed(()=>teamAiBlocked.value?String(selectionResource.query.error.value.details?.ownerName||``):``);const cachedProjectSelection=computed(()=>cachedProjectSelections.get(projectSlug.value)||null);const projectSelection=computed(()=>projectSelectionView.record||cachedProjectSelection.value||{});const projects=computed(()=>Array.isArray(projectSelection.value.projects)?projectSelection.value.projects:[]);const projectsRoot=computed(()=>String(projectSelection.value.projectsRoot||`~/vibe64`));const hasSelection=computed(()=>projectSelection.value.hasSelection===true);const teamAiOwnerPrompt=computed(()=>{const teamAi=projectSelection.value.teamAi;return teamAi?.available===true&&teamAi.memberCount>0&&teamAi.ready!==true});const selectionReady=computed(()=>Boolean(projectSelectionView.record||cachedProjectSelection.value));const selectionInitialLoading=computed(()=>Boolean(projectSelectionView.isInitialLoading&&!selectionReady.value));const busy=computed(()=>creating.value||Boolean(selectingSlug.value));const saveError=computed(()=>{if(createProjectCommand.messageType===`error`)return String(createProjectCommand.message||``);if(selectProjectCommand.messageType===`error`)return String(selectProjectCommand.message||``);return``});const errorMessage=computed(()=>String((learningModeBlocked.value||teamAiBlocked.value?``:projectSelectionView.loadError)||saveError.value||``));const practiceDeleted=computed(()=>scopeSelectionToCurrentProject&&selectionResource.query?.error?.value?.code===`vibe64_practice_project_deleted`);watch([projectSelection,errorMessage,practiceDeleted,learningModeBlocked,teamAiBlocked],([selection,error,deleted,blocked,teamBlocked])=>{if(blocked||teamBlocked)return;if(deleted){cachedProjectSelections.delete(projectSlug.value);emit(`deleted`);return}if(selection&&Object.keys(selection).length>0)cachedProjectSelections.set(projectSlug.value,selection);if(error){emit(`error`,error);return}if(selection?.hasSelection===true){emit(`ready`,selection);return}emit(`missing`,selection||{})},{immediate:true});return{busy,createProject,creating,errorMessage,hasSelection,learnMode,learningModeBlocked,learningModeMessage,toggleMode:()=>learning.toggleMode(),loadProjectSelection,newProjectName,practiceDeleted,projectSelection,projects,projectsRoot,selectProject,selectingSlug,selectionInitialLoading,selectionReady,teamAiBlocked,teamAiOwnerName,teamAiOwnerPrompt};function rereadSelectionWhenProjectDeleted(){const unsubscribe=useQueryClient().getQueryCache().subscribe(cacheEvent=>{if(cacheEvent.type!==`updated`||cacheEvent.action?.type!==`error`||cacheEvent.action.error?.code!==`vibe64_practice_project_deleted`||practiceDeleted.value)return;if(cacheEvent.query?.queryHash===selectionQueryHash())return;loadProjectSelection().catch(()=>{})});onScopeDispose(unsubscribe)}function selectionQueryHash(){return JSON.stringify(projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:projectSlug.value,scopeSelectionToCurrentProject,surfaceId:`app`}))}async function loadProjectSelection(){await projectSelectionView.refresh()}async function createProject(){const name=newProjectName.value.trim();if(!name)return;creating.value=true;try{const response=await createProjectCommand.run({name});newProjectName.value=``;return String(response?.currentProject?.slug||``).trim()}finally{creating.value=false}}async function selectProject(slug){selectingSlug.value=String(slug||``);try{return await selectProjectCommand.run({slug:selectingSlug.value})?selectingSlug.value:``}finally{selectingSlug.value=``}}}function isPracticeNoticeForProject(payload={},slug=``){return payload?.reason===`practice`&&isPracticeProjectSlug(slug)}function projectSelectionGateEndpoint({projectSlug=``,scopeSelectionToCurrentProject=false}={}){return scopeSelectionToCurrentProject?scopedDevelopmentApiUrl(PROJECT_SELECTION_ENDPOINT,projectSlug,{scopeGlobalPaths:true}):PROJECT_SELECTION_ENDPOINT}function projectSelectionGateQueryKey({ownershipFilter,projectSlug=``,scopeSelectionToCurrentProject=false,surfaceId}={}){const baseKey=projectSelectionQueryKey(surfaceId,ownershipFilter,projectSlug);return scopeSelectionToCurrentProject?[...baseKey,`route-selection`]:baseKey}var _hoisted_1$48={class:`project-selection-gate`};var _hoisted_2$40={class:`project-selection-gate__deleted-text`};var _hoisted_3$35={class:`project-selection-gate__header`};var _hoisted_4$28={class:`project-selection-gate__path`};var _hoisted_5$24={key:0,class:`project-selection-gate__learning-note`,role:`status`,"data-test":`learning-mode-picker-note`};var _hoisted_6$21={key:1,class:`project-selection-gate__team-ai`,role:`status`,"data-test":`team-ai-owner-prompt`};var _hoisted_7$18={key:2,class:`project-selection-gate__list`};var _hoisted_8$18={class:`project-selection-gate__project-name`};var _hoisted_9$14={class:`project-selection-gate__project-path`};var _sfc_main$56={__name:`ProjectSelectionGate`,props:{beforeRetry:{type:Function,default:null},runtimeReady:{type:Boolean,default:true},runtimeError:{type:String,default:``},forcePicker:{type:Boolean,default:false},navigateOnSelect:{type:Boolean,default:false},scopeSelectionToCurrentProject:{type:Boolean,default:false}},emits:[`missing`,`ready`,`error`,`deleted`,`retry-runtime`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const router=useRouter();if(props.scopeSelectionToCurrentProject)provideVibe64OpenedProjectSlug();const learning=useVibe64Learning();const recovering=ref(false);const recoveryError=ref(``);let disposed=false;onBeforeUnmount(()=>{disposed=true});const{busy,createProject,creating,errorMessage,hasSelection,learnMode,learningModeBlocked,learningModeMessage,toggleMode,loadProjectSelection,newProjectName,practiceDeleted,projectSelection,projects,projectsRoot,selectProject,selectingSlug,selectionInitialLoading,selectionReady,teamAiBlocked,teamAiOwnerName,teamAiOwnerPrompt}=useProjectSelectionGate(emit,{scopeSelectionToCurrentProject:props.scopeSelectionToCurrentProject});const learningModeNote=VIBE64_LEARNING_MODE_NOTE;const displayError=computed(()=>recoveryError.value||errorMessage.value||props.runtimeError);const selectedSlotVisible=computed(()=>hasSelection.value&&!props.forcePicker&&!practiceDeleted.value&&!teamAiBlocked.value);const pickerVisible=computed(()=>!practiceDeleted.value&&!learningModeBlocked.value&&!teamAiBlocked.value&&selectionReady.value&&(props.forcePicker||!hasSelection.value));const projectsPath=projectListPath();function openTeamAiSetup(){requestVibe64AccountConnectionsDialog({providerId:`ai`,section:`team`})}function openCourses(){return learning.openCourses()}async function retryProject(){if(recovering.value)return;recovering.value=true;recoveryError.value=``;try{await props.beforeRetry?.();if(disposed)return;await loadProjectSelection();if(!disposed&&!errorMessage.value&&!teamAiBlocked.value&&!props.runtimeReady)emit(`retry-runtime`)}catch(error){recoveryError.value=String(error?.message||`Project could not load. Try again.`)}finally{recovering.value=false}}async function handleSelectProject(slug=``){const selected=await selectProject(slug);if(props.navigateOnSelect&&selected)router.push(projectAppPath(selected))}async function handleCreateProject(){const selected=await createProject();if(props.navigateOnSelect&&selected)router.push(projectAppPath(selected))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$48,[unref(practiceDeleted)?(openBlock(),createBlock(VSheet,{key:0,class:`project-selection-gate__deleted`,rounded:`lg`,border:``,role:`status`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`h2`,{class:`project-selection-gate__title`},`This practice project is gone`,-1)),_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`project-selection-gate__deleted-text`},`It was archived or deleted. Its lesson is under Courses → Archived; start it again from Courses.`,-1)),createVNode(VBtn,{class:`project-selection-gate__deleted-learning`,color:`primary`,variant:`flat`,"min-height":`48`,onClick:openCourses},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Open Courses `,-1)])]),_:1})]),_:1})):unref(learningModeBlocked)?(openBlock(),createBlock(VSheet,{key:1,class:`project-selection-gate__deleted`,rounded:`lg`,border:``,role:`status`,"data-test":`learning-mode-project-note`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_2$40,toDisplayString(unref(learningModeMessage)),1),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`learning-mode-project-switch`,onClick:unref(toggleMode)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learnMode)?`Switch to Develop`:`Switch to Learn`),1)]),_:1},8,[`onClick`])]),_:1})):unref(teamAiBlocked)?(openBlock(),createBlock(Vibe64TeamAiGate_default,{key:2,checking:recovering.value,"owner-name":unref(teamAiOwnerName),"projects-path":unref(projectsPath),onCheck:retryProject},null,8,[`checking`,`owner-name`,`projects-path`])):displayError.value?(openBlock(),createBlock(StudioErrorNotice_default,{key:3,title:`Project could not load`,error:displayError.value,compact:``},{actions:withCtx(()=>[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,disabled:recovering.value,onClick:retryProject},{default:withCtx(()=>[createTextVNode(toDisplayString(recovering.value?`Checking project…`:`Try again`),1)]),_:1},8,[`disabled`])]),_:1},8,[`error`])):createCommentVNode(``,true),!unref(teamAiBlocked)&&!displayError.value&&(unref(selectionInitialLoading)||!__props.runtimeReady)?(openBlock(),createBlock(VSkeletonLoader,{key:4,"aria-label":`Loading project`,class:`project-selection-gate__loading`,type:`article`})):__props.runtimeReady&&selectedSlotVisible.value?renderSlot(_ctx.$slots,`default`,{projectSelection:unref(projectSelection),reload:unref(loadProjectSelection)},void 0,true,5):__props.runtimeReady&&pickerVisible.value?(openBlock(),createBlock(VSheet,{key:6,class:`project-selection-gate__picker`,rounded:`lg`,border:``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$35,[createBaseVNode(`div`,null,[_cache[4]||(_cache[4]=createBaseVNode(`p`,{class:`project-selection-gate__eyebrow`},`Project`,-1)),_cache[5]||(_cache[5]=createBaseVNode(`h2`,{class:`project-selection-gate__title`},`Choose a project`,-1)),createBaseVNode(`p`,_hoisted_4$28,toDisplayString(unref(projectsRoot)),1)])]),unref(learnMode)?(openBlock(),createElementBlock(`div`,_hoisted_5$24,[createBaseVNode(`span`,null,toDisplayString(unref(learningModeNote)),1),createVNode(VBtn,{variant:`tonal`,"min-height":`40`,"data-test":`learning-mode-picker-switch`,onClick:unref(toggleMode)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Switch to Develop `,-1)])]),_:1},8,[`onClick`])])):createCommentVNode(``,true),unref(teamAiOwnerPrompt)?(openBlock(),createElementBlock(`div`,_hoisted_6$21,[_cache[8]||(_cache[8]=createBaseVNode(`div`,{class:`project-selection-gate__team-ai-text`},[createBaseVNode(`strong`,null,`Team members can't open projects yet`),createBaseVNode(`span`,null,`Set up AI for team members so they can work here.`)],-1)),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`team-ai-owner-setup`,onClick:openTeamAiSetup},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Set up team AI `,-1)])]),_:1})])):createCommentVNode(``,true),unref(projects).length?(openBlock(),createElementBlock(`div`,_hoisted_7$18,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(projects),project=>{return openBlock(),createBlock(VBtn,{key:project.path,class:`project-selection-gate__project`,disabled:unref(busy),loading:unref(selectingSlug)===project.slug,variant:`tonal`,onClick:$event=>handleSelectProject(project.slug)},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$18,[createTextVNode(toDisplayString(project.slug)+` `,1),project.approvalsWaiting>0?(openBlock(),createBlock(VChip,{key:0,color:`warning`,size:`small`,variant:`tonal`,"data-test":`project-approvals-waiting`},{default:withCtx(()=>[createTextVNode(toDisplayString(project.approvalsWaiting)+` waiting `,1)]),_:2},1024)):createCommentVNode(``,true)]),createBaseVNode(`span`,_hoisted_9$14,toDisplayString(project.path),1)]),_:2},1032,[`disabled`,`loading`,`onClick`])}),128))])):createCommentVNode(``,true),!unref(learnMode)?(openBlock(),createBlock(VForm,{key:3,class:`project-selection-gate__create`,onSubmit:withModifiers(handleCreateProject,[`prevent`])},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(newProjectName),"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>isRef(newProjectName)?newProjectName.value=$event:null),autocomplete:`off`,density:`comfortable`,"hide-details":`auto`,label:`New project folder`,disabled:unref(busy)},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{color:`primary`,disabled:!unref(newProjectName).trim()||unref(busy),loading:unref(creating),type:`submit`,variant:`flat`},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Create project `,-1)])]),_:1},8,[`disabled`,`loading`])]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true)])}}};var ProjectSelectionGate_default=_plugin_vue_export_helper_default(_sfc_main$56,[[`__scopeId`,`data-v-5d1415da`]]);var _hoisted_1$47={key:1,class:`local-remotes__branch-name`};var _hoisted_2$39={class:`d-flex ga-3 align-start`};var _hoisted_3$34={class:`min-w-0`};var _hoisted_4$27={class:`text-body-large font-weight-medium ma-0`};var _hoisted_5$23={class:`d-flex ga-3 align-start`};var _hoisted_6$20={class:`local-remotes__status text-body-small mb-3`,role:`status`,"aria-live":`polite`};var _hoisted_7$17={class:`d-flex flex-column ga-1`};var _hoisted_8$17={class:`local-remotes__count ms-2`};var _hoisted_9$13={class:`local-remotes__count ms-2`};var _hoisted_10$12={class:`local-remotes__details text-body-medium`};var _hoisted_11$10={key:0,class:`text-body-medium text-error mt-3 local-remotes__message`};var _hoisted_12$9={key:1,class:`text-body-small text-medium-emphasis mt-3`};var _hoisted_13$7={key:0};var _hoisted_14$5={class:`local-remotes__message`};var _hoisted_15$5={key:0};var _hoisted_16$4={class:`local-remotes__url`};var _hoisted_17$4={key:0};var _hoisted_18$2={key:1};var _hoisted_19$2={key:2};var _sfc_main$55={__name:`Vibe64LocalRemoteControls`,props:{project:{type:Object,required:true}},setup(__props){const props=__props;const{xs}=useDisplay();const state=ref(null);const busy=ref(``);const error=ref(``);const installCommand=ref(``);const errorCode=ref(``);const stillMissing=ref(false);const isBusy=computed(()=>Boolean(busy.value));const detailsOpen=ref(false);const settingsOpen=ref(false);const settings=reactive({remote:``,branch:``,pushRemote:``,pushBranch:``});const settingsReview=ref(null);const pendingReview=ref(null);const branchAction=ref(``);const branchName=ref(``);const branchReview=ref(null);const feedback=useUiFeedback({source:`vibe64.repository.remote`});const endpoint=computed(()=>scopedDevelopmentApiUrl(studioApiPath(`vibe64/repository/remote`),props.project.slug));let generation=0;let timer;const remoteError=computed(()=>error.value||state.value?.error||``);const notRepository=computed(()=>!error.value&&state.value?.repository===false);const gitUnavailable=computed(()=>({vibe64_git_missing:{chip:`Git needed`,title:`Git isn't installed on this computer.`,hint:`Vibe64 uses Git to keep the history of your project. Install it, then check again.`},vibe64_git_too_old:{chip:`Update Git`,title:`This Git is too old for Vibe64.`,hint:`Vibe64 needs Git 2.28 or newer. Update it, then check again.`}})[errorCode.value]||null);const chipLabel=computed(()=>gitUnavailable.value?.chip||(notRepository.value?`No Git yet`:state.value?.branch||(state.value?`No branch`:`Repository`)));const syncStatus=computed(()=>{const current=state.value;if(gitUnavailable.value)return{label:gitUnavailable.value.chip,icon:mdiAlertCircleOutline,color:`warning`};if(remoteError.value)return{label:`Check failed`,icon:mdiAlertCircleOutline,color:`error`};if(notRepository.value)return{label:`No Git yet`,icon:mdiSourceRepository};if(!current)return{label:`Not checked`,icon:mdiHelpCircleOutline};if(!current.upstream&&!current.push)return{label:current.remotes.length?`Setup needed`:`Local only`,icon:mdiLinkVariantOff};const changes=[];if(current.incoming>0)changes.push(`${current.incoming} incoming`);if(current.outgoing>0)changes.push(`${current.outgoing} outgoing`);if(changes.length)return{label:changes.join(` · `),icon:mdiSwapVertical,color:`primary`};if(!current.upstream||!current.push)return{label:`Setup needed`,icon:mdiLinkVariantOff};if(current.incoming===null||current.outgoing===null)return{label:`Not checked`,icon:mdiHelpCircleOutline};return{label:`Up to date`,icon:mdiCheckCircleOutline,color:`success`}});function destination(target){return`${target.remote}/${target.branch}`}function snapshot(value){return JSON.parse(JSON.stringify(value))}async function request(body){const result=await getHttpWebClient().request(endpoint.value,{method:`POST`,body});if(result?.ok===false)throw vibe64ApiError(result,`The Git operation failed.`);return result}async function refresh(background=true){if(busy.value||settingsOpen.value||pendingReview.value||branchAction.value||document.hidden||props.project.repositoryMode!==`local_source`)return;const current=generation;busy.value=`fetch`;try{const result=await request({action:`fetch`,background});if(current!==generation)return;state.value=result;error.value=``;errorCode.value=``;installCommand.value=``}catch(cause){if(current===generation){error.value=cause.message;errorCode.value=String(cause.code||``);installCommand.value=String(cause.details?.installCommand||``);if(!background&&!gitUnavailable.value)feedback.error(cause,`Could not fetch remote changes.`)}}finally{if(current===generation)busy.value=``}}function review(action){detailsOpen.value=false;const current=state.value;pendingReview.value={action,review:snapshot(current.review),target:snapshot(action===`push`?current.push:current.upstream),count:current.outgoing,merge:action===`pull`&&current.incoming>0&&current.localAhead>0}}function openSettings(){detailsOpen.value=false;settingsReview.value=snapshot(state.value.review);const onlyRemote=state.value.remotes.length===1?state.value.remotes[0].name:``;Object.assign(settings,{remote:state.value.upstream?.remote||onlyRemote,branch:state.value.upstream?.branch||state.value.branch,pushRemote:state.value.push?.remote||onlyRemote,pushBranch:state.value.push?.branch||state.value.branch});settingsOpen.value=true}function openBranch(action){detailsOpen.value=false;branchReview.value=snapshot(state.value.review);branchName.value=``;branchAction.value=action}async function execute(body){if(busy.value)return;const current=generation;busy.value=body.action;try{const result=await request(body);if(current!==generation)return;state.value=result;settingsOpen.value=false;pendingReview.value=null;branchAction.value=``;error.value=``}catch(cause){if(current===generation)feedback.error(cause,`The Git operation could not finish.`)}finally{if(current===generation)busy.value=``}}async function startVersionControl(){await execute({action:`init`});if(state.value?.repository!==false&&!error.value)feedback.success(`Version control is on for this folder.`)}async function checkAgain(){stillMissing.value=false;await refresh(false);stillMissing.value=Boolean(gitUnavailable.value)}async function saveSettings(){await execute({action:`configure`,review:settingsReview.value,settings:{...settings}});if(!settingsOpen.value)await refresh(false)}function confirmOperation(){const pending=pendingReview.value;return execute({action:pending.action,review:pending.review,merge:pending.merge})}watch(endpoint,()=>{generation+=1;state.value=null;busy.value=``;error.value=``;pendingReview.value=null;settingsOpen.value=false;branchAction.value=``;detailsOpen.value=false;refresh()},{immediate:true});const onVisible=()=>{if(!document.hidden)refresh()};onMounted(()=>{timer=setInterval(onVisible,6e4);document.addEventListener(`visibilitychange`,onVisible);window.addEventListener(`focus`,onVisible)});onScopeDispose(()=>{generation+=1;clearInterval(timer);document.removeEventListener(`visibilitychange`,onVisible);window.removeEventListener(`focus`,onVisible)});return(_ctx,_cache)=>{return __props.project.repositoryMode===`local_source`?(openBlock(),createBlock(VSheet,{key:0,color:`transparent`,class:`local-remotes`,tag:`section`,"aria-label":`Local Git repository`},{default:withCtx(()=>[!state.value&&busy.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,"aria-label":`Loading Git remote status`,"aria-busy":`true`,type:`button`,width:unref(xs)?48:112,height:`32`},null,8,[`width`])):(openBlock(),createBlock(VMenu,{key:1,modelValue:detailsOpen.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>detailsOpen.value=$event),location:`bottom start`,"close-on-content-click":false,width:`360`,"max-width":`calc(100vw - 32px)`},{activator:withCtx(({props:menuProps})=>[createVNode(VBadge,{"model-value":!notRepository.value&&!gitUnavailable.value&&(Boolean(remoteError.value)||state.value?.incoming>0||state.value?.outgoing>0),content:remoteError.value?`!`:(state.value?.incoming||0)+(state.value?.outgoing||0),color:remoteError.value?`error`:`primary`,max:`99`,"offset-x":`5`,"offset-y":`5`},{default:withCtx(()=>[createVNode(VBtn,mergeProps(menuProps,{class:`local-remotes__branch`,variant:`tonal`,rounded:`lg`,height:`32`,icon:unref(xs),width:unref(xs)?48:void 0,"prepend-icon":unref(xs)?void 0:unref(mdiSourceBranch),"append-icon":unref(xs)?void 0:unref(mdiChevronDown),"aria-label":`Git details for ${state.value?.branch||`this repository`}. ${syncStatus.value.label}`,title:`${state.value?.branch||`Git details`} · ${syncStatus.value.label}`}),{default:withCtx(()=>[unref(xs)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiSourceBranch)},null,8,[`icon`])):(openBlock(),createElementBlock(`span`,_hoisted_1$47,toDisplayString(chipLabel.value),1))]),_:1},16,[`icon`,`width`,`prepend-icon`,`append-icon`,`aria-label`,`title`])]),_:2},1032,[`model-value`,`content`,`color`])]),default:withCtx(()=>[gitUnavailable.value?(openBlock(),createBlock(VSheet,{key:0,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[20]||(_cache[20]=createBaseVNode(`div`,{class:`text-label-large mb-3`},`Version control`,-1)),createBaseVNode(`div`,_hoisted_2$39,[createVNode(VAvatar,{color:`warning`,variant:`tonal`,size:`40`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourceRepository)},null,8,[`icon`])]),_:1}),createBaseVNode(`div`,_hoisted_3$34,[createBaseVNode(`p`,_hoisted_4$27,toDisplayString(gitUnavailable.value.title),1),createBaseVNode(`p`,{class:normalizeClass([`local-remotes__hint text-body-medium mt-1 mb-0`,stillMissing.value?`text-high-emphasis`:`text-medium-emphasis`]),"aria-live":`polite`},toDisplayString(stillMissing.value?`Still not found. Did the command finish without errors? Then check again.`:gitUnavailable.value.hint),3)])]),installCommand.value?(openBlock(),createBlock(Vibe64CopyCommand_default,{key:0,class:`mt-4`,command:installCommand.value,label:`Copy the install command`},null,8,[`command`])):createCommentVNode(``,true),createVNode(VBtn,{class:`mt-4`,block:``,color:`primary`,height:`48`,variant:`tonal`,loading:busy.value===`fetch`,disabled:isBusy.value,"prepend-icon":unref(mdiRefresh),onClick:checkAgain},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`,`disabled`,`prepend-icon`])]),_:1})):notRepository.value?(openBlock(),createBlock(VSheet,{key:1,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[23]||(_cache[23]=createBaseVNode(`div`,{class:`text-label-large mb-3`},`Version control`,-1)),createBaseVNode(`div`,_hoisted_5$23,[createVNode(VAvatar,{color:`primary`,variant:`tonal`,size:`40`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourceRepository)},null,8,[`icon`])]),_:1}),_cache[21]||(_cache[21]=createBaseVNode(`div`,{class:`min-w-0`},[createBaseVNode(`p`,{class:`text-body-large font-weight-medium ma-0`},`This folder isn't using Git yet.`),createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis mt-1 mb-0`},` Git keeps a history of every change, so sessions can save work and you can go back. `)],-1))]),createVNode(VBtn,{class:`mt-4`,block:``,color:`primary`,height:`48`,variant:`flat`,loading:busy.value===`init`,disabled:isBusy.value,"prepend-icon":unref(mdiSourceBranchPlus),onClick:startVersionControl},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Start version control here `,-1)])]),_:1},8,[`loading`,`disabled`,`prepend-icon`]),_cache[24]||(_cache[24]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis mt-2 mb-0`},`Nothing is uploaded. You can connect GitHub later.`,-1))]),_:1})):(openBlock(),createBlock(VSheet,{key:2,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[34]||(_cache[34]=createBaseVNode(`div`,{class:`text-label-large mb-2`},`Local repository`,-1)),createBaseVNode(`div`,_hoisted_6$20,[createVNode(VIcon,{icon:syncStatus.value.icon,color:syncStatus.value.color,size:`18`},null,8,[`icon`,`color`]),createBaseVNode(`span`,null,toDisplayString(syncStatus.value.label),1)]),createBaseVNode(`div`,_hoisted_7$17,[createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiSourceBranch),disabled:isBusy.value||!state.value?.head,onClick:_cache[0]||(_cache[0]=$event=>openBranch(`switch`))},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Switch branch…`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiSourceBranch),disabled:isBusy.value||!state.value?.head,onClick:_cache[1]||(_cache[1]=$event=>openBranch(`create`))},{default:withCtx(()=>[..._cache[26]||(_cache[26]=[createTextVNode(`New branch…`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiRefresh),"aria-label":busy.value===`fetch`?`Fetching remote changes`:`Fetch remote changes`,disabled:isBusy.value,onClick:_cache[2]||(_cache[2]=$event=>refresh(false))},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value===`fetch`?`Fetching…`:`Fetch`),1)]),_:1},8,[`prepend-icon`,`aria-label`,`disabled`]),state.value?.upstream&&state.value.incoming>0?(openBlock(),createBlock(VBtn,{key:0,height:`48`,color:`primary`,variant:`flat`,"prepend-icon":unref(mdiArrowDown),disabled:isBusy.value||Boolean(remoteError.value),onClick:_cache[3]||(_cache[3]=$event=>review(`pull`))},{default:withCtx(()=>[_cache[27]||(_cache[27]=createTextVNode(` Pull `,-1)),createBaseVNode(`span`,_hoisted_8$17,toDisplayString(state.value.incoming),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),state.value?.push&&state.value.outgoing>0?(openBlock(),createBlock(VBtn,{key:1,height:`48`,color:`primary`,variant:state.value.incoming>0?`tonal`:`flat`,"prepend-icon":unref(mdiArrowUp),disabled:isBusy.value||Boolean(remoteError.value),onClick:_cache[4]||(_cache[4]=$event=>review(`push`))},{default:withCtx(()=>[_cache[28]||(_cache[28]=createTextVNode(` Push `,-1)),createBaseVNode(`span`,_hoisted_9$13,toDisplayString(state.value.outgoing),1)]),_:1},8,[`variant`,`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),createVNode(VDivider,{class:`my-3`}),createBaseVNode(`dl`,_hoisted_10$12,[_cache[29]||(_cache[29]=createBaseVNode(`dt`,null,`Branch`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.branch||`No branch checked out`),1),_cache[30]||(_cache[30]=createBaseVNode(`dt`,null,`Pull from`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.upstream?destination(state.value.upstream):`Not configured`),1),_cache[31]||(_cache[31]=createBaseVNode(`dt`,null,`Push to`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.push?destination(state.value.push):`Not configured`),1),_cache[32]||(_cache[32]=createBaseVNode(`dt`,null,`Last checked`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.checkedAt?new Date(state.value.checkedAt).toLocaleString():`Not checked yet`),1)]),remoteError.value?(openBlock(),createElementBlock(`p`,_hoisted_11$10,toDisplayString(remoteError.value),1)):!state.value?.upstream||!state.value?.push?(openBlock(),createElementBlock(`p`,_hoisted_12$9,` Set pull and push destinations to track remote changes. `)):createCommentVNode(``,true),createVNode(VDivider,{class:`my-3`}),createVNode(VBtn,{variant:`text`,block:``,height:`48`,"prepend-icon":unref(mdiCogOutline),disabled:isBusy.value||!state.value?.branch,onClick:openSettings},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(` Remote settings `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])]),_:1}))]),_:1},8,[`modelValue`])),createVNode(VDialog,{"model-value":Boolean(branchAction.value),"max-width":`560`,scrollable:``,persistent:isBusy.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>!$event&&(branchAction.value=``))},{default:withCtx(()=>[createVNode(VCard,{title:branchAction.value===`create`?`Create and switch branch`:`Switch local branch`},{default:withCtx(()=>[createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createBaseVNode(`p`,null,[_cache[35]||(_cache[35]=createTextVNode(`Changes the opened project folder from `,-1)),createBaseVNode(`strong`,null,toDisplayString(branchReview.value?.branch),1),_cache[36]||(_cache[36]=createTextVNode(`. The folder must be clean.`,-1))]),_cache[37]||(_cache[37]=createBaseVNode(`p`,null,`Existing sessions keep their original destination. To commit or Update those sessions, switch this folder back to their branch. New sessions start on the selected branch.`,-1)),branchAction.value===`create`?(openBlock(),createElementBlock(`p`,_hoisted_13$7,`The new branch starts at the current local commit. Nothing is pushed.`)):createCommentVNode(``,true),branchAction.value===`create`?(openBlock(),createBlock(VTextField,{key:1,modelValue:branchName.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>branchName.value=$event),label:`New branch name`,disabled:isBusy.value,maxlength:`255`},null,8,[`modelValue`,`disabled`])):(openBlock(),createBlock(VSelect,{key:2,modelValue:branchName.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>branchName.value=$event),items:state.value?.localBranches||[],label:`Local branch`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`])),_cache[38]||(_cache[38]=createBaseVNode(`p`,null,`Database contents stay as they are. Branch selection does not undo migrations.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[8]||(_cache[8]=$event=>branchAction.value=``)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,variant:`flat`,disabled:isBusy.value||!branchName.value||branchName.value===branchReview.value?.branch,onClick:_cache[9]||(_cache[9]=$event=>execute({action:branchAction.value,branch:branchName.value,review:branchReview.value}))},{default:withCtx(()=>[createTextVNode(toDisplayString(isBusy.value?`Switching…`:branchAction.value===`create`?`Create & switch`:`Switch branch`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`model-value`,`persistent`]),createVNode(VDialog,{modelValue:settingsOpen.value,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>settingsOpen.value=$event),"max-width":`560`,scrollable:``,persistent:isBusy.value},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`Remote settings`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_14$5,[_cache[41]||(_cache[41]=createTextVNode(`Destinations for `,-1)),createBaseVNode(`strong`,null,toDisplayString(state.value?.branch),1),_cache[42]||(_cache[42]=createTextVNode(`. Saved in this repository’s Git configuration, including for terminal commands.`,-1))]),!state.value?.remotes?.length?(openBlock(),createElementBlock(`p`,_hoisted_15$5,[..._cache[43]||(_cache[43]=[createTextVNode(`No remotes configured. Add one with `,-1),createBaseVNode(`code`,null,`git remote add`,-1),createTextVNode(` in the project folder, then Fetch.`,-1)])])):createCommentVNode(``,true),createVNode(VSelect,{modelValue:settings.remote,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>settings.remote=$event),items:state.value?.remotes||[],"item-title":`name`,"item-value":`name`,label:`Pull remote`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextField,{modelValue:settings.branch,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>settings.branch=$event),label:`Pull branch`,disabled:isBusy.value},null,8,[`modelValue`,`disabled`]),createVNode(VSelect,{modelValue:settings.pushRemote,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>settings.pushRemote=$event),items:state.value?.remotes||[],"item-title":`name`,"item-value":`name`,label:`Push remote`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextField,{modelValue:settings.pushBranch,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>settings.pushBranch=$event),label:`Push branch`,disabled:isBusy.value},null,8,[`modelValue`,`disabled`])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[15]||(_cache[15]=$event=>settingsOpen.value=false)},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:isBusy.value||!settings.remote||!settings.branch||!settings.pushRemote||!settings.pushBranch,onClick:saveSettings},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Saving…`:`Save settings`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`]),createVNode(VDialog,{"model-value":Boolean(pendingReview.value),"max-width":`560`,scrollable:``,persistent:isBusy.value,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(pendingReview.value=null))},{default:withCtx(()=>[pendingReview.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(pendingReview.value.action===`push`?`Push saved work`:`Pull remote changes`),1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,[createTextVNode(toDisplayString(pendingReview.value.action===`push`?`Push to`:`Pull from`)+` `,1),createBaseVNode(`strong`,null,toDisplayString(destination(pendingReview.value.target)),1)]),createBaseVNode(`p`,_hoisted_16$4,toDisplayString(pendingReview.value.target.url),1),pendingReview.value.action===`push`?(openBlock(),createElementBlock(`p`,_hoisted_17$4,`Pushes `+toDisplayString(pendingReview.value.count)+` outgoing `+toDisplayString(pendingReview.value.count===1?`commit`:`commits`)+` from the local project. Unsaved session work is not included.`,1)):pendingReview.value.merge?(openBlock(),createElementBlock(`p`,_hoisted_18$2,`Local and remote history have both advanced. Merge the remote changes into the local project, preserving both histories. Conflicts stop the operation for review.`)):(openBlock(),createElementBlock(`p`,_hoisted_19$2,`Update the local project folder. Your sessions keep their work and can then use Update this session.`))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[17]||(_cache[17]=$event=>pendingReview.value=null)},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:confirmOperation},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Working…`:pendingReview.value.action===`push`?`Push saved work`:pendingReview.value.merge?`Merge remote changes`:`Pull changes`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])]),_:1})):createCommentVNode(``,true)}}};var Vibe64LocalRemoteControls_default=_plugin_vue_export_helper_default(_sfc_main$55,[[`__scopeId`,`data-v-f775cba6`]]);var _hoisted_1$46={class:`studio-autopilot__composer-delivery`};var _sfc_main$54={__name:`Vibe64ComposerDelivery`,props:{stopVisible:Boolean,stopEnabled:Boolean,stopping:Boolean,canSubmit:Boolean,sending:Boolean,submitMode:{type:String,default:`send`},submitAriaLabel:{type:String,default:`Send message`},submitTitle:{type:String,default:`Send message`}},emits:[`submit`,`stop`],setup(__props,{expose:__expose}){const sendButton=ref(null);__expose({focus:()=>(sendButton.value?.$el||sendButton.value)?.focus?.()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$46,[__props.stopVisible?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Stop`,title:`Stop assistant`,disabled:!__props.stopEnabled,"aria-busy":__props.stopping?`true`:void 0,icon:unref(mdiStop),size:`small`,variant:`text`,class:`studio-autopilot__composer-action`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`stop`))},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),createVNode(VBtn,{ref_key:`sendButton`,ref:sendButton,"aria-label":__props.submitAriaLabel,title:__props.submitTitle,disabled:!__props.canSubmit,"aria-busy":__props.sending&&!__props.canSubmit?`true`:void 0,color:`primary`,size:`small`,variant:`flat`,icon:__props.submitMode===`send`?unref(mdiSend):unref(mdiArrowTopRight),class:`studio-autopilot__composer-action`,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`submit`))},null,8,[`aria-label`,`title`,`disabled`,`aria-busy`,`icon`])])}}};var Vibe64ComposerDelivery_default=_plugin_vue_export_helper_default(_sfc_main$54,[[`__scopeId`,`data-v-212243ea`]]);var _hoisted_1$45={class:`d-flex align-center justify-space-between px-4`};var _hoisted_2$38={class:`d-flex`};var _hoisted_3$33={class:`chat-modes__details-body`};var _hoisted_4$26={key:0,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_5$22={key:2,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_6$19={key:3,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_7$16={class:`chat-modes__model`};var _hoisted_8$16={class:`chat-modes__model`};var _hoisted_9$12={class:`px-4 pb-3`};var _hoisted_10$11={key:0,class:`text-body-small`};var _hoisted_11$9={key:0,class:`text-body-small`};var _hoisted_12$8={class:`px-4 pb-3`};var _sfc_main$53={__name:`Vibe64ChatModeControls`,props:{session:{type:Object,default:null},goal:{type:Object,default:null},sessionsApiPath:{type:[String,Object,Function],default:``},purposes:{type:Object,default:null},savePreferences:{type:Function,default:null},requiredMode:{type:String,default:``},temporary:Boolean,disabled:Boolean,active:Boolean,connecting:Boolean,canConfigure:Boolean,loading:Boolean,loadError:{type:String,default:``}},emits:[`saved`,`reload`,`custom`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const preferences=computed(()=>assistantRoutingFromMetadata(props.session?.metadata));const mode=ref(``);const review=ref(true);const autoSave=ref(true);const deslopConfirmOpen=ref(false);const modelOverride=ref(null);const saving=ref(false);const saveError=ref(``);const detailsOpen=ref(false);const modeMenu=ref(null);const routingOpen=ref(false);function openAccountConnections(request){routingOpen.value=false;requestVibe64AccountConnectionsDialog(request)}const routingFocusRole=ref(``);const routingSaving=ref(false);const modeIcons={custom:mdiTuneVariant,senior:mdiAccountStarOutline,junior:mdiAccountOutline,auto:mdiAutoFix,fix:mdiWrenchOutline};const modes=computed(()=>(props.temporary?[...ASSISTANT_MODES.filter(({id})=>id!==`auto`),ASSISTANT_FIX_MODE]:ASSISTANT_MODES).filter(({id})=>(!props.requiredMode||id===`custom`||id===props.requiredMode)&&!decisions.value[id]?.approvalRequired));const modeLabel=computed(()=>assistantModeLabel(mode.value));const decisions=computed(()=>props.purposes||{});const hasGoal=computed(()=>Boolean(props.goal&&![`completed`,`complete`].includes(props.goal.status)));const ownerOnly=computed(()=>!props.temporary&&decisions.value.senior?.approvalRequired===true);const reviewAvailable=computed(()=>!props.temporary&&!ownerOnly.value&&!hasGoal.value&&mode.value===`auto`);const updatedPreferences=computed(()=>({mode:mode.value,review:review.value,...props.temporary?{}:{autoSave:autoSave.value},...modelOverride.value?{override:modelOverride.value}:{}}));watch(preferences,value=>{mode.value=value?.mode||``;modelOverride.value=value?.override||null;({review:review.value,autoSave:autoSave.value}=assistantRoutingAutomation(value))},{immediate:true});function roleLabel(role){if(role===`custom`&&preferences.value?.mode!==`custom`)return`Choose a model and thinking level.`;const decision=decisions.value[role===`router`?`request_routing`:role];if(decision&&!decision.available)return decision.message||`Unavailable`;const selection=decision?.effectiveSelection;if(!selection)return canConfigureMessage();return vibe64AssistantSelectionLabel(selection)}function canConfigureMessage(){return props.canConfigure?`Choose a model in Models.`:`Ask the owner to configure this mode.`}const autoDescription=computed(()=>decisions.value.auto?.available===false?decisions.value.auto.message:`Senior for plans and reviews; Junior otherwise · Router: ${roleLabel(`router`)}`);const description=computed(()=>{if(!mode.value)return props.session?.assistantSelection?`Current model · ${vibe64AssistantSelectionLabel(props.session.assistantSelection)}`:`Choose an assistant`;if(mode.value===`auto`)return autoDescription.value;const selectedOverride=preferences.value?.mode===mode.value&&preferences.value.override;return selectedOverride&&!decisions.value[mode.value]?`${vibe64AssistantSelectionLabel(selectedOverride)} · custom`:roleLabel(mode.value)});const triggerLabel=computed(()=>[`Chat mode${modeLabel.value?`: ${modeLabel.value}`:``}`,description.value,review.value&&reviewAvailable.value&&`Automatic deslop by Senior on`,autoSave.value&&reviewAvailable.value&&`Automatic save after plans on`].filter(Boolean).map(part=>part.replace(/\.$/u,``)).join(`. `));const reviewDescription=computed(()=>{if(hasGoal.value)return`Auto and automatic review apply after the current goal finishes.`;if(ownerOnly.value)return``;if(!reviewAvailable.value)return`Automatic review is available in Auto only.`;if(decisions.value.review?.available===false)return decisions.value.review.message;return``});const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.assistant-selection.update`,buildCommandOptions:()=>({method:`PATCH`,path:vibe64SessionPath(readRefOrGetterValue(props.sessionsApiPath),props.session.sessionId,`/assistant-selection`)}),buildRawPayload:()=>vibe64RealtimeOriginPayload({assistantRouting:updatedPreferences.value}),onRunSuccess:result=>{if(result?.ok===false)throw new Error(result.error||`Chat mode could not be saved.`)},fallbackRunError:`Chat mode could not be saved.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});function openCustom(){if(props.disabled||saving.value||ownerOnly.value)return;detailsOpen.value=false;emit(`custom`,modeMenu.value?.activatorEl)}async function save(nextMode=mode.value,nextReview=review.value,nextAutoSave=autoSave.value){if(saving.value||props.disabled||!modes.value.some(({id})=>id===nextMode)||nextMode===`auto`&&props.temporary)return;const previous={mode:mode.value,review:review.value,autoSave:autoSave.value,override:modelOverride.value};if(nextMode!==mode.value)modelOverride.value=null;mode.value=nextMode;review.value=!props.temporary&&nextReview;autoSave.value=!props.temporary&&nextAutoSave;saving.value=true;saveError.value=``;try{const result=props.savePreferences?await props.savePreferences(updatedPreferences.value):await command.run();if(result?.ok===false)throw new Error(result.error||`Chat mode could not be saved.`);emit(`saved`)}catch(error){mode.value=previous.mode;review.value=previous.review;autoSave.value=previous.autoSave;modelOverride.value=previous.override;saveError.value=error.message||`Chat mode could not be saved.`}finally{saving.value=false}}function changeDeslop(enabled){if(enabled)save(mode.value,true);else deslopConfirmOpen.value=true}function confirmDeslopOff(){deslopConfirmOpen.value=false;save(mode.value,false)}function configure(){if(!props.canConfigure)return;routingFocusRole.value=``;detailsOpen.value=false;routingOpen.value=true}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VMenu,{ref_key:`modeMenu`,ref:modeMenu,modelValue:detailsOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>detailsOpen.value=$event),"close-on-content-click":false,location:`top start`,width:344,"max-width":`calc(100vw - 24px)`},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{class:`chat-modes__trigger`,variant:`text`,size:`small`,icon:modeIcons[mode.value]||unref(`M8 13C6.14 13 4.59 14.28 4.14 16H2V18H4.14C4.59 19.72 6.14 21 8 21S11.41 19.72 11.86 18H22V16H11.86C11.41 14.28 9.86 13 8 13M8 19C6.9 19 6 18.1 6 17C6 15.9 6.9 15 8 15S10 15.9 10 17C10 18.1 9.1 19 8 19M19.86 6C19.41 4.28 17.86 3 16 3S12.59 4.28 12.14 6H2V8H12.14C12.59 9.72 14.14 11 16 11S19.41 9.72 19.86 8H22V6H19.86M16 9C14.9 9 14 8.1 14 7C14 5.9 14.9 5 16 5S18 5.9 18 7C18 8.1 17.1 9 16 9Z`),"aria-label":triggerLabel.value,title:triggerLabel.value,"aria-busy":saving.value?`true`:void 0}),null,16,[`icon`,`aria-label`,`title`,`aria-busy`])]),default:withCtx(()=>[createVNode(VCard,{class:`chat-modes__details`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$45,[_cache[15]||(_cache[15]=createBaseVNode(`strong`,null,`Chat mode`,-1)),createBaseVNode(`div`,_hoisted_2$38,[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiCogOutline),variant:`text`,width:`48`,height:`48`,"aria-label":`Models`,title:`Models`,onClick:configure},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,width:`48`,height:`48`,"aria-label":`Close chat mode`,title:`Close`,onClick:_cache[0]||(_cache[0]=$event=>detailsOpen.value=false)},null,8,[`icon`])])]),createBaseVNode(`div`,_hoisted_3$33,[__props.connecting||__props.active||saving.value||!mode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$26,toDisplayString(__props.connecting?`Connecting assistant…`:saving.value?`Saving mode…`:__props.active?`For your next request`:description.value),1)):createCommentVNode(``,true),saveError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,density:`compact`,class:`mx-3 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(saveError.value),1)]),_:1})):createCommentVNode(``,true),ownerOnly.value?(openBlock(),createElementBlock(`p`,_hoisted_5$22,`Main chat runs on the owner's AI. Only the owner can change its chat mode, review or model.`)):createCommentVNode(``,true),hasGoal.value?(openBlock(),createElementBlock(`p`,_hoisted_6$19,`Model and Senior/Junior changes apply to the next goal turn. Another tool or Auto applies after this goal finishes.`)):createCommentVNode(``,true),createVNode(VList,{lines:false,class:`py-0`},{default:withCtx(()=>[createVNode(VListItem,{title:__props.requiredMode?`Choose model`:`Custom`,"prepend-icon":modeIcons.custom,active:mode.value===`custom`,role:`button`,"aria-pressed":mode.value===`custom`,disabled:__props.disabled||saving.value||ownerOnly.value,color:`primary`,"min-height":`60`,onClick:openCustom},{subtitle:withCtx(()=>[createBaseVNode(`span`,_hoisted_7$16,toDisplayString(mode.value===`custom`?description.value:roleLabel(`custom`)),1)]),append:withCtx(()=>[mode.value===`custom`?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`18`,"aria-label":`Selected`},null,8,[`icon`])):createCommentVNode(``,true)]),_:1},8,[`title`,`prepend-icon`,`active`,`aria-pressed`,`disabled`])]),_:1}),__props.loadError?(openBlock(),createBlock(VAlert,{key:4,type:`error`,variant:`tonal`,density:`compact`,class:`mx-3 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.loadError)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>emit(`reload`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):__props.loading?(openBlock(),createBlock(VSkeletonLoader,{key:5,type:`list-item-two-line@${modes.value.length-1}`},null,8,[`type`])):(openBlock(),createElementBlock(Fragment,{key:6},[createVNode(VList,{"aria-label":`Choose chat mode`,lines:false,class:`py-0`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(modes.value.filter(({id})=>id!==`custom`),choice=>{return openBlock(),createBlock(VListItem,{key:choice.id,title:choice.label,"prepend-icon":modeIcons[choice.id],active:mode.value===choice.id,"aria-pressed":mode.value===choice.id,role:`button`,disabled:__props.disabled||saving.value||decisions.value[choice.id]?.available!==true,color:`primary`,"min-height":`60`,"aria-disabled":__props.disabled||saving.value||decisions.value[choice.id]?.available!==true?`true`:void 0,onClick:$event=>save(choice.id)},{subtitle:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$16,toDisplayString(mode.value===choice.id?description.value:choice.id===`auto`?autoDescription.value:roleLabel(choice.id)),1)]),append:withCtx(()=>[mode.value===choice.id?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`18`,"aria-label":`Selected`},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`title`,`prepend-icon`,`active`,`aria-pressed`,`disabled`,`aria-disabled`,`onClick`])}),128))]),_:1}),createBaseVNode(`div`,_hoisted_9$12,[__props.requiredMode?(openBlock(),createElementBlock(`p`,_hoisted_10$11,`Repair chats use Fix it with AI, or a model you choose. Model changes apply to the next turn.`)):createCommentVNode(``,true),!__props.temporary&&mode.value===`auto`?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[17]||(_cache[17]=createBaseVNode(`p`,{class:`text-body-small`},`Senior always reviews Junior's completed work and, with Deslop on, cleans it up. Keep Deslop on unless this is a quick throwaway project. Automatic save runs Save once Senior completes a plan.`,-1)),createVNode(VSwitch,{"model-value":review.value,disabled:__props.disabled||saving.value||__props.connecting||!reviewAvailable.value,label:`Deslop during Senior review`,"hide-details":``,color:`primary`,density:`compact`,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>changeDeslop($event))},null,8,[`model-value`,`disabled`]),createVNode(VSwitch,{"model-value":autoSave.value,disabled:__props.disabled||saving.value||__props.connecting||!reviewAvailable.value,label:`Automatic save after completing a plan`,"hide-details":``,color:`primary`,density:`compact`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>save(mode.value,review.value,$event))},null,8,[`model-value`,`disabled`]),reviewDescription.value?(openBlock(),createElementBlock(`p`,_hoisted_11$9,toDisplayString(reviewDescription.value),1)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])],64)),createBaseVNode(`div`,_hoisted_12$8,[renderSlot(_ctx.$slots,`default`,{close:()=>{detailsOpen.value=false}},void 0,true)])])]),_:3})]),_:3},8,[`modelValue`]),createVNode(VDialog,{modelValue:deslopConfirmOpen.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>deslopConfirmOpen.value=$event),"max-width":`30rem`,"aria-labelledby":`chat-modes-deslop-off-title`},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:`chat-modes-deslop-off-title`,class:`text-wrap`},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Turn off Deslop?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createBaseVNode(`p`,{class:`mb-3`},`Deslop is the clean-up Senior does while reviewing: it removes duplicated helpers, dead code and muddled structure that AI-written code collects.`,-1),createBaseVNode(`p`,{class:`mb-3`},[createBaseVNode(`strong`,null,`Without it, code quality will suffer.`),createTextVNode(` Over time the project gets harder to change and may crash and burn, unless you run Deslop yourself regularly by asking the AI to “Deslop” in the chat.`)],-1),createBaseVNode(`p`,null,`Only skip Deslop for a quick throwaway project. Cancel keeps it on.`,-1)])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`flat`,color:`primary`,autofocus:``,onClick:_cache[5]||(_cache[5]=$event=>deslopConfirmOpen.value=false)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{variant:`text`,color:`error`,onClick:confirmDeslopOff},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Turn off Deslop`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),__props.canConfigure?(openBlock(),createBlock(VDialog,{key:0,modelValue:routingOpen.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>routingOpen.value=$event),"max-width":`38rem`,persistent:routingSaving.value,scrollable:``,"aria-label":`Models`,onAfterEnter:_cache[13]||(_cache[13]=$event=>routingFocusRole.value=decisions.value.auto?.missingRoles?.[0]||``),onAfterLeave:_cache[14]||(_cache[14]=$event=>modeMenu.value?.activatorEl?.focus())},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[routingOpen.value?(openBlock(),createBlock(unref(ModelRoutingForm_default),{key:0,"focus-role":routingFocusRole.value,onBusy:_cache[7]||(_cache[7]=$event=>routingSaving.value=$event),onClose:_cache[8]||(_cache[8]=$event=>routingOpen.value=false),onSaved:_cache[9]||(_cache[9]=$event=>{routingSaving.value=false;routingOpen.value=false}),onAddTeamKey:_cache[10]||(_cache[10]=$event=>openAccountConnections({providerId:`ai`,section:`team`})),onConnectProvider:_cache[11]||(_cache[11]=$event=>openAccountConnections({providerId:$event}))},null,8,[`focus-role`])):createCommentVNode(``,true)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`])):createCommentVNode(``,true)],64)}}};var Vibe64ChatModeControls_default=_plugin_vue_export_helper_default(_sfc_main$53,[[`__scopeId`,`data-v-d98f3d5b`]]);var _hoisted_1$44={class:`vibe64-temporary-ai__recovery-row`};var _hoisted_2$37={key:1,"aria-live":`polite`,class:`vibe64-temporary-ai__recovery`,"data-temporary-ai-recovery":``,role:`status`};var _hoisted_3$32={class:`vibe64-temporary-ai__recovery-summary`};var _hoisted_4$25={key:0};var _sfc_main$52={__name:`Vibe64TemporaryAiRecoveryRow`,props:{activeTask:{type:Object,default:null},restoreError:{type:String,default:``},recoveryVerified:Boolean,recoveryChecking:Boolean,inputDisabled:Boolean,connectionUnavailable:Boolean,updateDisabled:Boolean,updateDisabledReason:{type:String,default:``},canReviewUpdate:Boolean},emits:[`retry-restore`,`check-update`,`review-update`],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const activeTaskRecoveryTitle=computed(()=>{if(props.recoveryChecking)return`Checking Update…`;const status=String(props.activeTask?.status||``).trim();if([`starting`,`inProgress`].includes(status))return`AI repair in progress`;if(props.activeTask?.recoveryOutcome===`failed`)return`Update needs attention`;if(props.activeTask?.recoveryOutcome===`unconfirmed`)return`Update result not confirmed`;if(props.activeTask?.recoveryOperation===`update`)return`Update not yet verified`;if(props.activeTask?.outcomeKind===`continue`)return`Waiting for your reply`;if(status===`completed`)return`AI repair finished`;if(status===`failed`)return`AI repair needs attention`;if(status===`interrupted`)return`AI repair stopped`;return`AI repair`});const activeTaskRecoveryStatus=computed(()=>{const task=props.activeTask||{};if(task.recoveryOutcome===`checking`)return``;if(task.recoveryOperation===`update`&&props.updateDisabled&&props.updateDisabledReason)return props.updateDisabledReason;if(task.recoveryOutcome===`failed`)return task.recoveryAutoPaused?`Automatic repair paused after repeated conflicts. Continue here or check Update again. Main chat has the latest Update diagnostic.`:`The Update check did not succeed. Continue this repair or check Update again. Main chat has the latest Update diagnostic.`;if(task.recoveryOutcome===`unconfirmed`)return task.recoveryOutcomeMessage||`Vibe64 could not confirm this Update result. Check the current session before trying again.`;if(task.recoveryOperation===`update`&&task.outcomeKind===`continue`)return`Reply if a decision is needed, or use Check Update to verify the prepared edits.`;if(task.outcomeKind===`continue`)return``;const status=String(task.status||``).trim();if(status===`completed`)return task.completionMessage||`Temporary AI finished. Review its result below.`;if(status===`failed`)return task.failureMessage||`Temporary AI stopped before it could confirm the repair. Review the error and progress below.`;if(status===`interrupted`)return task.recoveryOperation===`update`?`You stopped this repair. Partial edits remain and Update still needs to succeed. You can continue the repair here.`:`You stopped this repair. You can continue in this temporary chat or return to Main chat.`;return task.nextStepMessage||`Follow progress here and reply below if Temporary AI needs a decision.`});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$44,[props.restoreError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.restoreError)+` `,1),createVNode(VBtn,{color:`error`,variant:`text`,height:`48`,onClick:_cache[0]||(_cache[0]=$event=>emit(`retry-restore`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),props.activeTask?.recoveryNotice&&!props.recoveryVerified&&!props.connectionUnavailable?(openBlock(),createElementBlock(`div`,_hoisted_2$37,[createBaseVNode(`div`,_hoisted_3$32,[createBaseVNode(`strong`,null,toDisplayString(activeTaskRecoveryTitle.value),1),activeTaskRecoveryStatus.value&&!props.activeTask.busy?(openBlock(),createElementBlock(`details`,_hoisted_4$25,[_cache[4]||(_cache[4]=createBaseVNode(`summary`,null,`Details`,-1)),createBaseVNode(`p`,null,toDisplayString(activeTaskRecoveryStatus.value),1)])):createCommentVNode(``,true)]),props.activeTask.recoveryOperation===`update`&&!props.recoveryVerified?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-check-update":``,disabled:props.updateDisabled||props.inputDisabled||props.activeTask.busy||props.activeTask.recoveryOutcome===`unconfirmed`,loading:props.recoveryChecking,title:props.updateDisabled?props.updateDisabledReason:`Check whether the repaired session can update`,size:`small`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>emit(`check-update`,props.activeTask))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Check Update `,-1)])]),_:1},8,[`disabled`,`loading`,`title`])):createCommentVNode(``,true),props.activeTask.recoveryOperation===`update`&&!props.recoveryVerified&&props.canReviewUpdate?(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-review-update":``,disabled:props.updateDisabled||props.inputDisabled||props.activeTask.busy||props.activeTask.recoveryOutcome===`unconfirmed`,size:`small`,variant:`tonal`,onClick:_cache[2]||(_cache[2]=$event=>emit(`review-update`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])}}};var Vibe64TemporaryAiRecoveryRow_default=_plugin_vue_export_helper_default(_sfc_main$52,[[`__scopeId`,`data-v-441bbf81`]]);var _hoisted_1$43={class:`vibe64-temporary-ai__tabs`,"aria-label":`Main and temporary conversations`};var _hoisted_2$36={class:`vibe64-temporary-ai__tab vibe64-temporary-ai__tab--main`};var _hoisted_3$31={class:`vibe64-temporary-ai__task-tabs`};var _hoisted_4$24=[`aria-current`,`data-temporary-ai-task-id`,`aria-label`,`title`,`onClick`];var _hoisted_5$21={key:0,class:`vibe64-temporary-ai__unread`,"aria-hidden":`true`};var _hoisted_6$18={key:1,class:`vibe64-temporary-ai__busy`,"aria-label":`Assistant working`};var _sfc_main$51={__name:`Vibe64TemporaryAiTabs`,props:{tasks:{type:Array,default:()=>[]},activeTaskId:{type:String,default:``},setTabButton:{type:Function,required:true},sessionId:{type:String,default:``},repositoryBusy:Boolean,closingTask:Boolean,stoppingTaskId:{type:String,default:``}},emits:[`select-main-chat`,`select-task`,`rename`,`close`,`new-task`],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const hostConversation=inject(VIBE64_HOST_CONVERSATION_KEY,null);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`nav`,_hoisted_1$43,[createBaseVNode(`div`,_hoisted_2$36,[createBaseVNode(`button`,{class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-main-chat":``,type:`button`,onClick:_cache[0]||(_cache[0]=$event=>emit(`select-main-chat`))},` Main chat `)]),createBaseVNode(`div`,_hoisted_3$31,[unref(hostConversation)?.selected?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__host-tab`,color:unref(hostConversation).color,variant:`flat`,"aria-current":`page`,"prepend-icon":unref(hostConversation).icon,rounded:`pill`,height:`32`,size:`small`,onClick:_cache[1]||(_cache[1]=$event=>unref(hostConversation).open())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(hostConversation).label),1)]),_:1},8,[`color`,`prepend-icon`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(props.tasks,task=>{return openBlock(),createElementBlock(`div`,{key:task.id,class:normalizeClass([`vibe64-temporary-ai__tab`,{"vibe64-temporary-ai__tab--active":!unref(hostConversation)?.selected&&task.id===props.activeTaskId}])},[createBaseVNode(`button`,{ref_for:true,ref:element=>props.setTabButton(task.id,element),"aria-current":!unref(hostConversation)?.selected&&task.id===props.activeTaskId?`page`:void 0,class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-task-id":task.id,"aria-label":task.unread?`${task.label}: unread messages`:task.label,title:task.unread?`${task.label}: unread messages`:task.label,type:`button`,onClick:$event=>emit(`select-task`,task.id)},[createBaseVNode(`span`,null,toDisplayString(task.label),1),task.unread?(openBlock(),createElementBlock(`span`,_hoisted_5$21)):createCommentVNode(``,true),task.nativeWorking?(openBlock(),createElementBlock(`span`,_hoisted_6$18)):createCommentVNode(``,true)],8,_hoisted_4$24),!unref(hostConversation)?.selected&&task.id===props.activeTaskId?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Rename ${task.label}`,class:`vibe64-temporary-ai__tab-rename`,"data-temporary-ai-rename":``,disabled:task.state===`closing`,height:`32`,icon:unref(mdiPencilOutline),"min-width":`32`,size:`x-small`,title:`Rename ${task.label}`,type:`button`,variant:`text`,onClick:$event=>emit(`rename`,task)},null,8,[`aria-label`,`disabled`,`icon`,`title`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-label":`Close ${task.label}`,class:`vibe64-temporary-ai__tab-close`,disabled:props.repositoryBusy||task.recoveryOutcome===`checking`||props.closingTask||props.stoppingTaskId===task.id,height:`32`,icon:unref(mdiClose),"min-width":`32`,size:`x-small`,title:`Close ${task.label}`,type:`button`,variant:`text`,onClick:$event=>emit(`close`,task)},null,8,[`aria-label`,`disabled`,`icon`,`title`,`onClick`])],2)}),128)),createVNode(VBtn,{disabled:!props.sessionId,"aria-label":`New temporary AI task`,class:`vibe64-temporary-ai__new-task`,height:`32`,icon:unref(mdiPlus),"min-width":`32`,size:`x-small`,title:`New temporary AI task`,type:`button`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>emit(`new-task`))},null,8,[`disabled`,`icon`])]),_cache[3]||(_cache[3]=createBaseVNode(`span`,{class:`vibe64-temporary-ai__tabs-spacer`},null,-1))])}}};var Vibe64TemporaryAiTabs_default=_plugin_vue_export_helper_default(_sfc_main$51,[[`__scopeId`,`data-v-eb3acb4f`]]);var _sfc_main$50={__name:`Vibe64AgentSettingsMenu`,props:{agentSettings:{type:Object,default:()=>({})},assistantSelection:{type:Object,default:()=>({})},disabled:Boolean,location:{type:String,default:`top start`}},emits:[`update-setting`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const menuOpen=ref(false);const currentSettings=computed(()=>normalizeVibe64AgentSettings({...props.agentSettings,providerId:props.assistantSelection.engineId}));const draft=ref(currentSettings.value);watch([currentSettings,menuOpen],()=>{draft.value={...currentSettings.value}});const engineId=computed(()=>props.assistantSelection.engineId);const modelProviderId=computed(()=>props.assistantSelection.modelProviderId);const catalog=useVibe64AssistantCatalog({active:computed(()=>menuOpen.value&&Boolean(engineId.value&&modelProviderId.value)),engineId,modelProviderId,providerConnectedOnly:true});const provider=computed(()=>engineId.value&&catalog.modelEngine.value?.engineId===engineId.value?catalog.modelEngine.value.modelProviders.find(row=>row.id===modelProviderId.value&&row.connected):null);const models=computed(()=>(provider.value?.models||[]).filter(model=>model.status===`available`));const modelRows=computed(()=>[{id:``,label:`Use main chat model`},...models.value]);const selectedModel=computed(()=>models.value.find(model=>model.id===(draft.value.model||props.assistantSelection.modelId)));const variantRows=computed(()=>[{id:``,label:`Automatic`},...selectedModel.value?.variants||[]]);const catalogLoading=computed(()=>catalog.modelPage.isInitialLoading.value);const catalogError=computed(()=>catalog.modelPage.loadError.value||``);const summary=computed(()=>{const modelId=currentSettings.value.model||props.assistantSelection.modelId;return modelId?vibe64AssistantSelectionLabel({engineId:engineId.value,modelId,variantId:currentSettings.value.thinking}):`Use main chat model`});const canSave=computed(()=>!props.disabled&&!catalogLoading.value&&!catalogError.value&&Boolean(selectedModel.value)&&variantRows.value.some(row=>row.id===draft.value.thinking)&&[`model`,`thinking`].some(key=>draft.value[key]!==currentSettings.value[key]));function select(key,value){if(props.disabled)return;if(key===`model`&&modelRows.value.some(row=>row.id===value)){draft.value={...draft.value,model:value};if(!variantRows.value.some(row=>row.id===draft.value.thinking))draft.value.thinking=``}else if(key===`thinking`&&variantRows.value.some(row=>row.id===value))draft.value={...draft.value,thinking:value}}function apply(){if(!canSave.value)return;const selected={...draft.value};for(const key of[`model`,`thinking`])if(selected[key]!==currentSettings.value[key])emit(`update-setting`,key,selected[key]);menuOpen.value=false}return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantModelControl_default),{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>menuOpen.value=$event),location:__props.location,"provider-rows":provider.value?[{id:provider.value.id,label:provider.value.label}]:[],"model-provider-id":modelProviderId.value,"model-rows":modelRows.value,"model-id":draft.value.model,"variant-rows":variantRows.value,"variant-id":draft.value.thinking,"selection-summary":summary.value,"button-title":`AI controls: ${summary.value}`,"changes-disabled":__props.disabled,"can-save":canSave.value,"catalog-loading":catalogLoading.value,"catalog-error":catalogError.value,onSelectModel:_cache[2]||(_cache[2]=$event=>select(`model`,$event)),onSelectVariant:_cache[3]||(_cache[3]=$event=>select(`thinking`,$event)),onApply:apply,onReload:unref(catalog).reload},{footer:withCtx(()=>[createVNode(VBtn,{"aria-label":`Close AI controls`,"min-height":`48`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>menuOpen.value=false)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close `,-1)])]),_:1})]),_:1},8,[`modelValue`,`location`,`provider-rows`,`model-provider-id`,`model-rows`,`model-id`,`variant-rows`,`variant-id`,`selection-summary`,`button-title`,`changes-disabled`,`can-save`,`catalog-loading`,`catalog-error`,`onReload`])}}};function routedChatMessage(request,local=null){if(local?.status===`pending`&&local.id===request?.messageId&&[`failed`,`uncertain`].includes(request?.delivery))return local;if(local?.status===`uncertain`&&local.id===request?.messageId&&request?.delivery===`failed`)return local;if(!request||!request.input||request.stopped||request.followup||![`routing`,`sending`,`uncertain`,`failed`].includes(request.delivery))return null;return{...local,id:request.messageId,text:request.input.displayMessage||request.input.message,payload:local?.payload||request.input,status:[`failed`,`uncertain`].includes(request.delivery)?request.delivery:`pending`,error:request.error||``}}function chatTurnsWithRouting(turns,request,checking=false){const result=chatTurnsWithDelivery(turns,request,checking);const notice=assistantRoutingOutcomeNotice(request);if(!notice||result.some(turn=>turn.system?.messageId===notice.messageId))return result;return[...result,{turnId:notice.messageId,system:{role:`system`,...notice}}]}function chatTurnsWithDelivery(turns,request,checking){if(!request)return turns;const matches=turn=>turn.user?.messageId===request.messageId||turn.optimistic?.id===request.messageId;if(turns.some(turn=>matches(turn)&&(!turn.optimistic&&turn.user?.receipt!==false||turn.optimistic?.status===`accepted`)))return turns;if([`failed`,`uncertain`].includes(request.delivery)&&turns.some(turn=>matches(turn)&&turn.optimistic?.status===`pending`))return turns;const message=routedChatMessage(request);if(!message){if(request.delivery!==`accepted`&&!request.followup)return turns;return turns.map(turn=>matches(turn)&&turn.optimistic?{...turn,...turn.system?.delivery?.messageId===request.messageId?{system:void 0}:{},optimistic:{...turn.optimistic,status:`accepted`,error:``}}:turn)}return(turns.some(matches)?turns:[...turns,{turnId:`routing:${message.id}`,user:{role:`user`,text:message.text,messageId:message.id,attachments:request.input.displayAttachments||[]},messages:[]}]).map(turn=>!matches(turn)||turn.optimistic?.status===`uncertain`&&message.status===`failed`?turn:{...turn,optimistic:{...turn.optimistic,id:message.id,status:message.status,error:message.error},system:{role:`system`,text:assistantRoutingStatusLabel(request),...message.status===`uncertain`?{delivery:{messageId:message.id,error:message.error,checking}}:{}}})}function trackRoutedMessage(delivery,message,turns=[]){if(!delivery||!message||delivery.find(message.id))return;delivery.restoreUncertain({messageId:message.id,text:message.text,attachments:message.payload?.displayAttachments||[],error:message.error},turns)}function cancelOwnsMessage(message){return Boolean(message?.cancelling||message?.cancelError)}var _sfc_main$49={__name:`Vibe64EphemeralConversationMessages`,props:{adapter:{type:Object,required:true},recoveryMessage:{type:Object,default:null},routingRequest:{type:Object,default:null},working:{type:Boolean,default:void 0},sessionId:{type:String,default:``},scrollKey:{type:String,default:``},assistantLabel:{type:String,default:`Temporary AI`},emptyMessage:{type:String,default:`Ask a focused question without adding it to the main conversation.`},userLabel:{type:String,default:`You`}},emits:[`resend`,`cancel`,`edit`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const displayAdapter=computed(()=>{const supplied=props.adapter;let turns=(supplied.conversation.turns||[]).map(turn=>{const selection=turn.metadata?.assistantSelection;const present=message=>{if(!message)return message;const recordedSelection=message.assistantSelection||message.metadata?.assistantSelection||selection;const displayed=thinkingMessagePresentation(message,recordedSelection);return displayed&&{...displayed,...conversationAttribution(recordedSelection,message.assistantRouting||message.metadata?.assistantRouting||turn.metadata?.assistantRouting)}};return{...turn,...conversationAttribution(selection,turn.metadata?.assistantRouting),assistant:present(turn.assistant),thinking:turn.thinking?.map(present).filter(Boolean),commentary:turn.commentary?.map(present).filter(Boolean),messages:turn.messages?.map(present).filter(Boolean)}});const notice=props.recoveryMessage;if(notice&&!turns.some(turn=>(turn.messages||[turn.system]).some(message=>message?.messageId===notice.id)))turns=[...turns,{turnId:notice.id,system:{...notice,messageId:notice.id},messages:[{...notice,messageId:notice.id}]}];turns=chatTurnsWithRouting(supplied.delivery?supplied.delivery.turns(turns):turns,props.routingRequest,supplied.delivery?.state.sending===true);return{...supplied,delivery:null,conversation:{...supplied.conversation,cancellableDelivery:true,working:props.working??supplied.conversation.working,turns,assistantLabel:props.assistantLabel,scrollKey:props.scrollKey,variant:`task`,visible:true,userMessageFormat:`plain`,progressPreviewLimit:usesCommentaryForThinking(turns.at(-1)?.metadata?.assistantSelection)?1:0,systemLabel:`System`,welcomeMessage:turns.length?``:props.emptyMessage},actions:{...supplied.actions,resend:id=>emit(`resend`,id),checkDelivery:id=>emit(`resend`,id),cancel:id=>emit(`cancel`,id),edit:id=>emit(`edit`,id)}}});return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantConversationElement_default),{adapter:displayAdapter.value},createSlots({attachments:withCtx(({items})=>[createVNode(_sfc_main$58,{items,"session-id":__props.sessionId},null,8,[`items`,`session-id`])]),"system-message":withCtx(({message})=>[createVNode(Vibe64ConversationStatus_default,{message,onCheckDelivery:_cache[0]||(_cache[0]=$event=>emit(`resend`,$event))},createSlots({_:2},[_ctx.$slots[`message-text`]?{name:`default`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`message-text`,{message})]),key:`0`}:void 0]),1032,[`message`])]),_:2},[_ctx.$slots.hints?{name:`hints`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`hints`)]),key:`0`}:void 0,_ctx.$slots.composer?{name:`composer`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`composer`)]),key:`1`}:void 0]),1032,[`adapter`])}}};var VIBE64_ASSISTANT_ENDPOINT=`/api/assistant/app`;function vibe64AssistantConversationOptions(){return{api:createAssistantApi({request:(url,options)=>getHttpWebClient().request(url,options),resolveBasePath:()=>VIBE64_ASSISTANT_ENDPOINT,resolveSurfaceId:()=>`app`}),endpoint:VIBE64_ASSISTANT_ENDPOINT,surfaceId:`app`,hostSurfaceId:`app`,workspaceSlug:``}}var TEMPORARY_AI_PRESENTATION_FIELDS=Object.freeze([`title`,`draft`,`displayMessage`,`completionMessage`,`dedupeKey`,`failureMessage`,`nextStepMessage`,`recoveryNotice`,`recoveryOperation`,`recoveryConflictId`,`recoveryContext`,`recoveryOutcome`,`recoveryOutcomeMessage`,`recoveryRequestId`,`recoveryAutoPaused`,`recoveryRetryKeys`,`runConflictId`]);function temporaryAiId(prefix=`temporary`){return`${prefix}_${crypto.randomUUID()}`}function temporaryAiRequestError(response={},fallback=`Temporary AI request failed.`){return Object.assign(new Error(vibe64ApiResponseError(response,fallback)),{code:normalizeText$1(response.code),conversationExpired:response.conversationExpired===true||response.code===`vibe64_conversation_closed`,status:normalizeText$1(response.status)})}async function temporaryAiRequest(path=``,options={}){const response=await getHttpWebClient().request(path,options);if(response?.ok===false)throw temporaryAiRequestError(response);return response}function temporaryAiTurnIsActive(status=``){const normalizedStatus=normalizeText$1(status);return[`starting`,`inProgress`].includes(normalizedStatus)||normalizedStatus===`preparing`}function temporaryAiMessages(turns=[]){return turns.flatMap(turn=>(turn.messages||[turn.system,turn.user,...turn.thinking||[],...turn.commentary||[],turn.assistant].filter(Boolean)).map(message=>({...message,id:message.messageId||message.id,...message.role===`user`?{attachments:turn.user?.attachments||[]}:{},status:message.status||(message.complete===false?`inProgress`:`completed`),assistantSelection:turn.metadata?.assistantSelection,assistantRouting:turn.metadata?.assistantRouting})))}function temporaryAiTaskView(value){const task={...value};task.label=task.title||`Temporary ${task.number}`;const runtime=task.binding.runtime.value;Object.defineProperties(task,{draft:{enumerable:true,configurable:true,get:()=>runtime.draft.value,set:value=>{runtime.draft.value=value}},attachments:{enumerable:true,configurable:true,get:()=>runtime.draftAttachments.value,set:value=>{runtime.draftAttachments.value=value}},delivery:{enumerable:true,configurable:true,get:()=>runtime.delivery},messages:{enumerable:true,configurable:true,get(){const messages=temporaryAiMessages(runtime.turns.value);return task.recoveryMessage&&!messages.some(message=>message.id===task.recoveryMessage.id)?[...messages,task.recoveryMessage]:messages}},adapter:{enumerable:true,configurable:true,get:()=>task.binding.adapter.value}});return task}function temporaryAiTaskPresentation(task,selected){return Object.fromEntries(TEMPORARY_AI_PRESENTATION_FIELDS.filter(key=>!selected||selected.has(key)).map(key=>[key,task[key]]))}function chatText(value=``){return String(value||``).trim()}function createChatMessageId({now=Date.now(),originId=vibe64BrowserTabOriginId(),sequence=0}={}){const origin=chatText(originId);const timestamp=Number(now);if(!origin||!Number.isFinite(timestamp))throw new TypeError(`Chat message ids require a browser origin and timestamp.`);const number=Number.isSafeInteger(sequence)&&sequence>0?sequence:1;return`message_${origin.replace(/[^A-Za-z0-9_-]+/gu,`_`)}_${timestamp.toString(36)}_${number.toString(36)}`}function chatMessagePayload(message=``,attachments=[]){const text=chatText(message);if(!text)return null;const files=Array.isArray(attachments)?attachments:[];const attachmentIds=files.map(attachment=>chatText(attachment?.attachmentId)).filter(Boolean);const displayAttachments=normalizeVibe64ConversationAttachments(files.filter(attachment=>chatText(attachment?.attachmentId)));return{...attachmentIds.length?{attachmentIds}:{},...displayAttachments.length?{displayAttachments}:{},displayMessage:text,message:text}}function useVibe64TemporaryAiMessages({tasks,closingTaskIds,stoppingTaskIds,isDisposed,operationBusy,records,reportTaskFinished,updateDraft}){const{canApplyTaskResponse,cancelScheduledSave,ensureConversation,removeTask,saveInFlight,updateTask}=records;function pendingMessage(task,messageId){const local=task?.delivery.find(messageId);const route=assistantRoutingRequestForDisplay(task?.routingMetadata);return route?.messageId===messageId&&routedChatMessage(route,local)||local}function definitelyUnsent(task,messageId){return assistantRoutingRequestForDisplay(task?.routingMetadata)?.messageId!==messageId&&task?.delivery.find(messageId)?.status===`failed`}async function send(taskId=``,{retryMessageId=``,generatedMessage=null,attachmentOwner=null}={}){const task=tasks.value.find(candidate=>candidate.id===taskId);if(isDisposed()||!task||closingTaskIds.has(taskId)||stoppingTaskIds.has(taskId)||readRefOrGetterValue(operationBusy)||task.recoveryOutcome===`checking`)return false;const retry=retryMessageId?pendingMessage(task,retryMessageId):null;const draftPayload=generatedMessage||chatMessagePayload(task.draft,task.attachments);const payload=retry?.payload||draftPayload&&{...draftPayload,agentSettings:task.agentSettings,displayMessage:draftPayload.displayMessage,presentation:temporaryAiTaskPresentation(task),message:!generatedMessage&&task.recoveryContext?`${task.recoveryContext}\n\nUser message:\n${draftPayload.message}`:draftPayload.message,...task.recoveryOperation===`update`?{outputSchema:VIBE64_AGENT_TASK_RESULT_SCHEMA}:{},promptLabel:task.label};if(!payload?.message)return false;const authored=payload.request?payload:{...payload,data:{agentSettings:payload.agentSettings,displayMessage:payload.displayMessage,presentation:payload.presentation,...payload.outputSchema?{outputSchema:payload.outputSchema}:{},promptLabel:payload.promptLabel}};const messageId=retryMessageId||temporaryAiId(`message`);const working=[`starting`,`inProgress`].includes(task.status);function accepted(){if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return;const current=tasks.value.find(candidate=>candidate.id===taskId);if(current.pendingMessageId!==messageId)return;updateTask(taskId,{displayMessage:``,pendingMessageId:``,error:``,errorCode:``,status:current.status});if(retry||current.draft||current.attachments.length)updateTask(taskId,{draft:current.draft})}try{const submission=task.binding.submitPrepared(authored,{messageId,retryMessageId,retry,working,clearDraft:!generatedMessage,attachments:attachmentOwner,isCurrent:()=>canApplyTaskResponse(task)&&!closingTaskIds.has(taskId),onAccepted:accepted,onSubmit(){updateTask(taskId,{sendVersion:(task.sendVersion||0)+1,messageId,busy:true,error:``,errorCode:``,pendingMessageId:messageId,outcomeKind:``,runConflictId:task.recoveryConflictId,recoveryOutcome:task.recoveryOutcome===`failed`?`failed`:``,recoveryOutcomeMessage:task.recoveryOutcome===`failed`?task.recoveryOutcomeMessage:``,status:`starting`});cancelScheduledSave(taskId)},async prepare(submission){const save=saveInFlight(taskId);if(save)await save;if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;await ensureConversation(task);if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;return{...submission.request,data:{...submission.request.data,presentation:{...submission.request.data.presentation,draft:tasks.value.find(candidate=>candidate.id===taskId).draft}}}}});if(submission===false)return false;const response=await submission;if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;if(response===false||response?.ok===false)throw temporaryAiRequestError(response||{error:task.delivery.find(messageId)?.error||`Message could not be sent.`});const current=tasks.value.find(candidate=>candidate.id===taskId);if(response?.assistantRoutingRequest)updateTask(taskId,{routingMetadata:{...current.routingMetadata,assistant_routing_request:JSON.stringify(response.assistantRoutingRequest)}});return true}catch(error){if(!canApplyTaskResponse(task))return false;if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return false}if(error.code===`vibe64_assistant_routing_cancelled`){const current=tasks.value.find(candidate=>candidate.id===taskId);const text=payload.displayMessage||payload.message;const cancelling=cancelOwnsMessage(task.delivery.find(messageId));if(!cancelling)task.delivery.remove(messageId);updateTask(taskId,{busy:false,pendingMessageId:``,error:``,errorCode:``,status:`interrupted`,...cancelling?{}:{draft:draftWithRestoredMessage(text,current.draft)}});updateTask(taskId,{draft:tasks.value.find(candidate=>candidate.id===taskId).draft});return false}const current=tasks.value.find(candidate=>candidate.id===taskId);const retained=task.delivery.find(messageId);if(retained?.status===`accepted`||!retained&&current.pendingMessageId!==messageId)return true;const stillWorking=task.busy&&error?.conversationExpired!==true;updateTask(taskId,{busy:stillWorking,conversationId:error?.conversationExpired===true?``:current.conversationId,error:normalizeText$1(error?.message||error)||`Temporary AI message could not be sent.`,errorCode:normalizeText$1(error?.code),pendingMessageId:messageId,runId:error?.conversationExpired===true?``:task.runId,status:stillWorking?task.status:`failed`});updateTask(taskId,{draft:current.draft});if(!stillWorking)reportTaskFinished(taskId);return false}}async function cancelMessage(taskId,messageId){const task=tasks.value.find(candidate=>candidate.id===taskId);const message=pendingMessage(task,messageId);const runtime=task?.binding.runtime.value;if(isDisposed()||!message||message.status===`accepted`||!runtime)return false;if(definitelyUnsent(task,messageId)){if(task.delivery.edit(messageId)===null)return false}else{trackRoutedMessage(task.delivery,message,runtime.turns?.value);if(await runtime.cancelMessage(messageId)!==true||!canApplyTaskResponse(task))return false}const current=tasks.value.find(candidate=>candidate.id===taskId);updateTask(taskId,{...current.pendingMessageId===messageId?{pendingMessageId:``}:{},...message.status===`uncertain`||current.error===message.error?{error:``,errorCode:``}:{}});return true}async function editMessage(taskId,messageId){const task=tasks.value.find(candidate=>candidate.id===taskId);const message=pendingMessage(task,messageId);if(message?.status!==`failed`||!await cancelMessage(taskId,messageId))return false;updateDraft(taskId,draftWithRestoredMessage(message.text,task.draft));return true}async function stopTask(taskId=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(isDisposed()||!task||!task.busy&&!task.routingMetadata?.assistant_routing_request||stoppingTaskIds.has(taskId))return false;if(!task.conversationId)throw new Error(`Temporary AI is still starting. Wait for it to start, then stop it.`);stoppingTaskIds.add(taskId);try{const runtime=task.binding.runtime.value;const response=await runtime.cancel();if(!canApplyTaskResponse(task))return false;if(response===false||response?.ok===false)throw temporaryAiRequestError(response||{error:runtime.error.value});updateTask(taskId,{busy:false,...response.routingMetadata?{routingMetadata:response.routingMetadata}:{},error:``,status:`interrupted`});return true}catch(error){if(!canApplyTaskResponse(task))return false;if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return false}throw error}finally{stoppingTaskIds.delete(taskId)}}return{cancelMessage,editMessage,send,stopTask}}function useVibe64TemporaryAiRestore({tasks,activeTaskId,open,closedConversationIds,projectSlug,actorKey,assistantReady,currentSessionId,currentSessionsApiPath,isDisposed,bindTask,records}){const{flushPendingSaves,forgetQueuedSaves,removeTask,updateTask}=records;const restorations=new Map;const restoreError=ref(``);let restoreGeneration=0;let restoreRetryTimer;async function restoreTasks(){clearTimeout(restoreRetryTimer);const generation=++restoreGeneration;if(isDisposed()||!actorKey.value||!readRefOrGetterValue(assistantReady))return;const ownerSessionId=currentSessionId();const apiPath=currentSessionsApiPath();if(!ownerSessionId||!apiPath)return;const persistedTasks=tasks.value.filter(task=>task.conversationId);try{const key=JSON.stringify([apiPath,ownerSessionId,actorKey.value]);let restoring=restorations.get(key);if(restoring){await restoring.catch(()=>{});if(!isDisposed()&&generation===restoreGeneration)return restoreTasks();return}restoring=temporaryAiRequest(vibe64TemporaryConversationsPath(apiPath,ownerSessionId),{method:`GET`}).finally(()=>restorations.delete(key));restorations.set(key,restoring);const response=await restoring;if(isDisposed()||generation!==restoreGeneration)return;restoreError.value=``;const records=response.conversations||[];for(const task of persistedTasks)if(!records.some(record=>record.conversationId===task.conversationId))removeTask(task.id);for(const record of records){if(closedConversationIds.has(record.conversationId))continue;const existing=tasks.value.find(task=>task.conversationId===record.conversationId||task.id===record.conversationId);if(existing){updateTask(existing.id,{purposes:record.purposes,canSteer:record.canSteer,title:record.title||``,number:record.number});continue}const task=bindTask({...record,id:record.conversationId,sessionId:ownerSessionId,apiPath,agentSettings:normalizeVibe64AgentSettings(record.agentSettings),attachments:record.attachments||[],pendingMessageId:``,draft:record.draft||``,draftSaveState:record.draft?`saved`:``,messages:record.messages||[],unread:false,busy:temporaryAiTurnIsActive(record.status),nativeWorking:false,recoveryRetryKeys:record.recoveryRetryKeys||[],recoveryOutcome:record.recoveryOutcome===`checking`?`unconfirmed`:record.recoveryOutcome,recoveryOutcomeMessage:record.recoveryOutcome===`checking`?`The Update request was interrupted. Vibe64 is checking its saved result; do not start a second Update yet.`:record.recoveryOutcomeMessage});tasks.value.push(task);if(!activeTaskId.value)activeTaskId.value=task.id}}catch(error){if(isDisposed()||generation!==restoreGeneration)return;if(error.code===`vibe64_agent_write_mode_busy`){restoreError.value=``;restoreRetryTimer=setTimeout(()=>void restoreTasks(),1e3);return}restoreError.value=`Temporary chats could not be restored: ${error.message}`;open.value=true}}function stopRestoring(){clearTimeout(restoreRetryTimer);restoreGeneration+=1}for(const event of[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT])useRealtimeEvent({event,onEvent:()=>void restoreTasks()});const realtimeSocket=useRealtimeSocket({required:false});const restoreAfterReconnect=()=>void restoreTasks();realtimeSocket?.on?.(`connect`,restoreAfterReconnect);onBeforeUnmount(()=>realtimeSocket?.off?.(`connect`,restoreAfterReconnect));useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}})=>!isDisposed()&&payload.projectSlug===projectSlug.value&&payload.sessionId===currentSessionId()&&payload.reason===`temporary-conversation-created`&&Boolean(payload.conversationId)&&!closedConversationIds.has(payload.conversationId)&&!tasks.value.some(task=>task.conversationId===payload.conversationId||task.id===payload.conversationId),onEvent:()=>void restoreTasks()});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}})=>!isDisposed()&&payload.projectSlug===projectSlug.value&&payload.sessionId===currentSessionId()&&[`temporary-conversation-closed`,`temporary-conversation-renamed`,`assistant-routing-changed`].includes(payload.reason)&&Boolean(payload.conversationId),onEvent:({payload})=>{const task=tasks.value.find(candidate=>candidate.conversationId===payload.conversationId||candidate.id===payload.conversationId);if(payload.reason===`temporary-conversation-closed`)removeTask(task?.id||payload.conversationId);else if(payload.reason===`temporary-conversation-renamed`)restoreTasks();else if(task&&payload.assistantRoutingRequest){const route=payload.assistantRoutingRequest;const current=route.status===`working`||assistantRoutingStatusIsPending(route);const sending=task.pendingMessageId&&task.delivery?.find(task.pendingMessageId)?.status===`pending`;updateTask(task.id,{routingMetadata:{...task.routingMetadata,assistant_routing_request:JSON.stringify(route)},...current?{busy:true,messageId:sending?task.pendingMessageId:route.messageId||task.messageId}:{}});task.binding.runtime.value.reload()}}});watch([currentSessionId,currentSessionsApiPath,actorKey],([ownerSessionId,apiPath,actor],[previousSessionId,previousApiPath,previousActor])=>{if(ownerSessionId!==previousSessionId||apiPath!==previousApiPath||actor!==previousActor){restoreGeneration+=1;restoreError.value=``;flushPendingSaves();forgetQueuedSaves();closedConversationIds.clear();for(const task of tasks.value)task.releaseBinding();tasks.value=[];activeTaskId.value=``;open.value=false}},{flush:`sync`});watch([currentSessionId,currentSessionsApiPath,actorKey,()=>readRefOrGetterValue(assistantReady)],()=>void restoreTasks(),{immediate:true});return{restoreError,restoreTasks,stopRestoring}}function useVibe64TemporaryAiTaskRecords({tasks,activeTaskId,open,closingTaskIds,closedConversationIds,isDisposed}){const saveTimers=new Map;const pendingSaveFields=new Map;const unsentSaveFields=new Map;const saveVersions=new Map;const creations=new Map;const saves=new Map;function canApplyTaskResponse(task){return!isDisposed()&&tasks.value.some(current=>current.id===task.id&&current.binding===task.binding)}function updateTask(taskId=``,update={}){if(Object.hasOwn(update,`draft`)&&!Object.hasOwn(update,`status`))update={...update,draftSaveState:`saving`};tasks.value=tasks.value.map(task=>{if(task.id!==taskId)return task;if(Object.hasOwn(update,`draft`))task.draft=update.draft;if(Object.hasOwn(update,`attachments`))task.attachments=update.attachments;return temporaryAiTaskView({...task,...update})});const task=tasks.value.find(task=>task.id===taskId)||null;const changed=[`draft`,`agentSettings`,`attachments`,`recoveryOutcome`,`recoveryRetryKeys`,`recoveryOutcomeMessage`,`recoveryContext`,`recoveryConflictId`,`recoveryRequestId`,`recoveryAutoPaused`].filter(key=>Object.hasOwn(update,key));if(task&&!Object.hasOwn(update,`status`)&&changed.length){saveVersions.set(taskId,{draft:(saveVersions.get(taskId)?.draft||0)+(changed.includes(`draft`)?1:0)});const pending=pendingSaveFields.get(taskId)||new Set;for(const key of changed)pending.add(key);pendingSaveFields.set(taskId,pending);scheduleSave(taskId)}return task}async function ensureConversation(task){const current=tasks.value.find(candidate=>candidate.id===task.id);if(!current)throw temporaryAiRequestError({code:`vibe64_conversation_closed`});if(current.conversationId)return current.conversationId;if(creations.has(task.id))return creations.get(task.id);const creation=temporaryAiRequest(vibe64TemporaryConversationsPath(task.apiPath,task.sessionId),{method:`POST`,body:{conversationId:task.id,...task.includeRecentChatContext?{includeRecentChatContext:true}:{},...task.initialRouting?{assistantRouting:task.initialRouting}:{},agentSettings:current.agentSettings,presentation:temporaryAiTaskPresentation(current)}}).then(created=>{if(canApplyTaskResponse(task))updateTask(task.id,{conversationId:created.conversationId,number:created.number,assistantSelection:created.assistantSelection,routingMetadata:created.routingMetadata,recentChatContext:created.recentChatContext,purposes:created.purposes,goal:created.goal||null});return created.conversationId});creations.set(task.id,creation);try{return await creation}finally{creations.delete(task.id)}}function scheduleSave(taskId,delayMs=250){clearTimeout(saveTimers.get(taskId));saveTimers.set(taskId,setTimeout(()=>{saveTimers.delete(taskId);saveTask(taskId)},delayMs))}async function saveTask(taskId,{flush=false}={}){const currentTask=tasks.value.find(candidate=>candidate.id===taskId);const task=currentTask&&{...currentTask};if(!task||isDisposed()&&!flush||closingTaskIds.has(taskId)||task.state===`closing`)return;const fields=new Set(pendingSaveFields.get(taskId)||[]);if(flush)for(const queued of unsentSaveFields.get(taskId)||[])for(const key of queued)fields.add(key);if(!fields.size)return;const version=saveVersions.get(taskId);pendingSaveFields.delete(taskId);const unsent=unsentSaveFields.get(taskId)||new Set;unsent.add(fields);unsentSaveFields.set(taskId,unsent);const markSent=()=>{unsent.delete(fields);if(!unsent.size&&unsentSaveFields.get(taskId)===unsent)unsentSaveFields.delete(taskId)};const savedPresentation=temporaryAiTaskPresentation(task,fields);const savedSettings=fields.has(`agentSettings`)&&task.settingsToSave;const attachmentIds=fields.has(`attachments`)?task.attachments.map(attachment=>attachment.attachmentId):null;const flushConversation=flush?ensureConversation(task):null;flushConversation?.catch(()=>{});const previous=saves.get(taskId);const operation=(async()=>{await previous;if(!flush&&(!canApplyTaskResponse(task)||tasks.value.find(candidate=>candidate.id===taskId)?.state===`closing`))return false;const conversationId=await(flushConversation||ensureConversation(task));if(!flush&&!canApplyTaskResponse(task))return;markSent();const saved=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{...Object.keys(savedPresentation).length?{presentation:savedPresentation}:{},...savedSettings?{agentSettings:savedSettings}:{},...attachmentIds?{attachmentIds}:{}}});if(saved?.routingMetadata&&canApplyTaskResponse(task))updateTask(taskId,{routingMetadata:saved.routingMetadata,purposes:saved.purposes});if(canApplyTaskResponse(task)&&savedSettings)task.binding.runtime.value.reload();const current=tasks.value.find(candidate=>candidate.id===taskId);if(canApplyTaskResponse(task)&&savedSettings&&current.settingsToSave===savedSettings)updateTask(taskId,{settingsToSave:null});if(canApplyTaskResponse(task)&&fields.has(`draft`)&&version?.draft===saveVersions.get(taskId)?.draft)updateTask(taskId,{draftSaveState:`saved`,...current?.error?.startsWith(`Draft could not be saved:`)?{error:``}:{}});if(canApplyTaskResponse(task)&&version===saveVersions.get(taskId)&&!pendingSaveFields.get(taskId)?.size&&current?.error?.startsWith(`Conversation state could not be saved:`))updateTask(taskId,{error:``});return true})().catch(error=>{if(!canApplyTaskResponse(task))return;const pending=pendingSaveFields.get(taskId)||new Set;for(const key of fields)pending.add(key);pendingSaveFields.set(taskId,pending);if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return}if(error.code===`vibe64_conversation_closing`){pendingSaveFields.delete(taskId);updateTask(taskId,{state:`closing`,draftSaveState:`failed`,error:`This conversation is closing; retry Close after cleanup.`});return false}if(fields.has(`draft`)&&version?.draft===saveVersions.get(taskId)?.draft||version===saveVersions.get(taskId))updateTask(taskId,{...fields.has(`draft`)?{draftSaveState:`failed`}:{},error:`${fields.has(`draft`)?`Draft`:`Conversation state`} could not be saved: ${error.message}`});if(error.code===`vibe64_agent_write_mode_busy`&&!closingTaskIds.has(taskId))scheduleSave(taskId,1e3);return false});saves.set(taskId,operation);try{return await operation}finally{markSent();if(saves.get(taskId)===operation)saves.delete(taskId)}}function flushPendingSaves(){for(const taskId of new Set([...saveTimers.keys(),...unsentSaveFields.keys()]))saveTask(taskId,{flush:true})}function cancelScheduledSave(taskId){clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId)}function saveInFlight(taskId){return saves.get(taskId)}function creationInFlight(taskId){return creations.get(taskId)}function forgetQueuedSaves(){for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear()}function removeTask(taskId){const task=tasks.value.find(candidate=>candidate.id===taskId);closedConversationIds.add(task?.conversationId||taskId);clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId);pendingSaveFields.delete(taskId);saveVersions.delete(taskId);task?.releaseBinding();tasks.value=tasks.value.filter(candidate=>candidate.id!==taskId);if(activeTaskId.value===taskId)activeTaskId.value=tasks.value[0]?.id||``;if(!tasks.value.length)open.value=false}return{canApplyTaskResponse,cancelScheduledSave,creationInFlight,ensureConversation,flushPendingSaves,forgetQueuedSaves,removeTask,saveInFlight,saveTask,updateTask}}function useVibe64TemporaryAi({active=()=>true,agentSettings=()=>defaultVibe64AgentSettings(),assistantReady=()=>false,onTaskFinished=null,operationBusy=()=>false,sessionId,sessionsApiPath}={}){const tasks=ref([]);const activeTaskId=ref(``);const open=ref(false);const closedConversationIds=new Set;const projectSlug=useVibe64ProjectSlug();const viewer=hasInjectionContext()?inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`}):{actorKey:`local`};const actorKey=computed(()=>readRefOrGetterValue(viewer)?.actorKey||``);const acquireConversation=useAssistantConversationFactory({...vibe64AssistantConversationOptions(),actorKey:()=>actorKey.value,queueWhileSending:true,clearDraftOn:`dispatch`,presentation:{assistantLabel:`Temporary AI`,variant:`task`,visible:true,userMessageFormat:`plain`,systemLabel:`System`}});const closingTaskIds=new Set;const stoppingTaskIds=new Set;let disposed=false;const isDisposed=()=>disposed;const records=useVibe64TemporaryAiTaskRecords({tasks,activeTaskId,open,closingTaskIds,closedConversationIds,isDisposed});const{canApplyTaskResponse,cancelScheduledSave,creationInFlight,ensureConversation,flushPendingSaves,forgetQueuedSaves,removeTask,saveInFlight,saveTask,updateTask}=records;const activeTask=computed(()=>tasks.value.find(task=>task.id===activeTaskId.value)||tasks.value[0]||null);const visibleTaskId=computed(()=>readRefOrGetterValue(active)&&open.value?activeTask.value?.id||``:``);const hasUnreadMessages=computed(()=>tasks.value.some(task=>task.unread));watch(visibleTaskId,taskId=>{if(taskId)updateTask(taskId,{unread:false})},{immediate:true});const updateRepairTask=computed(()=>[...tasks.value].reverse().find(task=>task.sessionId===currentSessionId()&&task.recoveryOperation===`update`&&task.recoveryOutcome!==`succeeded`)||null);function currentSessionId(){return normalizeText$1(readRefOrGetterValue(sessionId))}function currentSessionsApiPath(){return normalizeText$1(readRefOrGetterValue(sessionsApiPath))}function bindTask(value){const taskId=value.id;let binding;binding=markRaw(acquireConversation({conversationId:temporaryConversationId({projectSlug:projectSlug.value,sessionId:value.sessionId,conversationId:taskId}),active:()=>!disposed&&Boolean(tasks.value.find(task=>task.id===taskId&&task.binding===binding)?.conversationId)}));const runtime=binding.runtime.value;runtime.draft.value=value.draft||``;runtime.draftAttachments.value=value.attachments||[];let observedSnapshot=false;const stop=watch([runtime.snapshot,runtime.turns,runtime.error,()=>runtime.delivery.state.sending],([snapshot,turns,error,sending],[,previousTurns=[]]=[])=>{const task=tasks.value.find(task=>task.id===taskId&&task.binding===binding);if(!task||disposed)return;const previous=observedSnapshot?temporaryAiMessages(previousTurns):value.messages||[];if(snapshot)observedSnapshot=true;const newReply=temporaryAiMessages(turns).some(message=>message.role===`assistant`&&normalizeText$1(message.text)&&!previous.some(old=>old.id===message.id&&old.text===message.text));const observed=snapshot?.presentation;const canApplyProgress=!closingTaskIds.has(taskId)&&!stoppingTaskIds.has(taskId)&&!(task.status===`interrupted`&&!task.busy);const update={unread:visibleTaskId.value!==taskId&&(task.unread===true||newReply)};if(observed){for(const field of[`routingMetadata`,`purposes`,`canSteer`,`assistantSelection`,`goal`])if(Object.hasOwn(observed,field))update[field]=observed[field];if(!observed.readError)update.nativeWorking=temporaryAiTurnIsActive(normalizeText$1(observed.status));const route=assistantRoutingRequestForDisplay(observed.routingMetadata);const requests=(snapshot.conversationLog||[]).map(turn=>turn.user?.messageId).filter(Boolean);const superseded=requests.includes(task.messageId)&&requests.at(-1)!==task.messageId;const sameRequest=!task.messageId||superseded||observed.messageId===task.messageId||route?.messageId===task.messageId;if(canApplyProgress&&!sending&&(!task.busy||sameRequest)){if(superseded&&observed.messageId)update.messageId=observed.messageId;if(!observed.readError){update.status=normalizeText$1(observed.status)||task.status;update.busy=temporaryAiTurnIsActive(update.status);update.phase=update.busy?normalizeText$1(snapshot.phase):``;update.runId=observed.runId||task.runId;update.outcomeKind=normalizeText$1(observed.outcome?.kind)}if(!observed.deferredReconciliation)update.error=normalizeText$1(observed.error||error)}if(snapshot.pendingRequest&&!task.pendingMessageId)update.pendingMessageId=snapshot.pendingRequest.messageId}else if(error&&canApplyProgress)update.error=error;const finished=task.busy&&update.busy===false&&update.status!==`interrupted`;updateTask(taskId,update);if(finished)reportTaskFinished(taskId)},{flush:`sync`});return temporaryAiTaskView({...value,binding,releaseBinding:markRaw(()=>{stop();binding.release()})})}function reportTaskFinished(taskId=``){if(typeof onTaskFinished!==`function`)return;const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;try{onTaskFinished(Object.freeze({completionMessage:normalizeText$1(task.completionMessage),dedupeKey:normalizeText$1(task.dedupeKey),error:normalizeText$1(task.error),failureMessage:normalizeText$1(task.failureMessage),id:task.id,outcomeKind:normalizeText$1(task.outcomeKind),recoveryOperation:normalizeText$1(task.recoveryOperation),runConflictId:normalizeText$1(task.runConflictId),runId:task.runId,sessionId:task.sessionId,status:normalizeText$1(task.status),title:task.label}))}catch{}}function openTask({completionMessage=``,dedupeKey=``,displayMessage=``,draft=``,failureMessage=``,nextStepMessage=``,recoveryNotice=``,recoveryOperation=``,recoveryConflictId=``,recoveryContext=``,initialRouting=null,includeRecentChatContext=false,title=``}={}){const task=bindTask({initialRouting,includeRecentChatContext,agentSettings:normalizeVibe64AgentSettings(readRefOrGetterValue(agentSettings)),apiPath:currentSessionsApiPath(),attachments:[],busy:false,nativeWorking:false,completionMessage:normalizeText$1(completionMessage),conversationId:``,dedupeKey:normalizeText$1(dedupeKey),displayMessage:normalizeText$1(displayMessage),draft:normalizeText$1(draft),error:``,failureMessage:normalizeText$1(failureMessage),id:temporaryAiId(`temporary-ai`),messages:[],unread:false,nextStepMessage:normalizeText$1(nextStepMessage),pendingMessageId:``,recoveryOutcome:``,recoveryOutcomeMessage:``,recoveryNotice:normalizeText$1(recoveryNotice),recoveryOperation:recoveryOperation===`update`?`update`:``,recoveryConflictId:normalizeText$1(recoveryConflictId),recoveryContext:normalizeText$1(recoveryContext),recoveryRetryKeys:[],recoveryAutoPaused:false,runId:``,runConflictId:``,sessionId:currentSessionId(),status:`ready`,title:normalizeText$1(title),number:Math.max(0,...tasks.value.map(candidate=>candidate.number||0))+1});tasks.value=[...tasks.value,task];activeTaskId.value=task.id;open.value=true;if(task.draft)updateTask(task.id,{draft:task.draft});return task}async function createTask(options={}){const task=tasks.value.find(value=>value.id===options.taskId)||openTask(options);try{await ensureConversation(task);if(canApplyTaskResponse(task))updateTask(task.id,{error:``});return task}catch(error){if(canApplyTaskResponse(task))updateTask(task.id,{error:error.message});error.taskId=task.id;throw error}}async function startTask(options={}){const input=options&&typeof options===`object`&&!Array.isArray(options)?options:{};const message=normalizeText$1(input.message||input.draft);if(!message||!currentSessionId()||!currentSessionsApiPath())return Object.freeze({ok:false,reused:false,started:false,taskId:``});const dedupeKey=normalizeText$1(input.dedupeKey);const repair=input.recoveryOperation===`update`?updateRepairTask.value:null;if(repair){selectTask(repair.id);if(repair.busy||repair.recoveryOutcome===`checking`||closingTaskIds.has(repair.id))return{ok:true,reused:true,started:false,taskId:repair.id};if((repair.draft.trim()||repair.attachments.length)&&!repair.pendingMessageId)return{ok:true,reused:true,started:false,taskId:repair.id};if(!repair.pendingMessageId)updateTask(repair.id,{recoveryContext:message,recoveryConflictId:normalizeText$1(input.recoveryConflictId),recoveryRetryKeys:[]});const started=await send(repair.id,repair.pendingMessageId?{retryMessageId:repair.pendingMessageId}:{generatedMessage:{message,displayMessage:`Continue repairing this Update.`}});return{ok:started,reused:true,started,taskId:repair.id}}const existingTask=dedupeKey?[...tasks.value].reverse().find(task=>task.dedupeKey===dedupeKey&&(task.busy||task.status===`failed`&&normalizeText$1(task.pendingMessageId))):null;if(existingTask){selectTask(existingTask.id);const started=existingTask.busy?false:await send(existingTask.id,{retryMessageId:existingTask.pendingMessageId});return Object.freeze({ok:existingTask.busy||started,reused:true,started,taskId:existingTask.id})}const task=openTask({...input,initialRouting:{mode:`fix`,review:false},dedupeKey,draft:``,displayMessage:``,recoveryContext:message});const started=await send(task.id,{generatedMessage:{message,displayMessage:input.displayMessage||message}});return Object.freeze({ok:started,reused:false,started,taskId:task.id})}function selectTask(taskId=``){if(tasks.value.some(task=>task.id===taskId)){activeTaskId.value=taskId;open.value=true}}function showWorkspace(){if(tasks.value.length===0)return openTask();if(!tasks.value.some(task=>task.id===activeTaskId.value))activeTaskId.value=tasks.value[0].id;open.value=true;return activeTask.value}async function renameTask(taskId=``,title=``){const task=tasks.value.find(candidate=>candidate.id===taskId);const conversationId=await ensureConversation(task);const result=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{presentation:{title}}});if(canApplyTaskResponse(task))updateTask(taskId,{title:result.title})}function updateDraft(taskId=``,draft=``){updateTask(taskId,{displayMessage:``,draft:String(draft||``)})}async function updateRouting(taskId,preferences){const task=tasks.value.find(candidate=>candidate.id===taskId);const conversationId=await ensureConversation(task);const result=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{assistantRouting:preferences}});if(canApplyTaskResponse(task)){updateTask(taskId,{routingMetadata:result.routingMetadata,purposes:result.purposes});task.binding.runtime.value.reload()}return result}function updateAgentSetting(taskId=``,parameterId=``,value=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;const settings=normalizeVibe64AgentSettings({...task.agentSettings,[parameterId]:value});updateTask(taskId,{agentSettings:settings,settingsToSave:settings})}function reportRecoveryOutcome(taskId=``,{message=``,status=``,retryMessage=``,retryKey=``,recoveryConflictId=``,recoveryRequestId=``}={}){const outcome=normalizeText$1(status);const task=tasks.value.find(task=>task.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||![`checking`,`failed`,`succeeded`,`unconfirmed`].includes(outcome))return false;const messageId=`recovery_${task.runId||task.id}`;updateTask(taskId,{...outcome===`succeeded`&&!task.messages.some(({id})=>id===messageId)?{recoveryMessage:{id:messageId,role:`system`,text:normalizeText$1(message)||`Repair verified.`}}:{},recoveryOutcome:outcome,...recoveryRequestId?{recoveryRequestId}:{},recoveryAutoPaused:false,recoveryOutcomeMessage:normalizeText$1(message),...outcome!==`checking`?{recoveryContext:outcome===`failed`?retryMessage||message:message,recoveryConflictId:normalizeText$1(recoveryConflictId)}:{}});if(outcome===`failed`&&task.recoveryOperation===`update`&&retryMessage&&retryKey&&!readRefOrGetterValue(operationBusy)&&!stoppingTaskIds.has(taskId)&&!task.busy&&task.status!==`interrupted`){const retries=task.recoveryRetryKeys||[];if(retries.includes(retryKey)||retries.length>=3)updateTask(taskId,{recoveryAutoPaused:true,recoveryOutcomeMessage:`${message}\nAutomatic repair paused after repeated conflicts. Review the result, then continue here or check Update again.`});else if(!task.draft.trim()&&!task.attachments.length){updateTask(taskId,{recoveryRetryKeys:[...retries,retryKey]});send(taskId,{generatedMessage:{message:retryMessage,displayMessage:`Continue repairing the remaining conflicts.`}})}}return true}function updateAttachments(taskId=``,attachments=[]){if(!tasks.value.find(candidate=>candidate.id===taskId))return;updateTask(taskId,{attachments:Array.isArray(attachments)?attachments:[]})}async function closeTask(taskId=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||stoppingTaskIds.has(taskId))return;if(readRefOrGetterValue(operationBusy)||task.recoveryOutcome===`checking`)throw new Error(`Wait for Update to finish before closing this repair.`);closingTaskIds.add(taskId);try{cancelScheduledSave(taskId);const save=saveInFlight(taskId);if(save)await save;const conversationId=task.conversationId||(creationInFlight(taskId)?await creationInFlight(taskId):``);if(conversationId)await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`DELETE`});if(disposed)return;removeTask(taskId)}catch(error){if(!canApplyTaskResponse(task))return;updateTask(taskId,{error:error.message});throw error}finally{closingTaskIds.delete(taskId)}}function closeWorkspace(){open.value=false}const{cancelMessage,editMessage,send,stopTask}=useVibe64TemporaryAiMessages({tasks,closingTaskIds,stoppingTaskIds,isDisposed,operationBusy,records,reportTaskFinished,updateDraft});const{restoreError,restoreTasks,stopRestoring}=useVibe64TemporaryAiRestore({tasks,activeTaskId,open,closedConversationIds,projectSlug,actorKey,assistantReady,currentSessionId,currentSessionsApiPath,isDisposed,bindTask,records});onBeforeUnmount(()=>{flushPendingSaves();disposed=true;stopRestoring();forgetQueuedSaves();for(const task of tasks.value)task.releaseBinding()});return{activeTask,activeTaskId,closeTask,closeWorkspace,createTask,cancelMessage,editMessage,hasUnreadMessages,open,openTask,renameTask,reportRecoveryOutcome,saveTask,restoreError,restoreTasks,selectTask,send,showWorkspace,startTask,stopTask,tasks,updateAgentSetting,updateAttachments,updateDraft,updateRouting,updateRepairTask}}function useVibe64TemporaryAiColleagueView({props,emit,temporary,hostConversation,selectionRevision}){const colleagueView=inject(VIBE64_COLLEAGUE_VIEW_KEY,null);const activeTask=temporary.activeTask;const selectedView={get projectSlug(){return props.projectSlug},get sessionId(){return props.sessionId},get ready(){return props.assistantReady},get selectionRevision(){return selectionRevision.value},get hostConversationSelected(){return Boolean(hostConversation?.value?.selected)},get temporarySelected(){return temporary.open.value&&!hostConversation?.value?.selected},get conversationId(){return this.temporarySelected?activeTask.value?.conversationId||``:``},openFile(path){return typeof props.openFile===`function`&&props.openFile(path)===true},async sendLessonMessage(text){return typeof props.sendLessonMessage===`function`&&await props.sendLessonMessage(text)===true},async openConversation(conversationId,isCurrent=()=>true){if(!props.sessionSelected||!props.assistantReady||!isCurrent())throw new Error(`This session is no longer available.`);if(!conversationId){hostConversation?.value?.close();temporary.closeWorkspace();emit(`select-main-chat`);return}const projectSlug=props.projectSlug;const sessionId=props.sessionId;const revision=selectionRevision.value;const hostSelected=hostConversation?.value?.selected;await temporary.restoreTasks();if(!isCurrent()||!props.sessionSelected||!props.assistantReady||props.projectSlug!==projectSlug||props.sessionId!==sessionId||selectionRevision.value!==revision||hostConversation?.value?.selected!==hostSelected)throw new Error(`The selected conversation changed before it opened.`);const task=temporary.tasks.value.find(entry=>entry.conversationId===conversationId);if(!task)throw new Error(temporary.restoreError.value||`The temporary conversation could not be opened.`);hostConversation?.value?.close();temporary.selectTask(task.id);await nextTick();if(!isCurrent()||!props.sessionSelected||props.sessionId!==sessionId||selectionRevision.value!==revision||temporary.activeTaskId.value!==task.id||!temporary.open.value)throw new Error(`The selected conversation changed before it opened.`)}};watchEffect(()=>{if(!colleagueView)return;if(props.sessionSelected)colleagueView.value=selectedView;else if(colleagueView.value===selectedView)colleagueView.value=null});onBeforeUnmount(()=>{selectionRevision.value+=1;if(colleagueView?.value===selectedView)colleagueView.value=null})}function useVibe64TemporaryAiNewTask({props,temporary,hostConversation,selectionRevision,selectMainChat}){const newTaskOpen=ref(false);const newTaskReturnsToMain=ref(false);const includeRecentChatContext=ref(false);const creatingTask=ref(false);const creatingTaskId=ref(``);const createTaskError=ref(``);watch(()=>[props.projectSlug,props.sessionId],()=>{selectionRevision.value+=1;newTaskOpen.value=false;newTaskReturnsToMain.value=false;creatingTask.value=false;creatingTaskId.value=``});watch(newTaskOpen,value=>{if(value){includeRecentChatContext.value=false;createTaskError.value=``;creatingTaskId.value=``}});async function openNewTask(){newTaskReturnsToMain.value=!temporary.activeTask.value&&!hostConversation?.value?.selected;if(props.mainHasMessages){newTaskOpen.value=true;return}includeRecentChatContext.value=false;createTaskError.value=``;creatingTaskId.value=``;await createTask();if(!createTaskError.value)return;const failure={message:createTaskError.value,taskId:creatingTaskId.value};newTaskOpen.value=true;await nextTick();createTaskError.value=failure.message;creatingTaskId.value=failure.taskId}function cancelNewTask(){if(creatingTask.value)return;newTaskOpen.value=false;if(newTaskReturnsToMain.value)selectMainChat()}async function createTask(){const revision=++selectionRevision.value;creatingTask.value=true;createTaskError.value=``;hostConversation?.value?.close();try{await temporary.createTask({includeRecentChatContext:includeRecentChatContext.value,taskId:creatingTaskId.value});if(revision===selectionRevision.value)newTaskOpen.value=false}catch(error){if(revision===selectionRevision.value){creatingTaskId.value=error.taskId||``;createTaskError.value=error.message||`Temporary chat could not be created.`}}finally{if(revision===selectionRevision.value)creatingTask.value=false}}return{cancelNewTask,createTask,createTaskError,creatingTask,creatingTaskId,includeRecentChatContext,newTaskOpen,openNewTask}}function useVibe64TemporaryAiRename(temporary){const renamingTaskId=ref(``);const renameValue=ref(``);const renameError=ref(``);const renamePending=ref(false);const renamingTask=computed(()=>temporary.tasks.value.find(task=>task.id===renamingTaskId.value)||null);function openRename(task){renameValue.value=task.title;renameError.value=``;renamingTaskId.value=task.id}async function submitRename(){renamePending.value=true;renameError.value=``;try{await temporary.renameTask(renamingTaskId.value,renameValue.value);renamingTaskId.value=``}catch(error){renameError.value=error.message||`The chat could not be renamed.`}finally{renamePending.value=false}}return{openRename,renameError,renamePending,renameValue,renamingTask,renamingTaskId,submitRename}}function useVibe64TemporaryAiStopAndClose({temporary,selectionRevision,emit}){const closeTaskId=ref(``);const closingTask=ref(false);const stoppingTaskId=ref(``);const actionErrors=ref({});const taskToClose=computed(()=>temporary.tasks.value.find(task=>task.id===closeTaskId.value));function requestCloseTask(task){if(task.recoveryOperation===`update`&&task.recoveryOutcome!==`succeeded`&&(task.busy||task.messages.length)){closeTaskId.value=task.id;return}closeTask(task.id)}async function closeTask(taskId,{returnToMainChat=false}={}){selectionRevision.value+=1;closingTask.value=true;delete actionErrors.value[taskId];try{await temporary.closeTask(taskId);closeTaskId.value=``;if(returnToMainChat&&!temporary.tasks.value.some(task=>task.id===taskId))emit(`select-main-chat`)}catch(error){actionErrors.value[taskId]=error?.message||`Temporary AI could not be closed. The chat is still open; try again.`}finally{closingTask.value=false}}async function stopTask(taskId){stoppingTaskId.value=taskId;delete actionErrors.value[taskId];try{await temporary.stopTask(taskId)}catch(error){actionErrors.value[taskId]=error?.message||`Temporary AI could not be stopped. Try again.`}finally{stoppingTaskId.value=``}}return{actionErrors,closeTask,closeTaskId,closingTask,requestCloseTask,stopTask,stoppingTaskId,taskToClose}}function afterBrowserPaint(){if(typeof globalThis.requestAnimationFrame!==`function`)return Promise.resolve();return new Promise(resolve=>{globalThis.requestAnimationFrame(()=>resolve())})}function rememberTaskElement(elements,taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){elements.set(normalizedTaskId,element);return}elements.delete(normalizedTaskId)}function useVibe64TemporaryAiTaskElements({workspace,activeTask}){const taskTabButtons=new Map;const taskPrompts=new Map;const taskSendButtons=new Map;function taskPrompt(taskId=``){return taskPrompts.get(String(taskId||``))||null}async function revealTaskTab(taskId=``,{focus=false}={}){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return false;await nextTick();await afterBrowserPaint();const button=taskTabButtons.get(normalizedTaskId);button?.scrollIntoView?.({block:`nearest`,inline:`nearest`});if(focus)(button||workspace.value)?.focus?.({preventScroll:true});return Boolean(button)}function focusSendButton(){taskSendButtons.get(activeTask.value?.id)?.focus?.()}return{focusSendButton,revealTaskTab,setTaskPrompt:(taskId,element)=>rememberTaskElement(taskPrompts,taskId,element),setTaskSendButton:(taskId,element)=>rememberTaskElement(taskSendButtons,taskId,element),setTaskTabButton:(taskId,element)=>rememberTaskElement(taskTabButtons,taskId,element),taskPrompt}}function presenceText(value=``){return String(value??``).trim()}function presenceTimestamp(value=``){const timestamp=Date.parse(String(value||``));return Number.isFinite(timestamp)?timestamp:0}function sessionPresencePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/presence`)}function normalizedRemotePresence(payload={},now=Date.now()){const actorId=presenceText(payload.actorId);const displayName=presenceText(payload.displayName)||`Another user`;const originId=presenceText(payload.originId);const projectSlug=presenceText(payload.projectSlug);const sessionId=presenceText(payload.sessionId);const conversationId=presenceText(payload.conversationId);const sequence=Number(payload.sequence);const updatedAt=presenceTimestamp(payload.updatedAt);const expiresAt=presenceTimestamp(payload.expiresAt);if(!actorId||!originId||!projectSlug||!sessionId||!Number.isSafeInteger(sequence)||sequence<1||!updatedAt||!expiresAt)return null;const typing=payload.typing===true&&expiresAt>now;return Object.freeze({actorId,conversationId,displayName:Array.from(displayName).slice(0,80).join(``)||`Another user`,expiresAt,originId,projectSlug,sequence,sessionId,typing,updatedAt})}function typingPresenceLabel(people=[]){const visible=Array.isArray(people)?people:[];if(visible.length===1)return`${presenceText(visible[0]?.displayName)||`Another user`} is typing…`;return visible.length>1?`${visible.length} people are typing…`:``}function useVibe64SessionTypingPresence({active=true,conversationId=``,projectSlug=``,sessionId=``,sessionsApiPath=``}={},{clearTimer=clearTimeout,debounceMs=VIBE64_SESSION_PRESENCE_DEBOUNCE_MS,idleMs=VIBE64_SESSION_PRESENCE_IDLE_MS,now=()=>Date.now(),request=(path,options)=>getHttpWebClient().request(path,options),setTimer=setTimeout}={}){const originId=vibe64BrowserTabOriginId();const remoteEntries=shallowRef(new Map);const realtimeSocket=useRealtimeSocket({required:false});let debounceTimer=null;let publishing=false;let localSequence=Math.max(0,Math.floor(Number(now())||0));const currentContext=computed(()=>Object.freeze({active:readRefOrGetterValue(active)!==false,conversationId:presenceText(readRefOrGetterValue(conversationId)),projectSlug:presenceText(readRefOrGetterValue(projectSlug)),sessionId:presenceText(readRefOrGetterValue(sessionId)),sessionsApiPath:presenceText(readRefOrGetterValue(sessionsApiPath))}));const eligible=computed(()=>Boolean(currentContext.value.active&&currentContext.value.projectSlug&&currentContext.value.sessionId&&currentContext.value.sessionsApiPath));const typingPeople=computed(()=>{const byActor=new Map;for(const entry of remoteEntries.value.values()){if(!entry.typing||entry.expiresAt<=now())continue;byActor.set(entry.actorId,{actorId:entry.actorId,displayName:entry.displayName})}return[...byActor.values()].sort((left,right)=>left.displayName.localeCompare(right.displayName))});const typingLabel=computed(()=>typingPresenceLabel(typingPeople.value));function requestPresence(){debounceTimer=null;if(!eligible.value||publishing)return;const context=currentContext.value;localSequence+=1;publishing=true;request(sessionPresencePath(context.sessionsApiPath,context.sessionId),{body:{...context.conversationId?{conversationId:context.conversationId}:{},originId,sequence:localSequence,typing:true},method:`POST`,timeoutMs:5e3}).catch(()=>null).finally(()=>{publishing=false})}function stopTyping(){clearTimer(debounceTimer);debounceTimer=null}function noteInputActivity(){if(!eligible.value||debounceTimer||publishing)return;debounceTimer=setTimer(requestPresence,Math.max(0,Number(debounceMs)||0))}function clearRemotePresence(){for(const entry of remoteEntries.value.values())if(entry.timer)clearTimer(entry.timer);remoteEntries.value=new Map}function removeRemotePresence(key,expected=null){const current=remoteEntries.value.get(key);if(!current||expected&&current!==expected)return;if(current.timer)clearTimer(current.timer);const next=new Map(remoteEntries.value);next.delete(key);remoteEntries.value=next}function applyRemotePresence(payload={}){const entry=normalizedRemotePresence(payload,now());const context=currentContext.value;if(!entry||entry.originId===originId||entry.projectSlug!==context.projectSlug||entry.sessionId!==context.sessionId||entry.conversationId!==context.conversationId)return;const key=`${entry.actorId}\0${entry.originId}`;const current=remoteEntries.value.get(key);if(current&&(entry.sequence<current.sequence||entry.sequence===current.sequence&&entry.updatedAt<current.updatedAt))return;if(current?.timer)clearTimer(current.timer);const stored={...entry,timer:null};stored.timer=setTimer(()=>{removeRemotePresence(key,stored)},entry.typing?Math.max(1,entry.expiresAt-now()):Math.max(1,Number(idleMs)||1e4));const next=new Map(remoteEntries.value);next.set(key,stored);remoteEntries.value=next}function handleRealtimeDisconnect(){clearRemotePresence()}useRealtimeEvent({enabled:eligible,event:VIBE64_SESSION_PRESENCE_CHANGED_EVENT,onEvent:({payload})=>applyRemotePresence(payload)});realtimeSocket.on(`disconnect`,handleRealtimeDisconnect);watch(()=>[currentContext.value.active,currentContext.value.conversationId,currentContext.value.projectSlug,currentContext.value.sessionId,currentContext.value.sessionsApiPath].join(`\0`),()=>{stopTyping();clearRemotePresence()},{flush:`sync`});onScopeDispose(()=>{stopTyping();clearRemotePresence();realtimeSocket.off(`disconnect`,handleRealtimeDisconnect)});return Object.freeze({applyRemotePresence,blur:stopTyping,noteInputActivity,stop:stopTyping,submit:stopTyping,typingLabel,typingPeople})}var _hoisted_1$42=[`aria-label`];var _hoisted_2$35={key:1};var _hoisted_3$30={key:0};var _hoisted_4$23={key:0};var _hoisted_5$20={key:1,class:`vibe64-temporary-ai__feedback`};var _hoisted_6$17={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _hoisted_7$15=[`role`];var _hoisted_8$15={key:0,class:`text-caption`,role:`status`,"aria-live":`polite`};var _hoisted_9$11={class:`vibe64-temporary-ai__composer-actions`};var _hoisted_10$10={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _sfc_main$48={__name:`Vibe64TemporaryAiWorkspace`,props:{openFile:{type:Function,default:null},sendLessonMessage:{type:Function,default:null},active:Boolean,sessionSelected:Boolean,assistantReady:Boolean,canConfigureRouting:Boolean,connectionUnavailable:Boolean,projectSlug:{type:String,default:``},previewAttachmentState:{type:Object,default:()=>({})},repositoryBusy:Boolean,updateDisabled:Boolean,canReviewUpdate:Boolean,updateDisabledReason:{type:String,default:``},workspaceSetupStatus:{type:String,default:``},assistantSelection:{default:()=>({}),type:Object},sessionId:{default:``,type:String},mainHasMessages:{default:false,type:Boolean},sessionsApiPath:{default:``,type:[String,Object,Function]}},emits:[`select-main-chat`,`task-finished`,`check-update`,`review-update`],setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const props=__props;const hostConversation=inject(VIBE64_HOST_CONVERSATION_KEY,null);const hostComposer=ref(null);const selectionRevision=ref(0);function selectMainChat(){selectionRevision.value+=1;hostConversation?.value?.close();emit(`select-main-chat`)}function selectTask(id){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.selectTask(id)}function openTask(options){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.openTask(options)}function closeWorkspace(){selectionRevision.value+=1;hostConversation?.value?.close();temporary.closeWorkspace()}const workspace=ref(null);const completionMessage=ref(null);const returnToMainButton=ref(null);const resolvedSessionsApiPath=computed(()=>readRefOrGetterValue(props.sessionsApiPath));const temporaryAiFeedback=useUiFeedback({source:`vibe64.temporary-ai.feedback`});const temporary=useVibe64TemporaryAi({active:()=>props.active&&!hostConversation?.value?.selected,agentSettings:computed(()=>({providerId:props.assistantSelection.engineId,model:props.assistantSelection.modelId,thinking:props.assistantSelection.variantId})),assistantReady:()=>props.assistantReady,operationBusy:()=>props.repositoryBusy,onTaskFinished(task={}){emit(`task-finished`,task);if(props.active&&temporary.open.value&&temporary.activeTaskId.value===task.id)return;if(task.status===`completed`){if(task.outcomeKind===`continue`||task.recoveryOperation===`update`)return;temporaryAiFeedback.success(task.completionMessage||`${task.title} finished. Review the result before continuing.`);return}if(task.status===`failed`&&task.failureMessage){temporaryAiFeedback.error(task.failureMessage);return}temporaryAiFeedback.error(task.error,`${task.title} stopped with an error.`)},sessionId:computed(()=>props.sessionId),sessionsApiPath:resolvedSessionsApiPath});const{cancelNewTask,createTask,createTaskError,creatingTask,creatingTaskId,includeRecentChatContext,newTaskOpen,openNewTask}=useVibe64TemporaryAiNewTask({props,temporary,hostConversation,selectionRevision,selectMainChat});const{openRename,renameError,renamePending,renameValue,renamingTask,renamingTaskId,submitRename}=useVibe64TemporaryAiRename(temporary);const customOpen=ref(false);const customTarget=ref(null);const activeTask=temporary.activeTask;watch(()=>activeTask.value?.id,()=>{customOpen.value=false});const{focusSendButton,revealTaskTab,setTaskPrompt,setTaskSendButton,setTaskTabButton,taskPrompt}=useVibe64TemporaryAiTaskElements({workspace,activeTask});const routingRequest=computed(()=>assistantRoutingRequestForDisplay(activeTask.value?.routingMetadata));const modeSession=computed(()=>({sessionId:props.sessionId,assistantSelection:activeTask.value?.assistantSelection||props.assistantSelection,agentSession:{goal:activeTask.value?.goal||null},metadata:activeTask.value?.routingMetadata||{}}));const activeTaskError=computed(()=>{if([`failed`,`uncertain`].includes(routingRequest.value?.status)&&routingRequest.value.error===activeTask.value?.error)return``;if(activeTask.value?.delivery.state.messages.some(message=>message.status===`failed`&&message.error===activeTask.value.error))return``;if(props.connectionUnavailable&&activeTask.value?.errorCode===`vibe64_agent_write_mode_busy`)return``;return activeTask.value?.error||taskAccessReason(activeTask.value)});const updateRepairVisible=computed(()=>temporary.open.value&&activeTask.value?.recoveryOperation===`update`&&activeTask.value.recoveryOutcome!==`succeeded`);const closeTitleId=useId();const{actionErrors,closeTask,closeTaskId,closingTask,requestCloseTask,stopTask,stoppingTaskId,taskToClose}=useVibe64TemporaryAiStopAndClose({temporary,selectionRevision,emit});const activeTaskRecoveryChecking=computed(()=>activeTask.value?.recoveryOutcome===`checking`);const typingPresence=useVibe64SessionTypingPresence({active:computed(()=>props.active&&temporary.open.value&&Boolean(activeTask.value?.conversationId)&&!hostConversation?.value?.selected&&!taskInputDisabled(activeTask.value)&&!closingTask.value),conversationId:computed(()=>activeTask.value?.conversationId||``),projectSlug:computed(()=>props.projectSlug),sessionId:computed(()=>props.sessionId),sessionsApiPath:resolvedSessionsApiPath});const activityLabel=computed(()=>{if(activeTaskRecoveryChecking.value)return`Checking Update…`;if(activeTask.value?.delivery.state.sending)return`Sending to assistant…`;if(activeTask.value?.busy&&activeTask.value.phase===`background`)return`Reply ready · background task still running…`;if(activeTask.value?.busy)return`AI is working…`;return typingPresence.typingLabel.value});const activeTaskRecoveryVerified=computed(()=>activeTask.value?.recoveryOutcome===`succeeded`);const recoveryMessageId=computed(()=>activeTaskRecoveryVerified.value?`recovery_${activeTask.value.runId||activeTask.value.id}`:``);const updateCompletionText=computed(()=>{if(activeTask.value?.recoveryOperation!==`update`)return``;return`${{running:`Session updated. Preparing workspace…`,succeeded:`Session updated and workspace ready.`,failed:`Session updated. Workspace preparation failed; review the setup issue above.`,ambiguous:`Session updated. Workspace preparation needs a choice; review the setup issue above.`,required:`Session updated. Workspace preparation is still required.`}[props.workspaceSetupStatus]||`Session updated.`} Your changes were preserved. Nothing was pushed.`});const canReturnToMainChat=computed(()=>activeTaskRecoveryVerified.value&&!activeTask.value.busy&&(activeTask.value.recoveryOperation!==`update`||[`succeeded`,`unconfigured`].includes(props.workspaceSetupStatus)));function taskAccessReason(task){if(!task)return``;if(task.busy)return task.canSteer===false?`You cannot steer this turn's AI connection. You can send a new request when it finishes.`:``;const mode=assistantRoutingFromMetadata(task.routingMetadata||{})?.mode;const decision=task.purposes?.[mode];return decision?.available===false?decision.message||`This mode is unavailable. Choose another chat mode.`:``}function taskInputDisabled(task){return props.repositoryBusy||task.state===`closing`||task.status===`closing`||task.recoveryOutcome===`checking`||Boolean(taskAccessReason(task))}async function sendTask(taskId=``,options={}){const currentPrompt=taskPrompt(taskId);if(props.connectionUnavailable||!taskId||currentPrompt?.attachmentsCanSubmit?.()===false)return;const task=temporary.tasks.value.find(task=>task.id===taskId);if(!task||taskInputDisabled(task))return;typingPresence.submit();return temporary.send(taskId,{...options,attachmentOwner:currentPrompt})}async function startTask(options={}){selectionRevision.value+=1;hostConversation?.value?.close();const started=temporary.startTask(options);const taskId=temporary.activeTaskId.value;await revealTaskTab(taskId,{focus:true});const result=await started;if(result?.started)taskPrompt(taskId)?.clearAttachments?.();return result}function reportTaskRecovery(taskId=``,outcome={}){const reported=temporary.reportRecoveryOutcome(taskId,outcome);if(reported&&outcome.status===`succeeded`&&!(props.active&&temporary.open.value&&temporary.activeTaskId.value===taskId))temporaryAiFeedback.success(outcome.message||`Vibe64 independently verified that the repair succeeded.`);return reported}async function persistTaskRecovery(taskId=``,outcome={}){return reportTaskRecovery(taskId,outcome)&&await temporary.saveTask(taskId)===true}function showWorkspace(){const revision=++selectionRevision.value;hostConversation?.value?.close();if(!temporary.tasks.value.length){temporary.open.value=true;openFirstTask(revision);return null}const task=temporary.showWorkspace();revealTaskTab(temporary.activeTaskId.value);return task}async function openFirstTask(revision){await temporary.restoreTasks();if(revision!==selectionRevision.value||temporary.restoreError.value)return;if(temporary.tasks.value.length)showWorkspace();else await openNewTask()}function updateActiveAgentSetting(parameterId=``,value=``){if(activeTask.value?.id)temporary.updateAgentSetting(activeTask.value.id,parameterId,value)}watch(()=>temporary.activeTaskId.value,taskId=>{revealTaskTab(taskId)},{flush:`post`});watch([recoveryMessageId,canReturnToMainChat,()=>props.active],async()=>{if(!props.active||!recoveryMessageId.value)return;await nextTick();(returnToMainButton.value?.$el||completionMessage.value)?.scrollIntoView?.({block:`nearest`})},{flush:`post`});useVibe64TemporaryAiColleagueView({props,emit,temporary,hostConversation,selectionRevision});__expose({get visible(){return temporary.open.value||Boolean(hostConversation?.value?.selected)},get composer(){if(hostConversation?.value?.selected)return hostComposer.value;return temporary.open.value?taskPrompt(temporary.activeTaskId.value):null},closeWorkspace,hasUnreadMessages:temporary.hasUnreadMessages,openTask,reportTaskRecovery,persistTaskRecovery,selectTask,startTask,showWorkspace,updateRepairVisible,updateRepairTask:temporary.updateRepairTask});return(_ctx,_cache)=>{return unref(temporary).open.value||unref(hostConversation)?.selected?(openBlock(),createElementBlock(`section`,{key:0,ref_key:`workspace`,ref:workspace,class:normalizeClass([`vibe64-temporary-ai`,{"vibe64-temporary-ai--host":unref(hostConversation)?.selected}]),"aria-label":unref(hostConversation)?.selected?unref(hostConversation).label:`Temporary AI workspace`,tabindex:`-1`},[createVNode(Vibe64TemporaryAiTabs_default,{tasks:unref(temporary).tasks.value,"active-task-id":unref(temporary).activeTaskId.value,"set-tab-button":unref(setTaskTabButton),"session-id":props.sessionId,"repository-busy":props.repositoryBusy,"closing-task":unref(closingTask),"stopping-task-id":unref(stoppingTaskId),onSelectMainChat:selectMainChat,onSelectTask:selectTask,onRename:unref(openRename),onClose:unref(requestCloseTask),onNewTask:unref(openNewTask)},null,8,[`tasks`,`active-task-id`,`set-tab-button`,`session-id`,`repository-busy`,`closing-task`,`stopping-task-id`,`onRename`,`onClose`,`onNewTask`]),unref(newTaskOpen)?(openBlock(),createBlock(VDialog,{key:0,"model-value":unref(newTaskOpen),"aria-label":`New temporary chat`,"max-width":`480`,persistent:unref(creatingTask),"onUpdate:modelValue":_cache[1]||(_cache[1]=value=>{if(!value)unref(cancelNewTask)()})},{default:withCtx(()=>[createVNode(VCard,{title:`New temporary chat`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createVNode(VCheckbox,{modelValue:unref(includeRecentChatContext),"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>isRef(includeRecentChatContext)?includeRecentChatContext.value=$event:null),disabled:unref(creatingTask)||Boolean(unref(creatingTaskId)),label:`Include recent chat context`,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[21]||(_cache[21]=createBaseVNode(`p`,null,`Copy up to 40 recent visible messages from Main, including progress. Text only, limited to 64 KiB. Later messages stay separate.`,-1)),unref(createTaskError)?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(createTaskError)),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(creatingTask),onClick:unref(cancelNewTask)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{loading:unref(creatingTask),disabled:unref(creatingTask),onClick:unref(createTask)},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(`Create chat`,-1)])]),_:1},8,[`loading`,`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])):createCommentVNode(``,true),unref(hostConversation)?.selected&&props.active?(openBlock(),createBlock(resolveDynamicComponent(unref(hostConversation).component),{key:1,ref_key:`hostComposer`,ref:hostComposer,class:`vibe64-temporary-ai__host-content`},null,512)):createCommentVNode(``,true),!unref(hostConversation)?.selected?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(Vibe64TemporaryAiRecoveryRow_default,{"active-task":unref(activeTask),"restore-error":unref(temporary).restoreError.value,"recovery-verified":activeTaskRecoveryVerified.value,"recovery-checking":activeTaskRecoveryChecking.value,"input-disabled":Boolean(unref(activeTask))&&taskInputDisabled(unref(activeTask)),"connection-unavailable":props.connectionUnavailable,"update-disabled":props.updateDisabled,"update-disabled-reason":props.updateDisabledReason,"can-review-update":props.canReviewUpdate,onRetryRestore:_cache[2]||(_cache[2]=$event=>unref(temporary).restoreTasks()),onCheckUpdate:_cache[3]||(_cache[3]=$event=>emit(`check-update`,$event)),onReviewUpdate:_cache[4]||(_cache[4]=$event=>emit(`review-update`))},null,8,[`active-task`,`restore-error`,`recovery-verified`,`recovery-checking`,`input-disabled`,`connection-unavailable`,`update-disabled`,`update-disabled-reason`,`can-review-update`]),unref(activeTask)?(openBlock(),createBlock(_sfc_main$49,{key:0,"session-id":props.sessionId,adapter:unref(activeTask).adapter,"recovery-message":unref(activeTask).recoveryMessage,"routing-request":routingRequest.value,working:unref(activeTask).nativeWorking,"scroll-key":unref(activeTask).id,"empty-message":unref(activeTask).recoveryNotice?``:`Ask a focused question or investigate a problem without adding it to the main conversation.`,onResend:_cache[11]||(_cache[11]=$event=>sendTask(unref(activeTask).id,{retryMessageId:$event})),onCancel:_cache[12]||(_cache[12]=$event=>unref(temporary).cancelMessage(unref(activeTask).id,$event)),onEdit:_cache[13]||(_cache[13]=$event=>unref(temporary).editMessage(unref(activeTask).id,$event))},{"message-text":withCtx(({message})=>[message.messageId===recoveryMessageId.value?(openBlock(),createElementBlock(`p`,{key:0,ref_key:`completionMessage`,ref:completionMessage},toDisplayString(updateCompletionText.value||message.text),513)):(openBlock(),createElementBlock(`p`,_hoisted_2$35,toDisplayString(message.text),1)),message.messageId===recoveryMessageId.value&&canReturnToMainChat.value?(openBlock(),createBlock(VBtn,{key:2,ref_key:`returnToMainButton`,ref:returnToMainButton,"aria-busy":unref(closingTask),class:`vibe64-temporary-ai__return`,color:`primary`,disabled:props.repositoryBusy||unref(closingTask),size:`small`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>unref(closeTask)(unref(activeTask).id,{returnToMainChat:true}))},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Return to main chat `,-1)])]),_:1},8,[`aria-busy`,`disabled`])):createCommentVNode(``,true)]),hints:withCtx(()=>[unref(activeTask).recentChatContext&&!unref(activeTask).messages.length?(openBlock(),createElementBlock(`p`,_hoisted_3$30,[createTextVNode(` Copied `+toDisplayString(unref(activeTask).recentChatContext.messages.length)+` messages from Main when this chat was created. `,1),unref(activeTask).recentChatContext.truncated?(openBlock(),createElementBlock(`span`,_hoisted_4$23,`Some text was omitted to fit the 64 KiB context limit.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),activeTaskError.value||unref(actionErrors)[unref(activeTask).id]||activityLabel.value?(openBlock(),createElementBlock(`div`,_hoisted_5$20,[unref(actionErrors)[unref(activeTask).id]&&!unref(taskToClose)?(openBlock(),createElementBlock(`div`,_hoisted_6$17,toDisplayString(unref(actionErrors)[unref(activeTask).id]),1)):createCommentVNode(``,true),activeTaskError.value?(openBlock(),createElementBlock(`div`,{key:1,class:normalizeClass([`vibe64-temporary-ai__error`,{"vibe64-temporary-ai__error--recovered":activeTaskRecoveryVerified.value}]),role:activeTaskRecoveryVerified.value?`status`:`alert`},[activeTaskRecoveryVerified.value?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` Temporary AI did not report a clean finish: `+toDisplayString(activeTaskError.value)+` The repair was independently verified. `,1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(activeTaskError.value),1)],64))],10,_hoisted_7$15)):createCommentVNode(``,true),activityLabel.value?(openBlock(),createBlock(unref(AssistantComposerSupport_default),{key:2,class:`vibe64-temporary-ai__activity`,activity:{label:activityLabel.value}},null,8,[`activity`])):createCommentVNode(``,true)])):createCommentVNode(``,true)]),composer:withCtx(()=>[unref(activeTask).draftSaveState===`failed`?(openBlock(),createElementBlock(`p`,_hoisted_8$15,` Draft not saved; check the error and retry. `)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(temporary).tasks.value,task=>{return withDirectives((openBlock(),createBlock(_sfc_main$59,{key:task.id,"saved-attachments":task.attachments,"attachments-owned-by-conversation":``,ref_for:true,ref:element=>unref(setTaskPrompt)(task.id,element),class:`vibe64-temporary-ai__composer`,"model-value":task.draft&&(task.displayMessage||task.draft),"aria-label":`Message temporary AI`,density:`compact`,"attachments-enabled":Boolean(props.sessionId)&&!taskInputDisabled(task),disabled:task.state===`closing`||task.status===`closing`||Boolean(taskAccessReason(task)),placeholder:`Ask temporary AI…`,rows:2,"session-id":props.sessionId,"tab-to-submit":``,onAttachmentsChange:$event=>unref(temporary).updateAttachments(task.id,$event),onBlur:_cache[9]||(_cache[9]=$event=>unref(typingPresence).blur()),onInputActivity:_cache[10]||(_cache[10]=$event=>unref(typingPresence).noteInputActivity()),onSubmit:$event=>sendTask(task.id),onTabToSubmit:unref(focusSendButton),"onUpdate:modelValue":$event=>unref(temporary).updateDraft(task.id,$event)},{footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_9$11,[task.id===unref(activeTask).id?(openBlock(),createBlock(Vibe64ChatModeControls_default,{key:0,session:modeSession.value,goal:task.goal,temporary:``,"required-mode":task.recoveryOperation===`update`?`fix`:``,"save-preferences":preferences=>unref(temporary).updateRouting(task.id,preferences),active:task.busy,disabled:props.repositoryBusy||task.status===`closing`,"can-configure":props.canConfigureRouting,purposes:task.purposes,loading:!task.purposes,onCustom:_cache[6]||(_cache[6]=$event=>{customTarget.value=$event;customOpen.value=true})},null,8,[`session`,`goal`,`required-mode`,`save-preferences`,`active`,`disabled`,`can-configure`,`purposes`,`loading`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-label":`Attach files`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles,icon:unref(mdiPaperclip),size:`small`,title:`Attach files`,type:`button`,variant:`text`,onClick:$event=>unref(taskPrompt)(task.id)?.openFilePicker?.()},null,8,[`disabled`,`icon`,`onClick`]),__props.previewAttachmentState.captureAvailable?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Attach preview screenshot`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles||__props.previewAttachmentState.captureBusy,"aria-busy":__props.previewAttachmentState.captureBusy?`true`:void 0,icon:unref(mdiCameraOutline),size:`small`,title:`Attach preview screenshot`,variant:`text`,onClick:_cache[7]||(_cache[7]=$event=>__props.previewAttachmentState.capture?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),__props.previewAttachmentState.diagnosticsAvailable?(openBlock(),createBlock(VBtn,{key:2,"aria-label":`Attach console and network diagnostics`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles||__props.previewAttachmentState.diagnosticsBusy,"aria-busy":__props.previewAttachmentState.diagnosticsBusy?`true`:void 0,icon:unref(mdiConsoleNetworkOutline),size:`small`,title:`Attach console and network diagnostics`,variant:`text`,onClick:_cache[8]||(_cache[8]=$event=>__props.previewAttachmentState.attachDiagnostics?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),!task.routingMetadata?.assistant_routing?(openBlock(),createBlock(_sfc_main$50,{key:3,"agent-settings":task.agentSettings,"assistant-selection":task.assistantSelection||props.assistantSelection,disabled:props.repositoryBusy||task.status===`closing`,onUpdateSetting:updateActiveAgentSetting},null,8,[`agent-settings`,`assistant-selection`,`disabled`])):createCommentVNode(``,true),createVNode(Vibe64ComposerDelivery_default,{ref_for:true,ref:element=>unref(setTaskSendButton)(task.id,element),"stop-visible":task.busy,"stop-enabled":Boolean(task.conversationId)&&unref(stoppingTaskId)!==task.id,stopping:unref(stoppingTaskId)===task.id,sending:task.delivery.state.sending,"can-submit":!props.connectionUnavailable&&unref(stoppingTaskId)!==task.id&&!taskInputDisabled(task)&&Boolean(task.draft.trim())&&attachmentState.canSubmit,"submit-mode":task.busy?`steer`:`send`,"submit-aria-label":task.busy?`Steer assistant`:`Send message`,"submit-title":task.busy?`Send this guidance to the active assistant turn`:`Send message`,onSubmit:$event=>sendTask(task.id),onStop:$event=>unref(stopTask)(task.id)},null,8,[`stop-visible`,`stop-enabled`,`stopping`,`sending`,`can-submit`,`submit-mode`,`submit-aria-label`,`submit-title`,`onSubmit`,`onStop`])])]),_:2},1032,[`saved-attachments`,`model-value`,`attachments-enabled`,`disabled`,`session-id`,`onAttachmentsChange`,`onSubmit`,`onTabToSubmit`,`onUpdate:modelValue`])),[[vShow,task.id===unref(activeTask).id]])}),128))]),_:1},8,[`session-id`,`adapter`,`recovery-message`,`routing-request`,`working`,`scroll-key`,`empty-message`])):createCommentVNode(``,true),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:customOpen.value,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>customOpen.value=$event),target:customTarget.value,session:modeSession.value,"can-configure":props.canConfigureRouting,"changes-disabled":props.repositoryBusy||unref(activeTask)?.status===`closing`,"save-selection":selection=>unref(temporary).updateRouting(unref(activeTask).id,{mode:`custom`,review:false,override:selection})},null,8,[`modelValue`,`target`,`session`,`can-configure`,`changes-disabled`,`save-selection`]),unref(renamingTask)?(openBlock(),createBlock(VDialog,{key:1,"aria-label":`Rename chat`,"model-value":true,"max-width":`28rem`,persistent:unref(renamePending),"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(renamingTaskId.value=``))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:_cache[17]||(_cache[17]=withModifiers((...args)=>unref(submitRename)&&unref(submitRename)(...args),[`prevent`]))},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename chat`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(renameValue),"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>isRef(renameValue)?renameValue.value=$event:null),label:`Chat name`,variant:`outlined`,maxlength:`80`,autofocus:``,disabled:unref(renamePending),placeholder:`Temporary ${unref(renamingTask).number||``}`.trim(),hint:`Leave empty to use the numbered name.`,"persistent-hint":``,"error-messages":unref(renameError)},null,8,[`modelValue`,`disabled`,`placeholder`,`error-messages`])]),_:1}),createVNode(VCardActions,{class:`pa-6 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(renamePending),onClick:_cache[16]||(_cache[16]=$event=>renamingTaskId.value=``)},{default:withCtx(()=>[..._cache[26]||(_cache[26]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,loading:unref(renamePending)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Rename`,-1)])]),_:1},8,[`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])):createCommentVNode(``,true),unref(taskToClose)?(openBlock(),createBlock(VDialog,{key:2,"model-value":true,"aria-labelledby":unref(closeTitleId),"max-width":`480`,persistent:``},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:unref(closeTitleId),class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(taskToClose).busy?`Stop and close repair?`:`Close incomplete repair?`),1)]),_:1},8,[`id`]),createVNode(VCardText,null,{default:withCtx(()=>[_cache[28]||(_cache[28]=createTextVNode(` Partial edits will stay in this session and may still need repair. Closing does not undo those edits or complete Update. `,-1)),unref(actionErrors)[unref(taskToClose).id]?(openBlock(),createElementBlock(`p`,_hoisted_10$10,toDisplayString(unref(actionErrors)[unref(taskToClose).id]),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(closingTask),onClick:_cache[19]||(_cache[19]=$event=>closeTaskId.value=``)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Keep chat open`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:unref(closingTask),onClick:_cache[20]||(_cache[20]=$event=>unref(closeTask)(unref(taskToClose).id))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(taskToClose).busy?`Stop and close`:`Close repair`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`aria-labelledby`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],10,_hoisted_1$42)):createCommentVNode(``,true)}}};var Vibe64TemporaryAiWorkspace_default=_plugin_vue_export_helper_default(_sfc_main$48,[[`__scopeId`,`data-v-38585bad`]]);var SAVE_UPDATE_REQUIRED_CODE=`vibe64_session_save_update_required`;var SESSION_WORK_PROBLEM_LABEL=`Repository needs help`;function failed(record){return Boolean(record&&typeof record===`object`&&normalizeText$1(record.status).toLowerCase()===`failed`)}function nextStep(operation,record){const notice=operation===`update`?`Update notice`:`Save notice`;const code=normalizeText$1(record.code);if(code===`vibe64_session_update_conflict`&&normalizeText$1(record.conflictRecovery?.reviewId))return`Resolve the listed files yourself, in Main chat or with Fix it with AI, then choose Review resolved conflicts on the ${notice}.`;if(code===`vibe64_session_save_history_diverged`||code===`vibe64_session_update_history_diverged`)return`Choose Fix it with AI on the ${notice}; retrying alone cannot succeed.`;if(code===`vibe64_pull_request_required`)return`Choose Create draft PR or Fix it with AI on the ${notice}.`;return`Choose Fix it with AI on the ${notice}, or fix the cause and ${operation===`update`?`update`:`save`} again.`}function sessionWorkProblem({operation=null,updateOperation=null}={}){const save=failed(operation)&&normalizeText$1(operation.code)!==SAVE_UPDATE_REQUIRED_CODE?operation:null;const update=failed(updateOperation)?updateOperation:null;const record=save&&update?normalizeText$1(update.updatedAt)>normalizeText$1(save.updatedAt)?update:save:save||update;if(!record)return null;const kind=record===update?`update`:`save`;return{code:normalizeText$1(record.code),failedAt:normalizeText$1(record.finishedAt||record.updatedAt),label:SESSION_WORK_PROBLEM_LABEL,message:normalizeText$1(record.error||record.message)||`${kind===`update`?`Update`:`Save`} failed without a recorded reason.`,nextStep:nextStep(kind,record),operation:kind,status:`failed`}}var REPOSITORY_WORK_STATE_PRESENTATION=Object.freeze({checking:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Checking whether work is saved`}),needs_help:Object.freeze({icon:mdiAlertCircleOutline,label:SESSION_WORK_PROBLEM_LABEL}),saved:Object.freeze({icon:mdiCheckCircleOutline,label:`All work is saved`}),saving:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Saving work`}),unavailable:Object.freeze({icon:mdiAlertCircleOutline,label:`Save status is unavailable`}),unsaved:Object.freeze({icon:mdiContentSaveAlertOutline,label:``}),update_available:Object.freeze({icon:mdiCloudDownloadOutline,label:`Update available`}),updating:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Updating session`})});function sessionRepositoryWorkState(workState=null){const source=workState&&typeof workState===`object`?workState:{};const freshness={checkedAt:String(source.checkedAt||``),...source.updateStatusPending===true?{updateStatusPending:true}:{}};const operationStatus=String(source.operation?.status||``).trim();const updateStatus=String(source.updateOperation?.status||``).trim();if(operationStatus===`running`)return{...freshness,state:`saving`};if(updateStatus===`running`)return{...freshness,state:`updating`};const problem=sessionWorkProblem(source);if(problem)return{...freshness,problem:{message:problem.message,nextStep:problem.nextStep,operation:problem.operation},state:`needs_help`,updateAvailable:source.updateAvailable===true};if((source.loading||source.unsaved===null||source.unsaved===void 0)&&source.updateAvailable!==true)return{...freshness,state:source.error?`unavailable`:`checking`};const changedCount=Array.isArray(source.changedPaths)?source.changedPaths.length:0;if(source.unsaved===true||source.connectedSaveRequired===true)return{changedCount,...freshness,state:`unsaved`,updateAvailable:source.updateAvailable===true};return{...freshness,state:source.error?`unavailable`:source.updateAvailable===true?`update_available`:`saved`}}function repositoryWorkState(sessionItem={}){const state=String(sessionItem?.repositoryWorkState?.state||`checking`);return Object.hasOwn(REPOSITORY_WORK_STATE_PRESENTATION,state)?state:`checking`}function repositoryWorkStateProvisional(sessionItem={}){return sessionItem?.agentThinking===true&&repositoryWorkState(sessionItem)===`saved`}function repositoryWorkStateLabel(sessionItem={}){if(repositoryWorkStateProvisional(sessionItem))return`All work was saved at the last check; the assistant is still working`;const state=repositoryWorkState(sessionItem);if(state===`unsaved`){const changedCount=Number(sessionItem?.repositoryWorkState?.changedCount||0);const changeLabel=changedCount===1?`1 change`:`${changedCount||`Unsaved`} changes`;return sessionItem?.repositoryWorkState?.updateAvailable?`${changeLabel}; update available`:changeLabel}return REPOSITORY_WORK_STATE_PRESENTATION[state].label}function repositoryWorkStateProblem(sessionItem={}){const problem=sessionItem?.repositoryWorkState?.problem;return repositoryWorkState(sessionItem)===`needs_help`&&problem?.message?problem:null}function repositoryWorkStateDescription(sessionItem={}){const label=repositoryWorkStateLabel(sessionItem);const problem=repositoryWorkStateProblem(sessionItem);return problem?`${label}: ${problem.message} ${problem.nextStep}`:label}function repositoryWorkStateIcon(sessionItem={}){return REPOSITORY_WORK_STATE_PRESENTATION[repositoryWorkState(sessionItem)].icon}function sessionArchiveWorkNotice(workState=null){const state=repositoryWorkState({repositoryWorkState:workState});if(state===`saved`||state===`update_available`)return null;const archiveOnly=`Archiving keeps them only in the session archive, which cannot restore them to the project.`;if(state===`unsaved`){const changedCount=Number(workState?.changedCount||0);return{confirmLabel:`Archive without saving`,kind:`unsaved`,message:`This session has ${changedCount===1?`1 unsaved change`:`${changedCount||`some`} unsaved changes`} that the project does not have yet, such as an added starter. ${archiveOnly} To keep them, choose Cancel and use Save first.`}}return{confirmLabel:`Archive session`,kind:`unconfirmed`,message:`Vibe64 has not confirmed that this session's work is saved. Any unsaved changes are not in the project. ${archiveOnly}`}}var _hoisted_1$41={class:`text-body-2 text-medium-emphasis mb-0`};var _sfc_main$47={__name:`Vibe64SessionArchiveDialog`,props:{archive:{default:()=>({}),type:Object},shortSessionId:{default:sessionId=>String(sessionId||``),type:Function},workState:{default:null,type:Object}},setup(__props){const props=__props;const workNotice=computed(()=>sessionArchiveWorkNotice(props.workState));function updateOpen(open){if(open!==true)props.archive.cancel()}const titleId=`vibe64-session-archive-dialog-${useId()}`;return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-labelledby":titleId,"model-value":__props.archive.open,"max-width":`620`,persistent:``,"onUpdate:modelValue":updateOpen},{default:withCtx(()=>[createVNode(VCard,{class:`studio-ai-session-archive-dialog`},{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId,class:`studio-ai-session-archive-dialog__title`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiArchiveOutline),color:`primary`},null,8,[`icon`]),_cache[0]||(_cache[0]=createTextVNode(` Archive session? `,-1))]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`p`,{class:`text-body-2 mb-2`},` This stops the assistant and terminals, preserves the session, and removes its active workspace. `,-1)),createBaseVNode(`p`,_hoisted_1$41,[_cache[1]||(_cache[1]=createTextVNode(` Session: `,-1)),createBaseVNode(`strong`,null,toDisplayString(__props.archive.sessionTitle||__props.shortSessionId(__props.archive.sessionId)),1)]),workNotice.value?(openBlock(),createBlock(VAlert,{key:0,class:`mt-3`,density:`compact`,role:`status`,type:workNotice.value.kind===`unsaved`?`warning`:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(workNotice.value.message),1)]),_:1},8,[`type`])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`studio-ai-session-archive-dialog__actions`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:__props.archive.command.isRunning,onClick:__props.archive.cancel},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:__props.archive.command.isRunning,onClick:__props.archive.confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.archive.command.isRunning?`Archiving…`:workNotice.value?.confirmLabel||`Archive session`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64SessionArchiveDialog_default=_plugin_vue_export_helper_default(_sfc_main$47,[[`__scopeId`,`data-v-e367001b`]]);function useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath}={}){const files=ref([]);const loading=ref(false);const error=ref(``);const pendingPaths=ref([]);const feedback=useUiFeedback({source:`vibe64.source-editor.stars`});const paths=computed(()=>files.value.map(file=>file.path));const endpoint=computed(()=>{const id=readRefOrGetterValue(sessionId);const base=readRefOrGetterValue(sessionsApiPath);return id&&base?vibe64SourceEditorStarsPath(base,id):``});let generation=0;let readSequence=0;let needsRefresh=false;onScopeDispose(()=>{generation+=1});async function request(url,options){const response=await getHttpWebClient().request(url,options);if(response?.ok===false)throw vibe64ApiError(response,`Starred files could not load.`);return response}async function refresh(){if(!endpoint.value||pendingPaths.value.length)return;const sequence=++readSequence;const context=generation;loading.value=true;error.value=``;try{const response=await request(endpoint.value);if(context===generation&&sequence===readSequence){files.value=response.files||[];needsRefresh=false}}catch(cause){if(context===generation&&sequence===readSequence)error.value=cause.message||`Starred files could not load.`}finally{if(context===generation&&sequence===readSequence)loading.value=false}}async function toggle(filePath){if(!endpoint.value||!filePath||pendingPaths.value.includes(filePath))return;const context=generation;const previousIndex=files.value.findIndex(file=>file.path===filePath);const previous=files.value[previousIndex];const starred=!previous;readSequence+=1;loading.value=false;pendingPaths.value=[...pendingPaths.value,filePath];files.value=starred?[...files.value,{path:filePath,available:true}]:files.value.filter(file=>file.path!==filePath);try{await request(endpoint.value,{method:`POST`,body:{path:filePath,starred}});if(context===generation)error.value=``}catch(cause){if(context!==generation)return;files.value=files.value.filter(file=>file.path!==filePath);if(previous)files.value.splice(previousIndex,0,previous);needsRefresh=true;feedback.error(cause,`The star could not be saved.`)}finally{if(context===generation){pendingPaths.value=pendingPaths.value.filter(value=>value!==filePath);if(needsRefresh&&pendingPaths.value.length===0)await refresh()}}}watch([endpoint,()=>readRefOrGetterValue(projectSlug)],()=>{generation+=1;needsRefresh=false;files.value=[];pendingPaths.value=[];error.value=``;loading.value=false;refresh()},{immediate:true});return{error,files,loading,paths,pendingPaths,refresh,toggle}}var GIT_IDENTITY_COMMANDS=[`git config --global user.name "Your Name"`,`git config --global user.email "you@example.com"`].join(`
3
- `);var _sfc_main$46={__name:`GitStandInIdentityNotice`,emits:[`close`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createBlock(VAlert,{class:`git-stand-in`,type:`info`,variant:`tonal`,title:`Saved with a stand-in name`,closable:``,"onClick:close":_cache[0]||(_cache[0]=$event=>emit(`close`))},{default:withCtx(()=>[_cache[1]||(_cache[1]=createBaseVNode(`p`,{class:`mt-1 mb-3`},` Git doesn’t know your name and email yet, so this Save is marked “via Vibe64”. To use yours from now on, run this once in a terminal: `,-1)),createVNode(Vibe64CopyCommand_default,{command:unref(GIT_IDENTITY_COMMANDS),label:`Copy both commands`},null,8,[`command`])]),_:1})}}};var _hoisted_1$40={class:`setup-tools__header`};var _hoisted_2$34={key:1,class:`setup-tools__found`};var _hoisted_3$29={key:0};var _sfc_main$45={__name:`WorkspaceSetupToolRows`,props:{runtimes:{type:Array,default:()=>[]},active:Boolean},emits:[`missing`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{tools,missing,checking,check}=useLocalToolRows(()=>props.runtimes,{enabled:()=>props.active});watch(()=>missing.value.length,count=>emit(`missing`,count),{immediate:true});const ready=computed(()=>tools.value.filter(tool=>tool.status===`ready`));return(_ctx,_cache)=>{return unref(tools).length?(openBlock(),createElementBlock(`section`,{key:0,class:normalizeClass([`setup-tools`,{"setup-tools--quiet":!unref(missing).length}]),"aria-label":`Tools this step uses`},[unref(missing).length?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`header`,_hoisted_1$40,[createBaseVNode(`strong`,null,toDisplayString(unref(missing).length===1?`This step needs a tool that isn't working`:`This step needs tools that aren't working`),1),_cache[0]||(_cache[0]=createBaseVNode(`span`,null,`Fix it below, then choose Retry.`,-1))]),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(missing),tool=>{return openBlock(),createBlock(ToolInstallRow_default,{key:tool.id,checking:unref(checking),tool,onCheck:unref(check)},null,8,[`checking`,`tool`,`onCheck`])}),128))],64)):createCommentVNode(``,true),ready.value.length?(openBlock(),createElementBlock(`p`,_hoisted_2$34,[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`16`},null,8,[`icon`]),createBaseVNode(`span`,null,[createTextVNode(toDisplayString(unref(missing).length?`Also used:`:`Tools this step used:`)+` `,1),(openBlock(true),createElementBlock(Fragment,null,renderList(ready.value,(tool,index)=>{return openBlock(),createElementBlock(`span`,{key:tool.id,class:`setup-tools__found-item`},[createTextVNode(toDisplayString(tool.name)+` `+toDisplayString(tool.version),1),tool.path?(openBlock(),createElementBlock(`code`,_hoisted_3$29,toDisplayString(tool.path),1)):createCommentVNode(``,true),createTextVNode(toDisplayString(index<ready.value.length-1?`,`:``),1)])}),128))])])):createCommentVNode(``,true)],2)):createCommentVNode(``,true)}}};var WorkspaceSetupToolRows_default=_plugin_vue_export_helper_default(_sfc_main$45,[[`__scopeId`,`data-v-cf5a6945`]]);var _hoisted_1$39={class:`vibe64-temporary-action-terminal__summary`};var _hoisted_2$33={class:`vibe64-temporary-action-terminal__title`};var _hoisted_3$28=[`role`,`title`];var _sfc_main$44={__name:`Vibe64TemporaryActionTerminal`,props:{active:{default:false,type:Boolean},dismissed:{default:false,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Action needs attention`,type:String},height:{default:`clamp(8rem, 22vh, 14rem)`,type:String},operationKey:{default:``,type:String},output:{default:``,type:String},retryable:{default:false,type:Boolean},stage:{default:``,type:String},starting:{default:false,type:Boolean},status:{default:``,type:String},subtitle:{default:``,type:String},title:{default:`Action`,type:String}},emits:[`copy`,`dismiss`,`retry`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const detailsOpen=ref(false);const detailsViewed=ref(false);const canDismiss=computed(()=>!props.active);const forwardedSlots=[`actions-after`,`output`,`overlay`];const visible=computed(()=>!props.dismissed&&Boolean(props.active||props.error||props.status===`required`||detailsViewed.value&&Boolean(props.status||props.stage||props.output)));const summaryText=computed(()=>{const outputLine=terminalLastMeaningfulLine(props.output);if(props.error)return props.error;if(props.status!==`required`&&props.stage&&outputLine&&props.stage!==outputLine)return`${props.stage} · ${outputLine}`;return props.stage||outputLine||`Working…`});function toggleDetails(){detailsViewed.value=true;detailsOpen.value=!detailsOpen.value}function dismiss(){detailsOpen.value=false;detailsViewed.value=false;emit(`dismiss`)}watch(()=>props.operationKey,()=>{detailsOpen.value=false;detailsViewed.value=false},{immediate:true});watch(()=>props.active,(active,previousActive)=>{if(active&&!previousActive){detailsOpen.value=false;detailsViewed.value=false}},{immediate:true});return(_ctx,_cache)=>{return visible.value?(openBlock(),createBlock(Vibe64TerminalSurface_default,{key:0,class:normalizeClass([`vibe64-temporary-action-terminal`,{"vibe64-temporary-action-terminal--error":Boolean(__props.error)}]),"body-mode":`log`,"close-label":`Dismiss`,collapsible:``,error:__props.error,expanded:detailsOpen.value,"error-title":__props.errorTitle,height:__props.height,"mobile-takeover":``,"open-error-details":detailsOpen.value&&Boolean(__props.error),output:__props.output,retryable:Boolean(__props.error)&&__props.retryable,"show-close":canDismiss.value,"show-copy":detailsOpen.value&&Boolean(__props.output),"show-interrupt":false,"show-summary":false,starting:__props.starting,title:__props.title,onClose:dismiss,onCopy:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`copy`)),onRetry:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleDetails},createSlots({heading:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$39,[createBaseVNode(`strong`,_hoisted_2$33,toDisplayString(__props.title),1),__props.status?(openBlock(),createBlock(VChip,{key:0,class:`vibe64-temporary-action-terminal__status`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true)])]),"actions-before":withCtx(()=>[createBaseVNode(`span`,{class:`vibe64-temporary-action-terminal__line`,role:__props.error?`alert`:`status`,title:__props.subtitle},toDisplayString(summaryText.value),9,_hoisted_3$28),renderSlot(_ctx.$slots,`actions-before`,{},void 0,true),__props.error||__props.status===`required`?renderSlot(_ctx.$slots,`error-actions`,{},void 0,true,0):createCommentVNode(``,true)]),_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1032,[`class`,`error`,`expanded`,`error-title`,`height`,`open-error-details`,`output`,`retryable`,`show-close`,`show-copy`,`starting`,`title`])):createCommentVNode(``,true)}}};var Vibe64TemporaryActionTerminal_default=_plugin_vue_export_helper_default(_sfc_main$44,[[`__scopeId`,`data-v-228a4f92`]]);var _hoisted_1$38={key:0,class:`d-flex flex-column ga-2`,style:{"overflow-wrap":`anywhere`}};var _hoisted_2$32={key:2,class:`ma-0 text-error`,role:`alert`};var _hoisted_3$27={key:0,class:`text-error`,role:`alert`};var _hoisted_4$22={class:`text-wrap`};var _sfc_main$43={__name:`Vibe64ConnectedReplacement`,props:{projectSlug:{type:String,required:true},sessionId:{type:String,required:true},failure:{type:Object,default:null},disabled:{type:Boolean,default:false}},emits:[`replaced`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const pending=ref(false);const review=ref(null);const error=ref(``);const replacement=ref(null);const available=computed(()=>[`vibe64_contribution_discarded`,`vibe64_connected_integration_discarded`].includes(props.failure?.code)&&Boolean(props.failure?.details?.repository));const endpoint=computed(()=>scopedDevelopmentApiUrl(vibe64SessionPath(`/api${VIBE64_SESSIONS_API_SUFFIX}`,props.sessionId,`/connected/replacement`),props.projectSlug));watch(()=>[props.projectSlug,props.sessionId],()=>{review.value=null;error.value=``;replacement.value=null});watch(()=>props.failure?.details?.repository,()=>{review.value=null;error.value=``});async function inspect(){if(pending.value||props.disabled||!available.value)return;const path=endpoint.value;const repository=props.failure.details.repository;pending.value=true;error.value=``;try{const result=await getHttpWebClient().request(`${path}?repository=${encodeURIComponent(repository)}`,{method:`GET`});if(result?.ok!==true)throw vibe64ApiError(result,`The discarded contribution could not be reviewed.`);if(path===endpoint.value&&repository===props.failure?.details?.repository)review.value=result.contributions?.[0]?.review||null}catch(cause){if(path===endpoint.value)error.value=cause.message}finally{pending.value=false}}async function replace(){if(pending.value||props.disabled||!review.value)return;const path=endpoint.value;const reviewed={...review.value};pending.value=true;error.value=``;try{const result=await getHttpWebClient().request(path,{method:`POST`,body:{repository:reviewed.repository,review:reviewed}});if(result?.ok!==true)throw vibe64ApiError(result,`Replacement preparation failed. Retry this same review.`);if(path===endpoint.value){replacement.value=result.prepared?.find(item=>item.repository===reviewed.repository)||null;review.value=null;emit(`replaced`)}}catch(cause){if(path===endpoint.value)error.value=cause.message}finally{pending.value=false}}return(_ctx,_cache)=>{return available.value||replacement.value?(openBlock(),createElementBlock(`div`,_hoisted_1$38,[replacement.value?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`ma-0`,role:`status`},`Replacement prepared. Revise its source, then run Prepare workspace in this project before testing. Save connected first pushes it for review; Main Save still waits for acceptance.`,-1)),createVNode(VBtn,{variant:`tonal`,"min-height":`48`,href:`${unref(projectAppPath)(replacement.value.projectSlug,`/`)}?session=${encodeURIComponent(replacement.value.sessionId)}`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Open replacement session `,-1)])]),_:1},8,[`href`])],64)):(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`48`,height:`auto`,disabled:__props.disabled||pending.value,onClick:inspect},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createBaseVNode(`span`,{class:`text-wrap`},`Review replacement contribution`,-1)])]),_:1},8,[`disabled`])),error.value&&!review.value?(openBlock(),createElementBlock(`p`,_hoisted_2$32,toDisplayString(error.value),1)):createCommentVNode(``,true),createVNode(VDialog,{"model-value":Boolean(review.value),persistent:pending.value,"max-width":`560`,scrollable:``,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>!$event&&!pending.value&&(review.value=null))},{default:withCtx(()=>[review.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Create replacement contribution?`,-1)])]),_:1}),createVNode(VCardText,{style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(review.value.repository)+` → `+toDisplayString(review.value.targetBranch),1),createBaseVNode(`p`,null,[_cache[6]||(_cache[6]=createTextVNode(`Start a new contribution from discarded commit `,-1)),createBaseVNode(`code`,null,toDisplayString(review.value.discardedHead),1),_cache[7]||(_cache[7]=createTextVNode(`.`,-1))]),_cache[8]||(_cache[8]=createBaseVNode(`p`,null,`The old branch and checkout remain intact. Unsaved edits stay in the old checkout; copy any edits you need into the replacement.`,-1)),_cache[9]||(_cache[9]=createBaseVNode(`p`,null,`This prepares source only. Nothing is pushed, and Main Save still requires the contribution to be accepted.`,-1)),error.value?(openBlock(),createElementBlock(`p`,_hoisted_3$27,toDisplayString(error.value),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>review.value=null)},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,disabled:__props.disabled||pending.value,onClick:replace},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_4$22,toDisplayString(pending.value?`Preparing…`:`Create replacement contribution`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])])):createCommentVNode(``,true)}}};var _hoisted_1$37={class:`studio-autopilot__activity`,"aria-label":`Session activity`};var _hoisted_2$31={class:`studio-autopilot__connection-actions`};var _hoisted_3$26={key:0,class:`text-body-small`};var _hoisted_4$21={key:1,class:`text-body-small`};var _hoisted_5$19={class:`d-flex flex-wrap align-center ga-2`};var _hoisted_6$16={class:`flex-grow-1`};var _hoisted_7$14={class:`text-body-small mb-0`};var _hoisted_8$14={class:`studio-autopilot__checkpoint-details text-body-small`};var _hoisted_9$10={class:`text-body-small`};var _hoisted_10$9={key:0};var _hoisted_11$8={key:1};var _sfc_main$42={__name:`Vibe64AutopilotActivity`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,assistantAccountMessage,assistantAccountUnavailable,assistantFixAllowed,assistantFixRestrictionMessage,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,connectionRecoveryVisible,createPullRequestOpen,dismissCheckpointFailure,dismissSaveWorkActivity,dismissWorkspaceSetupActivity,fixRepositoryActionError,fixWorkspaceSetupWithTemporaryAi,githubProject,projectSlug,props,repositoryRecoverySending,requestSessionRenewal,resourceRecoveryControl,retrySaveWork,retryWorkspaceSetup,reviewResolvedUpdate,saveWorkActivityDismissed,saveWorkActivityIsUpdate,saveWorkActivityKey,saveWorkActivityLabel,saveWorkCanResolveWithTemporaryAi,saveWorkConnectedResults,saveWorkDisabled,saveWorkError,saveWorkFailure,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStandInIdentity,saveWorkStatus,sessionId,sessionPullRequest,sourceOperationsSuspended,temporaryAiWorkspace,testApproval,updateConflictRecovery,updateWorkDisabled,workspaceSetupActivityKey,workspaceSetupAskDisabled,workspaceSetupCurrentLabel,workspaceSetupDismissed,workspaceSetupError,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}=__props.view;const resourceRetryBusy=ref(false);const workspaceSetupToolsMissing=ref(false);const LocalDatabaseServer=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-BXZp5ztx.js`).then(n=>n.p).then(module=>module.loadLocalDatabaseServer()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const updateHandledInRepair=computed(()=>Boolean((saveWorkActivityIsUpdate.value||saveWorkError.value)&&temporaryAiWorkspace.value?.updateRepairVisible));const saveWorkCanCreatePullRequest=computed(()=>githubProject.value&&!sessionPullRequest.value?.number&&saveWorkFailure.value?.code===`vibe64_pull_request_required`);function copyActivityOutput(output=``){return writeClipboardText(output)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$37,[unref(githubProject)&&unref(sessionPullRequest)?(openBlock(),createBlock(VSheet,{key:0,color:`surface-light`,rounded:`lg`,class:`pa-2 text-body-small`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(unref(sessionPullRequest).number?`PR #${unref(sessionPullRequest).number}`:`Pull request branch`),1),createTextVNode(` · Commit & push to `+toDisplayString(unref(sessionPullRequest).headRepository)+`:`+toDisplayString(unref(sessionPullRequest).headBranch),1)]),_:1})):createCommentVNode(``,true),unref(connectionRecoveryVisible)?(openBlock(),createBlock(VSheet,{key:1,class:`studio-autopilot__connection-recovery`,rounded:`lg`,role:`status`,"data-vibe64-connection-recovery":``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$31,[unref(assistantAccountUnavailable)?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,"min-height":`32`,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AccountConnectionsDialog)({section:`ai`}))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Go to AI Accounts `,-1)])]),_:1})):createCommentVNode(``,true),!unref(assistantAccountUnavailable)||unref(props).sessionSelectionArchived?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`32`,size:`small`,disabled:unref(props).agentConnectionStatus===`reconciling`,onClick:_cache[1]||(_cache[1]=$event=>unref(props).retryAgentConnection())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(props).agentConnectionStatus===`disconnected`?`Reconnect`:`Retry connection`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true),unref(props).agentConnectionStatus===`failed`&&unref(props).sessionRenewal?.visible?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,"min-height":`32`,size:`small`,onClick:_cache[2]||(_cache[2]=$event=>unref(requestSessionRenewal)($event.currentTarget))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Renew session `,-1)])]),_:1})):createCommentVNode(``,true)]),unref(assistantAccountUnavailable)?(openBlock(),createElementBlock(`span`,_hoisted_3$26,toDisplayString(unref(assistantAccountMessage))+` Your draft is kept. `,1)):(openBlock(),createElementBlock(`span`,_hoisted_4$21,toDisplayString(unref(props).agentConnectionStatus===`disconnected`?`Connection lost. Reconnecting automatically.`:unref(props).agentConnectionError||`Checking the assistant connection.`)+` Your draft is kept. `,1))]),_:1})):createCommentVNode(``,true),unref(checkpointFailureVisible)?(openBlock(),createBlock(VAlert,{key:2,class:`studio-autopilot__checkpoint-notice`,type:`warning`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$19,[createBaseVNode(`div`,_hoisted_6$16,[_cache[16]||(_cache[16]=createBaseVNode(`strong`,{class:`text-body-medium`},`Recovery snapshot not saved`,-1)),createBaseVNode(`p`,_hoisted_7$14,toDisplayString(unref(checkpointFailureReason))+` Your files remain in this session. You can keep chatting.`,1)]),createVNode(VBtn,{variant:`text`,"min-height":`48`,"aria-label":`Dismiss recovery snapshot warning`,onClick:unref(dismissCheckpointFailure)},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Dismiss`,-1)])]),_:1},8,[`onClick`])]),(openBlock(),createElementBlock(`details`,{key:unref(checkpointFailure)},[_cache[18]||(_cache[18]=createBaseVNode(`summary`,{class:`text-body-small`},`Technical details`,-1)),_cache[19]||(_cache[19]=createBaseVNode(`p`,{class:`text-body-small mt-2 mb-2`},`Vibe64 tries again after the next assistant turn finishes. A successful snapshot clears this warning. Dismiss hides this failure only; a new failure will appear again.`,-1)),createBaseVNode(`pre`,_hoisted_8$14,toDisplayString(unref(checkpointFailure)),1)]))]),_:1})):createCommentVNode(``,true),unref(testApproval)&&unref(resourceRecoveryControl)?(openBlock(),createBlock(VSheet,{key:3,class:`d-flex flex-wrap align-center justify-space-between ga-2 pa-2`,color:`surface-variant`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_9$10,toDisplayString(unref(testApproval).state===`waiting`?`Tests need memory approval`:`Resuming the original test…`),1),(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${unref(testApproval).admissionId}`,"admission-id":unref(testApproval).admissionId,"session-id":unref(sessionId),disabled:unref(testApproval).state!==`waiting`,onRetryResult:_cache[3]||(_cache[3]=$event=>unref(props).refreshSessionData?.()),onRecheck:_cache[4]||(_cache[4]=$event=>unref(props).refreshSessionData?.())},null,40,[`admission-id`,`session-id`,`disabled`]))]),_:1})):createCommentVNode(``,true),unref(saveWorkStandInIdentity)?(openBlock(),createBlock(_sfc_main$46,{key:4,onClose:_cache[5]||(_cache[5]=$event=>saveWorkStandInIdentity.value=false)})):createCommentVNode(``,true),unref(saveWorkConnectedResults).length?(openBlock(),createBlock(VAlert,{key:5,type:`info`,variant:`tonal`,closable:``,"onClick:close":_cache[6]||(_cache[6]=$event=>saveWorkConnectedResults.value=[])},{default:withCtx(()=>[_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`mb-2`},`Connected contributions pushed. The main project was not pushed.`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(saveWorkConnectedResults),result=>{return openBlock(),createElementBlock(`li`,{key:result.sessionId},[createTextVNode(toDisplayString(result.repository)+` · `,1),createBaseVNode(`code`,null,toDisplayString(result.saveCommit?.slice(0,12)),1),result.recorded===false?(openBlock(),createElementBlock(`span`,_hoisted_10$9,` — retry Save to record this confirmed commit.`)):result.reconciled===false?(openBlock(),createElementBlock(`span`,_hoisted_11$8,` — open its session to finish reconciliation.`)):createCommentVNode(``,true)])}),128))]),_cache[21]||(_cache[21]=createBaseVNode(`p`,{class:`mt-2 mb-0`},`Review these contributions in the receiving projects’ Incoming changes.`,-1))]),_:1})):createCommentVNode(``,true),createVNode(Vibe64TemporaryActionTerminal_default,{active:unref(saveWorkOperationActive)||unref(saveWorkSending),dismissed:unref(saveWorkActivityDismissed)||updateHandledInRepair.value,error:unref(saveWorkError),"error-title":`${unref(saveWorkActivityLabel)} needs attention`,height:`clamp(8rem, 22vh, 14rem)`,"operation-key":unref(saveWorkActivityKey),output:unref(saveWorkOutput),retryable:unref(saveWorkRetryable),stage:unref(saveWorkStage),starting:unref(saveWorkSending),status:unref(saveWorkStatus),subtitle:unref(saveWorkActivityIsUpdate)?`Replay current work on the latest saved version`:`Canonical project Save`,title:unref(saveWorkActivityLabel),onCopy:_cache[8]||(_cache[8]=$event=>copyActivityOutput(unref(saveWorkOutput))),onDismiss:unref(dismissSaveWorkActivity),onRetry:unref(retrySaveWork)},createSlots({_:2},[unref(saveWorkError)&&(unref(saveWorkCanResolveWithTemporaryAi)||saveWorkCanCreatePullRequest.value)?{name:`error-actions`,fn:withCtx(()=>[unref(updateConflictRecovery)?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,height:`48`,disabled:unref(updateWorkDisabled)||unref(sourceOperationsSuspended)||unref(temporaryAiWorkspace)?.updateRepairTask?.busy,onClick:unref(reviewResolvedUpdate)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true),unref(saveWorkCanResolveWithTemporaryAi)?(openBlock(),createBlock(Vibe64TemporaryAiFixAction_default,{key:1,disabled:unref(repositoryRecoverySending)||!unref(assistantFixAllowed),pending:unref(repositoryRecoverySending),title:unref(assistantFixAllowed)?`Open temporary AI to resolve this repository problem`:unref(assistantFixRestrictionMessage),onClick:unref(fixRepositoryActionError)},null,8,[`disabled`,`pending`,`title`,`onClick`])):createCommentVNode(``,true),saveWorkCanCreatePullRequest.value?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,height:`48`,disabled:unref(saveWorkDisabled)||unref(sourceOperationsSuspended),onClick:_cache[7]||(_cache[7]=$event=>createPullRequestOpen.value=true)},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(` Create draft PR `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),key:`0`}:void 0]),1032,[`active`,`dismissed`,`error`,`error-title`,`operation-key`,`output`,`retryable`,`stage`,`starting`,`status`,`subtitle`,`title`,`onDismiss`,`onRetry`]),createVNode(_sfc_main$43,{"project-slug":unref(projectSlug),"session-id":unref(sessionId),failure:unref(saveWorkFailure),disabled:unref(saveWorkSending)||unref(saveWorkOperationActive)||unref(sourceOperationsSuspended)||unref(agentActive),onReplaced:_cache[9]||(_cache[9]=$event=>{unref(props).refreshSessionData?.();unref(props).refreshSessionWork?.()})},null,8,[`project-slug`,`session-id`,`failure`,`disabled`]),createVNode(Vibe64TemporaryActionTerminal_default,{active:unref(workspaceSetupRunning)||unref(workspaceSetupRetrying),dismissed:unref(workspaceSetupDismissed),error:unref(workspaceSetupError),"error-title":`Workspace preparation needs attention`,height:`clamp(8rem, 22vh, 14rem)`,"operation-key":unref(workspaceSetupActivityKey),output:unref(workspaceSetupOutput),retryable:unref(workspaceSetupNeedsAttention)&&unref(workspaceSetupStatus)!==`required`&&!unref(workspaceSetupRetryDisabled)&&!resourceRetryBusy.value,stage:unref(workspaceSetupCurrentLabel),starting:unref(workspaceSetupRunning)||unref(workspaceSetupRetrying),status:unref(workspaceSetupStatus),subtitle:`Project dependency preparation`,title:unref(workspaceSetupTitle),onCopy:_cache[12]||(_cache[12]=$event=>copyActivityOutput(unref(workspaceSetupOutput))),onDismiss:unref(dismissWorkspaceSetupActivity),onRetry:unref(retryWorkspaceSetup)},createSlots({_:2},[unref(workspaceSetupNeedsAttention)?{name:`error-actions`,fn:withCtx(()=>[unref(resourceRecoveryControl)&&unref(props).session?.workspaceSetup?.resourceAdmissionId?(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${unref(props).session.workspaceSetup.resourceAdmissionId}`,"admission-id":unref(props).session.workspaceSetup.resourceAdmissionId,"session-id":unref(sessionId),disabled:unref(workspaceSetupRetryDisabled)&&!resourceRetryBusy.value,onBusy:_cache[10]||(_cache[10]=$event=>resourceRetryBusy.value=$event),onRetryResult:_cache[11]||(_cache[11]=$event=>unref(props).refreshSessionData?.()),onRecheck:unref(retryWorkspaceSetup)},null,40,[`admission-id`,`session-id`,`disabled`,`onRecheck`])):unref(workspaceSetupStatus)===`required`?(openBlock(),createBlock(VBtn,{key:1,disabled:unref(workspaceSetupRetryDisabled),loading:unref(workspaceSetupRetrying),size:`small`,title:`Run all declared workspace setup steps, including any database preparation`,variant:`tonal`,onClick:unref(retryWorkspaceSetup)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Prepare workspace `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):(openBlock(),createBlock(Vibe64TemporaryAiFixAction_default,{key:2,disabled:unref(workspaceSetupAskDisabled),pending:unref(workspaceSetupFixSending),title:unref(assistantFixAllowed)?`Open temporary AI to resolve workspace preparation`:unref(assistantFixRestrictionMessage),onClick:unref(fixWorkspaceSetupWithTemporaryAi)},null,8,[`disabled`,`pending`,`title`,`onClick`]))]),key:`0`}:void 0]),1032,[`active`,`dismissed`,`error`,`operation-key`,`output`,`retryable`,`stage`,`starting`,`status`,`title`,`onDismiss`,`onRetry`]),unref(workspaceSetupStatus)===`failed`&&!unref(workspaceSetupDismissed)?(openBlock(),createBlock(WorkspaceSetupToolRows_default,{key:6,active:unref(workspaceSetupStatus)===`failed`,runtimes:unref(props).session?.workspaceSetup?.runtimes||[],onMissing:_cache[13]||(_cache[13]=$event=>workspaceSetupToolsMissing.value=$event>0)},null,8,[`active`,`runtimes`])):createCommentVNode(``,true),unref(workspaceSetupStatus)===`failed`&&!unref(workspaceSetupDismissed)&&!workspaceSetupToolsMissing.value&&unref(sessionId)?(openBlock(),createBlock(unref(LocalDatabaseServer),{key:7,active:unref(workspaceSetupStatus)===`failed`,"session-id":unref(sessionId),onRetry:unref(retryWorkspaceSetup)},null,8,[`active`,`session-id`,`onRetry`])):createCommentVNode(``,true)])}}};var Vibe64AutopilotActivity_default=_plugin_vue_export_helper_default(_sfc_main$42,[[`__scopeId`,`data-v-715a7055`]]);var _hoisted_1$36={key:0,class:`text-body-small mt-2`};var _hoisted_2$30={class:`agent-plan-usage__details text-body-small`};var PLAN_USAGE_POLL_MS=6e4;var _sfc_main$41={__name:`Vibe64AgentPlanUsage`,props:{active:Boolean,session:{type:Object,default:null},conversationRuntime:{type:Object,default:null},sessionsApiPath:{type:[Function,Object,String],default:``}},setup(__props){const props=__props;const projectSlug=useVibe64ProjectSlug();const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const actorKey=computed(()=>unref(viewer)?.actorKey||``);const sessionId=computed(()=>props.session?.sessionId||``);const sessionsPath=computed(()=>String(readRefOrGetterValue(props.sessionsApiPath)||``).trim());const engineId=computed(()=>props.session?.assistantSelection?.engineId||``);const modelProviderId=computed(()=>props.session?.assistantSelection?.modelProviderId||``);const keyUsage=computed(()=>vibe64ProviderPresentation(props.session?.assistantSelection).keyUsage);const goalEnabled=computed(()=>props.active&&Boolean(sessionId.value&&sessionsPath.value&&actorKey.value));const enabled=computed(()=>goalEnabled.value&&(Boolean(findVibe64AgentProvider(engineId.value)?.planUsage)||keyUsage.value));const visible=ref(!globalThis.document?.hidden);const now=ref(Date.now());const tick=()=>{visible.value=!globalThis.document?.hidden;now.value=Date.now()};let clock=null;onMounted(()=>{clock=setInterval(tick,15e3);globalThis.document?.addEventListener(`visibilitychange`,tick)});onBeforeUnmount(()=>{clearInterval(clock);globalThis.document?.removeEventListener(`visibilitychange`,tick)});const scopeKey=computed(()=>JSON.stringify([projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value]));const connectionsRealtime={events:[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT],matches:()=>true};const path=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,`/agent-plan-usage`));const usage=useEndpointResource({enabled:computed(()=>enabled.value&&visible.value),path,queryKey:computed(()=>[`vibe64-agent-plan-usage`,engineId.value,modelProviderId.value,projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value]),realtime:connectionsRealtime,fallbackLoadError:`Plan allowance is unavailable.`,queryOptions:{meta:{jskit:{requestRecovery:false}},queryFn:({signal})=>getHttpWebClient().request(path.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(3e4)])}),retry:false,staleTime:()=>keyUsage.value?0:PLAN_USAGE_POLL_MS,refetchOnMount:true,refetchOnWindowFocus:true,refetchInterval:()=>keyUsage.value?false:PLAN_USAGE_POLL_MS,refetchIntervalInBackground:false}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&[`agent-plan-usage`,`${engineId.value}-plan-usage`].includes(payload.reason),onEvent:()=>{if(!globalThis.document?.hidden)usage.reload()}});const suppliedGoal=computed(()=>unref(props.conversationRuntime?.goalState));const goalView=computed(()=>unref(props.conversationRuntime?.goalView));const goalAvailable=computed(()=>goalEnabled.value&&!suppliedGoal.value?.loading&&suppliedGoal.value?.available!==false&&!unref(props.conversationRuntime?.goalLoadError)&&goalView.value?.status===`available`);const goal=computed(()=>goalAvailable.value?goalView.value?.goal||null:null);const goalEngineId=computed(()=>goalView.value?.routing?.selection?.engineId||engineId.value);const fullGoalOpen=ref(false);const goalPreview=computed(()=>{const objective=String(goal.value?.objective||``).trim();return objective.length>140?`${objective.slice(0,140).trimEnd()}…`:objective});watch([sessionId,()=>goal.value?.objective],()=>{fullGoalOpen.value=false});const goalExplicitMode=computed(()=>assistantRoutingFromMetadata(props.session?.metadata)?.mode!==`auto`);const changingGoal=computed(()=>suppliedGoal.value?.pending===true);const goalError=computed(()=>suppliedGoal.value?.error||``);async function changeGoal(action,input={}){if(([`pause`,`cancel`].includes(action)?suppliedGoal.value?.stopPending===true:changingGoal.value)||!goalAvailable.value)return false;if([`set`,`resume`].includes(action)&&!goalExplicitMode.value)return false;return props.conversationRuntime.changeGoal(action,input)}const currentUsage=computed(()=>{const value=usage.data.value;if(keyUsage.value&&(value?.engineId!==engineId.value||value?.modelProviderId!==modelProviderId.value))return null;return value});const weekly=computed(()=>currentUsage.value?.windows?.find(window=>window.windowDurationMins===10080&&(keyUsage.value||engineId.value!==`claude`||window.id===`seven_day`))||null);const allowance=computed(()=>weekly.value||(keyUsage.value?currentUsage.value?.windows?.[0]:null));const balance=computed(()=>currentUsage.value?.balances?.[0]||null);const readingCurrent=computed(()=>currentUsage.value?.status===`available`&&(!Number.isFinite(currentUsage.value.currentForMs)||now.value<usage.query.dataUpdatedAt.value+currentUsage.value.currentForMs));const available=computed(()=>{if(!enabled.value||usage.loadError.value||!readingCurrent.value)return false;return balance.value||allowance.value&&(!allowance.value.resetsAt||allowance.value.resetsAt*1e3>Date.now())});const cantCheck=computed(()=>enabled.value&&!keyUsage.value&&!available.value&&Boolean(usage.loadError.value||[`available`,`stale`,`unavailable`].includes(currentUsage.value?.status)));function formatBalance(value){return new Intl.NumberFormat(`en`,{style:`currency`,currency:value.currency,currencyDisplay:`narrowSymbol`,minimumFractionDigits:2,maximumFractionDigits:2}).format(Number(value.amount))}const summary=computed(()=>{if(cantCheck.value)return`?%`;if(!available.value)return``;if(balance.value)return formatBalance(balance.value);return`${Math.floor(allowance.value.remainingPercent)}%`});const planProvider=computed(()=>keyUsage.value?null:findVibe64AgentProvider(engineId.value)?.planUsage);const usageLabel=computed(()=>currentUsage.value?.providerLabel||planProvider.value?.label||``);const usageTitle=computed(()=>`${usageLabel.value} ${balance.value?`balance`:`plan allowance`}`);const summaryLabel=computed(()=>cantCheck.value?`Weekly ${usageLabel.value} allowance: can't check right now`:balance.value?`${usageLabel.value} balance remaining: ${summary.value}`:`${weekly.value?`Weekly `:``}${usageLabel.value} allowance remaining: ${summary.value}`);const managementUrl=computed(()=>currentUsage.value?.managementUrl||planProvider.value?.managementUrl||``);const details=computed(()=>{if(cantCheck.value){const lines=[`Can't check your ${usageLabel.value} allowance right now.`];if(weekly.value&&currentUsage.value?.checkedAt)lines.push(`Last checked ${new Date(currentUsage.value.checkedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}: ${Math.floor(weekly.value.remainingPercent)}% weekly remaining.`);return lines.join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CNkd6O5t.js","assets/VChip-BRhZ1px1.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/VChip-C9-RJ9kL.css","assets/error-CqUuwdsr.js","assets/normalize-Cecw_kDB.js","assets/useEndpointResource-BaT7yEQ5.js","assets/httpClient-Dj5wBWSr.js","assets/returnToPath-Bo_EqKki.js","assets/vibe64ProjectScope.local-BbrorE15.js","assets/errorMessageHelpers-KoewcxJa.js","assets/useRealtimeEvent-DbrYLgvU.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/linkPath-CKec_fF-.js","assets/preload-helper-BvdcsxN9.js","assets/VSelect-CFmsjLP4.js","assets/VOverlay-9ll66gE0.js","assets/lazy-Cwu1R3nk.js","assets/VOverlay-DG-PukqI.css","assets/VMenu-BaCC4Of9.js","assets/VTextField-Dmm1M-tz.js","assets/VTextField-F6unyhrS.css","assets/VDivider-DY2s_j83.js","assets/VDivider-DvkP_iX7.css","assets/VMenu-D_W8zRGm.css","assets/VCheckboxBtn-CbJIEQdu.js","assets/VCheckboxBtn-DCyuVH7W.css","assets/VSheet-C1Vro_q8.js","assets/VSheet-BbLSwuzR.css","assets/VSelect-y7fezdfU.css","assets/layout-BQWbsRzI.js","assets/vibe64AssistantHost-CP6oxv5b.js","assets/surface-Mq3WFjki.js","assets/studioUrls-BcpEogWH.js","assets/errors-4Oktlo2s.js","assets/client-DCzQQhFB.js","assets/asyncModuleRecovery-BzjXulBW.js","assets/mdi-DwGK7nOu.js","assets/VBtn-B6ryRXW-.js","assets/VBtn-uSpaN2Ha.css","assets/VAlert-CBpSKTfy.js","assets/VAlert-DVXMoK42.css","assets/VAutocomplete-WEsn78My.js","assets/VAutocomplete-D48FgPMA.css","assets/VCheckbox-Bybg_FNE.js","assets/VCheckbox-ChRKi1kj.css","assets/VDialog-CYfdjZRu.js","assets/VDialog-DP-kc9Gx.css","assets/VCard-BzaViLPx.js","assets/VCard-dv-Dc592.css","assets/VRow-B1RzhBIx.js","assets/VRow-DIr3-SqU.css","assets/VSpacer-B5ip6FSG.js","assets/VSpacer-DfbUir7X.css","assets/VExpansionPanels-vKIuai-q.js","assets/VExpansionPanels-cvCWEkWz.css","assets/client-CBSWtYl4.js","assets/VRadioGroup-C021gapy.js","assets/VRadioGroup-C9f4tbih.css","assets/VSkeletonLoader-DFBUIKJZ.js","assets/VSkeletonLoader-LCPSxykp.css","assets/VSwitch-fUpmdN4R.js","assets/VSwitch-FGoTnWb6.css","assets/_plugin-vue_export-helper-DNW4j-dv.js","assets/shared-MIKdzAzL.js","assets/assistantRouting-CX0aG7dC.js","assets/useCommand-DGM7l3ja.js","assets/placement-CWSo4Kid.js","assets/usePaths-DaWJ_Tvi.js","assets/pathname-Bb895US8.js","assets/useUiFeedback-CZj76aLa.js","assets/shared-CEFaGI9L.js","assets/vibe64ApiResponses-B4VY77Q_.js","assets/useVibe64Terminal-B8qevIXQ.js","assets/StudioErrorNotice-Bo6gBu5l.js","assets/StudioErrorNotice-1K8E_MXD.css","assets/browserLocalStorage-B4C7rHrs.js","assets/clipboard-CZs9aH3L.js","assets/useVibe64Terminal-Cw13QF0R.css","assets/studioGateApi-1C9rkDqt.js","assets/client-DZaytu6o.css","assets/VSnackbar-B38PV3iX.js","assets/VSnackbar-BjpINqLT.css","assets/VTextarea-CFF7cmcU.js","assets/VTextarea-DDl63AeD.css","assets/useAssistantAttachments-DJWb1KdF.js","assets/conversation-B1UoWMaA.js","assets/conversation-T8Yax4Gz.js","assets/conversation-fz3qfk_X.css","assets/useVibe64ProjectScope-C4-hpbwc.js","assets/vibe64BrowserTabOrigin-D6Mxx-QS.js","assets/vibe64SessionRequestConfig-DvrfyP8A.js","assets/useVibe64DatabaseTools-BWZjnV6r.js","assets/useVibe64SystemGraph-BdvumnPL.js","assets/index-FHlApQ90.css","assets/Vibe64OutputControls-Dk_DWuFb.js","assets/Vibe64SessionFiles-DjeEvtpc.js","assets/Vibe64FileArea-BljhpApn.js","assets/vibe64AttachmentDownload-Cngh16Hf.js","assets/Vibe64FileArea-_K7HHx8W.css","assets/dist-CDa9Iec1.js","assets/vibe64SessionViewModel-B0cCumM8.js","assets/vibe64SessionDebugLog-D6ibBX8L.js","assets/libesm-CR-iGldz.js","assets/Vibe64SessionFiles-Z4UgqKSG.css","assets/Vibe64TemporaryAiFixAction-DT62W459.js","assets/Vibe64TemporaryAiFixAction-D_mq1dFE.css","assets/Vibe64OutputControls-CK2T32OB.css"])))=>i.map(i=>d[i]);
2
+ import{_ as VProgressLinear,_r as __exportAll,a as VAvatar,cr as Transition,fr as vShow,ht as useDisplay,mr as withModifiers,o as VBadge,pr as withKeys,t as VChip,x as VIcon}from"./VChip-BRhZ1px1.js";import{$ as mergeModels,$n as normalizeProps,B as h,Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,H as hasInjectionContext,Ht as watch,J as inject,O as defineAsyncComponent,On as unref,Pt as useId,T as createStaticVNode,Ut as watchEffect,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,fn as markRaw,g as computed,gn as reactive,gt as provide,hn as proxyRefs,it as onBeforeUnmount,k as defineComponent,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,un as isRef,v as createBlock,vn as ref,w as createSlots,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{r as useShellWebErrorRuntime}from"./error-CqUuwdsr.js";import{U as useQueryClient,t as useEndpointResource}from"./useEndpointResource-BaT7yEQ5.js";import{_ as useRouter,c as isNavigationFailure,g as useRoute,t as NavigationFailureType}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{f as normalizeText$1}from"./normalize-Cecw_kDB.js";import{r as getHttpWebClient}from"./httpClient-Dj5wBWSr.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VSelect}from"./VSelect-CFmsjLP4.js";import{c as VListItemTitle,n as VList,s as VListItem,t as VMenu}from"./VMenu-BaCC4Of9.js";import{t as VTextField}from"./VTextField-Dmm1M-tz.js";import{c as VIBE64_COLLEAGUE_PLAN_KEY,d as VIBE64_HOST_CONVERSATION_KEY,l as VIBE64_COLLEAGUE_PREVIEW_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY,s as VIBE64_COLLEAGUE_LAYOUT_KEY,t as VIBE64_ASSISTANT_HOST_KEY,u as VIBE64_COLLEAGUE_VIEW_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{a as projectSlugFromPathname,c as vibe64ProjectScopedStorageKey,i as projectListPath,n as normalizeProjectRoutePath,o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BbrorE15.js";import{i as studioApiPath,n as resolveWebSocketUrl,r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-BcpEogWH.js";import{s as ROUTE_VISIBILITY_PUBLIC}from"./errorMessageHelpers-KoewcxJa.js";import{a as isDynamicImportError,n as dynamicImportErrorMessage}from"./asyncModuleRecovery-BzjXulBW.js";import{A as mdiBookOpenPageVariantOutline,B as mdiCheckCircle,C as mdiArrowLeft,D as mdiArrowUp,Dt as mdiDotsVertical,E as mdiArrowTopRight,Et as mdiDotsHorizontalCircleOutline,Fr as mdiSourceBranchSync,G as mdiChevronRight,Hn as mdiMagnify,Hr as mdiStop,I as mdiCameraOutline,Ir as mdiSourceCommit,It as mdiFileDocumentEditOutline,J as mdiCircleOutline,K as mdiChevronUp,Ln as mdiLinkVariantOff,Lt as mdiFileDocumentOutline,Mt as mdiEyePlusOutline,Nr as mdiSourceBranch,O as mdiAutoFix,Pr as mdiSourceBranchPlus,Q as mdiClose,Rr as mdiSourcePull,S as mdiArrowDown,Tr as mdiSend,U as mdiChevronDown,V as mdiCheckCircleOutline,Vr as mdiStarOutline,W as mdiChevronLeft,Wr as mdiSwapVertical,Y as mdiCircleSlice4,Z as mdiClockOutline,_ as mdiArchiveArrowDownOutline,ar as mdiPin,c as mdiAccountOutline,cn as mdiHistory,cr as mdiPlayCircleOutline,dt as mdiConsoleNetworkOutline,ei as mdiTuneVariant,f as mdiAlertCircleOutline,g as mdiApplicationOutline,gr as mdiRefresh,hn as mdiInformationOutline,ht as mdiContentSaveOutline,i as mdiAccountGroupOutline,ii as mdiViewDashboardOutline,ir as mdiPencilOutline,k as mdiAutorenew,l as mdiAccountStarOutline,lr as mdiPlus,mn as mdiIncognito,mt as mdiContentSaveAlertOutline,ni as mdiUndoVariant,nr as mdiPause,or as mdiPinOutline,ot as mdiCogOutline,pi as mdiWrenchOutline,q as mdiCircle,rn as mdiGithub,sn as mdiHelpCircleOutline,sr as mdiPlay,tr as mdiPaperclip,tt as mdiCloudDownloadOutline,vr as mdiRestart,wr as mdiSchoolOutline,x as mdiArchiveOutline,y as mdiArchiveCheckOutline,yr as mdiRestore,z as mdiCheck,zr as mdiSourceRepository}from"./mdi-DwGK7nOu.js";import{r as VProgressCircular,t as VBtn}from"./VBtn-B6ryRXW-.js";import{t as VAlert}from"./VAlert-CBpSKTfy.js";import{t as VCheckbox}from"./VCheckbox-Bybg_FNE.js";import{t as VDivider}from"./VDivider-DY2s_j83.js";import{t as VSheet}from"./VSheet-C1Vro_q8.js";import{t as VDialog}from"./VDialog-CYfdjZRu.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-BzaViLPx.js";import{t as VSpacer}from"./VSpacer-B5ip6FSG.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-vKIuai-q.js";import{S as VIBE64_ACCOUNTS_CHANGED_EVENT,T as VForm,_ as useVibe64Accounts,b as ModelRoutingForm_default,c as aiOnboardingNeeded,f as useLocalToolRows,m as Vibe64CopyCommand_default,o as aiOnboardingAvailable,p as ToolInstallRow_default,u as requestVibe64AiOnboarding,v as CODEX_RECONNECT_REQUIRED_CODE,w as VTooltip,x as useModelRouting,y as CODEX_RECONNECT_REQUIRED_MESSAGE}from"./client-CBSWtYl4.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-DFBUIKJZ.js";import{t as VSwitch}from"./VSwitch-fUpmdN4R.js";import{t as VTextarea}from"./VTextarea-CFF7cmcU.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{r as assistantAttachmentFilesFromPasteEvent}from"./useAssistantAttachments-DJWb1KdF.js";import{a as useAssistantQuestions,c as AssistantModelControl_default,d as AssistantGoalControl_default,f as AssistantComposerSupport_default,l as AssistantQuestionInputs_default,n as draftWithRestoredMessage,o as useAssistantSuggestions,r as unmatchedOptimisticMessages,s as AssistantConversationElement_default,v as LongTextPreviewBlocks_default,y as parseLongTextReviewBlocks}from"./conversation-B1UoWMaA.js";import"./conversation-T8Yax4Gz.js";import{n as useRealtimeEvent,r as useRealtimeSocket}from"./useRealtimeEvent-DbrYLgvU.js";import{t as usePaths}from"./usePaths-DaWJ_Tvi.js";import{c as VIBE64_AGENT_TASK_RESULT_SCHEMA,d as VIBE64_AGENT_PROVIDERS,f as VIBE64_DEFAULT_AGENT_PROVIDER_ID,h as normalizeVibe64AgentSettings,l as vibe64AssistantSelectionLabel,m as findVibe64AgentProvider,n as normalizedPromptHintSuggestion,o as normalizeVibe64ConversationAttachments,p as defaultVibe64AgentSettings,r as normalizedPromptHintSuggestions,s as VIBE64_ASSISTANT_ACCESS_ERROR_CODES,t as normalizedPromptHintDraft,u as vibe64ProviderPresentation}from"./shared-MIKdzAzL.js";import{_ as assistantRoutingStatusLabel,d as assistantRoutingAutomation,f as assistantRoutingFromMetadata,g as assistantRoutingStatusIsPending,h as assistantRoutingRequestForDisplay,m as assistantRoutingRequestCanBeReplaced,p as assistantRoutingOutcomeNotice,r as ASSISTANT_MODES,t as ASSISTANT_FIX_MODE,u as assistantModeLabel}from"./assistantRouting-CX0aG7dC.js";import{a as thinkingMessagePresentation,c as Vibe64ConversationStatus_default,d as _sfc_main$60,f as useAgentAttachments,i as Vibe64StarredFilesList_default,l as _sfc_main$58,m as sourceEditorLinkTarget,n as Vibe64SessionSourceEditor_default,o as usesCommentaryForThinking,p as useVibe64AttachmentCommands,r as Vibe64ConversationLog_default,s as conversationAttribution,t as Vibe64SessionFiles_default,u as _sfc_main$59}from"./Vibe64SessionFiles-DjeEvtpc.js";import{t as useCommand}from"./useCommand-DGM7l3ja.js";import{t as useUiFeedback}from"./useUiFeedback-CZj76aLa.js";import"./shared-CEFaGI9L.js";import{i as vibe64ResourceResponseError,n as vibe64ApiResponseError,r as vibe64RequestAccepted,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-Bo6gBu5l.js";import{a as Vibe64Terminal_default,i as createWebSocketTerminalDriver,o as Vibe64TerminalSurface_default,r as useShellAsyncModuleRecoveryRuntime,s as terminalLastMeaningfulLine,t as useVibe64Terminal}from"./useVibe64Terminal-B8qevIXQ.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{A as projectSettingsQueryKey,C as VIBE64_PROJECT_CREATE_API_SUFFIX,S as VIBE64_PROJECT_CHANGED_EVENT,h as VIBE64_CONNECTIONS_CHANGED_EVENT,k as projectSelectionQueryKey,l as PROJECT_SELECTION_ENDPOINT,u as PROJECT_SETTINGS_ENDPOINT,w as VIBE64_PROJECT_SELECT_API_SUFFIX}from"./studioGateApi-1C9rkDqt.js";import{n as useVibe64ProjectSlug,t as provideVibe64OpenedProjectSlug}from"./useVibe64ProjectScope-C4-hpbwc.js";import{i as vibe64RealtimePayloadFromCurrentTab,n as vibe64BrowserTabOriginId,r as vibe64RealtimeOriginPayload,t as browserTabSessionStorage}from"./vibe64BrowserTabOrigin-D6Mxx-QS.js";import{B as vibe64SessionQueryKey,C as vibe64OutputRunPath,F as vibe64SessionEventMatchesScope,I as vibe64SessionPath,P as vibe64SessionCheckUpdatesPath,R as vibe64SessionPromptHintsCancelPath,_ as vibe64AgentTerminalPath,c as VIBE64_SESSION_SUMMARY_CHANGED_EVENT,et as vibe64SourceEditorStarsPath,f as agentTurnControlPayloadFromContext,g as vibe64AgentTerminalControlTextPath,l as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,nt as vibe64TemporaryConversationPath,o as VIBE64_SESSIONS_API_SUFFIX,rt as vibe64TemporaryConversationsPath,s as VIBE64_SESSION_CHANGED_EVENT,t as VIBE64_API_SUFFIX,z as vibe64SessionPromptHintsPath}from"./vibe64SessionRequestConfig-DvrfyP8A.js";import{A as readRefOrGetterValue,B as mainConversationId,C as Vibe64LearningMarkdown_default,D as useVibe64LearningCourses,E as courseProgress,F as useAssistantConversationFactory,H as temporaryConversationId,I as latestAssistantMessageAwaitingUserReply,L as createAssistantApi,M as requestVibe64AccountConnectionsDialog,N as useVibe64AssistantCatalog,O as useVibe64Learning,P as useAssistantConversation,R as VIBE64_TRAINING_LEARNER_CHANGED_EVENT,U as useVibe64Voice,V as mainConversationTarget,X as VTab,Y as VTabs,_t as projectSubtitle,at as usePageActivity,ct as VIBE64_LEARNING_MODE_NOTE,dt as checkNote,ft as lessonShownIn,g as useShellLayoutState,gt as projectDisplayName,ht as isPracticeProjectSlug,k as Vibe64SessionAssistantMenu_default,lt as VIBE64_LEARNING_MODE_PROJECT_CODE,mt as withoutLesson,o as Vibe64UsageRecordingIndicator_default,ot as revealCurrentStep,pt as reviewRunNote,st as STEP_STATUS_LABELS,tt as VBottomSheet,ut as VIBE64_LEARNING_ROUTES,vt as RouterView}from"./index-CNkd6O5t.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-DT62W459.js";import{a as vibe64SessionPullRequest,c as vibe64SessionStatusColor,i as vibe64SessionDisplayTitle,l as vibe64SessionStatusLabel,o as vibe64SessionRevision,s as vibe64SessionShortLabel,t as isArchivedVibe64Session}from"./vibe64SessionViewModel-B0cCumM8.js";import{i as vibe64SessionDebugSummary,n as vibe64SessionDebugError,r as vibe64SessionDebugLog,t as vibe64SessionDebugDurationMs}from"./vibe64SessionDebugLog-D6ibBX8L.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-9OLqOZao.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";import{i as githubProjectAvailable,o as invalidateGithubIssueQueries,s as invalidateGithubProjectQueries}from"./vibe64GithubProject-Bct-bzKq.js";import{n as Vibe64AssistantSessionDialog_default,r as Vibe64CreatePullRequestDialog_default,t as focusCreatedVibe64SessionTab}from"./vibe64SessionFocus-Bd3JuuZe.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-B2RiXjBp.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-DcRTYHoG.js";import{n as normalizeRoutePath,r as routePathContainsSection,t as Vibe64DashboardShell_default}from"./Vibe64DashboardShell-hWNziCur.js";import{a as vibe64SessionToolGuideId,i as vibe64SessionToolDashboardSuffix,o as vibe64SessionToolIdFromDashboardPath,r as VIBE64_SESSION_TOOL_DEFINITIONS}from"./vibe64SessionToolDefinitions-DL5fOyzl.js";import{t as vibe64SessionInfoFacts}from"./vibe64SessionInfo-Cdoyt2T_.js";import{a as mountedSessionDetailRefreshReason,c as sessionRecordHasActiveAgentWork,d as sessionWithAgentTurnRealtimeOverlay,f as refetchEndpointResource,i as mountedSessionDetailLoadState,l as agentTurnRealtimeOverlayFromPayload,n as useVibe64SessionData,o as mountedSessionRealtimeShouldRefresh,r as latestSessionDetailRecord,s as mountedSessionRecord,u as latestAgentTurnRealtimeOverlay}from"./useVibe64SessionData-CbY_B5mC.js";import{n as enrichVibe64SessionForDisplay,t as blockingVibe64SessionPageError}from"./vibe64SessionPanelModel-DoorGDCG.js";import{n as useVibe64ConversationLog}from"./useVibe64ConversationLog-CjUZuvV7.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-CK0feE7T.js";import{i as repositoryStatusSessionId,n as repositoryStatusRealtimeNeedsCanonicalCheck,r as repositoryStatusRealtimeShouldRefresh,t as REPOSITORY_UPDATE_CHECK_FAILED_REASON}from"./vibe64RepositoryRealtime-CHT4-6VN.js";var VIBE64_SESSION_PRESENCE_CHANGED_EVENT=`vibe64.session.presence.changed`;var VIBE64_SESSION_PRESENCE_DEBOUNCE_MS=5e3;var VIBE64_SESSION_PRESENCE_IDLE_MS=1e4;var VIBE64_RESOURCE_RECOVERY_KEY=Symbol(`vibe64-resource-recovery`);var VIBE64_SESSIONS_ENDPOINT=`${studioApiPath(`vibe64`)}/sessions`;function appendQueryParam(url=``,key=``,value=``){const normalizedValue=String(value||``).trim();if(!normalizedValue)return url;return`${url}${String(url||``).includes(`?`)?`&`:`?`}${encodeURIComponent(key)}=${encodeURIComponent(normalizedValue)}`}function vibe64AgentTerminalWebSocketUrl(sessionId,terminalSessionId){const endpoint=appendQueryParam(`${vibe64AgentTerminalPath(VIBE64_SESSIONS_ENDPOINT,sessionId,terminalSessionId)}/ws`,`originId`,vibe64BrowserTabOriginId());return resolveWebSocketUrl(endpoint)}function vibe64OutputTerminalWebSocketUrl(sessionId,terminalSessionId,sessionsEndpoint=VIBE64_SESSIONS_ENDPOINT){return resolveWebSocketUrl(`${vibe64OutputRunPath(sessionsEndpoint,sessionId,terminalSessionId)}/ws`)}function normalizedText$1(value=``){return String(value||``).trim()}function terminalErrorCode(source={}){if(!source||typeof source!==`object`)return``;return normalizedText$1(source.code||source.errors?.[0]?.code||source.cause?.code)}function terminalErrorText(source={}){if(!source||typeof source!==`object`)return normalizedText$1(source);return normalizedText$1(source.error||source.message||source.errors?.[0]?.message||source.cause?.message)}function terminalOwnerAccessDenied(source={}){const code=terminalErrorCode(source);if(code===`vibe64_terminal_owner_mismatch`||code===`vibe64_terminal_owner_required`)return true;const message=terminalErrorText(source).toLowerCase();return message.includes(`belongs to a different vibe64 user`)||message.includes(`restart it before using it again`)||message.includes(`recorded terminal ownership`)}function terminalSessionMissingError(message=``){return/terminal session not found/iu.test(String(message||``))}function vibe64TerminalErrorMessage(source={},fallback=`Terminal action failed.`){const code=terminalErrorCode(source);if(code===`vibe64_terminal_owner_mismatch`)return`This terminal belongs to a different Vibe64 user. Open a new terminal for your account.`;if(code===`vibe64_terminal_owner_required`)return`This terminal is from an older Vibe64 session. Restart it before using it again.`;if(code===`vibe64_github_required`||code===`vibe64_github_reconnect_required`||code===`vibe64_github_user_required`||code===`vibe64_user_required`)return terminalErrorText(source)||`Connect GitHub before using this terminal.`;if(code===`vibe64_github_confirmation_required`)return`This GitHub operation needs explicit confirmation before Codex can run it.`;return terminalErrorText(source)||fallback}var _hoisted_1$49={class:`vibe64-team-ai-gate__icon`};var _hoisted_2$41={class:`vibe64-team-ai-gate__text`};var _hoisted_3$36={class:`vibe64-team-ai-gate__ask`,"data-test":`team-ai-gate-ask`};var _hoisted_4$29={class:`vibe64-team-ai-gate__actions`};var _sfc_main$57={__name:`Vibe64TeamAiGate`,props:{checking:{type:Boolean,default:false},ownerName:{type:String,default:``},projectsPath:{type:String,default:``}},emits:[`check`],setup(__props){const props=__props;const owner=computed(()=>props.ownerName.trim()||`the workspace owner`);const ownerAtStart=computed(()=>props.ownerName.trim()||`The workspace owner`);return(_ctx,_cache)=>{return openBlock(),createBlock(VSheet,{class:`vibe64-team-ai-gate`,rounded:`lg`,border:``,role:`status`,"data-test":`team-ai-gate`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$49,[createVNode(VIcon,{icon:unref(mdiAccountGroupOutline),size:`28`},null,8,[`icon`])]),_cache[3]||(_cache[3]=createBaseVNode(`h2`,{class:`vibe64-team-ai-gate__title`},`Team AI isn't set up yet`,-1)),createBaseVNode(`p`,_hoisted_2$41,toDisplayString(ownerAtStart.value)+` needs to set up AI for team members before you can open projects here. `,1),createBaseVNode(`p`,_hoisted_3$36,` Ask `+toDisplayString(owner.value)+` to set up AI for team members. `,1),createBaseVNode(`div`,_hoisted_4$29,[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,loading:__props.checking,"data-test":`team-ai-gate-check`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`check`))},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`]),__props.projectsPath?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,"min-height":`48`,to:__props.projectsPath,"data-test":`team-ai-gate-projects`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Back to projects `,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true)])]),_:1})}}};var Vibe64TeamAiGate_default=_plugin_vue_export_helper_default(_sfc_main$57,[[`__scopeId`,`data-v-206f9f1c`]]);var cachedProjectSelections=new Map;var PRACTICE_PROJECT_DELETED_CODE=`vibe64_practice_project_deleted`;var TEAM_AI_REQUIRED_CODE=`vibe64_team_ai_required`;function useProjectSelectionGate(emit,{scopeSelectionToCurrentProject=false}={}){const creating=ref(false);const selectingSlug=ref(``);const newProjectName=ref(``);const projectSlug=useVibe64ProjectSlug();const selectionPath=computed(()=>projectSelectionGateEndpoint({projectSlug:projectSlug.value,scopeSelectionToCurrentProject}));const selectionResource=useEndpointResource({fallbackLoadError:`Projects could not load.`,path:selectionPath,queryKey:computed(()=>projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:projectSlug.value,scopeSelectionToCurrentProject,surfaceId:`app`})),refreshOnPull:true,requestRecoveryLabel:`Projects`,realtime:scopeSelectionToCurrentProject?{events:[VIBE64_PROJECT_CHANGED_EVENT,VIBE64_TRAINING_LEARNER_CHANGED_EVENT],matches:({event,payload}={})=>event!==`vibe64.training.learner.changed`||isPracticeNoticeForProject(payload,projectSlug.value)}:{event:VIBE64_PROJECT_CHANGED_EVENT}});if(scopeSelectionToCurrentProject)rereadSelectionWhenProjectDeleted();const projectSelectionView=proxyRefs({isInitialLoading:selectionResource.isInitialLoading,isLoading:selectionResource.isLoading,loadError:selectionResource.loadError,record:selectionResource.data,refresh:selectionResource.reload});const createProjectCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROJECT_CREATE_API_SUFFIX,buildCommandOptions:()=>({method:`POST`,path:PROJECT_SELECTION_ENDPOINT}),buildRawPayload:(_model,{context})=>({name:context.name||``}),fallbackRunError:`Project could not be created.`,messages:{error:`Project could not be created.`,success:`Project created.`},onRunSuccess:loadProjectSelection,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.projects.create`,surfaceId:`app`,writeMethod:`POST`});const selectProjectCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROJECT_SELECT_API_SUFFIX,buildCommandOptions:()=>({method:`POST`,path:`${PROJECT_SELECTION_ENDPOINT}/select`}),buildRawPayload:(_model,{context})=>({slug:context.slug||``}),fallbackRunError:`Project could not be selected.`,messages:{error:`Project could not be selected.`,success:`Project selected.`},onRunSuccess:loadProjectSelection,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.projects.select`,surfaceId:`app`,writeMethod:`POST`});const learning=useVibe64Learning();const learnMode=computed(()=>learning.learnMode===true);const learningModeBlocked=computed(()=>selectionResource.query?.error?.value?.code===VIBE64_LEARNING_MODE_PROJECT_CODE);const learningModeMessage=computed(()=>learningModeBlocked.value?String(selectionResource.query.error.value.message||``):``);const teamAiBlocked=computed(()=>selectionResource.query?.error?.value?.code===TEAM_AI_REQUIRED_CODE);const teamAiOwnerName=computed(()=>teamAiBlocked.value?String(selectionResource.query.error.value.details?.ownerName||``):``);const cachedProjectSelection=computed(()=>cachedProjectSelections.get(projectSlug.value)||null);const projectSelection=computed(()=>projectSelectionView.record||cachedProjectSelection.value||{});const projects=computed(()=>Array.isArray(projectSelection.value.projects)?projectSelection.value.projects:[]);const projectsRoot=computed(()=>String(projectSelection.value.projectsRoot||`~/vibe64`));const hasSelection=computed(()=>projectSelection.value.hasSelection===true);const teamAiOwnerPrompt=computed(()=>{const teamAi=projectSelection.value.teamAi;return teamAi?.available===true&&teamAi.memberCount>0&&teamAi.ready!==true});const selectionReady=computed(()=>Boolean(projectSelectionView.record||cachedProjectSelection.value));const selectionInitialLoading=computed(()=>Boolean(projectSelectionView.isInitialLoading&&!selectionReady.value));const busy=computed(()=>creating.value||Boolean(selectingSlug.value));const saveError=computed(()=>{if(createProjectCommand.messageType===`error`)return String(createProjectCommand.message||``);if(selectProjectCommand.messageType===`error`)return String(selectProjectCommand.message||``);return``});const errorMessage=computed(()=>String((learningModeBlocked.value||teamAiBlocked.value?``:projectSelectionView.loadError)||saveError.value||``));const practiceDeleted=computed(()=>scopeSelectionToCurrentProject&&selectionResource.query?.error?.value?.code===`vibe64_practice_project_deleted`);watch([projectSelection,errorMessage,practiceDeleted,learningModeBlocked,teamAiBlocked],([selection,error,deleted,blocked,teamBlocked])=>{if(blocked||teamBlocked)return;if(deleted){cachedProjectSelections.delete(projectSlug.value);emit(`deleted`);return}if(selection&&Object.keys(selection).length>0)cachedProjectSelections.set(projectSlug.value,selection);if(error){emit(`error`,error);return}if(selection?.hasSelection===true){emit(`ready`,selection);return}emit(`missing`,selection||{})},{immediate:true});return{busy,createProject,creating,errorMessage,hasSelection,learnMode,learningModeBlocked,learningModeMessage,toggleMode:()=>learning.toggleMode(),loadProjectSelection,newProjectName,practiceDeleted,projectSelection,projects,projectsRoot,selectProject,selectingSlug,selectionInitialLoading,selectionReady,teamAiBlocked,teamAiOwnerName,teamAiOwnerPrompt};function rereadSelectionWhenProjectDeleted(){const unsubscribe=useQueryClient().getQueryCache().subscribe(cacheEvent=>{if(cacheEvent.type!==`updated`||cacheEvent.action?.type!==`error`||cacheEvent.action.error?.code!==`vibe64_practice_project_deleted`||practiceDeleted.value)return;if(cacheEvent.query?.queryHash===selectionQueryHash())return;loadProjectSelection().catch(()=>{})});onScopeDispose(unsubscribe)}function selectionQueryHash(){return JSON.stringify(projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:projectSlug.value,scopeSelectionToCurrentProject,surfaceId:`app`}))}async function loadProjectSelection(){await projectSelectionView.refresh()}async function createProject(){const name=newProjectName.value.trim();if(!name)return;creating.value=true;try{const response=await createProjectCommand.run({name});newProjectName.value=``;return String(response?.currentProject?.slug||``).trim()}finally{creating.value=false}}async function selectProject(slug){selectingSlug.value=String(slug||``);try{return await selectProjectCommand.run({slug:selectingSlug.value})?selectingSlug.value:``}finally{selectingSlug.value=``}}}function isPracticeNoticeForProject(payload={},slug=``){return payload?.reason===`practice`&&isPracticeProjectSlug(slug)}function projectSelectionGateEndpoint({projectSlug=``,scopeSelectionToCurrentProject=false}={}){return scopeSelectionToCurrentProject?scopedDevelopmentApiUrl(PROJECT_SELECTION_ENDPOINT,projectSlug,{scopeGlobalPaths:true}):PROJECT_SELECTION_ENDPOINT}function projectSelectionGateQueryKey({ownershipFilter,projectSlug=``,scopeSelectionToCurrentProject=false,surfaceId}={}){const baseKey=projectSelectionQueryKey(surfaceId,ownershipFilter,projectSlug);return scopeSelectionToCurrentProject?[...baseKey,`route-selection`]:baseKey}var _hoisted_1$48={class:`project-selection-gate`};var _hoisted_2$40={class:`project-selection-gate__deleted-text`};var _hoisted_3$35={class:`project-selection-gate__header`};var _hoisted_4$28={class:`project-selection-gate__path`};var _hoisted_5$24={key:0,class:`project-selection-gate__learning-note`,role:`status`,"data-test":`learning-mode-picker-note`};var _hoisted_6$21={key:1,class:`project-selection-gate__team-ai`,role:`status`,"data-test":`team-ai-owner-prompt`};var _hoisted_7$18={key:2,class:`project-selection-gate__list`};var _hoisted_8$18={class:`project-selection-gate__project-name`};var _hoisted_9$14={class:`project-selection-gate__project-path`};var _sfc_main$56={__name:`ProjectSelectionGate`,props:{beforeRetry:{type:Function,default:null},runtimeReady:{type:Boolean,default:true},runtimeError:{type:String,default:``},forcePicker:{type:Boolean,default:false},navigateOnSelect:{type:Boolean,default:false},scopeSelectionToCurrentProject:{type:Boolean,default:false}},emits:[`missing`,`ready`,`error`,`deleted`,`retry-runtime`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const router=useRouter();if(props.scopeSelectionToCurrentProject)provideVibe64OpenedProjectSlug();const learning=useVibe64Learning();const recovering=ref(false);const recoveryError=ref(``);let disposed=false;onBeforeUnmount(()=>{disposed=true});const{busy,createProject,creating,errorMessage,hasSelection,learnMode,learningModeBlocked,learningModeMessage,toggleMode,loadProjectSelection,newProjectName,practiceDeleted,projectSelection,projects,projectsRoot,selectProject,selectingSlug,selectionInitialLoading,selectionReady,teamAiBlocked,teamAiOwnerName,teamAiOwnerPrompt}=useProjectSelectionGate(emit,{scopeSelectionToCurrentProject:props.scopeSelectionToCurrentProject});const learningModeNote=VIBE64_LEARNING_MODE_NOTE;const displayError=computed(()=>recoveryError.value||errorMessage.value||props.runtimeError);const selectedSlotVisible=computed(()=>hasSelection.value&&!props.forcePicker&&!practiceDeleted.value&&!teamAiBlocked.value);const pickerVisible=computed(()=>!practiceDeleted.value&&!learningModeBlocked.value&&!teamAiBlocked.value&&selectionReady.value&&(props.forcePicker||!hasSelection.value));const projectsPath=projectListPath();function openTeamAiSetup(){requestVibe64AccountConnectionsDialog({providerId:`ai`,section:`team`})}function openCourses(){return learning.openCourses()}async function retryProject(){if(recovering.value)return;recovering.value=true;recoveryError.value=``;try{await props.beforeRetry?.();if(disposed)return;await loadProjectSelection();if(!disposed&&!errorMessage.value&&!teamAiBlocked.value&&!props.runtimeReady)emit(`retry-runtime`)}catch(error){recoveryError.value=String(error?.message||`Project could not load. Try again.`)}finally{recovering.value=false}}async function handleSelectProject(slug=``){const selected=await selectProject(slug);if(props.navigateOnSelect&&selected)router.push(projectAppPath(selected))}async function handleCreateProject(){const selected=await createProject();if(props.navigateOnSelect&&selected)router.push(projectAppPath(selected))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$48,[unref(practiceDeleted)?(openBlock(),createBlock(VSheet,{key:0,class:`project-selection-gate__deleted`,rounded:`lg`,border:``,role:`status`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`h2`,{class:`project-selection-gate__title`},`This practice project is gone`,-1)),_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`project-selection-gate__deleted-text`},`It was archived or deleted. Its lesson is under Courses → Archived; start it again from Courses.`,-1)),createVNode(VBtn,{class:`project-selection-gate__deleted-learning`,color:`primary`,variant:`flat`,"min-height":`48`,onClick:openCourses},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Open Courses `,-1)])]),_:1})]),_:1})):unref(learningModeBlocked)?(openBlock(),createBlock(VSheet,{key:1,class:`project-selection-gate__deleted`,rounded:`lg`,border:``,role:`status`,"data-test":`learning-mode-project-note`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_2$40,toDisplayString(unref(learningModeMessage)),1),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`learning-mode-project-switch`,onClick:unref(toggleMode)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learnMode)?`Switch to Develop`:`Switch to Learn`),1)]),_:1},8,[`onClick`])]),_:1})):unref(teamAiBlocked)?(openBlock(),createBlock(Vibe64TeamAiGate_default,{key:2,checking:recovering.value,"owner-name":unref(teamAiOwnerName),"projects-path":unref(projectsPath),onCheck:retryProject},null,8,[`checking`,`owner-name`,`projects-path`])):displayError.value?(openBlock(),createBlock(StudioErrorNotice_default,{key:3,title:`Project could not load`,error:displayError.value,compact:``},{actions:withCtx(()=>[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,disabled:recovering.value,onClick:retryProject},{default:withCtx(()=>[createTextVNode(toDisplayString(recovering.value?`Checking project…`:`Try again`),1)]),_:1},8,[`disabled`])]),_:1},8,[`error`])):createCommentVNode(``,true),!unref(teamAiBlocked)&&!displayError.value&&(unref(selectionInitialLoading)||!__props.runtimeReady)?(openBlock(),createBlock(VSkeletonLoader,{key:4,"aria-label":`Loading project`,class:`project-selection-gate__loading`,type:`article`})):__props.runtimeReady&&selectedSlotVisible.value?renderSlot(_ctx.$slots,`default`,{projectSelection:unref(projectSelection),reload:unref(loadProjectSelection)},void 0,true,5):__props.runtimeReady&&pickerVisible.value?(openBlock(),createBlock(VSheet,{key:6,class:`project-selection-gate__picker`,rounded:`lg`,border:``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$35,[createBaseVNode(`div`,null,[_cache[4]||(_cache[4]=createBaseVNode(`p`,{class:`project-selection-gate__eyebrow`},`Project`,-1)),_cache[5]||(_cache[5]=createBaseVNode(`h2`,{class:`project-selection-gate__title`},`Choose a project`,-1)),createBaseVNode(`p`,_hoisted_4$28,toDisplayString(unref(projectsRoot)),1)])]),unref(learnMode)?(openBlock(),createElementBlock(`div`,_hoisted_5$24,[createBaseVNode(`span`,null,toDisplayString(unref(learningModeNote)),1),createVNode(VBtn,{variant:`tonal`,"min-height":`40`,"data-test":`learning-mode-picker-switch`,onClick:unref(toggleMode)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Switch to Develop `,-1)])]),_:1},8,[`onClick`])])):createCommentVNode(``,true),unref(teamAiOwnerPrompt)?(openBlock(),createElementBlock(`div`,_hoisted_6$21,[_cache[8]||(_cache[8]=createBaseVNode(`div`,{class:`project-selection-gate__team-ai-text`},[createBaseVNode(`strong`,null,`Team members can't open projects yet`),createBaseVNode(`span`,null,`Set up AI for team members so they can work here.`)],-1)),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`team-ai-owner-setup`,onClick:openTeamAiSetup},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Set up team AI `,-1)])]),_:1})])):createCommentVNode(``,true),unref(projects).length?(openBlock(),createElementBlock(`div`,_hoisted_7$18,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(projects),project=>{return openBlock(),createBlock(VBtn,{key:project.path,class:`project-selection-gate__project`,disabled:unref(busy),loading:unref(selectingSlug)===project.slug,variant:`tonal`,onClick:$event=>handleSelectProject(project.slug)},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$18,[createTextVNode(toDisplayString(project.slug)+` `,1),project.approvalsWaiting>0?(openBlock(),createBlock(VChip,{key:0,color:`warning`,size:`small`,variant:`tonal`,"data-test":`project-approvals-waiting`},{default:withCtx(()=>[createTextVNode(toDisplayString(project.approvalsWaiting)+` waiting `,1)]),_:2},1024)):createCommentVNode(``,true)]),createBaseVNode(`span`,_hoisted_9$14,toDisplayString(project.path),1)]),_:2},1032,[`disabled`,`loading`,`onClick`])}),128))])):createCommentVNode(``,true),!unref(learnMode)?(openBlock(),createBlock(VForm,{key:3,class:`project-selection-gate__create`,onSubmit:withModifiers(handleCreateProject,[`prevent`])},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(newProjectName),"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>isRef(newProjectName)?newProjectName.value=$event:null),autocomplete:`off`,density:`comfortable`,"hide-details":`auto`,label:`New project folder`,disabled:unref(busy)},null,8,[`modelValue`,`disabled`]),createVNode(VBtn,{color:`primary`,disabled:!unref(newProjectName).trim()||unref(busy),loading:unref(creating),type:`submit`,variant:`flat`},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Create project `,-1)])]),_:1},8,[`disabled`,`loading`])]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true)])}}};var ProjectSelectionGate_default=_plugin_vue_export_helper_default(_sfc_main$56,[[`__scopeId`,`data-v-5d1415da`]]);var _hoisted_1$47={key:1,class:`local-remotes__branch-name`};var _hoisted_2$39={class:`d-flex ga-3 align-start`};var _hoisted_3$34={class:`min-w-0`};var _hoisted_4$27={class:`text-body-large font-weight-medium ma-0`};var _hoisted_5$23={class:`d-flex ga-3 align-start`};var _hoisted_6$20={class:`local-remotes__status text-body-small mb-3`,role:`status`,"aria-live":`polite`};var _hoisted_7$17={class:`d-flex flex-column ga-1`};var _hoisted_8$17={class:`local-remotes__count ms-2`};var _hoisted_9$13={class:`local-remotes__count ms-2`};var _hoisted_10$12={class:`local-remotes__details text-body-medium`};var _hoisted_11$10={key:0,class:`text-body-medium text-error mt-3 local-remotes__message`};var _hoisted_12$9={key:1,class:`text-body-small text-medium-emphasis mt-3`};var _hoisted_13$7={key:0};var _hoisted_14$5={class:`local-remotes__message`};var _hoisted_15$5={key:0};var _hoisted_16$5={class:`local-remotes__url`};var _hoisted_17$4={key:0};var _hoisted_18$2={key:1};var _hoisted_19$2={key:2};var _sfc_main$55={__name:`Vibe64LocalRemoteControls`,props:{project:{type:Object,required:true}},setup(__props){const props=__props;const{xs}=useDisplay();const state=ref(null);const busy=ref(``);const error=ref(``);const installCommand=ref(``);const errorCode=ref(``);const stillMissing=ref(false);const isBusy=computed(()=>Boolean(busy.value));const detailsOpen=ref(false);const settingsOpen=ref(false);const settings=reactive({remote:``,branch:``,pushRemote:``,pushBranch:``});const settingsReview=ref(null);const pendingReview=ref(null);const branchAction=ref(``);const branchName=ref(``);const branchReview=ref(null);const feedback=useUiFeedback({source:`vibe64.repository.remote`});const endpoint=computed(()=>scopedDevelopmentApiUrl(studioApiPath(`vibe64/repository/remote`),props.project.slug));let generation=0;let timer;const remoteError=computed(()=>error.value||state.value?.error||``);const notRepository=computed(()=>!error.value&&state.value?.repository===false);const gitUnavailable=computed(()=>({vibe64_git_missing:{chip:`Git needed`,title:`Git isn't installed on this computer.`,hint:`Vibe64 uses Git to keep the history of your project. Install it, then check again.`},vibe64_git_too_old:{chip:`Update Git`,title:`This Git is too old for Vibe64.`,hint:`Vibe64 needs Git 2.28 or newer. Update it, then check again.`}})[errorCode.value]||null);const chipLabel=computed(()=>gitUnavailable.value?.chip||(notRepository.value?`No Git yet`:state.value?.branch||(state.value?`No branch`:`Repository`)));const syncStatus=computed(()=>{const current=state.value;if(gitUnavailable.value)return{label:gitUnavailable.value.chip,icon:mdiAlertCircleOutline,color:`warning`};if(remoteError.value)return{label:`Check failed`,icon:mdiAlertCircleOutline,color:`error`};if(notRepository.value)return{label:`No Git yet`,icon:mdiSourceRepository};if(!current)return{label:`Not checked`,icon:mdiHelpCircleOutline};if(!current.upstream&&!current.push)return{label:current.remotes.length?`Setup needed`:`Local only`,icon:mdiLinkVariantOff};const changes=[];if(current.incoming>0)changes.push(`${current.incoming} incoming`);if(current.outgoing>0)changes.push(`${current.outgoing} outgoing`);if(changes.length)return{label:changes.join(` · `),icon:mdiSwapVertical,color:`primary`};if(!current.upstream||!current.push)return{label:`Setup needed`,icon:mdiLinkVariantOff};if(current.incoming===null||current.outgoing===null)return{label:`Not checked`,icon:mdiHelpCircleOutline};return{label:`Up to date`,icon:mdiCheckCircleOutline,color:`success`}});function destination(target){return`${target.remote}/${target.branch}`}function snapshot(value){return JSON.parse(JSON.stringify(value))}async function request(body){const result=await getHttpWebClient().request(endpoint.value,{method:`POST`,body});if(result?.ok===false)throw vibe64ApiError(result,`The Git operation failed.`);return result}async function refresh(background=true){if(busy.value||settingsOpen.value||pendingReview.value||branchAction.value||document.hidden||props.project.repositoryMode!==`local_source`)return;const current=generation;busy.value=`fetch`;try{const result=await request({action:`fetch`,background});if(current!==generation)return;state.value=result;error.value=``;errorCode.value=``;installCommand.value=``}catch(cause){if(current===generation){error.value=cause.message;errorCode.value=String(cause.code||``);installCommand.value=String(cause.details?.installCommand||``);if(!background&&!gitUnavailable.value)feedback.error(cause,`Could not fetch remote changes.`)}}finally{if(current===generation)busy.value=``}}function review(action){detailsOpen.value=false;const current=state.value;pendingReview.value={action,review:snapshot(current.review),target:snapshot(action===`push`?current.push:current.upstream),count:current.outgoing,merge:action===`pull`&&current.incoming>0&&current.localAhead>0}}function openSettings(){detailsOpen.value=false;settingsReview.value=snapshot(state.value.review);const onlyRemote=state.value.remotes.length===1?state.value.remotes[0].name:``;Object.assign(settings,{remote:state.value.upstream?.remote||onlyRemote,branch:state.value.upstream?.branch||state.value.branch,pushRemote:state.value.push?.remote||onlyRemote,pushBranch:state.value.push?.branch||state.value.branch});settingsOpen.value=true}function openBranch(action){detailsOpen.value=false;branchReview.value=snapshot(state.value.review);branchName.value=``;branchAction.value=action}async function execute(body){if(busy.value)return;const current=generation;busy.value=body.action;try{const result=await request(body);if(current!==generation)return;state.value=result;settingsOpen.value=false;pendingReview.value=null;branchAction.value=``;error.value=``}catch(cause){if(current===generation)feedback.error(cause,`The Git operation could not finish.`)}finally{if(current===generation)busy.value=``}}async function startVersionControl(){await execute({action:`init`});if(state.value?.repository!==false&&!error.value)feedback.success(`Version control is on for this folder.`)}async function checkAgain(){stillMissing.value=false;await refresh(false);stillMissing.value=Boolean(gitUnavailable.value)}async function saveSettings(){await execute({action:`configure`,review:settingsReview.value,settings:{...settings}});if(!settingsOpen.value)await refresh(false)}function confirmOperation(){const pending=pendingReview.value;return execute({action:pending.action,review:pending.review,merge:pending.merge})}watch(endpoint,()=>{generation+=1;state.value=null;busy.value=``;error.value=``;pendingReview.value=null;settingsOpen.value=false;branchAction.value=``;detailsOpen.value=false;refresh()},{immediate:true});const onVisible=()=>{if(!document.hidden)refresh()};onMounted(()=>{timer=setInterval(onVisible,6e4);document.addEventListener(`visibilitychange`,onVisible);window.addEventListener(`focus`,onVisible)});onScopeDispose(()=>{generation+=1;clearInterval(timer);document.removeEventListener(`visibilitychange`,onVisible);window.removeEventListener(`focus`,onVisible)});return(_ctx,_cache)=>{return __props.project.repositoryMode===`local_source`?(openBlock(),createBlock(VSheet,{key:0,color:`transparent`,class:`local-remotes`,tag:`section`,"aria-label":`Local Git repository`},{default:withCtx(()=>[!state.value&&busy.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,"aria-label":`Loading Git remote status`,"aria-busy":`true`,type:`button`,width:unref(xs)?48:112,height:`32`},null,8,[`width`])):(openBlock(),createBlock(VMenu,{key:1,modelValue:detailsOpen.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>detailsOpen.value=$event),location:`bottom start`,"close-on-content-click":false,width:`360`,"max-width":`calc(100vw - 32px)`},{activator:withCtx(({props:menuProps})=>[createVNode(VBadge,{"model-value":!notRepository.value&&!gitUnavailable.value&&(Boolean(remoteError.value)||state.value?.incoming>0||state.value?.outgoing>0),content:remoteError.value?`!`:(state.value?.incoming||0)+(state.value?.outgoing||0),color:remoteError.value?`error`:`primary`,max:`99`,"offset-x":`5`,"offset-y":`5`},{default:withCtx(()=>[createVNode(VBtn,mergeProps(menuProps,{class:`local-remotes__branch`,variant:`tonal`,rounded:`lg`,height:`32`,icon:unref(xs),width:unref(xs)?48:void 0,"prepend-icon":unref(xs)?void 0:unref(mdiSourceBranch),"append-icon":unref(xs)?void 0:unref(mdiChevronDown),"aria-label":`Git details for ${state.value?.branch||`this repository`}. ${syncStatus.value.label}`,title:`${state.value?.branch||`Git details`} · ${syncStatus.value.label}`}),{default:withCtx(()=>[unref(xs)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiSourceBranch)},null,8,[`icon`])):(openBlock(),createElementBlock(`span`,_hoisted_1$47,toDisplayString(chipLabel.value),1))]),_:1},16,[`icon`,`width`,`prepend-icon`,`append-icon`,`aria-label`,`title`])]),_:2},1032,[`model-value`,`content`,`color`])]),default:withCtx(()=>[gitUnavailable.value?(openBlock(),createBlock(VSheet,{key:0,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[20]||(_cache[20]=createBaseVNode(`div`,{class:`text-label-large mb-3`},`Version control`,-1)),createBaseVNode(`div`,_hoisted_2$39,[createVNode(VAvatar,{color:`warning`,variant:`tonal`,size:`40`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourceRepository)},null,8,[`icon`])]),_:1}),createBaseVNode(`div`,_hoisted_3$34,[createBaseVNode(`p`,_hoisted_4$27,toDisplayString(gitUnavailable.value.title),1),createBaseVNode(`p`,{class:normalizeClass([`local-remotes__hint text-body-medium mt-1 mb-0`,stillMissing.value?`text-high-emphasis`:`text-medium-emphasis`]),"aria-live":`polite`},toDisplayString(stillMissing.value?`Still not found. Did the command finish without errors? Then check again.`:gitUnavailable.value.hint),3)])]),installCommand.value?(openBlock(),createBlock(Vibe64CopyCommand_default,{key:0,class:`mt-4`,command:installCommand.value,label:`Copy the install command`},null,8,[`command`])):createCommentVNode(``,true),createVNode(VBtn,{class:`mt-4`,block:``,color:`primary`,height:`48`,variant:`tonal`,loading:busy.value===`fetch`,disabled:isBusy.value,"prepend-icon":unref(mdiRefresh),onClick:checkAgain},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(` Check again `,-1)])]),_:1},8,[`loading`,`disabled`,`prepend-icon`])]),_:1})):notRepository.value?(openBlock(),createBlock(VSheet,{key:1,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[23]||(_cache[23]=createBaseVNode(`div`,{class:`text-label-large mb-3`},`Version control`,-1)),createBaseVNode(`div`,_hoisted_5$23,[createVNode(VAvatar,{color:`primary`,variant:`tonal`,size:`40`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourceRepository)},null,8,[`icon`])]),_:1}),_cache[21]||(_cache[21]=createBaseVNode(`div`,{class:`min-w-0`},[createBaseVNode(`p`,{class:`text-body-large font-weight-medium ma-0`},`This folder isn't using Git yet.`),createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis mt-1 mb-0`},` Git keeps a history of every change, so sessions can save work and you can go back. `)],-1))]),createVNode(VBtn,{class:`mt-4`,block:``,color:`primary`,height:`48`,variant:`flat`,loading:busy.value===`init`,disabled:isBusy.value,"prepend-icon":unref(mdiSourceBranchPlus),onClick:startVersionControl},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Start version control here `,-1)])]),_:1},8,[`loading`,`disabled`,`prepend-icon`]),_cache[24]||(_cache[24]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis mt-2 mb-0`},`Nothing is uploaded. You can connect GitHub later.`,-1))]),_:1})):(openBlock(),createBlock(VSheet,{key:2,class:`pa-4`,rounded:`lg`,elevation:`3`},{default:withCtx(()=>[_cache[34]||(_cache[34]=createBaseVNode(`div`,{class:`text-label-large mb-2`},`Local repository`,-1)),createBaseVNode(`div`,_hoisted_6$20,[createVNode(VIcon,{icon:syncStatus.value.icon,color:syncStatus.value.color,size:`18`},null,8,[`icon`,`color`]),createBaseVNode(`span`,null,toDisplayString(syncStatus.value.label),1)]),createBaseVNode(`div`,_hoisted_7$17,[createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiSourceBranch),disabled:isBusy.value||!state.value?.head,onClick:_cache[0]||(_cache[0]=$event=>openBranch(`switch`))},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Switch branch…`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiSourceBranch),disabled:isBusy.value||!state.value?.head,onClick:_cache[1]||(_cache[1]=$event=>openBranch(`create`))},{default:withCtx(()=>[..._cache[26]||(_cache[26]=[createTextVNode(`New branch…`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`text`,"prepend-icon":unref(mdiRefresh),"aria-label":busy.value===`fetch`?`Fetching remote changes`:`Fetch remote changes`,disabled:isBusy.value,onClick:_cache[2]||(_cache[2]=$event=>refresh(false))},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value===`fetch`?`Fetching…`:`Fetch`),1)]),_:1},8,[`prepend-icon`,`aria-label`,`disabled`]),state.value?.upstream&&state.value.incoming>0?(openBlock(),createBlock(VBtn,{key:0,height:`48`,color:`primary`,variant:`flat`,"prepend-icon":unref(mdiArrowDown),disabled:isBusy.value||Boolean(remoteError.value),onClick:_cache[3]||(_cache[3]=$event=>review(`pull`))},{default:withCtx(()=>[_cache[27]||(_cache[27]=createTextVNode(` Pull `,-1)),createBaseVNode(`span`,_hoisted_8$17,toDisplayString(state.value.incoming),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),state.value?.push&&state.value.outgoing>0?(openBlock(),createBlock(VBtn,{key:1,height:`48`,color:`primary`,variant:state.value.incoming>0?`tonal`:`flat`,"prepend-icon":unref(mdiArrowUp),disabled:isBusy.value||Boolean(remoteError.value),onClick:_cache[4]||(_cache[4]=$event=>review(`push`))},{default:withCtx(()=>[_cache[28]||(_cache[28]=createTextVNode(` Push `,-1)),createBaseVNode(`span`,_hoisted_9$13,toDisplayString(state.value.outgoing),1)]),_:1},8,[`variant`,`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),createVNode(VDivider,{class:`my-3`}),createBaseVNode(`dl`,_hoisted_10$12,[_cache[29]||(_cache[29]=createBaseVNode(`dt`,null,`Branch`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.branch||`No branch checked out`),1),_cache[30]||(_cache[30]=createBaseVNode(`dt`,null,`Pull from`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.upstream?destination(state.value.upstream):`Not configured`),1),_cache[31]||(_cache[31]=createBaseVNode(`dt`,null,`Push to`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.push?destination(state.value.push):`Not configured`),1),_cache[32]||(_cache[32]=createBaseVNode(`dt`,null,`Last checked`,-1)),createBaseVNode(`dd`,null,toDisplayString(state.value?.checkedAt?new Date(state.value.checkedAt).toLocaleString():`Not checked yet`),1)]),remoteError.value?(openBlock(),createElementBlock(`p`,_hoisted_11$10,toDisplayString(remoteError.value),1)):!state.value?.upstream||!state.value?.push?(openBlock(),createElementBlock(`p`,_hoisted_12$9,` Set pull and push destinations to track remote changes. `)):createCommentVNode(``,true),createVNode(VDivider,{class:`my-3`}),createVNode(VBtn,{variant:`text`,block:``,height:`48`,"prepend-icon":unref(mdiCogOutline),disabled:isBusy.value||!state.value?.branch,onClick:openSettings},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(` Remote settings `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])]),_:1}))]),_:1},8,[`modelValue`])),createVNode(VDialog,{"model-value":Boolean(branchAction.value),"max-width":`560`,scrollable:``,persistent:isBusy.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>!$event&&(branchAction.value=``))},{default:withCtx(()=>[createVNode(VCard,{title:branchAction.value===`create`?`Create and switch branch`:`Switch local branch`},{default:withCtx(()=>[createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createBaseVNode(`p`,null,[_cache[35]||(_cache[35]=createTextVNode(`Changes the opened project folder from `,-1)),createBaseVNode(`strong`,null,toDisplayString(branchReview.value?.branch),1),_cache[36]||(_cache[36]=createTextVNode(`. The folder must be clean.`,-1))]),_cache[37]||(_cache[37]=createBaseVNode(`p`,null,`Existing sessions keep their original destination. To commit or Update those sessions, switch this folder back to their branch. New sessions start on the selected branch.`,-1)),branchAction.value===`create`?(openBlock(),createElementBlock(`p`,_hoisted_13$7,`The new branch starts at the current local commit. Nothing is pushed.`)):createCommentVNode(``,true),branchAction.value===`create`?(openBlock(),createBlock(VTextField,{key:1,modelValue:branchName.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>branchName.value=$event),label:`New branch name`,disabled:isBusy.value,maxlength:`255`},null,8,[`modelValue`,`disabled`])):(openBlock(),createBlock(VSelect,{key:2,modelValue:branchName.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>branchName.value=$event),items:state.value?.localBranches||[],label:`Local branch`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`])),_cache[38]||(_cache[38]=createBaseVNode(`p`,null,`Database contents stay as they are. Branch selection does not undo migrations.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[8]||(_cache[8]=$event=>branchAction.value=``)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,color:`primary`,variant:`flat`,disabled:isBusy.value||!branchName.value||branchName.value===branchReview.value?.branch,onClick:_cache[9]||(_cache[9]=$event=>execute({action:branchAction.value,branch:branchName.value,review:branchReview.value}))},{default:withCtx(()=>[createTextVNode(toDisplayString(isBusy.value?`Switching…`:branchAction.value===`create`?`Create & switch`:`Switch branch`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`model-value`,`persistent`]),createVNode(VDialog,{modelValue:settingsOpen.value,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>settingsOpen.value=$event),"max-width":`560`,scrollable:``,persistent:isBusy.value},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`Remote settings`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_14$5,[_cache[41]||(_cache[41]=createTextVNode(`Destinations for `,-1)),createBaseVNode(`strong`,null,toDisplayString(state.value?.branch),1),_cache[42]||(_cache[42]=createTextVNode(`. Saved in this repository’s Git configuration, including for terminal commands.`,-1))]),!state.value?.remotes?.length?(openBlock(),createElementBlock(`p`,_hoisted_15$5,[..._cache[43]||(_cache[43]=[createTextVNode(`No remotes configured. Add one with `,-1),createBaseVNode(`code`,null,`git remote add`,-1),createTextVNode(` in the project folder, then Fetch.`,-1)])])):createCommentVNode(``,true),createVNode(VSelect,{modelValue:settings.remote,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>settings.remote=$event),items:state.value?.remotes||[],"item-title":`name`,"item-value":`name`,label:`Pull remote`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextField,{modelValue:settings.branch,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>settings.branch=$event),label:`Pull branch`,disabled:isBusy.value},null,8,[`modelValue`,`disabled`]),createVNode(VSelect,{modelValue:settings.pushRemote,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>settings.pushRemote=$event),items:state.value?.remotes||[],"item-title":`name`,"item-value":`name`,label:`Push remote`,disabled:isBusy.value},null,8,[`modelValue`,`items`,`disabled`]),createVNode(VTextField,{modelValue:settings.pushBranch,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>settings.pushBranch=$event),label:`Push branch`,disabled:isBusy.value},null,8,[`modelValue`,`disabled`])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[15]||(_cache[15]=$event=>settingsOpen.value=false)},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:isBusy.value||!settings.remote||!settings.branch||!settings.pushRemote||!settings.pushBranch,onClick:saveSettings},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Saving…`:`Save settings`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`]),createVNode(VDialog,{"model-value":Boolean(pendingReview.value),"max-width":`560`,scrollable:``,persistent:isBusy.value,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(pendingReview.value=null))},{default:withCtx(()=>[pendingReview.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(pendingReview.value.action===`push`?`Push saved work`:`Pull remote changes`),1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,[createTextVNode(toDisplayString(pendingReview.value.action===`push`?`Push to`:`Pull from`)+` `,1),createBaseVNode(`strong`,null,toDisplayString(destination(pendingReview.value.target)),1)]),createBaseVNode(`p`,_hoisted_16$5,toDisplayString(pendingReview.value.target.url),1),pendingReview.value.action===`push`?(openBlock(),createElementBlock(`p`,_hoisted_17$4,`Pushes `+toDisplayString(pendingReview.value.count)+` outgoing `+toDisplayString(pendingReview.value.count===1?`commit`:`commits`)+` from the local project. Unsaved session work is not included.`,1)):pendingReview.value.merge?(openBlock(),createElementBlock(`p`,_hoisted_18$2,`Local and remote history have both advanced. Merge the remote changes into the local project, preserving both histories. Conflicts stop the operation for review.`)):(openBlock(),createElementBlock(`p`,_hoisted_19$2,`Update the local project folder. Your sessions keep their work and can then use Update this session.`))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:_cache[17]||(_cache[17]=$event=>pendingReview.value=null)},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{height:`48`,disabled:isBusy.value,onClick:confirmOperation},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Working…`:pendingReview.value.action===`push`?`Push saved work`:pendingReview.value.merge?`Merge remote changes`:`Pull changes`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])]),_:1})):createCommentVNode(``,true)}}};var Vibe64LocalRemoteControls_default=_plugin_vue_export_helper_default(_sfc_main$55,[[`__scopeId`,`data-v-f775cba6`]]);var _hoisted_1$46={class:`studio-autopilot__composer-delivery`};var _sfc_main$54={__name:`Vibe64ComposerDelivery`,props:{stopVisible:Boolean,stopEnabled:Boolean,stopping:Boolean,canSubmit:Boolean,sending:Boolean,submitMode:{type:String,default:`send`},submitAriaLabel:{type:String,default:`Send message`},submitTitle:{type:String,default:`Send message`}},emits:[`submit`,`stop`],setup(__props,{expose:__expose}){const sendButton=ref(null);__expose({focus:()=>(sendButton.value?.$el||sendButton.value)?.focus?.()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$46,[__props.stopVisible?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Stop`,title:`Stop assistant`,disabled:!__props.stopEnabled,"aria-busy":__props.stopping?`true`:void 0,icon:unref(mdiStop),size:`small`,variant:`text`,class:`studio-autopilot__composer-action`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`stop`))},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),createVNode(VBtn,{ref_key:`sendButton`,ref:sendButton,"aria-label":__props.submitAriaLabel,title:__props.submitTitle,disabled:!__props.canSubmit,"aria-busy":__props.sending&&!__props.canSubmit?`true`:void 0,color:`primary`,size:`small`,variant:`flat`,icon:__props.submitMode===`send`?unref(mdiSend):unref(mdiArrowTopRight),class:`studio-autopilot__composer-action`,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`submit`))},null,8,[`aria-label`,`title`,`disabled`,`aria-busy`,`icon`])])}}};var Vibe64ComposerDelivery_default=_plugin_vue_export_helper_default(_sfc_main$54,[[`__scopeId`,`data-v-212243ea`]]);var _hoisted_1$45={class:`d-flex align-center justify-space-between px-4`};var _hoisted_2$38={class:`d-flex`};var _hoisted_3$33={class:`chat-modes__details-body`};var _hoisted_4$26={key:0,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_5$22={key:2,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_6$19={key:3,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_7$16={class:`chat-modes__model`};var _hoisted_8$16={class:`chat-modes__model`};var _hoisted_9$12={class:`px-4 pb-3`};var _hoisted_10$11={key:0,class:`text-body-small`};var _hoisted_11$9={key:0,class:`text-body-small`};var _hoisted_12$8={class:`px-4 pb-3`};var _sfc_main$53={__name:`Vibe64ChatModeControls`,props:{session:{type:Object,default:null},goal:{type:Object,default:null},sessionsApiPath:{type:[String,Object,Function],default:``},purposes:{type:Object,default:null},savePreferences:{type:Function,default:null},requiredMode:{type:String,default:``},temporary:Boolean,disabled:Boolean,active:Boolean,connecting:Boolean,canConfigure:Boolean,loading:Boolean,loadError:{type:String,default:``}},emits:[`saved`,`reload`,`custom`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const preferences=computed(()=>assistantRoutingFromMetadata(props.session?.metadata));const mode=ref(``);const review=ref(true);const autoSave=ref(true);const deslopConfirmOpen=ref(false);const modelOverride=ref(null);const saving=ref(false);const saveError=ref(``);const detailsOpen=ref(false);const modeMenu=ref(null);const routingOpen=ref(false);function openAccountConnections(request){routingOpen.value=false;requestVibe64AccountConnectionsDialog(request)}const routingFocusRole=ref(``);const routingSaving=ref(false);const modeIcons={custom:mdiTuneVariant,senior:mdiAccountStarOutline,junior:mdiAccountOutline,auto:mdiAutoFix,fix:mdiWrenchOutline};const modes=computed(()=>(props.temporary?[...ASSISTANT_MODES.filter(({id})=>id!==`auto`),ASSISTANT_FIX_MODE]:ASSISTANT_MODES).filter(({id})=>(!props.requiredMode||id===`custom`||id===props.requiredMode)&&!decisions.value[id]?.approvalRequired));const modeLabel=computed(()=>assistantModeLabel(mode.value));const decisions=computed(()=>props.purposes||{});const hasGoal=computed(()=>Boolean(props.goal&&![`completed`,`complete`].includes(props.goal.status)));const ownerOnly=computed(()=>!props.temporary&&decisions.value.senior?.approvalRequired===true);const reviewAvailable=computed(()=>!props.temporary&&!ownerOnly.value&&!hasGoal.value&&mode.value===`auto`);const updatedPreferences=computed(()=>({mode:mode.value,review:review.value,...props.temporary?{}:{autoSave:autoSave.value},...modelOverride.value?{override:modelOverride.value}:{}}));watch(preferences,value=>{mode.value=value?.mode||``;modelOverride.value=value?.override||null;({review:review.value,autoSave:autoSave.value}=assistantRoutingAutomation(value))},{immediate:true});function roleLabel(role){if(role===`custom`&&preferences.value?.mode!==`custom`)return`Choose a model and thinking level.`;const decision=decisions.value[role===`router`?`request_routing`:role];if(decision&&!decision.available)return decision.message||`Unavailable`;const selection=decision?.effectiveSelection;if(!selection)return canConfigureMessage();return vibe64AssistantSelectionLabel(selection)}function canConfigureMessage(){return props.canConfigure?`Choose a model in Models.`:`Ask the owner to configure this mode.`}const autoDescription=computed(()=>decisions.value.auto?.available===false?decisions.value.auto.message:`Senior for plans and reviews; Junior otherwise · Router: ${roleLabel(`router`)}`);const description=computed(()=>{if(!mode.value)return props.session?.assistantSelection?`Current model · ${vibe64AssistantSelectionLabel(props.session.assistantSelection)}`:`Choose an assistant`;if(mode.value===`auto`)return autoDescription.value;const selectedOverride=preferences.value?.mode===mode.value&&preferences.value.override;return selectedOverride&&!decisions.value[mode.value]?`${vibe64AssistantSelectionLabel(selectedOverride)} · custom`:roleLabel(mode.value)});const triggerLabel=computed(()=>[`Chat mode${modeLabel.value?`: ${modeLabel.value}`:``}`,description.value,review.value&&reviewAvailable.value&&`Automatic deslop by Senior on`,autoSave.value&&reviewAvailable.value&&`Automatic save after plans on`].filter(Boolean).map(part=>part.replace(/\.$/u,``)).join(`. `));const reviewDescription=computed(()=>{if(hasGoal.value)return`Auto and automatic review apply after the current goal finishes.`;if(ownerOnly.value)return``;if(!reviewAvailable.value)return`Automatic review is available in Auto only.`;if(decisions.value.review?.available===false)return decisions.value.review.message;return``});const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.assistant-selection.update`,buildCommandOptions:()=>({method:`PATCH`,path:vibe64SessionPath(readRefOrGetterValue(props.sessionsApiPath),props.session.sessionId,`/assistant-selection`)}),buildRawPayload:()=>vibe64RealtimeOriginPayload({assistantRouting:updatedPreferences.value}),onRunSuccess:result=>{if(result?.ok===false)throw new Error(result.error||`Chat mode could not be saved.`)},fallbackRunError:`Chat mode could not be saved.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});function openCustom(){if(props.disabled||saving.value||ownerOnly.value)return;detailsOpen.value=false;emit(`custom`,modeMenu.value?.activatorEl)}async function save(nextMode=mode.value,nextReview=review.value,nextAutoSave=autoSave.value){if(saving.value||props.disabled||!modes.value.some(({id})=>id===nextMode)||nextMode===`auto`&&props.temporary)return;const previous={mode:mode.value,review:review.value,autoSave:autoSave.value,override:modelOverride.value};if(nextMode!==mode.value)modelOverride.value=null;mode.value=nextMode;review.value=!props.temporary&&nextReview;autoSave.value=!props.temporary&&nextAutoSave;saving.value=true;saveError.value=``;try{const result=props.savePreferences?await props.savePreferences(updatedPreferences.value):await command.run();if(result?.ok===false)throw new Error(result.error||`Chat mode could not be saved.`);emit(`saved`)}catch(error){mode.value=previous.mode;review.value=previous.review;autoSave.value=previous.autoSave;modelOverride.value=previous.override;saveError.value=error.message||`Chat mode could not be saved.`}finally{saving.value=false}}function changeDeslop(enabled){if(enabled)save(mode.value,true);else deslopConfirmOpen.value=true}function confirmDeslopOff(){deslopConfirmOpen.value=false;save(mode.value,false)}function configure(){if(!props.canConfigure)return;routingFocusRole.value=``;detailsOpen.value=false;routingOpen.value=true}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VMenu,{ref_key:`modeMenu`,ref:modeMenu,modelValue:detailsOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>detailsOpen.value=$event),"close-on-content-click":false,location:`top start`,width:344,"max-width":`calc(100vw - 24px)`},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{class:`chat-modes__trigger`,variant:`text`,size:`small`,icon:modeIcons[mode.value]||unref(`M8 13C6.14 13 4.59 14.28 4.14 16H2V18H4.14C4.59 19.72 6.14 21 8 21S11.41 19.72 11.86 18H22V16H11.86C11.41 14.28 9.86 13 8 13M8 19C6.9 19 6 18.1 6 17C6 15.9 6.9 15 8 15S10 15.9 10 17C10 18.1 9.1 19 8 19M19.86 6C19.41 4.28 17.86 3 16 3S12.59 4.28 12.14 6H2V8H12.14C12.59 9.72 14.14 11 16 11S19.41 9.72 19.86 8H22V6H19.86M16 9C14.9 9 14 8.1 14 7C14 5.9 14.9 5 16 5S18 5.9 18 7C18 8.1 17.1 9 16 9Z`),"aria-label":triggerLabel.value,title:triggerLabel.value,"aria-busy":saving.value?`true`:void 0}),null,16,[`icon`,`aria-label`,`title`,`aria-busy`])]),default:withCtx(()=>[createVNode(VCard,{class:`chat-modes__details`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$45,[_cache[15]||(_cache[15]=createBaseVNode(`strong`,null,`Chat mode`,-1)),createBaseVNode(`div`,_hoisted_2$38,[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiCogOutline),variant:`text`,width:`48`,height:`48`,"aria-label":`Models`,title:`Models`,onClick:configure},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,width:`48`,height:`48`,"aria-label":`Close chat mode`,title:`Close`,onClick:_cache[0]||(_cache[0]=$event=>detailsOpen.value=false)},null,8,[`icon`])])]),createBaseVNode(`div`,_hoisted_3$33,[__props.connecting||__props.active||saving.value||!mode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$26,toDisplayString(__props.connecting?`Connecting assistant…`:saving.value?`Saving mode…`:__props.active?`For your next request`:description.value),1)):createCommentVNode(``,true),saveError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,density:`compact`,class:`mx-3 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(saveError.value),1)]),_:1})):createCommentVNode(``,true),ownerOnly.value?(openBlock(),createElementBlock(`p`,_hoisted_5$22,`Main chat runs on the owner's AI. Only the owner can change its chat mode, review or model.`)):createCommentVNode(``,true),hasGoal.value?(openBlock(),createElementBlock(`p`,_hoisted_6$19,`Model and Senior/Junior changes apply to the next goal turn. Another tool or Auto applies after this goal finishes.`)):createCommentVNode(``,true),createVNode(VList,{lines:false,class:`py-0`},{default:withCtx(()=>[createVNode(VListItem,{title:__props.requiredMode?`Choose model`:`Custom`,"prepend-icon":modeIcons.custom,active:mode.value===`custom`,role:`button`,"aria-pressed":mode.value===`custom`,disabled:__props.disabled||saving.value||ownerOnly.value,color:`primary`,"min-height":`60`,onClick:openCustom},{subtitle:withCtx(()=>[createBaseVNode(`span`,_hoisted_7$16,toDisplayString(mode.value===`custom`?description.value:roleLabel(`custom`)),1)]),append:withCtx(()=>[mode.value===`custom`?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`18`,"aria-label":`Selected`},null,8,[`icon`])):createCommentVNode(``,true)]),_:1},8,[`title`,`prepend-icon`,`active`,`aria-pressed`,`disabled`])]),_:1}),__props.loadError?(openBlock(),createBlock(VAlert,{key:4,type:`error`,variant:`tonal`,density:`compact`,class:`mx-3 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.loadError)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>emit(`reload`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):__props.loading?(openBlock(),createBlock(VSkeletonLoader,{key:5,type:`list-item-two-line@${modes.value.length-1}`},null,8,[`type`])):(openBlock(),createElementBlock(Fragment,{key:6},[createVNode(VList,{"aria-label":`Choose chat mode`,lines:false,class:`py-0`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(modes.value.filter(({id})=>id!==`custom`),choice=>{return openBlock(),createBlock(VListItem,{key:choice.id,title:choice.label,"prepend-icon":modeIcons[choice.id],active:mode.value===choice.id,"aria-pressed":mode.value===choice.id,role:`button`,disabled:__props.disabled||saving.value||decisions.value[choice.id]?.available!==true,color:`primary`,"min-height":`60`,"aria-disabled":__props.disabled||saving.value||decisions.value[choice.id]?.available!==true?`true`:void 0,onClick:$event=>save(choice.id)},{subtitle:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$16,toDisplayString(mode.value===choice.id?description.value:choice.id===`auto`?autoDescription.value:roleLabel(choice.id)),1)]),append:withCtx(()=>[mode.value===choice.id?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`18`,"aria-label":`Selected`},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`title`,`prepend-icon`,`active`,`aria-pressed`,`disabled`,`aria-disabled`,`onClick`])}),128))]),_:1}),createBaseVNode(`div`,_hoisted_9$12,[__props.requiredMode?(openBlock(),createElementBlock(`p`,_hoisted_10$11,`Repair chats use Fix it with AI, or a model you choose. Model changes apply to the next turn.`)):createCommentVNode(``,true),!__props.temporary&&mode.value===`auto`?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[17]||(_cache[17]=createBaseVNode(`p`,{class:`text-body-small`},`Senior always reviews Junior's completed work and, with Deslop on, cleans it up. Keep Deslop on unless this is a quick throwaway project. Automatic save runs Save once Senior completes a plan.`,-1)),createVNode(VSwitch,{"model-value":review.value,disabled:__props.disabled||saving.value||__props.connecting||!reviewAvailable.value,label:`Deslop during Senior review`,"hide-details":``,color:`primary`,density:`compact`,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>changeDeslop($event))},null,8,[`model-value`,`disabled`]),createVNode(VSwitch,{"model-value":autoSave.value,disabled:__props.disabled||saving.value||__props.connecting||!reviewAvailable.value,label:`Automatic save after completing a plan`,"hide-details":``,color:`primary`,density:`compact`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>save(mode.value,review.value,$event))},null,8,[`model-value`,`disabled`]),reviewDescription.value?(openBlock(),createElementBlock(`p`,_hoisted_11$9,toDisplayString(reviewDescription.value),1)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])],64)),createBaseVNode(`div`,_hoisted_12$8,[renderSlot(_ctx.$slots,`default`,{close:()=>{detailsOpen.value=false}},void 0,true)])])]),_:3})]),_:3},8,[`modelValue`]),createVNode(VDialog,{modelValue:deslopConfirmOpen.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>deslopConfirmOpen.value=$event),"max-width":`30rem`,"aria-labelledby":`chat-modes-deslop-off-title`},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:`chat-modes-deslop-off-title`,class:`text-wrap`},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Turn off Deslop?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createBaseVNode(`p`,{class:`mb-3`},`Deslop is the clean-up Senior does while reviewing: it removes duplicated helpers, dead code and muddled structure that AI-written code collects.`,-1),createBaseVNode(`p`,{class:`mb-3`},[createBaseVNode(`strong`,null,`Without it, code quality will suffer.`),createTextVNode(` Over time the project gets harder to change and may crash and burn, unless you run Deslop yourself regularly by asking the AI to “Deslop” in the chat.`)],-1),createBaseVNode(`p`,null,`Only skip Deslop for a quick throwaway project. Cancel keeps it on.`,-1)])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`flat`,color:`primary`,autofocus:``,onClick:_cache[5]||(_cache[5]=$event=>deslopConfirmOpen.value=false)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{variant:`text`,color:`error`,onClick:confirmDeslopOff},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Turn off Deslop`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),__props.canConfigure?(openBlock(),createBlock(VDialog,{key:0,modelValue:routingOpen.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>routingOpen.value=$event),"max-width":`38rem`,persistent:routingSaving.value,scrollable:``,"aria-label":`Models`,onAfterEnter:_cache[13]||(_cache[13]=$event=>routingFocusRole.value=decisions.value.auto?.missingRoles?.[0]||``),onAfterLeave:_cache[14]||(_cache[14]=$event=>modeMenu.value?.activatorEl?.focus())},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[routingOpen.value?(openBlock(),createBlock(unref(ModelRoutingForm_default),{key:0,"focus-role":routingFocusRole.value,onBusy:_cache[7]||(_cache[7]=$event=>routingSaving.value=$event),onClose:_cache[8]||(_cache[8]=$event=>routingOpen.value=false),onSaved:_cache[9]||(_cache[9]=$event=>{routingSaving.value=false;routingOpen.value=false}),onAddTeamKey:_cache[10]||(_cache[10]=$event=>openAccountConnections({providerId:`ai`,section:`team`})),onConnectProvider:_cache[11]||(_cache[11]=$event=>openAccountConnections({providerId:$event}))},null,8,[`focus-role`])):createCommentVNode(``,true)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`])):createCommentVNode(``,true)],64)}}};var Vibe64ChatModeControls_default=_plugin_vue_export_helper_default(_sfc_main$53,[[`__scopeId`,`data-v-d98f3d5b`]]);var _hoisted_1$44={class:`vibe64-temporary-ai__recovery-row`};var _hoisted_2$37={key:1,"aria-live":`polite`,class:`vibe64-temporary-ai__recovery`,"data-temporary-ai-recovery":``,role:`status`};var _hoisted_3$32={class:`vibe64-temporary-ai__recovery-summary`};var _hoisted_4$25={key:0};var _sfc_main$52={__name:`Vibe64TemporaryAiRecoveryRow`,props:{activeTask:{type:Object,default:null},restoreError:{type:String,default:``},recoveryVerified:Boolean,recoveryChecking:Boolean,inputDisabled:Boolean,connectionUnavailable:Boolean,updateDisabled:Boolean,updateDisabledReason:{type:String,default:``},canReviewUpdate:Boolean},emits:[`retry-restore`,`check-update`,`review-update`],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const activeTaskRecoveryTitle=computed(()=>{if(props.recoveryChecking)return`Checking Update…`;const status=String(props.activeTask?.status||``).trim();if([`starting`,`inProgress`].includes(status))return`AI repair in progress`;if(props.activeTask?.recoveryOutcome===`failed`)return`Update needs attention`;if(props.activeTask?.recoveryOutcome===`unconfirmed`)return`Update result not confirmed`;if(props.activeTask?.recoveryOperation===`update`)return`Update not yet verified`;if(props.activeTask?.outcomeKind===`continue`)return`Waiting for your reply`;if(status===`completed`)return`AI repair finished`;if(status===`failed`)return`AI repair needs attention`;if(status===`interrupted`)return`AI repair stopped`;return`AI repair`});const activeTaskRecoveryStatus=computed(()=>{const task=props.activeTask||{};if(task.recoveryOutcome===`checking`)return``;if(task.recoveryOperation===`update`&&props.updateDisabled&&props.updateDisabledReason)return props.updateDisabledReason;if(task.recoveryOutcome===`failed`)return task.recoveryAutoPaused?`Automatic repair paused after repeated conflicts. Continue here or check Update again. Main chat has the latest Update diagnostic.`:`The Update check did not succeed. Continue this repair or check Update again. Main chat has the latest Update diagnostic.`;if(task.recoveryOutcome===`unconfirmed`)return task.recoveryOutcomeMessage||`Vibe64 could not confirm this Update result. Check the current session before trying again.`;if(task.recoveryOperation===`update`&&task.outcomeKind===`continue`)return`Reply if a decision is needed, or use Check Update to verify the prepared edits.`;if(task.outcomeKind===`continue`)return``;const status=String(task.status||``).trim();if(status===`completed`)return task.completionMessage||`Temporary AI finished. Review its result below.`;if(status===`failed`)return task.failureMessage||`Temporary AI stopped before it could confirm the repair. Review the error and progress below.`;if(status===`interrupted`)return task.recoveryOperation===`update`?`You stopped this repair. Partial edits remain and Update still needs to succeed. You can continue the repair here.`:`You stopped this repair. You can continue in this temporary chat or return to Main chat.`;return task.nextStepMessage||`Follow progress here and reply below if Temporary AI needs a decision.`});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$44,[props.restoreError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.restoreError)+` `,1),createVNode(VBtn,{color:`error`,variant:`text`,height:`48`,onClick:_cache[0]||(_cache[0]=$event=>emit(`retry-restore`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),props.activeTask?.recoveryNotice&&!props.recoveryVerified&&!props.connectionUnavailable?(openBlock(),createElementBlock(`div`,_hoisted_2$37,[createBaseVNode(`div`,_hoisted_3$32,[createBaseVNode(`strong`,null,toDisplayString(activeTaskRecoveryTitle.value),1),activeTaskRecoveryStatus.value&&!props.activeTask.busy?(openBlock(),createElementBlock(`details`,_hoisted_4$25,[_cache[4]||(_cache[4]=createBaseVNode(`summary`,null,`Details`,-1)),createBaseVNode(`p`,null,toDisplayString(activeTaskRecoveryStatus.value),1)])):createCommentVNode(``,true)]),props.activeTask.recoveryOperation===`update`&&!props.recoveryVerified?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-check-update":``,disabled:props.updateDisabled||props.inputDisabled||props.activeTask.busy||props.activeTask.recoveryOutcome===`unconfirmed`,loading:props.recoveryChecking,title:props.updateDisabled?props.updateDisabledReason:`Check whether the repaired session can update`,size:`small`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>emit(`check-update`,props.activeTask))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Check Update `,-1)])]),_:1},8,[`disabled`,`loading`,`title`])):createCommentVNode(``,true),props.activeTask.recoveryOperation===`update`&&!props.recoveryVerified&&props.canReviewUpdate?(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-review-update":``,disabled:props.updateDisabled||props.inputDisabled||props.activeTask.busy||props.activeTask.recoveryOutcome===`unconfirmed`,size:`small`,variant:`tonal`,onClick:_cache[2]||(_cache[2]=$event=>emit(`review-update`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])}}};var Vibe64TemporaryAiRecoveryRow_default=_plugin_vue_export_helper_default(_sfc_main$52,[[`__scopeId`,`data-v-441bbf81`]]);var _hoisted_1$43={class:`vibe64-temporary-ai__tabs`,"aria-label":`Main and temporary conversations`};var _hoisted_2$36={class:`vibe64-temporary-ai__tab vibe64-temporary-ai__tab--main`};var _hoisted_3$31={class:`vibe64-temporary-ai__task-tabs`};var _hoisted_4$24=[`aria-current`,`data-temporary-ai-task-id`,`aria-label`,`title`,`onClick`];var _hoisted_5$21={key:0,class:`vibe64-temporary-ai__unread`,"aria-hidden":`true`};var _hoisted_6$18={key:1,class:`vibe64-temporary-ai__busy`,"aria-label":`Assistant working`};var _sfc_main$51={__name:`Vibe64TemporaryAiTabs`,props:{tasks:{type:Array,default:()=>[]},activeTaskId:{type:String,default:``},setTabButton:{type:Function,required:true},sessionId:{type:String,default:``},repositoryBusy:Boolean,closingTask:Boolean,stoppingTaskId:{type:String,default:``}},emits:[`select-main-chat`,`select-task`,`rename`,`close`,`new-task`],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const hostConversation=inject(VIBE64_HOST_CONVERSATION_KEY,null);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`nav`,_hoisted_1$43,[createBaseVNode(`div`,_hoisted_2$36,[createBaseVNode(`button`,{class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-main-chat":``,type:`button`,onClick:_cache[0]||(_cache[0]=$event=>emit(`select-main-chat`))},` Main chat `)]),createBaseVNode(`div`,_hoisted_3$31,[unref(hostConversation)?.selected?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__host-tab`,color:unref(hostConversation).color,variant:`flat`,"aria-current":`page`,"prepend-icon":unref(hostConversation).icon,rounded:`pill`,height:`32`,size:`small`,onClick:_cache[1]||(_cache[1]=$event=>unref(hostConversation).open())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(hostConversation).label),1)]),_:1},8,[`color`,`prepend-icon`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(props.tasks,task=>{return openBlock(),createElementBlock(`div`,{key:task.id,class:normalizeClass([`vibe64-temporary-ai__tab`,{"vibe64-temporary-ai__tab--active":!unref(hostConversation)?.selected&&task.id===props.activeTaskId}])},[createBaseVNode(`button`,{ref_for:true,ref:element=>props.setTabButton(task.id,element),"aria-current":!unref(hostConversation)?.selected&&task.id===props.activeTaskId?`page`:void 0,class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-task-id":task.id,"aria-label":task.unread?`${task.label}: unread messages`:task.label,title:task.unread?`${task.label}: unread messages`:task.label,type:`button`,onClick:$event=>emit(`select-task`,task.id)},[createBaseVNode(`span`,null,toDisplayString(task.label),1),task.unread?(openBlock(),createElementBlock(`span`,_hoisted_5$21)):createCommentVNode(``,true),task.nativeWorking?(openBlock(),createElementBlock(`span`,_hoisted_6$18)):createCommentVNode(``,true)],8,_hoisted_4$24),!unref(hostConversation)?.selected&&task.id===props.activeTaskId?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Rename ${task.label}`,class:`vibe64-temporary-ai__tab-rename`,"data-temporary-ai-rename":``,disabled:task.state===`closing`,height:`32`,icon:unref(mdiPencilOutline),"min-width":`32`,size:`x-small`,title:`Rename ${task.label}`,type:`button`,variant:`text`,onClick:$event=>emit(`rename`,task)},null,8,[`aria-label`,`disabled`,`icon`,`title`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-label":`Close ${task.label}`,class:`vibe64-temporary-ai__tab-close`,disabled:props.repositoryBusy||task.recoveryOutcome===`checking`||props.closingTask||props.stoppingTaskId===task.id,height:`32`,icon:unref(mdiClose),"min-width":`32`,size:`x-small`,title:`Close ${task.label}`,type:`button`,variant:`text`,onClick:$event=>emit(`close`,task)},null,8,[`aria-label`,`disabled`,`icon`,`title`,`onClick`])],2)}),128)),createVNode(VBtn,{disabled:!props.sessionId,"aria-label":`New temporary AI task`,class:`vibe64-temporary-ai__new-task`,height:`32`,icon:unref(mdiPlus),"min-width":`32`,size:`x-small`,title:`New temporary AI task`,type:`button`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>emit(`new-task`))},null,8,[`disabled`,`icon`])]),_cache[3]||(_cache[3]=createBaseVNode(`span`,{class:`vibe64-temporary-ai__tabs-spacer`},null,-1))])}}};var Vibe64TemporaryAiTabs_default=_plugin_vue_export_helper_default(_sfc_main$51,[[`__scopeId`,`data-v-eb3acb4f`]]);var _sfc_main$50={__name:`Vibe64AgentSettingsMenu`,props:{agentSettings:{type:Object,default:()=>({})},assistantSelection:{type:Object,default:()=>({})},disabled:Boolean,location:{type:String,default:`top start`}},emits:[`update-setting`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const menuOpen=ref(false);const currentSettings=computed(()=>normalizeVibe64AgentSettings({...props.agentSettings,providerId:props.assistantSelection.engineId}));const draft=ref(currentSettings.value);watch([currentSettings,menuOpen],()=>{draft.value={...currentSettings.value}});const engineId=computed(()=>props.assistantSelection.engineId);const modelProviderId=computed(()=>props.assistantSelection.modelProviderId);const catalog=useVibe64AssistantCatalog({active:computed(()=>menuOpen.value&&Boolean(engineId.value&&modelProviderId.value)),engineId,modelProviderId,providerConnectedOnly:true});const provider=computed(()=>engineId.value&&catalog.modelEngine.value?.engineId===engineId.value?catalog.modelEngine.value.modelProviders.find(row=>row.id===modelProviderId.value&&row.connected):null);const models=computed(()=>(provider.value?.models||[]).filter(model=>model.status===`available`));const modelRows=computed(()=>[{id:``,label:`Use main chat model`},...models.value]);const selectedModel=computed(()=>models.value.find(model=>model.id===(draft.value.model||props.assistantSelection.modelId)));const variantRows=computed(()=>[{id:``,label:`Automatic`},...selectedModel.value?.variants||[]]);const catalogLoading=computed(()=>catalog.modelPage.isInitialLoading.value);const catalogError=computed(()=>catalog.modelPage.loadError.value||``);const summary=computed(()=>{const modelId=currentSettings.value.model||props.assistantSelection.modelId;return modelId?vibe64AssistantSelectionLabel({engineId:engineId.value,modelId,variantId:currentSettings.value.thinking}):`Use main chat model`});const canSave=computed(()=>!props.disabled&&!catalogLoading.value&&!catalogError.value&&Boolean(selectedModel.value)&&variantRows.value.some(row=>row.id===draft.value.thinking)&&[`model`,`thinking`].some(key=>draft.value[key]!==currentSettings.value[key]));function select(key,value){if(props.disabled)return;if(key===`model`&&modelRows.value.some(row=>row.id===value)){draft.value={...draft.value,model:value};if(!variantRows.value.some(row=>row.id===draft.value.thinking))draft.value.thinking=``}else if(key===`thinking`&&variantRows.value.some(row=>row.id===value))draft.value={...draft.value,thinking:value}}function apply(){if(!canSave.value)return;const selected={...draft.value};for(const key of[`model`,`thinking`])if(selected[key]!==currentSettings.value[key])emit(`update-setting`,key,selected[key]);menuOpen.value=false}return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantModelControl_default),{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>menuOpen.value=$event),location:__props.location,"provider-rows":provider.value?[{id:provider.value.id,label:provider.value.label}]:[],"model-provider-id":modelProviderId.value,"model-rows":modelRows.value,"model-id":draft.value.model,"variant-rows":variantRows.value,"variant-id":draft.value.thinking,"selection-summary":summary.value,"button-title":`AI controls: ${summary.value}`,"changes-disabled":__props.disabled,"can-save":canSave.value,"catalog-loading":catalogLoading.value,"catalog-error":catalogError.value,onSelectModel:_cache[2]||(_cache[2]=$event=>select(`model`,$event)),onSelectVariant:_cache[3]||(_cache[3]=$event=>select(`thinking`,$event)),onApply:apply,onReload:unref(catalog).reload},{footer:withCtx(()=>[createVNode(VBtn,{"aria-label":`Close AI controls`,"min-height":`48`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>menuOpen.value=false)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close `,-1)])]),_:1})]),_:1},8,[`modelValue`,`location`,`provider-rows`,`model-provider-id`,`model-rows`,`model-id`,`variant-rows`,`variant-id`,`selection-summary`,`button-title`,`changes-disabled`,`can-save`,`catalog-loading`,`catalog-error`,`onReload`])}}};function routedChatMessage(request,local=null){if(local?.status===`pending`&&local.id===request?.messageId&&[`failed`,`uncertain`].includes(request?.delivery))return local;if(local?.status===`uncertain`&&local.id===request?.messageId&&request?.delivery===`failed`)return local;if(!request||!request.input||request.stopped||request.followup||![`routing`,`sending`,`uncertain`,`failed`].includes(request.delivery))return null;return{...local,id:request.messageId,text:request.input.displayMessage||request.input.message,payload:local?.payload||request.input,status:[`failed`,`uncertain`].includes(request.delivery)?request.delivery:`pending`,error:request.error||``}}function chatTurnsWithRouting(turns,request,checking=false){const result=chatTurnsWithDelivery(turns,request,checking);const notice=assistantRoutingOutcomeNotice(request);if(!notice||result.some(turn=>turn.system?.messageId===notice.messageId))return result;return[...result,{turnId:notice.messageId,system:{role:`system`,...notice}}]}function chatTurnsWithDelivery(turns,request,checking){if(!request)return turns;const matches=turn=>turn.user?.messageId===request.messageId||turn.optimistic?.id===request.messageId;if(turns.some(turn=>matches(turn)&&(!turn.optimistic&&turn.user?.receipt!==false||turn.optimistic?.status===`accepted`)))return turns;if([`failed`,`uncertain`].includes(request.delivery)&&turns.some(turn=>matches(turn)&&turn.optimistic?.status===`pending`))return turns;const message=routedChatMessage(request);if(!message){if(request.delivery!==`accepted`&&!request.followup)return turns;return turns.map(turn=>matches(turn)&&turn.optimistic?{...turn,...turn.system?.delivery?.messageId===request.messageId?{system:void 0}:{},optimistic:{...turn.optimistic,status:`accepted`,error:``}}:turn)}return(turns.some(matches)?turns:[...turns,{turnId:`routing:${message.id}`,user:{role:`user`,text:message.text,messageId:message.id,attachments:request.input.displayAttachments||[]},messages:[]}]).map(turn=>!matches(turn)||turn.optimistic?.status===`uncertain`&&message.status===`failed`?turn:{...turn,optimistic:{...turn.optimistic,id:message.id,status:message.status,error:message.error},system:{role:`system`,text:assistantRoutingStatusLabel(request),...message.status===`uncertain`?{delivery:{messageId:message.id,error:message.error,checking}}:{}}})}function trackRoutedMessage(delivery,message,turns=[]){if(!delivery||!message||delivery.find(message.id))return;delivery.restoreUncertain({messageId:message.id,text:message.text,attachments:message.payload?.displayAttachments||[],error:message.error},turns)}function cancelOwnsMessage(message){return Boolean(message?.cancelling||message?.cancelError)}var _sfc_main$49={__name:`Vibe64EphemeralConversationMessages`,props:{adapter:{type:Object,required:true},recoveryMessage:{type:Object,default:null},routingRequest:{type:Object,default:null},working:{type:Boolean,default:void 0},sessionId:{type:String,default:``},scrollKey:{type:String,default:``},assistantLabel:{type:String,default:`Temporary AI`},emptyMessage:{type:String,default:`Ask a focused question without adding it to the main conversation.`},userLabel:{type:String,default:`You`}},emits:[`resend`,`cancel`,`edit`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const displayAdapter=computed(()=>{const supplied=props.adapter;let turns=(supplied.conversation.turns||[]).map(turn=>{const selection=turn.metadata?.assistantSelection;const present=message=>{if(!message)return message;const recordedSelection=message.assistantSelection||message.metadata?.assistantSelection||selection;const displayed=thinkingMessagePresentation(message,recordedSelection);return displayed&&{...displayed,...conversationAttribution(recordedSelection,message.assistantRouting||message.metadata?.assistantRouting||turn.metadata?.assistantRouting)}};return{...turn,...conversationAttribution(selection,turn.metadata?.assistantRouting),assistant:present(turn.assistant),thinking:turn.thinking?.map(present).filter(Boolean),commentary:turn.commentary?.map(present).filter(Boolean),messages:turn.messages?.map(present).filter(Boolean)}});const notice=props.recoveryMessage;if(notice&&!turns.some(turn=>(turn.messages||[turn.system]).some(message=>message?.messageId===notice.id)))turns=[...turns,{turnId:notice.id,system:{...notice,messageId:notice.id},messages:[{...notice,messageId:notice.id}]}];turns=chatTurnsWithRouting(supplied.delivery?supplied.delivery.turns(turns):turns,props.routingRequest,supplied.delivery?.state.sending===true);return{...supplied,delivery:null,conversation:{...supplied.conversation,cancellableDelivery:true,working:props.working??supplied.conversation.working,turns,assistantLabel:props.assistantLabel,scrollKey:props.scrollKey,variant:`task`,visible:true,userMessageFormat:`plain`,progressPreviewLimit:usesCommentaryForThinking(turns.at(-1)?.metadata?.assistantSelection)?1:0,systemLabel:`System`,welcomeMessage:turns.length?``:props.emptyMessage},actions:{...supplied.actions,resend:id=>emit(`resend`,id),checkDelivery:id=>emit(`resend`,id),cancel:id=>emit(`cancel`,id),edit:id=>emit(`edit`,id)}}});return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantConversationElement_default),{adapter:displayAdapter.value},createSlots({attachments:withCtx(({items})=>[createVNode(_sfc_main$58,{items,"session-id":__props.sessionId},null,8,[`items`,`session-id`])]),"system-message":withCtx(({message})=>[createVNode(Vibe64ConversationStatus_default,{message,onCheckDelivery:_cache[0]||(_cache[0]=$event=>emit(`resend`,$event))},createSlots({_:2},[_ctx.$slots[`message-text`]?{name:`default`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`message-text`,{message})]),key:`0`}:void 0]),1032,[`message`])]),_:2},[_ctx.$slots.hints?{name:`hints`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`hints`)]),key:`0`}:void 0,_ctx.$slots.composer?{name:`composer`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`composer`)]),key:`1`}:void 0]),1032,[`adapter`])}}};var VIBE64_ASSISTANT_ENDPOINT=`/api/assistant/app`;function vibe64AssistantConversationOptions(){return{api:createAssistantApi({request:(url,options)=>getHttpWebClient().request(url,options),resolveBasePath:()=>VIBE64_ASSISTANT_ENDPOINT,resolveSurfaceId:()=>`app`}),endpoint:VIBE64_ASSISTANT_ENDPOINT,surfaceId:`app`,hostSurfaceId:`app`,workspaceSlug:``}}var TEMPORARY_AI_PRESENTATION_FIELDS=Object.freeze([`title`,`draft`,`displayMessage`,`completionMessage`,`dedupeKey`,`failureMessage`,`nextStepMessage`,`recoveryNotice`,`recoveryOperation`,`recoveryConflictId`,`recoveryContext`,`recoveryOutcome`,`recoveryOutcomeMessage`,`recoveryRequestId`,`recoveryAutoPaused`,`recoveryRetryKeys`,`runConflictId`]);function temporaryAiId(prefix=`temporary`){return`${prefix}_${crypto.randomUUID()}`}function temporaryAiRequestError(response={},fallback=`Temporary AI request failed.`){return Object.assign(new Error(vibe64ApiResponseError(response,fallback)),{code:normalizeText$1(response.code),conversationExpired:response.conversationExpired===true||response.code===`vibe64_conversation_closed`,status:normalizeText$1(response.status)})}async function temporaryAiRequest(path=``,options={}){const response=await getHttpWebClient().request(path,options);if(response?.ok===false)throw temporaryAiRequestError(response);return response}function temporaryAiTurnIsActive(status=``){const normalizedStatus=normalizeText$1(status);return[`starting`,`inProgress`].includes(normalizedStatus)||normalizedStatus===`preparing`}function temporaryAiMessages(turns=[]){return turns.flatMap(turn=>(turn.messages||[turn.system,turn.user,...turn.thinking||[],...turn.commentary||[],turn.assistant].filter(Boolean)).map(message=>({...message,id:message.messageId||message.id,...message.role===`user`?{attachments:turn.user?.attachments||[]}:{},status:message.status||(message.complete===false?`inProgress`:`completed`),assistantSelection:turn.metadata?.assistantSelection,assistantRouting:turn.metadata?.assistantRouting})))}function temporaryAiTaskView(value){const task={...value};task.label=task.title||`Temporary ${task.number}`;const runtime=task.binding.runtime.value;Object.defineProperties(task,{draft:{enumerable:true,configurable:true,get:()=>runtime.draft.value,set:value=>{runtime.draft.value=value}},attachments:{enumerable:true,configurable:true,get:()=>runtime.draftAttachments.value,set:value=>{runtime.draftAttachments.value=value}},delivery:{enumerable:true,configurable:true,get:()=>runtime.delivery},messages:{enumerable:true,configurable:true,get(){const messages=temporaryAiMessages(runtime.turns.value);return task.recoveryMessage&&!messages.some(message=>message.id===task.recoveryMessage.id)?[...messages,task.recoveryMessage]:messages}},adapter:{enumerable:true,configurable:true,get:()=>task.binding.adapter.value}});return task}function temporaryAiTaskPresentation(task,selected){return Object.fromEntries(TEMPORARY_AI_PRESENTATION_FIELDS.filter(key=>!selected||selected.has(key)).map(key=>[key,task[key]]))}function chatText(value=``){return String(value||``).trim()}function createChatMessageId({now=Date.now(),originId=vibe64BrowserTabOriginId(),sequence=0}={}){const origin=chatText(originId);const timestamp=Number(now);if(!origin||!Number.isFinite(timestamp))throw new TypeError(`Chat message ids require a browser origin and timestamp.`);const number=Number.isSafeInteger(sequence)&&sequence>0?sequence:1;return`message_${origin.replace(/[^A-Za-z0-9_-]+/gu,`_`)}_${timestamp.toString(36)}_${number.toString(36)}`}function chatMessagePayload(message=``,attachments=[]){const text=chatText(message);if(!text)return null;const files=Array.isArray(attachments)?attachments:[];const attachmentIds=files.map(attachment=>chatText(attachment?.attachmentId)).filter(Boolean);const displayAttachments=normalizeVibe64ConversationAttachments(files.filter(attachment=>chatText(attachment?.attachmentId)));return{...attachmentIds.length?{attachmentIds}:{},...displayAttachments.length?{displayAttachments}:{},displayMessage:text,message:text}}function useVibe64TemporaryAiMessages({tasks,closingTaskIds,stoppingTaskIds,isDisposed,operationBusy,records,reportTaskFinished,updateDraft}){const{canApplyTaskResponse,cancelScheduledSave,ensureConversation,removeTask,saveInFlight,updateTask}=records;function pendingMessage(task,messageId){const local=task?.delivery.find(messageId);const route=assistantRoutingRequestForDisplay(task?.routingMetadata);return route?.messageId===messageId&&routedChatMessage(route,local)||local}function definitelyUnsent(task,messageId){return assistantRoutingRequestForDisplay(task?.routingMetadata)?.messageId!==messageId&&task?.delivery.find(messageId)?.status===`failed`}async function send(taskId=``,{retryMessageId=``,generatedMessage=null,attachmentOwner=null}={}){const task=tasks.value.find(candidate=>candidate.id===taskId);if(isDisposed()||!task||closingTaskIds.has(taskId)||stoppingTaskIds.has(taskId)||readRefOrGetterValue(operationBusy)||task.recoveryOutcome===`checking`)return false;const retry=retryMessageId?pendingMessage(task,retryMessageId):null;const draftPayload=generatedMessage||chatMessagePayload(task.draft,task.attachments);const payload=retry?.payload||draftPayload&&{...draftPayload,agentSettings:task.agentSettings,displayMessage:draftPayload.displayMessage,presentation:temporaryAiTaskPresentation(task),message:!generatedMessage&&task.recoveryContext?`${task.recoveryContext}\n\nUser message:\n${draftPayload.message}`:draftPayload.message,...task.recoveryOperation===`update`?{outputSchema:VIBE64_AGENT_TASK_RESULT_SCHEMA}:{},promptLabel:task.label};if(!payload?.message)return false;const authored=payload.request?payload:{...payload,data:{agentSettings:payload.agentSettings,displayMessage:payload.displayMessage,presentation:payload.presentation,...payload.outputSchema?{outputSchema:payload.outputSchema}:{},promptLabel:payload.promptLabel}};const messageId=retryMessageId||temporaryAiId(`message`);const working=[`starting`,`inProgress`].includes(task.status);function accepted(){if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return;const current=tasks.value.find(candidate=>candidate.id===taskId);if(current.pendingMessageId!==messageId)return;updateTask(taskId,{displayMessage:``,pendingMessageId:``,error:``,errorCode:``,status:current.status});if(retry||current.draft||current.attachments.length)updateTask(taskId,{draft:current.draft})}try{const submission=task.binding.submitPrepared(authored,{messageId,retryMessageId,retry,working,clearDraft:!generatedMessage,attachments:attachmentOwner,isCurrent:()=>canApplyTaskResponse(task)&&!closingTaskIds.has(taskId),onAccepted:accepted,onSubmit(){updateTask(taskId,{sendVersion:(task.sendVersion||0)+1,messageId,busy:true,error:``,errorCode:``,pendingMessageId:messageId,outcomeKind:``,runConflictId:task.recoveryConflictId,recoveryOutcome:task.recoveryOutcome===`failed`?`failed`:``,recoveryOutcomeMessage:task.recoveryOutcome===`failed`?task.recoveryOutcomeMessage:``,status:`starting`});cancelScheduledSave(taskId)},async prepare(submission){const save=saveInFlight(taskId);if(save)await save;if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;await ensureConversation(task);if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;return{...submission.request,data:{...submission.request.data,presentation:{...submission.request.data.presentation,draft:tasks.value.find(candidate=>candidate.id===taskId).draft}}}}});if(submission===false)return false;const response=await submission;if(!canApplyTaskResponse(task)||closingTaskIds.has(taskId))return false;if(response===false||response?.ok===false)throw temporaryAiRequestError(response||{error:task.delivery.find(messageId)?.error||`Message could not be sent.`});const current=tasks.value.find(candidate=>candidate.id===taskId);if(response?.assistantRoutingRequest)updateTask(taskId,{routingMetadata:{...current.routingMetadata,assistant_routing_request:JSON.stringify(response.assistantRoutingRequest)}});return true}catch(error){if(!canApplyTaskResponse(task))return false;if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return false}if(error.code===`vibe64_assistant_routing_cancelled`){const current=tasks.value.find(candidate=>candidate.id===taskId);const text=payload.displayMessage||payload.message;const cancelling=cancelOwnsMessage(task.delivery.find(messageId));if(!cancelling)task.delivery.remove(messageId);updateTask(taskId,{busy:false,pendingMessageId:``,error:``,errorCode:``,status:`interrupted`,...cancelling?{}:{draft:draftWithRestoredMessage(text,current.draft)}});updateTask(taskId,{draft:tasks.value.find(candidate=>candidate.id===taskId).draft});return false}const current=tasks.value.find(candidate=>candidate.id===taskId);const retained=task.delivery.find(messageId);if(retained?.status===`accepted`||!retained&&current.pendingMessageId!==messageId)return true;const stillWorking=task.busy&&error?.conversationExpired!==true;updateTask(taskId,{busy:stillWorking,conversationId:error?.conversationExpired===true?``:current.conversationId,error:normalizeText$1(error?.message||error)||`Temporary AI message could not be sent.`,errorCode:normalizeText$1(error?.code),pendingMessageId:messageId,runId:error?.conversationExpired===true?``:task.runId,status:stillWorking?task.status:`failed`});updateTask(taskId,{draft:current.draft});if(!stillWorking)reportTaskFinished(taskId);return false}}async function cancelMessage(taskId,messageId){const task=tasks.value.find(candidate=>candidate.id===taskId);const message=pendingMessage(task,messageId);const runtime=task?.binding.runtime.value;if(isDisposed()||!message||message.status===`accepted`||!runtime)return false;if(definitelyUnsent(task,messageId)){if(task.delivery.edit(messageId)===null)return false}else{trackRoutedMessage(task.delivery,message,runtime.turns?.value);if(await runtime.cancelMessage(messageId)!==true||!canApplyTaskResponse(task))return false}const current=tasks.value.find(candidate=>candidate.id===taskId);updateTask(taskId,{...current.pendingMessageId===messageId?{pendingMessageId:``}:{},...message.status===`uncertain`||current.error===message.error?{error:``,errorCode:``}:{}});return true}async function editMessage(taskId,messageId){const task=tasks.value.find(candidate=>candidate.id===taskId);const message=pendingMessage(task,messageId);if(message?.status!==`failed`||!await cancelMessage(taskId,messageId))return false;updateDraft(taskId,draftWithRestoredMessage(message.text,task.draft));return true}async function stopTask(taskId=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(isDisposed()||!task||!task.busy&&!task.routingMetadata?.assistant_routing_request||stoppingTaskIds.has(taskId))return false;if(!task.conversationId)throw new Error(`Temporary AI is still starting. Wait for it to start, then stop it.`);stoppingTaskIds.add(taskId);try{const runtime=task.binding.runtime.value;const response=await runtime.cancel();if(!canApplyTaskResponse(task))return false;if(response===false||response?.ok===false)throw temporaryAiRequestError(response||{error:runtime.error.value});updateTask(taskId,{busy:false,...response.routingMetadata?{routingMetadata:response.routingMetadata}:{},error:``,status:`interrupted`});return true}catch(error){if(!canApplyTaskResponse(task))return false;if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return false}throw error}finally{stoppingTaskIds.delete(taskId)}}return{cancelMessage,editMessage,send,stopTask}}function useVibe64TemporaryAiRestore({tasks,activeTaskId,open,closedConversationIds,projectSlug,actorKey,assistantReady,currentSessionId,currentSessionsApiPath,isDisposed,bindTask,records}){const{flushPendingSaves,forgetQueuedSaves,removeTask,updateTask}=records;const restorations=new Map;const restoreError=ref(``);let restoreGeneration=0;let restoreRetryTimer;async function restoreTasks(){clearTimeout(restoreRetryTimer);const generation=++restoreGeneration;if(isDisposed()||!actorKey.value||!readRefOrGetterValue(assistantReady))return;const ownerSessionId=currentSessionId();const apiPath=currentSessionsApiPath();if(!ownerSessionId||!apiPath)return;const persistedTasks=tasks.value.filter(task=>task.conversationId);try{const key=JSON.stringify([apiPath,ownerSessionId,actorKey.value]);let restoring=restorations.get(key);if(restoring){await restoring.catch(()=>{});if(!isDisposed()&&generation===restoreGeneration)return restoreTasks();return}restoring=temporaryAiRequest(vibe64TemporaryConversationsPath(apiPath,ownerSessionId),{method:`GET`}).finally(()=>restorations.delete(key));restorations.set(key,restoring);const response=await restoring;if(isDisposed()||generation!==restoreGeneration)return;restoreError.value=``;const records=response.conversations||[];for(const task of persistedTasks)if(!records.some(record=>record.conversationId===task.conversationId))removeTask(task.id);for(const record of records){if(closedConversationIds.has(record.conversationId))continue;const existing=tasks.value.find(task=>task.conversationId===record.conversationId||task.id===record.conversationId);if(existing){updateTask(existing.id,{purposes:record.purposes,canSteer:record.canSteer,title:record.title||``,number:record.number});continue}const task=bindTask({...record,id:record.conversationId,sessionId:ownerSessionId,apiPath,agentSettings:normalizeVibe64AgentSettings(record.agentSettings),attachments:record.attachments||[],pendingMessageId:``,draft:record.draft||``,draftSaveState:record.draft?`saved`:``,messages:record.messages||[],unread:false,busy:temporaryAiTurnIsActive(record.status),nativeWorking:false,recoveryRetryKeys:record.recoveryRetryKeys||[],recoveryOutcome:record.recoveryOutcome===`checking`?`unconfirmed`:record.recoveryOutcome,recoveryOutcomeMessage:record.recoveryOutcome===`checking`?`The Update request was interrupted. Vibe64 is checking its saved result; do not start a second Update yet.`:record.recoveryOutcomeMessage});tasks.value.push(task);if(!activeTaskId.value)activeTaskId.value=task.id}}catch(error){if(isDisposed()||generation!==restoreGeneration)return;if(error.code===`vibe64_agent_write_mode_busy`){restoreError.value=``;restoreRetryTimer=setTimeout(()=>void restoreTasks(),1e3);return}restoreError.value=`Temporary chats could not be restored: ${error.message}`;open.value=true}}function stopRestoring(){clearTimeout(restoreRetryTimer);restoreGeneration+=1}for(const event of[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT])useRealtimeEvent({event,onEvent:()=>void restoreTasks()});const realtimeSocket=useRealtimeSocket({required:false});const restoreAfterReconnect=()=>void restoreTasks();realtimeSocket?.on?.(`connect`,restoreAfterReconnect);onBeforeUnmount(()=>realtimeSocket?.off?.(`connect`,restoreAfterReconnect));useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}})=>!isDisposed()&&payload.projectSlug===projectSlug.value&&payload.sessionId===currentSessionId()&&payload.reason===`temporary-conversation-created`&&Boolean(payload.conversationId)&&!closedConversationIds.has(payload.conversationId)&&!tasks.value.some(task=>task.conversationId===payload.conversationId||task.id===payload.conversationId),onEvent:()=>void restoreTasks()});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}})=>!isDisposed()&&payload.projectSlug===projectSlug.value&&payload.sessionId===currentSessionId()&&[`temporary-conversation-closed`,`temporary-conversation-renamed`,`assistant-routing-changed`].includes(payload.reason)&&Boolean(payload.conversationId),onEvent:({payload})=>{const task=tasks.value.find(candidate=>candidate.conversationId===payload.conversationId||candidate.id===payload.conversationId);if(payload.reason===`temporary-conversation-closed`)removeTask(task?.id||payload.conversationId);else if(payload.reason===`temporary-conversation-renamed`)restoreTasks();else if(task&&payload.assistantRoutingRequest){const route=payload.assistantRoutingRequest;const current=route.status===`working`||assistantRoutingStatusIsPending(route);const sending=task.pendingMessageId&&task.delivery?.find(task.pendingMessageId)?.status===`pending`;updateTask(task.id,{routingMetadata:{...task.routingMetadata,assistant_routing_request:JSON.stringify(route)},...current?{busy:true,messageId:sending?task.pendingMessageId:route.messageId||task.messageId}:{}});task.binding.runtime.value.reload()}}});watch([currentSessionId,currentSessionsApiPath,actorKey],([ownerSessionId,apiPath,actor],[previousSessionId,previousApiPath,previousActor])=>{if(ownerSessionId!==previousSessionId||apiPath!==previousApiPath||actor!==previousActor){restoreGeneration+=1;restoreError.value=``;flushPendingSaves();forgetQueuedSaves();closedConversationIds.clear();for(const task of tasks.value)task.releaseBinding();tasks.value=[];activeTaskId.value=``;open.value=false}},{flush:`sync`});watch([currentSessionId,currentSessionsApiPath,actorKey,()=>readRefOrGetterValue(assistantReady)],()=>void restoreTasks(),{immediate:true});return{restoreError,restoreTasks,stopRestoring}}function useVibe64TemporaryAiTaskRecords({tasks,activeTaskId,open,closingTaskIds,closedConversationIds,isDisposed}){const saveTimers=new Map;const pendingSaveFields=new Map;const unsentSaveFields=new Map;const saveVersions=new Map;const creations=new Map;const saves=new Map;function canApplyTaskResponse(task){return!isDisposed()&&tasks.value.some(current=>current.id===task.id&&current.binding===task.binding)}function updateTask(taskId=``,update={}){if(Object.hasOwn(update,`draft`)&&!Object.hasOwn(update,`status`))update={...update,draftSaveState:`saving`};tasks.value=tasks.value.map(task=>{if(task.id!==taskId)return task;if(Object.hasOwn(update,`draft`))task.draft=update.draft;if(Object.hasOwn(update,`attachments`))task.attachments=update.attachments;return temporaryAiTaskView({...task,...update})});const task=tasks.value.find(task=>task.id===taskId)||null;const changed=[`draft`,`agentSettings`,`attachments`,`recoveryOutcome`,`recoveryRetryKeys`,`recoveryOutcomeMessage`,`recoveryContext`,`recoveryConflictId`,`recoveryRequestId`,`recoveryAutoPaused`].filter(key=>Object.hasOwn(update,key));if(task&&!Object.hasOwn(update,`status`)&&changed.length){saveVersions.set(taskId,{draft:(saveVersions.get(taskId)?.draft||0)+(changed.includes(`draft`)?1:0)});const pending=pendingSaveFields.get(taskId)||new Set;for(const key of changed)pending.add(key);pendingSaveFields.set(taskId,pending);scheduleSave(taskId)}return task}async function ensureConversation(task){const current=tasks.value.find(candidate=>candidate.id===task.id);if(!current)throw temporaryAiRequestError({code:`vibe64_conversation_closed`});if(current.conversationId)return current.conversationId;if(creations.has(task.id))return creations.get(task.id);const creation=temporaryAiRequest(vibe64TemporaryConversationsPath(task.apiPath,task.sessionId),{method:`POST`,body:{conversationId:task.id,...task.includeRecentChatContext?{includeRecentChatContext:true}:{},...task.initialRouting?{assistantRouting:task.initialRouting}:{},agentSettings:current.agentSettings,presentation:temporaryAiTaskPresentation(current)}}).then(created=>{if(canApplyTaskResponse(task))updateTask(task.id,{conversationId:created.conversationId,number:created.number,assistantSelection:created.assistantSelection,routingMetadata:created.routingMetadata,recentChatContext:created.recentChatContext,purposes:created.purposes,goal:created.goal||null});return created.conversationId});creations.set(task.id,creation);try{return await creation}finally{creations.delete(task.id)}}function scheduleSave(taskId,delayMs=250){clearTimeout(saveTimers.get(taskId));saveTimers.set(taskId,setTimeout(()=>{saveTimers.delete(taskId);saveTask(taskId)},delayMs))}async function saveTask(taskId,{flush=false}={}){const currentTask=tasks.value.find(candidate=>candidate.id===taskId);const task=currentTask&&{...currentTask};if(!task||isDisposed()&&!flush||closingTaskIds.has(taskId)||task.state===`closing`)return;const fields=new Set(pendingSaveFields.get(taskId)||[]);if(flush)for(const queued of unsentSaveFields.get(taskId)||[])for(const key of queued)fields.add(key);if(!fields.size)return;const version=saveVersions.get(taskId);pendingSaveFields.delete(taskId);const unsent=unsentSaveFields.get(taskId)||new Set;unsent.add(fields);unsentSaveFields.set(taskId,unsent);const markSent=()=>{unsent.delete(fields);if(!unsent.size&&unsentSaveFields.get(taskId)===unsent)unsentSaveFields.delete(taskId)};const savedPresentation=temporaryAiTaskPresentation(task,fields);const savedSettings=fields.has(`agentSettings`)&&task.settingsToSave;const attachmentIds=fields.has(`attachments`)?task.attachments.map(attachment=>attachment.attachmentId):null;const flushConversation=flush?ensureConversation(task):null;flushConversation?.catch(()=>{});const previous=saves.get(taskId);const operation=(async()=>{await previous;if(!flush&&(!canApplyTaskResponse(task)||tasks.value.find(candidate=>candidate.id===taskId)?.state===`closing`))return false;const conversationId=await(flushConversation||ensureConversation(task));if(!flush&&!canApplyTaskResponse(task))return;markSent();const saved=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{...Object.keys(savedPresentation).length?{presentation:savedPresentation}:{},...savedSettings?{agentSettings:savedSettings}:{},...attachmentIds?{attachmentIds}:{}}});if(saved?.routingMetadata&&canApplyTaskResponse(task))updateTask(taskId,{routingMetadata:saved.routingMetadata,purposes:saved.purposes});if(canApplyTaskResponse(task)&&savedSettings)task.binding.runtime.value.reload();const current=tasks.value.find(candidate=>candidate.id===taskId);if(canApplyTaskResponse(task)&&savedSettings&&current.settingsToSave===savedSettings)updateTask(taskId,{settingsToSave:null});if(canApplyTaskResponse(task)&&fields.has(`draft`)&&version?.draft===saveVersions.get(taskId)?.draft)updateTask(taskId,{draftSaveState:`saved`,...current?.error?.startsWith(`Draft could not be saved:`)?{error:``}:{}});if(canApplyTaskResponse(task)&&version===saveVersions.get(taskId)&&!pendingSaveFields.get(taskId)?.size&&current?.error?.startsWith(`Conversation state could not be saved:`))updateTask(taskId,{error:``});return true})().catch(error=>{if(!canApplyTaskResponse(task))return;const pending=pendingSaveFields.get(taskId)||new Set;for(const key of fields)pending.add(key);pendingSaveFields.set(taskId,pending);if(error.code===`vibe64_conversation_closed`){removeTask(taskId);return}if(error.code===`vibe64_conversation_closing`){pendingSaveFields.delete(taskId);updateTask(taskId,{state:`closing`,draftSaveState:`failed`,error:`This conversation is closing; retry Close after cleanup.`});return false}if(fields.has(`draft`)&&version?.draft===saveVersions.get(taskId)?.draft||version===saveVersions.get(taskId))updateTask(taskId,{...fields.has(`draft`)?{draftSaveState:`failed`}:{},error:`${fields.has(`draft`)?`Draft`:`Conversation state`} could not be saved: ${error.message}`});if(error.code===`vibe64_agent_write_mode_busy`&&!closingTaskIds.has(taskId))scheduleSave(taskId,1e3);return false});saves.set(taskId,operation);try{return await operation}finally{markSent();if(saves.get(taskId)===operation)saves.delete(taskId)}}function flushPendingSaves(){for(const taskId of new Set([...saveTimers.keys(),...unsentSaveFields.keys()]))saveTask(taskId,{flush:true})}function cancelScheduledSave(taskId){clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId)}function saveInFlight(taskId){return saves.get(taskId)}function creationInFlight(taskId){return creations.get(taskId)}function forgetQueuedSaves(){for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear()}function removeTask(taskId){const task=tasks.value.find(candidate=>candidate.id===taskId);closedConversationIds.add(task?.conversationId||taskId);clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId);pendingSaveFields.delete(taskId);saveVersions.delete(taskId);task?.releaseBinding();tasks.value=tasks.value.filter(candidate=>candidate.id!==taskId);if(activeTaskId.value===taskId)activeTaskId.value=tasks.value[0]?.id||``;if(!tasks.value.length)open.value=false}return{canApplyTaskResponse,cancelScheduledSave,creationInFlight,ensureConversation,flushPendingSaves,forgetQueuedSaves,removeTask,saveInFlight,saveTask,updateTask}}function useVibe64TemporaryAi({active=()=>true,agentSettings=()=>defaultVibe64AgentSettings(),assistantReady=()=>false,onTaskFinished=null,operationBusy=()=>false,sessionId,sessionsApiPath}={}){const tasks=ref([]);const activeTaskId=ref(``);const open=ref(false);const closedConversationIds=new Set;const projectSlug=useVibe64ProjectSlug();const viewer=hasInjectionContext()?inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`}):{actorKey:`local`};const actorKey=computed(()=>readRefOrGetterValue(viewer)?.actorKey||``);const acquireConversation=useAssistantConversationFactory({...vibe64AssistantConversationOptions(),actorKey:()=>actorKey.value,queueWhileSending:true,clearDraftOn:`dispatch`,presentation:{assistantLabel:`Temporary AI`,variant:`task`,visible:true,userMessageFormat:`plain`,systemLabel:`System`}});const closingTaskIds=new Set;const stoppingTaskIds=new Set;let disposed=false;const isDisposed=()=>disposed;const records=useVibe64TemporaryAiTaskRecords({tasks,activeTaskId,open,closingTaskIds,closedConversationIds,isDisposed});const{canApplyTaskResponse,cancelScheduledSave,creationInFlight,ensureConversation,flushPendingSaves,forgetQueuedSaves,removeTask,saveInFlight,saveTask,updateTask}=records;const activeTask=computed(()=>tasks.value.find(task=>task.id===activeTaskId.value)||tasks.value[0]||null);const visibleTaskId=computed(()=>readRefOrGetterValue(active)&&open.value?activeTask.value?.id||``:``);const hasUnreadMessages=computed(()=>tasks.value.some(task=>task.unread));watch(visibleTaskId,taskId=>{if(taskId)updateTask(taskId,{unread:false})},{immediate:true});const updateRepairTask=computed(()=>[...tasks.value].reverse().find(task=>task.sessionId===currentSessionId()&&task.recoveryOperation===`update`&&task.recoveryOutcome!==`succeeded`)||null);function currentSessionId(){return normalizeText$1(readRefOrGetterValue(sessionId))}function currentSessionsApiPath(){return normalizeText$1(readRefOrGetterValue(sessionsApiPath))}function bindTask(value){const taskId=value.id;let binding;binding=markRaw(acquireConversation({conversationId:temporaryConversationId({projectSlug:projectSlug.value,sessionId:value.sessionId,conversationId:taskId}),active:()=>!disposed&&Boolean(tasks.value.find(task=>task.id===taskId&&task.binding===binding)?.conversationId)}));const runtime=binding.runtime.value;runtime.draft.value=value.draft||``;runtime.draftAttachments.value=value.attachments||[];let observedSnapshot=false;const stop=watch([runtime.snapshot,runtime.turns,runtime.error,()=>runtime.delivery.state.sending],([snapshot,turns,error,sending],[,previousTurns=[]]=[])=>{const task=tasks.value.find(task=>task.id===taskId&&task.binding===binding);if(!task||disposed)return;const previous=observedSnapshot?temporaryAiMessages(previousTurns):value.messages||[];if(snapshot)observedSnapshot=true;const newReply=temporaryAiMessages(turns).some(message=>message.role===`assistant`&&normalizeText$1(message.text)&&!previous.some(old=>old.id===message.id&&old.text===message.text));const observed=snapshot?.presentation;const canApplyProgress=!closingTaskIds.has(taskId)&&!stoppingTaskIds.has(taskId)&&!(task.status===`interrupted`&&!task.busy);const update={unread:visibleTaskId.value!==taskId&&(task.unread===true||newReply)};if(observed){for(const field of[`routingMetadata`,`purposes`,`canSteer`,`assistantSelection`,`goal`])if(Object.hasOwn(observed,field))update[field]=observed[field];if(!observed.readError)update.nativeWorking=temporaryAiTurnIsActive(normalizeText$1(observed.status));const route=assistantRoutingRequestForDisplay(observed.routingMetadata);const requests=(snapshot.conversationLog||[]).map(turn=>turn.user?.messageId).filter(Boolean);const superseded=requests.includes(task.messageId)&&requests.at(-1)!==task.messageId;const sameRequest=!task.messageId||superseded||observed.messageId===task.messageId||route?.messageId===task.messageId;if(canApplyProgress&&!sending&&(!task.busy||sameRequest)){if(superseded&&observed.messageId)update.messageId=observed.messageId;if(!observed.readError){update.status=normalizeText$1(observed.status)||task.status;update.busy=temporaryAiTurnIsActive(update.status);update.phase=update.busy?normalizeText$1(snapshot.phase):``;update.runId=observed.runId||task.runId;update.outcomeKind=normalizeText$1(observed.outcome?.kind)}if(!observed.deferredReconciliation)update.error=normalizeText$1(observed.error||error)}if(snapshot.pendingRequest&&!task.pendingMessageId)update.pendingMessageId=snapshot.pendingRequest.messageId}else if(error&&canApplyProgress)update.error=error;const finished=task.busy&&update.busy===false&&update.status!==`interrupted`;updateTask(taskId,update);if(finished)reportTaskFinished(taskId)},{flush:`sync`});return temporaryAiTaskView({...value,binding,releaseBinding:markRaw(()=>{stop();binding.release()})})}function reportTaskFinished(taskId=``){if(typeof onTaskFinished!==`function`)return;const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;try{onTaskFinished(Object.freeze({completionMessage:normalizeText$1(task.completionMessage),dedupeKey:normalizeText$1(task.dedupeKey),error:normalizeText$1(task.error),failureMessage:normalizeText$1(task.failureMessage),id:task.id,outcomeKind:normalizeText$1(task.outcomeKind),recoveryOperation:normalizeText$1(task.recoveryOperation),runConflictId:normalizeText$1(task.runConflictId),runId:task.runId,sessionId:task.sessionId,status:normalizeText$1(task.status),title:task.label}))}catch{}}function openTask({completionMessage=``,dedupeKey=``,displayMessage=``,draft=``,failureMessage=``,nextStepMessage=``,recoveryNotice=``,recoveryOperation=``,recoveryConflictId=``,recoveryContext=``,initialRouting=null,includeRecentChatContext=false,title=``}={}){const task=bindTask({initialRouting,includeRecentChatContext,agentSettings:normalizeVibe64AgentSettings(readRefOrGetterValue(agentSettings)),apiPath:currentSessionsApiPath(),attachments:[],busy:false,nativeWorking:false,completionMessage:normalizeText$1(completionMessage),conversationId:``,dedupeKey:normalizeText$1(dedupeKey),displayMessage:normalizeText$1(displayMessage),draft:normalizeText$1(draft),error:``,failureMessage:normalizeText$1(failureMessage),id:temporaryAiId(`temporary-ai`),messages:[],unread:false,nextStepMessage:normalizeText$1(nextStepMessage),pendingMessageId:``,recoveryOutcome:``,recoveryOutcomeMessage:``,recoveryNotice:normalizeText$1(recoveryNotice),recoveryOperation:recoveryOperation===`update`?`update`:``,recoveryConflictId:normalizeText$1(recoveryConflictId),recoveryContext:normalizeText$1(recoveryContext),recoveryRetryKeys:[],recoveryAutoPaused:false,runId:``,runConflictId:``,sessionId:currentSessionId(),status:`ready`,title:normalizeText$1(title),number:Math.max(0,...tasks.value.map(candidate=>candidate.number||0))+1});tasks.value=[...tasks.value,task];activeTaskId.value=task.id;open.value=true;if(task.draft)updateTask(task.id,{draft:task.draft});return task}async function createTask(options={}){const task=tasks.value.find(value=>value.id===options.taskId)||openTask(options);try{await ensureConversation(task);if(canApplyTaskResponse(task))updateTask(task.id,{error:``});return task}catch(error){if(canApplyTaskResponse(task))updateTask(task.id,{error:error.message});error.taskId=task.id;throw error}}async function startTask(options={}){const input=options&&typeof options===`object`&&!Array.isArray(options)?options:{};const message=normalizeText$1(input.message||input.draft);if(!message||!currentSessionId()||!currentSessionsApiPath())return Object.freeze({ok:false,reused:false,started:false,taskId:``});const dedupeKey=normalizeText$1(input.dedupeKey);const repair=input.recoveryOperation===`update`?updateRepairTask.value:null;if(repair){selectTask(repair.id);if(repair.busy||repair.recoveryOutcome===`checking`||closingTaskIds.has(repair.id))return{ok:true,reused:true,started:false,taskId:repair.id};if((repair.draft.trim()||repair.attachments.length)&&!repair.pendingMessageId)return{ok:true,reused:true,started:false,taskId:repair.id};if(!repair.pendingMessageId)updateTask(repair.id,{recoveryContext:message,recoveryConflictId:normalizeText$1(input.recoveryConflictId),recoveryRetryKeys:[]});const started=await send(repair.id,repair.pendingMessageId?{retryMessageId:repair.pendingMessageId}:{generatedMessage:{message,displayMessage:`Continue repairing this Update.`}});return{ok:started,reused:true,started,taskId:repair.id}}const existingTask=dedupeKey?[...tasks.value].reverse().find(task=>task.dedupeKey===dedupeKey&&(task.busy||task.status===`failed`&&normalizeText$1(task.pendingMessageId))):null;if(existingTask){selectTask(existingTask.id);const started=existingTask.busy?false:await send(existingTask.id,{retryMessageId:existingTask.pendingMessageId});return Object.freeze({ok:existingTask.busy||started,reused:true,started,taskId:existingTask.id})}const task=openTask({...input,initialRouting:{mode:`fix`,review:false},dedupeKey,draft:``,displayMessage:``,recoveryContext:message});const started=await send(task.id,{generatedMessage:{message,displayMessage:input.displayMessage||message}});return Object.freeze({ok:started,reused:false,started,taskId:task.id})}function selectTask(taskId=``){if(tasks.value.some(task=>task.id===taskId)){activeTaskId.value=taskId;open.value=true}}function showWorkspace(){if(tasks.value.length===0)return openTask();if(!tasks.value.some(task=>task.id===activeTaskId.value))activeTaskId.value=tasks.value[0].id;open.value=true;return activeTask.value}async function renameTask(taskId=``,title=``){const task=tasks.value.find(candidate=>candidate.id===taskId);const conversationId=await ensureConversation(task);const result=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{presentation:{title}}});if(canApplyTaskResponse(task))updateTask(taskId,{title:result.title})}function updateDraft(taskId=``,draft=``){updateTask(taskId,{displayMessage:``,draft:String(draft||``)})}async function updateRouting(taskId,preferences){const task=tasks.value.find(candidate=>candidate.id===taskId);const conversationId=await ensureConversation(task);const result=await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`PATCH`,body:{assistantRouting:preferences}});if(canApplyTaskResponse(task)){updateTask(taskId,{routingMetadata:result.routingMetadata,purposes:result.purposes});task.binding.runtime.value.reload()}return result}function updateAgentSetting(taskId=``,parameterId=``,value=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;const settings=normalizeVibe64AgentSettings({...task.agentSettings,[parameterId]:value});updateTask(taskId,{agentSettings:settings,settingsToSave:settings})}function reportRecoveryOutcome(taskId=``,{message=``,status=``,retryMessage=``,retryKey=``,recoveryConflictId=``,recoveryRequestId=``}={}){const outcome=normalizeText$1(status);const task=tasks.value.find(task=>task.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||![`checking`,`failed`,`succeeded`,`unconfirmed`].includes(outcome))return false;const messageId=`recovery_${task.runId||task.id}`;updateTask(taskId,{...outcome===`succeeded`&&!task.messages.some(({id})=>id===messageId)?{recoveryMessage:{id:messageId,role:`system`,text:normalizeText$1(message)||`Repair verified.`}}:{},recoveryOutcome:outcome,...recoveryRequestId?{recoveryRequestId}:{},recoveryAutoPaused:false,recoveryOutcomeMessage:normalizeText$1(message),...outcome!==`checking`?{recoveryContext:outcome===`failed`?retryMessage||message:message,recoveryConflictId:normalizeText$1(recoveryConflictId)}:{}});if(outcome===`failed`&&task.recoveryOperation===`update`&&retryMessage&&retryKey&&!readRefOrGetterValue(operationBusy)&&!stoppingTaskIds.has(taskId)&&!task.busy&&task.status!==`interrupted`){const retries=task.recoveryRetryKeys||[];if(retries.includes(retryKey)||retries.length>=3)updateTask(taskId,{recoveryAutoPaused:true,recoveryOutcomeMessage:`${message}\nAutomatic repair paused after repeated conflicts. Review the result, then continue here or check Update again.`});else if(!task.draft.trim()&&!task.attachments.length){updateTask(taskId,{recoveryRetryKeys:[...retries,retryKey]});send(taskId,{generatedMessage:{message:retryMessage,displayMessage:`Continue repairing the remaining conflicts.`}})}}return true}function updateAttachments(taskId=``,attachments=[]){if(!tasks.value.find(candidate=>candidate.id===taskId))return;updateTask(taskId,{attachments:Array.isArray(attachments)?attachments:[]})}async function closeTask(taskId=``){const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||stoppingTaskIds.has(taskId))return;if(readRefOrGetterValue(operationBusy)||task.recoveryOutcome===`checking`)throw new Error(`Wait for Update to finish before closing this repair.`);closingTaskIds.add(taskId);try{cancelScheduledSave(taskId);const save=saveInFlight(taskId);if(save)await save;const conversationId=task.conversationId||(creationInFlight(taskId)?await creationInFlight(taskId):``);if(conversationId)await temporaryAiRequest(vibe64TemporaryConversationPath(task.apiPath,task.sessionId,conversationId),{method:`DELETE`});if(disposed)return;removeTask(taskId)}catch(error){if(!canApplyTaskResponse(task))return;updateTask(taskId,{error:error.message});throw error}finally{closingTaskIds.delete(taskId)}}function closeWorkspace(){open.value=false}const{cancelMessage,editMessage,send,stopTask}=useVibe64TemporaryAiMessages({tasks,closingTaskIds,stoppingTaskIds,isDisposed,operationBusy,records,reportTaskFinished,updateDraft});const{restoreError,restoreTasks,stopRestoring}=useVibe64TemporaryAiRestore({tasks,activeTaskId,open,closedConversationIds,projectSlug,actorKey,assistantReady,currentSessionId,currentSessionsApiPath,isDisposed,bindTask,records});onBeforeUnmount(()=>{flushPendingSaves();disposed=true;stopRestoring();forgetQueuedSaves();for(const task of tasks.value)task.releaseBinding()});return{activeTask,activeTaskId,closeTask,closeWorkspace,createTask,cancelMessage,editMessage,hasUnreadMessages,open,openTask,renameTask,reportRecoveryOutcome,saveTask,restoreError,restoreTasks,selectTask,send,showWorkspace,startTask,stopTask,tasks,updateAgentSetting,updateAttachments,updateDraft,updateRouting,updateRepairTask}}function useVibe64TemporaryAiColleagueView({props,emit,temporary,hostConversation,selectionRevision}){const colleagueView=inject(VIBE64_COLLEAGUE_VIEW_KEY,null);const activeTask=temporary.activeTask;const selectedView={get projectSlug(){return props.projectSlug},get sessionId(){return props.sessionId},get ready(){return props.assistantReady},get selectionRevision(){return selectionRevision.value},get hostConversationSelected(){return Boolean(hostConversation?.value?.selected)},get temporarySelected(){return temporary.open.value&&!hostConversation?.value?.selected},get conversationId(){return this.temporarySelected?activeTask.value?.conversationId||``:``},openFile(path){return typeof props.openFile===`function`&&props.openFile(path)===true},async sendLessonMessage(text){return typeof props.sendLessonMessage===`function`&&await props.sendLessonMessage(text)===true},async openConversation(conversationId,isCurrent=()=>true){if(!props.sessionSelected||!props.assistantReady||!isCurrent())throw new Error(`This session is no longer available.`);if(!conversationId){hostConversation?.value?.close();temporary.closeWorkspace();emit(`select-main-chat`);return}const projectSlug=props.projectSlug;const sessionId=props.sessionId;const revision=selectionRevision.value;const hostSelected=hostConversation?.value?.selected;await temporary.restoreTasks();if(!isCurrent()||!props.sessionSelected||!props.assistantReady||props.projectSlug!==projectSlug||props.sessionId!==sessionId||selectionRevision.value!==revision||hostConversation?.value?.selected!==hostSelected)throw new Error(`The selected conversation changed before it opened.`);const task=temporary.tasks.value.find(entry=>entry.conversationId===conversationId);if(!task)throw new Error(temporary.restoreError.value||`The temporary conversation could not be opened.`);hostConversation?.value?.close();temporary.selectTask(task.id);await nextTick();if(!isCurrent()||!props.sessionSelected||props.sessionId!==sessionId||selectionRevision.value!==revision||temporary.activeTaskId.value!==task.id||!temporary.open.value)throw new Error(`The selected conversation changed before it opened.`)}};watchEffect(()=>{if(!colleagueView)return;if(props.sessionSelected)colleagueView.value=selectedView;else if(colleagueView.value===selectedView)colleagueView.value=null});onBeforeUnmount(()=>{selectionRevision.value+=1;if(colleagueView?.value===selectedView)colleagueView.value=null})}function useVibe64TemporaryAiNewTask({props,temporary,hostConversation,selectionRevision,selectMainChat}){const newTaskOpen=ref(false);const newTaskReturnsToMain=ref(false);const includeRecentChatContext=ref(false);const creatingTask=ref(false);const creatingTaskId=ref(``);const createTaskError=ref(``);watch(()=>[props.projectSlug,props.sessionId],()=>{selectionRevision.value+=1;newTaskOpen.value=false;newTaskReturnsToMain.value=false;creatingTask.value=false;creatingTaskId.value=``});watch(newTaskOpen,value=>{if(value){includeRecentChatContext.value=false;createTaskError.value=``;creatingTaskId.value=``}});async function openNewTask(){newTaskReturnsToMain.value=!temporary.activeTask.value&&!hostConversation?.value?.selected;if(props.mainHasMessages){newTaskOpen.value=true;return}includeRecentChatContext.value=false;createTaskError.value=``;creatingTaskId.value=``;await createTask();if(!createTaskError.value)return;const failure={message:createTaskError.value,taskId:creatingTaskId.value};newTaskOpen.value=true;await nextTick();createTaskError.value=failure.message;creatingTaskId.value=failure.taskId}function cancelNewTask(){if(creatingTask.value)return;newTaskOpen.value=false;if(newTaskReturnsToMain.value)selectMainChat()}async function createTask(){const revision=++selectionRevision.value;creatingTask.value=true;createTaskError.value=``;hostConversation?.value?.close();try{await temporary.createTask({includeRecentChatContext:includeRecentChatContext.value,taskId:creatingTaskId.value});if(revision===selectionRevision.value)newTaskOpen.value=false}catch(error){if(revision===selectionRevision.value){creatingTaskId.value=error.taskId||``;createTaskError.value=error.message||`Temporary chat could not be created.`}}finally{if(revision===selectionRevision.value)creatingTask.value=false}}return{cancelNewTask,createTask,createTaskError,creatingTask,creatingTaskId,includeRecentChatContext,newTaskOpen,openNewTask}}function useVibe64TemporaryAiRename(temporary){const renamingTaskId=ref(``);const renameValue=ref(``);const renameError=ref(``);const renamePending=ref(false);const renamingTask=computed(()=>temporary.tasks.value.find(task=>task.id===renamingTaskId.value)||null);function openRename(task){renameValue.value=task.title;renameError.value=``;renamingTaskId.value=task.id}async function submitRename(){renamePending.value=true;renameError.value=``;try{await temporary.renameTask(renamingTaskId.value,renameValue.value);renamingTaskId.value=``}catch(error){renameError.value=error.message||`The chat could not be renamed.`}finally{renamePending.value=false}}return{openRename,renameError,renamePending,renameValue,renamingTask,renamingTaskId,submitRename}}function useVibe64TemporaryAiStopAndClose({temporary,selectionRevision,emit}){const closeTaskId=ref(``);const closingTask=ref(false);const stoppingTaskId=ref(``);const actionErrors=ref({});const taskToClose=computed(()=>temporary.tasks.value.find(task=>task.id===closeTaskId.value));function requestCloseTask(task){if(task.recoveryOperation===`update`&&task.recoveryOutcome!==`succeeded`&&(task.busy||task.messages.length)){closeTaskId.value=task.id;return}closeTask(task.id)}async function closeTask(taskId,{returnToMainChat=false}={}){selectionRevision.value+=1;closingTask.value=true;delete actionErrors.value[taskId];try{await temporary.closeTask(taskId);closeTaskId.value=``;if(returnToMainChat&&!temporary.tasks.value.some(task=>task.id===taskId))emit(`select-main-chat`)}catch(error){actionErrors.value[taskId]=error?.message||`Temporary AI could not be closed. The chat is still open; try again.`}finally{closingTask.value=false}}async function stopTask(taskId){stoppingTaskId.value=taskId;delete actionErrors.value[taskId];try{await temporary.stopTask(taskId)}catch(error){actionErrors.value[taskId]=error?.message||`Temporary AI could not be stopped. Try again.`}finally{stoppingTaskId.value=``}}return{actionErrors,closeTask,closeTaskId,closingTask,requestCloseTask,stopTask,stoppingTaskId,taskToClose}}function afterBrowserPaint(){if(typeof globalThis.requestAnimationFrame!==`function`)return Promise.resolve();return new Promise(resolve=>{globalThis.requestAnimationFrame(()=>resolve())})}function rememberTaskElement(elements,taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){elements.set(normalizedTaskId,element);return}elements.delete(normalizedTaskId)}function useVibe64TemporaryAiTaskElements({workspace,activeTask}){const taskTabButtons=new Map;const taskPrompts=new Map;const taskSendButtons=new Map;function taskPrompt(taskId=``){return taskPrompts.get(String(taskId||``))||null}async function revealTaskTab(taskId=``,{focus=false}={}){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return false;await nextTick();await afterBrowserPaint();const button=taskTabButtons.get(normalizedTaskId);button?.scrollIntoView?.({block:`nearest`,inline:`nearest`});if(focus)(button||workspace.value)?.focus?.({preventScroll:true});return Boolean(button)}function focusSendButton(){taskSendButtons.get(activeTask.value?.id)?.focus?.()}return{focusSendButton,revealTaskTab,setTaskPrompt:(taskId,element)=>rememberTaskElement(taskPrompts,taskId,element),setTaskSendButton:(taskId,element)=>rememberTaskElement(taskSendButtons,taskId,element),setTaskTabButton:(taskId,element)=>rememberTaskElement(taskTabButtons,taskId,element),taskPrompt}}function presenceText(value=``){return String(value??``).trim()}function presenceTimestamp(value=``){const timestamp=Date.parse(String(value||``));return Number.isFinite(timestamp)?timestamp:0}function sessionPresencePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/presence`)}function normalizedRemotePresence(payload={},now=Date.now()){const actorId=presenceText(payload.actorId);const displayName=presenceText(payload.displayName)||`Another user`;const originId=presenceText(payload.originId);const projectSlug=presenceText(payload.projectSlug);const sessionId=presenceText(payload.sessionId);const conversationId=presenceText(payload.conversationId);const sequence=Number(payload.sequence);const updatedAt=presenceTimestamp(payload.updatedAt);const expiresAt=presenceTimestamp(payload.expiresAt);if(!actorId||!originId||!projectSlug||!sessionId||!Number.isSafeInteger(sequence)||sequence<1||!updatedAt||!expiresAt)return null;const typing=payload.typing===true&&expiresAt>now;return Object.freeze({actorId,conversationId,displayName:Array.from(displayName).slice(0,80).join(``)||`Another user`,expiresAt,originId,projectSlug,sequence,sessionId,typing,updatedAt})}function typingPresenceLabel(people=[]){const visible=Array.isArray(people)?people:[];if(visible.length===1)return`${presenceText(visible[0]?.displayName)||`Another user`} is typing…`;return visible.length>1?`${visible.length} people are typing…`:``}function useVibe64SessionTypingPresence({active=true,conversationId=``,projectSlug=``,sessionId=``,sessionsApiPath=``}={},{clearTimer=clearTimeout,debounceMs=VIBE64_SESSION_PRESENCE_DEBOUNCE_MS,idleMs=VIBE64_SESSION_PRESENCE_IDLE_MS,now=()=>Date.now(),request=(path,options)=>getHttpWebClient().request(path,options),setTimer=setTimeout}={}){const originId=vibe64BrowserTabOriginId();const remoteEntries=shallowRef(new Map);const realtimeSocket=useRealtimeSocket({required:false});let debounceTimer=null;let publishing=false;let localSequence=Math.max(0,Math.floor(Number(now())||0));const currentContext=computed(()=>Object.freeze({active:readRefOrGetterValue(active)!==false,conversationId:presenceText(readRefOrGetterValue(conversationId)),projectSlug:presenceText(readRefOrGetterValue(projectSlug)),sessionId:presenceText(readRefOrGetterValue(sessionId)),sessionsApiPath:presenceText(readRefOrGetterValue(sessionsApiPath))}));const eligible=computed(()=>Boolean(currentContext.value.active&&currentContext.value.projectSlug&&currentContext.value.sessionId&&currentContext.value.sessionsApiPath));const typingPeople=computed(()=>{const byActor=new Map;for(const entry of remoteEntries.value.values()){if(!entry.typing||entry.expiresAt<=now())continue;byActor.set(entry.actorId,{actorId:entry.actorId,displayName:entry.displayName})}return[...byActor.values()].sort((left,right)=>left.displayName.localeCompare(right.displayName))});const typingLabel=computed(()=>typingPresenceLabel(typingPeople.value));function requestPresence(){debounceTimer=null;if(!eligible.value||publishing)return;const context=currentContext.value;localSequence+=1;publishing=true;request(sessionPresencePath(context.sessionsApiPath,context.sessionId),{body:{...context.conversationId?{conversationId:context.conversationId}:{},originId,sequence:localSequence,typing:true},method:`POST`,timeoutMs:5e3}).catch(()=>null).finally(()=>{publishing=false})}function stopTyping(){clearTimer(debounceTimer);debounceTimer=null}function noteInputActivity(){if(!eligible.value||debounceTimer||publishing)return;debounceTimer=setTimer(requestPresence,Math.max(0,Number(debounceMs)||0))}function clearRemotePresence(){for(const entry of remoteEntries.value.values())if(entry.timer)clearTimer(entry.timer);remoteEntries.value=new Map}function removeRemotePresence(key,expected=null){const current=remoteEntries.value.get(key);if(!current||expected&&current!==expected)return;if(current.timer)clearTimer(current.timer);const next=new Map(remoteEntries.value);next.delete(key);remoteEntries.value=next}function applyRemotePresence(payload={}){const entry=normalizedRemotePresence(payload,now());const context=currentContext.value;if(!entry||entry.originId===originId||entry.projectSlug!==context.projectSlug||entry.sessionId!==context.sessionId||entry.conversationId!==context.conversationId)return;const key=`${entry.actorId}\0${entry.originId}`;const current=remoteEntries.value.get(key);if(current&&(entry.sequence<current.sequence||entry.sequence===current.sequence&&entry.updatedAt<current.updatedAt))return;if(current?.timer)clearTimer(current.timer);const stored={...entry,timer:null};stored.timer=setTimer(()=>{removeRemotePresence(key,stored)},entry.typing?Math.max(1,entry.expiresAt-now()):Math.max(1,Number(idleMs)||1e4));const next=new Map(remoteEntries.value);next.set(key,stored);remoteEntries.value=next}function handleRealtimeDisconnect(){clearRemotePresence()}useRealtimeEvent({enabled:eligible,event:VIBE64_SESSION_PRESENCE_CHANGED_EVENT,onEvent:({payload})=>applyRemotePresence(payload)});realtimeSocket.on(`disconnect`,handleRealtimeDisconnect);watch(()=>[currentContext.value.active,currentContext.value.conversationId,currentContext.value.projectSlug,currentContext.value.sessionId,currentContext.value.sessionsApiPath].join(`\0`),()=>{stopTyping();clearRemotePresence()},{flush:`sync`});onScopeDispose(()=>{stopTyping();clearRemotePresence();realtimeSocket.off(`disconnect`,handleRealtimeDisconnect)});return Object.freeze({applyRemotePresence,blur:stopTyping,noteInputActivity,stop:stopTyping,submit:stopTyping,typingLabel,typingPeople})}var _hoisted_1$42=[`aria-label`];var _hoisted_2$35={key:1};var _hoisted_3$30={key:0};var _hoisted_4$23={key:0};var _hoisted_5$20={key:1,class:`vibe64-temporary-ai__feedback`};var _hoisted_6$17={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _hoisted_7$15=[`role`];var _hoisted_8$15={key:0,class:`text-caption`,role:`status`,"aria-live":`polite`};var _hoisted_9$11={class:`vibe64-temporary-ai__composer-actions`};var _hoisted_10$10={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _sfc_main$48={__name:`Vibe64TemporaryAiWorkspace`,props:{openFile:{type:Function,default:null},sendLessonMessage:{type:Function,default:null},active:Boolean,sessionSelected:Boolean,assistantReady:Boolean,canConfigureRouting:Boolean,connectionUnavailable:Boolean,projectSlug:{type:String,default:``},previewAttachmentState:{type:Object,default:()=>({})},repositoryBusy:Boolean,updateDisabled:Boolean,canReviewUpdate:Boolean,updateDisabledReason:{type:String,default:``},workspaceSetupStatus:{type:String,default:``},assistantSelection:{default:()=>({}),type:Object},sessionId:{default:``,type:String},mainHasMessages:{default:false,type:Boolean},sessionsApiPath:{default:``,type:[String,Object,Function]}},emits:[`select-main-chat`,`task-finished`,`check-update`,`review-update`],setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const props=__props;const hostConversation=inject(VIBE64_HOST_CONVERSATION_KEY,null);const hostComposer=ref(null);const selectionRevision=ref(0);function selectMainChat(){selectionRevision.value+=1;hostConversation?.value?.close();emit(`select-main-chat`)}function selectTask(id){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.selectTask(id)}function openTask(options){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.openTask(options)}function closeWorkspace(){selectionRevision.value+=1;hostConversation?.value?.close();temporary.closeWorkspace()}const workspace=ref(null);const completionMessage=ref(null);const returnToMainButton=ref(null);const resolvedSessionsApiPath=computed(()=>readRefOrGetterValue(props.sessionsApiPath));const temporaryAiFeedback=useUiFeedback({source:`vibe64.temporary-ai.feedback`});const temporary=useVibe64TemporaryAi({active:()=>props.active&&!hostConversation?.value?.selected,agentSettings:computed(()=>({providerId:props.assistantSelection.engineId,model:props.assistantSelection.modelId,thinking:props.assistantSelection.variantId})),assistantReady:()=>props.assistantReady,operationBusy:()=>props.repositoryBusy,onTaskFinished(task={}){emit(`task-finished`,task);if(props.active&&temporary.open.value&&temporary.activeTaskId.value===task.id)return;if(task.status===`completed`){if(task.outcomeKind===`continue`||task.recoveryOperation===`update`)return;temporaryAiFeedback.success(task.completionMessage||`${task.title} finished. Review the result before continuing.`);return}if(task.status===`failed`&&task.failureMessage){temporaryAiFeedback.error(task.failureMessage);return}temporaryAiFeedback.error(task.error,`${task.title} stopped with an error.`)},sessionId:computed(()=>props.sessionId),sessionsApiPath:resolvedSessionsApiPath});const{cancelNewTask,createTask,createTaskError,creatingTask,creatingTaskId,includeRecentChatContext,newTaskOpen,openNewTask}=useVibe64TemporaryAiNewTask({props,temporary,hostConversation,selectionRevision,selectMainChat});const{openRename,renameError,renamePending,renameValue,renamingTask,renamingTaskId,submitRename}=useVibe64TemporaryAiRename(temporary);const customOpen=ref(false);const customTarget=ref(null);const activeTask=temporary.activeTask;watch(()=>activeTask.value?.id,()=>{customOpen.value=false});const{focusSendButton,revealTaskTab,setTaskPrompt,setTaskSendButton,setTaskTabButton,taskPrompt}=useVibe64TemporaryAiTaskElements({workspace,activeTask});const routingRequest=computed(()=>assistantRoutingRequestForDisplay(activeTask.value?.routingMetadata));const modeSession=computed(()=>({sessionId:props.sessionId,assistantSelection:activeTask.value?.assistantSelection||props.assistantSelection,agentSession:{goal:activeTask.value?.goal||null},metadata:activeTask.value?.routingMetadata||{}}));const activeTaskError=computed(()=>{if([`failed`,`uncertain`].includes(routingRequest.value?.status)&&routingRequest.value.error===activeTask.value?.error)return``;if(activeTask.value?.delivery.state.messages.some(message=>message.status===`failed`&&message.error===activeTask.value.error))return``;if(props.connectionUnavailable&&activeTask.value?.errorCode===`vibe64_agent_write_mode_busy`)return``;return activeTask.value?.error||taskAccessReason(activeTask.value)});const updateRepairVisible=computed(()=>temporary.open.value&&activeTask.value?.recoveryOperation===`update`&&activeTask.value.recoveryOutcome!==`succeeded`);const closeTitleId=useId();const{actionErrors,closeTask,closeTaskId,closingTask,requestCloseTask,stopTask,stoppingTaskId,taskToClose}=useVibe64TemporaryAiStopAndClose({temporary,selectionRevision,emit});const activeTaskRecoveryChecking=computed(()=>activeTask.value?.recoveryOutcome===`checking`);const typingPresence=useVibe64SessionTypingPresence({active:computed(()=>props.active&&temporary.open.value&&Boolean(activeTask.value?.conversationId)&&!hostConversation?.value?.selected&&!taskInputDisabled(activeTask.value)&&!closingTask.value),conversationId:computed(()=>activeTask.value?.conversationId||``),projectSlug:computed(()=>props.projectSlug),sessionId:computed(()=>props.sessionId),sessionsApiPath:resolvedSessionsApiPath});const activityLabel=computed(()=>{if(activeTaskRecoveryChecking.value)return`Checking Update…`;if(activeTask.value?.delivery.state.sending)return`Sending to assistant…`;if(activeTask.value?.busy&&activeTask.value.phase===`background`)return`Reply ready · background task still running…`;if(activeTask.value?.busy)return`AI is working…`;return typingPresence.typingLabel.value});const activeTaskRecoveryVerified=computed(()=>activeTask.value?.recoveryOutcome===`succeeded`);const recoveryMessageId=computed(()=>activeTaskRecoveryVerified.value?`recovery_${activeTask.value.runId||activeTask.value.id}`:``);const updateCompletionText=computed(()=>{if(activeTask.value?.recoveryOperation!==`update`)return``;return`${{running:`Session updated. Preparing workspace…`,succeeded:`Session updated and workspace ready.`,failed:`Session updated. Workspace preparation failed; review the setup issue above.`,ambiguous:`Session updated. Workspace preparation needs a choice; review the setup issue above.`,required:`Session updated. Workspace preparation is still required.`}[props.workspaceSetupStatus]||`Session updated.`} Your changes were preserved. Nothing was pushed.`});const canReturnToMainChat=computed(()=>activeTaskRecoveryVerified.value&&!activeTask.value.busy&&(activeTask.value.recoveryOperation!==`update`||[`succeeded`,`unconfigured`].includes(props.workspaceSetupStatus)));function taskAccessReason(task){if(!task)return``;if(task.busy)return task.canSteer===false?`You cannot steer this turn's AI connection. You can send a new request when it finishes.`:``;const mode=assistantRoutingFromMetadata(task.routingMetadata||{})?.mode;const decision=task.purposes?.[mode];return decision?.available===false?decision.message||`This mode is unavailable. Choose another chat mode.`:``}function taskInputDisabled(task){return props.repositoryBusy||task.state===`closing`||task.status===`closing`||task.recoveryOutcome===`checking`||Boolean(taskAccessReason(task))}async function sendTask(taskId=``,options={}){const currentPrompt=taskPrompt(taskId);if(props.connectionUnavailable||!taskId||currentPrompt?.attachmentsCanSubmit?.()===false)return;const task=temporary.tasks.value.find(task=>task.id===taskId);if(!task||taskInputDisabled(task))return;typingPresence.submit();return temporary.send(taskId,{...options,attachmentOwner:currentPrompt})}async function startTask(options={}){selectionRevision.value+=1;hostConversation?.value?.close();const started=temporary.startTask(options);const taskId=temporary.activeTaskId.value;await revealTaskTab(taskId,{focus:true});const result=await started;if(result?.started)taskPrompt(taskId)?.clearAttachments?.();return result}function reportTaskRecovery(taskId=``,outcome={}){const reported=temporary.reportRecoveryOutcome(taskId,outcome);if(reported&&outcome.status===`succeeded`&&!(props.active&&temporary.open.value&&temporary.activeTaskId.value===taskId))temporaryAiFeedback.success(outcome.message||`Vibe64 independently verified that the repair succeeded.`);return reported}async function persistTaskRecovery(taskId=``,outcome={}){return reportTaskRecovery(taskId,outcome)&&await temporary.saveTask(taskId)===true}function showWorkspace(){const revision=++selectionRevision.value;hostConversation?.value?.close();if(!temporary.tasks.value.length){temporary.open.value=true;openFirstTask(revision);return null}const task=temporary.showWorkspace();revealTaskTab(temporary.activeTaskId.value);return task}async function openFirstTask(revision){await temporary.restoreTasks();if(revision!==selectionRevision.value||temporary.restoreError.value)return;if(temporary.tasks.value.length)showWorkspace();else await openNewTask()}function updateActiveAgentSetting(parameterId=``,value=``){if(activeTask.value?.id)temporary.updateAgentSetting(activeTask.value.id,parameterId,value)}watch(()=>temporary.activeTaskId.value,taskId=>{revealTaskTab(taskId)},{flush:`post`});watch([recoveryMessageId,canReturnToMainChat,()=>props.active],async()=>{if(!props.active||!recoveryMessageId.value)return;await nextTick();(returnToMainButton.value?.$el||completionMessage.value)?.scrollIntoView?.({block:`nearest`})},{flush:`post`});useVibe64TemporaryAiColleagueView({props,emit,temporary,hostConversation,selectionRevision});__expose({get visible(){return temporary.open.value||Boolean(hostConversation?.value?.selected)},get composer(){if(hostConversation?.value?.selected)return hostComposer.value;return temporary.open.value?taskPrompt(temporary.activeTaskId.value):null},closeWorkspace,hasUnreadMessages:temporary.hasUnreadMessages,openTask,reportTaskRecovery,persistTaskRecovery,selectTask,startTask,showWorkspace,updateRepairVisible,updateRepairTask:temporary.updateRepairTask});return(_ctx,_cache)=>{return unref(temporary).open.value||unref(hostConversation)?.selected?(openBlock(),createElementBlock(`section`,{key:0,ref_key:`workspace`,ref:workspace,class:normalizeClass([`vibe64-temporary-ai`,{"vibe64-temporary-ai--host":unref(hostConversation)?.selected}]),"aria-label":unref(hostConversation)?.selected?unref(hostConversation).label:`Temporary AI workspace`,tabindex:`-1`},[createVNode(Vibe64TemporaryAiTabs_default,{tasks:unref(temporary).tasks.value,"active-task-id":unref(temporary).activeTaskId.value,"set-tab-button":unref(setTaskTabButton),"session-id":props.sessionId,"repository-busy":props.repositoryBusy,"closing-task":unref(closingTask),"stopping-task-id":unref(stoppingTaskId),onSelectMainChat:selectMainChat,onSelectTask:selectTask,onRename:unref(openRename),onClose:unref(requestCloseTask),onNewTask:unref(openNewTask)},null,8,[`tasks`,`active-task-id`,`set-tab-button`,`session-id`,`repository-busy`,`closing-task`,`stopping-task-id`,`onRename`,`onClose`,`onNewTask`]),unref(newTaskOpen)?(openBlock(),createBlock(VDialog,{key:0,"model-value":unref(newTaskOpen),"aria-label":`New temporary chat`,"max-width":`480`,persistent:unref(creatingTask),"onUpdate:modelValue":_cache[1]||(_cache[1]=value=>{if(!value)unref(cancelNewTask)()})},{default:withCtx(()=>[createVNode(VCard,{title:`New temporary chat`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createVNode(VCheckbox,{modelValue:unref(includeRecentChatContext),"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>isRef(includeRecentChatContext)?includeRecentChatContext.value=$event:null),disabled:unref(creatingTask)||Boolean(unref(creatingTaskId)),label:`Include recent chat context`,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[21]||(_cache[21]=createBaseVNode(`p`,null,`Copy up to 40 recent visible messages from Main, including progress. Text only, limited to 64 KiB. Later messages stay separate.`,-1)),unref(createTaskError)?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(createTaskError)),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(creatingTask),onClick:unref(cancelNewTask)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{loading:unref(creatingTask),disabled:unref(creatingTask),onClick:unref(createTask)},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(`Create chat`,-1)])]),_:1},8,[`loading`,`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])):createCommentVNode(``,true),unref(hostConversation)?.selected&&props.active?(openBlock(),createBlock(resolveDynamicComponent(unref(hostConversation).component),{key:1,ref_key:`hostComposer`,ref:hostComposer,class:`vibe64-temporary-ai__host-content`},null,512)):createCommentVNode(``,true),!unref(hostConversation)?.selected?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(Vibe64TemporaryAiRecoveryRow_default,{"active-task":unref(activeTask),"restore-error":unref(temporary).restoreError.value,"recovery-verified":activeTaskRecoveryVerified.value,"recovery-checking":activeTaskRecoveryChecking.value,"input-disabled":Boolean(unref(activeTask))&&taskInputDisabled(unref(activeTask)),"connection-unavailable":props.connectionUnavailable,"update-disabled":props.updateDisabled,"update-disabled-reason":props.updateDisabledReason,"can-review-update":props.canReviewUpdate,onRetryRestore:_cache[2]||(_cache[2]=$event=>unref(temporary).restoreTasks()),onCheckUpdate:_cache[3]||(_cache[3]=$event=>emit(`check-update`,$event)),onReviewUpdate:_cache[4]||(_cache[4]=$event=>emit(`review-update`))},null,8,[`active-task`,`restore-error`,`recovery-verified`,`recovery-checking`,`input-disabled`,`connection-unavailable`,`update-disabled`,`update-disabled-reason`,`can-review-update`]),unref(activeTask)?(openBlock(),createBlock(_sfc_main$49,{key:0,"session-id":props.sessionId,adapter:unref(activeTask).adapter,"recovery-message":unref(activeTask).recoveryMessage,"routing-request":routingRequest.value,working:unref(activeTask).nativeWorking,"scroll-key":unref(activeTask).id,"empty-message":unref(activeTask).recoveryNotice?``:`Ask a focused question or investigate a problem without adding it to the main conversation.`,onResend:_cache[11]||(_cache[11]=$event=>sendTask(unref(activeTask).id,{retryMessageId:$event})),onCancel:_cache[12]||(_cache[12]=$event=>unref(temporary).cancelMessage(unref(activeTask).id,$event)),onEdit:_cache[13]||(_cache[13]=$event=>unref(temporary).editMessage(unref(activeTask).id,$event))},{"message-text":withCtx(({message})=>[message.messageId===recoveryMessageId.value?(openBlock(),createElementBlock(`p`,{key:0,ref_key:`completionMessage`,ref:completionMessage},toDisplayString(updateCompletionText.value||message.text),513)):(openBlock(),createElementBlock(`p`,_hoisted_2$35,toDisplayString(message.text),1)),message.messageId===recoveryMessageId.value&&canReturnToMainChat.value?(openBlock(),createBlock(VBtn,{key:2,ref_key:`returnToMainButton`,ref:returnToMainButton,"aria-busy":unref(closingTask),class:`vibe64-temporary-ai__return`,color:`primary`,disabled:props.repositoryBusy||unref(closingTask),size:`small`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>unref(closeTask)(unref(activeTask).id,{returnToMainChat:true}))},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Return to main chat `,-1)])]),_:1},8,[`aria-busy`,`disabled`])):createCommentVNode(``,true)]),hints:withCtx(()=>[unref(activeTask).recentChatContext&&!unref(activeTask).messages.length?(openBlock(),createElementBlock(`p`,_hoisted_3$30,[createTextVNode(` Copied `+toDisplayString(unref(activeTask).recentChatContext.messages.length)+` messages from Main when this chat was created. `,1),unref(activeTask).recentChatContext.truncated?(openBlock(),createElementBlock(`span`,_hoisted_4$23,`Some text was omitted to fit the 64 KiB context limit.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),activeTaskError.value||unref(actionErrors)[unref(activeTask).id]||activityLabel.value?(openBlock(),createElementBlock(`div`,_hoisted_5$20,[unref(actionErrors)[unref(activeTask).id]&&!unref(taskToClose)?(openBlock(),createElementBlock(`div`,_hoisted_6$17,toDisplayString(unref(actionErrors)[unref(activeTask).id]),1)):createCommentVNode(``,true),activeTaskError.value?(openBlock(),createElementBlock(`div`,{key:1,class:normalizeClass([`vibe64-temporary-ai__error`,{"vibe64-temporary-ai__error--recovered":activeTaskRecoveryVerified.value}]),role:activeTaskRecoveryVerified.value?`status`:`alert`},[activeTaskRecoveryVerified.value?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` Temporary AI did not report a clean finish: `+toDisplayString(activeTaskError.value)+` The repair was independently verified. `,1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(activeTaskError.value),1)],64))],10,_hoisted_7$15)):createCommentVNode(``,true),activityLabel.value?(openBlock(),createBlock(unref(AssistantComposerSupport_default),{key:2,class:`vibe64-temporary-ai__activity`,activity:{label:activityLabel.value}},null,8,[`activity`])):createCommentVNode(``,true)])):createCommentVNode(``,true)]),composer:withCtx(()=>[unref(activeTask).draftSaveState===`failed`?(openBlock(),createElementBlock(`p`,_hoisted_8$15,` Draft not saved; check the error and retry. `)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(temporary).tasks.value,task=>{return withDirectives((openBlock(),createBlock(_sfc_main$59,{key:task.id,"saved-attachments":task.attachments,"attachments-owned-by-conversation":``,ref_for:true,ref:element=>unref(setTaskPrompt)(task.id,element),class:`vibe64-temporary-ai__composer`,"model-value":task.draft&&(task.displayMessage||task.draft),"aria-label":`Message temporary AI`,density:`compact`,"attachments-enabled":Boolean(props.sessionId)&&!taskInputDisabled(task),disabled:task.state===`closing`||task.status===`closing`||Boolean(taskAccessReason(task)),placeholder:`Ask temporary AI…`,rows:2,"session-id":props.sessionId,"tab-to-submit":``,onAttachmentsChange:$event=>unref(temporary).updateAttachments(task.id,$event),onBlur:_cache[9]||(_cache[9]=$event=>unref(typingPresence).blur()),onInputActivity:_cache[10]||(_cache[10]=$event=>unref(typingPresence).noteInputActivity()),onSubmit:$event=>sendTask(task.id),onTabToSubmit:unref(focusSendButton),"onUpdate:modelValue":$event=>unref(temporary).updateDraft(task.id,$event)},{footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_9$11,[task.id===unref(activeTask).id?(openBlock(),createBlock(Vibe64ChatModeControls_default,{key:0,session:modeSession.value,goal:task.goal,temporary:``,"required-mode":task.recoveryOperation===`update`?`fix`:``,"save-preferences":preferences=>unref(temporary).updateRouting(task.id,preferences),active:task.busy,disabled:props.repositoryBusy||task.status===`closing`,"can-configure":props.canConfigureRouting,purposes:task.purposes,loading:!task.purposes,onCustom:_cache[6]||(_cache[6]=$event=>{customTarget.value=$event;customOpen.value=true})},null,8,[`session`,`goal`,`required-mode`,`save-preferences`,`active`,`disabled`,`can-configure`,`purposes`,`loading`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-label":`Attach files`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles,icon:unref(mdiPaperclip),size:`small`,title:`Attach files`,type:`button`,variant:`text`,onClick:$event=>unref(taskPrompt)(task.id)?.openFilePicker?.()},null,8,[`disabled`,`icon`,`onClick`]),__props.previewAttachmentState.captureAvailable?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Attach preview screenshot`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles||__props.previewAttachmentState.captureBusy,"aria-busy":__props.previewAttachmentState.captureBusy?`true`:void 0,icon:unref(mdiCameraOutline),size:`small`,title:`Attach preview screenshot`,variant:`text`,onClick:_cache[7]||(_cache[7]=$event=>__props.previewAttachmentState.capture?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),__props.previewAttachmentState.diagnosticsAvailable?(openBlock(),createBlock(VBtn,{key:2,"aria-label":`Attach console and network diagnostics`,disabled:taskInputDisabled(task)||!attachmentState.canAddFiles||__props.previewAttachmentState.diagnosticsBusy,"aria-busy":__props.previewAttachmentState.diagnosticsBusy?`true`:void 0,icon:unref(mdiConsoleNetworkOutline),size:`small`,title:`Attach console and network diagnostics`,variant:`text`,onClick:_cache[8]||(_cache[8]=$event=>__props.previewAttachmentState.attachDiagnostics?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),!task.routingMetadata?.assistant_routing?(openBlock(),createBlock(_sfc_main$50,{key:3,"agent-settings":task.agentSettings,"assistant-selection":task.assistantSelection||props.assistantSelection,disabled:props.repositoryBusy||task.status===`closing`,onUpdateSetting:updateActiveAgentSetting},null,8,[`agent-settings`,`assistant-selection`,`disabled`])):createCommentVNode(``,true),createVNode(Vibe64ComposerDelivery_default,{ref_for:true,ref:element=>unref(setTaskSendButton)(task.id,element),"stop-visible":task.busy,"stop-enabled":Boolean(task.conversationId)&&unref(stoppingTaskId)!==task.id,stopping:unref(stoppingTaskId)===task.id,sending:task.delivery.state.sending,"can-submit":!props.connectionUnavailable&&unref(stoppingTaskId)!==task.id&&!taskInputDisabled(task)&&Boolean(task.draft.trim())&&attachmentState.canSubmit,"submit-mode":task.busy?`steer`:`send`,"submit-aria-label":task.busy?`Steer assistant`:`Send message`,"submit-title":task.busy?`Send this guidance to the active assistant turn`:`Send message`,onSubmit:$event=>sendTask(task.id),onStop:$event=>unref(stopTask)(task.id)},null,8,[`stop-visible`,`stop-enabled`,`stopping`,`sending`,`can-submit`,`submit-mode`,`submit-aria-label`,`submit-title`,`onSubmit`,`onStop`])])]),_:2},1032,[`saved-attachments`,`model-value`,`attachments-enabled`,`disabled`,`session-id`,`onAttachmentsChange`,`onSubmit`,`onTabToSubmit`,`onUpdate:modelValue`])),[[vShow,task.id===unref(activeTask).id]])}),128))]),_:1},8,[`session-id`,`adapter`,`recovery-message`,`routing-request`,`working`,`scroll-key`,`empty-message`])):createCommentVNode(``,true),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:customOpen.value,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>customOpen.value=$event),target:customTarget.value,session:modeSession.value,"can-configure":props.canConfigureRouting,"changes-disabled":props.repositoryBusy||unref(activeTask)?.status===`closing`,"save-selection":selection=>unref(temporary).updateRouting(unref(activeTask).id,{mode:`custom`,review:false,override:selection})},null,8,[`modelValue`,`target`,`session`,`can-configure`,`changes-disabled`,`save-selection`]),unref(renamingTask)?(openBlock(),createBlock(VDialog,{key:1,"aria-label":`Rename chat`,"model-value":true,"max-width":`28rem`,persistent:unref(renamePending),"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(renamingTaskId.value=``))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:_cache[17]||(_cache[17]=withModifiers((...args)=>unref(submitRename)&&unref(submitRename)(...args),[`prevent`]))},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename chat`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(renameValue),"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>isRef(renameValue)?renameValue.value=$event:null),label:`Chat name`,variant:`outlined`,maxlength:`80`,autofocus:``,disabled:unref(renamePending),placeholder:`Temporary ${unref(renamingTask).number||``}`.trim(),hint:`Leave empty to use the numbered name.`,"persistent-hint":``,"error-messages":unref(renameError)},null,8,[`modelValue`,`disabled`,`placeholder`,`error-messages`])]),_:1}),createVNode(VCardActions,{class:`pa-6 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,disabled:unref(renamePending),onClick:_cache[16]||(_cache[16]=$event=>renamingTaskId.value=``)},{default:withCtx(()=>[..._cache[26]||(_cache[26]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,loading:unref(renamePending)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Rename`,-1)])]),_:1},8,[`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])):createCommentVNode(``,true),unref(taskToClose)?(openBlock(),createBlock(VDialog,{key:2,"model-value":true,"aria-labelledby":unref(closeTitleId),"max-width":`480`,persistent:``},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:unref(closeTitleId),class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(taskToClose).busy?`Stop and close repair?`:`Close incomplete repair?`),1)]),_:1},8,[`id`]),createVNode(VCardText,null,{default:withCtx(()=>[_cache[28]||(_cache[28]=createTextVNode(` Partial edits will stay in this session and may still need repair. Closing does not undo those edits or complete Update. `,-1)),unref(actionErrors)[unref(taskToClose).id]?(openBlock(),createElementBlock(`p`,_hoisted_10$10,toDisplayString(unref(actionErrors)[unref(taskToClose).id]),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{disabled:unref(closingTask),onClick:_cache[19]||(_cache[19]=$event=>closeTaskId.value=``)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Keep chat open`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:unref(closingTask),onClick:_cache[20]||(_cache[20]=$event=>unref(closeTask)(unref(taskToClose).id))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(taskToClose).busy?`Stop and close`:`Close repair`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`aria-labelledby`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],10,_hoisted_1$42)):createCommentVNode(``,true)}}};var Vibe64TemporaryAiWorkspace_default=_plugin_vue_export_helper_default(_sfc_main$48,[[`__scopeId`,`data-v-38585bad`]]);var SAVE_UPDATE_REQUIRED_CODE=`vibe64_session_save_update_required`;var SESSION_WORK_PROBLEM_LABEL=`Repository needs help`;function failed(record){return Boolean(record&&typeof record===`object`&&normalizeText$1(record.status).toLowerCase()===`failed`)}function nextStep(operation,record){const notice=operation===`update`?`Update notice`:`Save notice`;const code=normalizeText$1(record.code);if(code===`vibe64_session_update_conflict`&&normalizeText$1(record.conflictRecovery?.reviewId))return`Resolve the listed files yourself, in Main chat or with Fix it with AI, then choose Review resolved conflicts on the ${notice}.`;if(code===`vibe64_session_save_history_diverged`||code===`vibe64_session_update_history_diverged`)return`Choose Fix it with AI on the ${notice}; retrying alone cannot succeed.`;if(code===`vibe64_pull_request_required`)return`Choose Create draft PR or Fix it with AI on the ${notice}.`;return`Choose Fix it with AI on the ${notice}, or fix the cause and ${operation===`update`?`update`:`save`} again.`}function sessionWorkProblem({operation=null,updateOperation=null}={}){const save=failed(operation)&&normalizeText$1(operation.code)!==SAVE_UPDATE_REQUIRED_CODE?operation:null;const update=failed(updateOperation)?updateOperation:null;const record=save&&update?normalizeText$1(update.updatedAt)>normalizeText$1(save.updatedAt)?update:save:save||update;if(!record)return null;const kind=record===update?`update`:`save`;return{code:normalizeText$1(record.code),failedAt:normalizeText$1(record.finishedAt||record.updatedAt),label:SESSION_WORK_PROBLEM_LABEL,message:normalizeText$1(record.error||record.message)||`${kind===`update`?`Update`:`Save`} failed without a recorded reason.`,nextStep:nextStep(kind,record),operation:kind,status:`failed`}}var REPOSITORY_WORK_STATE_PRESENTATION=Object.freeze({checking:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Checking whether work is saved`}),needs_help:Object.freeze({icon:mdiAlertCircleOutline,label:SESSION_WORK_PROBLEM_LABEL}),saved:Object.freeze({icon:mdiCheckCircleOutline,label:`All work is saved`}),saving:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Saving work`}),unavailable:Object.freeze({icon:mdiAlertCircleOutline,label:`Save status is unavailable`}),unsaved:Object.freeze({icon:mdiContentSaveAlertOutline,label:``}),update_available:Object.freeze({icon:mdiCloudDownloadOutline,label:`Update available`}),updating:Object.freeze({icon:mdiDotsHorizontalCircleOutline,label:`Updating session`})});function sessionRepositoryWorkState(workState=null){const source=workState&&typeof workState===`object`?workState:{};const freshness={checkedAt:String(source.checkedAt||``),...source.updateStatusPending===true?{updateStatusPending:true}:{}};const operationStatus=String(source.operation?.status||``).trim();const updateStatus=String(source.updateOperation?.status||``).trim();if(operationStatus===`running`)return{...freshness,state:`saving`};if(updateStatus===`running`)return{...freshness,state:`updating`};const problem=sessionWorkProblem(source);if(problem)return{...freshness,problem:{message:problem.message,nextStep:problem.nextStep,operation:problem.operation},state:`needs_help`,updateAvailable:source.updateAvailable===true};if((source.loading||source.unsaved===null||source.unsaved===void 0)&&source.updateAvailable!==true)return{...freshness,state:source.error?`unavailable`:`checking`};const changedCount=Array.isArray(source.changedPaths)?source.changedPaths.length:0;if(source.unsaved===true||source.connectedSaveRequired===true)return{changedCount,...freshness,state:`unsaved`,updateAvailable:source.updateAvailable===true};return{...freshness,state:source.error?`unavailable`:source.updateAvailable===true?`update_available`:`saved`}}function repositoryWorkState(sessionItem={}){const state=String(sessionItem?.repositoryWorkState?.state||`checking`);return Object.hasOwn(REPOSITORY_WORK_STATE_PRESENTATION,state)?state:`checking`}function repositoryWorkStateProvisional(sessionItem={}){return sessionItem?.agentThinking===true&&repositoryWorkState(sessionItem)===`saved`}function repositoryWorkStateLabel(sessionItem={}){if(repositoryWorkStateProvisional(sessionItem))return`All work was saved at the last check; the assistant is still working`;const state=repositoryWorkState(sessionItem);if(state===`unsaved`){const changedCount=Number(sessionItem?.repositoryWorkState?.changedCount||0);const changeLabel=changedCount===1?`1 change`:`${changedCount||`Unsaved`} changes`;return sessionItem?.repositoryWorkState?.updateAvailable?`${changeLabel}; update available`:changeLabel}return REPOSITORY_WORK_STATE_PRESENTATION[state].label}function repositoryWorkStateProblem(sessionItem={}){const problem=sessionItem?.repositoryWorkState?.problem;return repositoryWorkState(sessionItem)===`needs_help`&&problem?.message?problem:null}function repositoryWorkStateDescription(sessionItem={}){const label=repositoryWorkStateLabel(sessionItem);const problem=repositoryWorkStateProblem(sessionItem);return problem?`${label}: ${problem.message} ${problem.nextStep}`:label}function repositoryWorkStateIcon(sessionItem={}){return REPOSITORY_WORK_STATE_PRESENTATION[repositoryWorkState(sessionItem)].icon}function sessionArchiveWorkNotice(workState=null){const state=repositoryWorkState({repositoryWorkState:workState});if(state===`saved`||state===`update_available`)return null;const archiveOnly=`Archiving keeps them only in the session archive, which cannot restore them to the project.`;if(state===`unsaved`){const changedCount=Number(workState?.changedCount||0);return{confirmLabel:`Archive without saving`,kind:`unsaved`,message:`This session has ${changedCount===1?`1 unsaved change`:`${changedCount||`some`} unsaved changes`} that the project does not have yet, such as an added starter. ${archiveOnly} To keep them, choose Cancel and use Save first.`}}return{confirmLabel:`Archive session`,kind:`unconfirmed`,message:`Vibe64 has not confirmed that this session's work is saved. Any unsaved changes are not in the project. ${archiveOnly}`}}var _hoisted_1$41={class:`text-body-2 text-medium-emphasis mb-0`};var _sfc_main$47={__name:`Vibe64SessionArchiveDialog`,props:{archive:{default:()=>({}),type:Object},shortSessionId:{default:sessionId=>String(sessionId||``),type:Function},workState:{default:null,type:Object}},setup(__props){const props=__props;const workNotice=computed(()=>sessionArchiveWorkNotice(props.workState));function updateOpen(open){if(open!==true)props.archive.cancel()}const titleId=`vibe64-session-archive-dialog-${useId()}`;return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-labelledby":titleId,"model-value":__props.archive.open,"max-width":`620`,persistent:``,"onUpdate:modelValue":updateOpen},{default:withCtx(()=>[createVNode(VCard,{class:`studio-ai-session-archive-dialog`},{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId,class:`studio-ai-session-archive-dialog__title`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiArchiveOutline),color:`primary`},null,8,[`icon`]),_cache[0]||(_cache[0]=createTextVNode(` Archive session? `,-1))]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`p`,{class:`text-body-2 mb-2`},` This stops the assistant and terminals, preserves the session, and removes its active workspace. `,-1)),createBaseVNode(`p`,_hoisted_1$41,[_cache[1]||(_cache[1]=createTextVNode(` Session: `,-1)),createBaseVNode(`strong`,null,toDisplayString(__props.archive.sessionTitle||__props.shortSessionId(__props.archive.sessionId)),1)]),workNotice.value?(openBlock(),createBlock(VAlert,{key:0,class:`mt-3`,density:`compact`,role:`status`,type:workNotice.value.kind===`unsaved`?`warning`:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(workNotice.value.message),1)]),_:1},8,[`type`])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`studio-ai-session-archive-dialog__actions`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:__props.archive.command.isRunning,onClick:__props.archive.cancel},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:__props.archive.command.isRunning,onClick:__props.archive.confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.archive.command.isRunning?`Archiving…`:workNotice.value?.confirmLabel||`Archive session`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64SessionArchiveDialog_default=_plugin_vue_export_helper_default(_sfc_main$47,[[`__scopeId`,`data-v-e367001b`]]);function useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath}={}){const files=ref([]);const loading=ref(false);const error=ref(``);const pendingPaths=ref([]);const feedback=useUiFeedback({source:`vibe64.source-editor.stars`});const paths=computed(()=>files.value.map(file=>file.path));const endpoint=computed(()=>{const id=readRefOrGetterValue(sessionId);const base=readRefOrGetterValue(sessionsApiPath);return id&&base?vibe64SourceEditorStarsPath(base,id):``});let generation=0;let readSequence=0;let needsRefresh=false;onScopeDispose(()=>{generation+=1});async function request(url,options){const response=await getHttpWebClient().request(url,options);if(response?.ok===false)throw vibe64ApiError(response,`Starred files could not load.`);return response}async function refresh(){if(!endpoint.value||pendingPaths.value.length)return;const sequence=++readSequence;const context=generation;loading.value=true;error.value=``;try{const response=await request(endpoint.value);if(context===generation&&sequence===readSequence){files.value=response.files||[];needsRefresh=false}}catch(cause){if(context===generation&&sequence===readSequence)error.value=cause.message||`Starred files could not load.`}finally{if(context===generation&&sequence===readSequence)loading.value=false}}async function toggle(filePath){if(!endpoint.value||!filePath||pendingPaths.value.includes(filePath))return;const context=generation;const previousIndex=files.value.findIndex(file=>file.path===filePath);const previous=files.value[previousIndex];const starred=!previous;readSequence+=1;loading.value=false;pendingPaths.value=[...pendingPaths.value,filePath];files.value=starred?[...files.value,{path:filePath,available:true}]:files.value.filter(file=>file.path!==filePath);try{await request(endpoint.value,{method:`POST`,body:{path:filePath,starred}});if(context===generation)error.value=``}catch(cause){if(context!==generation)return;files.value=files.value.filter(file=>file.path!==filePath);if(previous)files.value.splice(previousIndex,0,previous);needsRefresh=true;feedback.error(cause,`The star could not be saved.`)}finally{if(context===generation){pendingPaths.value=pendingPaths.value.filter(value=>value!==filePath);if(needsRefresh&&pendingPaths.value.length===0)await refresh()}}}watch([endpoint,()=>readRefOrGetterValue(projectSlug)],()=>{generation+=1;needsRefresh=false;files.value=[];pendingPaths.value=[];error.value=``;loading.value=false;refresh()},{immediate:true});return{error,files,loading,paths,pendingPaths,refresh,toggle}}var GIT_IDENTITY_COMMANDS=[`git config --global user.name "Your Name"`,`git config --global user.email "you@example.com"`].join(`
3
+ `);var _sfc_main$46={__name:`GitStandInIdentityNotice`,emits:[`close`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createBlock(VAlert,{class:`git-stand-in`,type:`info`,variant:`tonal`,title:`Saved with a stand-in name`,closable:``,"onClick:close":_cache[0]||(_cache[0]=$event=>emit(`close`))},{default:withCtx(()=>[_cache[1]||(_cache[1]=createBaseVNode(`p`,{class:`mt-1 mb-3`},` Git doesn’t know your name and email yet, so this Save is marked “via Vibe64”. To use yours from now on, run this once in a terminal: `,-1)),createVNode(Vibe64CopyCommand_default,{command:unref(GIT_IDENTITY_COMMANDS),label:`Copy both commands`},null,8,[`command`])]),_:1})}}};var _hoisted_1$40={class:`setup-tools__header`};var _hoisted_2$34={key:1,class:`setup-tools__found`};var _hoisted_3$29={key:0};var _sfc_main$45={__name:`WorkspaceSetupToolRows`,props:{runtimes:{type:Array,default:()=>[]},active:Boolean},emits:[`missing`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{tools,missing,checking,check}=useLocalToolRows(()=>props.runtimes,{enabled:()=>props.active});watch(()=>missing.value.length,count=>emit(`missing`,count),{immediate:true});const ready=computed(()=>tools.value.filter(tool=>tool.status===`ready`));return(_ctx,_cache)=>{return unref(tools).length?(openBlock(),createElementBlock(`section`,{key:0,class:normalizeClass([`setup-tools`,{"setup-tools--quiet":!unref(missing).length}]),"aria-label":`Tools this step uses`},[unref(missing).length?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`header`,_hoisted_1$40,[createBaseVNode(`strong`,null,toDisplayString(unref(missing).length===1?`This step needs a tool that isn't working`:`This step needs tools that aren't working`),1),_cache[0]||(_cache[0]=createBaseVNode(`span`,null,`Fix it below, then choose Retry.`,-1))]),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(missing),tool=>{return openBlock(),createBlock(ToolInstallRow_default,{key:tool.id,checking:unref(checking),tool,onCheck:unref(check)},null,8,[`checking`,`tool`,`onCheck`])}),128))],64)):createCommentVNode(``,true),ready.value.length?(openBlock(),createElementBlock(`p`,_hoisted_2$34,[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`16`},null,8,[`icon`]),createBaseVNode(`span`,null,[createTextVNode(toDisplayString(unref(missing).length?`Also used:`:`Tools this step used:`)+` `,1),(openBlock(true),createElementBlock(Fragment,null,renderList(ready.value,(tool,index)=>{return openBlock(),createElementBlock(`span`,{key:tool.id,class:`setup-tools__found-item`},[createTextVNode(toDisplayString(tool.name)+` `+toDisplayString(tool.version),1),tool.path?(openBlock(),createElementBlock(`code`,_hoisted_3$29,toDisplayString(tool.path),1)):createCommentVNode(``,true),createTextVNode(toDisplayString(index<ready.value.length-1?`,`:``),1)])}),128))])])):createCommentVNode(``,true)],2)):createCommentVNode(``,true)}}};var WorkspaceSetupToolRows_default=_plugin_vue_export_helper_default(_sfc_main$45,[[`__scopeId`,`data-v-cf5a6945`]]);var _hoisted_1$39={class:`vibe64-temporary-action-terminal__summary`};var _hoisted_2$33={class:`vibe64-temporary-action-terminal__title`};var _hoisted_3$28=[`role`,`title`];var _sfc_main$44={__name:`Vibe64TemporaryActionTerminal`,props:{active:{default:false,type:Boolean},dismissed:{default:false,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Action needs attention`,type:String},height:{default:`clamp(8rem, 22vh, 14rem)`,type:String},operationKey:{default:``,type:String},output:{default:``,type:String},retryable:{default:false,type:Boolean},stage:{default:``,type:String},starting:{default:false,type:Boolean},status:{default:``,type:String},subtitle:{default:``,type:String},title:{default:`Action`,type:String}},emits:[`copy`,`dismiss`,`retry`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const detailsOpen=ref(false);const detailsViewed=ref(false);const canDismiss=computed(()=>!props.active);const forwardedSlots=[`actions-after`,`output`,`overlay`];const visible=computed(()=>!props.dismissed&&Boolean(props.active||props.error||props.status===`required`||detailsViewed.value&&Boolean(props.status||props.stage||props.output)));const summaryText=computed(()=>{const outputLine=terminalLastMeaningfulLine(props.output);if(props.error)return props.error;if(props.status!==`required`&&props.stage&&outputLine&&props.stage!==outputLine)return`${props.stage} · ${outputLine}`;return props.stage||outputLine||`Working…`});function toggleDetails(){detailsViewed.value=true;detailsOpen.value=!detailsOpen.value}function dismiss(){detailsOpen.value=false;detailsViewed.value=false;emit(`dismiss`)}watch(()=>props.operationKey,()=>{detailsOpen.value=false;detailsViewed.value=false},{immediate:true});watch(()=>props.active,(active,previousActive)=>{if(active&&!previousActive){detailsOpen.value=false;detailsViewed.value=false}},{immediate:true});return(_ctx,_cache)=>{return visible.value?(openBlock(),createBlock(Vibe64TerminalSurface_default,{key:0,class:normalizeClass([`vibe64-temporary-action-terminal`,{"vibe64-temporary-action-terminal--error":Boolean(__props.error)}]),"body-mode":`log`,"close-label":`Dismiss`,collapsible:``,error:__props.error,expanded:detailsOpen.value,"error-title":__props.errorTitle,height:__props.height,"mobile-takeover":``,"open-error-details":detailsOpen.value&&Boolean(__props.error),output:__props.output,retryable:Boolean(__props.error)&&__props.retryable,"show-close":canDismiss.value,"show-copy":detailsOpen.value&&Boolean(__props.output),"show-interrupt":false,"show-summary":false,starting:__props.starting,title:__props.title,onClose:dismiss,onCopy:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`copy`)),onRetry:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleDetails},createSlots({heading:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$39,[createBaseVNode(`strong`,_hoisted_2$33,toDisplayString(__props.title),1),__props.status?(openBlock(),createBlock(VChip,{key:0,class:`vibe64-temporary-action-terminal__status`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true)])]),"actions-before":withCtx(()=>[createBaseVNode(`span`,{class:`vibe64-temporary-action-terminal__line`,role:__props.error?`alert`:`status`,title:__props.subtitle},toDisplayString(summaryText.value),9,_hoisted_3$28),renderSlot(_ctx.$slots,`actions-before`,{},void 0,true),__props.error||__props.status===`required`?renderSlot(_ctx.$slots,`error-actions`,{},void 0,true,0):createCommentVNode(``,true)]),_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1032,[`class`,`error`,`expanded`,`error-title`,`height`,`open-error-details`,`output`,`retryable`,`show-close`,`show-copy`,`starting`,`title`])):createCommentVNode(``,true)}}};var Vibe64TemporaryActionTerminal_default=_plugin_vue_export_helper_default(_sfc_main$44,[[`__scopeId`,`data-v-228a4f92`]]);var _hoisted_1$38={key:0,class:`d-flex flex-column ga-2`,style:{"overflow-wrap":`anywhere`}};var _hoisted_2$32={key:2,class:`ma-0 text-error`,role:`alert`};var _hoisted_3$27={key:0,class:`text-error`,role:`alert`};var _hoisted_4$22={class:`text-wrap`};var _sfc_main$43={__name:`Vibe64ConnectedReplacement`,props:{projectSlug:{type:String,required:true},sessionId:{type:String,required:true},failure:{type:Object,default:null},disabled:{type:Boolean,default:false}},emits:[`replaced`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const pending=ref(false);const review=ref(null);const error=ref(``);const replacement=ref(null);const available=computed(()=>[`vibe64_contribution_discarded`,`vibe64_connected_integration_discarded`].includes(props.failure?.code)&&Boolean(props.failure?.details?.repository));const endpoint=computed(()=>scopedDevelopmentApiUrl(vibe64SessionPath(`/api${VIBE64_SESSIONS_API_SUFFIX}`,props.sessionId,`/connected/replacement`),props.projectSlug));watch(()=>[props.projectSlug,props.sessionId],()=>{review.value=null;error.value=``;replacement.value=null});watch(()=>props.failure?.details?.repository,()=>{review.value=null;error.value=``});async function inspect(){if(pending.value||props.disabled||!available.value)return;const path=endpoint.value;const repository=props.failure.details.repository;pending.value=true;error.value=``;try{const result=await getHttpWebClient().request(`${path}?repository=${encodeURIComponent(repository)}`,{method:`GET`});if(result?.ok!==true)throw vibe64ApiError(result,`The discarded contribution could not be reviewed.`);if(path===endpoint.value&&repository===props.failure?.details?.repository)review.value=result.contributions?.[0]?.review||null}catch(cause){if(path===endpoint.value)error.value=cause.message}finally{pending.value=false}}async function replace(){if(pending.value||props.disabled||!review.value)return;const path=endpoint.value;const reviewed={...review.value};pending.value=true;error.value=``;try{const result=await getHttpWebClient().request(path,{method:`POST`,body:{repository:reviewed.repository,review:reviewed}});if(result?.ok!==true)throw vibe64ApiError(result,`Replacement preparation failed. Retry this same review.`);if(path===endpoint.value){replacement.value=result.prepared?.find(item=>item.repository===reviewed.repository)||null;review.value=null;emit(`replaced`)}}catch(cause){if(path===endpoint.value)error.value=cause.message}finally{pending.value=false}}return(_ctx,_cache)=>{return available.value||replacement.value?(openBlock(),createElementBlock(`div`,_hoisted_1$38,[replacement.value?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`ma-0`,role:`status`},`Replacement prepared. Revise its source, then run Prepare workspace in this project before testing. Save connected first pushes it for review; Main Save still waits for acceptance.`,-1)),createVNode(VBtn,{variant:`tonal`,"min-height":`48`,href:`${unref(projectAppPath)(replacement.value.projectSlug,`/`)}?session=${encodeURIComponent(replacement.value.sessionId)}`},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Open replacement session `,-1)])]),_:1},8,[`href`])],64)):(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`48`,height:`auto`,disabled:__props.disabled||pending.value,onClick:inspect},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createBaseVNode(`span`,{class:`text-wrap`},`Review replacement contribution`,-1)])]),_:1},8,[`disabled`])),error.value&&!review.value?(openBlock(),createElementBlock(`p`,_hoisted_2$32,toDisplayString(error.value),1)):createCommentVNode(``,true),createVNode(VDialog,{"model-value":Boolean(review.value),persistent:pending.value,"max-width":`560`,scrollable:``,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>!$event&&!pending.value&&(review.value=null))},{default:withCtx(()=>[review.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Create replacement contribution?`,-1)])]),_:1}),createVNode(VCardText,{style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(review.value.repository)+` → `+toDisplayString(review.value.targetBranch),1),createBaseVNode(`p`,null,[_cache[6]||(_cache[6]=createTextVNode(`Start a new contribution from discarded commit `,-1)),createBaseVNode(`code`,null,toDisplayString(review.value.discardedHead),1),_cache[7]||(_cache[7]=createTextVNode(`.`,-1))]),_cache[8]||(_cache[8]=createBaseVNode(`p`,null,`The old branch and checkout remain intact. Unsaved edits stay in the old checkout; copy any edits you need into the replacement.`,-1)),_cache[9]||(_cache[9]=createBaseVNode(`p`,null,`This prepares source only. Nothing is pushed, and Main Save still requires the contribution to be accepted.`,-1)),error.value?(openBlock(),createElementBlock(`p`,_hoisted_3$27,toDisplayString(error.value),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>review.value=null)},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,disabled:__props.disabled||pending.value,onClick:replace},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_4$22,toDisplayString(pending.value?`Preparing…`:`Create replacement contribution`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])])):createCommentVNode(``,true)}}};var _hoisted_1$37={class:`studio-autopilot__activity`,"aria-label":`Session activity`};var _hoisted_2$31={class:`studio-autopilot__connection-actions`};var _hoisted_3$26={key:0,class:`text-body-small`};var _hoisted_4$21={key:1,class:`text-body-small`};var _hoisted_5$19={class:`d-flex flex-wrap align-center ga-2`};var _hoisted_6$16={class:`flex-grow-1`};var _hoisted_7$14={class:`text-body-small mb-0`};var _hoisted_8$14={class:`studio-autopilot__checkpoint-details text-body-small`};var _hoisted_9$10={class:`text-body-small`};var _hoisted_10$9={key:0};var _hoisted_11$8={key:1};var _sfc_main$42={__name:`Vibe64AutopilotActivity`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,assistantAccountMessage,assistantAccountUnavailable,assistantFixAllowed,assistantFixRestrictionMessage,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,connectionRecoveryVisible,createPullRequestOpen,dismissCheckpointFailure,dismissSaveWorkActivity,dismissWorkspaceSetupActivity,fixRepositoryActionError,fixWorkspaceSetupWithTemporaryAi,githubProject,projectSlug,props,repositoryRecoverySending,requestSessionRenewal,resourceRecoveryControl,retrySaveWork,retryWorkspaceSetup,reviewResolvedUpdate,saveWorkActivityDismissed,saveWorkActivityIsUpdate,saveWorkActivityKey,saveWorkActivityLabel,saveWorkCanResolveWithTemporaryAi,saveWorkConnectedResults,saveWorkDisabled,saveWorkError,saveWorkFailure,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStandInIdentity,saveWorkStatus,sessionId,sessionPullRequest,sourceOperationsSuspended,temporaryAiWorkspace,testApproval,updateConflictRecovery,updateWorkDisabled,workspaceSetupActivityKey,workspaceSetupAskDisabled,workspaceSetupCurrentLabel,workspaceSetupDismissed,workspaceSetupError,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}=__props.view;const resourceRetryBusy=ref(false);const workspaceSetupToolsMissing=ref(false);const LocalDatabaseServer=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CNkd6O5t.js`).then(n=>n.p).then(module=>module.loadLocalDatabaseServer()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const updateHandledInRepair=computed(()=>Boolean((saveWorkActivityIsUpdate.value||saveWorkError.value)&&temporaryAiWorkspace.value?.updateRepairVisible));const saveWorkCanCreatePullRequest=computed(()=>githubProject.value&&!sessionPullRequest.value?.number&&saveWorkFailure.value?.code===`vibe64_pull_request_required`);function copyActivityOutput(output=``){return writeClipboardText(output)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$37,[unref(githubProject)&&unref(sessionPullRequest)?(openBlock(),createBlock(VSheet,{key:0,color:`surface-light`,rounded:`lg`,class:`pa-2 text-body-small`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(unref(sessionPullRequest).number?`PR #${unref(sessionPullRequest).number}`:`Pull request branch`),1),createTextVNode(` · Commit & push to `+toDisplayString(unref(sessionPullRequest).headRepository)+`:`+toDisplayString(unref(sessionPullRequest).headBranch),1)]),_:1})):createCommentVNode(``,true),unref(connectionRecoveryVisible)?(openBlock(),createBlock(VSheet,{key:1,class:`studio-autopilot__connection-recovery`,rounded:`lg`,role:`status`,"data-vibe64-connection-recovery":``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$31,[unref(assistantAccountUnavailable)?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,"min-height":`32`,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AccountConnectionsDialog)({section:`ai`}))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Go to AI Accounts `,-1)])]),_:1})):createCommentVNode(``,true),!unref(assistantAccountUnavailable)||unref(props).sessionSelectionArchived?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`32`,size:`small`,disabled:unref(props).agentConnectionStatus===`reconciling`,onClick:_cache[1]||(_cache[1]=$event=>unref(props).retryAgentConnection())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(props).agentConnectionStatus===`disconnected`?`Reconnect`:`Retry connection`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true),unref(props).agentConnectionStatus===`failed`&&unref(props).sessionRenewal?.visible?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,"min-height":`32`,size:`small`,onClick:_cache[2]||(_cache[2]=$event=>unref(requestSessionRenewal)($event.currentTarget))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Renew session `,-1)])]),_:1})):createCommentVNode(``,true)]),unref(assistantAccountUnavailable)?(openBlock(),createElementBlock(`span`,_hoisted_3$26,toDisplayString(unref(assistantAccountMessage))+` Your draft is kept. `,1)):(openBlock(),createElementBlock(`span`,_hoisted_4$21,toDisplayString(unref(props).agentConnectionStatus===`disconnected`?`Connection lost. Reconnecting automatically.`:unref(props).agentConnectionError||`Checking the assistant connection.`)+` Your draft is kept. `,1))]),_:1})):createCommentVNode(``,true),unref(checkpointFailureVisible)?(openBlock(),createBlock(VAlert,{key:2,class:`studio-autopilot__checkpoint-notice`,type:`warning`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$19,[createBaseVNode(`div`,_hoisted_6$16,[_cache[16]||(_cache[16]=createBaseVNode(`strong`,{class:`text-body-medium`},`Recovery snapshot not saved`,-1)),createBaseVNode(`p`,_hoisted_7$14,toDisplayString(unref(checkpointFailureReason))+` Your files remain in this session. You can keep chatting.`,1)]),createVNode(VBtn,{variant:`text`,"min-height":`48`,"aria-label":`Dismiss recovery snapshot warning`,onClick:unref(dismissCheckpointFailure)},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Dismiss`,-1)])]),_:1},8,[`onClick`])]),(openBlock(),createElementBlock(`details`,{key:unref(checkpointFailure)},[_cache[18]||(_cache[18]=createBaseVNode(`summary`,{class:`text-body-small`},`Technical details`,-1)),_cache[19]||(_cache[19]=createBaseVNode(`p`,{class:`text-body-small mt-2 mb-2`},`Vibe64 tries again after the next assistant turn finishes. A successful snapshot clears this warning. Dismiss hides this failure only; a new failure will appear again.`,-1)),createBaseVNode(`pre`,_hoisted_8$14,toDisplayString(unref(checkpointFailure)),1)]))]),_:1})):createCommentVNode(``,true),unref(testApproval)&&unref(resourceRecoveryControl)?(openBlock(),createBlock(VSheet,{key:3,class:`d-flex flex-wrap align-center justify-space-between ga-2 pa-2`,color:`surface-variant`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_9$10,toDisplayString(unref(testApproval).state===`waiting`?`Tests need memory approval`:`Resuming the original test…`),1),(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${unref(testApproval).admissionId}`,"admission-id":unref(testApproval).admissionId,"session-id":unref(sessionId),disabled:unref(testApproval).state!==`waiting`,onRetryResult:_cache[3]||(_cache[3]=$event=>unref(props).refreshSessionData?.()),onRecheck:_cache[4]||(_cache[4]=$event=>unref(props).refreshSessionData?.())},null,40,[`admission-id`,`session-id`,`disabled`]))]),_:1})):createCommentVNode(``,true),unref(saveWorkStandInIdentity)?(openBlock(),createBlock(_sfc_main$46,{key:4,onClose:_cache[5]||(_cache[5]=$event=>saveWorkStandInIdentity.value=false)})):createCommentVNode(``,true),unref(saveWorkConnectedResults).length?(openBlock(),createBlock(VAlert,{key:5,type:`info`,variant:`tonal`,closable:``,"onClick:close":_cache[6]||(_cache[6]=$event=>saveWorkConnectedResults.value=[])},{default:withCtx(()=>[_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`mb-2`},`Connected contributions pushed. The main project was not pushed.`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(saveWorkConnectedResults),result=>{return openBlock(),createElementBlock(`li`,{key:result.sessionId},[createTextVNode(toDisplayString(result.repository)+` · `,1),createBaseVNode(`code`,null,toDisplayString(result.saveCommit?.slice(0,12)),1),result.recorded===false?(openBlock(),createElementBlock(`span`,_hoisted_10$9,` — retry Save to record this confirmed commit.`)):result.reconciled===false?(openBlock(),createElementBlock(`span`,_hoisted_11$8,` — open its session to finish reconciliation.`)):createCommentVNode(``,true)])}),128))]),_cache[21]||(_cache[21]=createBaseVNode(`p`,{class:`mt-2 mb-0`},`Review these contributions in the receiving projects’ Incoming changes.`,-1))]),_:1})):createCommentVNode(``,true),createVNode(Vibe64TemporaryActionTerminal_default,{active:unref(saveWorkOperationActive)||unref(saveWorkSending),dismissed:unref(saveWorkActivityDismissed)||updateHandledInRepair.value,error:unref(saveWorkError),"error-title":`${unref(saveWorkActivityLabel)} needs attention`,height:`clamp(8rem, 22vh, 14rem)`,"operation-key":unref(saveWorkActivityKey),output:unref(saveWorkOutput),retryable:unref(saveWorkRetryable),stage:unref(saveWorkStage),starting:unref(saveWorkSending),status:unref(saveWorkStatus),subtitle:unref(saveWorkActivityIsUpdate)?`Replay current work on the latest saved version`:`Canonical project Save`,title:unref(saveWorkActivityLabel),onCopy:_cache[8]||(_cache[8]=$event=>copyActivityOutput(unref(saveWorkOutput))),onDismiss:unref(dismissSaveWorkActivity),onRetry:unref(retrySaveWork)},createSlots({_:2},[unref(saveWorkError)&&(unref(saveWorkCanResolveWithTemporaryAi)||saveWorkCanCreatePullRequest.value)?{name:`error-actions`,fn:withCtx(()=>[unref(updateConflictRecovery)?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,height:`48`,disabled:unref(updateWorkDisabled)||unref(sourceOperationsSuspended)||unref(temporaryAiWorkspace)?.updateRepairTask?.busy,onClick:unref(reviewResolvedUpdate)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true),unref(saveWorkCanResolveWithTemporaryAi)?(openBlock(),createBlock(Vibe64TemporaryAiFixAction_default,{key:1,disabled:unref(repositoryRecoverySending)||!unref(assistantFixAllowed),pending:unref(repositoryRecoverySending),title:unref(assistantFixAllowed)?`Open temporary AI to resolve this repository problem`:unref(assistantFixRestrictionMessage),onClick:unref(fixRepositoryActionError)},null,8,[`disabled`,`pending`,`title`,`onClick`])):createCommentVNode(``,true),saveWorkCanCreatePullRequest.value?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,height:`48`,disabled:unref(saveWorkDisabled)||unref(sourceOperationsSuspended),onClick:_cache[7]||(_cache[7]=$event=>createPullRequestOpen.value=true)},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(` Create draft PR `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),key:`0`}:void 0]),1032,[`active`,`dismissed`,`error`,`error-title`,`operation-key`,`output`,`retryable`,`stage`,`starting`,`status`,`subtitle`,`title`,`onDismiss`,`onRetry`]),createVNode(_sfc_main$43,{"project-slug":unref(projectSlug),"session-id":unref(sessionId),failure:unref(saveWorkFailure),disabled:unref(saveWorkSending)||unref(saveWorkOperationActive)||unref(sourceOperationsSuspended)||unref(agentActive),onReplaced:_cache[9]||(_cache[9]=$event=>{unref(props).refreshSessionData?.();unref(props).refreshSessionWork?.()})},null,8,[`project-slug`,`session-id`,`failure`,`disabled`]),createVNode(Vibe64TemporaryActionTerminal_default,{active:unref(workspaceSetupRunning)||unref(workspaceSetupRetrying),dismissed:unref(workspaceSetupDismissed),error:unref(workspaceSetupError),"error-title":`Workspace preparation needs attention`,height:`clamp(8rem, 22vh, 14rem)`,"operation-key":unref(workspaceSetupActivityKey),output:unref(workspaceSetupOutput),retryable:unref(workspaceSetupNeedsAttention)&&unref(workspaceSetupStatus)!==`required`&&!unref(workspaceSetupRetryDisabled)&&!resourceRetryBusy.value,stage:unref(workspaceSetupCurrentLabel),starting:unref(workspaceSetupRunning)||unref(workspaceSetupRetrying),status:unref(workspaceSetupStatus),subtitle:`Project dependency preparation`,title:unref(workspaceSetupTitle),onCopy:_cache[12]||(_cache[12]=$event=>copyActivityOutput(unref(workspaceSetupOutput))),onDismiss:unref(dismissWorkspaceSetupActivity),onRetry:unref(retryWorkspaceSetup)},createSlots({_:2},[unref(workspaceSetupNeedsAttention)?{name:`error-actions`,fn:withCtx(()=>[unref(resourceRecoveryControl)&&unref(props).session?.workspaceSetup?.resourceAdmissionId?(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${unref(props).session.workspaceSetup.resourceAdmissionId}`,"admission-id":unref(props).session.workspaceSetup.resourceAdmissionId,"session-id":unref(sessionId),disabled:unref(workspaceSetupRetryDisabled)&&!resourceRetryBusy.value,onBusy:_cache[10]||(_cache[10]=$event=>resourceRetryBusy.value=$event),onRetryResult:_cache[11]||(_cache[11]=$event=>unref(props).refreshSessionData?.()),onRecheck:unref(retryWorkspaceSetup)},null,40,[`admission-id`,`session-id`,`disabled`,`onRecheck`])):unref(workspaceSetupStatus)===`required`?(openBlock(),createBlock(VBtn,{key:1,disabled:unref(workspaceSetupRetryDisabled),loading:unref(workspaceSetupRetrying),size:`small`,title:`Run all declared workspace setup steps, including any database preparation`,variant:`tonal`,onClick:unref(retryWorkspaceSetup)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Prepare workspace `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):(openBlock(),createBlock(Vibe64TemporaryAiFixAction_default,{key:2,disabled:unref(workspaceSetupAskDisabled),pending:unref(workspaceSetupFixSending),title:unref(assistantFixAllowed)?`Open temporary AI to resolve workspace preparation`:unref(assistantFixRestrictionMessage),onClick:unref(fixWorkspaceSetupWithTemporaryAi)},null,8,[`disabled`,`pending`,`title`,`onClick`]))]),key:`0`}:void 0]),1032,[`active`,`dismissed`,`error`,`operation-key`,`output`,`retryable`,`stage`,`starting`,`status`,`title`,`onDismiss`,`onRetry`]),unref(workspaceSetupStatus)===`failed`&&!unref(workspaceSetupDismissed)?(openBlock(),createBlock(WorkspaceSetupToolRows_default,{key:6,active:unref(workspaceSetupStatus)===`failed`,runtimes:unref(props).session?.workspaceSetup?.runtimes||[],onMissing:_cache[13]||(_cache[13]=$event=>workspaceSetupToolsMissing.value=$event>0)},null,8,[`active`,`runtimes`])):createCommentVNode(``,true),unref(workspaceSetupStatus)===`failed`&&!unref(workspaceSetupDismissed)&&!workspaceSetupToolsMissing.value&&unref(sessionId)?(openBlock(),createBlock(unref(LocalDatabaseServer),{key:7,active:unref(workspaceSetupStatus)===`failed`,"session-id":unref(sessionId),onRetry:unref(retryWorkspaceSetup)},null,8,[`active`,`session-id`,`onRetry`])):createCommentVNode(``,true)])}}};var Vibe64AutopilotActivity_default=_plugin_vue_export_helper_default(_sfc_main$42,[[`__scopeId`,`data-v-715a7055`]]);var _hoisted_1$36={key:0,class:`text-body-small mt-2`};var _hoisted_2$30={class:`agent-plan-usage__details text-body-small`};var PLAN_USAGE_POLL_MS=6e4;var _sfc_main$41={__name:`Vibe64AgentPlanUsage`,props:{active:Boolean,session:{type:Object,default:null},conversationRuntime:{type:Object,default:null},sessionsApiPath:{type:[Function,Object,String],default:``}},setup(__props){const props=__props;const projectSlug=useVibe64ProjectSlug();const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const actorKey=computed(()=>unref(viewer)?.actorKey||``);const sessionId=computed(()=>props.session?.sessionId||``);const sessionsPath=computed(()=>String(readRefOrGetterValue(props.sessionsApiPath)||``).trim());const engineId=computed(()=>props.session?.assistantSelection?.engineId||``);const modelProviderId=computed(()=>props.session?.assistantSelection?.modelProviderId||``);const keyUsage=computed(()=>vibe64ProviderPresentation(props.session?.assistantSelection).keyUsage);const goalEnabled=computed(()=>props.active&&Boolean(sessionId.value&&sessionsPath.value&&actorKey.value));const enabled=computed(()=>goalEnabled.value&&(Boolean(findVibe64AgentProvider(engineId.value)?.planUsage)||keyUsage.value));const visible=ref(!globalThis.document?.hidden);const now=ref(Date.now());const tick=()=>{visible.value=!globalThis.document?.hidden;now.value=Date.now()};let clock=null;onMounted(()=>{clock=setInterval(tick,15e3);globalThis.document?.addEventListener(`visibilitychange`,tick)});onBeforeUnmount(()=>{clearInterval(clock);globalThis.document?.removeEventListener(`visibilitychange`,tick)});const scopeKey=computed(()=>JSON.stringify([projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value]));const connectionsRealtime={events:[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT],matches:()=>true};const path=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,`/agent-plan-usage`));const usage=useEndpointResource({enabled:computed(()=>enabled.value&&visible.value),path,queryKey:computed(()=>[`vibe64-agent-plan-usage`,engineId.value,modelProviderId.value,projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value]),realtime:connectionsRealtime,fallbackLoadError:`Plan allowance is unavailable.`,queryOptions:{meta:{jskit:{requestRecovery:false}},queryFn:({signal})=>getHttpWebClient().request(path.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(3e4)])}),retry:false,staleTime:()=>keyUsage.value?0:PLAN_USAGE_POLL_MS,refetchOnMount:true,refetchOnWindowFocus:true,refetchInterval:()=>keyUsage.value?false:PLAN_USAGE_POLL_MS,refetchIntervalInBackground:false}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&[`agent-plan-usage`,`${engineId.value}-plan-usage`].includes(payload.reason),onEvent:()=>{if(!globalThis.document?.hidden)usage.reload()}});const suppliedGoal=computed(()=>unref(props.conversationRuntime?.goalState));const goalView=computed(()=>unref(props.conversationRuntime?.goalView));const goalAvailable=computed(()=>goalEnabled.value&&!suppliedGoal.value?.loading&&suppliedGoal.value?.available!==false&&!unref(props.conversationRuntime?.goalLoadError)&&goalView.value?.status===`available`);const goal=computed(()=>goalAvailable.value?goalView.value?.goal||null:null);const goalEngineId=computed(()=>goalView.value?.routing?.selection?.engineId||engineId.value);const fullGoalOpen=ref(false);const goalPreview=computed(()=>{const objective=String(goal.value?.objective||``).trim();return objective.length>140?`${objective.slice(0,140).trimEnd()}…`:objective});watch([sessionId,()=>goal.value?.objective],()=>{fullGoalOpen.value=false});const goalExplicitMode=computed(()=>assistantRoutingFromMetadata(props.session?.metadata)?.mode!==`auto`);const changingGoal=computed(()=>suppliedGoal.value?.pending===true);const goalError=computed(()=>suppliedGoal.value?.error||``);async function changeGoal(action,input={}){if(([`pause`,`cancel`].includes(action)?suppliedGoal.value?.stopPending===true:changingGoal.value)||!goalAvailable.value)return false;if([`set`,`resume`].includes(action)&&!goalExplicitMode.value)return false;return props.conversationRuntime.changeGoal(action,input)}const currentUsage=computed(()=>{const value=usage.data.value;if(keyUsage.value&&(value?.engineId!==engineId.value||value?.modelProviderId!==modelProviderId.value))return null;return value});const weekly=computed(()=>currentUsage.value?.windows?.find(window=>window.windowDurationMins===10080&&(keyUsage.value||engineId.value!==`claude`||window.id===`seven_day`))||null);const allowance=computed(()=>weekly.value||(keyUsage.value?currentUsage.value?.windows?.[0]:null));const balance=computed(()=>currentUsage.value?.balances?.[0]||null);const readingCurrent=computed(()=>currentUsage.value?.status===`available`&&(!Number.isFinite(currentUsage.value.currentForMs)||now.value<usage.query.dataUpdatedAt.value+currentUsage.value.currentForMs));const available=computed(()=>{if(!enabled.value||usage.loadError.value||!readingCurrent.value)return false;return balance.value||allowance.value&&(!allowance.value.resetsAt||allowance.value.resetsAt*1e3>Date.now())});const cantCheck=computed(()=>enabled.value&&!keyUsage.value&&!available.value&&Boolean(usage.loadError.value||[`available`,`stale`,`unavailable`].includes(currentUsage.value?.status)));function formatBalance(value){return new Intl.NumberFormat(`en`,{style:`currency`,currency:value.currency,currencyDisplay:`narrowSymbol`,minimumFractionDigits:2,maximumFractionDigits:2}).format(Number(value.amount))}const summary=computed(()=>{if(cantCheck.value)return`?%`;if(!available.value)return``;if(balance.value)return formatBalance(balance.value);return`${Math.floor(allowance.value.remainingPercent)}%`});const planProvider=computed(()=>keyUsage.value?null:findVibe64AgentProvider(engineId.value)?.planUsage);const usageLabel=computed(()=>currentUsage.value?.providerLabel||planProvider.value?.label||``);const usageTitle=computed(()=>`${usageLabel.value} ${balance.value?`balance`:`plan allowance`}`);const summaryLabel=computed(()=>cantCheck.value?`Weekly ${usageLabel.value} allowance: can't check right now`:balance.value?`${usageLabel.value} balance remaining: ${summary.value}`:`${weekly.value?`Weekly `:``}${usageLabel.value} allowance remaining: ${summary.value}`);const managementUrl=computed(()=>currentUsage.value?.managementUrl||planProvider.value?.managementUrl||``);const details=computed(()=>{if(cantCheck.value){const lines=[`Can't check your ${usageLabel.value} allowance right now.`];if(weekly.value&&currentUsage.value?.checkedAt)lines.push(`Last checked ${new Date(currentUsage.value.checkedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}: ${Math.floor(weekly.value.remainingPercent)}% weekly remaining.`);return lines.join(`
4
4
  `)}if(!available.value)return``;const snapshot=currentUsage.value;if(balance.value)return[...snapshot.balances.map(value=>`${value.currency} balance remaining: ${formatBalance(value)}.`),`Checked ${new Date(snapshot.checkedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`,`Account balance associated with this key. Shared across sessions. Updates at the start and end of a turn.`].join(`
5
5
  `);const lines=[`${summaryLabel.value}.`];if(weekly.value?.resetsAt)lines.push(`Weekly resets ${new Date(weekly.value.resetsAt*1e3).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`);const shortTerm=snapshot.windows.find(window=>window.windowDurationMins===300);if(shortTerm){const expired=shortTerm.resetsAt&&shortTerm.resetsAt*1e3<=Date.now();lines.push(expired?`5h allowance: awaiting update.`:`5h allowance remaining: ${Math.floor(shortTerm.remainingPercent)}%.`);if(shortTerm.resetsAt)lines.push(`5h resets ${new Date(shortTerm.resetsAt*1e3).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`)}for(const window of snapshot.windows.filter(window=>window.id?.startsWith(`seven_day_`)&&(!window.resetsAt||window.resetsAt*1e3>Date.now())))lines.push(`${window.id.slice(10).replaceAll(`_`,` `)}: ${Math.floor(window.remainingPercent)}% weekly remaining.`);lines.push(`Shared across sessions.`);if(keyUsage.value)lines.push(`Checked ${new Date(snapshot.checkedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`,`Updates at the start and end of a turn.`);return lines.join(`
6
6
  `)});const goalState=computed(()=>({...suppliedGoal.value,enabled:goalEnabled.value&&Boolean(suppliedGoal.value?.loading||goalAvailable.value||goalError.value),goal:goalAvailable.value&&goal.value?{...goal.value,objective:goalPreview.value,elapsedSeconds:goal.value.timeUsedSeconds,sampledAt:Date.parse(goal.value.updatedAt)}:null,pending:changingGoal.value,error:goalError.value,set:goalExplicitMode.value?input=>changeGoal(`set`,input):null,pauseBlocked:goalEngineId.value===`claude`,pause:()=>changeGoal(`pause`),resume:goalExplicitMode.value?()=>changeGoal(`resume`):null,cancel:()=>changeGoal(`cancel`)}));return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[[`codex`,`claude`].includes(goalEngineId.value)?(openBlock(),createBlock(unref(AssistantGoalControl_default),{key:scopeKey.value,state:goalState.value},{default:withCtx(()=>[!goalExplicitMode.value?(openBlock(),createElementBlock(`p`,_hoisted_1$36,`Choose Senior or Junior before starting or resuming a goal.`)):createCommentVNode(``,true),goal.value?.objective&&goalPreview.value!==goal.value.objective?(openBlock(),createBlock(VBtn,{key:1,class:`mt-2`,size:`small`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>fullGoalOpen.value=true)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` View full goal `,-1)])]),_:1})):createCommentVNode(``,true)]),_:1},8,[`state`])):createCommentVNode(``,true),fullGoalOpen.value?(openBlock(),createBlock(VDialog,{key:1,modelValue:fullGoalOpen.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>fullGoalOpen.value=$event),"max-width":`640`,scrollable:``,"aria-label":`Full goal`},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Full goal`,-1)])]),_:1}),createVNode(VCardText,{class:`agent-plan-usage__goal-text`},{default:withCtx(()=>[createTextVNode(toDisplayString(goal.value?.objective),1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{onClick:_cache[1]||(_cache[1]=$event=>fullGoalOpen.value=false)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true),enabled.value&&(available.value||cantCheck.value)?(openBlock(),createBlock(VMenu,{key:2,location:`top`,"close-on-content-click":false},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{class:`agent-plan-usage`,size:`small`,variant:`text`,title:details.value,"aria-label":summaryLabel.value}),{default:withCtx(()=>[createTextVNode(toDisplayString(summary.value),1)]),_:1},16,[`title`,`aria-label`])]),default:withCtx(()=>[createVNode(VCard,{"max-width":`340`,class:`pa-3`},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(usageTitle.value),1),createBaseVNode(`p`,_hoisted_2$30,toDisplayString(details.value),1),createVNode(VBtn,{href:managementUrl.value,target:`_blank`,rel:`noopener noreferrer`,size:`small`,variant:`text`},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Usage details`,-1)])]),_:1},8,[`href`]),!keyUsage.value?(openBlock(),createBlock(VBtn,{key:0,size:`small`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>unref(usage).reload())},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Refresh`,-1)])]),_:1})):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true)],64)}}};var Vibe64AgentPlanUsage_default=_plugin_vue_export_helper_default(_sfc_main$41,[[`__scopeId`,`data-v-002dd68f`]]);var _hoisted_1$35={class:`text-body-small`};var _hoisted_2$29={key:0,class:`text-body-small mb-2`};var _hoisted_3$25={key:1,class:`text-body-small mb-2`};var _hoisted_4$20={key:1,class:`text-body-small`};var _hoisted_5$18={key:2,class:`text-body-small mb-1`,role:`alert`};var _hoisted_6$15={key:3,class:`vibe64-routing-notice__actions d-flex flex-wrap ga-1`};var _hoisted_7$13={key:0,class:`position-absolute`};var _hoisted_8$13={key:0,class:`position-absolute`};var _sfc_main$40={__name:`Vibe64RoutingNotice`,props:{request:{type:Object,default:null},selection:{type:Object,default:null},mode:{type:String,default:``},active:Boolean,pendingAction:{type:String,default:``},actionError:{type:String,default:``},busy:Boolean},emits:[`retry`,`skip`,`implement`,`view-plan`],setup(__props){const props=__props;const feedback=useShellWebErrorRuntime();const previousAttempt=computed(()=>props.request?.stopped&&props.request?.delivery===`uncertain`&&assistantRoutingRequestCanBeReplaced(props.request,props.selection));const label=computed(()=>previousAttempt.value?`Previous assistant delivery unconfirmed`:assistantRoutingStatusLabel(props.request));const followupNeedsAction=computed(()=>{const request=props.request;if(request?.awaitingAnswer)return canImplement.value;const resumable=request?.followup||request?.delivery===`accepted`&&(request?.workflow||request?.stage===`planning`);return Boolean(request?.status===`waiting`&&resumable||request?.delivery===`uncertain`&&(request?.followup||previousAttempt.value))});const canImplement=computed(()=>props.mode===`auto`&&props.request?.stage===`planning`&&props.request.status===`waiting`&&[`pending`,`accepted`].includes(props.request.delivery)&&!props.request.helper&&props.request.workPlan?.status===`active`&&Boolean(props.request.workPlan.revision));const retryLabel=computed(()=>props.request?.delivery===`uncertain`?`Check delivery`:{planning:`Continue planning`,implementation:`Continue implementation`,review:`Continue review`}[props.request?.stage]||`Continue request`);const actionable=computed(()=>{const request=props.request;if(!request||request.stopped&&!request.followup&&!request.attemptedMessageId&&!request.helper&&!followupNeedsAction.value)return false;if(!request.followup&&!request.helper&&!previousAttempt.value&&[`failed`,`uncertain`].includes(request.delivery))return false;return Boolean(label.value&&(request.error||followupNeedsAction.value))});watch(()=>[props.request?.messageId,props.request?.status],([id,status],[previousId,previousStatus])=>{if(!props.active||!id||id!==previousId||status!==`waiting`||previousStatus===`waiting`||!props.request.stopped)return;feedback.report({source:`vibe64.chat.review`,message:label.value,intent:`action-feedback`,severity:`info`,channel:`snackbar`,dedupeKey:`vibe64.chat.review:${id}`})});return(_ctx,_cache)=>{return actionable.value?(openBlock(),createBlock(VAlert,{key:0,variant:`tonal`,density:`compact`,icon:false,type:__props.request.error||__props.actionError?`warning`:`info`,class:`vibe64-routing-notice mb-2 px-2 py-1`,role:`status`},{default:withCtx(()=>[previousAttempt.value||__props.request.error&&__props.request.error!==__props.request.outcome?.explanation?(openBlock(),createElementBlock(`details`,{key:__props.request.messageId},[createBaseVNode(`summary`,_hoisted_1$35,[createTextVNode(toDisplayString(label.value)+` · `,1),_cache[4]||(_cache[4]=createBaseVNode(`span`,{class:`text-decoration-underline`},`Details`,-1))]),previousAttempt.value?(openBlock(),createElementBlock(`p`,_hoisted_2$29,`Send a new message to continue with your selected assistant. Check delivery only checks the previous attempt.`)):createCommentVNode(``,true),__props.request.error?(openBlock(),createElementBlock(`p`,_hoisted_3$25,toDisplayString(__props.request.error),1)):createCommentVNode(``,true)])):!followupNeedsAction.value?(openBlock(),createElementBlock(`div`,_hoisted_4$20,toDisplayString(label.value),1)):createCommentVNode(``,true),__props.actionError?(openBlock(),createElementBlock(`p`,_hoisted_5$18,toDisplayString(__props.actionError),1)):createCommentVNode(``,true),followupNeedsAction.value?(openBlock(),createElementBlock(`div`,_hoisted_6$15,[canImplement.value?(openBlock(),createBlock(VBtn,{key:0,variant:__props.pendingAction===`implement`?`text`:`flat`,color:`primary`,size:`small`,density:`compact`,disabled:Boolean(__props.pendingAction)||__props.busy,"aria-busy":__props.pendingAction===`implement`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`implement`))},{default:withCtx(()=>[createBaseVNode(`span`,{class:normalizeClass({"action-label-pending":__props.pendingAction===`implement`})},`Implement plan`,2),__props.pendingAction===`implement`?(openBlock(),createElementBlock(`span`,_hoisted_7$13,`Starting…`)):createCommentVNode(``,true)]),_:1},8,[`variant`,`disabled`,`aria-busy`])):createCommentVNode(``,true),canImplement.value&&!__props.pendingAction?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,size:`small`,density:`compact`,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`view-plan`))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`View plan`,-1)])]),_:1})):createCommentVNode(``,true),!canImplement.value?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,size:`small`,density:`compact`,disabled:Boolean(__props.pendingAction)||__props.busy&&__props.request.delivery!==`uncertain`,"aria-busy":__props.pendingAction===`continue`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`retry`))},{default:withCtx(()=>[createBaseVNode(`span`,{class:normalizeClass({"action-label-pending":__props.pendingAction===`continue`})},toDisplayString(retryLabel.value),3),__props.pendingAction===`continue`?(openBlock(),createElementBlock(`span`,_hoisted_8$13,toDisplayString(__props.request.delivery===`uncertain`?`Checking…`:`Continuing…`),1)):createCommentVNode(``,true)]),_:1},8,[`disabled`,`aria-busy`])):createCommentVNode(``,true),__props.request.delivery===`pending`&&!__props.pendingAction?(openBlock(),createBlock(VBtn,{key:3,variant:`text`,size:`small`,density:`compact`,onClick:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`skip`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Stop `,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true)]),_:1},8,[`type`])):createCommentVNode(``,true)}}};var Vibe64RoutingNotice_default=_plugin_vue_export_helper_default(_sfc_main$40,[[`__scopeId`,`data-v-341758b6`]]);function parseWorkPlanLines(text,options={}){const{markTechnicalDetails=false}=options;let fence=``;return text.split(`
7
- `).map(line=>{const marker=/^\s*(`{3,}|~{3,})/u.exec(line)?.[1];if(marker){if(!fence)fence=marker;else if(marker[0]===fence[0]&&marker.length>=fence.length)fence=``;return{text:line}}const item=!fence&&/^\s*(?:[-*+]|\d+[.)]) \[([ xX])\] (.+)$/u.exec(line);return item?{text:item[2],checked:item[1]!==` `}:{text:line,...markTechnicalDetails&&!fence&&/^## Technical details\s*$/iu.test(line)?{technicalDetails:true}:{}}})}var _hoisted_1$34={key:0,class:`work-plan-control`};var _hoisted_2$28={key:0,class:`d-sr-only`,role:`status`};var _hoisted_3$24={class:`work-plan-archive-copy`};var _hoisted_4$19={class:`text-body-small text-medium-emphasis`};var _hoisted_5$17={class:`d-flex align-start ga-2`};var _hoisted_6$14={class:`text-body-small text-medium-emphasis mt-1`};var _hoisted_7$12={class:`d-flex align-center flex-wrap ga-2 mt-2`};var _hoisted_8$12={class:`text-high-emphasis`};var _hoisted_9$9={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_10$8={key:1,class:`work-plan-empty text-center pa-4`};var _hoisted_11$7={class:`d-flex align-center flex-wrap ga-3 mb-5`,role:`status`};var _hoisted_12$7={class:`text-high-emphasis`};var _hoisted_13$6={class:`text-body-small text-medium-emphasis`};var _hoisted_14$4={key:0,class:`text-body-medium mb-4`};var _hoisted_15$4=[`checked`];var _hoisted_16$3=[`checked`];var _hoisted_17$3={key:4,class:`work-plan-empty text-center pa-4`};var _sfc_main$39={__name:`Vibe64WorkPlan`,props:{active:Boolean,busy:Boolean,session:{type:Object,default:null},sessionsApiPath:{type:[Function,Object,String],default:``}},setup(__props,{expose:__expose}){const props=__props;const projectSlug=useVibe64ProjectSlug();const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const actorKey=computed(()=>unref(viewer)?.actorKey||``);const sessionId=computed(()=>props.session?.sessionId||``);const sessionsPath=computed(()=>String(readRefOrGetterValue(props.sessionsApiPath)||``));const enabled=computed(()=>props.active&&Boolean(sessionId.value&&sessionsPath.value&&actorKey.value));const endpoint=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,`/work-plan`));const open=ref(false);const archiveId=ref(``);const notice=ref(``);const view=ref(`current`);const planDocument=ref(`plan`);const showHistory=computed(()=>view.value===`history`&&!archiveId.value);const pendingOperation=ref(``);const feedback=useShellWebErrorRuntime();const resource=useEndpointResource({enabled,path:endpoint,queryKey:computed(()=>[`vibe64-work-plan`,projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value,archiveId.value]),fallbackLoadError:`The plan could not be loaded.`,queryOptions:{meta:{jskit:{requestRecovery:false}},retry:false,refetchOnMount:`always`,refetchOnWindowFocus:true,queryFn:async({signal})=>{const selectedArchive=archiveId.value;const path=endpoint.value;const read=query=>getHttpWebClient().request(path+`?`+new URLSearchParams(query),{signal});const first=await read({limit:`16000`,...selectedArchive?{archiveId:selectedArchive}:{}});let page=first;let text=first.text||``;let progressText=first.progressText||``;while(page.hasMore){page=await read({limit:`16000`,offset:String(page.nextOffset),expectedRevision:first.revision,expectedProgressRevision:first.progressRevision||``,...selectedArchive?{archiveId:selectedArchive}:{}});text+=page.text;progressText+=page.progressText||``}return{...first,text,progressText}}}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&[`work-plan-changed`,`assistant-routing-changed`].includes(payload.reason),onEvent:({payload={}}={})=>{if(payload.planNotice)notice.value=payload.planNotice;resource.reload()}});const plan=computed(()=>resource.data.value||null);const visible=computed(()=>Boolean(plan.value?.available||plan.value?.history?.length||resource.loadError.value));const history=computed(()=>(plan.value?.history||[]).map(item=>({...item,archivedDate:new Date(item.archivedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})})));const selectedArchive=computed(()=>history.value.find(item=>item.id===archiveId.value));const selectedPlanReady=computed(()=>Boolean(plan.value)&&(plan.value.archiveId||``)===archiveId.value);const canChangePlan=computed(()=>!props.busy&&!pendingOperation.value&&selectedPlanReady.value);const currentActive=computed(()=>plan.value?.current?.status===`active`);const label=computed(()=>currentActive.value?`View active plan`:`View plan and history`);function showPlan(requestedView=`default`){archiveId.value=``;view.value=requestedView==="default"?plan.value?.current?`current`:`history`:requestedView;open.value=true}__expose({showPlan});const colleaguePlan=inject(VIBE64_COLLEAGUE_PLAN_KEY,null);const planViewer={get projectSlug(){return projectSlug.value},get sessionId(){return sessionId.value},get ready(){return enabled.value&&Boolean(plan.value)&&!resource.isFetching.value},get error(){return resource.loadError.value},get open(){return enabled.value&&open.value},get view(){return view.value},async openPlan(requestedView=`default`,isCurrent=()=>true){const target=endpoint.value;const actor=actorKey.value;if(!enabled.value||!isCurrent())throw new Error(`This session's plan viewer is no longer available.`);archiveId.value=``;await resource.reload();if(!enabled.value||!isCurrent()||target!==endpoint.value||actor!==actorKey.value)throw new Error(`The selected session changed before its plan opened.`);if(resource.loadError.value)throw new Error(resource.loadError.value);if(!plan.value?.current&&!plan.value?.history?.length)throw new Error(`This session has no current plan or plan history.`);showPlan(requestedView);await nextTick();if(!planViewer.open||!isCurrent()||target!==endpoint.value||actor!==actorKey.value)throw new Error(`The plan viewer closed or its session changed before it opened.`)}};watchEffect(()=>{if(!colleaguePlan)return;if(enabled.value)colleaguePlan.value=planViewer;else if(colleaguePlan.value===planViewer)colleaguePlan.value=null});onBeforeUnmount(()=>{if(colleaguePlan?.value===planViewer)colleaguePlan.value=null});async function changePlan(operation){if(!canChangePlan.value)return;const restoring=operation===`restore`;if(restoring){if(!archiveId.value||plan.value?.current)return}else if(!plan.value?.current||archiveId.value)return;const target=endpoint.value;const actor=actorKey.value;pendingOperation.value=operation;try{const result=await getHttpWebClient().request(target+`/`+operation,{method:`POST`,body:restoring?{archiveId:archiveId.value}:{expectedRevision:plan.value.current.revision,expectedProgressRevision:plan.value.current.progressRevision||``}});if(result?.ok===false)throw new Error(result.error||`The plan could not be updated.`);if(target!==endpoint.value||actor!==actorKey.value)return;notice.value=result.notice||(restoring?`The plan is now current and active.`:`The plan is archived and remains available in History.`);if(restoring)archiveId.value=``;await resource.reload();if(target===endpoint.value&&actor===actorKey.value)view.value=restoring?`current`:`history`}catch(error){if(target===endpoint.value&&actor===actorKey.value)feedback.report({source:`vibe64.work-plan.`+operation,intent:`action-feedback`,severity:`error`,message:error.message})}finally{if(target===endpoint.value&&actor===actorKey.value)pendingOperation.value=``}}const technicalPanel=ref(null);const sections=computed(()=>{const result=[];let prose=[];let technical=false;const flush=()=>{if(prose.length){result.push({technical,blocks:parseLongTextReviewBlocks(prose.join(`
8
- `))});prose=[]}};for(const line of parseWorkPlanLines((planDocument.value===`progress`?plan.value?.progressText:plan.value?.text)||``,{markTechnicalDetails:planDocument.value===`plan`})){if(line.technicalDetails){flush();technical=true;continue}if(line.checked!==void 0){flush();result.push({technical,checked:line.checked,blocks:parseLongTextReviewBlocks(line.text)})}else if(!/^Status: (active|completed)\s*$/u.test(line.text))prose.push(line.text)}flush();return result});const overviewSections=computed(()=>sections.value.filter(section=>!section.technical));const technicalSections=computed(()=>sections.value.filter(section=>section.technical));watch([planDocument,archiveId,()=>plan.value?.revision],()=>{technicalPanel.value=null});watch([sessionId,sessionsPath,actorKey],()=>{open.value=false;technicalPanel.value=null;archiveId.value=``;notice.value=``;view.value=`current`;planDocument.value=`plan`;pendingOperation.value=``});watch(()=>props.active,active=>{if(!active)open.value=false});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[visible.value?(openBlock(),createElementBlock(`div`,_hoisted_1$34,[createVNode(VBtn,{icon:unref(mdiFileDocumentOutline),variant:currentActive.value?`tonal`:`text`,color:currentActive.value?`warning`:void 0,"aria-label":label.value,title:label.value,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>showPlan())},null,8,[`icon`,`variant`,`color`,`aria-label`,`title`]),notice.value?(openBlock(),createElementBlock(`span`,_hoisted_2$28,toDisplayString(notice.value),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createVNode(VDialog,{modelValue:open.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>open.value=$event),"max-width":`880`,height:`min(760px, calc(100dvh - 48px))`,scrollable:``,"aria-label":`Plan and history`},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`,height:`100%`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center ga-2 px-4 py-2 flex-shrink-0`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`span`,{class:`text-title-large`},`Plan`,-1)),createVNode(VSpacer),view.value===`current`&&plan.value?.current?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiArchiveArrowDownOutline),disabled:!canChangePlan.value,"aria-busy":pendingOperation.value===`archive`,variant:`text`,size:`small`,width:`120`,"min-height":`48`,"aria-label":`Archive plan`,title:`Move this plan to History without marking it completed`,onClick:_cache[1]||(_cache[1]=$event=>changePlan(`archive`))},{default:withCtx(()=>[createTextVNode(toDisplayString(pendingOperation.value===`archive`?`Archiving…`:`Archive`),1)]),_:1},8,[`prepend-icon`,`disabled`,`aria-busy`])):createCommentVNode(``,true),archiveId.value&&!plan.value?.current?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiRestore),disabled:!canChangePlan.value,"aria-busy":pendingOperation.value===`restore`,variant:`text`,color:`primary`,size:`small`,width:`128`,"min-height":`48`,"aria-label":`Make current`,title:`Move this archived plan back to Current plan and reopen it as Active`,onClick:_cache[2]||(_cache[2]=$event=>changePlan(`restore`))},{default:withCtx(()=>[createTextVNode(toDisplayString(pendingOperation.value===`restore`?`Restoring…`:`Make current`),1)]),_:1},8,[`prepend-icon`,`disabled`,`aria-busy`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close plan`,title:`Close plan`,onClick:_cache[3]||(_cache[3]=$event=>open.value=false)},null,8,[`icon`])]),_:1}),createVNode(VTabs,{"model-value":view.value,color:`primary`,grow:``,height:`48`,class:`flex-grow-0 flex-shrink-0`,"aria-label":`Plan views`,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>{view.value=$event;archiveId.value=``})},{default:withCtx(()=>[createVNode(VTab,{value:`current`,"prepend-icon":unref(mdiFileDocumentOutline)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Current plan`,-1)])]),_:1},8,[`prepend-icon`]),createVNode(VTab,{value:`history`,"prepend-icon":unref(mdiHistory)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`History`,-1)])]),_:1},8,[`prepend-icon`])]),_:1},8,[`model-value`]),createVNode(VDivider),archiveId.value?(openBlock(),createBlock(VSheet,{key:0,color:`surface`,border:`b`,class:`work-plan-archive-context px-4 py-3`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowLeft),variant:`text`,"aria-label":`Back to plan history`,title:`Back to plan history`,onClick:_cache[5]||(_cache[5]=$event=>archiveId.value=``)},null,8,[`icon`]),createBaseVNode(`div`,_hoisted_3$24,[createVNode(VChip,{color:`primary`,variant:`tonal`,size:`small`,class:`mb-1`},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Archived · read-only`,-1)])]),_:1}),createBaseVNode(`p`,_hoisted_4$19,toDisplayString(selectedArchive.value?`Archived ${selectedArchive.value.archivedDate}`:`Saved snapshot`),1)])]),_:1})):createCommentVNode(``,true),createVNode(VCardText,{class:normalizeClass([`work-plan-content pa-4 pa-sm-6`,{"d-flex flex-column":showHistory.value&&!history.value.length}])},{default:withCtx(()=>[unref(resource).loadError.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>unref(resource).reload())},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),showHistory.value?(openBlock(),createElementBlock(Fragment,{key:1},[history.value.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Archived plans`,class:`pa-0 bg-transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(history.value,item=>{return openBlock(),createBlock(VListItem,{key:item.id,"aria-label":`Open archived plan: ${item.title}`,role:`button`,rounded:`lg`,border:``,class:`mb-2 pa-4`,onClick:$event=>archiveId.value=item.id},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$17,[createVNode(VListItemTitle,{class:`work-plan-history-title text-title-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1024),createVNode(VIcon,{icon:unref(mdiChevronRight),class:`flex-shrink-0`},null,8,[`icon`])]),createBaseVNode(`p`,_hoisted_6$14,`Archived `+toDisplayString(item.archivedDate),1),createBaseVNode(`div`,_hoisted_7$12,[createVNode(VChip,{color:item.status===`completed`?`success`:void 0,size:`small`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$12,toDisplayString(item.status===`completed`?`Completed`:`Unfinished`),1)]),_:2},1032,[`color`]),typeof item.total===`number`?(openBlock(),createElementBlock(`span`,_hoisted_9$9,toDisplayString(item.total)+` requirements`,1)):createCommentVNode(``,true)])]),_:2},1032,[`aria-label`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`div`,_hoisted_10$8,[createVNode(VIcon,{icon:unref(mdiHistory),size:`48`,class:`text-medium-emphasis mb-4`},null,8,[`icon`]),_cache[15]||(_cache[15]=createBaseVNode(`p`,{class:`text-title-medium mb-2`},`No archived plans`,-1)),_cache[16]||(_cache[16]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Archive a plan to keep it here.`,-1))]))],64)):!selectedPlanReady.value&&!unref(resource).loadError.value?(openBlock(),createBlock(VSkeletonLoader,{key:2,type:`heading, paragraph, paragraph, paragraph`,"aria-label":`Loading plan`,"aria-busy":`true`})):plan.value?.available&&selectedPlanReady.value?(openBlock(),createElementBlock(Fragment,{key:3},[createBaseVNode(`div`,_hoisted_11$7,[createVNode(VChip,{color:plan.value.status===`completed`?`success`:`warning`,variant:`tonal`,size:`small`,"prepend-icon":plan.value.status===`completed`?unref(mdiCheckCircleOutline):void 0},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_12$7,toDisplayString(plan.value.status===`completed`?`Completed`:archiveId.value?`Unfinished`:`Active`),1)]),_:1},8,[`color`,`prepend-icon`]),createBaseVNode(`span`,_hoisted_13$6,toDisplayString(plan.value.total)+` requirements`,1)]),createVNode(VTabs,{modelValue:planDocument.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>planDocument.value=$event),grow:``,height:`48`,"aria-label":`Plan documents`,class:`mb-4`},{default:withCtx(()=>[createVNode(VTab,{value:`plan`},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Plan`,-1)])]),_:1}),createVNode(VTab,{value:`progress`},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Progress`,-1)])]),_:1})]),_:1},8,[`modelValue`]),planDocument.value===`progress`&&!plan.value.progressAvailable?(openBlock(),createElementBlock(`p`,_hoisted_14$4,`This historical plan has no separate Progress document. Its original evidence remains in Plan.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(overviewSections.value,(section,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:normalizeClass({"work-plan-item":section.checked!==void 0})},[section.checked!==void 0?(openBlock(),createElementBlock(`input`,{key:0,type:`checkbox`,checked:section.checked,disabled:``,"aria-label":`Recorded checklist mark`},null,8,_hoisted_15$4)):createCommentVNode(``,true),createVNode(unref(LongTextPreviewBlocks_default),{blocks:section.blocks},null,8,[`blocks`])],2)}),128)),technicalSections.value.length?(openBlock(),createBlock(VExpansionPanels,{key:1,modelValue:technicalPanel.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>technicalPanel.value=$event),class:`mt-4`,variant:`accordion`},{default:withCtx(()=>[createVNode(VExpansionPanel,{value:`technical`,title:`Technical details`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(technicalSections.value,(section,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:normalizeClass({"work-plan-item":section.checked!==void 0})},[section.checked!==void 0?(openBlock(),createElementBlock(`input`,{key:0,type:`checkbox`,checked:section.checked,disabled:``,"aria-label":`Recorded checklist mark`},null,8,_hoisted_16$3)):createCommentVNode(``,true),createVNode(unref(LongTextPreviewBlocks_default),{blocks:section.blocks},null,8,[`blocks`])],2)}),128))]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true)],64)):!unref(resource).loadError.value?(openBlock(),createElementBlock(`div`,_hoisted_17$3,[createVNode(VIcon,{icon:unref(mdiArchiveOutline),size:`48`,class:`text-medium-emphasis mb-4`},null,8,[`icon`]),_cache[19]||(_cache[19]=createBaseVNode(`p`,{class:`text-title-medium mb-2`},`No current plan`,-1)),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Ask Senior in chat to create a plan or reopen one from History.`,-1))])):createCommentVNode(``,true)]),_:1},8,[`class`])]),_:1})]),_:1},8,[`modelValue`])],64)}}};var Vibe64WorkPlan_default=_plugin_vue_export_helper_default(_sfc_main$39,[[`__scopeId`,`data-v-e0f4c1f1`]]);var _hoisted_1$33={class:`starred-files-menu__header`};var _hoisted_2$27={class:`starred-files-menu__list`};var _sfc_main$38={__name:`Vibe64StarredFilesMenu`,props:{bookmarks:{type:Object,required:true}},emits:[`open-file`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{xs:mobile}=useDisplay();const opened=ref(false);const query=ref(``);const menu=ref(null);const panel=ref(null);const searchField=ref(null);const matchingFiles=computed(()=>{const search=(query.value||``).trim().toLocaleLowerCase();return props.bookmarks.files.value.filter(file=>file.path.toLocaleLowerCase().includes(search))});let returnFocus=false;function focusSearch(){if(opened.value)searchField.value?.focus()}function dismiss(){returnFocus=true;opened.value=false}function restoreTriggerFocus(){if(returnFocus)menu.value?.activatorEl?.focus();returnFocus=false}function onOpenChange(value){if(value){query.value=``;props.bookmarks.refresh()}else if(document.activeElement===menu.value?.activatorEl||panel.value?.$el?.contains(document.activeElement))returnFocus=true}function openFile(filePath){returnFocus=false;opened.value=false;emit(`open-file`,{path:filePath})}function openFirstMatch(){const file=matchingFiles.value.find(entry=>entry.available);if(file)openFile(file.path)}return(_ctx,_cache)=>{return openBlock(),createBlock(resolveDynamicComponent(unref(mobile)?unref(VBottomSheet):unref(VMenu)),{ref_key:`menu`,ref:menu,modelValue:opened.value,"onUpdate:modelValue":[_cache[1]||(_cache[1]=$event=>opened.value=$event),onOpenChange],"close-on-content-click":false,"content-props":{role:`dialog`,"aria-label":`Starred files`},location:`top start`,"max-width":`400`,onAfterEnter:focusSearch,onAfterLeave:restoreTriggerFocus},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{"aria-haspopup":`dialog`,"aria-label":`Starred files (${__props.bookmarks.files.value.length})`,class:`starred-files-menu__trigger`,icon:unref(mdiStarOutline),size:`small`,title:`Your starred files`,variant:`text`}),null,16,[`aria-label`,`icon`])]),default:withCtx(()=>[createVNode(VCard,{ref_key:`panel`,ref:panel,class:`starred-files-menu`,rounded:`lg`,onKeydown:withKeys(withModifiers(dismiss,[`stop`,`prevent`]),[`esc`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$33,[createVNode(VTextField,{ref_key:`searchField`,ref:searchField,modelValue:query.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>query.value=$event),"aria-label":`Find a starred file`,autofocus:``,clearable:``,density:`compact`,"hide-details":``,placeholder:`Search`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,onKeydown:withKeys(withModifiers(openFirstMatch,[`prevent`]),[`enter`])},null,8,[`modelValue`,`prepend-inner-icon`,`onKeydown`]),createVNode(VBtn,{"aria-label":`Close starred files`,icon:unref(mdiClose),size:`small`,variant:`text`,onClick:dismiss},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_2$27,[createVNode(Vibe64StarredFilesList_default,{bookmarks:__props.bookmarks,files:matchingFiles.value,onOpenFile:openFile},null,8,[`bookmarks`,`files`])])]),_:1},8,[`onKeydown`])]),_:1},40,[`modelValue`])}}};var Vibe64StarredFilesMenu_default=_plugin_vue_export_helper_default(_sfc_main$38,[[`__scopeId`,`data-v-b86a8fd5`]]);var _hoisted_1$32=[`aria-label`];var _hoisted_2$26={class:`vibe64-approvals__bar-label`};var _hoisted_3$23={key:0,class:`vibe64-approvals__sheet-header`};var _hoisted_4$18={class:`vibe64-approvals__list`};var _hoisted_5$16={class:`vibe64-approvals__head`};var _hoisted_6$13={class:`vibe64-approvals__who`};var _hoisted_7$11={class:`text-body-medium font-weight-medium text-truncate`};var _hoisted_8$11={class:`text-medium-emphasis font-weight-regular`};var _hoisted_9$8={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_10$7={key:0,class:`vibe64-approvals__draft`};var _hoisted_11$6={class:`vibe64-approvals__actions`};var _hoisted_12$6={key:1,class:`vibe64-approvals__text`};var _hoisted_13$5={key:2,class:`vibe64-approvals__note text-body-small text-medium-emphasis`};var _hoisted_14$3={key:4,class:`vibe64-approvals__draft`};var _hoisted_15$3={class:`vibe64-approvals__actions`};var _hoisted_16$2={key:5,class:`vibe64-approvals__actions vibe64-approvals__actions--owner`};var _hoisted_17$2={key:6,class:`vibe64-approvals__actions`};var _hoisted_18$1={key:0,class:`vibe64-approvals__decided`,"aria-label":`Decided messages`};var _hoisted_19$1=[`data-approval-id`];var _hoisted_20$1={class:`vibe64-approvals__row-line`};var _hoisted_21$1={class:`text-body-small vibe64-approvals__row-text`};var _hoisted_22$1={key:0,class:`vibe64-approvals__excerpt text-body-small`};var _hoisted_23$1={key:1,class:`vibe64-approvals__excerpt text-body-small`};var _hoisted_24$1=[`aria-label`];var _hoisted_25={key:2,class:`vibe64-approvals__quote text-body-small`};var RECENT_ROWS=3;var _sfc_main$37={__name:`Vibe64MainChatApprovals`,props:{approvals:{type:Object,required:true},phone:{type:Boolean,default:false}},emits:[`show-in-chat`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const sheetOpen=ref(false);const showEarlier=ref(false);const draft=reactive({id:``,mode:``,text:``});const shownDecided=computed(()=>showEarlier.value?[...props.approvals.recentDecided,...props.approvals.earlierDecided]:props.approvals.recentDecided.slice(0,RECENT_ROWS));const hiddenDecidedCount=computed(()=>showEarlier.value?0:props.approvals.recentDecided.length+props.approvals.earlierDecided.length-shownDecided.value.length);const visible=computed(()=>props.approvals.open.length>0||props.approvals.recentDecided.length>0);const barLabel=computed(()=>{const count=props.approvals.open.length;if(!count)return`Messages for approval`;return`${count} ${count===1?`message`:`messages`} waiting for approval`});function initial(person={}){return String(person.displayName||person.id||`?`).trim().charAt(0).toUpperCase()}function time(value){const date=new Date(value);return Number.isNaN(date.getTime())?``:date.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function heading(entry){if(props.approvals.own(entry))return`You`;return props.approvals.isOwner?`${entry.sender.displayName} wants to send`:entry.sender.displayName}function sending(entry){return props.approvals.pending[entry.id]===`approve`||entry.status===`sending`}function busy(entry){return Boolean(props.approvals.pending[entry.id])}function decision(entry){const by=entry.decidedBy?.id&&entry.decidedBy.id===props.approvals.viewerId?`you`:entry.decidedBy?.displayName||`the owner`;const subject=props.approvals.own(entry)?``:`${entry.sender.displayName} · `;const at=time(entry.decidedAt||entry.updatedAt);if(entry.status===`sent`)return{icon:mdiCheck,color:`success`,text:`${subject}Sent by ${by} · ${at}${entry.originalText?` · Edited by ${by}`:``}`};if(entry.status===`declined`)return{icon:mdiClose,color:`error`,text:`${subject}Declined by ${by} · ${at}`};return{icon:mdiUndoVariant,color:void 0,text:`${subject}Withdrawn by ${by} · ${at}`}}function openDraft(entry,mode){Object.assign(draft,{id:entry.id,mode,text:mode===`decline`?``:entry.text})}function closeDraft(){Object.assign(draft,{id:``,mode:``,text:``})}async function saveDraft(entry){const operation={edit:props.approvals.edit,approve:props.approvals.approve,decline:props.approvals.decline}[draft.mode];if(await operation(entry,draft.text))closeDraft()}__expose({open:()=>{sheetOpen.value=true}});return(_ctx,_cache)=>{return visible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`vibe64-approvals`,{"vibe64-approvals--phone":__props.phone}])},[__props.phone?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`vibe64-approvals__bar`,"aria-label":`${barLabel.value}. Open messages for approval`,onClick:_cache[0]||(_cache[0]=$event=>sheetOpen.value=true)},[createVNode(VIcon,{icon:unref(mdiClockOutline),size:`20`,color:`secondary`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_2$26,toDisplayString(barLabel.value),1),createVNode(VIcon,{icon:unref(mdiChevronUp),size:`20`},null,8,[`icon`])],8,_hoisted_1$32)):createCommentVNode(``,true),(openBlock(),createBlock(resolveDynamicComponent(__props.phone?unref(VBottomSheet):`section`),mergeProps(__props.phone?{modelValue:sheetOpen.value,"onUpdate:modelValue":value=>{sheetOpen.value=value}}:{},{class:`vibe64-approvals__stack`,"aria-label":`Messages for approval`}),{default:withCtx(()=>[createVNode(VCard,{variant:__props.phone?`elevated`:`flat`,class:normalizeClass([`vibe64-approvals__panel`,{"vibe64-approvals__panel--sheet":__props.phone}])},{default:withCtx(()=>[__props.phone?(openBlock(),createElementBlock(`div`,_hoisted_3$23,[_cache[5]||(_cache[5]=createBaseVNode(`h2`,{class:`text-title-medium`},`Messages for approval`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close messages for approval`,onClick:_cache[1]||(_cache[1]=$event=>sheetOpen.value=false)},null,8,[`icon`])])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$18,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.approvals.open,entry=>{return openBlock(),createBlock(VCard,{key:entry.id,variant:`outlined`,class:`vibe64-approvals__card`,"data-approval-id":entry.id},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$16,[createVNode(VAvatar,{size:`32`,color:`secondary`,variant:`tonal`,class:`vibe64-approvals__avatar`},{default:withCtx(()=>[createTextVNode(toDisplayString(initial(entry.sender)),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_6$13,[createBaseVNode(`div`,_hoisted_7$11,[createTextVNode(toDisplayString(heading(entry)),1),createBaseVNode(`span`,_hoisted_8$11,` · `+toDisplayString(time(entry.createdAt)),1)]),!__props.approvals.isOwner?(openBlock(),createElementBlock(`div`,_hoisted_9$8,` Waiting for `+toDisplayString(__props.approvals.ownerName)+` to approve `,1)):createCommentVNode(``,true)]),createVNode(VChip,{size:`small`,variant:`tonal`,color:sending(entry)?`primary`:`secondary`,class:`flex-shrink-0`},{default:withCtx(()=>[sending(entry)?(openBlock(),createBlock(VProgressCircular,{key:0,indeterminate:``,size:`12`,width:`2`,class:`me-1`})):(openBlock(),createBlock(VIcon,{key:1,icon:unref(mdiClockOutline),size:`14`,start:``},null,8,[`icon`])),createTextVNode(` `+toDisplayString(sending(entry)?`Sending…`:`Waiting`),1)]),_:2},1032,[`color`])]),draft.id===entry.id&&draft.mode!==`decline`?(openBlock(),createElementBlock(`div`,_hoisted_10$7,[createVNode(VTextarea,{modelValue:draft.text,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>draft.text=$event),label:draft.mode===`approve`?`Edit ${entry.sender.displayName}'s message`:`Edit your message`,"auto-grow":``,rows:`2`,"max-rows":`8`,density:`compact`,variant:`outlined`,"hide-details":`auto`,autofocus:``},null,8,[`modelValue`,`label`]),createBaseVNode(`div`,_hoisted_11$6,[createVNode(VBtn,{variant:`text`,block:__props.phone,onClick:closeDraft},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`block`]),createVNode(VBtn,{color:`primary`,variant:`flat`,block:__props.phone,disabled:!draft.text.trim(),loading:Boolean(__props.approvals.pending[entry.id]),onClick:$event=>saveDraft(entry)},{default:withCtx(()=>[createTextVNode(toDisplayString(draft.mode===`approve`?`Send`:`Save`),1)]),_:1},8,[`block`,`disabled`,`loading`,`onClick`])])])):(openBlock(),createElementBlock(`p`,_hoisted_12$6,toDisplayString(entry.text),1)),entry.steer&&entry.status===`waiting`?(openBlock(),createElementBlock(`p`,_hoisted_13$5,toDisplayString(__props.approvals.isOwner?`Sent while the assistant was working. It joins the current turn if it's still running when you approve.`:`Sent while the assistant was working. It joins the current turn if it's still running when ${__props.approvals.ownerName} approves.`),1)):createCommentVNode(``,true),entry.error&&!sending(entry)?(openBlock(),createBlock(VAlert,{key:3,type:`error`,variant:`tonal`,density:`compact`,class:`mt-2`},{default:withCtx(()=>[createTextVNode(` Couldn't send: `+toDisplayString(entry.error)+` Try again. `,1)]),_:2},1024)):createCommentVNode(``,true),draft.id===entry.id&&draft.mode===`decline`?(openBlock(),createElementBlock(`div`,_hoisted_14$3,[createVNode(VTextarea,{modelValue:draft.text,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>draft.text=$event),label:`Add a note for ${entry.sender.displayName} (optional)`,"auto-grow":``,rows:`1`,"max-rows":`4`,counter:`500`,rules:[value=>value.length<=500||`Keep the note under 500 characters.`],density:`compact`,variant:`outlined`,autofocus:``},null,8,[`modelValue`,`label`,`rules`]),createBaseVNode(`div`,_hoisted_15$3,[createVNode(VBtn,{variant:`text`,block:__props.phone,onClick:closeDraft},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`block`]),createVNode(VBtn,{color:`error`,variant:`tonal`,block:__props.phone,disabled:draft.text.length>500,loading:__props.approvals.pending[entry.id]===`decline`,onClick:$event=>saveDraft(entry)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Decline `,-1)])]),_:1},8,[`block`,`disabled`,`loading`,`onClick`])])])):draft.id!==entry.id&&__props.approvals.isOwner?(openBlock(),createElementBlock(`div`,_hoisted_16$2,[createVNode(VBtn,{color:`primary`,variant:`flat`,block:__props.phone,disabled:busy(entry),loading:__props.approvals.pending[entry.id]===`approve`,"prepend-icon":unref(mdiSend),onClick:$event=>__props.approvals.approve(entry)},{default:withCtx(()=>[createTextVNode(toDisplayString(entry.status===`sending`&&!__props.approvals.pending[entry.id]?`Send again`:`Approve & send`),1)]),_:2},1032,[`block`,`disabled`,`loading`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`tonal`,block:__props.phone,disabled:busy(entry)||entry.status===`sending`,"prepend-icon":unref(mdiPencilOutline),onClick:$event=>openDraft(entry,`approve`)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Edit then send `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry)||entry.status===`sending`,onClick:$event=>openDraft(entry,`decline`)},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(` Decline `,-1)])]),_:1},8,[`block`,`disabled`,`onClick`])])):draft.id!==entry.id&&__props.approvals.own(entry)?(openBlock(),createElementBlock(`div`,_hoisted_17$2,[createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry),"prepend-icon":unref(mdiPencilOutline),onClick:$event=>openDraft(entry,`edit`)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry),"prepend-icon":unref(mdiUndoVariant),loading:__props.approvals.pending[entry.id]===`withdraw`,onClick:$event=>__props.approvals.withdraw(entry)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Withdraw `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`loading`,`onClick`])])):createCommentVNode(``,true)]),_:2},1032,[`data-approval-id`])}),128)),shownDecided.value.length?(openBlock(),createElementBlock(`ul`,_hoisted_18$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(shownDecided.value,entry=>{return openBlock(),createElementBlock(`li`,{key:entry.id,"data-approval-id":entry.id,class:`vibe64-approvals__row`},[createBaseVNode(`div`,_hoisted_20$1,[createVNode(VIcon,{icon:decision(entry).icon,color:decision(entry).color,size:`18`,class:`flex-shrink-0`},null,8,[`icon`,`color`]),createBaseVNode(`span`,_hoisted_21$1,toDisplayString(decision(entry).text),1),entry.status===`sent`?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,density:`comfortable`,class:`vibe64-approvals__show`,onClick:$event=>emit(`show-in-chat`,entry)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Show in chat `,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true)]),entry.status===`sent`?(openBlock(),createElementBlock(`p`,_hoisted_22$1,toDisplayString(entry.text),1)):(openBlock(),createElementBlock(`details`,_hoisted_23$1,[createBaseVNode(`summary`,{"aria-label":`Message: ${entry.text}`},toDisplayString(entry.text),9,_hoisted_24$1)])),entry.status===`declined`&&entry.note?(openBlock(),createElementBlock(`blockquote`,_hoisted_25,` “`+toDisplayString(entry.note)+`” `,1)):createCommentVNode(``,true)],8,_hoisted_19$1)}),128))])):createCommentVNode(``,true),hiddenDecidedCount.value?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,size:`small`,class:`align-self-start`,onClick:_cache[4]||(_cache[4]=$event=>showEarlier.value=true)},{default:withCtx(()=>[createTextVNode(` Show earlier (`+toDisplayString(hiddenDecidedCount.value)+`) `,1)]),_:1})):createCommentVNode(``,true)])]),_:1},8,[`variant`,`class`])]),_:1},16))],2)):createCommentVNode(``,true)}}};var Vibe64MainChatApprovals_default=_plugin_vue_export_helper_default(_sfc_main$37,[[`__scopeId`,`data-v-26d38d3c`]]);var PROMPT_HINT_DEBOUNCE_MS=5e3;var PROMPT_HINT_MIN_INTERVAL_MS=3e4;var promptHintOperationSequence=0;function normalizedPromptHintText(value=``){return String(value||``).trim()}function promptHintOperationId(){promptHintOperationSequence+=1;return`hint:${Date.now().toString(36)}:${promptHintOperationSequence.toString(36)}`}function promptHintConversationFingerprint(turns=[]){const recentTurns=(Array.isArray(turns)?turns:[]).slice(-8);return JSON.stringify(recentTurns.map((turn={})=>({assistant:normalizedPromptHintText(turn?.assistant?.text),turnId:normalizedPromptHintText(turn?.turnId),user:normalizedPromptHintText(turn?.user?.text)})))}function useVibe64PromptHints({active=true,blankConversation=false,canRequest=true,conversationKey=``,draft=``,existingProject=false,onSelect=()=>false,policy={},sessionId=``,sessionsApiPath=``}={},{debounceMs=PROMPT_HINT_DEBOUNCE_MS,minIntervalMs=PROMPT_HINT_MIN_INTERVAL_MS,request=(path,options)=>getHttpWebClient().request(path,options)}={}){const originId=vibe64BrowserTabOriginId();const responseStatus=ref(`idle`);const currentSessionId=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionId)));const currentSessionsApiPath=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionsApiPath)));const currentPolicy=computed(()=>readRefOrGetterValue(policy)||{});const controller=useAssistantSuggestions({active:computed(()=>Boolean(readRefOrGetterValue(active)!==false&&readRefOrGetterValue(canRequest)!==false&&currentPolicy.value.enabled!==false&&currentPolicy.value.ready===true&&currentSessionId.value&&currentSessionsApiPath.value)),requestKey:computed(()=>[currentSessionId.value,currentSessionsApiPath.value,readRefOrGetterValue(conversationKey),currentPolicy.value.revision,currentPolicy.value.version,readRefOrGetterValue(blankConversation),readRefOrGetterValue(existingProject)]),draft:computed(()=>normalizedPromptHintDraft(readRefOrGetterValue(draft))),debounceMs,minIntervalMs,onSelect,async generate({draft:requestDraft,signal}){const targetSession=currentSessionId.value;const targetPath=currentSessionsApiPath.value;const operationId=promptHintOperationId();const cancelPath=scopedDevelopmentApiUrl(vibe64SessionPromptHintsCancelPath(targetPath,targetSession));const cancel=()=>{request(cancelPath,{method:`POST`,body:{operationId,originId}}).catch(()=>null)};signal.addEventListener(`abort`,cancel,{once:true});try{const response=await request(vibe64SessionPromptHintsPath(targetPath,targetSession),{method:`POST`,body:{draft:requestDraft,operationId,originId},signal});if(signal.aborted)return[];responseStatus.value=response?.status;return[`ready`,`static`].includes(response?.status)?normalizedPromptHintSuggestions(response.suggestions):[]}finally{signal.removeEventListener(`abort`,cancel)}}});return{blurComposer:controller.blur,composerFocused:controller.composerFocused,dismissPromptHints:controller.dismiss,focusComposer:controller.focus,loading:controller.loading,preview:controller.preview,previewPromptHint:suggestion=>controller.previewSuggestion(normalizedPromptHintSuggestion(suggestion)),selectPromptHint:suggestion=>controller.select(normalizedPromptHintSuggestion(suggestion)),status:computed(()=>controller.loading.value?`loading`:controller.items.value.length===3?responseStatus.value:`idle`),suggestions:controller.items,visible:controller.visible}}var _hoisted_1$31={class:`studio-autopilot__composer-actions`};var _hoisted_2$25={key:0,class:`studio-autopilot__settings-access`};var _hoisted_3$22={class:`text-body-small`,role:`status`};var _sfc_main$36={__name:`Vibe64AutopilotChat`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,agentObservationLost,agentStopEnabled,agentStopVisible,agentWorking,answerChoices,approvalMode,assistantAccessError,assistantAccessLoading,assistantAccessScopeKey,assistantCanConfigureRouting,assistantCanUsePurpose,assistantPurposes,assistantRestrictionMessage,attachPreviewDiagnostics,cancelOptimisticMessage,captureVisiblePreview,chatCollapsed,chatReloading,chatTurns,checkTemporaryAiUpdate,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerInput,composerKey,composerPlaceholder,composerSending,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,connectionRecoveryVisible,conversationFollowLatestKey,conversationLogVisible,conversationScrollKey,dismissNumberedQuestions,editOptimisticMessage,emptyConversationWelcome,fileBookmarks,finishTemporaryAiTask,interrupting,loadMoreChatTurns,mainChat,mainChatApprovals,numberedQuestions,numberedQuestionSelectItems,openIntegrationRequest,openSourceEditorFile,openWorkingFile,phoneLayout,previewAttachmentState,projectSlug,props,questionAnswers,reasoningActive,reloadAssistantAccess,reloadChatPane,repositoryOperationActive,repositoryRecoverySending,requestAgentInterrupt,resendOptimisticMessage,reviewResolvedUpdate,routingRequest,runIntegrationRequest,saveWorkOperationActive,saveWorkSending,saveWorkTitle,selectedAnswerChoice,sendLessonMessage,sessionId,sessionSourceRoot,sourceOperationsSuspended,structuredQuestionActive,submitComposerMessage,temporaryAiWorkspace,testApproval,thinkingLabel,thinkingVisible,updateComposerAttachments,updateConflictRecovery,updateWorkDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus}=__props.view;const conversationView=ref(null);const composerSendButton=ref(null);const composerSettingsOpen=ref(false);const composerSettingsButton=ref(null);const workPlanViewer=ref(null);const thinkingStatusId=`studio-autopilot-thinking-${useId()}`;const composerAttachmentState=ref({count:0,hasUnresolved:false,uploading:false});const{blur:stopTypingOnBlur,noteInputActivity:noteTypingActivity,submit:stopTypingOnSubmit,typingLabel}=useVibe64SessionTypingPresence({active:computed(()=>props.active&&!props.sessionSelectionArchived),projectSlug,sessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});const composerAccessHint=computed(()=>assistantRestrictionMessage.value||composerHint.value);const composerAssistantLabel=computed(()=>{if(testApproval.value?.state===`waiting`)return`Waiting for memory approval`;if(!thinkingVisible.value)return typingLabel.value;if(props.conversationLog?.error)return``;return assistantRestrictionMessage.value||thinkingLabel.value});function showApprovedMessage(entry){mainChat.value?.querySelector(`.vibe64-conversation-log [data-approval-id="${CSS.escape(entry.id)}"]`)?.scrollIntoView({block:`center`,behavior:`smooth`})}const routingActionSending=ref(``);const routingActionError=ref(``);watch(()=>[routingRequest.value?.messageId,routingRequest.value?.stage,routingRequest.value?.status,routingRequest.value?.delivery],()=>{routingActionError.value=``});async function sendRoutingAction(action){const request=routingRequest.value;if(routingActionSending.value||!request)return;routingActionSending.value=action;routingActionError.value=``;try{const result=action===`implement`?await props.sendAgentMessage({message:`Implement the saved plan. I authorize implementation within its agreed scope.`,planRevision:request.workPlan.revision,submissionKind:`send`}):await props.conversationRuntime.continueWorkflow(request);if(result===false||result?.ok===false)throw new Error(result?.error||`The workflow action did not start. Check the conversation and try again.`);return result}catch(error){routingActionError.value=error?.message||`The workflow action did not start.`;return false}finally{routingActionSending.value=``}}const conversationAssistantLabel=computed(()=>props.session?.assistantSelection?vibe64AssistantSelectionLabel(props.session.assistantSelection):`Assistant`);const promptHintsBlankConversation=computed(()=>chatTurns.value.length<1);const promptHintsCanRequest=computed(()=>Boolean(props.active&&props.conversationRuntime?.canSubmit.value&&!props.conversationLog?.loading&&!props.conversationLog?.error&&!props.sessionSelectionArchived&&sessionId.value&&sessionSourceRoot.value&&!agentActive.value&&!composerSending.value&&!interrupting.value&&!repositoryOperationActive.value&&!repositoryRecoverySending.value&&!saveWorkSending.value&&!workspaceSetupRunning.value&&!workspaceSetupRetrying.value&&!sourceOperationsSuspended.value&&(promptHintsBlankConversation.value||assistantCanUsePurpose(`prompt_hint`))&&!structuredQuestionActive.value&&composerAttachmentState.value.count<1&&!composerAttachmentState.value.uploading&&!composerAttachmentState.value.hasUnresolved&&!previewAttachmentState.value.captureBusy&&!previewAttachmentState.value.diagnosticsBusy));const promptHintsConversationKey=computed(()=>JSON.stringify([promptHintConversationFingerprint(chatTurns.value),assistantAccessScopeKey.value,assistantPurposes.value.prompt_hint]));const promptHintsExistingProject=computed(()=>workspaceSetupStatus.value!==`unconfigured`);const{blurComposer:blurPromptHints,dismissPromptHints,focusComposer:focusPromptHints,loading:promptHintsLoading,preview:promptHintPreview,previewPromptHint,selectPromptHint,suggestions:promptHintSuggestions,visible:promptHintsVisible}=useVibe64PromptHints({active:computed(()=>props.active),blankConversation:promptHintsBlankConversation,canRequest:promptHintsCanRequest,conversationKey:promptHintsConversationKey,draft:composerDraft,existingProject:promptHintsExistingProject,onSelect:applyPromptHint,policy:computed(()=>props.promptHintPolicy),sessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});const composerPromptHintPreview=computed(()=>promptHintsVisible.value&&!String(composerDraft.value||``).trim()&&promptHintPreview.value?promptHintPreview.value:``);const composerPromptHintPlaceholder=computed(()=>composerPromptHintPreview.value||composerPlaceholder.value);const composerSupportStatusVisible=computed(()=>Boolean(composerAssistantLabel.value||promptHintsVisible.value));async function sendComposerMessage(){if(conversationView.value?.composerBlocked||composerInput.value?.attachmentsCanSubmit?.()===false)return false;stopTypingOnSubmit();return submitComposerMessage()}async function continueConversation(){composerInput.value?.focus?.();if(composerDraft.value.trim()||composerAttachments.value.length)return;composerDraft.value=`Continue.`;await nextTick();if(composerCanSubmit.value)await sendComposerMessage()}function focusComposerSendButton(){composerSendButton.value?.focus?.()??composerSendButton.value?.$el?.focus?.()}function updateComposerAttachmentState(state={}){composerAttachmentState.value={count:Number(state?.count||0),hasUnresolved:state?.hasUnresolved===true,uploading:state?.uploading===true}}function focusTargetInside(target,selector){return Boolean(target?.closest?.(selector))}function handleComposerBlur(event={}){stopTypingOnBlur();if(focusTargetInside(event.relatedTarget,`[data-assistant-composer-support], .studio-autopilot__composer`))return;blurPromptHints()}function handleComposerRegionFocusOut(event={}){if(event.currentTarget?.contains?.(event.relatedTarget)||focusTargetInside(event.relatedTarget,`[data-assistant-composer-support]`))return;blurPromptHints()}function handlePromptHintsFocusOut(event={}){if(event.currentTarget?.contains?.(event.relatedTarget)||focusTargetInside(event.relatedTarget,`.studio-autopilot-prompt-textarea`))return;blurPromptHints()}function dismissPromptHintsAndFocus(){composerInput.value?.focus?.({preventScroll:true});dismissPromptHints()}function applyPromptHint(text=``){const suggestion=String(text||``).trim();if(!suggestion)return false;if(composerDraft.value!==suggestion){composerInput.value?.preserveHeightForNextModelValue?.();composerDraft.value=suggestion}nextTick(()=>{composerInput.value?.focus?.({preventScroll:true})});return true}async function showMainChat(){temporaryAiWorkspace.value?.closeWorkspace?.();await nextTick();mainChat.value?.focus?.({preventScroll:true})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(Vibe64ConversationLog_default,{ref_key:`conversationView`,ref:conversationView,"voice-runtime":unref(props).active&&!unref(props).sessionSelectionArchived?unref(props).conversationRuntime:null,working:unref(agentWorking),"integration-action-pending":unref(props).conversationLog?.integrationActionPending,"integration-connections":unref(props).conversationLog?.integrationConnections,"integration-action-error":unref(props).conversationLog?.integrationActionError,"integration-requests-enabled":unref(props).active&&!unref(props).sessionSelectionArchived,"session-id":unref(sessionId),"assistant-label":conversationAssistantLabel.value,class:`studio-autopilot__conversation`,error:unref(props).conversationLog?.error,"error-reloadable":unref(props).conversationLog?.errorReloadable,"follow-latest-key":unref(conversationFollowLatestKey),"has-more-before":unref(props).conversationLog?.hasMoreBefore,loading:unref(props).conversationLog?.loading,"loading-more":unref(props).conversationLog?.loadingMore,"load-more-error":unref(props).conversationLog?.loadMoreError,reloading:unref(chatReloading),"scroll-key":unref(conversationScrollKey),"source-root":unref(sessionSourceRoot),turns:unref(chatTurns),visible:unref(conversationLogVisible)&&!unref(chatCollapsed)&&!unref(temporaryAiWorkspace)?.visible,"welcome-message":unref(emptyConversationWelcome),onCancelTurn:unref(cancelOptimisticMessage),onEditTurn:unref(editOptimisticMessage),onLoadMore:unref(loadMoreChatTurns),onOpenSourceFile:unref(openSourceEditorFile),onOpenPlanHistory:_cache[11]||(_cache[11]=$event=>workPlanViewer.value?.showPlan(`history`)),onOpenIntegration:unref(openIntegrationRequest),onIntegrationAction:unref(runIntegrationRequest),onResendTurn:unref(resendOptimisticMessage),onReload:unref(reloadChatPane)},{hints:withCtx(()=>[createVNode(unref(AssistantComposerSupport_default),{activity:{label:composerAssistantLabel.value},loading:!composerAssistantLabel.value&&unref(promptHintsVisible)&&unref(promptHintsLoading),"status-id":thinkingStatusId,suggestions:!composerAssistantLabel.value&&unref(promptHintsVisible)?unref(promptHintSuggestions):[],onDismiss:dismissPromptHintsAndFocus,onFocusout:handlePromptHintsFocusOut,onPreview:unref(previewPromptHint),onSelect:unref(selectPromptHint)},createSlots({_:2},[unref(reasoningActive)&&composerAssistantLabel.value===`Assistant is working...`?{name:`activity`,fn:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiCircle),size:`7`,color:`primary`},null,8,[`icon`]),_cache[12]||(_cache[12]=createBaseVNode(`span`,null,[createTextVNode(`Assistant is working`),createBaseVNode(`span`,{class:`studio-autopilot__reasoning-dots`},`...`)],-1))]),key:`0`}:void 0]),1032,[`activity`,`loading`,`suggestions`,`onPreview`,`onSelect`])]),composer:withCtx(({composerBlocked,setVoiceFeedbackTarget})=>[createBaseVNode(`div`,{class:`studio-autopilot__composer`,"data-vibe64-guide":`chat`,onFocusout:handleComposerRegionFocusOut},[createVNode(Vibe64MainChatApprovals_default,{ref:`approvalsPanel`,approvals:unref(mainChatApprovals),phone:unref(phoneLayout),onShowInChat:showApprovedMessage},null,8,[`approvals`,`phone`]),createVNode(Vibe64RoutingNotice_default,{request:unref(routingRequest),selection:unref(props).session?.assistantSelection,mode:unref(assistantRoutingFromMetadata)(unref(props).session?.metadata)?.mode||``,active:unref(props).active&&unref(conversationLogVisible),"pending-action":routingActionSending.value,"action-error":routingActionError.value,busy:unref(agentActive)||unref(composerSending)||composerBlocked,onRetry:_cache[0]||(_cache[0]=$event=>sendRoutingAction(`continue`)),onImplement:_cache[1]||(_cache[1]=$event=>sendRoutingAction(`implement`)),onViewPlan:_cache[2]||(_cache[2]=$event=>workPlanViewer.value?.showPlan(`current`)),onSkip:_cache[3]||(_cache[3]=$event=>unref(props).interruptAgentTurn({reason:`skip-review`}))},null,8,[`request`,`selection`,`mode`,`active`,`pending-action`,`action-error`,`busy`]),(openBlock(),createBlock(_sfc_main$59,{ref_key:`composerInput`,ref:composerInput,key:unref(composerKey),"saved-attachments":unref(composerAttachments),modelValue:unref(composerDraft),"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>isRef(composerDraft)?composerDraft.value=$event:null),"aria-label":`Message AI assistant`,"attachments-enabled":unref(composerAttachmentsEnabled),"described-by":composerSupportStatusVisible.value?thinkingStatusId:``,disabled:unref(composerDisabled),density:`compact`,placeholder:composerPromptHintPlaceholder.value,"placeholder-affects-height":!composerPromptHintPreview.value,rows:1,"session-id":unref(sessionId),"submit-enabled":unref(composerCanSubmit)&&!composerBlocked,"tab-to-submit":``,onAttachmentStateChange:updateComposerAttachmentState,onAttachmentsChange:unref(updateComposerAttachments),onBlur:handleComposerBlur,onEscape:unref(dismissPromptHints),onFocus:unref(focusPromptHints),onInputActivity:unref(noteTypingActivity),onSubmit:sendComposerMessage,onTabToSubmit:focusComposerSendButton},{"input-start":withCtx(()=>[createVNode(unref(AssistantQuestionInputs_default),{answers:unref(questionAnswers),"onUpdate:answers":_cache[4]||(_cache[4]=$event=>isRef(questionAnswers)?questionAnswers.value=$event:null),choice:unref(selectedAnswerChoice),"onUpdate:choice":_cache[5]||(_cache[5]=$event=>isRef(selectedAnswerChoice)?selectedAnswerChoice.value=$event:null),questions:unref(numberedQuestions),"select-items":unref(numberedQuestionSelectItems),choices:unref(answerChoices),onDismiss:unref(dismissNumberedQuestions)},null,8,[`answers`,`choice`,`questions`,`select-items`,`choices`,`onDismiss`])]),footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_1$31,[!unref(props).sessionSelectionArchived?(openBlock(),createBlock(Vibe64ChatModeControls_default,{key:0,session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,goal:unref(readRefOrGetterValue)(unref(props).conversationRuntime?.goalState)?.goal,purposes:unref(assistantPurposes),disabled:unref(sourceOperationsSuspended),active:unref(agentActive),"can-configure":unref(assistantCanConfigureRouting),connecting:[`initializing`,`reconciling`].includes(unref(props).agentConnectionStatus),loading:unref(assistantAccessLoading),"load-error":unref(assistantAccessError),onReload:unref(reloadAssistantAccess),onSaved:unref(reloadAssistantAccess),onCustom:_cache[6]||(_cache[6]=$event=>{composerSettingsButton.value=$event;composerSettingsOpen.value=true})},{default:withCtx(({close:closeChatMode})=>[composerAccessHint.value?(openBlock(),createElementBlock(`div`,_hoisted_2$25,[createBaseVNode(`div`,_hoisted_3$22,[createTextVNode(toDisplayString(composerAccessHint.value)+` `,1),unref(agentObservationLost)&&!unref(agentActive)?(openBlock(),createBlock(VBtn,{key:0,size:`small`,variant:`text`,disabled:unref(composerDisabled)||unref(composerSending),onClick:$event=>{closeChatMode();continueConversation()}},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Continue `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])])):createCommentVNode(``,true)]),_:1},8,[`session`,`sessions-api-path`,`goal`,`purposes`,`disabled`,`active`,`can-configure`,`connecting`,`loading`,`load-error`,`onReload`,`onSaved`])):createCommentVNode(``,true),createVNode(VMenu,{eager:``,location:`top start`,"close-on-content-click":false},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{"aria-label":`Add to message`,title:`Add to message`,icon:unref(mdiPlus),size:`small`,variant:`text`,class:`studio-autopilot__composer-action`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VCard,{class:`studio-autopilot__composer-menu pa-2`,"aria-label":`Add to message`},{default:withCtx(()=>[unref(composerAttachmentsSupported)?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Attach files`,class:`studio-autopilot__composer-action justify-start`,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles,"prepend-icon":unref(mdiPaperclip),size:`small`,title:`Attach files`,type:`button`,variant:`text`,onClick:_cache[7]||(_cache[7]=$event=>unref(composerInput)?.openFilePicker?.())},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Attach files `,-1)])]),_:1},8,[`disabled`,`prepend-icon`])):createCommentVNode(``,true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).captureAvailable?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Attach visible preview`,class:`studio-autopilot__composer-action justify-start`,"aria-busy":unref(previewAttachmentState).captureBusy?`true`:void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).captureBusy,"prepend-icon":unref(mdiEyePlusOutline),size:`small`,title:`Attach visible preview`,type:`button`,variant:`text`,onClick:unref(captureVisiblePreview)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Attach visible preview `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).diagnosticsAvailable?(openBlock(),createBlock(VBtn,{key:2,"aria-label":`Attach console & network`,class:`studio-autopilot__composer-action justify-start`,"aria-busy":unref(previewAttachmentState).diagnosticsBusy?`true`:void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).diagnosticsBusy,"prepend-icon":unref(mdiConsoleNetworkOutline),size:`small`,title:`Attach console and network diagnostics`,type:`button`,variant:`text`,onClick:unref(attachPreviewDiagnostics)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(` Attach console & network `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024),createVNode(Vibe64StarredFilesMenu_default,{bookmarks:unref(fileBookmarks),onOpenFile:unref(openSourceEditorFile)},null,8,[`bookmarks`,`onOpenFile`]),createVNode(Vibe64AgentPlanUsage_default,{active:unref(props).active&&!unref(props).sessionSelectionArchived,session:unref(props).session,"conversation-runtime":unref(props).conversationRuntime,"sessions-api-path":unref(props).sessionsApiPath},null,8,[`active`,`session`,`conversation-runtime`,`sessions-api-path`]),createVNode(Vibe64WorkPlan_default,{ref_key:`workPlanViewer`,ref:workPlanViewer,session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,active:unref(props).active&&unref(conversationLogVisible),busy:unref(agentActive)},null,8,[`session`,`sessions-api-path`,`active`,`busy`]),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:composerSettingsOpen.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>composerSettingsOpen.value=$event),target:composerSettingsButton.value,"can-configure":unref(assistantCanConfigureRouting),"changes-disabled":unref(sourceOperationsSuspended),session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,onSaved:_cache[9]||(_cache[9]=$event=>{unref(props).refreshSessionData?.();unref(reloadAssistantAccess)()})},null,8,[`modelValue`,`target`,`can-configure`,`changes-disabled`,`session`,`sessions-api-path`]),unref(approvalMode)?(openBlock(),createBlock(VBtn,{key:1,ref_key:`composerSendButton`,ref:composerSendButton,class:`studio-autopilot__approval-send`,color:`primary`,variant:`flat`,size:`small`,"aria-label":unref(composerSubmitAriaLabel),title:unref(composerSubmitTitle),disabled:!unref(composerCanSubmit)||composerBlocked,loading:unref(composerSubmitMode)===`approval-sending`,"append-icon":unref(mdiSend),onClick:sendComposerMessage},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(` Send for approval `,-1)])]),_:1},8,[`aria-label`,`title`,`disabled`,`loading`,`append-icon`])):(openBlock(),createBlock(Vibe64ComposerDelivery_default,{key:2,ref_key:`composerSendButton`,ref:composerSendButton,"stop-visible":unref(agentStopVisible),"stop-enabled":unref(agentStopEnabled),stopping:unref(interrupting),"can-submit":unref(composerCanSubmit)&&!composerBlocked&&attachmentState.canSubmit,sending:unref(composerSending),"submit-mode":unref(composerSubmitMode),"submit-aria-label":unref(composerSubmitAriaLabel),"submit-title":unref(composerSubmitTitle),onStop:unref(requestAgentInterrupt),onSubmit:sendComposerMessage},null,8,[`stop-visible`,`stop-enabled`,`stopping`,`can-submit`,`sending`,`submit-mode`,`submit-aria-label`,`submit-title`,`onStop`]))]),createBaseVNode(`div`,{ref:setVoiceFeedbackTarget,class:`studio-autopilot__voice-feedback`},null,512)]),_:2},1032,[`saved-attachments`,`modelValue`,`attachments-enabled`,`described-by`,`disabled`,`placeholder`,`placeholder-affects-height`,`session-id`,`submit-enabled`,`onAttachmentsChange`,`onEscape`,`onFocus`,`onInputActivity`]))],32)]),_:1},8,[`voice-runtime`,`working`,`integration-action-pending`,`integration-connections`,`integration-action-error`,`integration-requests-enabled`,`session-id`,`assistant-label`,`error`,`error-reloadable`,`follow-latest-key`,`has-more-before`,`loading`,`loading-more`,`load-more-error`,`reloading`,`scroll-key`,`source-root`,`turns`,`visible`,`welcome-message`,`onCancelTurn`,`onEditTurn`,`onLoadMore`,`onOpenSourceFile`,`onOpenIntegration`,`onIntegrationAction`,`onResendTurn`,`onReload`]),createVNode(Vibe64TemporaryAiWorkspace_default,{ref_key:`temporaryAiWorkspace`,ref:temporaryAiWorkspace,active:unref(props).active&&!unref(chatCollapsed),"session-selected":unref(props).active,"assistant-selection":unref(props).session?.assistantSelection,"assistant-ready":Boolean(unref(sessionId))&&!unref(props).sessionSelectionArchived,"connection-unavailable":unref(connectionRecoveryVisible),"can-configure-routing":unref(assistantCanConfigureRouting),"preview-attachment-state":unref(previewAttachmentState),"project-slug":unref(projectSlug),"session-id":unref(sessionId),"main-has-messages":unref(chatTurns).length>0,"sessions-api-path":unref(props).sessionsApiPath,"repository-busy":unref(saveWorkOperationActive)||unref(saveWorkSending),"update-disabled":unref(updateWorkDisabled),"update-disabled-reason":unref(saveWorkTitle),"can-review-update":Boolean(unref(updateConflictRecovery)),"workspace-setup-status":unref(workspaceSetupStatus),"open-file":unref(openWorkingFile),"send-lesson-message":unref(sendLessonMessage),onCheckUpdate:unref(checkTemporaryAiUpdate),onReviewUpdate:unref(reviewResolvedUpdate),onSelectMainChat:showMainChat,onTaskFinished:unref(finishTemporaryAiTask)},null,8,[`active`,`session-selected`,`assistant-selection`,`assistant-ready`,`connection-unavailable`,`can-configure-routing`,`preview-attachment-state`,`project-slug`,`session-id`,`main-has-messages`,`sessions-api-path`,`repository-busy`,`update-disabled`,`update-disabled-reason`,`can-review-update`,`workspace-setup-status`,`open-file`,`send-lesson-message`,`onCheckUpdate`,`onReviewUpdate`,`onTaskFinished`])],64)}}};var Vibe64AutopilotChat_default=_plugin_vue_export_helper_default(_sfc_main$36,[[`__scopeId`,`data-v-ca895022`]]);var _hoisted_1$30={class:`my-3 pl-5`,style:{"overflow-wrap":`anywhere`}};var _hoisted_2$24={key:1,class:`d-flex align-center justify-space-between ga-2 mb-2`};var _hoisted_3$21={class:`text-label-small text-medium-emphasis`};var _hoisted_4$17={key:0,class:`text-body-small mt-1 mb-0`};var _hoisted_5$15={key:3,role:`status`};var _hoisted_6$12={key:4,role:`status`,class:`text-body-small mt-2`};var _hoisted_7$10={key:5,role:`status`,class:`mt-3`};var _hoisted_8$10={class:`text-wrap`,style:{"overflow-wrap":`anywhere`}};var _sfc_main$35={__name:`Vibe64AutopilotDialogs`,props:{view:{type:Object,required:true}},setup(__props){const{applyResolvedUpdate,cancelSaveWork,confirmSaveWork,contextFullFailure,createPullRequestOpen,githubProject,props,reportTemporaryRecovery,resolvedUpdateReview,retryContextFull,saveWorkConfirmOpen,saveWorkConnectedReview,saveWorkDisabled,saveWorkReview,saveWorkSending,saveWorkTitle,selectSessionTool,sessionPullRequest,sourceOperationsSuspended,temporaryAiWorkspace,updateWorkDisabled}=__props.view;const saveWorkNeedsPullRequest=computed(()=>!saveWorkConnectedReview.value&&githubProject.value&&props.workState?.publicationRequiresPullRequest===true&&!sessionPullRequest.value?.number);const publicationLabel=computed(()=>{if(saveWorkConnectedReview.value)return`Push connected contributions`;if(saveWorkReview.value?.mode===`github`)return`Commit & push`;return`Save`});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VDialog,{"model-value":Boolean(unref(resolvedUpdateReview)),"max-width":`36rem`,"aria-label":`Apply resolved Update`,scrollable:``,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>!$event&&(resolvedUpdateReview.value=null))},{default:withCtx(()=>[unref(resolvedUpdateReview)?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Apply resolved Update`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[9]||(_cache[9]=createBaseVNode(`p`,null,`Confirm that these files preserve the intended changes from both this session and the latest saved version.`,-1)),createBaseVNode(`ul`,_hoisted_1$30,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(resolvedUpdateReview).conflictPaths,file=>{return openBlock(),createElementBlock(`li`,{key:file},toDisplayString(file),1)}),128))]),_cache[10]||(_cache[10]=createBaseVNode(`p`,null,`Repairs may be made manually or in any coding chat. Vibe64 will check the repository state and apply Update. Nothing is pushed.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{onClick:_cache[0]||(_cache[0]=$event=>resolvedUpdateReview.value=null)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`auto`,"min-height":`48`,style:{"max-width":`100%`},disabled:unref(updateWorkDisabled)||unref(sourceOperationsSuspended)||unref(temporaryAiWorkspace)?.updateRepairTask?.busy,onClick:_cache[1]||(_cache[1]=$event=>unref(applyResolvedUpdate)(unref(temporaryAiWorkspace)?.updateRepairTask,unref(reportTemporaryRecovery)))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createBaseVNode(`span`,{class:`text-wrap`},`I've resolved these conflicts — apply Update`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`]),createVNode(VDialog,{"model-value":Boolean(unref(contextFullFailure)),"max-width":`30rem`,"aria-label":`Not enough room`,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>!$event&&(contextFullFailure.value=null))},{default:withCtx(()=>[unref(contextFullFailure)?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Not enough room`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(unref(contextFullFailure).message),1),_cache[14]||(_cache[14]=createBaseVNode(`p`,{class:`text-body-small mt-3 mb-0`},`Your message was not sent and nothing was lost. Try again to summarise the assistant's memory and send it, or choose another assistant.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2 px-6 pb-5`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>contextFullFailure.value=null)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Close`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,onClick:unref(retryContextFull)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Summarise and continue`,-1)])]),_:1},8,[`onClick`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`]),createVNode(VDialog,{modelValue:unref(saveWorkConfirmOpen),"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>isRef(saveWorkConfirmOpen)?saveWorkConfirmOpen.value=$event:null),"max-width":`30rem`,"aria-label":unref(saveWorkConnectedReview)?`Save connected first`:`Save changes`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(unref(saveWorkConnectedReview)?`Save connected first`:`Save changes`),1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(saveWorkConnectedReview)?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[17]||(_cache[17]=createBaseVNode(`p`,null,`Commit and push changed connected sources to these contribution branches, one repository at a time.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(saveWorkConnectedReview),item=>{return openBlock(),createBlock(VSheet,{key:item.destination.sessionId,color:`surface-light`,rounded:`lg`,class:`pa-3 mb-2`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(item.destination.repository)+`:`+toDisplayString(item.destination.branch),1)]),_:2},1024)}),128)),_cache[18]||(_cache[18]=createBaseVNode(`p`,null,`The main project’s changes stay local. Each receiving project can merge or discard its contribution in Incoming changes.`,-1))],64)):createCommentVNode(``,true),!unref(saveWorkConnectedReview)?(openBlock(),createElementBlock(`div`,_hoisted_2$24,[createBaseVNode(`span`,null,toDisplayString(unref(props).workState?.changedPaths?.length||0)+` changed `+toDisplayString(unref(props).workState?.changedPaths?.length===1?`file`:`files`),1),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[5]||(_cache[5]=$event=>{unref(cancelSaveWork)();unref(selectSessionTool)(`changes`)})},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`View diff`,-1)])]),_:1})])):createCommentVNode(``,true),unref(saveWorkReview)&&!unref(saveWorkConnectedReview)?(openBlock(),createBlock(VSheet,{key:2,color:`surface-light`,rounded:`lg`,class:`pa-3`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$21,toDisplayString(unref(saveWorkReview).mode===`github`?`GitHub`:unref(saveWorkReview).mode===`local_source`?`Local project`:`Project version`),1),createBaseVNode(`strong`,null,toDisplayString(unref(saveWorkReview).repository)+`:`+toDisplayString(unref(saveWorkReview).branch),1),unref(sessionPullRequest)?(openBlock(),createElementBlock(`p`,_hoisted_4$17,`PR #`+toDisplayString(unref(sessionPullRequest).number)+` · `+toDisplayString(unref(sessionPullRequest).headBranch)+` → `+toDisplayString(unref(sessionPullRequest).baseBranch),1)):createCommentVNode(``,true)]),_:1})):!unref(saveWorkReview)?(openBlock(),createElementBlock(`p`,_hoisted_5$15,`Refresh repository status to review the destination.`)):createCommentVNode(``,true),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-small mt-3 mb-0`},`Save open file edits first.`,-1)),saveWorkNeedsPullRequest.value?(openBlock(),createElementBlock(`p`,_hoisted_6$12,`A pull request is required.`)):createCommentVNode(``,true),unref(saveWorkDisabled)?(openBlock(),createElementBlock(`p`,_hoisted_7$10,toDisplayString(unref(saveWorkTitle)),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2 px-6 pb-5`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:unref(saveWorkSending),height:`48`,type:`button`,variant:`text`,onClick:unref(cancelSaveWork)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`,`onClick`]),!unref(saveWorkConnectedReview)&&unref(githubProject)&&!unref(sessionPullRequest)?.number?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,height:`48`,variant:saveWorkNeedsPullRequest.value?`flat`:`outlined`,disabled:unref(saveWorkDisabled)||!unref(saveWorkReview),onClick:_cache[6]||(_cache[6]=$event=>{unref(cancelSaveWork)();createPullRequestOpen.value=true})},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Create draft PR `,-1)])]),_:1},8,[`variant`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-busy":unref(saveWorkSending)?`true`:void 0,color:`primary`,"min-height":`48`,disabled:unref(saveWorkDisabled)||!unref(saveWorkReview)||saveWorkNeedsPullRequest.value,type:`button`,variant:saveWorkNeedsPullRequest.value?`outlined`:`flat`,onClick:unref(confirmSaveWork)},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$10,toDisplayString(unref(saveWorkSending)?`Committing…`:publicationLabel.value),1)]),_:1},8,[`aria-busy`,`disabled`,`variant`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`aria-label`])],64)}}};function projectOnboardingRequest(kind,options={}){const{purpose=``,diagnostic=``,nextAction=``}=options;const description=String(purpose).trim();const request={create:{title:`Start this project`,message:`Help me start this project through conversation. Ask what I want to build, use answers I have already given, and help me choose a suitable Stack. I have not selected a starter.`+(description?`\n\nAgreed project description: ${description}`:``)},adopt:{title:`Set up this project`,message:`Set up this existing project for guided editing. What this project is and what I want to run: ${description}. Inspect its current implementation and work backwards into Genesis Blueprint, Stack, and Program, including its actual setup and run outputs. Preserve its source and Git history. If this application has authenticated web pages, inspect its existing authentication and Preview identity support, then start a conversation about managed preview access. Ask which existing development users should represent administrator and other relevant roles, using their email, login or user ID, and which should be the default. Reuse answers already supplied; do not ask for passwords or infer privileges from an account name. Offer to configure the existing Vibe64 Preview identity protocol and named identities, and wait for the user's choices before doing so. Do not create users, change roles or weaken production authentication as part of import. If the user defers, leave this explicitly pending; public or non-web projects do not need identity setup.`},inspect:{title:`Inspect project setup`,message:`Set up this existing project for guided editing. Inspect it for me to identify what it does and its run targets. Ask me only where the evidence is ambiguous. Work backwards into Genesis Blueprint, Stack, and Program while preserving the implementation and Git history. If this application has authenticated web pages, inspect its existing authentication and Preview identity support, then start a conversation about managed preview access. Ask which existing development users should represent administrator and other relevant roles, using their email, login or user ID, and which should be the default. Reuse answers already supplied; do not ask for passwords or infer privileges from an account name. Offer to configure the existing Vibe64 Preview identity protocol and named identities, and wait for the user's choices before doing so. Do not create users, change roles or weaken production authentication as part of import. If the user defers, leave this explicitly pending; public or non-web projects do not need identity setup.`},repair:{title:`Fix project setup`,message:`Inspect and update this project's Genesis setup. The opening inspection reports: ${diagnostic}. `+(nextAction===`update-genesis`?`The project requires a newer Genesis installation; do not downgrade its source format. `:``)+`Use the appropriate migration or repair, preserve source and Git history, and explain the specific change.`}}[kind];if(!request||kind===`adopt`&&!description)throw new Error(`Choose a setup request and describe the existing project before adopting it.`);return{...request,displayMessage:kind===`adopt`?`${request.title}: ${description}`:`${request.title}.`,nextStepMessage:`Recheck setup after the AI finishes. Project edits remain in this session for review and Save.`}}var _hoisted_1$29={class:`project-preview`};var _hoisted_2$23={key:0};var _hoisted_3$20={key:0};var _hoisted_4$16={class:`project-preview__warning-actions`};var _hoisted_5$14={key:0};var _hoisted_6$11={class:`project-preview__warning-actions`};var _hoisted_7$9={key:2,class:`project-preview__output`};var _hoisted_8$9=[`aria-busy`];var _hoisted_9$7={class:`project-onboarding__choices`};var _hoisted_10$6=[`disabled`,`onClick`];var _hoisted_11$5={key:0};var _hoisted_12$5={class:`project-onboarding__choose`};var _hoisted_13$4={key:0};var _hoisted_14$2={class:`project-onboarding__actions`};var _hoisted_15$2={key:3,role:`status`};var _sfc_main$34={__name:`Vibe64ProjectOnboarding`,props:{active:Boolean,archived:Boolean,busy:Boolean,canAsk:Boolean,requestTemporaryAi:{type:Function,required:true},sessionId:{type:String,required:true}},setup(__props){const props=__props;const projectSlug=useVibe64ProjectSlug();const purpose=ref(``);const applying=ref(``);const asking=ref(false);let disposed=false;onBeforeUnmount(()=>{disposed=true});const enabled=computed(()=>props.active&&!props.archived&&Boolean(props.sessionId));const resource=useEndpointResource({enabled,path:computed(()=>resolveStudioRequestUrl(`/api/vibe64/onboarding`)),readQuery:computed(()=>({sessionId:props.sessionId})),queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),props.sessionId,`project-onboarding`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:true},realtime:{events:[VIBE64_PROJECT_CHANGED_EVENT,VIBE64_SESSION_CHANGED_EVENT],matches:({event,payload={}}={})=>vibe64SessionEventMatchesScope(payload,{projectSlug:projectSlug.value})&&(event===`vibe64.project.changed`||payload.sessionId===props.sessionId&&payload.reason===`temporary-agent-turn-idle`)},refreshOnPull:true,fallbackLoadError:`Project setup could not be read.`});const command=useCommand({access:`never`,apiSuffix:`vibe64`,buildCommandOptions:()=>({method:`POST`,path:resolveStudioRequestUrl(`/api/vibe64/templates/apply`)}),buildRawPayload:(_model,{context})=>({sessionId:context.sessionId,templateId:context.templateId}),fallbackRunError:`The starter could not be applied. Your existing work was preserved.`,messages:{success:`Starter added to this session. Use Save to keep it in the project.`,error:`The starter could not be applied.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.project.templates.apply`,surfaceId:`app`,writeMethod:`POST`});const onboarding=computed(()=>resource.data.value?.ok===true?resource.data.value:null);const state=computed(()=>onboarding.value?.inspection?.state||``);const environmentSetup=computed(()=>onboarding.value?.environmentSetup);const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value)||resource.loadError.value);const showPreview=computed(()=>{if(props.archived||onboarding.value?.available===false||loadError.value)return true;return onboarding.value!==null&&state.value!==`new`&&state.value!==`adoption`});const colleaguePreview=inject(VIBE64_COLLEAGUE_PREVIEW_KEY,null);const displayedPreview={get projectSlug(){return projectSlug.value},get sessionId(){return props.sessionId},get screen(){if(showPreview.value)return!props.archived&&(loadError.value||state.value===`attention`)?`outputs-with-setup-warning`:`outputs`;if(state.value===`adoption`)return`existing-project-setup`;if(state.value===`new`)return`new-project-setup`;return`checking-project-setup`}};watchEffect(()=>{if(!colleaguePreview)return;if(props.active)colleaguePreview.value=displayedPreview;else if(colleaguePreview.value===displayedPreview)colleaguePreview.value=null});onBeforeUnmount(()=>{if(colleaguePreview?.value===displayedPreview)colleaguePreview.value=null});const pending=computed(()=>Boolean(applying.value||asking.value));const starterDisabled=computed(()=>pending.value||props.busy||!enabled.value);const askDisabled=computed(()=>pending.value||!enabled.value||!props.canAsk);const groups=computed(()=>{const grouped=new Map;for(const template of onboarding.value?.templates||[]){if(!grouped.has(template.technology))grouped.set(template.technology,[]);grouped.get(template.technology).push(template)}return[...grouped].map(([technology,templates])=>({technology,templates,label:technologyLabel(technology,templates)}))});const groupsHaveMultipleSources=computed(()=>new Set((onboarding.value?.templates||[]).map(({namespace})=>namespace)).size>1);function technologyLabel(technology,templates){const prefixes=new Set(templates.map(({name=``})=>name.includes(` · `)?name.split(` · `)[0].trim():``));const[prefix]=prefixes;return prefixes.size===1&&prefix?prefix:technology}async function apply(template){if(starterDisabled.value)return;const sessionId=props.sessionId;applying.value=template.id;try{try{await command.run({sessionId,templateId:template.id})}catch{return}if(disposed||props.sessionId!==sessionId||!enabled.value)return;await resource.reload()}finally{applying.value=``}}async function ask(kind){if(askDisabled.value)return;const inspection=onboarding.value?.inspection;const diagnostic=loadError.value||inspection?.diagnostics.map(({message})=>message).join(` `);const request=projectOnboardingRequest(kind,{purpose:purpose.value,diagnostic,nextAction:inspection?.nextAction});asking.value=true;try{await props.requestTemporaryAi(request)}finally{asking.value=false}}watch(()=>props.sessionId,()=>{purpose.value=``});watch(()=>props.busy,(busy,previous)=>{if(previous&&!busy&&enabled.value)resource.reload()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$29,[!props.archived&&(loadError.value||state.value===`attention`)?(openBlock(),createBlock(VAlert,{key:0,class:`project-preview__warning`,color:`warning-container`,density:`compact`,role:`status`,type:`warning`,variant:`flat`},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(loadError.value?`Project setup could not be read`:`Project setup needs attention`),1),loadError.value?(openBlock(),createElementBlock(`p`,_hoisted_2$23,toDisplayString(loadError.value),1)):(openBlock(),createElementBlock(Fragment,{key:1},[(openBlock(true),createElementBlock(Fragment,null,renderList(onboarding.value.inspection.diagnostics,(diagnostic,index)=>{return openBlock(),createElementBlock(`p`,{key:index},toDisplayString(diagnostic.message),1)}),128)),onboarding.value.inspection.nextAction===`update-genesis`?(openBlock(),createElementBlock(`p`,_hoisted_3$20,`Use an installation with a newer Genesis version to update setup.`)):createCommentVNode(``,true)],64)),createBaseVNode(`div`,_hoisted_4$16,[createVNode(VBtn,{disabled:!enabled.value||unref(resource).isFetching.value,size:`small`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>unref(resource).reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).isFetching.value?`Checking setup…`:`Recheck setup`),1)]),_:1},8,[`disabled`]),createVNode(Vibe64TemporaryAiFixAction_default,{disabled:askDisabled.value,pending:asking.value,title:`Open Temporary AI to resolve project setup`,onClick:_cache[1]||(_cache[1]=$event=>ask(`repair`))},null,8,[`disabled`,`pending`])])]),_:1})):createCommentVNode(``,true),!props.archived&&(environmentSetup.value?.missingKeys.length||environmentSetup.value?.warning)?(openBlock(),createBlock(VAlert,{key:1,class:`project-preview__warning`,color:`warning-container`,density:`compact`,role:`status`,type:`warning`,variant:`flat`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`h2`,{class:`text-title-medium`},`Set up your project's environment`,-1)),environmentSetup.value.warning?(openBlock(),createElementBlock(`p`,_hoisted_5$14,toDisplayString(environmentSetup.value.warning),1)):createCommentVNode(``,true),environmentSetup.value.missingKeys.length?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[8]||(_cache[8]=createBaseVNode(`p`,null,`This project requires environment values. Add them in Env, then recheck setup.`,-1)),createBaseVNode(`details`,null,[_cache[7]||(_cache[7]=createBaseVNode(`summary`,null,`Required configuration`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(environmentSetup.value.missingKeys,key=>{return openBlock(),createElementBlock(`li`,{key},[createBaseVNode(`code`,null,toDisplayString(key),1)])}),128))])])],64)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6$11,[createVNode(VBtn,{to:unref(projectAppPath)(unref(projectSlug),`/dashboard/env`),size:`small`,variant:`flat`,color:`primary`},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Open Env`,-1)])]),_:1},8,[`to`]),createVNode(VBtn,{disabled:!enabled.value||unref(resource).isFetching.value,size:`small`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>unref(resource).reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).isFetching.value?`Checking setup…`:`Recheck setup`),1)]),_:1},8,[`disabled`])])]),_:1})):createCommentVNode(``,true),showPreview.value?(openBlock(),createElementBlock(`div`,_hoisted_7$9,[renderSlot(_ctx.$slots,`default`,{},void 0,true)])):(openBlock(),createElementBlock(`section`,{key:3,class:`project-onboarding`,"aria-label":`Project setup`,"aria-busy":pending.value},[!onboarding.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`heading, paragraph, card`})):state.value===`new`?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[12]||(_cache[12]=createBaseVNode(`p`,{class:`project-onboarding__eyebrow`},`Your starting point`,-1)),_cache[13]||(_cache[13]=createBaseVNode(`h2`,null,`What would you like to build with?`,-1)),_cache[14]||(_cache[14]=createBaseVNode(`p`,null,`Choose a ready-made app, or describe your idea in the conversation.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(groups.value,group=>{return openBlock(),createElementBlock(`div`,{key:group.technology,class:`project-onboarding__group`},[createBaseVNode(`h3`,null,toDisplayString(group.label),1),createBaseVNode(`div`,_hoisted_9$7,[(openBlock(true),createElementBlock(Fragment,null,renderList(group.templates,template=>{return openBlock(),createElementBlock(`button`,{key:template.id,type:`button`,class:`project-onboarding__choice`,disabled:starterDisabled.value,onClick:$event=>apply(template)},[createBaseVNode(`strong`,null,toDisplayString(template.name),1),createBaseVNode(`span`,null,toDisplayString(template.description),1),groupsHaveMultipleSources.value?(openBlock(),createElementBlock(`small`,_hoisted_11$5,`Source: `+toDisplayString(template.namespace),1)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_12$5,toDisplayString(applying.value===template.id?`Preparing your starter…`:`Use this starter →`),1)],8,_hoisted_10$6)}),128))])])}),128)),!groups.value.length?(openBlock(),createElementBlock(`p`,_hoisted_13$4,`No starters are configured for this installation yet.`)):createCommentVNode(``,true),createVNode(VBtn,{disabled:askDisabled.value,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>ask(`create`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Start through conversation`,-1)])]),_:1},8,[`disabled`])],64)):state.value===`adoption`?(openBlock(),createElementBlock(Fragment,{key:2},[_cache[17]||(_cache[17]=createBaseVNode(`p`,{class:`project-onboarding__eyebrow`},`Bring your project`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`h2`,null,`Set up this existing project`,-1)),_cache[19]||(_cache[19]=createBaseVNode(`p`,null,`Tell the AI what this project does and what you want to run. It will work out the setup from your code and preserve your source and Git history.`,-1)),createVNode(VTextarea,{modelValue:purpose.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>purpose.value=$event),label:`What is this project?`,placeholder:`For example: a Python tool that processes invoices. I want to run its command line.`,rows:`3`,"auto-grow":``,disabled:askDisabled.value},null,8,[`modelValue`,`disabled`]),createBaseVNode(`div`,_hoisted_14$2,[createVNode(VBtn,{disabled:askDisabled.value||!purpose.value.trim(),color:`primary`,onClick:_cache[5]||(_cache[5]=$event=>ask(`adopt`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Set up project`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:askDisabled.value,variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>ask(`inspect`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Inspect it for me`,-1)])]),_:1},8,[`disabled`])])],64)):createCommentVNode(``,true),pending.value?(openBlock(),createElementBlock(`p`,_hoisted_15$2,toDisplayString(applying.value?`Adding the starter to this session…`:`Opening Temporary AI…`),1)):createCommentVNode(``,true)],8,_hoisted_8$9))])}}};var Vibe64ProjectOnboarding_default=_plugin_vue_export_helper_default(_sfc_main$34,[[`__scopeId`,`data-v-bdc764b2`]]);var _hoisted_1$28={class:`vibe64-learning-finished`,"aria-labelledby":`vibe64-learning-finished-title`,"data-test":`learning-finished`};var _hoisted_2$22={id:`vibe64-learning-finished-title`};var _hoisted_3$19={key:0};var _hoisted_4$15={key:1,class:`vibe64-learning-finished__hint`,role:`status`};var _hoisted_5$13={key:3,class:`vibe64-learning-finished__error`,role:`alert`};var _hoisted_6$10={class:`vibe64-learning-finished__actions`};var _sfc_main$33={__name:`Vibe64LearningFinished`,props:{learning:{type:Object,required:true},courses:{type:Object,required:true}},setup(__props){const props=__props;const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const passedNow=computed(()=>steps.value.filter(step=>props.learning.stepStatus(step.id)===`passed`).length);const busy=computed(()=>props.learning.state.busy);const summary=ref(null);const passedCount=computed(()=>summary.value?.passed??passedNow.value);const archivedWith=computed(()=>summary.value?.practice??Boolean(lesson.value?.practiceProjectSlug)?`its practice project and conversation`:`its conversation`);const finished=ref(false);const finishError=ref(``);let finishingFor=``;async function finish(){if(finished.value||busy.value)return;finishError.value=``;summary.value||=props.learning.finishSummary()||{passed:passedNow.value,practice:Boolean(lesson.value?.practiceProjectSlug)};if(await props.learning.finish(summary.value)){finished.value=true;props.courses.learningResource.reload()}else finishError.value=props.learning.state.attemptsError||`Finishing the lesson was not confirmed. Try again.`}watch(()=>props.learning.finished&&props.learning.state.attemptId,attemptId=>{if(!attemptId||finishingFor===attemptId)return;finishingFor=attemptId;finished.value=false;summary.value=null;finish()},{immediate:true});const pin=computed(()=>lesson.value?.attempt?.pin||null);const saved=computed(()=>{const value=toValue(props.courses.learningResource.data);return value?.ok===true&&value.available===true?value:null});const nextLesson=computed(()=>{const catalogue=toValue(props.courses.coursesResource.data);const course=catalogue?.ok===true&&Array.isArray(catalogue.courses)?catalogue.courses.find(value=>value?.courseId===pin.value?.course?.courseId&&value.release===pin.value?.course?.release):null;if(!course||!saved.value)return null;const next=courseProgress(course,saved.value.lessonProgress||[],saved.value.active||null,saved.value.history||[],{canTryPreviews:catalogue.canTryPreviews===true}).next;return next&&next.code!==pin.value?.lesson?.code?{course,lesson:next}:null});const startError=ref(``);const canStart=computed(()=>Boolean(finished.value&&nextLesson.value&&saved.value&&!toValue(props.courses.busy)));async function startNext(){if(!canStart.value)return;const{course,lesson:next}=nextLesson.value;startError.value=``;try{await props.learning.startLesson({courseId:course.courseId,release:course.release,lessonCode:next.code,expectedRevision:saved.value.revision},props.courses.startLesson)}catch(cause){startError.value=String(cause?.message||`The next lesson did not start. Try again from Courses.`)}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$28,[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`56`,class:`vibe64-learning-finished__mark`,"aria-hidden":`true`},null,8,[`icon`]),_cache[4]||(_cache[4]=createBaseVNode(`p`,{class:`vibe64-learning-finished__eyebrow`},`Lesson finished`,-1)),createBaseVNode(`h2`,_hoisted_2$22,toDisplayString(lesson.value?.title||lesson.value?.code),1),createBaseVNode(`p`,null,`You completed every required step: `+toDisplayString(passedCount.value)+` of `+toDisplayString(steps.value.length)+` steps passed.`,1),finished.value?(openBlock(),createElementBlock(`p`,_hoisted_3$19,`It is archived with `+toDisplayString(archivedWith.value)+`, under Courses → Archived.`,1)):!finishError.value?(openBlock(),createElementBlock(`p`,_hoisted_4$15,[createVNode(VProgressCircular,{indeterminate:``,size:`16`,width:`2`,class:`me-2`}),_cache[1]||(_cache[1]=createTextVNode(`Finishing the lesson… `,-1))])):createCommentVNode(``,true),finishError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`,role:`alert`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,disabled:Boolean(busy.value),"data-test":`learning-finished-retry`,onClick:finish},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Finish lesson`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(finishError.value)+` `,1)]),_:1})):createCommentVNode(``,true),startError.value?(openBlock(),createElementBlock(`p`,_hoisted_5$13,toDisplayString(startError.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6$10,[nextLesson.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,disabled:!canStart.value,loading:Boolean(toValue(__props.courses.starting)),"data-test":`learning-finished-next`,onClick:startNext},{default:withCtx(()=>[createTextVNode(` Next lesson: `+toDisplayString(nextLesson.value.lesson.title),1)]),_:1},8,[`disabled`,`loading`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-finished-courses`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.show({surface:`courses`}))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Back to courses `,-1)])]),_:1})])])}}};var Vibe64LearningFinished_default=_plugin_vue_export_helper_default(_sfc_main$33,[[`__scopeId`,`data-v-668305db`]]);var MAX_FILE_BYTES=1048576;var MAX_COMMAND_IDS$1=64;var MAX_PENDING_REQUESTS=64;var PROTOCOL_VERSION=1;var identityPattern=/^[a-zA-Z0-9-]{1,64}$/u;function object(value){return value!==null&&typeof value===`object`&&!Array.isArray(value)&&[Object.prototype,null].includes(Object.getPrototypeOf(value))}function exactKeys(value,names){return object(value)&&Object.keys(value).length===names.length&&names.every(name=>Object.hasOwn(value,name))}function text$4(value,maximum,multiline=false){return typeof value===`string`&&Boolean(value.trim())&&value.length<=maximum&&!(multiline?/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/u:/[\u0000-\u001f\u007f]/u).test(value)}function identity(value){return typeof value===`string`&&identityPattern.test(value)}function semanticSnapshot(value,states){if(!exactKeys(value,[`state`,`paused`,`labels`])||!states.has(value.state)||typeof value.paused!==`boolean`||!object(value.labels)||Object.keys(value.labels).length>32||Object.entries(value.labels).some(([name,label])=>!identity(name)||!text$4(label,256))||JSON.stringify(value).length>4096)throw new Error(`The diagram's saved semantic state is invalid. Reload its declared initial state.`);return structuredClone(value)}function validateResource(resource,view){const visual=resource?.visual;if(!object(visual)||visual.schemaVersion!==1||!identity(visual.id)||resource.id!==visual.id||!text$4(visual.title,256)||!text$4(visual.description,2e3,true)||!Array.isArray(visual.states)||!visual.states.length||visual.states.length>32||visual.states.some(state=>!identity(state))||new Set(visual.states).size!==visual.states.length||!visual.states.includes(visual.initialState)||!Array.isArray(visual.commands)||!visual.commands.length||visual.commands.length>32)throw new Error(`The verified diagram descriptor is missing or invalid.`);const states=new Set(visual.states);const commands=new Map;for(const command of visual.commands){if(!object(command)||!identity(command.name)||commands.has(command.name)||command.completionState!==`unchanged`&&!states.has(command.completionState)||!Array.isArray(command.parameters)||command.parameters.length>8)throw new Error(`The diagram declares an invalid command.`);const parameters=new Map;for(const parameter of command.parameters){if(!object(parameter)||!identity(parameter.name)||parameters.has(parameter.name)||typeof parameter.required!==`boolean`||!Number.isInteger(parameter.maxLength)||parameter.maxLength<1||parameter.maxLength>256)throw new Error(`The diagram declares an invalid command parameter.`);parameters.set(parameter.name,{required:parameter.required,maxLength:parameter.maxLength})}commands.set(command.name,{completionState:command.completionState,parameters})}function encodedFile(file){if(!object(file)||!text$4(file.path,1024)||file.encoding!==`base64`||typeof file.bytes!==`string`||file.bytes.length>Math.ceil(MAX_FILE_BYTES/3)*4)throw new Error(`Diagram files require bounded base64 bytes from the verified lesson reader.`);let bytes;try{bytes=view.atob(file.bytes)}catch{throw new Error(`Diagram file bytes are not valid base64.`)}if(!bytes.length||bytes.length>MAX_FILE_BYTES||view.btoa(bytes)!==file.bytes)throw new Error(`Diagram file bytes are empty, oversized or noncanonical.`);return file.bytes}return{visual:structuredClone(visual),states,commands,svg:encodedFile(resource.svg),controller:encodedFile(resource.controller)}}async function bootstrap(payload,loadController){let dispose;let claimed=false;window.addEventListener(`pagehide`,()=>dispose?.(),{once:true});window.addEventListener(`message`,async event=>{if(claimed||event.source!==parent||!event.data||Object.keys(event.data).sort().join(`,`)!==`init,playerInstanceId,protocolVersion,token,type`||event.data.type!==`vibe64-visual-init`||event.data.protocolVersion!==1||event.data.playerInstanceId!==payload.playerInstanceId||event.data.token!==payload.token||event.ports.length!==1)return;claimed=true;const port=event.ports[0];let moduleUrl;try{const decode=value=>new TextDecoder(`utf-8`,{fatal:true}).decode(Uint8Array.from(atob(value),character=>character.charCodeAt(0)));const documentSvg=new DOMParser().parseFromString(decode(payload.svg),`image/svg+xml`);const svg=documentSvg.documentElement;if(svg.localName!==`svg`||svg.namespaceURI!==`http://www.w3.org/2000/svg`||documentSvg.querySelector(`parsererror`))throw new Error(`The diagram SVG cannot be read.`);document.body.append(document.importNode(svg,true));moduleUrl=URL.createObjectURL(new Blob([decode(payload.controller)],{type:`text/javascript`}));const controller=await loadController(moduleUrl);if(typeof controller.mountVisual!==`function`)throw new Error(`The diagram controller has no mountVisual operation.`);dispose=controller.mountVisual(document.body.querySelector(`svg`),port,event.data.init)}catch(cause){port.postMessage({protocolVersion:1,playerInstanceId:payload.playerInstanceId,type:`bootstrap-failed`,description:String(cause.message||`Diagram initialization failed.`).slice(0,2e3)})}finally{if(moduleUrl)URL.revokeObjectURL(moduleUrl)}});parent.postMessage({type:`vibe64-visual-handshake`,protocolVersion:1,playerInstanceId:payload.playerInstanceId,token:payload.token},`*`)}function frameDocument(payload){const nonce=payload.token;return[`<!doctype html><html><head><meta charset="utf-8">`,`<meta http-equiv="Content-Security-Policy" content="${[`default-src 'none'`,`script-src 'nonce-${nonce}' blob:`,`style-src 'unsafe-inline'`,`connect-src 'none'`,`img-src 'none'`,`media-src 'none'`,`frame-src 'none'`,`object-src 'none'`,`base-uri 'none'`,`form-action 'none'`].join(`; `)}">`,`<meta name="referrer" content="no-referrer">`,`<style>html,body{margin:0;height:100%;overflow:hidden}svg{display:block;width:100%;height:100%}</style></head><body>`,`<script nonce="${nonce}">(${bootstrap.toString()})(${JSON.stringify(payload)}, url => import(url));<\/script>`,`</body></html>`].join(``)}function createTrainingVisualPlayer({iframe,resource,attemptId,reducedMotion=false,snapshot:initialSnapshot,onState,timeoutMs=5e3}={}){const view=iframe?.ownerDocument?.defaultView;if(!view||!identity(attemptId)||typeof reducedMotion!==`boolean`||!Number.isInteger(timeoutMs)||timeoutMs<1||timeoutMs>3e4)throw new Error(`Mount a diagram in its iframe for an admitted attempt with a bounded timeout.`);const{visual,states,commands,svg,controller}=validateResource(resource,view);const pending=new Map;const commandInputs=new Map;let current;let closed=false;let savedSnapshot=initialSnapshot===void 0?void 0:semanticSnapshot(initialSnapshot,states);let display={state:savedSnapshot?.state??visual.initialState,description:visual.description};let status={attemptId,playerInstanceId:``,phase:`loading`,...display,error:``};function publish(patch){status={...status,...patch};try{(onState?.(structuredClone(status)))?.catch?.(()=>{})}catch{}}function settle(id,error,result){const request=pending.get(id);if(!request)return;pending.delete(id);clearTimeout(request.timer);if(error)request.reject(error);else request.resolve(result)}function retire(cause){const previous=current;current=void 0;if(!previous)return;clearTimeout(previous.timer);view.removeEventListener(`message`,previous.handshake);if(previous.port){previous.port.onmessage=null;previous.port.close()}previous.rejectReady(cause);for(const id of[...pending.keys()])settle(id,cause);iframe.srcdoc=``}function fail(message){retire(new Error(message));publish({phase:`failed`,error:message})}function request(kind,id,body,command){if(!current?.ready||closed)return Promise.reject(new Error(`The diagram is not ready. Reload it before sending a command.`));if(pending.size>=MAX_PENDING_REQUESTS)return Promise.reject(new Error(`The diagram has too many pending requests.`));const instance=current;let resolve;let reject;const promise=new Promise((yes,no)=>{resolve=yes;reject=no});const timer=setTimeout(()=>{if(current===instance&&pending.has(id))fail(`The diagram did not confirm its result in time. Reload its saved state; the command will not be replayed.`)},timeoutMs);pending.set(id,{kind,promise,resolve,reject,timer,command,accepted:false});try{instance.port.postMessage({protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,...body})}catch{fail(`The diagram channel is unavailable. Reload its saved state.`)}return promise}function snapshot(){const requestId=view.crypto.randomUUID();return request(`snapshot`,requestId,{type:`snapshot`,requestId})}function receive(instance,value){if(closed||current!==instance||!object(value)||value.protocolVersion!==PROTOCOL_VERSION||value.playerInstanceId!==instance.id)return;if(value.type===`bootstrap-failed`){if(!instance.ready&&exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`description`])&&text$4(value.description,2e3,true))fail(value.description);return}if(value.type===`ready`){if(instance.ready||!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commands`,`state`,`description`])||value.state!==instance.initialState||!text$4(value.description,2e3,true)||!Array.isArray(value.commands)||value.commands.length!==commands.size||new Set(value.commands).size!==commands.size||value.commands.some(name=>!commands.has(name)))return;instance.ready=true;clearTimeout(instance.timer);display={state:value.state,description:value.description};publish({phase:`ready`,...display,error:``});instance.resolveReady(structuredClone(status));return}if(!instance.ready||!states.has(value.state)||!identity(value.commandId??value.requestId))return;const id=value.commandId??value.requestId;const operation=pending.get(id);if(!operation)return;if(operation.kind===`snapshot`){if(value.type!==`snapshot`||!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`requestId`,`state`,`description`,`paused`,`labels`])||!text$4(value.description,2e3,true))return;let semantic;try{semantic=semanticSnapshot({state:value.state,paused:value.paused,labels:value.labels},states)}catch{return}savedSnapshot=semantic;display={state:value.state,description:value.description};publish(display);settle(id,null,structuredClone(semantic));return}if(value.type===`accepted`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`]))return;operation.accepted=true;operation.acceptedState=value.state;publish({phase:`accepted`,error:``});return}if(value.type===`completed`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`,`description`])||!text$4(value.description,2e3,true)||!operation.accepted&&!operation.command.retry||operation.command.completionState!==`unchanged`&&value.state!==operation.command.completionState||operation.command.completionState===`unchanged`&&operation.accepted&&value.state!==operation.acceptedState)return;publish({phase:`ready`,error:``});settle(id,null,structuredClone(value))}else if(value.type===`failed`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`,`code`,`description`])||!identity(value.code)||!text$4(value.description,2e3,true))return;publish({phase:`ready`,error:value.description});settle(id,Object.assign(new Error(value.description),{code:value.code}))}else return;snapshot().catch(()=>{})}function command({commandId,name,parameters={}}={}){const declared=commands.get(name);if(!identity(commandId)||!declared||!object(parameters)||Object.keys(parameters).some(key=>!declared.parameters.has(key)))return Promise.reject(new Error(`Choose a declared diagram command and bounded parameters.`));for(const[key,parameter]of declared.parameters){if(parameters[key]===void 0&&!parameter.required)continue;if(!text$4(parameters[key],parameter.maxLength))return Promise.reject(new Error(`Diagram parameter ${key} is missing or invalid.`))}const input=JSON.stringify([name,Object.keys(parameters).sort().map(key=>[key,parameters[key]])]);const previous=commandInputs.get(commandId);if(previous&&previous.input!==input)return Promise.reject(new Error(`This diagram command ID already names different input.`));if(pending.has(commandId))return pending.get(commandId).promise;if(!current?.ready||closed)return Promise.reject(new Error(`The diagram is not ready. Reload it before sending a command.`));if(previous&&previous.instanceId!==current.id)return Promise.reject(new Error(`The original diagram instance and retry receipt are gone. Use a new ID only for an intentional new command.`));if(!previous&&commandInputs.size>=MAX_COMMAND_IDS$1)return Promise.reject(new Error(`This diagram reached its 64 command-ID limit. Reopen it explicitly; no retry identity was discarded.`));if(!previous)commandInputs.set(commandId,{input,instanceId:current.id});return request(`command`,commandId,{type:`command`,commandId,name,parameters:structuredClone(parameters)},{retry:Boolean(previous),completionState:declared.completionState})}function restore(value=savedSnapshot,motion=reducedMotion){if(closed)return Promise.reject(new Error(`The diagram player is closed.`));if(typeof motion!==`boolean`)throw new Error(`Choose a boolean reduced-motion preference for the diagram.`);const semantic=value===void 0?void 0:semanticSnapshot(value,states);reducedMotion=motion;retire(new Error(`The diagram instance changed; unfinished commands were not replayed.`));const instance={id:view.crypto.randomUUID(),token:view.crypto.randomUUID(),ready:false,initialState:semantic?.state??visual.initialState};const ready=new Promise((resolve,reject)=>{instance.resolveReady=resolve;instance.rejectReady=reject});ready.catch(()=>{});instance.handshake=event=>{const value=event.data;if(current!==instance||event.source!==iframe.contentWindow||instance.port||!exactKeys(value,[`type`,`protocolVersion`,`playerInstanceId`,`token`])||value.type!==`vibe64-visual-handshake`||value.protocolVersion!==PROTOCOL_VERSION||value.playerInstanceId!==instance.id||value.token!==instance.token)return;const channel=new view.MessageChannel;instance.port=channel.port1;instance.port.onmessage=event=>receive(instance,event.data);instance.port.start();try{iframe.contentWindow.postMessage({type:`vibe64-visual-init`,protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,token:instance.token,init:{protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,initialState:instance.initialState,reducedMotion,...semantic?{snapshot:semantic}:{}}},`*`,[channel.port2])}catch{channel.port2.close();fail(`The diagram channel could not be transferred. Reload its saved state.`)}view.removeEventListener(`message`,instance.handshake)};current=instance;savedSnapshot=semantic;display={state:instance.initialState,description:visual.description};publish({playerInstanceId:instance.id,phase:`loading`,...display,error:``});instance.timer=setTimeout(()=>{if(current===instance)fail(`The diagram did not become ready. Reload it or ask the owner to check its verified controller.`)},timeoutMs);view.addEventListener(`message`,instance.handshake);iframe.setAttribute(`sandbox`,`allow-scripts`);iframe.setAttribute(`referrerpolicy`,`no-referrer`);iframe.removeAttribute(`allow`);iframe.removeAttribute(`src`);iframe.srcdoc=frameDocument({playerInstanceId:instance.id,token:instance.token,svg,controller});return ready}function dispose(){if(closed)return;closed=true;retire(new Error(`The diagram player closed; unfinished commands were not replayed.`));publish({phase:`disposed`})}return{ready:restore(savedSnapshot),command,snapshot,restore,dispose,get state(){return structuredClone(status)}}}var _hoisted_1$27=[`aria-label`];var _hoisted_2$21={class:`vibe64-training-visual__frame`};var _hoisted_3$18={class:`vibe64-training-visual__bar`};var _hoisted_4$14={class:`vibe64-training-visual__bar-title`};var _hoisted_5$12={class:`vibe64-training-visual__canvas`};var _hoisted_6$9=[`title`];var _hoisted_7$8={key:0,class:`vibe64-training-visual__error`,role:`alert`};var _hoisted_8$8={class:`text-body-medium`};var _sfc_main$32={__name:`TrainingVisualPlayer`,props:{resource:{type:Object,required:true},attemptId:{type:String,required:true},snapshot:{type:Object,default:void 0},reducedMotion:{type:Boolean,default:void 0}},emits:[`state`,`error`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const frame=ref(null);const state=ref({phase:`loading`,description:props.resource.visual?.description||``,error:``});const title=computed(()=>props.resource.visual?.title||`Lesson diagram`);let player;function mount(iframe){player?.dispose();player=void 0;if(!iframe)return;try{player=createTrainingVisualPlayer({iframe,resource:toRaw(props.resource),attemptId:props.attemptId,snapshot:toRaw(props.snapshot),reducedMotion:motionPreference(),onState(value){state.value=value;emit(`state`,value);if(value.error)emit(`error`,value.error)}})}catch(cause){state.value={phase:`failed`,description:props.resource.visual?.description||``,error:cause.message};emit(`error`,cause.message)}}watch([frame,()=>props.resource,()=>props.attemptId],([iframe])=>mount(iframe),{immediate:true,flush:`post`});function motionPreference(){return props.reducedMotion??frame.value.ownerDocument.defaultView.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function requirePlayer(){if(!player)throw new Error(`The diagram has not mounted.`);return player}function reload(){if(!player)return mount(frame.value);return player.restore(void 0,motionPreference()).catch(()=>{})}onBeforeUnmount(()=>player?.dispose());__expose({command:value=>requirePlayer().command(toRaw(value)),snapshot:()=>requirePlayer().snapshot(),restore:value=>requirePlayer().restore(toRaw(value),motionPreference()),dispose:()=>player?.dispose()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`vibe64-training-visual`,`is-${state.value.phase}`]),"aria-label":title.value},[createBaseVNode(`div`,_hoisted_2$21,[createBaseVNode(`div`,_hoisted_3$18,[_cache[0]||(_cache[0]=createBaseVNode(`svg`,{class:`vibe64-training-visual__bar-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[createBaseVNode(`path`,{d:`M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2m0 16H5V5h14v14M7 15l3-4 2 3 3-4 2 5H7Z`})],-1)),createBaseVNode(`span`,_hoisted_4$14,toDisplayString(title.value),1)]),createBaseVNode(`div`,_hoisted_5$12,[createBaseVNode(`iframe`,{ref_key:`frame`,ref:frame,title:title.value,sandbox:`allow-scripts`,referrerpolicy:`no-referrer`},null,8,_hoisted_6$9),state.value.phase===`loading`?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`image`,class:`vibe64-training-visual__loading`})):createCommentVNode(``,true)])]),withDirectives(createBaseVNode(`p`,{class:`vibe64-training-visual__caption text-body-medium`,role:`status`},toDisplayString(state.value.description),513),[[vShow,state.value.description]]),state.value.error?(openBlock(),createElementBlock(`div`,_hoisted_7$8,[_cache[2]||(_cache[2]=createBaseVNode(`svg`,{class:`vibe64-training-visual__error-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[createBaseVNode(`path`,{d:`M13 13h-2V7h2m0 10h-2v-2h2M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Z`})],-1)),createBaseVNode(`p`,_hoisted_8$8,toDisplayString(state.value.error),1),createVNode(VBtn,{"min-height":`48`,rounded:`pill`,variant:`tonal`,onClick:reload},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload diagram`,-1)])]),_:1})])):createCommentVNode(``,true)],10,_hoisted_1$27)}}};var TrainingVisualPlayer_default=_plugin_vue_export_helper_default(_sfc_main$32,[[`__scopeId`,`data-v-f4a57cf8`]]);var _hoisted_1$26={key:0,class:`vibe64-learning-step`};var _hoisted_2$20={class:`vibe64-learning-step__eyebrow`};var _hoisted_3$17=[`id`];var _hoisted_4$13={key:0,class:`vibe64-learning-step__note`,role:`status`};var _hoisted_5$11={key:1,class:`vibe64-learning-step__visual`,"aria-label":`Diagram`};var _hoisted_6$8={key:2,class:`vibe64-learning-step__error`,role:`alert`};var _hoisted_7$7={key:2,class:`vibe64-learning-step__check`,"aria-label":`Question`};var _hoisted_8$7={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-answer-kept`};var _hoisted_9$6={key:1,class:`vibe64-learning-step__hint`};var _hoisted_10$5={key:2,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_11$4={key:3,class:`vibe64-learning-step__check`,"aria-label":`Automatic check`};var _hoisted_12$4={key:0};var _hoisted_13$3={key:1};var _hoisted_14$1={key:2,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_15$1={key:4,class:`vibe64-learning-step__check`,"aria-label":`Review`};var _hoisted_16$1={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-review-saved`};var _hoisted_17$1={key:0,class:`vibe64-learning-step__hint`,role:`status`};var _hoisted_18={key:1,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_19={key:5,class:`vibe64-learning-step__check`,"aria-label":`Self check`};var _hoisted_20={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-done-kept`};var _hoisted_21={key:8,class:`vibe64-learning-step__error`,role:`alert`};var _hoisted_22={class:`vibe64-learning-step__actions`};var _hoisted_23={key:9,class:`vibe64-learning-step__pager`};var _hoisted_24={class:`vibe64-learning-step__pager-end`};var MAX_COMMAND_IDS=64;var _sfc_main$31={__name:`Vibe64LearningStep`,props:mergeModels({learning:{type:Object,required:true},headingId:{type:String,default:``}},{"error":{type:String,default:``},"errorModifiers":{}}),emits:mergeModels([`return`],[`update:error`]),setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const actionError=useModel(__props,`error`);const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const step=computed(()=>props.learning.currentStep.value);const index=computed(()=>steps.value.findIndex(value=>value.id===step.value?.id));const ended=computed(()=>Boolean(lesson.value?.attempt?.ended));const busy=computed(()=>props.learning.state.busy);const statusOf=stepId=>props.learning.stepStatus(stepId);const kind=computed(()=>step.value?.check?.kind||`none`);const selected=ref([]);const savedSelection=computed(()=>{const passed=(lesson.value?.results||[]).filter(result=>result?.stepId===step.value?.id&&result.kind===`choice`&&result.outcome===`passed`&&Array.isArray(result.evidence?.selected));return passed.length?passed.at(-1).evidence.selected.filter(Number.isSafeInteger):null});watch([()=>step.value?.id,()=>JSON.stringify(savedSelection.value)],([stepId],[previousStepId]=[])=>{if(savedSelection.value)selected.value=[...savedSelection.value];else if(stepId!==previousStepId)selected.value=[]},{immediate:true});function toggleOption(optionIndex){selected.value=selected.value.includes(optionIndex)?selected.value.filter(value=>value!==optionIndex):[...selected.value,optionIndex]}const visualResource=shallowRef(null);const visualError=ref(``);const visualKey=ref(0);const player=ref(null);const playing=ref(false);let usedIds=0;const visuals=new Map;watch([()=>props.learning.state.attemptId,()=>step.value?.visual?.id],async([attemptId,visualId])=>{visualResource.value=null;visualError.value=``;usedIds=0;if(!attemptId||!visualId)return;const key=`${attemptId}\n${visualId}`;try{if(!visuals.has(key))visuals.set(key,getHttpWebClient().request(resolveStudioRequestUrl(VIBE64_LEARNING_ROUTES.visual(attemptId,visualId)),{method:`GET`}));const result=await visuals.get(key);if(props.learning.state.attemptId!==attemptId||step.value?.visual?.id!==visualId)return;if(result?.id!==visualId||result.visual?.id!==visualId)throw new Error(`The lesson diagram did not match this step.`);visualResource.value=result}catch(cause){visuals.delete(key);if(step.value?.visual?.id===visualId)visualError.value=String(cause?.message||`The lesson diagram could not be read.`)}},{immediate:true});async function play(){const entries=step.value?.visual?.play||[];if(!visualResource.value||playing.value)return;playing.value=true;visualError.value=``;try{if(usedIds+entries.length>MAX_COMMAND_IDS){visualKey.value+=1;usedIds=0;await nextTick()}if(!player.value)throw new Error(`The diagram has not mounted.`);await player.value.restore(void 0);for(const entry of entries){usedIds+=1;await player.value.command({commandId:globalThis.crypto.randomUUID(),name:entry.name,parameters:{...entry.parameters||{}}})}}catch(cause){visualError.value=String(cause?.message||`The diagram could not play.`)}finally{playing.value=false}}const checkReason=ref(``);watch([()=>props.learning.state.attemptId,()=>step.value?.id],()=>{checkReason.value=``});async function runCheck(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.runCheck(stepId);if(step.value?.id===stepId)checkReason.value=checkNote(result)}async function runReview(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.review(stepId);if(step.value?.id===stepId)checkReason.value=reviewRunNote(result,props.learning.state.lessonError)}async function answer(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.answer(stepId,selected.value);if(step.value?.id===stepId)checkReason.value=checkNote(result)}async function showMe(){actionError.value=``;let error=``;try{const result=await props.learning.showMe(step.value.id);if(result?.guide&&result.guide.shown===false)error=`That place is not visible on this page. Open your practice project, then choose Show me again.`}catch(cause){error=String(cause?.message||`That place could not be shown.`)}if(error){actionError.value=error;emit(`return`)}}const stuckOffered=computed(()=>Boolean(!ended.value&&statusOf(step.value?.id)!==`passed`&&([`auto`,`fact`,`review`].includes(kind.value)||step.value?.beats?.some(beat=>beat.kind===`do`))));function askStuck(){actionError.value=``;try{props.learning.stuck(step.value.id)}catch(cause){actionError.value=String(cause?.message||`Colleague could not be asked.`)}}function teachMe(){actionError.value=``;try{props.learning.teachMe(step.value.id)}catch(cause){actionError.value=String(cause?.message||`Colleague could not be asked.`)}}const go=offset=>{const next=steps.value[index.value+offset];if(next)props.learning.selectStep(next.id)};const readingDone=computed(()=>kind.value===`none`&&statusOf(step.value?.id)===`passed`);async function markRead(){const stepId=step.value.id;if(await props.learning.done(stepId)&&step.value?.id===stepId)go(1)}return(_ctx,_cache)=>{return step.value?(openBlock(),createElementBlock(`div`,_hoisted_1$26,[createBaseVNode(`p`,_hoisted_2$20,[createTextVNode(`Step `+toDisplayString(index.value+1)+` of `+toDisplayString(steps.value.length),1),!step.value.required?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · optional`)],64)):createCommentVNode(``,true)]),createBaseVNode(`h2`,{id:__props.headingId||void 0},toDisplayString(step.value.title),9,_hoisted_3$17),ended.value?(openBlock(),createElementBlock(`p`,_hoisted_4$13,[_cache[3]||(_cache[3]=createTextVNode(` This lesson has ended. You can read it; it is kept under Archived. To do it again, start it from Courses. `,-1)),createVNode(VBtn,{variant:`text`,"min-height":`48`,"data-test":`learning-ended-courses`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.show({surface:`courses`}))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Go to Courses`,-1)])]),_:1})])):createCommentVNode(``,true),createVNode(Vibe64LearningMarkdown_default,{text:step.value.bodyText||``},null,8,[`text`]),step.value.visual?(openBlock(),createElementBlock(`section`,_hoisted_5$11,[visualResource.value?(openBlock(),createBlock(unref(TrainingVisualPlayer_default),{key:`${step.value.visual.id}:${visualKey.value}`,ref_key:`player`,ref:player,resource:visualResource.value,"attempt-id":__props.learning.state.attemptId},null,8,[`resource`,`attempt-id`])):!visualError.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`image`,"aria-label":`Loading the diagram`})):createCommentVNode(``,true),visualError.value?(openBlock(),createElementBlock(`p`,_hoisted_6$8,toDisplayString(visualError.value),1)):createCommentVNode(``,true),step.value.visual.play?.length?(openBlock(),createBlock(VBtn,{key:3,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-play`,disabled:!visualResource.value,loading:playing.value,onClick:play},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Play `,-1)])]),_:1},8,[`disabled`,`loading`])):createCommentVNode(``,true)])):createCommentVNode(``,true),!ended.value&&kind.value===`choice`?(openBlock(),createElementBlock(`section`,_hoisted_7$7,[createBaseVNode(`h3`,null,toDisplayString(step.value.check.question),1),statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_8$7,`You already passed this question, so answers are not checked again.`)):(openBlock(),createElementBlock(`p`,_hoisted_9$6,`Select every correct option, then choose Check answer.`)),(openBlock(true),createElementBlock(Fragment,null,renderList(step.value.check.options,(option,optionIndex)=>{return openBlock(),createBlock(VCheckbox,{key:optionIndex,"model-value":selected.value.includes(optionIndex),label:option,"hide-details":``,density:`comfortable`,"onUpdate:modelValue":$event=>toggleOption(optionIndex)},null,8,[`model-value`,`label`,`onUpdate:modelValue`])}),128)),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-answer`,disabled:!selected.value.length||Boolean(busy.value)||statusOf(step.value.id)===`passed`,loading:busy.value===`answer:${step.value.id}`,onClick:answer},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Check answer `,-1)])]),_:1},8,[`disabled`,`loading`]),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_10$5,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)])):!ended.value&&(kind.value===`auto`||kind.value===`fact`)?(openBlock(),createElementBlock(`section`,_hoisted_11$4,[step.value.check.files?.length?(openBlock(),createElementBlock(`p`,_hoisted_12$4,`Make this change yourself in Dashboard → Files. Saving does not check it: press Check now when you are ready.`)):kind.value===`auto`?(openBlock(),createElementBlock(`p`,_hoisted_13$3,`This step is checked automatically when you do it in your practice project.`)):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-check`,disabled:Boolean(busy.value),loading:busy.value===`check:${step.value.id}`,onClick:runCheck},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Check now `,-1)])]),_:1},8,[`disabled`,`loading`]),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_14$1,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)])):!ended.value&&kind.value===`review`?(openBlock(),createElementBlock(`section`,_hoisted_15$1,[createBaseVNode(`p`,null,[_cache[7]||(_cache[7]=createTextVNode(`Your AI reviews your work in the practice project against this: `,-1)),createBaseVNode(`strong`,null,toDisplayString(step.value.check.rubric),1)]),statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_16$1,toDisplayString(__props.learning.reviewNote(__props.learning.savedReview(step.value.id))||`Passed ✓`),1)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-review`,disabled:Boolean(busy.value),loading:busy.value===`review:${step.value.id}`,onClick:runReview},{default:withCtx(()=>[createTextVNode(toDisplayString(checkReason.value?`Check again`:`Check my work`),1)]),_:1},8,[`disabled`,`loading`]),busy.value===`review:${step.value.id}`?(openBlock(),createElementBlock(`p`,_hoisted_17$1,`Checking your work with your AI…`)):createCommentVNode(``,true),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_18,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)],64))])):!ended.value&&kind.value===`self`?(openBlock(),createElementBlock(`section`,_hoisted_19,[statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_20,`You already passed this step, so it does not need to be marked done again.`)):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-done`,disabled:Boolean(busy.value)||statusOf(step.value.id)===`passed`,loading:busy.value===`done:${step.value.id}`,onClick:_cache[1]||(_cache[1]=$event=>__props.learning.done(step.value.id))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Done `,-1)])]),_:1},8,[`disabled`,`loading`])])):createCommentVNode(``,true),kind.value!==`none`?(openBlock(),createElementBlock(`p`,{key:6,class:normalizeClass([`vibe64-learning-step__status`,`is-${statusOf(step.value.id)}`]),role:`status`,"data-test":`learning-step-status`},toDisplayString(unref(STEP_STATUS_LABELS)[statusOf(step.value.id)]),3)):readingDone.value?(openBlock(),createElementBlock(Fragment,{key:7},[_cache[9]||(_cache[9]=createBaseVNode(`p`,{class:`vibe64-learning-step__status is-passed`,role:`status`,"data-test":`learning-step-status`},`Done`,-1)),_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-learning-step__hint`,"data-test":`learning-mark-read-kept`},`You marked this step done.`,-1))],64)):createCommentVNode(``,true),actionError.value?(openBlock(),createElementBlock(`p`,_hoisted_21,toDisplayString(actionError.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_22,[(step.value.guide||step.value.beats?.length)&&!ended.value?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-show-me`,onClick:showMe},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Show me`,-1)])]),_:1})):createCommentVNode(``,true),!ended.value?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-teach-me`,onClick:teachMe},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Teach me`,-1)])]),_:1})):createCommentVNode(``,true),stuckOffered.value?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-stuck`,onClick:askStuck},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`I'm stuck`,-1)])]),_:1})):createCommentVNode(``,true)]),renderSlot(_ctx.$slots,`after-actions`,{},void 0,true),!ended.value&&kind.value===`none`&&!readingDone.value?(openBlock(),createElementBlock(`div`,_hoisted_23,[createBaseVNode(`span`,_hoisted_24,[createVNode(VBtn,{color:`primary`,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-mark-read`,disabled:Boolean(busy.value),loading:busy.value===`done:${step.value.id}`,onClick:markRead},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Mark as done`,-1)])]),_:1},8,[`disabled`,`loading`])])])):createCommentVNode(``,true)])):createCommentVNode(``,true)}}};var Vibe64LearningStep_default=_plugin_vue_export_helper_default(_sfc_main$31,[[`__scopeId`,`data-v-2ec10a1c`]]);var _hoisted_1$25={class:`vibe64-learning-reader-frame`};var _hoisted_2$19=[`aria-busy`];var _hoisted_3$16={class:`vibe64-learning-reader__steps`,"aria-label":`Lesson steps`};var _hoisted_4$12={class:`vibe64-learning-reader__lesson`};var _hoisted_5$10={class:`vibe64-learning-reader__code`};var _hoisted_6$7=[`aria-current`,`data-step-id`,`onClick`];var _hoisted_7$6={class:`vibe64-learning-reader__step-mark`,"aria-hidden":`true`};var _hoisted_8$6={class:`vibe64-learning-reader__step-title`};var _hoisted_9$5={class:`vibe64-learning-reader__step-status`};var _hoisted_10$4={key:0,class:`vibe64-learning-reader__summary`};var _hoisted_11$3={key:0,class:`vibe64-learning-reader__complete`,role:`status`};var _hoisted_12$3=[`aria-labelledby`];var _hoisted_13$2={key:0,class:`vibe64-learning-reader__notes`};var _sfc_main$30={__name:`Vibe64LearningReader`,props:{learning:{type:Object,required:true},visible:{type:Boolean,default:true}},emits:[`return`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const step=computed(()=>props.learning.currentStep.value);const statusOf=stepId=>props.learning.stepStatus(stepId);const requiredDone=computed(()=>props.learning.complete);const body=ref(null);let restoring=false;async function restoreScroll(){await nextTick();if(!body.value)return;restoring=true;body.value.scrollTop=props.learning.state.scroll||0;requestAnimationFrameSafe(()=>{restoring=false})}function requestAnimationFrameSafe(callback){if(globalThis.requestAnimationFrame)globalThis.requestAnimationFrame(callback);else setTimeout(callback,0)}watch([()=>step.value?.id,()=>props.visible],([,shown])=>{if(shown)restoreScroll()},{immediate:true});let scrollTimer=null;function onScroll(){if(restoring||!body.value)return;clearTimeout(scrollTimer);const top=body.value.scrollTop;scrollTimer=setTimeout(()=>props.learning.setScroll(top),200)}onBeforeUnmount(()=>clearTimeout(scrollTimer));const stepList=ref(null);watch([()=>step.value?.id,()=>props.visible],async([,shown])=>{if(!shown)return;await nextTick();revealCurrentStep(stepList.value)},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$25,[createBaseVNode(`div`,{class:`vibe64-learning-reader`,"aria-busy":__props.learning.state.loading},[__props.learning.state.lessonError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,rounded:`lg`,class:`vibe64-learning-reader__alert`,role:`alert`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.loadLesson())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(__props.learning.state.lessonError)+` `,1)]),_:1})):createCommentVNode(``,true),!lesson.value&&__props.learning.state.loading?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`heading, paragraph, paragraph`,"aria-label":`Loading the lesson`})):lesson.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`nav`,_hoisted_3$16,[createBaseVNode(`p`,_hoisted_4$12,[createBaseVNode(`span`,_hoisted_5$10,toDisplayString(lesson.value.code),1),createBaseVNode(`strong`,null,toDisplayString(lesson.value.title),1)]),createBaseVNode(`ol`,{ref_key:`stepList`,ref:stepList},[(openBlock(true),createElementBlock(Fragment,null,renderList(steps.value,(value,position)=>{return openBlock(),createElementBlock(`li`,{key:value.id},[createBaseVNode(`button`,{type:`button`,class:normalizeClass([`vibe64-learning-reader__step`,[`is-${statusOf(value.id)}`,{"is-current":value.id===step.value?.id}]]),"aria-current":value.id===step.value?.id?`step`:void 0,"data-step-id":value.id,onClick:$event=>__props.learning.selectStep(value.id)},[createBaseVNode(`span`,_hoisted_7$6,toDisplayString(statusOf(value.id)===`passed`?`✓`:position+1),1),createBaseVNode(`span`,_hoisted_8$6,toDisplayString(value.title),1),createBaseVNode(`span`,_hoisted_9$5,toDisplayString(value.required?unref(STEP_STATUS_LABELS)[statusOf(value.id)]:statusOf(value.id)===`passed`?`Done`:`Optional`),1)],10,_hoisted_6$7)])}),128))],512),requiredDone.value?(openBlock(),createElementBlock(`div`,_hoisted_10$4,[requiredDone.value?(openBlock(),createElementBlock(`p`,_hoisted_11$3,[..._cache[4]||(_cache[4]=[createBaseVNode(`span`,{class:`vibe64-learning-reader__complete-long`},`Every required step is passed. This lesson is complete.`,-1),createBaseVNode(`span`,{class:`vibe64-learning-reader__complete-short`},`✓ Lesson complete`,-1)])])):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-finish`,onClick:_cache[1]||(_cache[1]=$event=>__props.learning.showFinished())},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Lesson finished `,-1)])]),_:1})])):createCommentVNode(``,true)]),step.value?(openBlock(),createElementBlock(`article`,{key:0,ref_key:`body`,ref:body,class:`vibe64-learning-reader__body`,"aria-labelledby":`vibe64-learning-step-${step.value.id}`,onScrollPassive:onScroll},[createVNode(Vibe64LearningStep_default,{learning:__props.learning,"heading-id":`vibe64-learning-step-${step.value.id}`,onReturn:_cache[2]||(_cache[2]=$event=>emit(`return`))},{"after-actions":withCtx(()=>[lesson.value.notesText?(openBlock(),createElementBlock(`details`,_hoisted_13$2,[_cache[6]||(_cache[6]=createBaseVNode(`summary`,null,`Lesson notes`,-1)),createVNode(Vibe64LearningMarkdown_default,{text:lesson.value.notesText},null,8,[`text`])])):createCommentVNode(``,true)]),_:1},8,[`learning`,`heading-id`])],40,_hoisted_12$3)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],8,_hoisted_2$19)])}}};var Vibe64LearningReader_default=_plugin_vue_export_helper_default(_sfc_main$30,[[`__scopeId`,`data-v-dbdb5c81`]]);var _hoisted_1$24={class:`vibe64-learning-lesson-pane`,"aria-label":`Lesson`,"data-test":`learning-lesson-pane`,"data-vibe64-guide-pane":`lesson`};var _hoisted_2$18={key:0,class:`vibe64-learning-lesson-pane__scroll`};var _sfc_main$29={__name:`Vibe64LearningLessonPane`,props:{visible:{type:Boolean,default:true}},setup(__props){const props=__props;const learning=useVibe64Learning();const finished=computed(()=>Boolean(learning.state.finished&&learning.lesson.value));const courses=useVibe64LearningCourses({active:computed(()=>props.visible&&finished.value)});const flush=()=>learning.flushReader();onMounted(()=>globalThis.addEventListener(`pagehide`,flush));onBeforeUnmount(()=>{globalThis.removeEventListener(`pagehide`,flush);flush()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$24,[finished.value?(openBlock(),createElementBlock(`div`,_hoisted_2$18,[createVNode(Vibe64LearningFinished_default,{learning:unref(learning),courses:unref(courses)},null,8,[`learning`,`courses`])])):(openBlock(),createBlock(Vibe64LearningReader_default,{key:1,learning:unref(learning),visible:__props.visible,onReturn:_cache[0]||(_cache[0]=$event=>unref(learning).openLesson())},null,8,[`learning`,`visible`]))])}}};var Vibe64LearningLessonPane_default=_plugin_vue_export_helper_default(_sfc_main$29,[[`__scopeId`,`data-v-e622ed16`]]);var _hoisted_1$23={class:`vibe64-lesson-sheet`,"data-test":`lesson-sheet`};var _hoisted_2$17={class:`vibe64-lesson-sheet__header`};var _sfc_main$28={__name:`Vibe64LessonSheet`,setup(__props){const learning=useVibe64Learning();return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$23,[createBaseVNode(`header`,_hoisted_2$17,[createVNode(VIcon,{icon:unref(mdiSchoolOutline),size:`18`},null,8,[`icon`]),_cache[2]||(_cache[2]=createBaseVNode(`span`,{class:`vibe64-lesson-sheet__title`},`Lesson`,-1)),createVNode(VBtn,{class:`vibe64-lesson-sheet__hide`,variant:`tonal`,rounded:`pill`,size:`small`,"min-height":`32`,"prepend-icon":unref(mdiChevronUp),"data-test":`lesson-sheet-hide`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).hideLesson())},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Hide lesson `,-1)])]),_:1},8,[`prepend-icon`])]),createVNode(Vibe64LearningLessonPane_default,{class:`vibe64-lesson-sheet__pane`})])}}};var Vibe64LessonSheet_default=_plugin_vue_export_helper_default(_sfc_main$28,[[`__scopeId`,`data-v-42f6ce9d`]]);var _hoisted_1$22={class:`studio-autopilot__project-panel`,"aria-label":`Project`};var _hoisted_2$16=[`data-vibe64-guide-pane`];var _hoisted_3$15={class:`studio-autopilot__right-pane-page`,role:`tabpanel`};var _hoisted_4$11=[`data-vibe64-guide-pane`];var _hoisted_5$9={class:`studio-autopilot__session-tool-header`};var _hoisted_6$6={class:`studio-autopilot__right-pane-page`};var _hoisted_7$5=[`data-vibe64-guide-pane`];var _hoisted_8$5={class:`studio-autopilot__session-tool-header`};var _hoisted_9$4=[`data-vibe64-guide-pane`];var _hoisted_10$3={class:`studio-autopilot__session-tool-header`};var _hoisted_11$2=[`data-vibe64-guide-pane`];var _hoisted_12$2={class:`studio-autopilot__architecture-file`,"aria-label":`Architecture file viewer`};var _hoisted_13$1={class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":`preview`,role:`tabpanel`};var _sfc_main$27={__name:`Vibe64AutopilotProjectPanel`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,askAssistantAboutFile,assistantAccessScopeKey,assistantCanUsePurpose,assistantDraftAvailable,assistantFixAllowed,assistantPurposes,backToDashboard,backToSystemFromEditor,composerInput,dashboardContext,dashboardRouteVisible,dashboardShellVisible,databaseOpenRequest,describeSubsystems,emit,fileBookmarks,fixPreviewIdentityWithTemporaryAi,lessonShown,openSourceEditorFile,openSubsystemTable,openUsage,prefillComposer,projectSlug,props,repositoryOperationActive,rightPaneTab,rightPaneTabMounted,selectedAssistantSessionId,selectSessionTool,sessionId,sessionSourceRoot,sourceEditorOpenRequest,sourceOperationsSuspended,sourceToolLoading,startTemporaryAiTask,systemBackAvailable,systemReloadVersion,systemRestoreRequest,temporaryAiWorkspace,updatePreviewAttachmentState,updateTestApproval,usageOpenRequest,Vibe64OutputControls}=__props.view;const architectureFileRequest=ref(null);const architectureProgramRequest=ref(null);watch(()=>props.session?.sessionId,()=>{architectureFileRequest.value=null;architectureProgramRequest.value=null});function openSubsystemTextLink({event,href},sourcePath,openSource){const relative=href&&!/^(?:[a-z][a-z\d+.-]*:|\/|#)/iu.test(href);const target=sourceEditorLinkTarget({href:relative?new URL(href,`https://source.invalid/${sourcePath}`).pathname.slice(1):href});if(!target)return;event?.preventDefault();openSource(target)}const Vibe64ArchitectureView=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-BXZp5ztx.js`).then(n=>n.f).then(module=>module.loadVibe64ArchitectureView()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const Vibe64DatabaseWorkspace=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-BXZp5ztx.js`).then(n=>n.p).then(module=>module.loadVibe64DatabaseWorkspace()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const router=useRouter();function selectPreview(){router.push(projectAppPath(projectSlug.value));emit(`project-attention`)}async function attachPreviewFile(file){const uploaded=await(temporaryAiWorkspace.value?.composer||composerInput.value)?.attachFiles?.([file]);if(!Array.isArray(uploaded)||uploaded.length<1)throw new Error(`Open the chat composer before attaching a preview file.`);return uploaded[0]}async function attachPreviewFileProducer(options={}){const uploaded=await(temporaryAiWorkspace.value?.composer||composerInput.value)?.attachFileProducer?.(options);return Array.isArray(uploaded)&&uploaded.length>0?uploaded[0]:null}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$22,[unref(sourceToolLoading)?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,class:`studio-autopilot__right-pane-page`,label:`session source`,loading:``})):createCommentVNode(``,true),unref(props).projectPane===`dashboard`?withDirectives((openBlock(),createBlock(Vibe64DashboardShell_default,{key:1,class:`studio-autopilot__dashboard-shell`,"dashboard-context":unref(dashboardContext)},{default:withCtx(()=>[withDirectives(createBaseVNode(`div`,{class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(unref(rightPaneTab)),role:`tabpanel`},[unref(dashboardRouteVisible)?renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:unref(dashboardContext)},void 0,true,0):createCommentVNode(``,true)],8,_hoisted_2$16),[[vShow,unref(dashboardRouteVisible)]]),withDirectives(createBaseVNode(`div`,_hoisted_3$15,[unref(rightPaneTabMounted)(`ai-terminal`)?renderSlot(_ctx.$slots,`ai-terminal`,{active:unref(rightPaneTab)===`ai-terminal`},void 0,true,0):createCommentVNode(``,true)],512),[[vShow,unref(rightPaneTab)===`ai-terminal`]])]),_:3},8,[`dashboard-context`])),[[vShow,unref(dashboardShellVisible)]]):createCommentVNode(``,true),unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`changes`?(openBlock(),createElementBlock(`section`,{key:2,"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`changes`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_5$9,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:unref(backToDashboard)},null,8,[`onClick`])]),createBaseVNode(`div`,_hoisted_6$6,[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:unref(dashboardContext)},void 0,true)])],8,_hoisted_4$11)):createCommentVNode(``,true),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`editor`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_8$5,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[0]||(_cache[0]=$event=>unref(systemBackAvailable)?unref(backToSystemFromEditor)():unref(backToDashboard)())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(systemBackAvailable)?`Back to Architecture`:`Back to dashboard`),1)]),_:1})]),unref(rightPaneTabMounted)(`editor`)?(openBlock(),createBlock(Vibe64SessionFiles_default,{key:unref(assistantAccessScopeKey),"repo-available":Boolean(unref(sessionSourceRoot)),active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`editor`,"agent-active":unref(agentActive),"file-bookmarks":unref(fileBookmarks),"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`,"assistant-draft-available":unref(assistantDraftAvailable),class:`studio-autopilot__session-tool-content`,"open-request":unref(sourceEditorOpenRequest),"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onAskAssistantAboutFile:unref(askAssistantAboutFile),onOpenProgram:_cache[1]||(_cache[1]=$event=>{architectureProgramRequest.value={id:$event};unref(selectSessionTool)(`system`)})},null,8,[`repo-available`,`active`,`agent-active`,`file-bookmarks`,`assistant-available`,`assistant-unavailable-message`,`assistant-draft-available`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onAskAssistantAboutFile`])):createCommentVNode(``,true)],8,_hoisted_7$5),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`editor`]]),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`database`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_10$3,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[2]||(_cache[2]=$event=>unref(systemBackAvailable)?unref(backToSystemFromEditor)():unref(backToDashboard)())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(systemBackAvailable)?`Back to Architecture`:`Back to dashboard`),1)]),_:1})]),unref(rightPaneTabMounted)(`database`)?(openBlock(),createBlock(unref(Vibe64DatabaseWorkspace),{key:unref(assistantAccessScopeKey),"open-request":unref(databaseOpenRequest),active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`database`,"assistant-available":unref(assistantCanUsePurpose)(`fix`),class:`studio-autopilot__session-tool-content`,"project-slug":unref(projectSlug),"session-id":unref(sessionId),onRequestOverviewAssistant:_cache[3]||(_cache[3]=$event=>unref(assistantCanUsePurpose)(`fix`)?unref(startTemporaryAiTask)($event):unref(prefillComposer)($event.message,{append:true}))},null,8,[`open-request`,`active`,`assistant-available`,`project-slug`,`session-id`])):createCommentVNode(``,true)],8,_hoisted_9$4),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`database`]]),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`system`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane studio-autopilot__architecture-pane`,role:`tabpanel`},[unref(rightPaneTabMounted)(`system`)?(openBlock(),createBlock(unref(Vibe64ArchitectureView),{key:0,"assistant-available":unref(assistantFixAllowed)&&!unref(repositoryOperationActive)&&!unref(props).sessionSelectionArchived,active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`system`,class:`studio-autopilot__session-tool-content`,"resolve-request-url":unref(resolveStudioRequestUrl),"restore-request":unref(systemRestoreRequest),"open-program-request":architectureProgramRequest.value,"usage-open-request":unref(usageOpenRequest),onSelectPreview:selectPreview,"reload-version":unref(systemReloadVersion),"project-slug":unref(projectSlug),onOpenTable:unref(openSubsystemTable),onDescribeSubsystems:unref(describeSubsystems),"session-id":unref(sessionId),onInspectFile:_cache[4]||(_cache[4]=$event=>architectureFileRequest.value={...$event,presentation:`interface`}),onOpenSourceFileImmersive:unref(openSourceEditorFile),onOpenSourceFile:unref(openSourceEditorFile)},{navigation:withCtx(()=>[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:unref(backToDashboard)},null,8,[`onClick`])]),text:withCtx(({text,sourcePath,openSource})=>[createVNode(unref(LongTextPreviewBlocks_default),{blocks:unref(parseLongTextReviewBlocks)(text||``),onOpenLink:$event=>openSubsystemTextLink($event,sourcePath,openSource)},null,8,[`blocks`,`onOpenLink`])]),"file-interface":withCtx(({request,active,architecture,openFile,updateLocation,openProgram})=>[createVNode(Vibe64SessionSourceEditor_default,{"single-file":``,active:unref(props).active&&active,"agent-active":unref(agentActive),"architecture-facts":architecture,"file-bookmarks":unref(fileBookmarks),"assistant-draft-available":unref(assistantDraftAvailable),onAskAssistantAboutFile:unref(askAssistantAboutFile),onOpenProgram:openProgram,"open-request":request,"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onOpenSourceFile:openFile,onInterfaceLocation:updateLocation,"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`},null,8,[`active`,`agent-active`,`architecture-facts`,`file-bookmarks`,`assistant-draft-available`,`onAskAssistantAboutFile`,`onOpenProgram`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onOpenSourceFile`,`onInterfaceLocation`,`assistant-available`,`assistant-unavailable-message`])]),_:1},8,[`assistant-available`,`active`,`resolve-request-url`,`restore-request`,`open-program-request`,`usage-open-request`,`reload-version`,`project-slug`,`onOpenTable`,`onDescribeSubsystems`,`session-id`,`onOpenSourceFileImmersive`,`onOpenSourceFile`])):createCommentVNode(``,true),createVNode(VDialog,{"model-value":Boolean(architectureFileRequest.value),"max-width":`1100`,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>!$event&&(architectureFileRequest.value=null))},{default:withCtx(()=>[createBaseVNode(`section`,_hoisted_12$2,[createBaseVNode(`header`,null,[createBaseVNode(`strong`,null,toDisplayString(architectureFileRequest.value?.path),1),createVNode(VBtn,{variant:`text`,"aria-label":`Close file viewer`,onClick:_cache[5]||(_cache[5]=$event=>architectureFileRequest.value=null)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Close`,-1)])]),_:1})]),architectureFileRequest.value?(openBlock(),createBlock(Vibe64SessionSourceEditor_default,{"single-file":``,key:architectureFileRequest.value.path,active:unref(props).active,"agent-active":unref(agentActive),"open-request":architectureFileRequest.value,"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onOpenSourceFile:unref(openSourceEditorFile),"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`},null,8,[`active`,`agent-active`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onOpenSourceFile`,`assistant-available`,`assistant-unavailable-message`])):createCommentVNode(``,true)])]),_:1},8,[`model-value`])],8,_hoisted_11$2),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`system`]]),unref(lessonShown)&&unref(props).active?(openBlock(),createBlock(Vibe64LessonSheet_default,{key:3})):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,_hoisted_13$1,[createVNode(Vibe64ProjectOnboarding_default,{active:unref(props).active&&unref(props).projectPane===`preview`,archived:unref(props).sessionSelectionArchived,busy:unref(sourceOperationsSuspended)||unref(agentActive)||Boolean(unref(props).page?.busy||unref(props).page?.launchBusy),"can-ask":unref(assistantFixAllowed),"request-temporary-ai":unref(startTemporaryAiTask),"session-id":unref(selectedAssistantSessionId)},{default:withCtx(()=>[createVNode(unref(Vibe64OutputControls),{"fix-preview-identity-with-temporary-ai":unref(assistantFixAllowed)?unref(fixPreviewIdentityWithTemporaryAi):null,"attach-preview-file":attachPreviewFile,"prepare-preview-file":attachPreviewFileProducer,"auto-start-managed-preview":!unref(props).sessionSelectionArchived,"button-label":`Run`,"button-size":`small`,"button-variant":`tonal`,busy:unref(agentActive)||Boolean(unref(props).page?.busy||unref(props).page?.launchBusy),class:`studio-autopilot__preview-launch`,"embedded-preview":``,"preview-displayed":unref(props).projectPane===`preview`&&!unref(lessonShown),session:unref(props).session,"source-operations-suspended":unref(sourceOperationsSuspended),"toolbar-teleport-target":unref(props).projectPane===`preview`?unref(props).previewToolbarTeleportTarget:``,"window-displayed":unref(props).active,onOpenUsage:unref(openUsage),onPreviewAttachmentState:unref(updatePreviewAttachmentState),onTestApproval:unref(updateTestApproval)},null,8,[`fix-preview-identity-with-temporary-ai`,`auto-start-managed-preview`,`busy`,`preview-displayed`,`session`,`source-operations-suspended`,`toolbar-teleport-target`,`window-displayed`,`onOpenUsage`,`onPreviewAttachmentState`,`onTestApproval`])]),_:1},8,[`active`,`archived`,`busy`,`can-ask`,`request-temporary-ai`,`session-id`])],512),[[vShow,unref(props).projectPane===`preview`]])])}}};var Vibe64AutopilotProjectPanel_default=_plugin_vue_export_helper_default(_sfc_main$27,[[`__scopeId`,`data-v-d8a6e489`]]);var _sfc_main$26={__name:`Vibe64SessionPin`,props:{session:{type:Object,required:true},sessionsApiPath:{type:String,required:true},refresh:{type:Function,default:null},listItem:Boolean},setup(__props){const props=__props;const pinned=computed(()=>props.session.pinnedSessionId===props.session.sessionId);const anotherPinned=computed(()=>Boolean(props.session.pinnedSessionId)&&!pinned.value);const pending=ref(false);const label=computed(()=>{if(pending.value)return`Updating session pin…`;if(anotherPinned.value)return`Unpin the project's pinned session first`;return pinned.value?`Unpin session`:`Pin session as project source`});const path=vibe64SessionPath(props.sessionsApiPath,props.session.sessionId,`/pin`);const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.pin`,buildRawPayload:()=>({pinned:!pinned.value}),buildCommandOptions:()=>({method:`PATCH`,path}),fallbackRunError:`The session pin could not be changed.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});async function toggle(){if(pending.value||anotherPinned.value)return;pending.value=true;try{await command.run();await props.refresh?.()}catch{}finally{pending.value=false}}return(_ctx,_cache)=>{return __props.listItem?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":pinned.value?unref(mdiPin):unref(mdiPinOutline),title:pinned.value?`Unpin session`:`Pin session`,subtitle:pinned.value?`Stop using it as the project source`:label.value,"aria-pressed":pinned.value,"aria-busy":pending.value,disabled:pending.value||anotherPinned.value,"min-height":`48`,onClick:toggle},null,8,[`prepend-icon`,`title`,`subtitle`,`aria-pressed`,`aria-busy`,`disabled`])):(openBlock(),createBlock(VBtn,{key:1,class:`studio-autopilot__header-action`,icon:pinned.value?unref(mdiPin):unref(mdiPinOutline),"aria-label":label.value,title:label.value,"aria-pressed":pinned.value,"aria-busy":pending.value,disabled:pending.value||anotherPinned.value,variant:`text`,height:`var(--session-action-size, 36px)`,width:`var(--session-action-size, 36px)`,onClick:toggle},null,8,[`icon`,`aria-label`,`title`,`aria-pressed`,`aria-busy`,`disabled`]))}}};var _sfc_main$25={__name:`Vibe64RenameSessionDialog`,props:{session:{type:Object,required:true},sessionsApiPath:{type:String,required:true}},emits:[`close`,`renamed`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const name=ref(props.session.sessionName||``);const pending=ref(false);const path=vibe64SessionPath(props.sessionsApiPath,props.session.sessionId,`/name`);const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.rename`,buildRawPayload:()=>({name:normalizedName.value}),buildCommandOptions:()=>({method:`PATCH`,path}),fallbackRunError:`The session could not be renamed.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});const normalizedName=computed(()=>name.value.trim());const canSave=computed(()=>Boolean(normalizedName.value)&&normalizedName.value!==props.session.sessionName&&!pending.value);async function submit(){if(!canSave.value)return;pending.value=true;try{await command.run();emit(`renamed`);emit(`close`)}catch{}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-label":`Rename session`,"model-value":true,"max-width":`28rem`,persistent:pending.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>!$event&&emit(`close`))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:withModifiers(submit,[`prevent`])},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename session`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>name.value=$event),label:`Session name`,variant:`outlined`,maxlength:`120`,autofocus:``,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`])]),_:1}),createVNode(VCardActions,{class:`pa-6 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>emit(`close`))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,disabled:!canSave.value,loading:pending.value},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Rename `,-1)])]),_:1},8,[`disabled`,`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])}}};var _sfc_main$24={__name:`Vibe64CreateSessionButton`,props:{ariaLabel:{default:``,type:String},block:{default:false,type:Boolean},buttonClass:{default:``,type:[Array,Object,String]},iconOnly:{default:true,type:Boolean},label:{default:`New session`,type:String},size:{default:`small`,type:String},toolbar:{default:()=>({}),type:Object},variant:{default:`flat`,type:String}},setup(__props){const props=__props;const button=ref(null);const dialogOpen=ref(false);const createSessionRunning=computed(()=>props.toolbar.createSessionRunning===true);const creationUnavailable=computed(()=>!createSessionRunning.value&&props.toolbar.canCreateSession!==true);const buttonAriaLabel=computed(()=>{if(createSessionRunning.value)return`Creating session…`;const label=String(props.ariaLabel||props.label||`New session`).trim();return creationUnavailable.value&&buttonTitle.value?`${label}. ${buttonTitle.value}`:label});const buttonLabel=computed(()=>createSessionRunning.value?`Creating session…`:props.label);const buttonTitle=computed(()=>createSessionRunning.value?`Creating session…`:String(props.toolbar.createSessionTitle||props.ariaLabel||props.label||`New session`).trim());function requestCreateSession(){if(creationUnavailable.value||createSessionRunning.value)return;dialogOpen.value=true}function handleCreated(response={}){if(response?.sessionId)focusCreatedVibe64SessionTab(response.sessionId)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{ref_key:`button`,ref:button,"aria-busy":createSessionRunning.value?`true`:void 0,"aria-disabled":creationUnavailable.value?`true`:void 0,"aria-label":buttonAriaLabel.value,block:__props.block,class:normalizeClass([__props.buttonClass,{"studio-ai-sessions__create-button--unavailable":creationUnavailable.value}]),disabled:createSessionRunning.value,icon:__props.iconOnly?true:void 0,"prepend-icon":__props.iconOnly?void 0:unref(mdiPlus),size:__props.size,title:buttonTitle.value,variant:__props.variant,onClick:requestCreateSession},{default:withCtx(()=>[__props.iconOnly?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiPlus)},null,8,[`icon`])):createCommentVNode(``,true),!__props.iconOnly?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(buttonLabel.value),1)],64)):createCommentVNode(``,true)]),_:1},8,[`aria-busy`,`aria-disabled`,`aria-label`,`block`,`class`,`disabled`,`icon`,`prepend-icon`,`size`,`title`,`variant`]),createVNode(Vibe64AssistantSessionDialog_default,{modelValue:dialogOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>dialogOpen.value=$event),toolbar:__props.toolbar,onCreated:handleCreated},null,8,[`modelValue`,`toolbar`])],64)}}};var Vibe64CreateSessionButton_default=_plugin_vue_export_helper_default(_sfc_main$24,[[`__scopeId`,`data-v-63a40b7b`]]);var VIBE64_SESSION_TOOLTIP_KEY=Symbol(`vibe64-session-tooltip`);function createVibe64SessionTooltipState(){const suppressedSessionId=ref(``);function resumeHover(){suppressedSessionId.value=``}function trackPointer(event){if(!suppressedSessionId.value)return;if((event.target.closest?.(`[data-vibe64-session-id]`))?.dataset.vibe64SessionId!==suppressedSessionId.value)resumeHover()}return{suppressedSessionId,resumeHover,trackPointer}}var DEFAULT_VISIBLE_SESSION_LIMIT=3;function visibleVibe64ToolbarSessions({limit=3,selectedSessionId=``,sessions=[]}={}){const items=Array.isArray(sessions)?sessions:[];const boundedLimit=Math.max(0,Number(limit||0));if(boundedLimit<1||items.length<=boundedLimit)return items;const selectedId=String(selectedSessionId||``).trim();const selectedIndex=items.findIndex(session=>session?.sessionId===selectedId);if(selectedIndex<0||selectedIndex<boundedLimit)return items.slice(0,boundedLimit);return[...items.slice(0,Math.max(0,boundedLimit-1)),items[selectedIndex]]}var SESSION_HEADER_ACTION_PRIORITY=Object.freeze([`temporary-ai`,`renew`,`pin`,`pull-request`,`prepare-workspace`]);function splitVibe64SessionHeaderActions(available=[],slots=Infinity){const ordered=SESSION_HEADER_ACTION_PRIORITY.filter(id=>available.includes(id));const count=Math.max(0,Math.floor(Number.isNaN(Number(slots))?0:Number(slots)));return{inline:ordered.slice(0,count),overflow:ordered.slice(count)}}function vibe64SessionNameStripWidth(elements=[],maxChipWidth=Infinity){return[...elements||[]].reduce((total,element)=>{if(!element.classList?.contains(`studio-ai-sessions__tab`))return total+element.offsetWidth+6;const label=element.querySelector(`.studio-ai-sessions__tab-label`);const natural=element.offsetWidth-(label?.clientWidth||0)+(label?.scrollWidth||0);return total+Math.min(natural,maxChipWidth)+6},0)}var _hoisted_1$21={class:`studio-ai-sessions__tabs`};var _hoisted_2$15={class:`studio-ai-sessions__tab-main`};var _hoisted_3$14={class:`studio-ai-sessions__tab-label`};var _hoisted_4$10={key:0,class:`studio-ai-sessions__tab-close-slot`};var _hoisted_5$8={class:`studio-ai-sessions__info`};var _hoisted_6$5={class:`studio-ai-sessions__info-facts`};var _hoisted_7$4={role:`status`};var _hoisted_8$4={class:`studio-ai-sessions__archive-detail`};var _hoisted_9$3={key:0};var _sfc_main$23={__name:`Vibe64SessionToolbar`,props:{active:{default:true,type:Boolean},archive:{default:()=>({}),type:Object},selectedSessionId:{default:``,type:String},selectionArchived:{default:false,type:Boolean},toolbar:{default:()=>({}),type:Object},compact:{default:false,type:Boolean},createAttention:{default:false,type:Boolean},createTeleportTarget:{default:``,type:String},createVisible:{default:true,type:Boolean},maxVisibleSessions:{default:3,type:Number},showRepositoryProblem:{default:null,type:Function}},emits:[`select-session`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const infoSessionId=ref(``);const renamingSession=ref(null);const renamingSessionsApiPath=ref(``);const sessionTooltip=inject(VIBE64_SESSION_TOOLTIP_KEY);const infoId=useId();const createdAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`});function renameSession(session){const sessionsApiPath=props.toolbar.sessionsApiPath;if(!sessionsApiPath)return;renamingSessionsApiPath.value=sessionsApiPath;infoSessionId.value=``;sessionTooltip.suppressedSessionId.value=session.sessionId;renamingSession.value={...session}}function showProblemNotice(session){infoSessionId.value=``;sessionTooltip.suppressedSessionId.value=session.sessionId;props.showRepositoryProblem()}function setSessionInfo(sessionId,visible){if(visible&&!props.active)return;if(visible||infoSessionId.value===sessionId)infoSessionId.value=visible?sessionId:``}watch(()=>props.toolbar.sessionsApiPath,()=>{renamingSession.value=null});watch(()=>props.active,active=>{if(!active)infoSessionId.value=``},{flush:`sync`});function sessionInfoFacts(sessionItem){const selection=sessionItem.assistantSelection||{};const assistant=VIBE64_AGENT_PROVIDERS.find(provider=>provider.id===selection.engineId);const details=vibe64SessionInfoFacts(sessionItem).filter(fact=>[`session`,`branch`,`created-at`].includes(fact.key)).map(fact=>{const createdAt=fact.key===`created-at`?Date.parse(fact.value):NaN;return{...fact,value:Number.isFinite(createdAt)?createdAtFormatter.format(createdAt):fact.copyValue}});return[{key:`status`,label:`Status`,value:sessionItem.agentThinking?`Working`:vibe64SessionStatusLabel(sessionItem.status)},{key:`assistant`,label:`Assistant`,value:assistant?.label||selection.engineId},{key:`model`,label:`Model`,value:selection.modelId},{key:`saved-work`,label:`Work`,value:repositoryWorkStateLabel(sessionItem)},{key:`work-problem`,label:`Why`,value:repositoryWorkStateProblem(sessionItem)?.message},{key:`work-next`,label:`Next`,value:repositoryWorkStateProblem(sessionItem)?.nextStep},...details].filter(fact=>fact.value)}function selectSession(sessionId=``){sessionTooltip.suppressedSessionId.value=sessionId;infoSessionId.value=``;emit(`select-session`,sessionId);props.toolbar.selectSession?.(sessionId)}function sessionTabLabel(sessionItem={}){return vibe64SessionDisplayTitle(sessionItem)}function sessionTabAriaLabel(sessionItem={}){if(sessionItem.archiving)return`${sessionTabLabel(sessionItem)}. Inactive. Archiving session.`;const work=repositoryWorkStateDescription(sessionItem);return`${sessionTabLabel(sessionItem)}. ${work}${work.endsWith(`.`)?``:`.`}`}const allSessions=computed(()=>Array.isArray(props.toolbar.sessions)?props.toolbar.sessions:[]);const archiveNow=ref(Date.now());const hasClosingSessions=computed(()=>props.active&&allSessions.value.some(session=>session.archiving));onMounted(()=>{watch(hasClosingSessions,(running,_previous,onCleanup)=>{archiveNow.value=Date.now();if(!running)return;const timer=setInterval(()=>{archiveNow.value=Date.now()},1e3);onCleanup(()=>clearInterval(timer))},{immediate:true})});const closingSessions=computed(()=>allSessions.value.filter(session=>session.archiving).map(session=>{const startedAt=Date.parse(session.archiveStartedAt||``);const seconds=Number.isFinite(startedAt)?Math.max(0,Math.floor((archiveNow.value-startedAt)/1e3)):null;return{sessionId:session.sessionId,title:sessionTabLabel(session),stage:{stopping:`Stopping preview, AI and tools (1/3)`,resources:`Archiving resources (2/3)`,source:`Archiving workspace and history (3/3)`}[session.archiveOperation?.phase]||`Waiting for the server to begin`,elapsed:seconds===null?``:`${Math.floor(seconds/60)}m ${seconds%60}s elapsed. `,slow:seconds!==null&&seconds>=60}}));const sessionLimit=computed(()=>Math.max(0,Number(props.maxVisibleSessions||0)));const createSessionButtonClass=computed(()=>[`studio-ai-sessions__create-button`,{"studio-ai-sessions__create-button--attention":props.createAttention}]);const visibleSessions=computed(()=>{return visibleVibe64ToolbarSessions({limit:sessionLimit.value,selectedSessionId:props.selectedSessionId,sessions:allSessions.value})});return(_ctx,_cache)=>{return withDirectives((openBlock(),createElementBlock(`div`,{class:normalizeClass([`studio-ai-sessions__toolbar`,{"studio-ai-sessions__toolbar--compact":__props.compact}])},[createBaseVNode(`div`,_hoisted_1$21,[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSessions.value,sessionItem=>{return openBlock(),createBlock(VChip,{key:sessionItem.sessionId,class:normalizeClass([`studio-ai-sessions__tab`,{"studio-ai-sessions__tab--active":sessionItem.sessionId===__props.selectedSessionId,"studio-ai-sessions__tab--thinking":!sessionItem.archiving&&sessionItem.agentThinking,"studio-ai-sessions__tab--archiving":sessionItem.archiving}]),size:__props.compact?`small`:`large`,"aria-label":sessionTabAriaLabel(sessionItem),disabled:sessionItem.archiving,"data-vibe64-session-id":sessionItem.sessionId,variant:`flat`,onClick:$event=>selectSession(sessionItem.sessionId,$event),onFocusin:_cache[0]||(_cache[0]=$event=>__props.active&&$event.target.matches(`:focus-visible`)&&unref(sessionTooltip).resumeHover())},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_2$15,[createBaseVNode(`span`,{class:normalizeClass([`studio-ai-sessions__status-dot`,`studio-ai-sessions__status-dot--${sessionItem.status}`])},null,2),createBaseVNode(`span`,_hoisted_3$14,toDisplayString(sessionItem.archiving?`${sessionTabLabel(sessionItem)} · Archiving…`:sessionTabLabel(sessionItem)),1),createVNode(VIcon,{class:normalizeClass([`studio-ai-sessions__repository-state studio-ai-sessions__repository-state--desktop`,[`studio-ai-sessions__repository-state--${unref(repositoryWorkState)(sessionItem)}`,{"studio-ai-sessions__repository-state--provisional":unref(repositoryWorkStateProvisional)(sessionItem)}]]),icon:unref(repositoryWorkStateIcon)(sessionItem),size:`14`,title:unref(repositoryWorkStateDescription)(sessionItem)},null,8,[`class`,`icon`,`title`]),createVNode(VBtn,{class:`studio-ai-sessions__tab-info`,"aria-label":`Session info: ${sessionTabLabel(sessionItem)}`,"aria-expanded":infoSessionId.value===sessionItem.sessionId,"aria-describedby":`${unref(infoId)}-${sessionItem.sessionId}`,icon:unref(mdiInformationOutline),size:`x-small`,variant:`text`,onClick:withModifiers($event=>setSessionInfo(sessionItem.sessionId,infoSessionId.value!==sessionItem.sessionId),[`stop`])},null,8,[`aria-label`,`aria-expanded`,`aria-describedby`,`icon`,`onClick`])]),sessionItem.sessionId===__props.selectedSessionId?(openBlock(),createElementBlock(`span`,_hoisted_4$10,[createVNode(VBtn,{class:`studio-ai-sessions__tab-archive`,density:`comfortable`,disabled:__props.selectionArchived||__props.archive.command.isRunning||sessionItem.pinnedSessionId===sessionItem.sessionId,icon:unref(mdiArchiveOutline),size:`small`,title:sessionItem.pinnedSessionId===sessionItem.sessionId?`Unpin this session before archiving it`:`Archive session`,variant:`text`,"aria-label":`Archive session`,onClick:withModifiers(__props.archive.request,[`stop`])},null,8,[`disabled`,`icon`,`title`,`onClick`])])):createCommentVNode(``,true),createVNode(VTooltip,{id:`${unref(infoId)}-${sessionItem.sessionId}`,activator:`parent`,"model-value":infoSessionId.value===sessionItem.sessionId,disabled:!__props.active,"open-delay":1e3,"close-delay":150,"open-on-click":false,"open-on-focus":``,interactive:``,color:`surface-variant`,location:`bottom`,"max-width":320,"onUpdate:modelValue":$event=>(!$event||unref(sessionTooltip).suppressedSessionId.value!==sessionItem.sessionId)&&setSessionInfo(sessionItem.sessionId,$event)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$8,[createBaseVNode(`strong`,null,toDisplayString(sessionTabLabel(sessionItem)),1),createBaseVNode(`dl`,_hoisted_6$5,[(openBlock(true),createElementBlock(Fragment,null,renderList(sessionInfoFacts(sessionItem),fact=>{return openBlock(),createElementBlock(Fragment,{key:fact.key},[createBaseVNode(`dt`,null,toDisplayString(fact.label),1),createBaseVNode(`dd`,null,toDisplayString(fact.value),1)],64)}),128))]),unref(repositoryWorkStateProblem)(sessionItem)&&sessionItem.sessionId===__props.selectedSessionId&&__props.showRepositoryProblem?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,"prepend-icon":unref(mdiAlertCircleOutline),onClick:withModifiers($event=>showProblemNotice(sessionItem),[`stop`])},{default:withCtx(()=>[createTextVNode(` Show `+toDisplayString(unref(repositoryWorkStateProblem)(sessionItem).operation===`update`?`Update`:`Save`)+` notice `,1)]),_:2},1032,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.toolbar.sessionsApiPath?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,height:`48`,"prepend-icon":unref(mdiPencilOutline),disabled:sessionItem.archiving||__props.selectionArchived,onClick:withModifiers($event=>renameSession(sessionItem),[`stop`])},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Rename session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`,`onClick`])):createCommentVNode(``,true)])]),_:2},1032,[`id`,`model-value`,`disabled`,`onUpdate:modelValue`])]),_:2},1032,[`class`,`size`,`aria-label`,`disabled`,`data-vibe64-session-id`,`onClick`])}),128)),__props.createVisible&&(sessionLimit.value<1||allSessions.value.length<sessionLimit.value)?(openBlock(),createBlock(Teleport,{key:0,disabled:!__props.createTeleportTarget,to:__props.createTeleportTarget||`body`,defer:``},[createVNode(Vibe64CreateSessionButton_default,{"aria-label":`New session`,"button-class":createSessionButtonClass.value,"icon-only":``,toolbar:__props.toolbar},null,8,[`button-class`,`toolbar`])],8,[`disabled`,`to`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`after-sessions`,{},void 0,true)]),(openBlock(true),createElementBlock(Fragment,null,renderList(closingSessions.value,closing=>{return openBlock(),createElementBlock(`div`,{key:closing.sessionId,class:`studio-ai-sessions__archive-progress`},[createVNode(VProgressCircular,{indeterminate:``,size:`16`,width:`2`,"aria-hidden":`true`}),createBaseVNode(`div`,null,[createBaseVNode(`div`,_hoisted_7$4,`Closing `+toDisplayString(closing.title)+` — `+toDisplayString(closing.stage),1),createBaseVNode(`div`,_hoisted_8$4,[createTextVNode(toDisplayString(closing.elapsed)+`You can keep working in another session. `,1),closing.slow?(openBlock(),createElementBlock(`span`,_hoisted_9$3,`Completion has not been confirmed; the last reported stage is shown above.`)):createCommentVNode(``,true)])])])}),128)),renamingSession.value?(openBlock(),createBlock(_sfc_main$25,{key:0,session:renamingSession.value,"sessions-api-path":renamingSessionsApiPath.value,onClose:_cache[1]||(_cache[1]=$event=>renamingSession.value=null),onRenamed:_cache[2]||(_cache[2]=$event=>__props.toolbar.refreshSessionData?.({includeList:true,reason:`session-renamed`}))},null,8,[`session`,`sessions-api-path`])):createCommentVNode(``,true)],2)),[[vShow,!__props.createTeleportTarget||allSessions.value.length>0]])}}};var Vibe64SessionToolbar_default=_plugin_vue_export_helper_default(_sfc_main$23,[[`__scopeId`,`data-v-ef96653e`]]);var _hoisted_1$20={key:2,class:`studio-autopilot__save-symbol`,"aria-hidden":`true`};var _hoisted_2$14={class:`studio-autopilot__header-actions`};var SESSION_NAME_MAX_WIDTH=240;var _sfc_main$22={__name:`Vibe64AutopilotSessionHeader`,props:{view:{type:Object,required:true}},setup(__props){const{checkTemporaryAiUpdate,connectedUpdateActionVisible,createPullRequestOpen,emit,githubProject,mainChatApprovals,props,repositoryOperationActive,requestSaveWork,requestSessionRenewal,retryWorkspaceSetup,revealApprovals,saveConnectedFirst,saveWorkActivityLabel,saveWorkDisabled,saveWorkError,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkOperationActive,saveWorkRequiresUpdate,saveWorkSending,saveWorkTitle,saveWorkUnsaved,sessionId,sessionPullRequest,sessionPullRequestTarget,sessionToolbarVisible,showSaveWorkActivity,sourceOperationsSuspended,temporaryAiWorkspace,workspaceSetupActionVisible,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning}=__props.view;const sessionRenewalActionPresentation=computed(()=>props.sessionRenewal?.actionPresentation||props.sessionRenewal?.advisoryPresentation||{attention:false,color:void 0,label:`Renew session`,reason:`Renew this session with a reviewed handover.`});const sessionActionsTrigger=ref(null);const temporaryAiHasUnreadMessages=computed(()=>temporaryAiWorkspace.value?.hasUnreadMessages===true);const sessionHeader=ref(null);const headerActionRoom=ref(Infinity);function measureHeaderActionRoom(){const header=sessionHeader.value;if(!header)return;const style=getComputedStyle(header);const names=vibe64SessionNameStripWidth(header.querySelector(`.studio-ai-sessions__tabs`)?.children,SESSION_NAME_MAX_WIDTH);const fixed=[...header.querySelectorAll(`.studio-autopilot__save-work, .studio-autopilot__header-fixed`)].reduce((total,element)=>total+element.offsetWidth+2,0);const actionSize=(parseFloat(style.getPropertyValue(`--session-action-size`))||36)+2;const room=header.clientWidth-parseFloat(style.paddingLeft)-parseFloat(style.paddingRight)-names-fixed-8;headerActionRoom.value=Math.floor(room/actionSize)}watch(sessionHeader,(header,_previous,onCleanup)=>{if(!header||typeof ResizeObserver===`undefined`)return;const observer=new ResizeObserver(()=>measureHeaderActionRoom());observer.observe(header);const toolbar=header.querySelector(`.studio-ai-sessions__tabs`);if(toolbar)observer.observe(toolbar);onCleanup(()=>observer.disconnect())});const headerActionsAvailable=computed(()=>[`temporary-ai`,props.sessionRenewal?.visible&&`renew`,props.session?.sourceReady&&!props.sessionSelectionArchived&&`pin`,githubProject.value&&`pull-request`,workspaceSetupActionVisible.value&&`prepare-workspace`].filter(Boolean));const headerActions=computed(()=>{const available=headerActionsAvailable.value;const room=headerActionRoom.value;const slots=room>=available.length&&!connectedUpdateActionVisible.value?room:room-1;return splitVibe64SessionHeaderActions(available,slots)});const sessionActionsMenuVisible=computed(()=>headerActions.value.overflow.length>0||connectedUpdateActionVisible.value);const sessionActionsAttention=computed(()=>headerActions.value.overflow.includes(`renew`)&&sessionRenewalActionPresentation.value.attention===true||headerActions.value.overflow.includes(`temporary-ai`)&&temporaryAiHasUnreadMessages.value);const sessionActionsLabel=computed(()=>[`Session actions`,headerActions.value.overflow.includes(`renew`)&&sessionRenewalActionPresentation.value.attention?sessionRenewalActionPresentation.value.label:``,headerActions.value.overflow.includes(`temporary-ai`)&&temporaryAiHasUnreadMessages.value?`Unread temporary AI messages`:``].filter(Boolean).join(`: `));const sessionArchiveDisabled=computed(()=>Boolean(props.sessionSelectionArchived||props.sessionArchive?.command?.isRunning||workspaceSetupRunning.value||workspaceSetupRetrying.value));function showRepositoryProblem(){showSaveWorkActivity();emit(`chat-attention`)}function openTemporaryAi(){if(!sessionId.value||props.sessionSelectionArchived)return false;temporaryAiWorkspace.value?.showWorkspace?.();return true}const saveWorkChecking=ref(false);const saveWorkCheckAvailable=computed(()=>Boolean(saveWorkDisabled.value&&!saveWorkRequiresUpdate.value&&!saveWorkSending.value&&!repositoryOperationActive.value&&!sourceOperationsSuspended.value&&!props.sessionSelectionArchived&&typeof props.sessionToolbar?.refreshRepositoryState===`function`));const saveWorkHeaderHint=computed(()=>{if(saveConnectedFirst.value)return saveWorkTitle.value;const checkStatus=saveWorkChecking.value?`Checking for updates…`:saveWorkCheckAvailable.value?`${saveWorkTitle.value}. Click to check for updates.`:saveWorkTitle.value;const status=saveWorkError.value&&!saveWorkSending.value&&!saveWorkOperationActive.value?`${saveWorkActivityLabel.value} needs attention: ${saveWorkError.value}\n${checkStatus}`:checkStatus;const destination=props.workState?.destination;if(!destination)return status;if(saveWorkRequiresUpdate.value||saveWorkDisabled.value||saveWorkChecking.value)return`${status}\n${destination.repository}:${destination.branch}`;return`${destination.mode===`local_source`?`Local commit`:destination.mode===`github`?`Commit & push`:`Project version`} · ${destination.repository}:${destination.branch}\n${status}`});async function requestSessionSaveWork(){if(saveWorkChecking.value)return;if(saveWorkCheckAvailable.value){saveWorkChecking.value=true;try{await props.sessionToolbar.refreshRepositoryState(sessionId.value)}finally{saveWorkChecking.value=false}return}const repair=temporaryAiWorkspace.value?.updateRepairTask;if(saveWorkRequiresUpdate.value&&repair){temporaryAiWorkspace.value?.selectTask?.(repair.id);return checkTemporaryAiUpdate(repair)}return requestSaveWork()}watch(()=>[(props.sessionToolbar?.sessions||[]).map(session=>session?.sessionName||session?.sessionId).join(`
7
+ `).map(line=>{const marker=/^\s*(`{3,}|~{3,})/u.exec(line)?.[1];if(marker){if(!fence)fence=marker;else if(marker[0]===fence[0]&&marker.length>=fence.length)fence=``;return{text:line}}const item=!fence&&/^\s*(?:[-*+]|\d+[.)]) \[([ xX])\] (.+)$/u.exec(line);return item?{text:item[2],checked:item[1]!==` `}:{text:line,...markTechnicalDetails&&!fence&&/^## Technical details\s*$/iu.test(line)?{technicalDetails:true}:{}}})}var _hoisted_1$34={key:0,class:`work-plan-control`};var _hoisted_2$28={key:0,class:`d-sr-only`,role:`status`};var _hoisted_3$24={class:`work-plan-archive-copy`};var _hoisted_4$19={class:`text-body-small text-medium-emphasis`};var _hoisted_5$17={class:`d-flex align-start ga-2`};var _hoisted_6$14={class:`text-body-small text-medium-emphasis mt-1`};var _hoisted_7$12={class:`d-flex align-center flex-wrap ga-2 mt-2`};var _hoisted_8$12={class:`text-high-emphasis`};var _hoisted_9$9={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_10$8={key:1,class:`work-plan-empty text-center pa-4`};var _hoisted_11$7={class:`d-flex align-center flex-wrap ga-3 mb-5`,role:`status`};var _hoisted_12$7={class:`text-high-emphasis`};var _hoisted_13$6={class:`text-body-small text-medium-emphasis`};var _hoisted_14$4={key:0,class:`text-body-medium mb-4`};var _hoisted_15$4=[`checked`];var _hoisted_16$4=[`checked`];var _hoisted_17$3={key:4,class:`work-plan-empty text-center pa-4`};var _sfc_main$39={__name:`Vibe64WorkPlan`,props:{active:Boolean,busy:Boolean,session:{type:Object,default:null},sessionsApiPath:{type:[Function,Object,String],default:``}},setup(__props,{expose:__expose}){const props=__props;const projectSlug=useVibe64ProjectSlug();const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const actorKey=computed(()=>unref(viewer)?.actorKey||``);const sessionId=computed(()=>props.session?.sessionId||``);const sessionsPath=computed(()=>String(readRefOrGetterValue(props.sessionsApiPath)||``));const enabled=computed(()=>props.active&&Boolean(sessionId.value&&sessionsPath.value&&actorKey.value));const endpoint=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,`/work-plan`));const open=ref(false);const archiveId=ref(``);const notice=ref(``);const view=ref(`current`);const planDocument=ref(`plan`);const showHistory=computed(()=>view.value===`history`&&!archiveId.value);const pendingOperation=ref(``);const feedback=useShellWebErrorRuntime();const resource=useEndpointResource({enabled,path:endpoint,queryKey:computed(()=>[`vibe64-work-plan`,projectSlug.value,sessionsPath.value,sessionId.value,actorKey.value,archiveId.value]),fallbackLoadError:`The plan could not be loaded.`,queryOptions:{meta:{jskit:{requestRecovery:false}},retry:false,refetchOnMount:`always`,refetchOnWindowFocus:true,queryFn:async({signal})=>{const selectedArchive=archiveId.value;const path=endpoint.value;const read=query=>getHttpWebClient().request(path+`?`+new URLSearchParams(query),{signal});const first=await read({limit:`16000`,...selectedArchive?{archiveId:selectedArchive}:{}});let page=first;let text=first.text||``;let progressText=first.progressText||``;while(page.hasMore){page=await read({limit:`16000`,offset:String(page.nextOffset),expectedRevision:first.revision,expectedProgressRevision:first.progressRevision||``,...selectedArchive?{archiveId:selectedArchive}:{}});text+=page.text;progressText+=page.progressText||``}return{...first,text,progressText}}}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&[`work-plan-changed`,`assistant-routing-changed`].includes(payload.reason),onEvent:({payload={}}={})=>{if(payload.planNotice)notice.value=payload.planNotice;resource.reload()}});const plan=computed(()=>resource.data.value||null);const visible=computed(()=>Boolean(plan.value?.available||plan.value?.history?.length||resource.loadError.value));const history=computed(()=>(plan.value?.history||[]).map(item=>({...item,archivedDate:new Date(item.archivedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})})));const selectedArchive=computed(()=>history.value.find(item=>item.id===archiveId.value));const selectedPlanReady=computed(()=>Boolean(plan.value)&&(plan.value.archiveId||``)===archiveId.value);const canChangePlan=computed(()=>!props.busy&&!pendingOperation.value&&selectedPlanReady.value);const currentActive=computed(()=>plan.value?.current?.status===`active`);const label=computed(()=>currentActive.value?`View active plan`:`View plan and history`);function showPlan(requestedView=`default`){archiveId.value=``;view.value=requestedView==="default"?plan.value?.current?`current`:`history`:requestedView;open.value=true}__expose({showPlan});const colleaguePlan=inject(VIBE64_COLLEAGUE_PLAN_KEY,null);const planViewer={get projectSlug(){return projectSlug.value},get sessionId(){return sessionId.value},get ready(){return enabled.value&&Boolean(plan.value)&&!resource.isFetching.value},get error(){return resource.loadError.value},get open(){return enabled.value&&open.value},get view(){return view.value},async openPlan(requestedView=`default`,isCurrent=()=>true){const target=endpoint.value;const actor=actorKey.value;if(!enabled.value||!isCurrent())throw new Error(`This session's plan viewer is no longer available.`);archiveId.value=``;await resource.reload();if(!enabled.value||!isCurrent()||target!==endpoint.value||actor!==actorKey.value)throw new Error(`The selected session changed before its plan opened.`);if(resource.loadError.value)throw new Error(resource.loadError.value);if(!plan.value?.current&&!plan.value?.history?.length)throw new Error(`This session has no current plan or plan history.`);showPlan(requestedView);await nextTick();if(!planViewer.open||!isCurrent()||target!==endpoint.value||actor!==actorKey.value)throw new Error(`The plan viewer closed or its session changed before it opened.`)}};watchEffect(()=>{if(!colleaguePlan)return;if(enabled.value)colleaguePlan.value=planViewer;else if(colleaguePlan.value===planViewer)colleaguePlan.value=null});onBeforeUnmount(()=>{if(colleaguePlan?.value===planViewer)colleaguePlan.value=null});async function changePlan(operation){if(!canChangePlan.value)return;const restoring=operation===`restore`;if(restoring){if(!archiveId.value||plan.value?.current)return}else if(!plan.value?.current||archiveId.value)return;const target=endpoint.value;const actor=actorKey.value;pendingOperation.value=operation;try{const result=await getHttpWebClient().request(target+`/`+operation,{method:`POST`,body:restoring?{archiveId:archiveId.value}:{expectedRevision:plan.value.current.revision,expectedProgressRevision:plan.value.current.progressRevision||``}});if(result?.ok===false)throw new Error(result.error||`The plan could not be updated.`);if(target!==endpoint.value||actor!==actorKey.value)return;notice.value=result.notice||(restoring?`The plan is now current and active.`:`The plan is archived and remains available in History.`);if(restoring)archiveId.value=``;await resource.reload();if(target===endpoint.value&&actor===actorKey.value)view.value=restoring?`current`:`history`}catch(error){if(target===endpoint.value&&actor===actorKey.value)feedback.report({source:`vibe64.work-plan.`+operation,intent:`action-feedback`,severity:`error`,message:error.message})}finally{if(target===endpoint.value&&actor===actorKey.value)pendingOperation.value=``}}const technicalPanel=ref(null);const sections=computed(()=>{const result=[];let prose=[];let technical=false;const flush=()=>{if(prose.length){result.push({technical,blocks:parseLongTextReviewBlocks(prose.join(`
8
+ `))});prose=[]}};for(const line of parseWorkPlanLines((planDocument.value===`progress`?plan.value?.progressText:plan.value?.text)||``,{markTechnicalDetails:planDocument.value===`plan`})){if(line.technicalDetails){flush();technical=true;continue}if(line.checked!==void 0){flush();result.push({technical,checked:line.checked,blocks:parseLongTextReviewBlocks(line.text)})}else if(!/^Status: (active|completed)\s*$/u.test(line.text))prose.push(line.text)}flush();return result});const overviewSections=computed(()=>sections.value.filter(section=>!section.technical));const technicalSections=computed(()=>sections.value.filter(section=>section.technical));watch([planDocument,archiveId,()=>plan.value?.revision],()=>{technicalPanel.value=null});watch([sessionId,sessionsPath,actorKey],()=>{open.value=false;technicalPanel.value=null;archiveId.value=``;notice.value=``;view.value=`current`;planDocument.value=`plan`;pendingOperation.value=``});watch(()=>props.active,active=>{if(!active)open.value=false});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[visible.value?(openBlock(),createElementBlock(`div`,_hoisted_1$34,[createVNode(VBtn,{icon:unref(mdiFileDocumentOutline),variant:currentActive.value?`tonal`:`text`,color:currentActive.value?`warning`:void 0,"aria-label":label.value,title:label.value,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>showPlan())},null,8,[`icon`,`variant`,`color`,`aria-label`,`title`]),notice.value?(openBlock(),createElementBlock(`span`,_hoisted_2$28,toDisplayString(notice.value),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createVNode(VDialog,{modelValue:open.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>open.value=$event),"max-width":`880`,height:`min(760px, calc(100dvh - 48px))`,scrollable:``,"aria-label":`Plan and history`},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`,height:`100%`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center ga-2 px-4 py-2 flex-shrink-0`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`span`,{class:`text-title-large`},`Plan`,-1)),createVNode(VSpacer),view.value===`current`&&plan.value?.current?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiArchiveArrowDownOutline),disabled:!canChangePlan.value,"aria-busy":pendingOperation.value===`archive`,variant:`text`,size:`small`,width:`120`,"min-height":`48`,"aria-label":`Archive plan`,title:`Move this plan to History without marking it completed`,onClick:_cache[1]||(_cache[1]=$event=>changePlan(`archive`))},{default:withCtx(()=>[createTextVNode(toDisplayString(pendingOperation.value===`archive`?`Archiving…`:`Archive`),1)]),_:1},8,[`prepend-icon`,`disabled`,`aria-busy`])):createCommentVNode(``,true),archiveId.value&&!plan.value?.current?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiRestore),disabled:!canChangePlan.value,"aria-busy":pendingOperation.value===`restore`,variant:`text`,color:`primary`,size:`small`,width:`128`,"min-height":`48`,"aria-label":`Make current`,title:`Move this archived plan back to Current plan and reopen it as Active`,onClick:_cache[2]||(_cache[2]=$event=>changePlan(`restore`))},{default:withCtx(()=>[createTextVNode(toDisplayString(pendingOperation.value===`restore`?`Restoring…`:`Make current`),1)]),_:1},8,[`prepend-icon`,`disabled`,`aria-busy`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close plan`,title:`Close plan`,onClick:_cache[3]||(_cache[3]=$event=>open.value=false)},null,8,[`icon`])]),_:1}),createVNode(VTabs,{"model-value":view.value,color:`primary`,grow:``,height:`48`,class:`flex-grow-0 flex-shrink-0`,"aria-label":`Plan views`,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>{view.value=$event;archiveId.value=``})},{default:withCtx(()=>[createVNode(VTab,{value:`current`,"prepend-icon":unref(mdiFileDocumentOutline)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Current plan`,-1)])]),_:1},8,[`prepend-icon`]),createVNode(VTab,{value:`history`,"prepend-icon":unref(mdiHistory)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`History`,-1)])]),_:1},8,[`prepend-icon`])]),_:1},8,[`model-value`]),createVNode(VDivider),archiveId.value?(openBlock(),createBlock(VSheet,{key:0,color:`surface`,border:`b`,class:`work-plan-archive-context px-4 py-3`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowLeft),variant:`text`,"aria-label":`Back to plan history`,title:`Back to plan history`,onClick:_cache[5]||(_cache[5]=$event=>archiveId.value=``)},null,8,[`icon`]),createBaseVNode(`div`,_hoisted_3$24,[createVNode(VChip,{color:`primary`,variant:`tonal`,size:`small`,class:`mb-1`},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Archived · read-only`,-1)])]),_:1}),createBaseVNode(`p`,_hoisted_4$19,toDisplayString(selectedArchive.value?`Archived ${selectedArchive.value.archivedDate}`:`Saved snapshot`),1)])]),_:1})):createCommentVNode(``,true),createVNode(VCardText,{class:normalizeClass([`work-plan-content pa-4 pa-sm-6`,{"d-flex flex-column":showHistory.value&&!history.value.length}])},{default:withCtx(()=>[unref(resource).loadError.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>unref(resource).reload())},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),showHistory.value?(openBlock(),createElementBlock(Fragment,{key:1},[history.value.length?(openBlock(),createBlock(VList,{key:0,"aria-label":`Archived plans`,class:`pa-0 bg-transparent`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(history.value,item=>{return openBlock(),createBlock(VListItem,{key:item.id,"aria-label":`Open archived plan: ${item.title}`,role:`button`,rounded:`lg`,border:``,class:`mb-2 pa-4`,onClick:$event=>archiveId.value=item.id},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$17,[createVNode(VListItemTitle,{class:`work-plan-history-title text-title-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1024),createVNode(VIcon,{icon:unref(mdiChevronRight),class:`flex-shrink-0`},null,8,[`icon`])]),createBaseVNode(`p`,_hoisted_6$14,`Archived `+toDisplayString(item.archivedDate),1),createBaseVNode(`div`,_hoisted_7$12,[createVNode(VChip,{color:item.status===`completed`?`success`:void 0,size:`small`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$12,toDisplayString(item.status===`completed`?`Completed`:`Unfinished`),1)]),_:2},1032,[`color`]),typeof item.total===`number`?(openBlock(),createElementBlock(`span`,_hoisted_9$9,toDisplayString(item.total)+` requirements`,1)):createCommentVNode(``,true)])]),_:2},1032,[`aria-label`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`div`,_hoisted_10$8,[createVNode(VIcon,{icon:unref(mdiHistory),size:`48`,class:`text-medium-emphasis mb-4`},null,8,[`icon`]),_cache[15]||(_cache[15]=createBaseVNode(`p`,{class:`text-title-medium mb-2`},`No archived plans`,-1)),_cache[16]||(_cache[16]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Archive a plan to keep it here.`,-1))]))],64)):!selectedPlanReady.value&&!unref(resource).loadError.value?(openBlock(),createBlock(VSkeletonLoader,{key:2,type:`heading, paragraph, paragraph, paragraph`,"aria-label":`Loading plan`,"aria-busy":`true`})):plan.value?.available&&selectedPlanReady.value?(openBlock(),createElementBlock(Fragment,{key:3},[createBaseVNode(`div`,_hoisted_11$7,[createVNode(VChip,{color:plan.value.status===`completed`?`success`:`warning`,variant:`tonal`,size:`small`,"prepend-icon":plan.value.status===`completed`?unref(mdiCheckCircleOutline):void 0},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_12$7,toDisplayString(plan.value.status===`completed`?`Completed`:archiveId.value?`Unfinished`:`Active`),1)]),_:1},8,[`color`,`prepend-icon`]),createBaseVNode(`span`,_hoisted_13$6,toDisplayString(plan.value.total)+` requirements`,1)]),createVNode(VTabs,{modelValue:planDocument.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>planDocument.value=$event),grow:``,height:`48`,"aria-label":`Plan documents`,class:`mb-4`},{default:withCtx(()=>[createVNode(VTab,{value:`plan`},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Plan`,-1)])]),_:1}),createVNode(VTab,{value:`progress`},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Progress`,-1)])]),_:1})]),_:1},8,[`modelValue`]),planDocument.value===`progress`&&!plan.value.progressAvailable?(openBlock(),createElementBlock(`p`,_hoisted_14$4,`This historical plan has no separate Progress document. Its original evidence remains in Plan.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(overviewSections.value,(section,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:normalizeClass({"work-plan-item":section.checked!==void 0})},[section.checked!==void 0?(openBlock(),createElementBlock(`input`,{key:0,type:`checkbox`,checked:section.checked,disabled:``,"aria-label":`Recorded checklist mark`},null,8,_hoisted_15$4)):createCommentVNode(``,true),createVNode(unref(LongTextPreviewBlocks_default),{blocks:section.blocks},null,8,[`blocks`])],2)}),128)),technicalSections.value.length?(openBlock(),createBlock(VExpansionPanels,{key:1,modelValue:technicalPanel.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>technicalPanel.value=$event),class:`mt-4`,variant:`accordion`},{default:withCtx(()=>[createVNode(VExpansionPanel,{value:`technical`,title:`Technical details`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(technicalSections.value,(section,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:normalizeClass({"work-plan-item":section.checked!==void 0})},[section.checked!==void 0?(openBlock(),createElementBlock(`input`,{key:0,type:`checkbox`,checked:section.checked,disabled:``,"aria-label":`Recorded checklist mark`},null,8,_hoisted_16$4)):createCommentVNode(``,true),createVNode(unref(LongTextPreviewBlocks_default),{blocks:section.blocks},null,8,[`blocks`])],2)}),128))]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true)],64)):!unref(resource).loadError.value?(openBlock(),createElementBlock(`div`,_hoisted_17$3,[createVNode(VIcon,{icon:unref(mdiArchiveOutline),size:`48`,class:`text-medium-emphasis mb-4`},null,8,[`icon`]),_cache[19]||(_cache[19]=createBaseVNode(`p`,{class:`text-title-medium mb-2`},`No current plan`,-1)),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Ask Senior in chat to create a plan or reopen one from History.`,-1))])):createCommentVNode(``,true)]),_:1},8,[`class`])]),_:1})]),_:1},8,[`modelValue`])],64)}}};var Vibe64WorkPlan_default=_plugin_vue_export_helper_default(_sfc_main$39,[[`__scopeId`,`data-v-e0f4c1f1`]]);var _hoisted_1$33={class:`starred-files-menu__header`};var _hoisted_2$27={class:`starred-files-menu__list`};var _sfc_main$38={__name:`Vibe64StarredFilesMenu`,props:{bookmarks:{type:Object,required:true}},emits:[`open-file`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{xs:mobile}=useDisplay();const opened=ref(false);const query=ref(``);const menu=ref(null);const panel=ref(null);const searchField=ref(null);const matchingFiles=computed(()=>{const search=(query.value||``).trim().toLocaleLowerCase();return props.bookmarks.files.value.filter(file=>file.path.toLocaleLowerCase().includes(search))});let returnFocus=false;function focusSearch(){if(opened.value)searchField.value?.focus()}function dismiss(){returnFocus=true;opened.value=false}function restoreTriggerFocus(){if(returnFocus)menu.value?.activatorEl?.focus();returnFocus=false}function onOpenChange(value){if(value){query.value=``;props.bookmarks.refresh()}else if(document.activeElement===menu.value?.activatorEl||panel.value?.$el?.contains(document.activeElement))returnFocus=true}function openFile(filePath){returnFocus=false;opened.value=false;emit(`open-file`,{path:filePath})}function openFirstMatch(){const file=matchingFiles.value.find(entry=>entry.available);if(file)openFile(file.path)}return(_ctx,_cache)=>{return openBlock(),createBlock(resolveDynamicComponent(unref(mobile)?unref(VBottomSheet):unref(VMenu)),{ref_key:`menu`,ref:menu,modelValue:opened.value,"onUpdate:modelValue":[_cache[1]||(_cache[1]=$event=>opened.value=$event),onOpenChange],"close-on-content-click":false,"content-props":{role:`dialog`,"aria-label":`Starred files`},location:`top start`,"max-width":`400`,onAfterEnter:focusSearch,onAfterLeave:restoreTriggerFocus},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{"aria-haspopup":`dialog`,"aria-label":`Starred files (${__props.bookmarks.files.value.length})`,class:`starred-files-menu__trigger`,icon:unref(mdiStarOutline),size:`small`,title:`Your starred files`,variant:`text`}),null,16,[`aria-label`,`icon`])]),default:withCtx(()=>[createVNode(VCard,{ref_key:`panel`,ref:panel,class:`starred-files-menu`,rounded:`lg`,onKeydown:withKeys(withModifiers(dismiss,[`stop`,`prevent`]),[`esc`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$33,[createVNode(VTextField,{ref_key:`searchField`,ref:searchField,modelValue:query.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>query.value=$event),"aria-label":`Find a starred file`,autofocus:``,clearable:``,density:`compact`,"hide-details":``,placeholder:`Search`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,onKeydown:withKeys(withModifiers(openFirstMatch,[`prevent`]),[`enter`])},null,8,[`modelValue`,`prepend-inner-icon`,`onKeydown`]),createVNode(VBtn,{"aria-label":`Close starred files`,icon:unref(mdiClose),size:`small`,variant:`text`,onClick:dismiss},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_2$27,[createVNode(Vibe64StarredFilesList_default,{bookmarks:__props.bookmarks,files:matchingFiles.value,onOpenFile:openFile},null,8,[`bookmarks`,`files`])])]),_:1},8,[`onKeydown`])]),_:1},40,[`modelValue`])}}};var Vibe64StarredFilesMenu_default=_plugin_vue_export_helper_default(_sfc_main$38,[[`__scopeId`,`data-v-b86a8fd5`]]);var _hoisted_1$32=[`aria-label`];var _hoisted_2$26={class:`vibe64-approvals__bar-label`};var _hoisted_3$23={key:0,class:`vibe64-approvals__sheet-header`};var _hoisted_4$18={class:`vibe64-approvals__list`};var _hoisted_5$16={class:`vibe64-approvals__head`};var _hoisted_6$13={class:`vibe64-approvals__who`};var _hoisted_7$11={class:`text-body-medium font-weight-medium text-truncate`};var _hoisted_8$11={class:`text-medium-emphasis font-weight-regular`};var _hoisted_9$8={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_10$7={key:0,class:`vibe64-approvals__draft`};var _hoisted_11$6={class:`vibe64-approvals__actions`};var _hoisted_12$6={key:1,class:`vibe64-approvals__text`};var _hoisted_13$5={key:2,class:`vibe64-approvals__note text-body-small text-medium-emphasis`};var _hoisted_14$3={key:4,class:`vibe64-approvals__draft`};var _hoisted_15$3={class:`vibe64-approvals__actions`};var _hoisted_16$3={key:5,class:`vibe64-approvals__actions vibe64-approvals__actions--owner`};var _hoisted_17$2={key:6,class:`vibe64-approvals__actions`};var _hoisted_18$1={key:0,class:`vibe64-approvals__decided`,"aria-label":`Decided messages`};var _hoisted_19$1=[`data-approval-id`];var _hoisted_20$1={class:`vibe64-approvals__row-line`};var _hoisted_21$1={class:`text-body-small vibe64-approvals__row-text`};var _hoisted_22$1={key:0,class:`vibe64-approvals__excerpt text-body-small`};var _hoisted_23$1={key:1,class:`vibe64-approvals__excerpt text-body-small`};var _hoisted_24$1=[`aria-label`];var _hoisted_25={key:2,class:`vibe64-approvals__quote text-body-small`};var RECENT_ROWS=3;var _sfc_main$37={__name:`Vibe64MainChatApprovals`,props:{approvals:{type:Object,required:true},phone:{type:Boolean,default:false}},emits:[`show-in-chat`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const sheetOpen=ref(false);const showEarlier=ref(false);const draft=reactive({id:``,mode:``,text:``});const shownDecided=computed(()=>showEarlier.value?[...props.approvals.recentDecided,...props.approvals.earlierDecided]:props.approvals.recentDecided.slice(0,RECENT_ROWS));const hiddenDecidedCount=computed(()=>showEarlier.value?0:props.approvals.recentDecided.length+props.approvals.earlierDecided.length-shownDecided.value.length);const visible=computed(()=>props.approvals.open.length>0||props.approvals.recentDecided.length>0);const barLabel=computed(()=>{const count=props.approvals.open.length;if(!count)return`Messages for approval`;return`${count} ${count===1?`message`:`messages`} waiting for approval`});function initial(person={}){return String(person.displayName||person.id||`?`).trim().charAt(0).toUpperCase()}function time(value){const date=new Date(value);return Number.isNaN(date.getTime())?``:date.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function heading(entry){if(props.approvals.own(entry))return`You`;return props.approvals.isOwner?`${entry.sender.displayName} wants to send`:entry.sender.displayName}function sending(entry){return props.approvals.pending[entry.id]===`approve`||entry.status===`sending`}function busy(entry){return Boolean(props.approvals.pending[entry.id])}function decision(entry){const by=entry.decidedBy?.id&&entry.decidedBy.id===props.approvals.viewerId?`you`:entry.decidedBy?.displayName||`the owner`;const subject=props.approvals.own(entry)?``:`${entry.sender.displayName} · `;const at=time(entry.decidedAt||entry.updatedAt);if(entry.status===`sent`)return{icon:mdiCheck,color:`success`,text:`${subject}Sent by ${by} · ${at}${entry.originalText?` · Edited by ${by}`:``}`};if(entry.status===`declined`)return{icon:mdiClose,color:`error`,text:`${subject}Declined by ${by} · ${at}`};return{icon:mdiUndoVariant,color:void 0,text:`${subject}Withdrawn by ${by} · ${at}`}}function openDraft(entry,mode){Object.assign(draft,{id:entry.id,mode,text:mode===`decline`?``:entry.text})}function closeDraft(){Object.assign(draft,{id:``,mode:``,text:``})}async function saveDraft(entry){const operation={edit:props.approvals.edit,approve:props.approvals.approve,decline:props.approvals.decline}[draft.mode];if(await operation(entry,draft.text))closeDraft()}__expose({open:()=>{sheetOpen.value=true}});return(_ctx,_cache)=>{return visible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`vibe64-approvals`,{"vibe64-approvals--phone":__props.phone}])},[__props.phone?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`vibe64-approvals__bar`,"aria-label":`${barLabel.value}. Open messages for approval`,onClick:_cache[0]||(_cache[0]=$event=>sheetOpen.value=true)},[createVNode(VIcon,{icon:unref(mdiClockOutline),size:`20`,color:`secondary`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_2$26,toDisplayString(barLabel.value),1),createVNode(VIcon,{icon:unref(mdiChevronUp),size:`20`},null,8,[`icon`])],8,_hoisted_1$32)):createCommentVNode(``,true),(openBlock(),createBlock(resolveDynamicComponent(__props.phone?unref(VBottomSheet):`section`),mergeProps(__props.phone?{modelValue:sheetOpen.value,"onUpdate:modelValue":value=>{sheetOpen.value=value}}:{},{class:`vibe64-approvals__stack`,"aria-label":`Messages for approval`}),{default:withCtx(()=>[createVNode(VCard,{variant:__props.phone?`elevated`:`flat`,class:normalizeClass([`vibe64-approvals__panel`,{"vibe64-approvals__panel--sheet":__props.phone}])},{default:withCtx(()=>[__props.phone?(openBlock(),createElementBlock(`div`,_hoisted_3$23,[_cache[5]||(_cache[5]=createBaseVNode(`h2`,{class:`text-title-medium`},`Messages for approval`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close messages for approval`,onClick:_cache[1]||(_cache[1]=$event=>sheetOpen.value=false)},null,8,[`icon`])])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$18,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.approvals.open,entry=>{return openBlock(),createBlock(VCard,{key:entry.id,variant:`outlined`,class:`vibe64-approvals__card`,"data-approval-id":entry.id},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$16,[createVNode(VAvatar,{size:`32`,color:`secondary`,variant:`tonal`,class:`vibe64-approvals__avatar`},{default:withCtx(()=>[createTextVNode(toDisplayString(initial(entry.sender)),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_6$13,[createBaseVNode(`div`,_hoisted_7$11,[createTextVNode(toDisplayString(heading(entry)),1),createBaseVNode(`span`,_hoisted_8$11,` · `+toDisplayString(time(entry.createdAt)),1)]),!__props.approvals.isOwner?(openBlock(),createElementBlock(`div`,_hoisted_9$8,` Waiting for `+toDisplayString(__props.approvals.ownerName)+` to approve `,1)):createCommentVNode(``,true)]),createVNode(VChip,{size:`small`,variant:`tonal`,color:sending(entry)?`primary`:`secondary`,class:`flex-shrink-0`},{default:withCtx(()=>[sending(entry)?(openBlock(),createBlock(VProgressCircular,{key:0,indeterminate:``,size:`12`,width:`2`,class:`me-1`})):(openBlock(),createBlock(VIcon,{key:1,icon:unref(mdiClockOutline),size:`14`,start:``},null,8,[`icon`])),createTextVNode(` `+toDisplayString(sending(entry)?`Sending…`:`Waiting`),1)]),_:2},1032,[`color`])]),draft.id===entry.id&&draft.mode!==`decline`?(openBlock(),createElementBlock(`div`,_hoisted_10$7,[createVNode(VTextarea,{modelValue:draft.text,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>draft.text=$event),label:draft.mode===`approve`?`Edit ${entry.sender.displayName}'s message`:`Edit your message`,"auto-grow":``,rows:`2`,"max-rows":`8`,density:`compact`,variant:`outlined`,"hide-details":`auto`,autofocus:``},null,8,[`modelValue`,`label`]),createBaseVNode(`div`,_hoisted_11$6,[createVNode(VBtn,{variant:`text`,block:__props.phone,onClick:closeDraft},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`block`]),createVNode(VBtn,{color:`primary`,variant:`flat`,block:__props.phone,disabled:!draft.text.trim(),loading:Boolean(__props.approvals.pending[entry.id]),onClick:$event=>saveDraft(entry)},{default:withCtx(()=>[createTextVNode(toDisplayString(draft.mode===`approve`?`Send`:`Save`),1)]),_:1},8,[`block`,`disabled`,`loading`,`onClick`])])])):(openBlock(),createElementBlock(`p`,_hoisted_12$6,toDisplayString(entry.text),1)),entry.steer&&entry.status===`waiting`?(openBlock(),createElementBlock(`p`,_hoisted_13$5,toDisplayString(__props.approvals.isOwner?`Sent while the assistant was working. It joins the current turn if it's still running when you approve.`:`Sent while the assistant was working. It joins the current turn if it's still running when ${__props.approvals.ownerName} approves.`),1)):createCommentVNode(``,true),entry.error&&!sending(entry)?(openBlock(),createBlock(VAlert,{key:3,type:`error`,variant:`tonal`,density:`compact`,class:`mt-2`},{default:withCtx(()=>[createTextVNode(` Couldn't send: `+toDisplayString(entry.error)+` Try again. `,1)]),_:2},1024)):createCommentVNode(``,true),draft.id===entry.id&&draft.mode===`decline`?(openBlock(),createElementBlock(`div`,_hoisted_14$3,[createVNode(VTextarea,{modelValue:draft.text,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>draft.text=$event),label:`Add a note for ${entry.sender.displayName} (optional)`,"auto-grow":``,rows:`1`,"max-rows":`4`,counter:`500`,rules:[value=>value.length<=500||`Keep the note under 500 characters.`],density:`compact`,variant:`outlined`,autofocus:``},null,8,[`modelValue`,`label`,`rules`]),createBaseVNode(`div`,_hoisted_15$3,[createVNode(VBtn,{variant:`text`,block:__props.phone,onClick:closeDraft},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`block`]),createVNode(VBtn,{color:`error`,variant:`tonal`,block:__props.phone,disabled:draft.text.length>500,loading:__props.approvals.pending[entry.id]===`decline`,onClick:$event=>saveDraft(entry)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Decline `,-1)])]),_:1},8,[`block`,`disabled`,`loading`,`onClick`])])])):draft.id!==entry.id&&__props.approvals.isOwner?(openBlock(),createElementBlock(`div`,_hoisted_16$3,[createVNode(VBtn,{color:`primary`,variant:`flat`,block:__props.phone,disabled:busy(entry),loading:__props.approvals.pending[entry.id]===`approve`,"prepend-icon":unref(mdiSend),onClick:$event=>__props.approvals.approve(entry)},{default:withCtx(()=>[createTextVNode(toDisplayString(entry.status===`sending`&&!__props.approvals.pending[entry.id]?`Send again`:`Approve & send`),1)]),_:2},1032,[`block`,`disabled`,`loading`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`tonal`,block:__props.phone,disabled:busy(entry)||entry.status===`sending`,"prepend-icon":unref(mdiPencilOutline),onClick:$event=>openDraft(entry,`approve`)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Edit then send `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry)||entry.status===`sending`,onClick:$event=>openDraft(entry,`decline`)},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(` Decline `,-1)])]),_:1},8,[`block`,`disabled`,`onClick`])])):draft.id!==entry.id&&__props.approvals.own(entry)?(openBlock(),createElementBlock(`div`,_hoisted_17$2,[createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry),"prepend-icon":unref(mdiPencilOutline),onClick:$event=>openDraft(entry,`edit`)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`onClick`]),createVNode(VBtn,{variant:`text`,block:__props.phone,disabled:busy(entry),"prepend-icon":unref(mdiUndoVariant),loading:__props.approvals.pending[entry.id]===`withdraw`,onClick:$event=>__props.approvals.withdraw(entry)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Withdraw `,-1)])]),_:1},8,[`block`,`disabled`,`prepend-icon`,`loading`,`onClick`])])):createCommentVNode(``,true)]),_:2},1032,[`data-approval-id`])}),128)),shownDecided.value.length?(openBlock(),createElementBlock(`ul`,_hoisted_18$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(shownDecided.value,entry=>{return openBlock(),createElementBlock(`li`,{key:entry.id,"data-approval-id":entry.id,class:`vibe64-approvals__row`},[createBaseVNode(`div`,_hoisted_20$1,[createVNode(VIcon,{icon:decision(entry).icon,color:decision(entry).color,size:`18`,class:`flex-shrink-0`},null,8,[`icon`,`color`]),createBaseVNode(`span`,_hoisted_21$1,toDisplayString(decision(entry).text),1),entry.status===`sent`?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,density:`comfortable`,class:`vibe64-approvals__show`,onClick:$event=>emit(`show-in-chat`,entry)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Show in chat `,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true)]),entry.status===`sent`?(openBlock(),createElementBlock(`p`,_hoisted_22$1,toDisplayString(entry.text),1)):(openBlock(),createElementBlock(`details`,_hoisted_23$1,[createBaseVNode(`summary`,{"aria-label":`Message: ${entry.text}`},toDisplayString(entry.text),9,_hoisted_24$1)])),entry.status===`declined`&&entry.note?(openBlock(),createElementBlock(`blockquote`,_hoisted_25,` “`+toDisplayString(entry.note)+`” `,1)):createCommentVNode(``,true)],8,_hoisted_19$1)}),128))])):createCommentVNode(``,true),hiddenDecidedCount.value?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,size:`small`,class:`align-self-start`,onClick:_cache[4]||(_cache[4]=$event=>showEarlier.value=true)},{default:withCtx(()=>[createTextVNode(` Show earlier (`+toDisplayString(hiddenDecidedCount.value)+`) `,1)]),_:1})):createCommentVNode(``,true)])]),_:1},8,[`variant`,`class`])]),_:1},16))],2)):createCommentVNode(``,true)}}};var Vibe64MainChatApprovals_default=_plugin_vue_export_helper_default(_sfc_main$37,[[`__scopeId`,`data-v-26d38d3c`]]);var PROMPT_HINT_DEBOUNCE_MS=5e3;var PROMPT_HINT_MIN_INTERVAL_MS=3e4;var promptHintOperationSequence=0;function normalizedPromptHintText(value=``){return String(value||``).trim()}function promptHintOperationId(){promptHintOperationSequence+=1;return`hint:${Date.now().toString(36)}:${promptHintOperationSequence.toString(36)}`}function promptHintConversationFingerprint(turns=[]){const recentTurns=(Array.isArray(turns)?turns:[]).slice(-8);return JSON.stringify(recentTurns.map((turn={})=>({assistant:normalizedPromptHintText(turn?.assistant?.text),turnId:normalizedPromptHintText(turn?.turnId),user:normalizedPromptHintText(turn?.user?.text)})))}function useVibe64PromptHints({active=true,blankConversation=false,canRequest=true,conversationKey=``,draft=``,existingProject=false,onSelect=()=>false,policy={},sessionId=``,sessionsApiPath=``}={},{debounceMs=PROMPT_HINT_DEBOUNCE_MS,minIntervalMs=PROMPT_HINT_MIN_INTERVAL_MS,request=(path,options)=>getHttpWebClient().request(path,options)}={}){const originId=vibe64BrowserTabOriginId();const responseStatus=ref(`idle`);const currentSessionId=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionId)));const currentSessionsApiPath=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionsApiPath)));const currentPolicy=computed(()=>readRefOrGetterValue(policy)||{});const controller=useAssistantSuggestions({active:computed(()=>Boolean(readRefOrGetterValue(active)!==false&&readRefOrGetterValue(canRequest)!==false&&currentPolicy.value.enabled!==false&&currentPolicy.value.ready===true&&currentSessionId.value&&currentSessionsApiPath.value)),requestKey:computed(()=>[currentSessionId.value,currentSessionsApiPath.value,readRefOrGetterValue(conversationKey),currentPolicy.value.revision,currentPolicy.value.version,readRefOrGetterValue(blankConversation),readRefOrGetterValue(existingProject)]),draft:computed(()=>normalizedPromptHintDraft(readRefOrGetterValue(draft))),debounceMs,minIntervalMs,onSelect,async generate({draft:requestDraft,signal}){const targetSession=currentSessionId.value;const targetPath=currentSessionsApiPath.value;const operationId=promptHintOperationId();const cancelPath=scopedDevelopmentApiUrl(vibe64SessionPromptHintsCancelPath(targetPath,targetSession));const cancel=()=>{request(cancelPath,{method:`POST`,body:{operationId,originId}}).catch(()=>null)};signal.addEventListener(`abort`,cancel,{once:true});try{const response=await request(vibe64SessionPromptHintsPath(targetPath,targetSession),{method:`POST`,body:{draft:requestDraft,operationId,originId},signal});if(signal.aborted)return[];responseStatus.value=response?.status;return[`ready`,`static`].includes(response?.status)?normalizedPromptHintSuggestions(response.suggestions):[]}finally{signal.removeEventListener(`abort`,cancel)}}});return{blurComposer:controller.blur,composerFocused:controller.composerFocused,dismissPromptHints:controller.dismiss,focusComposer:controller.focus,loading:controller.loading,preview:controller.preview,previewPromptHint:suggestion=>controller.previewSuggestion(normalizedPromptHintSuggestion(suggestion)),selectPromptHint:suggestion=>controller.select(normalizedPromptHintSuggestion(suggestion)),status:computed(()=>controller.loading.value?`loading`:controller.items.value.length===3?responseStatus.value:`idle`),suggestions:controller.items,visible:controller.visible}}var _hoisted_1$31={class:`studio-autopilot__composer-actions`};var _hoisted_2$25={key:0,class:`studio-autopilot__settings-access`};var _hoisted_3$22={class:`text-body-small`,role:`status`};var _sfc_main$36={__name:`Vibe64AutopilotChat`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,agentObservationLost,agentStopEnabled,agentStopVisible,agentWorking,answerChoices,approvalMode,assistantAccessError,assistantAccessLoading,assistantAccessScopeKey,assistantCanConfigureRouting,assistantCanUsePurpose,assistantPurposes,assistantRestrictionMessage,attachPreviewDiagnostics,cancelOptimisticMessage,captureVisiblePreview,chatCollapsed,chatReloading,chatTurns,checkTemporaryAiUpdate,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerInput,composerKey,composerPlaceholder,composerSending,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,connectionRecoveryVisible,conversationFollowLatestKey,conversationLogVisible,conversationScrollKey,dismissNumberedQuestions,editOptimisticMessage,emptyConversationWelcome,fileBookmarks,finishTemporaryAiTask,interrupting,loadMoreChatTurns,mainChat,mainChatApprovals,numberedQuestions,numberedQuestionSelectItems,openIntegrationRequest,openSourceEditorFile,openWorkingFile,phoneLayout,previewAttachmentState,projectSlug,props,questionAnswers,reasoningActive,reloadAssistantAccess,reloadChatPane,repositoryOperationActive,repositoryRecoverySending,requestAgentInterrupt,resendOptimisticMessage,reviewResolvedUpdate,routingRequest,runIntegrationRequest,saveWorkOperationActive,saveWorkSending,saveWorkTitle,selectedAnswerChoice,sendLessonMessage,sessionId,sessionSourceRoot,sourceOperationsSuspended,structuredQuestionActive,submitComposerMessage,temporaryAiWorkspace,testApproval,thinkingLabel,thinkingVisible,updateComposerAttachments,updateConflictRecovery,updateWorkDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus}=__props.view;const conversationView=ref(null);const composerSendButton=ref(null);const composerSettingsOpen=ref(false);const composerSettingsButton=ref(null);const workPlanViewer=ref(null);const thinkingStatusId=`studio-autopilot-thinking-${useId()}`;const composerAttachmentState=ref({count:0,hasUnresolved:false,uploading:false});const{blur:stopTypingOnBlur,noteInputActivity:noteTypingActivity,submit:stopTypingOnSubmit,typingLabel}=useVibe64SessionTypingPresence({active:computed(()=>props.active&&!props.sessionSelectionArchived),projectSlug,sessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});const composerAccessHint=computed(()=>assistantRestrictionMessage.value||composerHint.value);const composerAssistantLabel=computed(()=>{if(testApproval.value?.state===`waiting`)return`Waiting for memory approval`;if(!thinkingVisible.value)return typingLabel.value;if(props.conversationLog?.error)return``;return assistantRestrictionMessage.value||thinkingLabel.value});function showApprovedMessage(entry){mainChat.value?.querySelector(`.vibe64-conversation-log [data-approval-id="${CSS.escape(entry.id)}"]`)?.scrollIntoView({block:`center`,behavior:`smooth`})}const routingActionSending=ref(``);const routingActionError=ref(``);watch(()=>[routingRequest.value?.messageId,routingRequest.value?.stage,routingRequest.value?.status,routingRequest.value?.delivery],()=>{routingActionError.value=``});async function sendRoutingAction(action){const request=routingRequest.value;if(routingActionSending.value||!request)return;routingActionSending.value=action;routingActionError.value=``;try{const result=action===`implement`?await props.sendAgentMessage({message:`Implement the saved plan. I authorize implementation within its agreed scope.`,planRevision:request.workPlan.revision,submissionKind:`send`}):await props.conversationRuntime.continueWorkflow(request);if(result===false||result?.ok===false)throw new Error(result?.error||`The workflow action did not start. Check the conversation and try again.`);return result}catch(error){routingActionError.value=error?.message||`The workflow action did not start.`;return false}finally{routingActionSending.value=``}}const conversationAssistantLabel=computed(()=>props.session?.assistantSelection?vibe64AssistantSelectionLabel(props.session.assistantSelection):`Assistant`);const promptHintsBlankConversation=computed(()=>chatTurns.value.length<1);const promptHintsCanRequest=computed(()=>Boolean(props.active&&props.conversationRuntime?.canSubmit.value&&!props.conversationLog?.loading&&!props.conversationLog?.error&&!props.sessionSelectionArchived&&sessionId.value&&sessionSourceRoot.value&&!agentActive.value&&!composerSending.value&&!interrupting.value&&!repositoryOperationActive.value&&!repositoryRecoverySending.value&&!saveWorkSending.value&&!workspaceSetupRunning.value&&!workspaceSetupRetrying.value&&!sourceOperationsSuspended.value&&(promptHintsBlankConversation.value||assistantCanUsePurpose(`prompt_hint`))&&!structuredQuestionActive.value&&composerAttachmentState.value.count<1&&!composerAttachmentState.value.uploading&&!composerAttachmentState.value.hasUnresolved&&!previewAttachmentState.value.captureBusy&&!previewAttachmentState.value.diagnosticsBusy));const promptHintsConversationKey=computed(()=>JSON.stringify([promptHintConversationFingerprint(chatTurns.value),assistantAccessScopeKey.value,assistantPurposes.value.prompt_hint]));const promptHintsExistingProject=computed(()=>workspaceSetupStatus.value!==`unconfigured`);const{blurComposer:blurPromptHints,dismissPromptHints,focusComposer:focusPromptHints,loading:promptHintsLoading,preview:promptHintPreview,previewPromptHint,selectPromptHint,suggestions:promptHintSuggestions,visible:promptHintsVisible}=useVibe64PromptHints({active:computed(()=>props.active),blankConversation:promptHintsBlankConversation,canRequest:promptHintsCanRequest,conversationKey:promptHintsConversationKey,draft:composerDraft,existingProject:promptHintsExistingProject,onSelect:applyPromptHint,policy:computed(()=>props.promptHintPolicy),sessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});const composerPromptHintPreview=computed(()=>promptHintsVisible.value&&!String(composerDraft.value||``).trim()&&promptHintPreview.value?promptHintPreview.value:``);const composerPromptHintPlaceholder=computed(()=>composerPromptHintPreview.value||composerPlaceholder.value);const composerSupportStatusVisible=computed(()=>Boolean(composerAssistantLabel.value||promptHintsVisible.value));async function sendComposerMessage(){if(conversationView.value?.composerBlocked||composerInput.value?.attachmentsCanSubmit?.()===false)return false;stopTypingOnSubmit();return submitComposerMessage()}async function continueConversation(){composerInput.value?.focus?.();if(composerDraft.value.trim()||composerAttachments.value.length)return;composerDraft.value=`Continue.`;await nextTick();if(composerCanSubmit.value)await sendComposerMessage()}function focusComposerSendButton(){composerSendButton.value?.focus?.()??composerSendButton.value?.$el?.focus?.()}function updateComposerAttachmentState(state={}){composerAttachmentState.value={count:Number(state?.count||0),hasUnresolved:state?.hasUnresolved===true,uploading:state?.uploading===true}}function focusTargetInside(target,selector){return Boolean(target?.closest?.(selector))}function handleComposerBlur(event={}){stopTypingOnBlur();if(focusTargetInside(event.relatedTarget,`[data-assistant-composer-support], .studio-autopilot__composer`))return;blurPromptHints()}function handleComposerRegionFocusOut(event={}){if(event.currentTarget?.contains?.(event.relatedTarget)||focusTargetInside(event.relatedTarget,`[data-assistant-composer-support]`))return;blurPromptHints()}function handlePromptHintsFocusOut(event={}){if(event.currentTarget?.contains?.(event.relatedTarget)||focusTargetInside(event.relatedTarget,`.studio-autopilot-prompt-textarea`))return;blurPromptHints()}function dismissPromptHintsAndFocus(){composerInput.value?.focus?.({preventScroll:true});dismissPromptHints()}function applyPromptHint(text=``){const suggestion=String(text||``).trim();if(!suggestion)return false;if(composerDraft.value!==suggestion){composerInput.value?.preserveHeightForNextModelValue?.();composerDraft.value=suggestion}nextTick(()=>{composerInput.value?.focus?.({preventScroll:true})});return true}async function showMainChat(){temporaryAiWorkspace.value?.closeWorkspace?.();await nextTick();mainChat.value?.focus?.({preventScroll:true})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(Vibe64ConversationLog_default,{ref_key:`conversationView`,ref:conversationView,"voice-runtime":unref(props).active&&!unref(props).sessionSelectionArchived?unref(props).conversationRuntime:null,working:unref(agentWorking),"integration-action-pending":unref(props).conversationLog?.integrationActionPending,"integration-connections":unref(props).conversationLog?.integrationConnections,"integration-action-error":unref(props).conversationLog?.integrationActionError,"integration-requests-enabled":unref(props).active&&!unref(props).sessionSelectionArchived,"session-id":unref(sessionId),"assistant-label":conversationAssistantLabel.value,class:`studio-autopilot__conversation`,error:unref(props).conversationLog?.error,"error-reloadable":unref(props).conversationLog?.errorReloadable,"follow-latest-key":unref(conversationFollowLatestKey),"has-more-before":unref(props).conversationLog?.hasMoreBefore,loading:unref(props).conversationLog?.loading,"loading-more":unref(props).conversationLog?.loadingMore,"load-more-error":unref(props).conversationLog?.loadMoreError,reloading:unref(chatReloading),"scroll-key":unref(conversationScrollKey),"source-root":unref(sessionSourceRoot),turns:unref(chatTurns),visible:unref(conversationLogVisible)&&!unref(chatCollapsed)&&!unref(temporaryAiWorkspace)?.visible,"welcome-message":unref(emptyConversationWelcome),onCancelTurn:unref(cancelOptimisticMessage),onEditTurn:unref(editOptimisticMessage),onLoadMore:unref(loadMoreChatTurns),onOpenSourceFile:unref(openSourceEditorFile),onOpenPlanHistory:_cache[11]||(_cache[11]=$event=>workPlanViewer.value?.showPlan(`history`)),onOpenIntegration:unref(openIntegrationRequest),onIntegrationAction:unref(runIntegrationRequest),onResendTurn:unref(resendOptimisticMessage),onReload:unref(reloadChatPane)},{hints:withCtx(()=>[createVNode(unref(AssistantComposerSupport_default),{activity:{label:composerAssistantLabel.value},loading:!composerAssistantLabel.value&&unref(promptHintsVisible)&&unref(promptHintsLoading),"status-id":thinkingStatusId,suggestions:!composerAssistantLabel.value&&unref(promptHintsVisible)?unref(promptHintSuggestions):[],onDismiss:dismissPromptHintsAndFocus,onFocusout:handlePromptHintsFocusOut,onPreview:unref(previewPromptHint),onSelect:unref(selectPromptHint)},createSlots({_:2},[unref(reasoningActive)&&composerAssistantLabel.value===`Assistant is working...`?{name:`activity`,fn:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiCircle),size:`7`,color:`primary`},null,8,[`icon`]),_cache[12]||(_cache[12]=createBaseVNode(`span`,null,[createTextVNode(`Assistant is working`),createBaseVNode(`span`,{class:`studio-autopilot__reasoning-dots`},`...`)],-1))]),key:`0`}:void 0]),1032,[`activity`,`loading`,`suggestions`,`onPreview`,`onSelect`])]),composer:withCtx(({composerBlocked,setVoiceFeedbackTarget})=>[createBaseVNode(`div`,{class:`studio-autopilot__composer`,"data-vibe64-guide":`chat`,onFocusout:handleComposerRegionFocusOut},[createVNode(Vibe64MainChatApprovals_default,{ref:`approvalsPanel`,approvals:unref(mainChatApprovals),phone:unref(phoneLayout),onShowInChat:showApprovedMessage},null,8,[`approvals`,`phone`]),createVNode(Vibe64RoutingNotice_default,{request:unref(routingRequest),selection:unref(props).session?.assistantSelection,mode:unref(assistantRoutingFromMetadata)(unref(props).session?.metadata)?.mode||``,active:unref(props).active&&unref(conversationLogVisible),"pending-action":routingActionSending.value,"action-error":routingActionError.value,busy:unref(agentActive)||unref(composerSending)||composerBlocked,onRetry:_cache[0]||(_cache[0]=$event=>sendRoutingAction(`continue`)),onImplement:_cache[1]||(_cache[1]=$event=>sendRoutingAction(`implement`)),onViewPlan:_cache[2]||(_cache[2]=$event=>workPlanViewer.value?.showPlan(`current`)),onSkip:_cache[3]||(_cache[3]=$event=>unref(props).interruptAgentTurn({reason:`skip-review`}))},null,8,[`request`,`selection`,`mode`,`active`,`pending-action`,`action-error`,`busy`]),(openBlock(),createBlock(_sfc_main$59,{ref_key:`composerInput`,ref:composerInput,key:unref(composerKey),"saved-attachments":unref(composerAttachments),modelValue:unref(composerDraft),"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>isRef(composerDraft)?composerDraft.value=$event:null),"aria-label":`Message AI assistant`,"attachments-enabled":unref(composerAttachmentsEnabled),"described-by":composerSupportStatusVisible.value?thinkingStatusId:``,disabled:unref(composerDisabled),density:`compact`,placeholder:composerPromptHintPlaceholder.value,"placeholder-affects-height":!composerPromptHintPreview.value,rows:1,"session-id":unref(sessionId),"submit-enabled":unref(composerCanSubmit)&&!composerBlocked,"tab-to-submit":``,onAttachmentStateChange:updateComposerAttachmentState,onAttachmentsChange:unref(updateComposerAttachments),onBlur:handleComposerBlur,onEscape:unref(dismissPromptHints),onFocus:unref(focusPromptHints),onInputActivity:unref(noteTypingActivity),onSubmit:sendComposerMessage,onTabToSubmit:focusComposerSendButton},{"input-start":withCtx(()=>[createVNode(unref(AssistantQuestionInputs_default),{answers:unref(questionAnswers),"onUpdate:answers":_cache[4]||(_cache[4]=$event=>isRef(questionAnswers)?questionAnswers.value=$event:null),choice:unref(selectedAnswerChoice),"onUpdate:choice":_cache[5]||(_cache[5]=$event=>isRef(selectedAnswerChoice)?selectedAnswerChoice.value=$event:null),questions:unref(numberedQuestions),"select-items":unref(numberedQuestionSelectItems),choices:unref(answerChoices),onDismiss:unref(dismissNumberedQuestions)},null,8,[`answers`,`choice`,`questions`,`select-items`,`choices`,`onDismiss`])]),footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_1$31,[!unref(props).sessionSelectionArchived?(openBlock(),createBlock(Vibe64ChatModeControls_default,{key:0,session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,goal:unref(readRefOrGetterValue)(unref(props).conversationRuntime?.goalState)?.goal,purposes:unref(assistantPurposes),disabled:unref(sourceOperationsSuspended),active:unref(agentActive),"can-configure":unref(assistantCanConfigureRouting),connecting:[`initializing`,`reconciling`].includes(unref(props).agentConnectionStatus),loading:unref(assistantAccessLoading),"load-error":unref(assistantAccessError),onReload:unref(reloadAssistantAccess),onSaved:unref(reloadAssistantAccess),onCustom:_cache[6]||(_cache[6]=$event=>{composerSettingsButton.value=$event;composerSettingsOpen.value=true})},{default:withCtx(({close:closeChatMode})=>[composerAccessHint.value?(openBlock(),createElementBlock(`div`,_hoisted_2$25,[createBaseVNode(`div`,_hoisted_3$22,[createTextVNode(toDisplayString(composerAccessHint.value)+` `,1),unref(agentObservationLost)&&!unref(agentActive)?(openBlock(),createBlock(VBtn,{key:0,size:`small`,variant:`text`,disabled:unref(composerDisabled)||unref(composerSending),onClick:$event=>{closeChatMode();continueConversation()}},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Continue `,-1)])]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])])):createCommentVNode(``,true)]),_:1},8,[`session`,`sessions-api-path`,`goal`,`purposes`,`disabled`,`active`,`can-configure`,`connecting`,`loading`,`load-error`,`onReload`,`onSaved`])):createCommentVNode(``,true),createVNode(VMenu,{eager:``,location:`top start`,"close-on-content-click":false},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{"aria-label":`Add to message`,title:`Add to message`,icon:unref(mdiPlus),size:`small`,variant:`text`,class:`studio-autopilot__composer-action`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VCard,{class:`studio-autopilot__composer-menu pa-2`,"aria-label":`Add to message`},{default:withCtx(()=>[unref(composerAttachmentsSupported)?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Attach files`,class:`studio-autopilot__composer-action justify-start`,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles,"prepend-icon":unref(mdiPaperclip),size:`small`,title:`Attach files`,type:`button`,variant:`text`,onClick:_cache[7]||(_cache[7]=$event=>unref(composerInput)?.openFilePicker?.())},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Attach files `,-1)])]),_:1},8,[`disabled`,`prepend-icon`])):createCommentVNode(``,true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).captureAvailable?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Attach visible preview`,class:`studio-autopilot__composer-action justify-start`,"aria-busy":unref(previewAttachmentState).captureBusy?`true`:void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).captureBusy,"prepend-icon":unref(mdiEyePlusOutline),size:`small`,title:`Attach visible preview`,type:`button`,variant:`text`,onClick:unref(captureVisiblePreview)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Attach visible preview `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).diagnosticsAvailable?(openBlock(),createBlock(VBtn,{key:2,"aria-label":`Attach console & network`,class:`studio-autopilot__composer-action justify-start`,"aria-busy":unref(previewAttachmentState).diagnosticsBusy?`true`:void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).diagnosticsBusy,"prepend-icon":unref(mdiConsoleNetworkOutline),size:`small`,title:`Attach console and network diagnostics`,type:`button`,variant:`text`,onClick:unref(attachPreviewDiagnostics)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(` Attach console & network `,-1)])]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024),createVNode(Vibe64StarredFilesMenu_default,{bookmarks:unref(fileBookmarks),onOpenFile:unref(openSourceEditorFile)},null,8,[`bookmarks`,`onOpenFile`]),createVNode(Vibe64AgentPlanUsage_default,{active:unref(props).active&&!unref(props).sessionSelectionArchived,session:unref(props).session,"conversation-runtime":unref(props).conversationRuntime,"sessions-api-path":unref(props).sessionsApiPath},null,8,[`active`,`session`,`conversation-runtime`,`sessions-api-path`]),createVNode(Vibe64WorkPlan_default,{ref_key:`workPlanViewer`,ref:workPlanViewer,session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,active:unref(props).active&&unref(conversationLogVisible),busy:unref(agentActive)},null,8,[`session`,`sessions-api-path`,`active`,`busy`]),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:composerSettingsOpen.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>composerSettingsOpen.value=$event),target:composerSettingsButton.value,"can-configure":unref(assistantCanConfigureRouting),"changes-disabled":unref(sourceOperationsSuspended),session:unref(props).session,"sessions-api-path":unref(props).sessionsApiPath,onSaved:_cache[9]||(_cache[9]=$event=>{unref(props).refreshSessionData?.();unref(reloadAssistantAccess)()})},null,8,[`modelValue`,`target`,`can-configure`,`changes-disabled`,`session`,`sessions-api-path`]),unref(approvalMode)?(openBlock(),createBlock(VBtn,{key:1,ref_key:`composerSendButton`,ref:composerSendButton,class:`studio-autopilot__approval-send`,color:`primary`,variant:`flat`,size:`small`,"aria-label":unref(composerSubmitAriaLabel),title:unref(composerSubmitTitle),disabled:!unref(composerCanSubmit)||composerBlocked,loading:unref(composerSubmitMode)===`approval-sending`,"append-icon":unref(mdiSend),onClick:sendComposerMessage},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(` Send for approval `,-1)])]),_:1},8,[`aria-label`,`title`,`disabled`,`loading`,`append-icon`])):(openBlock(),createBlock(Vibe64ComposerDelivery_default,{key:2,ref_key:`composerSendButton`,ref:composerSendButton,"stop-visible":unref(agentStopVisible),"stop-enabled":unref(agentStopEnabled),stopping:unref(interrupting),"can-submit":unref(composerCanSubmit)&&!composerBlocked&&attachmentState.canSubmit,sending:unref(composerSending),"submit-mode":unref(composerSubmitMode),"submit-aria-label":unref(composerSubmitAriaLabel),"submit-title":unref(composerSubmitTitle),onStop:unref(requestAgentInterrupt),onSubmit:sendComposerMessage},null,8,[`stop-visible`,`stop-enabled`,`stopping`,`can-submit`,`sending`,`submit-mode`,`submit-aria-label`,`submit-title`,`onStop`]))]),createBaseVNode(`div`,{ref:setVoiceFeedbackTarget,class:`studio-autopilot__voice-feedback`},null,512)]),_:2},1032,[`saved-attachments`,`modelValue`,`attachments-enabled`,`described-by`,`disabled`,`placeholder`,`placeholder-affects-height`,`session-id`,`submit-enabled`,`onAttachmentsChange`,`onEscape`,`onFocus`,`onInputActivity`]))],32)]),_:1},8,[`voice-runtime`,`working`,`integration-action-pending`,`integration-connections`,`integration-action-error`,`integration-requests-enabled`,`session-id`,`assistant-label`,`error`,`error-reloadable`,`follow-latest-key`,`has-more-before`,`loading`,`loading-more`,`load-more-error`,`reloading`,`scroll-key`,`source-root`,`turns`,`visible`,`welcome-message`,`onCancelTurn`,`onEditTurn`,`onLoadMore`,`onOpenSourceFile`,`onOpenIntegration`,`onIntegrationAction`,`onResendTurn`,`onReload`]),createVNode(Vibe64TemporaryAiWorkspace_default,{ref_key:`temporaryAiWorkspace`,ref:temporaryAiWorkspace,active:unref(props).active&&!unref(chatCollapsed),"session-selected":unref(props).active,"assistant-selection":unref(props).session?.assistantSelection,"assistant-ready":Boolean(unref(sessionId))&&!unref(props).sessionSelectionArchived,"connection-unavailable":unref(connectionRecoveryVisible),"can-configure-routing":unref(assistantCanConfigureRouting),"preview-attachment-state":unref(previewAttachmentState),"project-slug":unref(projectSlug),"session-id":unref(sessionId),"main-has-messages":unref(chatTurns).length>0,"sessions-api-path":unref(props).sessionsApiPath,"repository-busy":unref(saveWorkOperationActive)||unref(saveWorkSending),"update-disabled":unref(updateWorkDisabled),"update-disabled-reason":unref(saveWorkTitle),"can-review-update":Boolean(unref(updateConflictRecovery)),"workspace-setup-status":unref(workspaceSetupStatus),"open-file":unref(openWorkingFile),"send-lesson-message":unref(sendLessonMessage),onCheckUpdate:unref(checkTemporaryAiUpdate),onReviewUpdate:unref(reviewResolvedUpdate),onSelectMainChat:showMainChat,onTaskFinished:unref(finishTemporaryAiTask)},null,8,[`active`,`session-selected`,`assistant-selection`,`assistant-ready`,`connection-unavailable`,`can-configure-routing`,`preview-attachment-state`,`project-slug`,`session-id`,`main-has-messages`,`sessions-api-path`,`repository-busy`,`update-disabled`,`update-disabled-reason`,`can-review-update`,`workspace-setup-status`,`open-file`,`send-lesson-message`,`onCheckUpdate`,`onReviewUpdate`,`onTaskFinished`])],64)}}};var Vibe64AutopilotChat_default=_plugin_vue_export_helper_default(_sfc_main$36,[[`__scopeId`,`data-v-ca895022`]]);var _hoisted_1$30={class:`my-3 pl-5`,style:{"overflow-wrap":`anywhere`}};var _hoisted_2$24={key:1,class:`d-flex align-center justify-space-between ga-2 mb-2`};var _hoisted_3$21={class:`text-label-small text-medium-emphasis`};var _hoisted_4$17={key:0,class:`text-body-small mt-1 mb-0`};var _hoisted_5$15={key:3,role:`status`};var _hoisted_6$12={key:4,role:`status`,class:`text-body-small mt-2`};var _hoisted_7$10={key:5,role:`status`,class:`mt-3`};var _hoisted_8$10={class:`text-wrap`,style:{"overflow-wrap":`anywhere`}};var _sfc_main$35={__name:`Vibe64AutopilotDialogs`,props:{view:{type:Object,required:true}},setup(__props){const{applyResolvedUpdate,cancelSaveWork,confirmSaveWork,contextFullFailure,createPullRequestOpen,githubProject,props,reportTemporaryRecovery,resolvedUpdateReview,retryContextFull,saveWorkConfirmOpen,saveWorkConnectedReview,saveWorkDisabled,saveWorkReview,saveWorkSending,saveWorkTitle,selectSessionTool,sessionPullRequest,sourceOperationsSuspended,temporaryAiWorkspace,updateWorkDisabled}=__props.view;const saveWorkNeedsPullRequest=computed(()=>!saveWorkConnectedReview.value&&githubProject.value&&props.workState?.publicationRequiresPullRequest===true&&!sessionPullRequest.value?.number);const publicationLabel=computed(()=>{if(saveWorkConnectedReview.value)return`Push connected contributions`;if(saveWorkReview.value?.mode===`github`)return`Commit & push`;return`Save`});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VDialog,{"model-value":Boolean(unref(resolvedUpdateReview)),"max-width":`36rem`,"aria-label":`Apply resolved Update`,scrollable:``,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>!$event&&(resolvedUpdateReview.value=null))},{default:withCtx(()=>[unref(resolvedUpdateReview)?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Apply resolved Update`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[9]||(_cache[9]=createBaseVNode(`p`,null,`Confirm that these files preserve the intended changes from both this session and the latest saved version.`,-1)),createBaseVNode(`ul`,_hoisted_1$30,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(resolvedUpdateReview).conflictPaths,file=>{return openBlock(),createElementBlock(`li`,{key:file},toDisplayString(file),1)}),128))]),_cache[10]||(_cache[10]=createBaseVNode(`p`,null,`Repairs may be made manually or in any coding chat. Vibe64 will check the repository state and apply Update. Nothing is pushed.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{onClick:_cache[0]||(_cache[0]=$event=>resolvedUpdateReview.value=null)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`auto`,"min-height":`48`,style:{"max-width":`100%`},disabled:unref(updateWorkDisabled)||unref(sourceOperationsSuspended)||unref(temporaryAiWorkspace)?.updateRepairTask?.busy,onClick:_cache[1]||(_cache[1]=$event=>unref(applyResolvedUpdate)(unref(temporaryAiWorkspace)?.updateRepairTask,unref(reportTemporaryRecovery)))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createBaseVNode(`span`,{class:`text-wrap`},`I've resolved these conflicts — apply Update`,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`]),createVNode(VDialog,{"model-value":Boolean(unref(contextFullFailure)),"max-width":`30rem`,"aria-label":`Not enough room`,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>!$event&&(contextFullFailure.value=null))},{default:withCtx(()=>[unref(contextFullFailure)?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Not enough room`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(unref(contextFullFailure).message),1),_cache[14]||(_cache[14]=createBaseVNode(`p`,{class:`text-body-small mt-3 mb-0`},`Your message was not sent and nothing was lost. Try again to summarise the assistant's memory and send it, or choose another assistant.`,-1))]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2 px-6 pb-5`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>contextFullFailure.value=null)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Close`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,onClick:unref(retryContextFull)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Summarise and continue`,-1)])]),_:1},8,[`onClick`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`]),createVNode(VDialog,{modelValue:unref(saveWorkConfirmOpen),"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>isRef(saveWorkConfirmOpen)?saveWorkConfirmOpen.value=$event:null),"max-width":`30rem`,"aria-label":unref(saveWorkConnectedReview)?`Save connected first`:`Save changes`,scrollable:``},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(unref(saveWorkConnectedReview)?`Save connected first`:`Save changes`),1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(saveWorkConnectedReview)?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[17]||(_cache[17]=createBaseVNode(`p`,null,`Commit and push changed connected sources to these contribution branches, one repository at a time.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(saveWorkConnectedReview),item=>{return openBlock(),createBlock(VSheet,{key:item.destination.sessionId,color:`surface-light`,rounded:`lg`,class:`pa-3 mb-2`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(item.destination.repository)+`:`+toDisplayString(item.destination.branch),1)]),_:2},1024)}),128)),_cache[18]||(_cache[18]=createBaseVNode(`p`,null,`The main project’s changes stay local. Each receiving project can merge or discard its contribution in Incoming changes.`,-1))],64)):createCommentVNode(``,true),!unref(saveWorkConnectedReview)?(openBlock(),createElementBlock(`div`,_hoisted_2$24,[createBaseVNode(`span`,null,toDisplayString(unref(props).workState?.changedPaths?.length||0)+` changed `+toDisplayString(unref(props).workState?.changedPaths?.length===1?`file`:`files`),1),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[5]||(_cache[5]=$event=>{unref(cancelSaveWork)();unref(selectSessionTool)(`changes`)})},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`View diff`,-1)])]),_:1})])):createCommentVNode(``,true),unref(saveWorkReview)&&!unref(saveWorkConnectedReview)?(openBlock(),createBlock(VSheet,{key:2,color:`surface-light`,rounded:`lg`,class:`pa-3`,style:{"overflow-wrap":`anywhere`}},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$21,toDisplayString(unref(saveWorkReview).mode===`github`?`GitHub`:unref(saveWorkReview).mode===`local_source`?`Local project`:`Project version`),1),createBaseVNode(`strong`,null,toDisplayString(unref(saveWorkReview).repository)+`:`+toDisplayString(unref(saveWorkReview).branch),1),unref(sessionPullRequest)?(openBlock(),createElementBlock(`p`,_hoisted_4$17,`PR #`+toDisplayString(unref(sessionPullRequest).number)+` · `+toDisplayString(unref(sessionPullRequest).headBranch)+` → `+toDisplayString(unref(sessionPullRequest).baseBranch),1)):createCommentVNode(``,true)]),_:1})):!unref(saveWorkReview)?(openBlock(),createElementBlock(`p`,_hoisted_5$15,`Refresh repository status to review the destination.`)):createCommentVNode(``,true),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-small mt-3 mb-0`},`Save open file edits first.`,-1)),saveWorkNeedsPullRequest.value?(openBlock(),createElementBlock(`p`,_hoisted_6$12,`A pull request is required.`)):createCommentVNode(``,true),unref(saveWorkDisabled)?(openBlock(),createElementBlock(`p`,_hoisted_7$10,toDisplayString(unref(saveWorkTitle)),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap ga-2 px-6 pb-5`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:unref(saveWorkSending),height:`48`,type:`button`,variant:`text`,onClick:unref(cancelSaveWork)},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`,`onClick`]),!unref(saveWorkConnectedReview)&&unref(githubProject)&&!unref(sessionPullRequest)?.number?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,height:`48`,variant:saveWorkNeedsPullRequest.value?`flat`:`outlined`,disabled:unref(saveWorkDisabled)||!unref(saveWorkReview),onClick:_cache[6]||(_cache[6]=$event=>{unref(cancelSaveWork)();createPullRequestOpen.value=true})},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Create draft PR `,-1)])]),_:1},8,[`variant`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-busy":unref(saveWorkSending)?`true`:void 0,color:`primary`,"min-height":`48`,disabled:unref(saveWorkDisabled)||!unref(saveWorkReview)||saveWorkNeedsPullRequest.value,type:`button`,variant:saveWorkNeedsPullRequest.value?`outlined`:`flat`,onClick:unref(confirmSaveWork)},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_8$10,toDisplayString(unref(saveWorkSending)?`Committing…`:publicationLabel.value),1)]),_:1},8,[`aria-busy`,`disabled`,`variant`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`aria-label`])],64)}}};function projectOnboardingRequest(kind,options={}){const{purpose=``,diagnostic=``,nextAction=``}=options;const description=String(purpose).trim();const request={create:{title:`Start this project`,message:`Help me start this project through conversation. Ask what I want to build, use answers I have already given, and help me choose a suitable Stack. I have not selected a starter.`+(description?`\n\nAgreed project description: ${description}`:``)},adopt:{title:`Set up this project`,message:`Set up this existing project for guided editing. What this project is and what I want to run: ${description}. Inspect its current implementation and work backwards into Genesis Blueprint, Stack, and Program, including its actual setup and run outputs. Preserve its source and Git history. If this application has authenticated web pages, inspect its existing authentication and Preview identity support, then start a conversation about managed preview access. Ask which existing development users should represent administrator and other relevant roles, using their email, login or user ID, and which should be the default. Reuse answers already supplied; do not ask for passwords or infer privileges from an account name. Offer to configure the existing Vibe64 Preview identity protocol and named identities, and wait for the user's choices before doing so. Do not create users, change roles or weaken production authentication as part of import. If the user defers, leave this explicitly pending; public or non-web projects do not need identity setup.`},inspect:{title:`Inspect project setup`,message:`Set up this existing project for guided editing. Inspect it for me to identify what it does and its run targets. Ask me only where the evidence is ambiguous. Work backwards into Genesis Blueprint, Stack, and Program while preserving the implementation and Git history. If this application has authenticated web pages, inspect its existing authentication and Preview identity support, then start a conversation about managed preview access. Ask which existing development users should represent administrator and other relevant roles, using their email, login or user ID, and which should be the default. Reuse answers already supplied; do not ask for passwords or infer privileges from an account name. Offer to configure the existing Vibe64 Preview identity protocol and named identities, and wait for the user's choices before doing so. Do not create users, change roles or weaken production authentication as part of import. If the user defers, leave this explicitly pending; public or non-web projects do not need identity setup.`},repair:{title:`Fix project setup`,message:`Inspect and update this project's Genesis setup. The opening inspection reports: ${diagnostic}. `+(nextAction===`update-genesis`?`The project requires a newer Genesis installation; do not downgrade its source format. `:``)+`Use the appropriate migration or repair, preserve source and Git history, and explain the specific change.`}}[kind];if(!request||kind===`adopt`&&!description)throw new Error(`Choose a setup request and describe the existing project before adopting it.`);return{...request,displayMessage:kind===`adopt`?`${request.title}: ${description}`:`${request.title}.`,nextStepMessage:`Recheck setup after the AI finishes. Project edits remain in this session for review and Save.`}}var _hoisted_1$29={class:`project-preview`};var _hoisted_2$23={key:0};var _hoisted_3$20={key:0};var _hoisted_4$16={key:1,"data-testid":`project-setup-update-first`};var _hoisted_5$14={class:`project-preview__warning-actions`};var _hoisted_6$11={key:0};var _hoisted_7$9={class:`project-preview__warning-actions`};var _hoisted_8$9={key:2,class:`project-preview__output`};var _hoisted_9$7=[`aria-busy`];var _hoisted_10$6={class:`project-onboarding__choices`};var _hoisted_11$5=[`disabled`,`onClick`];var _hoisted_12$5={key:0};var _hoisted_13$4={class:`project-onboarding__choose`};var _hoisted_14$2={key:0};var _hoisted_15$2={class:`project-onboarding__actions`};var _hoisted_16$2={key:3,role:`status`};var _sfc_main$34={__name:`Vibe64ProjectOnboarding`,props:{active:Boolean,archived:Boolean,busy:Boolean,canAsk:Boolean,requestTemporaryAi:{type:Function,required:true},sessionId:{type:String,required:true}},setup(__props){const props=__props;const SETUP_RECHECK_REASONS=[`temporary-agent-turn-idle`,`session-update-started`,`session-update-completed`,`session-update-failed`];const projectSlug=useVibe64ProjectSlug();const purpose=ref(``);const applying=ref(``);const asking=ref(false);let disposed=false;onBeforeUnmount(()=>{disposed=true});const enabled=computed(()=>props.active&&!props.archived&&Boolean(props.sessionId));const resource=useEndpointResource({enabled,path:computed(()=>resolveStudioRequestUrl(`/api/vibe64/onboarding`)),readQuery:computed(()=>({sessionId:props.sessionId})),queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),props.sessionId,`project-onboarding`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:true},realtime:{events:[VIBE64_PROJECT_CHANGED_EVENT,VIBE64_SESSION_CHANGED_EVENT],matches:({event,payload={}}={})=>vibe64SessionEventMatchesScope(payload,{projectSlug:projectSlug.value})&&(event===`vibe64.project.changed`||payload.sessionId===props.sessionId&&SETUP_RECHECK_REASONS.includes(payload.reason))},refreshOnPull:true,fallbackLoadError:`Project setup could not be read.`});const command=useCommand({access:`never`,apiSuffix:`vibe64`,buildCommandOptions:()=>({method:`POST`,path:resolveStudioRequestUrl(`/api/vibe64/templates/apply`)}),buildRawPayload:(_model,{context})=>({sessionId:context.sessionId,templateId:context.templateId}),fallbackRunError:`The starter could not be applied. Your existing work was preserved.`,messages:{success:`Starter added to this session. Use Save to keep it in the project.`,error:`The starter could not be applied.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.project.templates.apply`,surfaceId:`app`,writeMethod:`POST`});const onboarding=computed(()=>resource.data.value?.ok===true?resource.data.value:null);const state=computed(()=>onboarding.value?.inspection?.state||``);const environmentSetup=computed(()=>onboarding.value?.environmentSetup);const updateFirst=computed(()=>onboarding.value?.updateFirst||null);const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value)||resource.loadError.value);const showPreview=computed(()=>{if(props.archived||onboarding.value?.available===false||loadError.value)return true;return onboarding.value!==null&&state.value!==`new`&&state.value!==`adoption`});const colleaguePreview=inject(VIBE64_COLLEAGUE_PREVIEW_KEY,null);const displayedPreview={get projectSlug(){return projectSlug.value},get sessionId(){return props.sessionId},get screen(){if(showPreview.value)return!props.archived&&(loadError.value||state.value===`attention`)?`outputs-with-setup-warning`:`outputs`;if(state.value===`adoption`)return`existing-project-setup`;if(state.value===`new`)return`new-project-setup`;return`checking-project-setup`}};watchEffect(()=>{if(!colleaguePreview)return;if(props.active)colleaguePreview.value=displayedPreview;else if(colleaguePreview.value===displayedPreview)colleaguePreview.value=null});onBeforeUnmount(()=>{if(colleaguePreview?.value===displayedPreview)colleaguePreview.value=null});const pending=computed(()=>Boolean(applying.value||asking.value));const starterDisabled=computed(()=>pending.value||props.busy||!enabled.value);const askDisabled=computed(()=>pending.value||!enabled.value||!props.canAsk);const groups=computed(()=>{const grouped=new Map;for(const template of onboarding.value?.templates||[]){if(!grouped.has(template.technology))grouped.set(template.technology,[]);grouped.get(template.technology).push(template)}return[...grouped].map(([technology,templates])=>({technology,templates,label:technologyLabel(technology,templates)}))});const groupsHaveMultipleSources=computed(()=>new Set((onboarding.value?.templates||[]).map(({namespace})=>namespace)).size>1);function technologyLabel(technology,templates){const prefixes=new Set(templates.map(({name=``})=>name.includes(` · `)?name.split(` · `)[0].trim():``));const[prefix]=prefixes;return prefixes.size===1&&prefix?prefix:technology}async function apply(template){if(starterDisabled.value)return;const sessionId=props.sessionId;applying.value=template.id;try{try{await command.run({sessionId,templateId:template.id})}catch{return}if(disposed||props.sessionId!==sessionId||!enabled.value)return;await resource.reload()}finally{applying.value=``}}async function ask(kind){if(askDisabled.value||kind===`repair`&&updateFirst.value)return;const inspection=onboarding.value?.inspection;const diagnostic=loadError.value||inspection?.diagnostics.map(({message})=>message).join(` `);const request=projectOnboardingRequest(kind,{purpose:purpose.value,diagnostic,nextAction:inspection?.nextAction});asking.value=true;try{await props.requestTemporaryAi(request)}finally{asking.value=false}}watch(()=>props.sessionId,()=>{purpose.value=``});watch(()=>props.busy,(busy,previous)=>{if(previous&&!busy&&enabled.value)resource.reload()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$29,[!props.archived&&(loadError.value||state.value===`attention`)?(openBlock(),createBlock(VAlert,{key:0,class:`project-preview__warning`,color:`warning-container`,density:`compact`,role:`status`,type:`warning`,variant:`flat`},{default:withCtx(()=>[createBaseVNode(`strong`,null,toDisplayString(loadError.value?`Project setup could not be read`:`Project setup needs attention`),1),loadError.value?(openBlock(),createElementBlock(`p`,_hoisted_2$23,toDisplayString(loadError.value),1)):(openBlock(),createElementBlock(Fragment,{key:1},[(openBlock(true),createElementBlock(Fragment,null,renderList(onboarding.value.inspection.diagnostics,(diagnostic,index)=>{return openBlock(),createElementBlock(`p`,{key:index},toDisplayString(diagnostic.message),1)}),128)),onboarding.value.inspection.nextAction===`update-genesis`?(openBlock(),createElementBlock(`p`,_hoisted_3$20,`Use an installation with a newer Genesis version to update setup.`)):createCommentVNode(``,true),updateFirst.value?(openBlock(),createElementBlock(`p`,_hoisted_4$16,toDisplayString(updateFirst.value.message),1)):createCommentVNode(``,true)],64)),createBaseVNode(`div`,_hoisted_5$14,[createVNode(VBtn,{disabled:!enabled.value||unref(resource).isFetching.value,size:`small`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>unref(resource).reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).isFetching.value?`Checking setup…`:`Recheck setup`),1)]),_:1},8,[`disabled`]),!updateFirst.value?(openBlock(),createBlock(Vibe64TemporaryAiFixAction_default,{key:0,disabled:askDisabled.value,pending:asking.value,title:`Open Temporary AI to resolve project setup`,onClick:_cache[1]||(_cache[1]=$event=>ask(`repair`))},null,8,[`disabled`,`pending`])):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true),!props.archived&&(environmentSetup.value?.missingKeys.length||environmentSetup.value?.warning)?(openBlock(),createBlock(VAlert,{key:1,class:`project-preview__warning`,color:`warning-container`,density:`compact`,role:`status`,type:`warning`,variant:`flat`},{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`h2`,{class:`text-title-medium`},`Set up your project's environment`,-1)),environmentSetup.value.warning?(openBlock(),createElementBlock(`p`,_hoisted_6$11,toDisplayString(environmentSetup.value.warning),1)):createCommentVNode(``,true),environmentSetup.value.missingKeys.length?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[8]||(_cache[8]=createBaseVNode(`p`,null,`This project requires environment values. Add them in Env, then recheck setup.`,-1)),createBaseVNode(`details`,null,[_cache[7]||(_cache[7]=createBaseVNode(`summary`,null,`Required configuration`,-1)),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(environmentSetup.value.missingKeys,key=>{return openBlock(),createElementBlock(`li`,{key},[createBaseVNode(`code`,null,toDisplayString(key),1)])}),128))])])],64)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_7$9,[createVNode(VBtn,{to:unref(projectAppPath)(unref(projectSlug),`/dashboard/env`),size:`small`,variant:`flat`,color:`primary`},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Open Env`,-1)])]),_:1},8,[`to`]),createVNode(VBtn,{disabled:!enabled.value||unref(resource).isFetching.value,size:`small`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>unref(resource).reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).isFetching.value?`Checking setup…`:`Recheck setup`),1)]),_:1},8,[`disabled`])])]),_:1})):createCommentVNode(``,true),showPreview.value?(openBlock(),createElementBlock(`div`,_hoisted_8$9,[renderSlot(_ctx.$slots,`default`,{},void 0,true)])):(openBlock(),createElementBlock(`section`,{key:3,class:`project-onboarding`,"aria-label":`Project setup`,"aria-busy":pending.value},[!onboarding.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`heading, paragraph, card`})):state.value===`new`?(openBlock(),createElementBlock(Fragment,{key:1},[_cache[12]||(_cache[12]=createBaseVNode(`p`,{class:`project-onboarding__eyebrow`},`Your starting point`,-1)),_cache[13]||(_cache[13]=createBaseVNode(`h2`,null,`What would you like to build with?`,-1)),_cache[14]||(_cache[14]=createBaseVNode(`p`,null,`Choose a ready-made app, or describe your idea in the conversation.`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(groups.value,group=>{return openBlock(),createElementBlock(`div`,{key:group.technology,class:`project-onboarding__group`},[createBaseVNode(`h3`,null,toDisplayString(group.label),1),createBaseVNode(`div`,_hoisted_10$6,[(openBlock(true),createElementBlock(Fragment,null,renderList(group.templates,template=>{return openBlock(),createElementBlock(`button`,{key:template.id,type:`button`,class:`project-onboarding__choice`,disabled:starterDisabled.value,onClick:$event=>apply(template)},[createBaseVNode(`strong`,null,toDisplayString(template.name),1),createBaseVNode(`span`,null,toDisplayString(template.description),1),groupsHaveMultipleSources.value?(openBlock(),createElementBlock(`small`,_hoisted_12$5,`Source: `+toDisplayString(template.namespace),1)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_13$4,toDisplayString(applying.value===template.id?`Preparing your starter…`:`Use this starter →`),1)],8,_hoisted_11$5)}),128))])])}),128)),!groups.value.length?(openBlock(),createElementBlock(`p`,_hoisted_14$2,`No starters are configured for this installation yet.`)):createCommentVNode(``,true),createVNode(VBtn,{disabled:askDisabled.value,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>ask(`create`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Start through conversation`,-1)])]),_:1},8,[`disabled`])],64)):state.value===`adoption`?(openBlock(),createElementBlock(Fragment,{key:2},[_cache[17]||(_cache[17]=createBaseVNode(`p`,{class:`project-onboarding__eyebrow`},`Bring your project`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`h2`,null,`Set up this existing project`,-1)),_cache[19]||(_cache[19]=createBaseVNode(`p`,null,`Tell the AI what this project does and what you want to run. It will work out the setup from your code and preserve your source and Git history.`,-1)),createVNode(VTextarea,{modelValue:purpose.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>purpose.value=$event),label:`What is this project?`,placeholder:`For example: a Python tool that processes invoices. I want to run its command line.`,rows:`3`,"auto-grow":``,disabled:askDisabled.value},null,8,[`modelValue`,`disabled`]),createBaseVNode(`div`,_hoisted_15$2,[createVNode(VBtn,{disabled:askDisabled.value||!purpose.value.trim(),color:`primary`,onClick:_cache[5]||(_cache[5]=$event=>ask(`adopt`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Set up project`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:askDisabled.value,variant:`text`,onClick:_cache[6]||(_cache[6]=$event=>ask(`inspect`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Inspect it for me`,-1)])]),_:1},8,[`disabled`])])],64)):createCommentVNode(``,true),pending.value?(openBlock(),createElementBlock(`p`,_hoisted_16$2,toDisplayString(applying.value?`Adding the starter to this session…`:`Opening Temporary AI…`),1)):createCommentVNode(``,true)],8,_hoisted_9$7))])}}};var Vibe64ProjectOnboarding_default=_plugin_vue_export_helper_default(_sfc_main$34,[[`__scopeId`,`data-v-89bb1a3b`]]);var _hoisted_1$28={class:`vibe64-learning-finished`,"aria-labelledby":`vibe64-learning-finished-title`,"data-test":`learning-finished`};var _hoisted_2$22={id:`vibe64-learning-finished-title`};var _hoisted_3$19={key:0};var _hoisted_4$15={key:1,class:`vibe64-learning-finished__hint`,role:`status`};var _hoisted_5$13={key:3,class:`vibe64-learning-finished__error`,role:`alert`};var _hoisted_6$10={class:`vibe64-learning-finished__actions`};var _sfc_main$33={__name:`Vibe64LearningFinished`,props:{learning:{type:Object,required:true},courses:{type:Object,required:true}},setup(__props){const props=__props;const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const passedNow=computed(()=>steps.value.filter(step=>props.learning.stepStatus(step.id)===`passed`).length);const busy=computed(()=>props.learning.state.busy);const summary=ref(null);const passedCount=computed(()=>summary.value?.passed??passedNow.value);const archivedWith=computed(()=>summary.value?.practice??Boolean(lesson.value?.practiceProjectSlug)?`its practice project and conversation`:`its conversation`);const finished=ref(false);const finishError=ref(``);let finishingFor=``;async function finish(){if(finished.value||busy.value)return;finishError.value=``;summary.value||=props.learning.finishSummary()||{passed:passedNow.value,practice:Boolean(lesson.value?.practiceProjectSlug)};if(await props.learning.finish(summary.value)){finished.value=true;props.courses.learningResource.reload()}else finishError.value=props.learning.state.attemptsError||`Finishing the lesson was not confirmed. Try again.`}watch(()=>props.learning.finished&&props.learning.state.attemptId,attemptId=>{if(!attemptId||finishingFor===attemptId)return;finishingFor=attemptId;finished.value=false;summary.value=null;finish()},{immediate:true});const pin=computed(()=>lesson.value?.attempt?.pin||null);const saved=computed(()=>{const value=toValue(props.courses.learningResource.data);return value?.ok===true&&value.available===true?value:null});const nextLesson=computed(()=>{const catalogue=toValue(props.courses.coursesResource.data);const course=catalogue?.ok===true&&Array.isArray(catalogue.courses)?catalogue.courses.find(value=>value?.courseId===pin.value?.course?.courseId&&value.release===pin.value?.course?.release):null;if(!course||!saved.value)return null;const next=courseProgress(course,saved.value.lessonProgress||[],saved.value.active||null,saved.value.history||[],{canTryPreviews:catalogue.canTryPreviews===true}).next;return next&&next.code!==pin.value?.lesson?.code?{course,lesson:next}:null});const startError=ref(``);const canStart=computed(()=>Boolean(finished.value&&nextLesson.value&&saved.value&&!toValue(props.courses.busy)));async function startNext(){if(!canStart.value)return;const{course,lesson:next}=nextLesson.value;startError.value=``;try{await props.learning.startLesson({courseId:course.courseId,release:course.release,lessonCode:next.code,expectedRevision:saved.value.revision},props.courses.startLesson)}catch(cause){startError.value=String(cause?.message||`The next lesson did not start. Try again from Courses.`)}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$28,[createVNode(VIcon,{icon:unref(mdiCheckCircle),size:`56`,class:`vibe64-learning-finished__mark`,"aria-hidden":`true`},null,8,[`icon`]),_cache[4]||(_cache[4]=createBaseVNode(`p`,{class:`vibe64-learning-finished__eyebrow`},`Lesson finished`,-1)),createBaseVNode(`h2`,_hoisted_2$22,toDisplayString(lesson.value?.title||lesson.value?.code),1),createBaseVNode(`p`,null,`You completed every required step: `+toDisplayString(passedCount.value)+` of `+toDisplayString(steps.value.length)+` steps passed.`,1),finished.value?(openBlock(),createElementBlock(`p`,_hoisted_3$19,`It is archived with `+toDisplayString(archivedWith.value)+`, under Courses → Archived.`,1)):!finishError.value?(openBlock(),createElementBlock(`p`,_hoisted_4$15,[createVNode(VProgressCircular,{indeterminate:``,size:`16`,width:`2`,class:`me-2`}),_cache[1]||(_cache[1]=createTextVNode(`Finishing the lesson… `,-1))])):createCommentVNode(``,true),finishError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`,role:`alert`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,disabled:Boolean(busy.value),"data-test":`learning-finished-retry`,onClick:finish},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Finish lesson`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(finishError.value)+` `,1)]),_:1})):createCommentVNode(``,true),startError.value?(openBlock(),createElementBlock(`p`,_hoisted_5$13,toDisplayString(startError.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6$10,[nextLesson.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,disabled:!canStart.value,loading:Boolean(toValue(__props.courses.starting)),"data-test":`learning-finished-next`,onClick:startNext},{default:withCtx(()=>[createTextVNode(` Next lesson: `+toDisplayString(nextLesson.value.lesson.title),1)]),_:1},8,[`disabled`,`loading`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-finished-courses`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.show({surface:`courses`}))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Back to courses `,-1)])]),_:1})])])}}};var Vibe64LearningFinished_default=_plugin_vue_export_helper_default(_sfc_main$33,[[`__scopeId`,`data-v-668305db`]]);var MAX_FILE_BYTES=1048576;var MAX_COMMAND_IDS$1=64;var MAX_PENDING_REQUESTS=64;var PROTOCOL_VERSION=1;var identityPattern=/^[a-zA-Z0-9-]{1,64}$/u;function object(value){return value!==null&&typeof value===`object`&&!Array.isArray(value)&&[Object.prototype,null].includes(Object.getPrototypeOf(value))}function exactKeys(value,names){return object(value)&&Object.keys(value).length===names.length&&names.every(name=>Object.hasOwn(value,name))}function text$4(value,maximum,multiline=false){return typeof value===`string`&&Boolean(value.trim())&&value.length<=maximum&&!(multiline?/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/u:/[\u0000-\u001f\u007f]/u).test(value)}function identity(value){return typeof value===`string`&&identityPattern.test(value)}function semanticSnapshot(value,states){if(!exactKeys(value,[`state`,`paused`,`labels`])||!states.has(value.state)||typeof value.paused!==`boolean`||!object(value.labels)||Object.keys(value.labels).length>32||Object.entries(value.labels).some(([name,label])=>!identity(name)||!text$4(label,256))||JSON.stringify(value).length>4096)throw new Error(`The diagram's saved semantic state is invalid. Reload its declared initial state.`);return structuredClone(value)}function validateResource(resource,view){const visual=resource?.visual;if(!object(visual)||visual.schemaVersion!==1||!identity(visual.id)||resource.id!==visual.id||!text$4(visual.title,256)||!text$4(visual.description,2e3,true)||!Array.isArray(visual.states)||!visual.states.length||visual.states.length>32||visual.states.some(state=>!identity(state))||new Set(visual.states).size!==visual.states.length||!visual.states.includes(visual.initialState)||!Array.isArray(visual.commands)||!visual.commands.length||visual.commands.length>32)throw new Error(`The verified diagram descriptor is missing or invalid.`);const states=new Set(visual.states);const commands=new Map;for(const command of visual.commands){if(!object(command)||!identity(command.name)||commands.has(command.name)||command.completionState!==`unchanged`&&!states.has(command.completionState)||!Array.isArray(command.parameters)||command.parameters.length>8)throw new Error(`The diagram declares an invalid command.`);const parameters=new Map;for(const parameter of command.parameters){if(!object(parameter)||!identity(parameter.name)||parameters.has(parameter.name)||typeof parameter.required!==`boolean`||!Number.isInteger(parameter.maxLength)||parameter.maxLength<1||parameter.maxLength>256)throw new Error(`The diagram declares an invalid command parameter.`);parameters.set(parameter.name,{required:parameter.required,maxLength:parameter.maxLength})}commands.set(command.name,{completionState:command.completionState,parameters})}function encodedFile(file){if(!object(file)||!text$4(file.path,1024)||file.encoding!==`base64`||typeof file.bytes!==`string`||file.bytes.length>Math.ceil(MAX_FILE_BYTES/3)*4)throw new Error(`Diagram files require bounded base64 bytes from the verified lesson reader.`);let bytes;try{bytes=view.atob(file.bytes)}catch{throw new Error(`Diagram file bytes are not valid base64.`)}if(!bytes.length||bytes.length>MAX_FILE_BYTES||view.btoa(bytes)!==file.bytes)throw new Error(`Diagram file bytes are empty, oversized or noncanonical.`);return file.bytes}return{visual:structuredClone(visual),states,commands,svg:encodedFile(resource.svg),controller:encodedFile(resource.controller)}}async function bootstrap(payload,loadController){let dispose;let claimed=false;window.addEventListener(`pagehide`,()=>dispose?.(),{once:true});window.addEventListener(`message`,async event=>{if(claimed||event.source!==parent||!event.data||Object.keys(event.data).sort().join(`,`)!==`init,playerInstanceId,protocolVersion,token,type`||event.data.type!==`vibe64-visual-init`||event.data.protocolVersion!==1||event.data.playerInstanceId!==payload.playerInstanceId||event.data.token!==payload.token||event.ports.length!==1)return;claimed=true;const port=event.ports[0];let moduleUrl;try{const decode=value=>new TextDecoder(`utf-8`,{fatal:true}).decode(Uint8Array.from(atob(value),character=>character.charCodeAt(0)));const documentSvg=new DOMParser().parseFromString(decode(payload.svg),`image/svg+xml`);const svg=documentSvg.documentElement;if(svg.localName!==`svg`||svg.namespaceURI!==`http://www.w3.org/2000/svg`||documentSvg.querySelector(`parsererror`))throw new Error(`The diagram SVG cannot be read.`);document.body.append(document.importNode(svg,true));moduleUrl=URL.createObjectURL(new Blob([decode(payload.controller)],{type:`text/javascript`}));const controller=await loadController(moduleUrl);if(typeof controller.mountVisual!==`function`)throw new Error(`The diagram controller has no mountVisual operation.`);dispose=controller.mountVisual(document.body.querySelector(`svg`),port,event.data.init)}catch(cause){port.postMessage({protocolVersion:1,playerInstanceId:payload.playerInstanceId,type:`bootstrap-failed`,description:String(cause.message||`Diagram initialization failed.`).slice(0,2e3)})}finally{if(moduleUrl)URL.revokeObjectURL(moduleUrl)}});parent.postMessage({type:`vibe64-visual-handshake`,protocolVersion:1,playerInstanceId:payload.playerInstanceId,token:payload.token},`*`)}function frameDocument(payload){const nonce=payload.token;return[`<!doctype html><html><head><meta charset="utf-8">`,`<meta http-equiv="Content-Security-Policy" content="${[`default-src 'none'`,`script-src 'nonce-${nonce}' blob:`,`style-src 'unsafe-inline'`,`connect-src 'none'`,`img-src 'none'`,`media-src 'none'`,`frame-src 'none'`,`object-src 'none'`,`base-uri 'none'`,`form-action 'none'`].join(`; `)}">`,`<meta name="referrer" content="no-referrer">`,`<style>html,body{margin:0;height:100%;overflow:hidden}svg{display:block;width:100%;height:100%}</style></head><body>`,`<script nonce="${nonce}">(${bootstrap.toString()})(${JSON.stringify(payload)}, url => import(url));<\/script>`,`</body></html>`].join(``)}function createTrainingVisualPlayer({iframe,resource,attemptId,reducedMotion=false,snapshot:initialSnapshot,onState,timeoutMs=5e3}={}){const view=iframe?.ownerDocument?.defaultView;if(!view||!identity(attemptId)||typeof reducedMotion!==`boolean`||!Number.isInteger(timeoutMs)||timeoutMs<1||timeoutMs>3e4)throw new Error(`Mount a diagram in its iframe for an admitted attempt with a bounded timeout.`);const{visual,states,commands,svg,controller}=validateResource(resource,view);const pending=new Map;const commandInputs=new Map;let current;let closed=false;let savedSnapshot=initialSnapshot===void 0?void 0:semanticSnapshot(initialSnapshot,states);let display={state:savedSnapshot?.state??visual.initialState,description:visual.description};let status={attemptId,playerInstanceId:``,phase:`loading`,...display,error:``};function publish(patch){status={...status,...patch};try{(onState?.(structuredClone(status)))?.catch?.(()=>{})}catch{}}function settle(id,error,result){const request=pending.get(id);if(!request)return;pending.delete(id);clearTimeout(request.timer);if(error)request.reject(error);else request.resolve(result)}function retire(cause){const previous=current;current=void 0;if(!previous)return;clearTimeout(previous.timer);view.removeEventListener(`message`,previous.handshake);if(previous.port){previous.port.onmessage=null;previous.port.close()}previous.rejectReady(cause);for(const id of[...pending.keys()])settle(id,cause);iframe.srcdoc=``}function fail(message){retire(new Error(message));publish({phase:`failed`,error:message})}function request(kind,id,body,command){if(!current?.ready||closed)return Promise.reject(new Error(`The diagram is not ready. Reload it before sending a command.`));if(pending.size>=MAX_PENDING_REQUESTS)return Promise.reject(new Error(`The diagram has too many pending requests.`));const instance=current;let resolve;let reject;const promise=new Promise((yes,no)=>{resolve=yes;reject=no});const timer=setTimeout(()=>{if(current===instance&&pending.has(id))fail(`The diagram did not confirm its result in time. Reload its saved state; the command will not be replayed.`)},timeoutMs);pending.set(id,{kind,promise,resolve,reject,timer,command,accepted:false});try{instance.port.postMessage({protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,...body})}catch{fail(`The diagram channel is unavailable. Reload its saved state.`)}return promise}function snapshot(){const requestId=view.crypto.randomUUID();return request(`snapshot`,requestId,{type:`snapshot`,requestId})}function receive(instance,value){if(closed||current!==instance||!object(value)||value.protocolVersion!==PROTOCOL_VERSION||value.playerInstanceId!==instance.id)return;if(value.type===`bootstrap-failed`){if(!instance.ready&&exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`description`])&&text$4(value.description,2e3,true))fail(value.description);return}if(value.type===`ready`){if(instance.ready||!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commands`,`state`,`description`])||value.state!==instance.initialState||!text$4(value.description,2e3,true)||!Array.isArray(value.commands)||value.commands.length!==commands.size||new Set(value.commands).size!==commands.size||value.commands.some(name=>!commands.has(name)))return;instance.ready=true;clearTimeout(instance.timer);display={state:value.state,description:value.description};publish({phase:`ready`,...display,error:``});instance.resolveReady(structuredClone(status));return}if(!instance.ready||!states.has(value.state)||!identity(value.commandId??value.requestId))return;const id=value.commandId??value.requestId;const operation=pending.get(id);if(!operation)return;if(operation.kind===`snapshot`){if(value.type!==`snapshot`||!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`requestId`,`state`,`description`,`paused`,`labels`])||!text$4(value.description,2e3,true))return;let semantic;try{semantic=semanticSnapshot({state:value.state,paused:value.paused,labels:value.labels},states)}catch{return}savedSnapshot=semantic;display={state:value.state,description:value.description};publish(display);settle(id,null,structuredClone(semantic));return}if(value.type===`accepted`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`]))return;operation.accepted=true;operation.acceptedState=value.state;publish({phase:`accepted`,error:``});return}if(value.type===`completed`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`,`description`])||!text$4(value.description,2e3,true)||!operation.accepted&&!operation.command.retry||operation.command.completionState!==`unchanged`&&value.state!==operation.command.completionState||operation.command.completionState===`unchanged`&&operation.accepted&&value.state!==operation.acceptedState)return;publish({phase:`ready`,error:``});settle(id,null,structuredClone(value))}else if(value.type===`failed`){if(!exactKeys(value,[`protocolVersion`,`playerInstanceId`,`type`,`commandId`,`state`,`code`,`description`])||!identity(value.code)||!text$4(value.description,2e3,true))return;publish({phase:`ready`,error:value.description});settle(id,Object.assign(new Error(value.description),{code:value.code}))}else return;snapshot().catch(()=>{})}function command({commandId,name,parameters={}}={}){const declared=commands.get(name);if(!identity(commandId)||!declared||!object(parameters)||Object.keys(parameters).some(key=>!declared.parameters.has(key)))return Promise.reject(new Error(`Choose a declared diagram command and bounded parameters.`));for(const[key,parameter]of declared.parameters){if(parameters[key]===void 0&&!parameter.required)continue;if(!text$4(parameters[key],parameter.maxLength))return Promise.reject(new Error(`Diagram parameter ${key} is missing or invalid.`))}const input=JSON.stringify([name,Object.keys(parameters).sort().map(key=>[key,parameters[key]])]);const previous=commandInputs.get(commandId);if(previous&&previous.input!==input)return Promise.reject(new Error(`This diagram command ID already names different input.`));if(pending.has(commandId))return pending.get(commandId).promise;if(!current?.ready||closed)return Promise.reject(new Error(`The diagram is not ready. Reload it before sending a command.`));if(previous&&previous.instanceId!==current.id)return Promise.reject(new Error(`The original diagram instance and retry receipt are gone. Use a new ID only for an intentional new command.`));if(!previous&&commandInputs.size>=MAX_COMMAND_IDS$1)return Promise.reject(new Error(`This diagram reached its 64 command-ID limit. Reopen it explicitly; no retry identity was discarded.`));if(!previous)commandInputs.set(commandId,{input,instanceId:current.id});return request(`command`,commandId,{type:`command`,commandId,name,parameters:structuredClone(parameters)},{retry:Boolean(previous),completionState:declared.completionState})}function restore(value=savedSnapshot,motion=reducedMotion){if(closed)return Promise.reject(new Error(`The diagram player is closed.`));if(typeof motion!==`boolean`)throw new Error(`Choose a boolean reduced-motion preference for the diagram.`);const semantic=value===void 0?void 0:semanticSnapshot(value,states);reducedMotion=motion;retire(new Error(`The diagram instance changed; unfinished commands were not replayed.`));const instance={id:view.crypto.randomUUID(),token:view.crypto.randomUUID(),ready:false,initialState:semantic?.state??visual.initialState};const ready=new Promise((resolve,reject)=>{instance.resolveReady=resolve;instance.rejectReady=reject});ready.catch(()=>{});instance.handshake=event=>{const value=event.data;if(current!==instance||event.source!==iframe.contentWindow||instance.port||!exactKeys(value,[`type`,`protocolVersion`,`playerInstanceId`,`token`])||value.type!==`vibe64-visual-handshake`||value.protocolVersion!==PROTOCOL_VERSION||value.playerInstanceId!==instance.id||value.token!==instance.token)return;const channel=new view.MessageChannel;instance.port=channel.port1;instance.port.onmessage=event=>receive(instance,event.data);instance.port.start();try{iframe.contentWindow.postMessage({type:`vibe64-visual-init`,protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,token:instance.token,init:{protocolVersion:PROTOCOL_VERSION,playerInstanceId:instance.id,initialState:instance.initialState,reducedMotion,...semantic?{snapshot:semantic}:{}}},`*`,[channel.port2])}catch{channel.port2.close();fail(`The diagram channel could not be transferred. Reload its saved state.`)}view.removeEventListener(`message`,instance.handshake)};current=instance;savedSnapshot=semantic;display={state:instance.initialState,description:visual.description};publish({playerInstanceId:instance.id,phase:`loading`,...display,error:``});instance.timer=setTimeout(()=>{if(current===instance)fail(`The diagram did not become ready. Reload it or ask the owner to check its verified controller.`)},timeoutMs);view.addEventListener(`message`,instance.handshake);iframe.setAttribute(`sandbox`,`allow-scripts`);iframe.setAttribute(`referrerpolicy`,`no-referrer`);iframe.removeAttribute(`allow`);iframe.removeAttribute(`src`);iframe.srcdoc=frameDocument({playerInstanceId:instance.id,token:instance.token,svg,controller});return ready}function dispose(){if(closed)return;closed=true;retire(new Error(`The diagram player closed; unfinished commands were not replayed.`));publish({phase:`disposed`})}return{ready:restore(savedSnapshot),command,snapshot,restore,dispose,get state(){return structuredClone(status)}}}var _hoisted_1$27=[`aria-label`];var _hoisted_2$21={class:`vibe64-training-visual__frame`};var _hoisted_3$18={class:`vibe64-training-visual__bar`};var _hoisted_4$14={class:`vibe64-training-visual__bar-title`};var _hoisted_5$12={class:`vibe64-training-visual__canvas`};var _hoisted_6$9=[`title`];var _hoisted_7$8={key:0,class:`vibe64-training-visual__error`,role:`alert`};var _hoisted_8$8={class:`text-body-medium`};var _sfc_main$32={__name:`TrainingVisualPlayer`,props:{resource:{type:Object,required:true},attemptId:{type:String,required:true},snapshot:{type:Object,default:void 0},reducedMotion:{type:Boolean,default:void 0}},emits:[`state`,`error`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const frame=ref(null);const state=ref({phase:`loading`,description:props.resource.visual?.description||``,error:``});const title=computed(()=>props.resource.visual?.title||`Lesson diagram`);let player;function mount(iframe){player?.dispose();player=void 0;if(!iframe)return;try{player=createTrainingVisualPlayer({iframe,resource:toRaw(props.resource),attemptId:props.attemptId,snapshot:toRaw(props.snapshot),reducedMotion:motionPreference(),onState(value){state.value=value;emit(`state`,value);if(value.error)emit(`error`,value.error)}})}catch(cause){state.value={phase:`failed`,description:props.resource.visual?.description||``,error:cause.message};emit(`error`,cause.message)}}watch([frame,()=>props.resource,()=>props.attemptId],([iframe])=>mount(iframe),{immediate:true,flush:`post`});function motionPreference(){return props.reducedMotion??frame.value.ownerDocument.defaultView.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function requirePlayer(){if(!player)throw new Error(`The diagram has not mounted.`);return player}function reload(){if(!player)return mount(frame.value);return player.restore(void 0,motionPreference()).catch(()=>{})}onBeforeUnmount(()=>player?.dispose());__expose({command:value=>requirePlayer().command(toRaw(value)),snapshot:()=>requirePlayer().snapshot(),restore:value=>requirePlayer().restore(toRaw(value),motionPreference()),dispose:()=>player?.dispose()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`vibe64-training-visual`,`is-${state.value.phase}`]),"aria-label":title.value},[createBaseVNode(`div`,_hoisted_2$21,[createBaseVNode(`div`,_hoisted_3$18,[_cache[0]||(_cache[0]=createBaseVNode(`svg`,{class:`vibe64-training-visual__bar-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[createBaseVNode(`path`,{d:`M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2m0 16H5V5h14v14M7 15l3-4 2 3 3-4 2 5H7Z`})],-1)),createBaseVNode(`span`,_hoisted_4$14,toDisplayString(title.value),1)]),createBaseVNode(`div`,_hoisted_5$12,[createBaseVNode(`iframe`,{ref_key:`frame`,ref:frame,title:title.value,sandbox:`allow-scripts`,referrerpolicy:`no-referrer`},null,8,_hoisted_6$9),state.value.phase===`loading`?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`image`,class:`vibe64-training-visual__loading`})):createCommentVNode(``,true)])]),withDirectives(createBaseVNode(`p`,{class:`vibe64-training-visual__caption text-body-medium`,role:`status`},toDisplayString(state.value.description),513),[[vShow,state.value.description]]),state.value.error?(openBlock(),createElementBlock(`div`,_hoisted_7$8,[_cache[2]||(_cache[2]=createBaseVNode(`svg`,{class:`vibe64-training-visual__error-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[createBaseVNode(`path`,{d:`M13 13h-2V7h2m0 10h-2v-2h2M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Z`})],-1)),createBaseVNode(`p`,_hoisted_8$8,toDisplayString(state.value.error),1),createVNode(VBtn,{"min-height":`48`,rounded:`pill`,variant:`tonal`,onClick:reload},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload diagram`,-1)])]),_:1})])):createCommentVNode(``,true)],10,_hoisted_1$27)}}};var TrainingVisualPlayer_default=_plugin_vue_export_helper_default(_sfc_main$32,[[`__scopeId`,`data-v-f4a57cf8`]]);var _hoisted_1$26={key:0,class:`vibe64-learning-step`};var _hoisted_2$20={class:`vibe64-learning-step__eyebrow`};var _hoisted_3$17=[`id`];var _hoisted_4$13={key:0,class:`vibe64-learning-step__note`,role:`status`};var _hoisted_5$11={key:1,class:`vibe64-learning-step__visual`,"aria-label":`Diagram`};var _hoisted_6$8={key:2,class:`vibe64-learning-step__error`,role:`alert`};var _hoisted_7$7={key:2,class:`vibe64-learning-step__check`,"aria-label":`Question`};var _hoisted_8$7={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-answer-kept`};var _hoisted_9$6={key:1,class:`vibe64-learning-step__hint`};var _hoisted_10$5={key:2,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_11$4={key:3,class:`vibe64-learning-step__check`,"aria-label":`Automatic check`};var _hoisted_12$4={key:0};var _hoisted_13$3={key:1};var _hoisted_14$1={key:2,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_15$1={key:4,class:`vibe64-learning-step__check`,"aria-label":`Review`};var _hoisted_16$1={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-review-saved`};var _hoisted_17$1={key:0,class:`vibe64-learning-step__hint`,role:`status`};var _hoisted_18={key:1,class:`vibe64-learning-step__hint`,role:`status`,"data-test":`learning-check-reason`};var _hoisted_19={key:5,class:`vibe64-learning-step__check`,"aria-label":`Self check`};var _hoisted_20={key:0,class:`vibe64-learning-step__hint`,"data-test":`learning-done-kept`};var _hoisted_21={key:8,class:`vibe64-learning-step__error`,role:`alert`};var _hoisted_22={class:`vibe64-learning-step__actions`};var _hoisted_23={key:9,class:`vibe64-learning-step__pager`};var _hoisted_24={class:`vibe64-learning-step__pager-end`};var MAX_COMMAND_IDS=64;var _sfc_main$31={__name:`Vibe64LearningStep`,props:mergeModels({learning:{type:Object,required:true},headingId:{type:String,default:``}},{"error":{type:String,default:``},"errorModifiers":{}}),emits:mergeModels([`return`],[`update:error`]),setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const actionError=useModel(__props,`error`);const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const step=computed(()=>props.learning.currentStep.value);const index=computed(()=>steps.value.findIndex(value=>value.id===step.value?.id));const ended=computed(()=>Boolean(lesson.value?.attempt?.ended));const busy=computed(()=>props.learning.state.busy);const statusOf=stepId=>props.learning.stepStatus(stepId);const kind=computed(()=>step.value?.check?.kind||`none`);const selected=ref([]);const savedSelection=computed(()=>{const passed=(lesson.value?.results||[]).filter(result=>result?.stepId===step.value?.id&&result.kind===`choice`&&result.outcome===`passed`&&Array.isArray(result.evidence?.selected));return passed.length?passed.at(-1).evidence.selected.filter(Number.isSafeInteger):null});watch([()=>step.value?.id,()=>JSON.stringify(savedSelection.value)],([stepId],[previousStepId]=[])=>{if(savedSelection.value)selected.value=[...savedSelection.value];else if(stepId!==previousStepId)selected.value=[]},{immediate:true});function toggleOption(optionIndex){selected.value=selected.value.includes(optionIndex)?selected.value.filter(value=>value!==optionIndex):[...selected.value,optionIndex]}const visualResource=shallowRef(null);const visualError=ref(``);const visualKey=ref(0);const player=ref(null);const playing=ref(false);let usedIds=0;const visuals=new Map;watch([()=>props.learning.state.attemptId,()=>step.value?.visual?.id],async([attemptId,visualId])=>{visualResource.value=null;visualError.value=``;usedIds=0;if(!attemptId||!visualId)return;const key=`${attemptId}\n${visualId}`;try{if(!visuals.has(key))visuals.set(key,getHttpWebClient().request(resolveStudioRequestUrl(VIBE64_LEARNING_ROUTES.visual(attemptId,visualId)),{method:`GET`}));const result=await visuals.get(key);if(props.learning.state.attemptId!==attemptId||step.value?.visual?.id!==visualId)return;if(result?.id!==visualId||result.visual?.id!==visualId)throw new Error(`The lesson diagram did not match this step.`);visualResource.value=result}catch(cause){visuals.delete(key);if(step.value?.visual?.id===visualId)visualError.value=String(cause?.message||`The lesson diagram could not be read.`)}},{immediate:true});async function play(){const entries=step.value?.visual?.play||[];if(!visualResource.value||playing.value)return;playing.value=true;visualError.value=``;try{if(usedIds+entries.length>MAX_COMMAND_IDS){visualKey.value+=1;usedIds=0;await nextTick()}if(!player.value)throw new Error(`The diagram has not mounted.`);await player.value.restore(void 0);for(const entry of entries){usedIds+=1;await player.value.command({commandId:globalThis.crypto.randomUUID(),name:entry.name,parameters:{...entry.parameters||{}}})}}catch(cause){visualError.value=String(cause?.message||`The diagram could not play.`)}finally{playing.value=false}}const checkReason=ref(``);watch([()=>props.learning.state.attemptId,()=>step.value?.id],()=>{checkReason.value=``});async function runCheck(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.runCheck(stepId);if(step.value?.id===stepId)checkReason.value=checkNote(result)}async function runReview(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.review(stepId);if(step.value?.id===stepId)checkReason.value=reviewRunNote(result,props.learning.state.lessonError)}async function answer(){const stepId=step.value.id;checkReason.value=``;const result=await props.learning.answer(stepId,selected.value);if(step.value?.id===stepId)checkReason.value=checkNote(result)}async function showMe(){actionError.value=``;let error=``;try{const result=await props.learning.showMe(step.value.id);if(result?.guide&&result.guide.shown===false)error=`That place is not visible on this page. Open your practice project, then choose Show me again.`}catch(cause){error=String(cause?.message||`That place could not be shown.`)}if(error){actionError.value=error;emit(`return`)}}const stuckOffered=computed(()=>Boolean(!ended.value&&statusOf(step.value?.id)!==`passed`&&([`auto`,`fact`,`review`].includes(kind.value)||step.value?.beats?.some(beat=>beat.kind===`do`))));function askStuck(){actionError.value=``;try{props.learning.stuck(step.value.id)}catch(cause){actionError.value=String(cause?.message||`Colleague could not be asked.`)}}function teachMe(){actionError.value=``;try{props.learning.teachMe(step.value.id)}catch(cause){actionError.value=String(cause?.message||`Colleague could not be asked.`)}}const go=offset=>{const next=steps.value[index.value+offset];if(next)props.learning.selectStep(next.id)};const readingDone=computed(()=>kind.value===`none`&&statusOf(step.value?.id)===`passed`);async function markRead(){const stepId=step.value.id;if(await props.learning.done(stepId)&&step.value?.id===stepId)go(1)}return(_ctx,_cache)=>{return step.value?(openBlock(),createElementBlock(`div`,_hoisted_1$26,[createBaseVNode(`p`,_hoisted_2$20,[createTextVNode(`Step `+toDisplayString(index.value+1)+` of `+toDisplayString(steps.value.length),1),!step.value.required?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · optional`)],64)):createCommentVNode(``,true)]),createBaseVNode(`h2`,{id:__props.headingId||void 0},toDisplayString(step.value.title),9,_hoisted_3$17),ended.value?(openBlock(),createElementBlock(`p`,_hoisted_4$13,[_cache[3]||(_cache[3]=createTextVNode(` This lesson has ended. You can read it; it is kept under Archived. To do it again, start it from Courses. `,-1)),createVNode(VBtn,{variant:`text`,"min-height":`48`,"data-test":`learning-ended-courses`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.show({surface:`courses`}))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Go to Courses`,-1)])]),_:1})])):createCommentVNode(``,true),createVNode(Vibe64LearningMarkdown_default,{text:step.value.bodyText||``},null,8,[`text`]),step.value.visual?(openBlock(),createElementBlock(`section`,_hoisted_5$11,[visualResource.value?(openBlock(),createBlock(unref(TrainingVisualPlayer_default),{key:`${step.value.visual.id}:${visualKey.value}`,ref_key:`player`,ref:player,resource:visualResource.value,"attempt-id":__props.learning.state.attemptId},null,8,[`resource`,`attempt-id`])):!visualError.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`image`,"aria-label":`Loading the diagram`})):createCommentVNode(``,true),visualError.value?(openBlock(),createElementBlock(`p`,_hoisted_6$8,toDisplayString(visualError.value),1)):createCommentVNode(``,true),step.value.visual.play?.length?(openBlock(),createBlock(VBtn,{key:3,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-play`,disabled:!visualResource.value,loading:playing.value,onClick:play},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Play `,-1)])]),_:1},8,[`disabled`,`loading`])):createCommentVNode(``,true)])):createCommentVNode(``,true),!ended.value&&kind.value===`choice`?(openBlock(),createElementBlock(`section`,_hoisted_7$7,[createBaseVNode(`h3`,null,toDisplayString(step.value.check.question),1),statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_8$7,`You already passed this question, so answers are not checked again.`)):(openBlock(),createElementBlock(`p`,_hoisted_9$6,`Select every correct option, then choose Check answer.`)),(openBlock(true),createElementBlock(Fragment,null,renderList(step.value.check.options,(option,optionIndex)=>{return openBlock(),createBlock(VCheckbox,{key:optionIndex,"model-value":selected.value.includes(optionIndex),label:option,"hide-details":``,density:`comfortable`,"onUpdate:modelValue":$event=>toggleOption(optionIndex)},null,8,[`model-value`,`label`,`onUpdate:modelValue`])}),128)),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-answer`,disabled:!selected.value.length||Boolean(busy.value)||statusOf(step.value.id)===`passed`,loading:busy.value===`answer:${step.value.id}`,onClick:answer},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Check answer `,-1)])]),_:1},8,[`disabled`,`loading`]),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_10$5,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)])):!ended.value&&(kind.value===`auto`||kind.value===`fact`)?(openBlock(),createElementBlock(`section`,_hoisted_11$4,[step.value.check.files?.length?(openBlock(),createElementBlock(`p`,_hoisted_12$4,`Make this change yourself in Dashboard → Files. Saving does not check it: press Check now when you are ready.`)):kind.value===`auto`?(openBlock(),createElementBlock(`p`,_hoisted_13$3,`This step is checked automatically when you do it in your practice project.`)):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-check`,disabled:Boolean(busy.value),loading:busy.value===`check:${step.value.id}`,onClick:runCheck},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Check now `,-1)])]),_:1},8,[`disabled`,`loading`]),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_14$1,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)])):!ended.value&&kind.value===`review`?(openBlock(),createElementBlock(`section`,_hoisted_15$1,[createBaseVNode(`p`,null,[_cache[7]||(_cache[7]=createTextVNode(`Your AI reviews your work in the practice project against this: `,-1)),createBaseVNode(`strong`,null,toDisplayString(step.value.check.rubric),1)]),statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_16$1,toDisplayString(__props.learning.reviewNote(__props.learning.savedReview(step.value.id))||`Passed ✓`),1)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-review`,disabled:Boolean(busy.value),loading:busy.value===`review:${step.value.id}`,onClick:runReview},{default:withCtx(()=>[createTextVNode(toDisplayString(checkReason.value?`Check again`:`Check my work`),1)]),_:1},8,[`disabled`,`loading`]),busy.value===`review:${step.value.id}`?(openBlock(),createElementBlock(`p`,_hoisted_17$1,`Checking your work with your AI…`)):createCommentVNode(``,true),checkReason.value?(openBlock(),createElementBlock(`p`,_hoisted_18,toDisplayString(checkReason.value),1)):createCommentVNode(``,true)],64))])):!ended.value&&kind.value===`self`?(openBlock(),createElementBlock(`section`,_hoisted_19,[statusOf(step.value.id)===`passed`?(openBlock(),createElementBlock(`p`,_hoisted_20,`You already passed this step, so it does not need to be marked done again.`)):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-done`,disabled:Boolean(busy.value)||statusOf(step.value.id)===`passed`,loading:busy.value===`done:${step.value.id}`,onClick:_cache[1]||(_cache[1]=$event=>__props.learning.done(step.value.id))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Done `,-1)])]),_:1},8,[`disabled`,`loading`])])):createCommentVNode(``,true),kind.value!==`none`?(openBlock(),createElementBlock(`p`,{key:6,class:normalizeClass([`vibe64-learning-step__status`,`is-${statusOf(step.value.id)}`]),role:`status`,"data-test":`learning-step-status`},toDisplayString(unref(STEP_STATUS_LABELS)[statusOf(step.value.id)]),3)):readingDone.value?(openBlock(),createElementBlock(Fragment,{key:7},[_cache[9]||(_cache[9]=createBaseVNode(`p`,{class:`vibe64-learning-step__status is-passed`,role:`status`,"data-test":`learning-step-status`},`Done`,-1)),_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-learning-step__hint`,"data-test":`learning-mark-read-kept`},`You marked this step done.`,-1))],64)):createCommentVNode(``,true),actionError.value?(openBlock(),createElementBlock(`p`,_hoisted_21,toDisplayString(actionError.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_22,[(step.value.guide||step.value.beats?.length)&&!ended.value?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-show-me`,onClick:showMe},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Show me`,-1)])]),_:1})):createCommentVNode(``,true),!ended.value?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-teach-me`,onClick:teachMe},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Teach me`,-1)])]),_:1})):createCommentVNode(``,true),stuckOffered.value?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-stuck`,onClick:askStuck},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`I'm stuck`,-1)])]),_:1})):createCommentVNode(``,true)]),renderSlot(_ctx.$slots,`after-actions`,{},void 0,true),!ended.value&&kind.value===`none`&&!readingDone.value?(openBlock(),createElementBlock(`div`,_hoisted_23,[createBaseVNode(`span`,_hoisted_24,[createVNode(VBtn,{color:`primary`,variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`learning-mark-read`,disabled:Boolean(busy.value),loading:busy.value===`done:${step.value.id}`,onClick:markRead},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Mark as done`,-1)])]),_:1},8,[`disabled`,`loading`])])])):createCommentVNode(``,true)])):createCommentVNode(``,true)}}};var Vibe64LearningStep_default=_plugin_vue_export_helper_default(_sfc_main$31,[[`__scopeId`,`data-v-2ec10a1c`]]);var _hoisted_1$25={class:`vibe64-learning-reader-frame`};var _hoisted_2$19=[`aria-busy`];var _hoisted_3$16={class:`vibe64-learning-reader__steps`,"aria-label":`Lesson steps`};var _hoisted_4$12={class:`vibe64-learning-reader__lesson`};var _hoisted_5$10={class:`vibe64-learning-reader__code`};var _hoisted_6$7=[`aria-current`,`data-step-id`,`onClick`];var _hoisted_7$6={class:`vibe64-learning-reader__step-mark`,"aria-hidden":`true`};var _hoisted_8$6={class:`vibe64-learning-reader__step-title`};var _hoisted_9$5={class:`vibe64-learning-reader__step-status`};var _hoisted_10$4={key:0,class:`vibe64-learning-reader__summary`};var _hoisted_11$3={key:0,class:`vibe64-learning-reader__complete`,role:`status`};var _hoisted_12$3=[`aria-labelledby`];var _hoisted_13$2={key:0,class:`vibe64-learning-reader__notes`};var _sfc_main$30={__name:`Vibe64LearningReader`,props:{learning:{type:Object,required:true},visible:{type:Boolean,default:true}},emits:[`return`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const lesson=computed(()=>props.learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const step=computed(()=>props.learning.currentStep.value);const statusOf=stepId=>props.learning.stepStatus(stepId);const requiredDone=computed(()=>props.learning.complete);const body=ref(null);let restoring=false;async function restoreScroll(){await nextTick();if(!body.value)return;restoring=true;body.value.scrollTop=props.learning.state.scroll||0;requestAnimationFrameSafe(()=>{restoring=false})}function requestAnimationFrameSafe(callback){if(globalThis.requestAnimationFrame)globalThis.requestAnimationFrame(callback);else setTimeout(callback,0)}watch([()=>step.value?.id,()=>props.visible],([,shown])=>{if(shown)restoreScroll()},{immediate:true});let scrollTimer=null;function onScroll(){if(restoring||!body.value)return;clearTimeout(scrollTimer);const top=body.value.scrollTop;scrollTimer=setTimeout(()=>props.learning.setScroll(top),200)}onBeforeUnmount(()=>clearTimeout(scrollTimer));const stepList=ref(null);watch([()=>step.value?.id,()=>props.visible],async([,shown])=>{if(!shown)return;await nextTick();revealCurrentStep(stepList.value)},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$25,[createBaseVNode(`div`,{class:`vibe64-learning-reader`,"aria-busy":__props.learning.state.loading},[__props.learning.state.lessonError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,rounded:`lg`,class:`vibe64-learning-reader__alert`,role:`alert`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`48`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.loadLesson())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(__props.learning.state.lessonError)+` `,1)]),_:1})):createCommentVNode(``,true),!lesson.value&&__props.learning.state.loading?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`heading, paragraph, paragraph`,"aria-label":`Loading the lesson`})):lesson.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`nav`,_hoisted_3$16,[createBaseVNode(`p`,_hoisted_4$12,[createBaseVNode(`span`,_hoisted_5$10,toDisplayString(lesson.value.code),1),createBaseVNode(`strong`,null,toDisplayString(lesson.value.title),1)]),createBaseVNode(`ol`,{ref_key:`stepList`,ref:stepList},[(openBlock(true),createElementBlock(Fragment,null,renderList(steps.value,(value,position)=>{return openBlock(),createElementBlock(`li`,{key:value.id},[createBaseVNode(`button`,{type:`button`,class:normalizeClass([`vibe64-learning-reader__step`,[`is-${statusOf(value.id)}`,{"is-current":value.id===step.value?.id}]]),"aria-current":value.id===step.value?.id?`step`:void 0,"data-step-id":value.id,onClick:$event=>__props.learning.selectStep(value.id)},[createBaseVNode(`span`,_hoisted_7$6,toDisplayString(statusOf(value.id)===`passed`?`✓`:position+1),1),createBaseVNode(`span`,_hoisted_8$6,toDisplayString(value.title),1),createBaseVNode(`span`,_hoisted_9$5,toDisplayString(value.required?unref(STEP_STATUS_LABELS)[statusOf(value.id)]:statusOf(value.id)===`passed`?`Done`:`Optional`),1)],10,_hoisted_6$7)])}),128))],512),requiredDone.value?(openBlock(),createElementBlock(`div`,_hoisted_10$4,[requiredDone.value?(openBlock(),createElementBlock(`p`,_hoisted_11$3,[..._cache[4]||(_cache[4]=[createBaseVNode(`span`,{class:`vibe64-learning-reader__complete-long`},`Every required step is passed. This lesson is complete.`,-1),createBaseVNode(`span`,{class:`vibe64-learning-reader__complete-short`},`✓ Lesson complete`,-1)])])):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"data-test":`learning-finish`,onClick:_cache[1]||(_cache[1]=$event=>__props.learning.showFinished())},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Lesson finished `,-1)])]),_:1})])):createCommentVNode(``,true)]),step.value?(openBlock(),createElementBlock(`article`,{key:0,ref_key:`body`,ref:body,class:`vibe64-learning-reader__body`,"aria-labelledby":`vibe64-learning-step-${step.value.id}`,onScrollPassive:onScroll},[createVNode(Vibe64LearningStep_default,{learning:__props.learning,"heading-id":`vibe64-learning-step-${step.value.id}`,onReturn:_cache[2]||(_cache[2]=$event=>emit(`return`))},{"after-actions":withCtx(()=>[lesson.value.notesText?(openBlock(),createElementBlock(`details`,_hoisted_13$2,[_cache[6]||(_cache[6]=createBaseVNode(`summary`,null,`Lesson notes`,-1)),createVNode(Vibe64LearningMarkdown_default,{text:lesson.value.notesText},null,8,[`text`])])):createCommentVNode(``,true)]),_:1},8,[`learning`,`heading-id`])],40,_hoisted_12$3)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],8,_hoisted_2$19)])}}};var Vibe64LearningReader_default=_plugin_vue_export_helper_default(_sfc_main$30,[[`__scopeId`,`data-v-dbdb5c81`]]);var _hoisted_1$24={class:`vibe64-learning-lesson-pane`,"aria-label":`Lesson`,"data-test":`learning-lesson-pane`,"data-vibe64-guide-pane":`lesson`};var _hoisted_2$18={key:0,class:`vibe64-learning-lesson-pane__scroll`};var _sfc_main$29={__name:`Vibe64LearningLessonPane`,props:{visible:{type:Boolean,default:true}},setup(__props){const props=__props;const learning=useVibe64Learning();const finished=computed(()=>Boolean(learning.state.finished&&learning.lesson.value));const courses=useVibe64LearningCourses({active:computed(()=>props.visible&&finished.value)});const flush=()=>learning.flushReader();onMounted(()=>globalThis.addEventListener(`pagehide`,flush));onBeforeUnmount(()=>{globalThis.removeEventListener(`pagehide`,flush);flush()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$24,[finished.value?(openBlock(),createElementBlock(`div`,_hoisted_2$18,[createVNode(Vibe64LearningFinished_default,{learning:unref(learning),courses:unref(courses)},null,8,[`learning`,`courses`])])):(openBlock(),createBlock(Vibe64LearningReader_default,{key:1,learning:unref(learning),visible:__props.visible,onReturn:_cache[0]||(_cache[0]=$event=>unref(learning).openLesson())},null,8,[`learning`,`visible`]))])}}};var Vibe64LearningLessonPane_default=_plugin_vue_export_helper_default(_sfc_main$29,[[`__scopeId`,`data-v-e622ed16`]]);var _hoisted_1$23={class:`vibe64-lesson-sheet`,"data-test":`lesson-sheet`};var _hoisted_2$17={class:`vibe64-lesson-sheet__header`};var _sfc_main$28={__name:`Vibe64LessonSheet`,setup(__props){const learning=useVibe64Learning();return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$23,[createBaseVNode(`header`,_hoisted_2$17,[createVNode(VIcon,{icon:unref(mdiSchoolOutline),size:`18`},null,8,[`icon`]),_cache[2]||(_cache[2]=createBaseVNode(`span`,{class:`vibe64-lesson-sheet__title`},`Lesson`,-1)),createVNode(VBtn,{class:`vibe64-lesson-sheet__hide`,variant:`tonal`,rounded:`pill`,size:`small`,"min-height":`32`,"prepend-icon":unref(mdiChevronUp),"data-test":`lesson-sheet-hide`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).hideLesson())},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Hide lesson `,-1)])]),_:1},8,[`prepend-icon`])]),createVNode(Vibe64LearningLessonPane_default,{class:`vibe64-lesson-sheet__pane`})])}}};var Vibe64LessonSheet_default=_plugin_vue_export_helper_default(_sfc_main$28,[[`__scopeId`,`data-v-42f6ce9d`]]);var _hoisted_1$22={class:`studio-autopilot__project-panel`,"aria-label":`Project`};var _hoisted_2$16=[`data-vibe64-guide-pane`];var _hoisted_3$15={class:`studio-autopilot__right-pane-page`,role:`tabpanel`};var _hoisted_4$11=[`data-vibe64-guide-pane`];var _hoisted_5$9={class:`studio-autopilot__session-tool-header`};var _hoisted_6$6={class:`studio-autopilot__right-pane-page`};var _hoisted_7$5=[`data-vibe64-guide-pane`];var _hoisted_8$5={class:`studio-autopilot__session-tool-header`};var _hoisted_9$4=[`data-vibe64-guide-pane`];var _hoisted_10$3={class:`studio-autopilot__session-tool-header`};var _hoisted_11$2=[`data-vibe64-guide-pane`];var _hoisted_12$2={class:`studio-autopilot__architecture-file`,"aria-label":`Architecture file viewer`};var _hoisted_13$1={class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":`preview`,role:`tabpanel`};var _sfc_main$27={__name:`Vibe64AutopilotProjectPanel`,props:{view:{type:Object,required:true}},setup(__props){const{agentActive,askAssistantAboutFile,assistantAccessScopeKey,assistantCanUsePurpose,assistantDraftAvailable,assistantFixAllowed,assistantPurposes,backToDashboard,backToSystemFromEditor,composerInput,dashboardContext,dashboardRouteVisible,dashboardShellVisible,databaseOpenRequest,describeSubsystems,emit,fileBookmarks,fixPreviewIdentityWithTemporaryAi,lessonShown,openSourceEditorFile,openSubsystemTable,openUsage,prefillComposer,projectSlug,props,repositoryOperationActive,rightPaneTab,rightPaneTabMounted,selectedAssistantSessionId,selectSessionTool,sessionId,sessionSourceRoot,sourceEditorOpenRequest,sourceOperationsSuspended,sourceToolLoading,startTemporaryAiTask,systemBackAvailable,systemReloadVersion,systemRestoreRequest,temporaryAiWorkspace,updatePreviewAttachmentState,updateTestApproval,usageOpenRequest,Vibe64OutputControls}=__props.view;const architectureFileRequest=ref(null);const architectureProgramRequest=ref(null);watch(()=>props.session?.sessionId,()=>{architectureFileRequest.value=null;architectureProgramRequest.value=null});function openSubsystemTextLink({event,href},sourcePath,openSource){const relative=href&&!/^(?:[a-z][a-z\d+.-]*:|\/|#)/iu.test(href);const target=sourceEditorLinkTarget({href:relative?new URL(href,`https://source.invalid/${sourcePath}`).pathname.slice(1):href});if(!target)return;event?.preventDefault();openSource(target)}const Vibe64ArchitectureView=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CNkd6O5t.js`).then(n=>n.f).then(module=>module.loadVibe64ArchitectureView()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const Vibe64DatabaseWorkspace=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CNkd6O5t.js`).then(n=>n.p).then(module=>module.loadVibe64DatabaseWorkspace()),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])));const router=useRouter();function selectPreview(){router.push(projectAppPath(projectSlug.value));emit(`project-attention`)}async function attachPreviewFile(file){const uploaded=await(temporaryAiWorkspace.value?.composer||composerInput.value)?.attachFiles?.([file]);if(!Array.isArray(uploaded)||uploaded.length<1)throw new Error(`Open the chat composer before attaching a preview file.`);return uploaded[0]}async function attachPreviewFileProducer(options={}){const uploaded=await(temporaryAiWorkspace.value?.composer||composerInput.value)?.attachFileProducer?.(options);return Array.isArray(uploaded)&&uploaded.length>0?uploaded[0]:null}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$22,[unref(sourceToolLoading)?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,class:`studio-autopilot__right-pane-page`,label:`session source`,loading:``})):createCommentVNode(``,true),unref(props).projectPane===`dashboard`?withDirectives((openBlock(),createBlock(Vibe64DashboardShell_default,{key:1,class:`studio-autopilot__dashboard-shell`,"dashboard-context":unref(dashboardContext)},{default:withCtx(()=>[withDirectives(createBaseVNode(`div`,{class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(unref(rightPaneTab)),role:`tabpanel`},[unref(dashboardRouteVisible)?renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:unref(dashboardContext)},void 0,true,0):createCommentVNode(``,true)],8,_hoisted_2$16),[[vShow,unref(dashboardRouteVisible)]]),withDirectives(createBaseVNode(`div`,_hoisted_3$15,[unref(rightPaneTabMounted)(`ai-terminal`)?renderSlot(_ctx.$slots,`ai-terminal`,{active:unref(rightPaneTab)===`ai-terminal`},void 0,true,0):createCommentVNode(``,true)],512),[[vShow,unref(rightPaneTab)===`ai-terminal`]])]),_:3},8,[`dashboard-context`])),[[vShow,unref(dashboardShellVisible)]]):createCommentVNode(``,true),unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`changes`?(openBlock(),createElementBlock(`section`,{key:2,"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`changes`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_5$9,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:unref(backToDashboard)},null,8,[`onClick`])]),createBaseVNode(`div`,_hoisted_6$6,[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:unref(dashboardContext)},void 0,true)])],8,_hoisted_4$11)):createCommentVNode(``,true),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`editor`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_8$5,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[0]||(_cache[0]=$event=>unref(systemBackAvailable)?unref(backToSystemFromEditor)():unref(backToDashboard)())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(systemBackAvailable)?`Back to Architecture`:`Back to dashboard`),1)]),_:1})]),unref(rightPaneTabMounted)(`editor`)?(openBlock(),createBlock(Vibe64SessionFiles_default,{key:unref(assistantAccessScopeKey),"repo-available":Boolean(unref(sessionSourceRoot)),active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`editor`,"agent-active":unref(agentActive),"file-bookmarks":unref(fileBookmarks),"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`,"assistant-draft-available":unref(assistantDraftAvailable),class:`studio-autopilot__session-tool-content`,"open-request":unref(sourceEditorOpenRequest),"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onAskAssistantAboutFile:unref(askAssistantAboutFile),onOpenProgram:_cache[1]||(_cache[1]=$event=>{architectureProgramRequest.value={id:$event};unref(selectSessionTool)(`system`)})},null,8,[`repo-available`,`active`,`agent-active`,`file-bookmarks`,`assistant-available`,`assistant-unavailable-message`,`assistant-draft-available`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onAskAssistantAboutFile`])):createCommentVNode(``,true)],8,_hoisted_7$5),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`editor`]]),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`database`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane`,role:`tabpanel`},[createBaseVNode(`header`,_hoisted_10$3,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[2]||(_cache[2]=$event=>unref(systemBackAvailable)?unref(backToSystemFromEditor)():unref(backToDashboard)())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(systemBackAvailable)?`Back to Architecture`:`Back to dashboard`),1)]),_:1})]),unref(rightPaneTabMounted)(`database`)?(openBlock(),createBlock(unref(Vibe64DatabaseWorkspace),{key:unref(assistantAccessScopeKey),"open-request":unref(databaseOpenRequest),active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`database`,"assistant-available":unref(assistantCanUsePurpose)(`fix`),class:`studio-autopilot__session-tool-content`,"project-slug":unref(projectSlug),"session-id":unref(sessionId),onRequestOverviewAssistant:_cache[3]||(_cache[3]=$event=>unref(assistantCanUsePurpose)(`fix`)?unref(startTemporaryAiTask)($event):unref(prefillComposer)($event.message,{append:true}))},null,8,[`open-request`,`active`,`assistant-available`,`project-slug`,`session-id`])):createCommentVNode(``,true)],8,_hoisted_9$4),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`database`]]),withDirectives(createBaseVNode(`section`,{"data-vibe64-guide-pane":unref(vibe64SessionToolGuideId)(`system`),class:`studio-autopilot__right-pane-page studio-autopilot__session-tool-pane studio-autopilot__architecture-pane`,role:`tabpanel`},[unref(rightPaneTabMounted)(`system`)?(openBlock(),createBlock(unref(Vibe64ArchitectureView),{key:0,"assistant-available":unref(assistantFixAllowed)&&!unref(repositoryOperationActive)&&!unref(props).sessionSelectionArchived,active:unref(props).active&&unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`system`,class:`studio-autopilot__session-tool-content`,"resolve-request-url":unref(resolveStudioRequestUrl),"restore-request":unref(systemRestoreRequest),"open-program-request":architectureProgramRequest.value,"usage-open-request":unref(usageOpenRequest),onSelectPreview:selectPreview,"reload-version":unref(systemReloadVersion),"project-slug":unref(projectSlug),onOpenTable:unref(openSubsystemTable),onDescribeSubsystems:unref(describeSubsystems),"session-id":unref(sessionId),onInspectFile:_cache[4]||(_cache[4]=$event=>architectureFileRequest.value={...$event,presentation:`interface`}),onOpenSourceFileImmersive:unref(openSourceEditorFile),onOpenSourceFile:unref(openSourceEditorFile)},{navigation:withCtx(()=>[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:unref(backToDashboard)},null,8,[`onClick`])]),text:withCtx(({text,sourcePath,openSource})=>[createVNode(unref(LongTextPreviewBlocks_default),{blocks:unref(parseLongTextReviewBlocks)(text||``),onOpenLink:$event=>openSubsystemTextLink($event,sourcePath,openSource)},null,8,[`blocks`,`onOpenLink`])]),"file-interface":withCtx(({request,active,architecture,openFile,updateLocation,openProgram})=>[createVNode(Vibe64SessionSourceEditor_default,{"single-file":``,active:unref(props).active&&active,"agent-active":unref(agentActive),"architecture-facts":architecture,"file-bookmarks":unref(fileBookmarks),"assistant-draft-available":unref(assistantDraftAvailable),onAskAssistantAboutFile:unref(askAssistantAboutFile),onOpenProgram:openProgram,"open-request":request,"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onOpenSourceFile:openFile,onInterfaceLocation:updateLocation,"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`},null,8,[`active`,`agent-active`,`architecture-facts`,`file-bookmarks`,`assistant-draft-available`,`onAskAssistantAboutFile`,`onOpenProgram`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onOpenSourceFile`,`onInterfaceLocation`,`assistant-available`,`assistant-unavailable-message`])]),_:1},8,[`assistant-available`,`active`,`resolve-request-url`,`restore-request`,`open-program-request`,`usage-open-request`,`reload-version`,`project-slug`,`onOpenTable`,`onDescribeSubsystems`,`session-id`,`onOpenSourceFileImmersive`,`onOpenSourceFile`])):createCommentVNode(``,true),createVNode(VDialog,{"model-value":Boolean(architectureFileRequest.value),"max-width":`1100`,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>!$event&&(architectureFileRequest.value=null))},{default:withCtx(()=>[createBaseVNode(`section`,_hoisted_12$2,[createBaseVNode(`header`,null,[createBaseVNode(`strong`,null,toDisplayString(architectureFileRequest.value?.path),1),createVNode(VBtn,{variant:`text`,"aria-label":`Close file viewer`,onClick:_cache[5]||(_cache[5]=$event=>architectureFileRequest.value=null)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Close`,-1)])]),_:1})]),architectureFileRequest.value?(openBlock(),createBlock(Vibe64SessionSourceEditor_default,{"single-file":``,key:architectureFileRequest.value.path,active:unref(props).active,"agent-active":unref(agentActive),"open-request":architectureFileRequest.value,"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),onOpenSourceFile:unref(openSourceEditorFile),"assistant-available":unref(assistantCanUsePurpose)(`source_explanation`),"assistant-unavailable-message":unref(assistantPurposes).source_explanation?.message||`Source explanations are unavailable.`},null,8,[`active`,`agent-active`,`open-request`,`project-slug`,`session-id`,`sessions-api-path`,`onOpenSourceFile`,`assistant-available`,`assistant-unavailable-message`])):createCommentVNode(``,true)])]),_:1},8,[`model-value`])],8,_hoisted_11$2),[[vShow,unref(props).projectPane===`dashboard`&&unref(rightPaneTab)===`system`]]),unref(lessonShown)&&unref(props).active?(openBlock(),createBlock(Vibe64LessonSheet_default,{key:3})):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,_hoisted_13$1,[createVNode(Vibe64ProjectOnboarding_default,{active:unref(props).active&&unref(props).projectPane===`preview`,archived:unref(props).sessionSelectionArchived,busy:unref(sourceOperationsSuspended)||unref(agentActive)||Boolean(unref(props).page?.busy||unref(props).page?.launchBusy),"can-ask":unref(assistantFixAllowed),"request-temporary-ai":unref(startTemporaryAiTask),"session-id":unref(selectedAssistantSessionId)},{default:withCtx(()=>[createVNode(unref(Vibe64OutputControls),{"fix-preview-identity-with-temporary-ai":unref(assistantFixAllowed)?unref(fixPreviewIdentityWithTemporaryAi):null,"attach-preview-file":attachPreviewFile,"prepare-preview-file":attachPreviewFileProducer,"auto-start-managed-preview":!unref(props).sessionSelectionArchived,"button-label":`Run`,"button-size":`small`,"button-variant":`tonal`,busy:unref(agentActive)||Boolean(unref(props).page?.busy||unref(props).page?.launchBusy),class:`studio-autopilot__preview-launch`,"embedded-preview":``,"preview-displayed":unref(props).projectPane===`preview`&&!unref(lessonShown),session:unref(props).session,"source-operations-suspended":unref(sourceOperationsSuspended),"toolbar-teleport-target":unref(props).projectPane===`preview`?unref(props).previewToolbarTeleportTarget:``,"window-displayed":unref(props).active,onOpenUsage:unref(openUsage),onPreviewAttachmentState:unref(updatePreviewAttachmentState),onTestApproval:unref(updateTestApproval)},null,8,[`fix-preview-identity-with-temporary-ai`,`auto-start-managed-preview`,`busy`,`preview-displayed`,`session`,`source-operations-suspended`,`toolbar-teleport-target`,`window-displayed`,`onOpenUsage`,`onPreviewAttachmentState`,`onTestApproval`])]),_:1},8,[`active`,`archived`,`busy`,`can-ask`,`request-temporary-ai`,`session-id`])],512),[[vShow,unref(props).projectPane===`preview`]])])}}};var Vibe64AutopilotProjectPanel_default=_plugin_vue_export_helper_default(_sfc_main$27,[[`__scopeId`,`data-v-d8a6e489`]]);var _sfc_main$26={__name:`Vibe64SessionPin`,props:{session:{type:Object,required:true},sessionsApiPath:{type:String,required:true},refresh:{type:Function,default:null},listItem:Boolean},setup(__props){const props=__props;const pinned=computed(()=>props.session.pinnedSessionId===props.session.sessionId);const anotherPinned=computed(()=>Boolean(props.session.pinnedSessionId)&&!pinned.value);const pending=ref(false);const label=computed(()=>{if(pending.value)return`Updating session pin…`;if(anotherPinned.value)return`Unpin the project's pinned session first`;return pinned.value?`Unpin session`:`Pin session as project source`});const path=vibe64SessionPath(props.sessionsApiPath,props.session.sessionId,`/pin`);const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.pin`,buildRawPayload:()=>({pinned:!pinned.value}),buildCommandOptions:()=>({method:`PATCH`,path}),fallbackRunError:`The session pin could not be changed.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});async function toggle(){if(pending.value||anotherPinned.value)return;pending.value=true;try{await command.run();await props.refresh?.()}catch{}finally{pending.value=false}}return(_ctx,_cache)=>{return __props.listItem?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":pinned.value?unref(mdiPin):unref(mdiPinOutline),title:pinned.value?`Unpin session`:`Pin session`,subtitle:pinned.value?`Stop using it as the project source`:label.value,"aria-pressed":pinned.value,"aria-busy":pending.value,disabled:pending.value||anotherPinned.value,"min-height":`48`,onClick:toggle},null,8,[`prepend-icon`,`title`,`subtitle`,`aria-pressed`,`aria-busy`,`disabled`])):(openBlock(),createBlock(VBtn,{key:1,class:`studio-autopilot__header-action`,icon:pinned.value?unref(mdiPin):unref(mdiPinOutline),"aria-label":label.value,title:label.value,"aria-pressed":pinned.value,"aria-busy":pending.value,disabled:pending.value||anotherPinned.value,variant:`text`,height:`var(--session-action-size, 36px)`,width:`var(--session-action-size, 36px)`,onClick:toggle},null,8,[`icon`,`aria-label`,`title`,`aria-pressed`,`aria-busy`,`disabled`]))}}};var _sfc_main$25={__name:`Vibe64RenameSessionDialog`,props:{session:{type:Object,required:true},sessionsApiPath:{type:String,required:true}},emits:[`close`,`renamed`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const name=ref(props.session.sessionName||``);const pending=ref(false);const path=vibe64SessionPath(props.sessionsApiPath,props.session.sessionId,`/name`);const command=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,placementSource:`vibe64.sessions.rename`,buildRawPayload:()=>({name:normalizedName.value}),buildCommandOptions:()=>({method:`PATCH`,path}),fallbackRunError:`The session could not be renamed.`,suppressSuccessMessage:true,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,writeMethod:`PATCH`});const normalizedName=computed(()=>name.value.trim());const canSave=computed(()=>Boolean(normalizedName.value)&&normalizedName.value!==props.session.sessionName&&!pending.value);async function submit(){if(!canSave.value)return;pending.value=true;try{await command.run();emit(`renamed`);emit(`close`)}catch{}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-label":`Rename session`,"model-value":true,"max-width":`28rem`,persistent:pending.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>!$event&&emit(`close`))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:withModifiers(submit,[`prevent`])},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename session`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>name.value=$event),label:`Session name`,variant:`outlined`,maxlength:`120`,autofocus:``,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`])]),_:1}),createVNode(VCardActions,{class:`pa-6 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{height:`48`,variant:`text`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>emit(`close`))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,disabled:!canSave.value,loading:pending.value},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Rename `,-1)])]),_:1},8,[`disabled`,`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])}}};var _sfc_main$24={__name:`Vibe64CreateSessionButton`,props:{ariaLabel:{default:``,type:String},block:{default:false,type:Boolean},buttonClass:{default:``,type:[Array,Object,String]},iconOnly:{default:true,type:Boolean},label:{default:`New session`,type:String},size:{default:`small`,type:String},toolbar:{default:()=>({}),type:Object},variant:{default:`flat`,type:String}},setup(__props){const props=__props;const button=ref(null);const dialogOpen=ref(false);const createSessionRunning=computed(()=>props.toolbar.createSessionRunning===true);const creationUnavailable=computed(()=>!createSessionRunning.value&&props.toolbar.canCreateSession!==true);const buttonAriaLabel=computed(()=>{if(createSessionRunning.value)return`Creating session…`;const label=String(props.ariaLabel||props.label||`New session`).trim();return creationUnavailable.value&&buttonTitle.value?`${label}. ${buttonTitle.value}`:label});const buttonLabel=computed(()=>createSessionRunning.value?`Creating session…`:props.label);const buttonTitle=computed(()=>createSessionRunning.value?`Creating session…`:String(props.toolbar.createSessionTitle||props.ariaLabel||props.label||`New session`).trim());function requestCreateSession(){if(creationUnavailable.value||createSessionRunning.value)return;dialogOpen.value=true}function handleCreated(response={}){if(response?.sessionId)focusCreatedVibe64SessionTab(response.sessionId)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{ref_key:`button`,ref:button,"aria-busy":createSessionRunning.value?`true`:void 0,"aria-disabled":creationUnavailable.value?`true`:void 0,"aria-label":buttonAriaLabel.value,block:__props.block,class:normalizeClass([__props.buttonClass,{"studio-ai-sessions__create-button--unavailable":creationUnavailable.value}]),disabled:createSessionRunning.value,icon:__props.iconOnly?true:void 0,"prepend-icon":__props.iconOnly?void 0:unref(mdiPlus),size:__props.size,title:buttonTitle.value,variant:__props.variant,onClick:requestCreateSession},{default:withCtx(()=>[__props.iconOnly?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiPlus)},null,8,[`icon`])):createCommentVNode(``,true),!__props.iconOnly?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(buttonLabel.value),1)],64)):createCommentVNode(``,true)]),_:1},8,[`aria-busy`,`aria-disabled`,`aria-label`,`block`,`class`,`disabled`,`icon`,`prepend-icon`,`size`,`title`,`variant`]),createVNode(Vibe64AssistantSessionDialog_default,{modelValue:dialogOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>dialogOpen.value=$event),toolbar:__props.toolbar,onCreated:handleCreated},null,8,[`modelValue`,`toolbar`])],64)}}};var Vibe64CreateSessionButton_default=_plugin_vue_export_helper_default(_sfc_main$24,[[`__scopeId`,`data-v-63a40b7b`]]);var VIBE64_SESSION_TOOLTIP_KEY=Symbol(`vibe64-session-tooltip`);function createVibe64SessionTooltipState(){const suppressedSessionId=ref(``);function resumeHover(){suppressedSessionId.value=``}function trackPointer(event){if(!suppressedSessionId.value)return;if((event.target.closest?.(`[data-vibe64-session-id]`))?.dataset.vibe64SessionId!==suppressedSessionId.value)resumeHover()}return{suppressedSessionId,resumeHover,trackPointer}}var DEFAULT_VISIBLE_SESSION_LIMIT=3;function visibleVibe64ToolbarSessions({limit=3,selectedSessionId=``,sessions=[]}={}){const items=Array.isArray(sessions)?sessions:[];const boundedLimit=Math.max(0,Number(limit||0));if(boundedLimit<1||items.length<=boundedLimit)return items;const selectedId=String(selectedSessionId||``).trim();const selectedIndex=items.findIndex(session=>session?.sessionId===selectedId);if(selectedIndex<0||selectedIndex<boundedLimit)return items.slice(0,boundedLimit);return[...items.slice(0,Math.max(0,boundedLimit-1)),items[selectedIndex]]}var SESSION_HEADER_ACTION_PRIORITY=Object.freeze([`temporary-ai`,`renew`,`pin`,`pull-request`,`prepare-workspace`]);function splitVibe64SessionHeaderActions(available=[],slots=Infinity){const ordered=SESSION_HEADER_ACTION_PRIORITY.filter(id=>available.includes(id));const count=Math.max(0,Math.floor(Number.isNaN(Number(slots))?0:Number(slots)));return{inline:ordered.slice(0,count),overflow:ordered.slice(count)}}function vibe64SessionNameStripWidth(elements=[],maxChipWidth=Infinity){return[...elements||[]].reduce((total,element)=>{if(!element.classList?.contains(`studio-ai-sessions__tab`))return total+element.offsetWidth+6;const label=element.querySelector(`.studio-ai-sessions__tab-label`);const natural=element.offsetWidth-(label?.clientWidth||0)+(label?.scrollWidth||0);return total+Math.min(natural,maxChipWidth)+6},0)}var _hoisted_1$21={class:`studio-ai-sessions__tabs`};var _hoisted_2$15={class:`studio-ai-sessions__tab-main`};var _hoisted_3$14={class:`studio-ai-sessions__tab-label`};var _hoisted_4$10={key:0,class:`studio-ai-sessions__tab-close-slot`};var _hoisted_5$8={class:`studio-ai-sessions__info`};var _hoisted_6$5={class:`studio-ai-sessions__info-facts`};var _hoisted_7$4={role:`status`};var _hoisted_8$4={class:`studio-ai-sessions__archive-detail`};var _hoisted_9$3={key:0};var _sfc_main$23={__name:`Vibe64SessionToolbar`,props:{active:{default:true,type:Boolean},archive:{default:()=>({}),type:Object},selectedSessionId:{default:``,type:String},selectionArchived:{default:false,type:Boolean},toolbar:{default:()=>({}),type:Object},compact:{default:false,type:Boolean},createAttention:{default:false,type:Boolean},createTeleportTarget:{default:``,type:String},createVisible:{default:true,type:Boolean},maxVisibleSessions:{default:3,type:Number},showRepositoryProblem:{default:null,type:Function}},emits:[`select-session`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const infoSessionId=ref(``);const renamingSession=ref(null);const renamingSessionsApiPath=ref(``);const sessionTooltip=inject(VIBE64_SESSION_TOOLTIP_KEY);const infoId=useId();const createdAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`});function renameSession(session){const sessionsApiPath=props.toolbar.sessionsApiPath;if(!sessionsApiPath)return;renamingSessionsApiPath.value=sessionsApiPath;infoSessionId.value=``;sessionTooltip.suppressedSessionId.value=session.sessionId;renamingSession.value={...session}}function showProblemNotice(session){infoSessionId.value=``;sessionTooltip.suppressedSessionId.value=session.sessionId;props.showRepositoryProblem()}function setSessionInfo(sessionId,visible){if(visible&&!props.active)return;if(visible||infoSessionId.value===sessionId)infoSessionId.value=visible?sessionId:``}watch(()=>props.toolbar.sessionsApiPath,()=>{renamingSession.value=null});watch(()=>props.active,active=>{if(!active)infoSessionId.value=``},{flush:`sync`});function sessionInfoFacts(sessionItem){const selection=sessionItem.assistantSelection||{};const assistant=VIBE64_AGENT_PROVIDERS.find(provider=>provider.id===selection.engineId);const details=vibe64SessionInfoFacts(sessionItem).filter(fact=>[`session`,`branch`,`created-at`].includes(fact.key)).map(fact=>{const createdAt=fact.key===`created-at`?Date.parse(fact.value):NaN;return{...fact,value:Number.isFinite(createdAt)?createdAtFormatter.format(createdAt):fact.copyValue}});return[{key:`status`,label:`Status`,value:sessionItem.agentThinking?`Working`:vibe64SessionStatusLabel(sessionItem.status)},{key:`assistant`,label:`Assistant`,value:assistant?.label||selection.engineId},{key:`model`,label:`Model`,value:selection.modelId},{key:`saved-work`,label:`Work`,value:repositoryWorkStateLabel(sessionItem)},{key:`work-problem`,label:`Why`,value:repositoryWorkStateProblem(sessionItem)?.message},{key:`work-next`,label:`Next`,value:repositoryWorkStateProblem(sessionItem)?.nextStep},...details].filter(fact=>fact.value)}function selectSession(sessionId=``){sessionTooltip.suppressedSessionId.value=sessionId;infoSessionId.value=``;emit(`select-session`,sessionId);props.toolbar.selectSession?.(sessionId)}function sessionTabLabel(sessionItem={}){return vibe64SessionDisplayTitle(sessionItem)}function sessionTabAriaLabel(sessionItem={}){if(sessionItem.archiving)return`${sessionTabLabel(sessionItem)}. Inactive. Archiving session.`;const work=repositoryWorkStateDescription(sessionItem);return`${sessionTabLabel(sessionItem)}. ${work}${work.endsWith(`.`)?``:`.`}`}const allSessions=computed(()=>Array.isArray(props.toolbar.sessions)?props.toolbar.sessions:[]);const archiveNow=ref(Date.now());const hasClosingSessions=computed(()=>props.active&&allSessions.value.some(session=>session.archiving));onMounted(()=>{watch(hasClosingSessions,(running,_previous,onCleanup)=>{archiveNow.value=Date.now();if(!running)return;const timer=setInterval(()=>{archiveNow.value=Date.now()},1e3);onCleanup(()=>clearInterval(timer))},{immediate:true})});const closingSessions=computed(()=>allSessions.value.filter(session=>session.archiving).map(session=>{const startedAt=Date.parse(session.archiveStartedAt||``);const seconds=Number.isFinite(startedAt)?Math.max(0,Math.floor((archiveNow.value-startedAt)/1e3)):null;return{sessionId:session.sessionId,title:sessionTabLabel(session),stage:{stopping:`Stopping preview, AI and tools (1/3)`,resources:`Archiving resources (2/3)`,source:`Archiving workspace and history (3/3)`}[session.archiveOperation?.phase]||`Waiting for the server to begin`,elapsed:seconds===null?``:`${Math.floor(seconds/60)}m ${seconds%60}s elapsed. `,slow:seconds!==null&&seconds>=60}}));const sessionLimit=computed(()=>Math.max(0,Number(props.maxVisibleSessions||0)));const createSessionButtonClass=computed(()=>[`studio-ai-sessions__create-button`,{"studio-ai-sessions__create-button--attention":props.createAttention}]);const visibleSessions=computed(()=>{return visibleVibe64ToolbarSessions({limit:sessionLimit.value,selectedSessionId:props.selectedSessionId,sessions:allSessions.value})});return(_ctx,_cache)=>{return withDirectives((openBlock(),createElementBlock(`div`,{class:normalizeClass([`studio-ai-sessions__toolbar`,{"studio-ai-sessions__toolbar--compact":__props.compact}])},[createBaseVNode(`div`,_hoisted_1$21,[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSessions.value,sessionItem=>{return openBlock(),createBlock(VChip,{key:sessionItem.sessionId,class:normalizeClass([`studio-ai-sessions__tab`,{"studio-ai-sessions__tab--active":sessionItem.sessionId===__props.selectedSessionId,"studio-ai-sessions__tab--thinking":!sessionItem.archiving&&sessionItem.agentThinking,"studio-ai-sessions__tab--archiving":sessionItem.archiving}]),size:__props.compact?`small`:`large`,"aria-label":sessionTabAriaLabel(sessionItem),disabled:sessionItem.archiving,"data-vibe64-session-id":sessionItem.sessionId,variant:`flat`,onClick:$event=>selectSession(sessionItem.sessionId,$event),onFocusin:_cache[0]||(_cache[0]=$event=>__props.active&&$event.target.matches(`:focus-visible`)&&unref(sessionTooltip).resumeHover())},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_2$15,[createBaseVNode(`span`,{class:normalizeClass([`studio-ai-sessions__status-dot`,`studio-ai-sessions__status-dot--${sessionItem.status}`])},null,2),createBaseVNode(`span`,_hoisted_3$14,toDisplayString(sessionItem.archiving?`${sessionTabLabel(sessionItem)} · Archiving…`:sessionTabLabel(sessionItem)),1),createVNode(VIcon,{class:normalizeClass([`studio-ai-sessions__repository-state studio-ai-sessions__repository-state--desktop`,[`studio-ai-sessions__repository-state--${unref(repositoryWorkState)(sessionItem)}`,{"studio-ai-sessions__repository-state--provisional":unref(repositoryWorkStateProvisional)(sessionItem)}]]),icon:unref(repositoryWorkStateIcon)(sessionItem),size:`14`,title:unref(repositoryWorkStateDescription)(sessionItem)},null,8,[`class`,`icon`,`title`]),createVNode(VBtn,{class:`studio-ai-sessions__tab-info`,"aria-label":`Session info: ${sessionTabLabel(sessionItem)}`,"aria-expanded":infoSessionId.value===sessionItem.sessionId,"aria-describedby":`${unref(infoId)}-${sessionItem.sessionId}`,icon:unref(mdiInformationOutline),size:`x-small`,variant:`text`,onClick:withModifiers($event=>setSessionInfo(sessionItem.sessionId,infoSessionId.value!==sessionItem.sessionId),[`stop`])},null,8,[`aria-label`,`aria-expanded`,`aria-describedby`,`icon`,`onClick`])]),sessionItem.sessionId===__props.selectedSessionId?(openBlock(),createElementBlock(`span`,_hoisted_4$10,[createVNode(VBtn,{class:`studio-ai-sessions__tab-archive`,density:`comfortable`,disabled:__props.selectionArchived||__props.archive.command.isRunning||sessionItem.pinnedSessionId===sessionItem.sessionId,icon:unref(mdiArchiveOutline),size:`small`,title:sessionItem.pinnedSessionId===sessionItem.sessionId?`Unpin this session before archiving it`:`Archive session`,variant:`text`,"aria-label":`Archive session`,onClick:withModifiers(__props.archive.request,[`stop`])},null,8,[`disabled`,`icon`,`title`,`onClick`])])):createCommentVNode(``,true),createVNode(VTooltip,{id:`${unref(infoId)}-${sessionItem.sessionId}`,activator:`parent`,"model-value":infoSessionId.value===sessionItem.sessionId,disabled:!__props.active,"open-delay":1e3,"close-delay":150,"open-on-click":false,"open-on-focus":``,interactive:``,color:`surface-variant`,location:`bottom`,"max-width":320,"onUpdate:modelValue":$event=>(!$event||unref(sessionTooltip).suppressedSessionId.value!==sessionItem.sessionId)&&setSessionInfo(sessionItem.sessionId,$event)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5$8,[createBaseVNode(`strong`,null,toDisplayString(sessionTabLabel(sessionItem)),1),createBaseVNode(`dl`,_hoisted_6$5,[(openBlock(true),createElementBlock(Fragment,null,renderList(sessionInfoFacts(sessionItem),fact=>{return openBlock(),createElementBlock(Fragment,{key:fact.key},[createBaseVNode(`dt`,null,toDisplayString(fact.label),1),createBaseVNode(`dd`,null,toDisplayString(fact.value),1)],64)}),128))]),unref(repositoryWorkStateProblem)(sessionItem)&&sessionItem.sessionId===__props.selectedSessionId&&__props.showRepositoryProblem?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,"prepend-icon":unref(mdiAlertCircleOutline),onClick:withModifiers($event=>showProblemNotice(sessionItem),[`stop`])},{default:withCtx(()=>[createTextVNode(` Show `+toDisplayString(unref(repositoryWorkStateProblem)(sessionItem).operation===`update`?`Update`:`Save`)+` notice `,1)]),_:2},1032,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.toolbar.sessionsApiPath?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,height:`48`,"prepend-icon":unref(mdiPencilOutline),disabled:sessionItem.archiving||__props.selectionArchived,onClick:withModifiers($event=>renameSession(sessionItem),[`stop`])},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Rename session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`,`onClick`])):createCommentVNode(``,true)])]),_:2},1032,[`id`,`model-value`,`disabled`,`onUpdate:modelValue`])]),_:2},1032,[`class`,`size`,`aria-label`,`disabled`,`data-vibe64-session-id`,`onClick`])}),128)),__props.createVisible&&(sessionLimit.value<1||allSessions.value.length<sessionLimit.value)?(openBlock(),createBlock(Teleport,{key:0,disabled:!__props.createTeleportTarget,to:__props.createTeleportTarget||`body`,defer:``},[createVNode(Vibe64CreateSessionButton_default,{"aria-label":`New session`,"button-class":createSessionButtonClass.value,"icon-only":``,toolbar:__props.toolbar},null,8,[`button-class`,`toolbar`])],8,[`disabled`,`to`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`after-sessions`,{},void 0,true)]),(openBlock(true),createElementBlock(Fragment,null,renderList(closingSessions.value,closing=>{return openBlock(),createElementBlock(`div`,{key:closing.sessionId,class:`studio-ai-sessions__archive-progress`},[createVNode(VProgressCircular,{indeterminate:``,size:`16`,width:`2`,"aria-hidden":`true`}),createBaseVNode(`div`,null,[createBaseVNode(`div`,_hoisted_7$4,`Closing `+toDisplayString(closing.title)+` — `+toDisplayString(closing.stage),1),createBaseVNode(`div`,_hoisted_8$4,[createTextVNode(toDisplayString(closing.elapsed)+`You can keep working in another session. `,1),closing.slow?(openBlock(),createElementBlock(`span`,_hoisted_9$3,`Completion has not been confirmed; the last reported stage is shown above.`)):createCommentVNode(``,true)])])])}),128)),renamingSession.value?(openBlock(),createBlock(_sfc_main$25,{key:0,session:renamingSession.value,"sessions-api-path":renamingSessionsApiPath.value,onClose:_cache[1]||(_cache[1]=$event=>renamingSession.value=null),onRenamed:_cache[2]||(_cache[2]=$event=>__props.toolbar.refreshSessionData?.({includeList:true,reason:`session-renamed`}))},null,8,[`session`,`sessions-api-path`])):createCommentVNode(``,true)],2)),[[vShow,!__props.createTeleportTarget||allSessions.value.length>0]])}}};var Vibe64SessionToolbar_default=_plugin_vue_export_helper_default(_sfc_main$23,[[`__scopeId`,`data-v-ef96653e`]]);var _hoisted_1$20={key:2,class:`studio-autopilot__save-symbol`,"aria-hidden":`true`};var _hoisted_2$14={class:`studio-autopilot__header-actions`};var SESSION_NAME_MAX_WIDTH=240;var _sfc_main$22={__name:`Vibe64AutopilotSessionHeader`,props:{view:{type:Object,required:true}},setup(__props){const{checkTemporaryAiUpdate,connectedUpdateActionVisible,createPullRequestOpen,emit,githubProject,mainChatApprovals,props,repositoryOperationActive,requestSaveWork,requestSessionRenewal,retryWorkspaceSetup,revealApprovals,saveConnectedFirst,saveWorkActivityLabel,saveWorkDisabled,saveWorkError,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkOperationActive,saveWorkRequiresUpdate,saveWorkSending,saveWorkTitle,saveWorkUnsaved,sessionId,sessionPullRequest,sessionPullRequestTarget,sessionToolbarVisible,showSaveWorkActivity,sourceOperationsSuspended,temporaryAiWorkspace,workspaceSetupActionVisible,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning}=__props.view;const sessionRenewalActionPresentation=computed(()=>props.sessionRenewal?.actionPresentation||props.sessionRenewal?.advisoryPresentation||{attention:false,color:void 0,label:`Renew session`,reason:`Renew this session with a reviewed handover.`});const sessionActionsTrigger=ref(null);const temporaryAiHasUnreadMessages=computed(()=>temporaryAiWorkspace.value?.hasUnreadMessages===true);const sessionHeader=ref(null);const headerActionRoom=ref(Infinity);function measureHeaderActionRoom(){const header=sessionHeader.value;if(!header)return;const style=getComputedStyle(header);const names=vibe64SessionNameStripWidth(header.querySelector(`.studio-ai-sessions__tabs`)?.children,SESSION_NAME_MAX_WIDTH);const fixed=[...header.querySelectorAll(`.studio-autopilot__save-work, .studio-autopilot__header-fixed`)].reduce((total,element)=>total+element.offsetWidth+2,0);const actionSize=(parseFloat(style.getPropertyValue(`--session-action-size`))||36)+2;const room=header.clientWidth-parseFloat(style.paddingLeft)-parseFloat(style.paddingRight)-names-fixed-8;headerActionRoom.value=Math.floor(room/actionSize)}watch(sessionHeader,(header,_previous,onCleanup)=>{if(!header||typeof ResizeObserver===`undefined`)return;const observer=new ResizeObserver(()=>measureHeaderActionRoom());observer.observe(header);const toolbar=header.querySelector(`.studio-ai-sessions__tabs`);if(toolbar)observer.observe(toolbar);onCleanup(()=>observer.disconnect())});const headerActionsAvailable=computed(()=>[`temporary-ai`,props.sessionRenewal?.visible&&`renew`,props.session?.sourceReady&&!props.sessionSelectionArchived&&`pin`,githubProject.value&&`pull-request`,workspaceSetupActionVisible.value&&`prepare-workspace`].filter(Boolean));const headerActions=computed(()=>{const available=headerActionsAvailable.value;const room=headerActionRoom.value;const slots=room>=available.length&&!connectedUpdateActionVisible.value?room:room-1;return splitVibe64SessionHeaderActions(available,slots)});const sessionActionsMenuVisible=computed(()=>headerActions.value.overflow.length>0||connectedUpdateActionVisible.value);const sessionActionsAttention=computed(()=>headerActions.value.overflow.includes(`renew`)&&sessionRenewalActionPresentation.value.attention===true||headerActions.value.overflow.includes(`temporary-ai`)&&temporaryAiHasUnreadMessages.value);const sessionActionsLabel=computed(()=>[`Session actions`,headerActions.value.overflow.includes(`renew`)&&sessionRenewalActionPresentation.value.attention?sessionRenewalActionPresentation.value.label:``,headerActions.value.overflow.includes(`temporary-ai`)&&temporaryAiHasUnreadMessages.value?`Unread temporary AI messages`:``].filter(Boolean).join(`: `));const sessionArchiveDisabled=computed(()=>Boolean(props.sessionSelectionArchived||props.sessionArchive?.command?.isRunning||workspaceSetupRunning.value||workspaceSetupRetrying.value));function showRepositoryProblem(){showSaveWorkActivity();emit(`chat-attention`)}function openTemporaryAi(){if(!sessionId.value||props.sessionSelectionArchived)return false;temporaryAiWorkspace.value?.showWorkspace?.();return true}const saveWorkChecking=ref(false);const saveWorkCheckAvailable=computed(()=>Boolean(saveWorkDisabled.value&&!saveWorkRequiresUpdate.value&&!saveWorkSending.value&&!repositoryOperationActive.value&&!sourceOperationsSuspended.value&&!props.sessionSelectionArchived&&typeof props.sessionToolbar?.refreshRepositoryState===`function`));const saveWorkHeaderHint=computed(()=>{if(saveConnectedFirst.value)return saveWorkTitle.value;const checkStatus=saveWorkChecking.value?`Checking for updates…`:saveWorkCheckAvailable.value?`${saveWorkTitle.value}. Click to check for updates.`:saveWorkTitle.value;const status=saveWorkError.value&&!saveWorkSending.value&&!saveWorkOperationActive.value?`${saveWorkActivityLabel.value} needs attention: ${saveWorkError.value}\n${checkStatus}`:checkStatus;const destination=props.workState?.destination;if(!destination)return status;if(saveWorkRequiresUpdate.value||saveWorkDisabled.value||saveWorkChecking.value)return`${status}\n${destination.repository}:${destination.branch}`;return`${destination.mode===`local_source`?`Local commit`:destination.mode===`github`?`Commit & push`:`Project version`} · ${destination.repository}:${destination.branch}\n${status}`});async function requestSessionSaveWork(){if(saveWorkChecking.value)return;if(saveWorkCheckAvailable.value){saveWorkChecking.value=true;try{await props.sessionToolbar.refreshRepositoryState(sessionId.value)}finally{saveWorkChecking.value=false}return}const repair=temporaryAiWorkspace.value?.updateRepairTask;if(saveWorkRequiresUpdate.value&&repair){temporaryAiWorkspace.value?.selectTask?.(repair.id);return checkTemporaryAiUpdate(repair)}return requestSaveWork()}watch(()=>[(props.sessionToolbar?.sessions||[]).map(session=>session?.sessionName||session?.sessionId).join(`
9
9
  `),headerActionsAvailable.value.join(),saveWorkHeaderVisible.value,mainChatApprovals.waitingCount].join(`|`),()=>nextTick(measureHeaderActionRoom));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`header`,{ref_key:`sessionHeader`,ref:sessionHeader,class:`studio-autopilot__session-header`},[unref(sessionToolbarVisible)?(openBlock(),createBlock(Vibe64SessionToolbar_default,{key:0,active:unref(props).active,archive:unref(props).sessionArchive,compact:``,"create-visible":unref(props).sessionToolbar.createSessionVisible===true,"create-teleport-target":unref(props).createSessionTeleportTarget,"max-visible-sessions":3,"selected-session-id":unref(sessionId),"selection-archived":sessionArchiveDisabled.value,"show-repository-problem":showRepositoryProblem,toolbar:unref(props).sessionToolbar},null,8,[`active`,`archive`,`create-visible`,`create-teleport-target`,`selected-session-id`,`selection-archived`,`toolbar`])):createCommentVNode(``,true),unref(saveWorkHeaderVisible)?(openBlock(),createBlock(VTooltip,{key:1,"model-value":saveWorkChecking.value,location:`bottom`,"open-on-click":false,"open-on-focus":false,"open-on-hover":false},{activator:withCtx(({props:checkingProps})=>[createVNode(VBtn,mergeProps(checkingProps,{"aria-busy":unref(saveWorkSending)||saveWorkChecking.value?`true`:void 0,"aria-label":saveWorkChecking.value?`Checking repository status`:saveWorkCheckAvailable.value?`Check for updates`:unref(saveWorkHeaderAriaLabel),class:[`studio-autopilot__save-work`,{"studio-autopilot__save-work--check":saveWorkCheckAvailable.value}],"data-vibe64-guide":`save`,color:unref(saveWorkRequiresUpdate)?`warning`:unref(saveWorkUnsaved)?`error`:void 0,disabled:saveWorkChecking.value||unref(saveWorkDisabled)&&!saveWorkCheckAvailable.value||unref(temporaryAiWorkspace)?.updateRepairTask?.busy,height:`var(--session-action-size, 36px)`,icon:``,title:saveWorkHeaderHint.value,type:`button`,variant:`text`,width:`var(--session-action-size, 36px)`,onClick:requestSessionSaveWork}),{default:withCtx(()=>[unref(saveConnectedFirst)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiSourceBranch)},null,8,[`icon`])):unref(saveWorkRequiresUpdate)?(openBlock(),createBlock(VIcon,{key:1,icon:unref(mdiSourceCommit)},null,8,[`icon`])):unref(props).workState?.destination?.mode===`github`?(openBlock(),createElementBlock(`span`,_hoisted_1$20,[createVNode(VIcon,{icon:unref(mdiContentSaveOutline),size:`18`,class:`studio-autopilot__save-symbol-disk`},null,8,[`icon`]),createVNode(VIcon,{icon:unref(mdiSourceCommit),size:`16`,class:`studio-autopilot__save-symbol-commit`},null,8,[`icon`])])):(openBlock(),createBlock(VIcon,{key:3,icon:unref(mdiContentSaveOutline)},null,8,[`icon`]))]),_:1},16,[`aria-busy`,`aria-label`,`class`,`color`,`disabled`,`title`])]),default:withCtx(()=>[_cache[4]||(_cache[4]=createBaseVNode(`span`,{role:`status`},`Checking…`,-1))]),_:1},8,[`model-value`])):createCommentVNode(``,true),unref(mainChatApprovals).isOwner&&unref(mainChatApprovals).waitingCount?(openBlock(),createBlock(VChip,{key:2,class:`studio-autopilot__approvals-chip studio-autopilot__header-fixed`,color:`secondary`,variant:`tonal`,size:`small`,"prepend-icon":unref(mdiClockOutline),"aria-label":`${unref(mainChatApprovals).waitingCount} ${unref(mainChatApprovals).waitingCount===1?`message`:`messages`} waiting for your approval`,onClick:unref(revealApprovals)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(mainChatApprovals).waitingCount)+` waiting `,1)]),_:1},8,[`prepend-icon`,`aria-label`,`onClick`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_2$14,[headerActions.value.inline.includes(`temporary-ai`)?(openBlock(),createBlock(VBadge,{key:0,color:`primary`,dot:``,"model-value":temporaryAiHasUnreadMessages.value,"offset-x":`4`,"offset-y":`4`},{default:withCtx(()=>[createVNode(VBtn,{"aria-label":temporaryAiHasUnreadMessages.value?`Open temporary AI: unread messages`:`Open temporary AI`,class:`studio-autopilot__header-action`,"data-vibe64-temporary-ai-action":``,"data-vibe64-header-action":`temporary-ai`,disabled:!unref(sessionId)||unref(props).sessionSelectionArchived,height:`var(--session-action-size, 36px)`,icon:unref(mdiIncognito),title:temporaryAiHasUnreadMessages.value?`New messages in Temporary AI`:`Open a temporary AI conversation`,type:`button`,variant:`text`,width:`var(--session-action-size, 36px)`,onClick:openTemporaryAi},null,8,[`aria-label`,`disabled`,`icon`,`title`])]),_:1},8,[`model-value`])):createCommentVNode(``,true),headerActions.value.inline.includes(`renew`)?(openBlock(),createBlock(VBadge,{key:1,color:sessionRenewalActionPresentation.value.color||`primary`,dot:``,"model-value":sessionRenewalActionPresentation.value.attention===true,"offset-x":`4`,"offset-y":`4`},{default:withCtx(()=>[createVNode(VBtn,{"aria-label":sessionRenewalActionPresentation.value.label,class:`studio-autopilot__header-action`,"data-vibe64-session-renew-action":``,"data-vibe64-header-action":`renew`,height:`var(--session-action-size, 36px)`,icon:unref(mdiAutorenew),title:sessionRenewalActionPresentation.value.reason,type:`button`,variant:`text`,width:`var(--session-action-size, 36px)`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestSessionRenewal)($event.currentTarget))},null,8,[`aria-label`,`icon`,`title`])]),_:1},8,[`color`,`model-value`])):createCommentVNode(``,true),headerActions.value.inline.includes(`pin`)?(openBlock(),createBlock(_sfc_main$26,{"data-vibe64-header-action":`pin`,key:`${unref(readRefOrGetterValue)(unref(props).sessionsApiPath)}:${unref(sessionId)}`,session:unref(props).session,"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),refresh:unref(props).refreshSessionData},null,8,[`session`,`sessions-api-path`,`refresh`])):createCommentVNode(``,true),headerActions.value.inline.includes(`pull-request`)?(openBlock(),createBlock(VBtn,{key:3,"data-vibe64-header-action":`pull-request`,class:`studio-autopilot__header-action`,icon:unref(mdiSourcePull),height:`var(--session-action-size, 36px)`,width:`var(--session-action-size, 36px)`,variant:`text`,"aria-label":unref(sessionPullRequest)?.number?`View pull request`:`Create pull request`,title:unref(sessionPullRequest)?.number?`View pull request #${unref(sessionPullRequest).number}`:`Create pull request`,to:unref(sessionPullRequestTarget),disabled:!unref(sessionPullRequest)?.number&&unref(sourceOperationsSuspended),onClick:_cache[1]||(_cache[1]=$event=>!unref(sessionPullRequest)?.number&&(createPullRequestOpen.value=true))},null,8,[`icon`,`aria-label`,`title`,`to`,`disabled`])):createCommentVNode(``,true),headerActions.value.inline.includes(`prepare-workspace`)?(openBlock(),createBlock(VBtn,{key:4,"aria-label":`Prepare workspace`,class:`studio-autopilot__header-action`,"data-vibe64-prepare-workspace":``,"data-vibe64-header-action":`prepare-workspace`,disabled:unref(workspaceSetupRetryDisabled),height:`var(--session-action-size, 36px)`,icon:unref(mdiWrenchOutline),title:`Prepare workspace: run all declared setup steps again`,type:`button`,variant:`text`,width:`var(--session-action-size, 36px)`,onClick:unref(retryWorkspaceSetup)},null,8,[`disabled`,`icon`,`onClick`])):createCommentVNode(``,true),sessionActionsMenuVisible.value?(openBlock(),createBlock(VMenu,{key:5,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBadge,{color:sessionRenewalActionPresentation.value.attention&&sessionRenewalActionPresentation.value.color||`primary`,dot:``,"model-value":sessionActionsAttention.value,"offset-x":`4`,"offset-y":`4`},{default:withCtx(()=>[createVNode(VBtn,mergeProps({ref_key:`sessionActionsTrigger`,ref:sessionActionsTrigger},menuProps,{"aria-label":sessionActionsLabel.value,class:`studio-autopilot__header-action`,"data-vibe64-session-actions":``,height:`var(--session-action-size, 36px)`,icon:unref(mdiDotsVertical),title:`Session actions`,type:`button`,variant:`text`,width:`var(--session-action-size, 36px)`}),null,16,[`aria-label`,`icon`])]),_:2},1032,[`color`,`model-value`])]),default:withCtx(()=>[createVNode(VList,{"aria-label":`Session actions`,density:`compact`,"min-width":`17rem`},{default:withCtx(()=>[headerActions.value.overflow.includes(`temporary-ai`)?(openBlock(),createBlock(VListItem,{key:0,class:`studio-autopilot__session-action-item`,"data-vibe64-temporary-ai-action":``,disabled:!unref(sessionId)||unref(props).sessionSelectionArchived,subtitle:temporaryAiHasUnreadMessages.value?`New messages in Temporary AI`:`Open a separate short-lived conversation`,title:`Temporary AI`,onClick:openTemporaryAi},{prepend:withCtx(()=>[createVNode(VBadge,{color:`primary`,dot:``,"model-value":temporaryAiHasUnreadMessages.value},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiIncognito)},null,8,[`icon`])]),_:1},8,[`model-value`])]),_:1},8,[`disabled`,`subtitle`])):createCommentVNode(``,true),headerActions.value.overflow.includes(`renew`)?(openBlock(),createBlock(VListItem,{key:1,class:`studio-autopilot__session-action-item`,"data-vibe64-session-renew-action":``,"prepend-icon":unref(mdiAutorenew),subtitle:sessionRenewalActionPresentation.value.reason,title:sessionRenewalActionPresentation.value.label,onClick:_cache[2]||(_cache[2]=$event=>unref(requestSessionRenewal)(sessionActionsTrigger.value))},null,8,[`prepend-icon`,`subtitle`,`title`])):createCommentVNode(``,true),headerActions.value.overflow.includes(`pin`)?(openBlock(),createBlock(_sfc_main$26,{key:`${unref(readRefOrGetterValue)(unref(props).sessionsApiPath)}:${unref(sessionId)}:menu`,"list-item":``,session:unref(props).session,"sessions-api-path":unref(readRefOrGetterValue)(unref(props).sessionsApiPath),refresh:unref(props).refreshSessionData},null,8,[`session`,`sessions-api-path`,`refresh`])):createCommentVNode(``,true),headerActions.value.overflow.includes(`pull-request`)?(openBlock(),createBlock(VListItem,{key:3,"min-height":`48`,"prepend-icon":unref(mdiSourcePull),title:unref(sessionPullRequest)?.number?`View pull request`:`Create pull request`,subtitle:unref(sessionPullRequest)?.number?`PR #${unref(sessionPullRequest).number}`:`Propose this work for merging`,to:unref(sessionPullRequestTarget),disabled:!unref(sessionPullRequest)?.number&&unref(sourceOperationsSuspended),onClick:_cache[3]||(_cache[3]=$event=>!unref(sessionPullRequest)?.number&&(createPullRequestOpen.value=true))},null,8,[`prepend-icon`,`title`,`subtitle`,`to`,`disabled`])):createCommentVNode(``,true),headerActions.value.overflow.includes(`prepare-workspace`)?(openBlock(),createBlock(VListItem,{key:4,"data-vibe64-prepare-workspace":``,"min-height":`48`,disabled:unref(workspaceSetupRetryDisabled),"prepend-icon":unref(mdiWrenchOutline),subtitle:`Run all declared setup steps again`,title:`Prepare workspace`,onClick:unref(retryWorkspaceSetup)},null,8,[`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),unref(connectedUpdateActionVisible)?(openBlock(),createBlock(VListItem,{key:5,"data-vibe64-update-connected":``,"min-height":`48`,disabled:unref(workspaceSetupRetryDisabled),"prepend-icon":unref(mdiSourceBranchSync),subtitle:`Bring connected checkouts up to their branches, then prepare`,title:`Update connected repositories`,onClick:unref(retryWorkspaceSetup)},null,8,[`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true)])],512)}}};var Vibe64AutopilotSessionHeader_default=_plugin_vue_export_helper_default(_sfc_main$22,[[`__scopeId`,`data-v-a993eadb`]]);var RECENT_DECISION_MS=864e5;var APPROVAL_REASON=/^main-chat-approval-/u;function titleWithoutCount(title=``){return String(title).replace(/^\(\d+\) /u,``)}function useVibe64MainChatApprovals({active=true,projectSlug,projectLabel=projectSlug,sessionId,sessionsApiPath,onReview=null}={}){const feedback=useShellWebErrorRuntime();const slug=computed(()=>String(readRefOrGetterValue(projectSlug)||``));const id=computed(()=>String(readRefOrGetterValue(sessionId)||``));const apiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``));const enabled=computed(()=>readRefOrGetterValue(active)!==false&&Boolean(id.value&&apiPath.value));const path=computed(()=>enabled.value?vibe64SessionPath(apiPath.value,id.value,`/main-chat-approvals`):``);const resource=useEndpointResource({enabled,fallbackLoadError:`Messages waiting for approval could not be loaded.`,path,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,slug.value),id.value,`main-chat-approvals`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:true},readMethod:`GET`,realtime:{events:[VIBE64_SESSION_CHANGED_EVENT],matches:({payload={}}={})=>payload.sessionId===id.value&&APPROVAL_REASON.test(String(payload.reason||``))},refreshOnPull:true,requestRecoveryLabel:`Messages for approval`});const view=computed(()=>resource.data.value?.ok===false?null:resource.data.value||null);const loaded=computed(()=>Boolean(view.value));const isOwner=computed(()=>view.value?.owner!==false);const lessonTeamAi=computed(()=>loaded.value&&!isOwner.value&&view.value?.practice===true);const memberMode=computed(()=>loaded.value&&!isOwner.value&&!lessonTeamAi.value);const ownerName=computed(()=>view.value?.ownerName||`the owner`);const viewerId=computed(()=>view.value?.viewer?.id||``);const entries=computed(()=>Array.isArray(view.value?.entries)?view.value.entries:[]);const open=computed(()=>entries.value.filter(entry=>[`waiting`,`sending`].includes(entry.status)));const waitingCount=computed(()=>entries.value.filter(entry=>entry.status===`waiting`).length);const decided=computed(()=>entries.value.filter(entry=>![`waiting`,`sending`].includes(entry.status)).reverse());const now=ref(Date.now());const clock=setInterval(()=>{now.value=Date.now()},6e4);const recentDecided=computed(()=>decided.value.filter(entry=>now.value-Date.parse(entry.decidedAt||entry.updatedAt)<RECENT_DECISION_MS));const earlierDecided=computed(()=>decided.value.slice(recentDecided.value.length));const pending=reactive({});const sending=ref(false);function own(entry){return Boolean(viewerId.value)&&entry?.sender?.id===viewerId.value}async function request(suffix,body,method=`POST`,fallback=`The message could not be changed.`){const result=await getHttpWebClient().request(vibe64SessionPath(apiPath.value,id.value,suffix),{method,body});if(result?.ok===false)throw vibe64ApiError(result,fallback);resource.reload();return result}async function act(entry,action,operation){if(pending[entry.id])return false;pending[entry.id]=action;try{await operation();return true}catch(error){feedback.report({source:`vibe64.main-chat-approvals.${action}`,intent:`action-feedback`,severity:`error`,channel:`snackbar`,message:error.message});return false}finally{delete pending[entry.id]}}async function send(message){if(sending.value||!String(message||``).trim())return false;sending.value=true;try{await request(`/agent-message`,{message,messageId:globalThis.crypto.randomUUID()},`POST`,`The message could not be sent for approval.`);return true}catch(error){feedback.report({source:`vibe64.main-chat-approvals.send`,intent:`action-feedback`,severity:`error`,channel:`snackbar`,message:error.message});return false}finally{sending.value=false}}const route=(entry,suffix=``)=>`/main-chat-approvals/${encodeURIComponent(entry.id)}${suffix}`;const edit=(entry,text)=>act(entry,`edit`,()=>request(route(entry),{text,expectedRevision:entry.revision},`PATCH`));const withdraw=entry=>act(entry,`withdraw`,()=>request(route(entry,`/withdraw`),{expectedRevision:entry.revision}));const decline=(entry,note=``)=>act(entry,`decline`,()=>request(route(entry,`/decline`),{expectedRevision:entry.revision,...note.trim()?{note}:{}}));const approve=(entry,text=``)=>act(entry,`approve`,()=>request(route(entry,`/approve`),{expectedRevision:entry.revision,...text.trim()?{text}:{}},`POST`,`The message could not be sent.`));let seen=null;watch(entries,next=>{const statuses=new Map(next.map(entry=>[entry.id,entry.status]));if(seen)for(const entry of next){const before=seen.get(entry.id);if(!own(entry)||![`waiting`,`sending`].includes(before)||before===entry.status)continue;const by=entry.decidedBy?.displayName||ownerName.value;if(entry.status===`sent`)feedback.report({source:`vibe64.main-chat-approvals.decided`,intent:`action-feedback`,severity:`success`,channel:`snackbar`,message:`${by} approved and sent your message`,dedupeKey:`approval:${entry.id}:sent`});else if(entry.status===`declined`)feedback.report({source:`vibe64.main-chat-approvals.decided`,intent:`action-feedback`,severity:`info`,channel:`snackbar`,message:`${by} declined your message`,dedupeKey:`approval:${entry.id}:declined`})}if(loaded.value)seen=statuses},{immediate:true});useRealtimeEvent({enabled:computed(()=>enabled.value&&loaded.value&&isOwner.value),event:VIBE64_SESSION_SUMMARY_CHANGED_EVENT,matches:({payload={}}={})=>payload.reason===`main-chat-approval-queued`&&payload.projectSlug===slug.value,onEvent:({payload={}}={})=>feedback.report({source:`vibe64.main-chat-approvals.queued`,intent:`action-feedback`,severity:`info`,channel:`snackbar`,message:`${payload.approvalSender||`A team member`} sent a message for your approval in ${readRefOrGetterValue(projectLabel)||slug.value}`,dedupeKey:`approval:${payload.sessionId}:${payload.approvalId||``}`,...typeof onReview===`function`?{action:{label:`Review`,handler:()=>onReview(payload.sessionId)}}:{}})});watch([waitingCount,isOwner,loaded],([count,owner,ready])=>{if(typeof document===`undefined`)return;const title=titleWithoutCount(document.title);document.title=ready&&owner&&count>0?`(${count}) ${title}`:title},{immediate:true});onScopeDispose(()=>{clearInterval(clock);if(typeof document!==`undefined`)document.title=titleWithoutCount(document.title)});return{loaded,isOwner,memberMode,lessonTeamAi,ownerName,viewerId,entries,open,waitingCount,recentDecided,earlierDecided,pending,sending,own,send,edit,withdraw,decline,approve,loadError:resource.loadError}}function normalizedGitActorText(value=``){return String(value||``).trim()}function sessionUsesGithub(session={}){const metadata=session?.metadata&&typeof session.metadata===`object`&&!Array.isArray(session.metadata)?session.metadata:{};const remoteUrl=normalizedGitActorText(metadata.source_remote_url||metadata.github_repository||session.sourceRemoteUrl||session.githubRepository);if(!remoteUrl)return false;if(normalizedGitActorText(metadata.github_repository||session.githubRepository))return true;try{return new URL(remoteUrl).hostname.toLowerCase()===`github.com`}catch{return/^(?:git@|ssh:\/\/git@)github\.com(?::|\/)/iu.test(remoteUrl)}}function sessionGithubCommandActor(session={}){const metadata=session?.metadata&&typeof session.metadata===`object`&&!Array.isArray(session.metadata)?session.metadata:{};const scope=normalizedGitActorText(metadata.session_git_command_actor_scope);const userKey=normalizedGitActorText(metadata.session_git_command_actor_user_key);const account=scope===`local`?`local GitHub`:userKey;const available=sessionUsesGithub(session);if(!account)return{active:false,available,displayLabel:`not selected`,label:`GitHub: not selected`,title:`No GitHub command actor is selected for this session yet.`};return{active:true,available,displayLabel:account,label:`GitHub: ${account}`,title:`GitHub commands for this session run as ${account}.`}}function resolvedModuleComponent(moduleValue){return moduleValue?.default||moduleValue}function defineVibe64AsyncComponent({label=`Vibe64 module`,loader,minHeight=``}={}){if(typeof loader!==`function`)throw new TypeError(`defineVibe64AsyncComponent requires a loader function.`);return defineComponent({name:`Vibe64AsyncComponent`,inheritAttrs:false,setup(_props,context){const component=shallowRef(null);const error=ref(null);const loading=ref(false);const asyncModuleRecoveryRuntime=useShellAsyncModuleRecoveryRuntime();let disposed=false;let requestId=0;async function load(){const activeRequestId=requestId+1;requestId=activeRequestId;loading.value=true;error.value=null;try{const loaded=resolvedModuleComponent(await loader());if(disposed||activeRequestId!==requestId)return false;component.value=markRaw(loaded);return true}catch(loadError){if(disposed||activeRequestId!==requestId)return false;component.value=null;error.value=loadError;asyncModuleRecoveryRuntime?.notify?.(loadError,{label,stale:isDynamicImportError(loadError)});return false}finally{if(!disposed&&activeRequestId===requestId)loading.value=false}}onBeforeUnmount(()=>{disposed=true;requestId+=1});load();return()=>{if(component.value)return h(component.value,context.attrs,context.slots);const errorValue=error.value;const stale=isDynamicImportError(errorValue);return h(Vibe64AsyncModuleState_default,{class:context.attrs.class,style:context.attrs.style,label,loading:loading.value,message:errorValue?dynamicImportErrorMessage(errorValue,{label,stale}):`Loading ${label}.`,minHeight,stale,onReload:()=>asyncModuleRecoveryRuntime?.reload?.(),onRetry:load})}}})}var VIBE64_WELCOME_NAME_KEY=Symbol(`vibe64-welcome-name`);function useVibe64AgentTurnState(props,{assistantCanRouteChat,projectSlug,reportActivity,sessionId}){const activeAgentTurn=computed(()=>{const turn=props.session?.agentSession?.turn;return turn&&typeof turn===`object`&&!Array.isArray(turn)?turn:{}});const agentActive=computed(()=>activeAgentTurn.value.active===true);watch(agentActive,(active,was)=>{if(was&&!active)reportActivity(`agent-finished`,{projectSlug:projectSlug.value,sessionId:sessionId.value})});const agentObservationLost=computed(()=>activeAgentTurn.value.status===`observation_lost`);const agentWorking=computed(()=>agentActive.value&&!agentObservationLost.value);const composerConnectionStatus=computed(()=>!agentActive.value&&unref(assistantCanRouteChat)===true&&[`restricted`,`unavailable`,`failed`].includes(props.agentConnectionStatus)?`connected`:props.agentConnectionStatus);const agentNativeTurnReady=computed(()=>Boolean(agentActive.value&&!agentObservationLost.value&&normalizeText$1(activeAgentTurn.value.id)&&normalizeText$1(activeAgentTurn.value.state)===`active`&&props.agentConnectionStatus===`connected`));const agentSteerable=computed(()=>agentNativeTurnReady.value&&props.conversationRuntime?.steerable.value===true);const assistantConnectionReady=computed(()=>composerConnectionStatus.value===`connected`);const reasoningActive=computed(()=>assistantConnectionReady.value&&agentActive.value&&!agentObservationLost.value&&activeAgentTurn.value.phase===`reasoning`);const assistantAccountUnavailable=computed(()=>composerConnectionStatus.value===`unavailable`);return{activeAgentTurn,agentActive,agentNativeTurnReady,agentObservationLost,agentSteerable,agentWorking,assistantAccountMessage:computed(()=>props.agentConnectionError||`The selected AI account or model is unavailable. Check AI Accounts or choose another model.`),assistantAccountUnavailable,assistantConnectionReady,composerConnectionStatus,reasoningActive}}var EMPTY_CONVERSATION_WELCOME=`Hi! 👋 I’m excited to build something with you. Tell me what you have in mind—even a half-formed idea is perfect. We’ll shape it together.`;var EXISTING_PROJECT_CONVERSATION_WELCOME=`Hi! 👋 This is an existing project. Tell me what you’d like to change, check, or improve, and we’ll work through it together.`;var RENEWED_SESSION_CONVERSATION_WELCOME=`Hi! 👋 I’ve received the handover from the previous session and I’m ready to continue. Tell me what you’d like to do next.`;function emptyConversationWelcomeText({existingProject=false,preferredName=``,renewedSession=false}={}){const message=renewedSession?RENEWED_SESSION_CONVERSATION_WELCOME:existingProject?EXISTING_PROJECT_CONVERSATION_WELCOME:EMPTY_CONVERSATION_WELCOME;const name=normalizeText$1(preferredName);return name?message.replace(`Hi!`,`Hi ${name}!`):message}function useVibe64AutopilotChatPane(props,{composerSending,messageDelivery,preferredName,routingRequest,sessionId,workspaceSetupStatus}){const chatTurns=computed(()=>{if(!messageDelivery.value||props.conversationLog?.initializing)return[];return chatTurnsWithRouting(messageDelivery.value.turns(Array.isArray(props.conversationLog?.turns)?props.conversationLog.turns:[]),routingRequest.value,composerSending.value)});const emptyConversationWelcome=computed(()=>sessionId.value&&!props.conversationLog?.loading&&!props.conversationLog?.error&&!chatTurns.value.length?emptyConversationWelcomeText({existingProject:workspaceSetupStatus.value!==`unconfigured`,preferredName:preferredName.value,renewedSession:Boolean(normalizeText$1(props.session?.metadata?.renewed_from))}):``);const conversationLogVisible=computed(()=>Boolean(props.active));const conversationScrollKey=computed(()=>sessionId.value);const chatReloading=ref(false);const chatReloadAvailable=computed(()=>Boolean(props.active&&props.session&&(typeof props.refreshSessionData===`function`||typeof props.conversationLog?.reload===`function`)));async function reloadChatPane(){if(!chatReloadAvailable.value||chatReloading.value)return false;chatReloading.value=true;try{await Promise.allSettled([props.refreshSessionData?.(),props.conversationLog?.reload?.()]);return true}finally{chatReloading.value=false}}async function loadMoreChatTurns(request={}){return typeof props.conversationLog?.loadMore===`function`?props.conversationLog.loadMore(request):false}return{chatReloading,chatTurns,conversationLogVisible,conversationScrollKey,emptyConversationWelcome,loadMoreChatTurns,reloadChatPane}}var EXECUTION_CAPACITY_ERROR_CODES=new Set([`vibe64_capacity_rejected`]);var EXECUTION_SAFETY_ERROR_CODES=new Set([`vibe64_codex_app_server_cleanup_required`,`vibe64_codex_app_server_metadata_failed`,`vibe64_codex_app_server_process_identity_unverified`,`vibe64_codex_helper_runtime_cleanup_required`,`vibe64_codex_helper_runtime_metadata_failed`,`vibe64_execution_cleanup_required`,`vibe64_execution_drain_failed`,`vibe64_execution_ownership_unknown`,`vibe64_managed_execution_provider_unavailable`]);function executionAttentionForError(error=null,message=``){const code=normalizeText$1(error?.code);const category=EXECUTION_CAPACITY_ERROR_CODES.has(code)?`capacity`:EXECUTION_SAFETY_ERROR_CODES.has(code)?`ownership`:``;if(!category)return null;return Object.freeze({category,code,message:normalizeText$1(message)||`This work could not start safely.`})}function useVibe64MainChatDelivery(props,emit,{actorKey,agentSteerable,approvalMode,composerAttachments,composerCanSubmit,composerDraft,composerQueueing,composerRetryMatchesDraft,composerRetrySubmission,composerSending,composerSubmissionKind,mainChatApprovals,messageDelivery,onAttachmentsAccepted,projectSlug,questionState,reportActivity,requestAgentSettings,routingRequest,sessionId}){const conversationFollowLatestKey=ref(0);const contextFullFailure=ref(null);let messageSequence=0;function restoreCancelledMessage(messageId){const message=messageDelivery.value?.find(messageId);if(!message||cancelOwnsMessage(message)||!unmatchedOptimisticMessages(props.conversationLog?.turns,[message]).length)return;composerDraft.value=draftWithRestoredMessage(message.payload.draftSnapshot||message.text,composerDraft.value);messageDelivery.value?.remove(messageId)}function nextMessageId(){messageSequence+=1;return createChatMessageId({sequence:messageSequence})}function settleComposerRetry(retry=composerRetrySubmission.value){return props.conversationRuntime?.settleDraftRetry(retry)??false}async function sendChatPayload(payload={},{messageId:existingMessageId=``,submissionKind=`send`,composer=false,questionText=``}={}){if(!props.conversationRuntime?.canSubmit.value||composerSending.value&&!composerQueueing.value||!normalizeText$1(payload?.message))return false;const messageId=String(existingMessageId||``).trim()||nextMessageId();const sendingSessionId=sessionId.value;const sendingProjectSlug=projectSlug.value;const sendingActorKey=actorKey.value;composerSubmissionKind.value=submissionKind===`steer`?`steer`:`send`;try{const response=await props.conversationRuntime[composer?`submitDraft`:`send`]({...payload,agentSettings:Object.hasOwn(payload,`agentSettings`)?payload.agentSettings:requestAgentSettings.value||null},{messageId,submissionKind,...composer?{questionText}:{}});if(sessionId.value!==sendingSessionId||projectSlug.value!==sendingProjectSlug||actorKey.value!==sendingActorKey)return false;const accepted=vibe64RequestAccepted(response);if(accepted){conversationFollowLatestKey.value+=1;reportActivity(`message-sent`,{projectSlug:sendingProjectSlug,sessionId:sendingSessionId})}if(accepted&&payload.attachmentIds?.length)onAttachmentsAccepted?.(payload.attachmentIds);return accepted}catch(error){if(sessionId.value!==sendingSessionId||projectSlug.value!==sendingProjectSlug||actorKey.value!==sendingActorKey)return false;if(error?.code===`vibe64_assistant_routing_cancelled`){restoreCancelledMessage(messageId);return false}const message=normalizeText$1(error?.message||error)||`Message could not be sent.`;if(error?.code===`vibe64_assistant_context_full`)contextFullFailure.value={message,payload,options:{messageId,submissionKind,composer,questionText}};const attention=executionAttentionForError(error,message);if(attention)emit(`execution-attention`,attention);return false}finally{if(sessionId.value===sendingSessionId&&projectSlug.value===sendingProjectSlug&&actorKey.value===sendingActorKey&&!composerSending.value)composerSubmissionKind.value=``}}function sendLessonMessage(text){return sendChatPayload({message:String(text||``),messageSource:`lesson`})}function retryContextFull(){const failure=contextFullFailure.value;contextFullFailure.value=null;return failure?sendChatPayload(failure.payload,failure.options):false}async function submitComposerMessage(){if(!composerCanSubmit.value)return false;if(approvalMode.value){const message=composerDraft.value;if(!await mainChatApprovals.send(message))return false;if(composerDraft.value===message)composerDraft.value=``;return true}const retry=composerRetryMatchesDraft.value?composerRetrySubmission.value:null;const draftSnapshot=retry?.draftSnapshot||composerDraft.value;const{message,questionText}=questionState.capture(draftSnapshot);const payload=retry?.payload||chatMessagePayload(message,composerAttachments.value);if(!payload)return false;const submissionKind=retry?.submissionKind||(agentSteerable.value?`steer`:`send`);const questionTextSnapshot=retry?.questionTextSnapshot||questionText;const messageId=retry?.messageId||nextMessageId();questionState.markSubmitted(questionTextSnapshot);return sendChatPayload(payload,{messageId,submissionKind,composer:true,questionText:questionTextSnapshot})}function optimisticMessageById(messageId=``){const request=routingRequest.value;const local=messageDelivery.value?.find(messageId);return request?.messageId===messageId&&routedChatMessage(request,local)||local}async function cancelOptimisticMessage(messageId=``){const message=optimisticMessageById(messageId);if(!message||message.status===`accepted`)return false;trackRoutedMessage(messageDelivery.value,message,props.conversationLog?.turns);if(await props.cancelAgentMessage(messageId)!==true)return false;if(composerRetrySubmission.value?.messageId===messageId)settleComposerRetry(composerRetrySubmission.value);return true}async function editOptimisticMessage(messageId=``){const message=optimisticMessageById(messageId);if(!message||message.status!==`failed`)return false;if(!await cancelOptimisticMessage(messageId))return false;composerDraft.value=draftWithRestoredMessage(message.text,String(composerDraft.value||``));return true}async function resendOptimisticMessage(messageId=``){const message=optimisticMessageById(messageId);if(!message||message.checking||![`failed`,`uncertain`].includes(message.status))return false;const retry=composerRetrySubmission.value?.messageId===messageId?composerRetrySubmission.value:null;if(message.status===`uncertain`){const receipt=await props.conversationRuntime.inspectDelivery(messageId);if(receipt?.status===`accepted`){settleComposerRetry(retry);return true}if(receipt?.status!==`not-sent`&&routingRequest.value?.messageId===messageId&&routingRequest.value?.delivery===`failed`)return false}messageDelivery.value?.remove(messageId);const accepted=await sendChatPayload(message.payload,{messageId,submissionKind:retry?.submissionKind||(agentSteerable.value?`steer`:`send`)});if(accepted)settleComposerRetry(retry);else if(!messageDelivery.value?.find(messageId))messageDelivery.value?.state.messages.push(message);return accepted}watch([routingRequest,()=>messageDelivery.value?.state.messages||[]],([request])=>{if(request?.stopped&&!request.cancelled&&!request.helper&&!request.attemptedMessageId)restoreCancelledMessage(request.messageId)},{immediate:true});return{cancelOptimisticMessage,contextFullFailure,conversationFollowLatestKey,editOptimisticMessage,resendOptimisticMessage,retryContextFull,sendLessonMessage,submitComposerMessage}}var SAVE_WORK_STAGE_LABELS=Object.freeze({published:`pushed`,publishing:`pushing`});function text$3(value=``){return String(value||``).trim()}var EVENT_TIME_FORMAT=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`});var EVENT_DATE_TIME_FORMAT=new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`});function eventTimeLabel(at=``,now=new Date){const date=new Date(text$3(at));if(!text$3(at)||Number.isNaN(date.getTime()))return text$3(at);return(date.toDateString()===now.toDateString()?EVENT_TIME_FORMAT:EVENT_DATE_TIME_FORMAT).format(date)}function repositoryFailureFromError(error){return error&&typeof error===`object`?{code:String(error.code||error.response?.code||``),details:error.details||error.response?.details||null,message:error instanceof Error?error.message:String(error||``)}:null}function useVibe64SessionSaveWork(props,{actorKey,agentActive,composerSending,dismissals,projectSlug,reportActivity,repositoryOperationActive,sessionId,sessionInteractionDisabled}){const saveWorkConfirmOpen=ref(false);const saveWorkReview=ref(null);const saveWorkConnectedReview=ref(null);const saveWorkConnectedResults=ref([]);const saveWorkStandInIdentity=ref(false);const saveWorkError=ref(``);const saveWorkFailure=ref(null);const saveWorkAttempt=ref(null);const saveWorkSending=ref(false);let repositoryRequestSequence=0;const toolbarRepositoryWorkState=computed(()=>{const selectedId=String(props.session?.sessionId||``).trim();return(Array.isArray(props.sessionToolbar?.sessions)?props.sessionToolbar.sessions:[]).find(session=>String(session?.sessionId||``).trim()===selectedId)?.repositoryWorkState||null});const saveWorkRepositoryState=computed(()=>{const inspected=props.workState&&typeof props.workState===`object`?props.workState:{};const monitored=toolbarRepositoryWorkState.value;const inspectedAt=Date.parse(String(inspected.checkedAt||``))||0;const monitoredAt=Date.parse(String(monitored?.checkedAt||``))||0;const monitoredState=String(monitored?.state||``);if(!monitored||monitored.updateStatusPending!==true&&monitoredAt<inspectedAt)return inspected;const monitoredUnsaved=monitoredState===`unsaved`?true:[`saved`,`update_available`].includes(monitoredState)?false:inspected.unsaved;return{...inspected,checkedAt:monitored.checkedAt||inspected.checkedAt,error:monitoredState===`unavailable`?inspected.error||`Repository status is unavailable.`:``,loading:monitoredState===`checking`,unsaved:monitoredUnsaved,updateAvailable:monitored.updateAvailable===true||[`update_available`,`updating`].includes(monitoredState),updateStatusPending:monitored.updateStatusPending===true||monitoredState===`updating`}});const saveConnectedFirst=computed(()=>saveWorkRepositoryState.value?.connectedSaveRequired===true);const saveWorkUnsaved=computed(()=>saveWorkRepositoryState.value?.unsaved===true||saveConnectedFirst.value);const saveWorkRequiresUpdate=computed(()=>Boolean(!saveConnectedFirst.value&&(saveWorkRepositoryState.value?.updateAvailable===true||saveWorkRepositoryState.value?.updateStatusPending===true)));const saveWorkRepositoryBusy=computed(()=>[`saving`,`updating`].includes(String(toolbarRepositoryWorkState.value?.state||``)));const repositoryAssistantStateSettled=computed(()=>[`connected`,`restricted`,`unavailable`,`failed`].includes(props.agentConnectionStatus));const updateWorkDisabled=computed(()=>Boolean(sessionInteractionDisabled.value||!repositoryAssistantStateSettled.value||agentActive.value||composerSending.value||saveWorkSending.value||saveWorkRepositoryBusy.value||saveWorkRepositoryState.value?.loading||saveWorkRepositoryState.value?.error));const saveWorkDisabled=computed(()=>Boolean(updateWorkDisabled.value||!saveWorkRequiresUpdate.value&&!saveWorkUnsaved.value&&!saveWorkRepositoryState.value?.connectedRequirementsPresent&&!saveWorkRepositoryState.value?.connectedInspectionError));const sessionUpdateLabel=computed(()=>{const branch=saveWorkRepositoryState.value?.destination?.branch;return branch?`Update session from ${branch}`:`Update session`});const saveWorkHeaderAriaLabel=computed(()=>saveConnectedFirst.value?`Save connected first`:saveWorkRequiresUpdate.value?sessionUpdateLabel.value:`Review selected session changes`);const saveWorkHeaderVisible=computed(()=>Boolean(props.active&&sessionId.value));const saveWorkTitle=computed(()=>{if(!repositoryAssistantStateSettled.value){if(props.agentConnectionStatus===`initializing`)return`Checking assistant activity before saving or updating`;return props.agentConnectionStatus===`reconciling`?`Checking the assistant connection before saving or updating`:`Waiting for the assistant to reconnect before saving or updating`}if(repositoryOperationActive.value||saveWorkRepositoryBusy.value)return`Wait for the current repository operation to finish`;if(agentActive.value||composerSending.value)return`Wait for the assistant turn to finish before saving or updating`;if(saveWorkRepositoryState.value?.loading)return`Checking whether this session has work to save`;if(saveWorkRepositoryState.value?.error)return`Repository status is unavailable; check for updates before saving`;if(saveConnectedFirst.value)return`Review and push connected contributions before saving this project`;if(saveWorkRequiresUpdate.value)return saveWorkUnsaved.value?`${sessionUpdateLabel.value}, preserving its unsaved work. Save will be available when the update finishes.`:`${sessionUpdateLabel.value} to load its latest saved changes.`;if(!saveWorkUnsaved.value&&!saveWorkRepositoryState.value?.connectedRequirementsPresent&&!saveWorkRepositoryState.value?.connectedInspectionError)return`No work to save`;return`Review changes and choose where to commit them`});watch(()=>{const attempt=saveWorkAttempt.value;const activeOperation=props.workState?.activeOperation;return{attempt,kind:String(activeOperation?.kind||``).trim(),operationId:String(activeOperation?.operationId||``).trim()}},({attempt,kind,operationId})=>{if(!attempt||attempt.operationId||!operationId||kind!==attempt.kind)return;saveWorkAttempt.value={...attempt,operationId}});const saveWorkOperation=computed(()=>{const saveOperation=props.workState?.operation||null;const updateOperation=props.workState?.updateOperation||null;const attempt=saveWorkAttempt.value;if(attempt){const operation=attempt.kind===`update`?updateOperation:saveOperation;const operationId=String(operation?.operationId||``).trim();return attempt.operationId&&operationId===attempt.operationId?operation:null}const activeOperation=props.workState?.activeOperation;const activeOperationId=String(activeOperation?.operationId||``).trim();if(activeOperationId){const operation=activeOperation?.kind===`update`?updateOperation:saveOperation;return String(operation?.operationId||``).trim()===activeOperationId?operation:null}const saveStatus=String(saveOperation?.status||``).trim().toLowerCase();const updateStatus=String(updateOperation?.status||``).trim().toLowerCase();const saveFailed=saveStatus===`failed`;const updateFailed=updateStatus===`failed`;if(saveFailed!==updateFailed)return updateFailed?updateOperation:saveOperation;if(saveFailed&&updateFailed)return String(updateOperation?.updatedAt||``)>String(saveOperation?.updatedAt||``)?updateOperation:saveOperation;return null});const saveWorkActivityIsUpdate=computed(()=>{if(saveWorkAttempt.value)return saveWorkAttempt.value.kind===`update`;return Boolean(props.workState?.updateOperation&&saveWorkOperation.value===props.workState.updateOperation||!saveWorkOperation.value&&saveWorkRequiresUpdate.value)});const saveWorkActivityKey=computed(()=>{const operationId=text$3(saveWorkOperation.value?.operationId);if(!operationId)return``;return`${saveWorkActivityIsUpdate.value?`update-session`:`save-work`}:${operationId}`});const saveWorkActivityDismissed=computed(()=>Boolean(saveWorkActivityKey.value&&(dismissals.state.value.saveWork===saveWorkActivityKey.value||dismissals.state.value[saveWorkActivityKey.value]===true)));const saveWorkActivityLabel=computed(()=>saveWorkActivityIsUpdate.value?sessionUpdateLabel.value:`Save work`);const saveWorkOperationActive=computed(()=>[`queued`,`running`,`starting`].includes(String(saveWorkOperation.value?.status||``).trim().toLowerCase()));const saveWorkOutput=computed(()=>Array.isArray(saveWorkOperation.value?.events)?saveWorkOperation.value.events.filter(event=>text$3(event.message)).map(event=>[eventTimeLabel(event.at),text$3(event.message)].filter(Boolean).join(` `)).join(`
10
10
  `):``);const saveWorkStatus=computed(()=>String(saveWorkOperation.value?.status||(saveWorkSending.value?`starting`:``)));const saveWorkStage=computed(()=>String(SAVE_WORK_STAGE_LABELS[saveWorkOperation.value?.stage]||saveWorkOperation.value?.stage||(saveWorkSending.value&&!saveWorkOperation.value?`Waiting for the session to be ready`:``)));let storedFailure=null;watch(()=>({code:String(saveWorkOperation.value?.code||``),details:saveWorkOperation.value?.details||(saveWorkOperation.value?.conflictRecovery?{conflictPaths:saveWorkOperation.value.conflictPaths,conflictRecovery:saveWorkOperation.value.conflictRecovery}:null),error:String(saveWorkOperation.value?.error||``),operationId:String(saveWorkOperation.value?.operationId||``),status:String(saveWorkOperation.value?.status||``).trim().toLowerCase()}),operation=>{if(operation.code===`vibe64_session_save_update_required`){if(saveWorkFailure.value?.code===operation.code){saveWorkError.value=``;saveWorkFailure.value=null}return}if(operation.status!==`failed`||!operation.error){if(storedFailure&&saveWorkFailure.value===storedFailure){saveWorkError.value=``;saveWorkFailure.value=null}storedFailure=null;return}saveWorkError.value=operation.error;saveWorkFailure.value={code:operation.code,details:operation.details,message:operation.error};storedFailure=saveWorkFailure.value},{immediate:true});const saveWorkConflictFailure=computed(()=>[`vibe64_session_save_history_diverged`,`vibe64_session_update_conflict`,`vibe64_session_update_history_diverged`].includes(String(saveWorkFailure.value?.code||``)));const saveWorkCanResolveWithTemporaryAi=computed(()=>Boolean(saveWorkError.value));const updateConflictRecovery=computed(()=>{const recovery=saveWorkFailure.value?.details?.conflictRecovery;return saveWorkFailure.value?.code===`vibe64_session_update_conflict`&&recovery?.reviewId&&recovery.conflictPaths?.length?recovery:null});const resolvedUpdateReview=ref(null);watch(()=>updateConflictRecovery.value?.reviewId,()=>{resolvedUpdateReview.value=null},{flush:`sync`});function reviewResolvedUpdate(){if(updateWorkDisabled.value||repositoryOperationActive.value||props.sessionRenewal?.sourceOperationsSuspended||!updateConflictRecovery.value)return false;const{reviewId,conflictPaths}=updateConflictRecovery.value;resolvedUpdateReview.value={reviewId,conflictPaths:[...conflictPaths]};return true}const saveWorkRetryable=computed(()=>Boolean(saveWorkError.value&&!saveWorkDisabled.value&&!saveWorkConflictFailure.value));async function runRepositoryRequest(kind,fallbackMessage,run,{onFailure=()=>{},onSuccess=()=>{}}={}){const requestSequence=++repositoryRequestSequence;const requestSessionId=sessionId.value;const requestProjectSlug=projectSlug.value;const requestIsCurrent=()=>requestSequence===repositoryRequestSequence&&sessionId.value===requestSessionId&&projectSlug.value===requestProjectSlug;saveWorkAttempt.value={kind,operationId:``};saveWorkSending.value=true;saveWorkError.value=``;saveWorkFailure.value=null;try{const result=await run();if(!requestIsCurrent())return false;saveWorkAttempt.value=null;onSuccess(result);return result}catch(error){if(!requestIsCurrent())return false;saveWorkFailure.value=repositoryFailureFromError(error);saveWorkError.value=error instanceof Error?error.message:String(error||fallbackMessage);onFailure();return false}finally{if(requestIsCurrent())saveWorkSending.value=false}}function updateBeforeSave(input={}){return runRepositoryRequest(`update`,`This session could not be updated.`,()=>props.updateSessionWork(input))}function requestSaveWork(){if(saveWorkDisabled.value)return false;if(saveWorkRequiresUpdate.value)return updateBeforeSave();saveWorkReview.value=saveWorkRepositoryState.value?.destination?{...saveWorkRepositoryState.value.destination}:null;saveWorkConnectedReview.value=saveConnectedFirst.value?(saveWorkRepositoryState.value?.connectedReview||[]).map(item=>({projectSlug:item.projectSlug,destination:{...item.destination}})):null;saveWorkConfirmOpen.value=true;return true}function retrySaveWork(){return saveWorkRetryable.value?requestSaveWork():false}function dismissSaveWorkActivity(){if(saveWorkSending.value||saveWorkOperationActive.value)return false;if(!saveWorkActivityKey.value&&saveWorkError.value){saveWorkError.value=``;saveWorkFailure.value=null;return true}return dismissals.dismiss(`saveWork`,saveWorkActivityKey.value)}function showSaveWorkActivity(){return saveWorkActivityDismissed.value&&dismissals.restore(`saveWork`,saveWorkActivityKey.value)}function cancelSaveWork(){saveWorkConfirmOpen.value=false}async function confirmSaveWork(){if(saveWorkDisabled.value)return false;saveWorkConnectedResults.value=[];saveWorkStandInIdentity.value=false;saveWorkConfirmOpen.value=false;return runRepositoryRequest(`save`,`Session work could not be saved.`,()=>props.saveSessionWork({destinationReview:saveWorkReview.value,...saveWorkConnectedReview.value!==null?{connectedReview:saveWorkConnectedReview.value}:{}}),{onFailure(){saveWorkConnectedResults.value=saveWorkFailure.value?.details?.connected||[]},onSuccess(result){saveWorkConnectedResults.value=result?.connected||[];saveWorkStandInIdentity.value=result?.standInIdentity===true;if(result)reportActivity(`saved`,{projectSlug:projectSlug.value,sessionId:sessionId.value})}})}watch([sessionId,projectSlug,actorKey],()=>{repositoryRequestSequence+=1;saveWorkConfirmOpen.value=false;saveWorkConnectedReview.value=null;saveWorkConnectedResults.value=[];saveWorkStandInIdentity.value=false;resolvedUpdateReview.value=null;saveWorkSending.value=false;saveWorkAttempt.value=null;saveWorkError.value=``;saveWorkFailure.value=null});return{cancelSaveWork,confirmSaveWork,dismissSaveWorkActivity,requestSaveWork,resolvedUpdateReview,retrySaveWork,reviewResolvedUpdate,saveConnectedFirst,saveWorkActivityDismissed,saveWorkActivityIsUpdate,saveWorkActivityKey,saveWorkActivityLabel,saveWorkCanResolveWithTemporaryAi,saveWorkConfirmOpen,saveWorkConflictFailure,saveWorkConnectedResults,saveWorkConnectedReview,saveWorkDisabled,saveWorkError,saveWorkFailure,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkOperation,saveWorkOperationActive,saveWorkOutput,saveWorkRequiresUpdate,saveWorkRetryable,saveWorkReview,saveWorkSending,saveWorkStage,saveWorkStandInIdentity,saveWorkStatus,saveWorkTitle,saveWorkUnsaved,showSaveWorkActivity,updateBeforeSave,updateConflictRecovery,updateWorkDisabled}}var DIRECT_SESSION_TOOL_IDS=new Set([`info`,`changes`,`repository`,`editor`,`database`,`system`,`ai-terminal`]);var STANDALONE_SESSION_TOOL_IDS=new Set([`changes`,`editor`,`database`,`system`]);function text$2(value=``){return String(value||``).trim()}function normalizeProjectPane$1(value=``){return value===`dashboard`?value:`preview`}function sessionNavLabel(session={}){const name=vibe64SessionShortLabel(session);if(name)return name;const sessionId=text$2(session?.sessionId);return sessionId.includes(`_`)?sessionId.split(`_`).slice(-2).join(`_`):sessionId.slice(0,12)}function useVibe64SessionToolPane(props,emit,{actorKey,assistantAccessPending,assistantCanUseNative=null,assistantDirectAllowed,projectSlug,requestSaveWork,sessionId,sessionSourceRoot}){const route=useRoute();const router=useRouter();const rightPaneTab=ref(`preview`);const lastDashboardRoutePath=ref(``);const sourceEditorOpenRequest=ref(null);const systemRestoreRequest=ref(null);const databaseOpenRequest=ref(null);const systemReturnContext=ref(null);let sourceEditorOpenSequence=0;let systemRestoreSequence=0;const projectPaneValue=computed(()=>normalizeProjectPane$1(props.projectPane));const routeSessionToolId=computed(()=>{const toolId=vibe64SessionToolIdFromDashboardPath(route.path,projectAppPath(projectSlug.value,`/dashboard`));return DIRECT_SESSION_TOOL_IDS.has(toolId)?toolId:``});const sourceToolLoading=computed(()=>Boolean(projectPaneValue.value===`dashboard`&&STANDALONE_SESSION_TOOL_IDS.has(routeSessionToolId.value)&&!sessionSourceRoot.value&&props.page?.launchBusy));const dashboardShellVisible=computed(()=>Boolean(projectPaneValue.value===`dashboard`&&!sourceToolLoading.value&&!STANDALONE_SESSION_TOOL_IDS.has(rightPaneTab.value)));const dashboardRouteVisible=computed(()=>[`dashboard`,`info`,`repository`].includes(rightPaneTab.value));const sessionToolBackPath=computed(()=>lastDashboardRoutePath.value||projectAppPath(projectSlug.value,`/dashboard/env`));function sessionToolRuntimeState(toolId=``){if(toolId===`ai-terminal`&&!assistantAccessPending.value&&!(assistantCanUseNative===null?assistantDirectAllowed.value:unref(assistantCanUseNative)===true))return{disabled:true,title:`The AI terminal requires access to this conversation’s current connection. Use chat to send through an available mode.`};if(toolId===`editor`)return{disabled:!props.session,title:`Browse repository files, Drop Zone and session files`};if([`database`,`system`].includes(toolId))return{disabled:!sessionSourceRoot.value,title:sessionSourceRoot.value?toolId===`database`?`Query and map the active session database`:`Explore the current project Cities`:`Create the session source first`};return{}}const sessionToolControls=computed(()=>VIBE64_SESSION_TOOL_DEFINITIONS.filter(definition=>definition.navigationScope!==`project`&&DIRECT_SESSION_TOOL_IDS.has(definition.id)).map(definition=>({...definition,...sessionToolRuntimeState(definition.id)})));function sessionToolRoutePath(toolId=``){const suffix=vibe64SessionToolDashboardSuffix(toolId);return suffix?projectAppPath(projectSlug.value,suffix):``}function selectSessionTool(toolId=``,{navigate=true}={}){if(!DIRECT_SESSION_TOOL_IDS.has(toolId))return false;const tool=sessionToolControls.value.find(item=>item.id===toolId)||VIBE64_SESSION_TOOL_DEFINITIONS.find(item=>item.id===toolId&&item.navigationScope===`project`);if(!tool||tool.disabled)return false;rightPaneTab.value=toolId;if(navigate){const targetPath=sessionToolRoutePath(toolId);if(targetPath&&normalizeProjectRoutePath(targetPath)!==normalizeProjectRoutePath(route.path))router.push(targetPath)}emit(`project-attention`);return true}function backToDashboard(){const targetPath=sessionToolBackPath.value;if(targetPath&&normalizeProjectRoutePath(targetPath)!==normalizeProjectRoutePath(route.path))router.push(targetPath)}function rightPaneTabMounted(tabId=``){return rightPaneTab.value===String(tabId||``)}const activeSessionNav=computed(()=>({label:sessionNavLabel(props.session||{}),selectTool:selectSessionTool,sessionId:sessionId.value,status:String(props.session?.status||``),statusLabel:vibe64SessionStatusLabel(props.session?.status),tools:sessionToolControls.value.map(tool=>({...tool,active:rightPaneTab.value===tool.id,disabledReason:tool.disabled?tool.title||``:``,to:sessionToolRoutePath(tool.id)})),visible:Boolean(props.session)}));const dashboardSessionContext=computed(()=>({active:Boolean(props.active),activeSessionNav:activeSessionNav.value,copyText:typeof props.page?.copyText===`function`?props.page.copyText:null,embeddedShell:true,projectContext:props.projectContext||{},refreshSessionWork:props.refreshSessionWork,refreshConversation:()=>props.conversationLog?.reload?.(),requestSaveWork,session:props.session||null,sessionId:sessionId.value,sessionsApiPath:props.sessionsApiPath,statusColor:vibe64SessionStatusColor(props.session?.status),statusLabel:vibe64SessionStatusLabel(props.session?.status),workState:props.workState||null}));const systemBackAvailable=computed(()=>Boolean(systemReturnContext.value?.sessionId===sessionId.value));function openSourceEditorFile(target={}){const path=text$2(target?.path);if(!path)return false;systemReturnContext.value=target.origin===`system`?{...target.systemContext&&typeof target.systemContext===`object`?target.systemContext:{},sessionId:sessionId.value}:null;sourceEditorOpenSequence+=1;sourceEditorOpenRequest.value={column:Number(target.column||0)||0,line:Number(target.line||0)||0,path,presentation:target.presentation||`interface`,symbolId:target.symbolId||``,symbol:target.symbol||``,sequence:sourceEditorOpenSequence};return selectSessionTool(`editor`)}function openSubsystemTable(target={}){if(!target.qualifiedName)return false;systemReturnContext.value={...target.systemContext,sessionId:sessionId.value};databaseOpenRequest.value={qualifiedName:target.qualifiedName,sequence:Date.now()};return selectSessionTool(`database`)}function backToSystemFromEditor(){if(!systemBackAvailable.value)return false;systemRestoreSequence+=1;systemRestoreRequest.value={...systemReturnContext.value,sequence:systemRestoreSequence};return selectSessionTool(`system`)}watch(()=>[props.active,projectPaneValue.value,route.path,routeSessionToolId.value,sessionSourceRoot.value,sourceToolLoading.value,assistantAccessPending.value,assistantDirectAllowed.value].join(`|`),()=>{if(!props.active||projectPaneValue.value!==`dashboard`)return;if(sourceToolLoading.value){emit(`project-attention`);return}if(routeSessionToolId.value){if(selectSessionTool(routeSessionToolId.value,{navigate:false}))return;const fallbackPath=projectAppPath(projectSlug.value,`/dashboard/env`);lastDashboardRoutePath.value=fallbackPath;rightPaneTab.value=`dashboard`;if(normalizeProjectRoutePath(fallbackPath)!==normalizeProjectRoutePath(route.path))router.replace(fallbackPath);return}lastDashboardRoutePath.value=route.path;rightPaneTab.value=`dashboard`},{immediate:true});watch([sessionId,projectSlug,actorKey],()=>{systemReturnContext.value=null;systemRestoreRequest.value=null;databaseOpenRequest.value=null});return{backToDashboard,backToSystemFromEditor,dashboardRouteVisible,dashboardSessionContext,dashboardShellVisible,databaseOpenRequest,openSourceEditorFile,openSubsystemTable,rightPaneTab,rightPaneTabMounted,selectSessionTool,sourceEditorOpenRequest,sourceToolLoading,systemBackAvailable,systemRestoreRequest}}var SHORT_ACTION_DISMISSALS_STORAGE_PREFIX=`vibe64:short-action-dismissals:v1`;function useVibe64ShortActionDismissals(projectSlug,sessionId){const state=ref({saveWork:``,workspaceSetup:``,checkpoint:``});const storageKey=computed(()=>{const slug=normalizeText$1(projectSlug.value);const selectedSessionId=sessionId.value;return slug&&selectedSessionId?`${SHORT_ACTION_DISMISSALS_STORAGE_PREFIX}:${encodeURIComponent(slug)}:${encodeURIComponent(selectedSessionId)}`:``});watch(storageKey,key=>{const stored=readLocalStorageJson(key,{});state.value={...stored,saveWork:normalizeText$1(stored?.saveWork),workspaceSetup:normalizeText$1(stored?.workspaceSetup),checkpoint:normalizeText$1(stored?.checkpoint)}},{flush:`sync`,immediate:true});function dismiss(name,activityKey=``){const key=normalizeText$1(activityKey);if(!key||!storageKey.value)return false;state.value={...readLocalStorageJson(storageKey.value,{}),...state.value,...name===`saveWork`?{[key]:true}:{[name]:key}};writeLocalStorageJson(storageKey.value,state.value);return true}function clear(name){state.value={...state.value,[name]:``};if(storageKey.value)writeLocalStorageJson(storageKey.value,state.value)}function restore(name,activityKey=``){const key=normalizeText$1(activityKey);if(!key||!storageKey.value)return false;const{[key]:_dismissed,...kept}={...readLocalStorageJson(storageKey.value,{}),...state.value};state.value={...kept,...kept[name]===key?{[name]:``}:{}};writeLocalStorageJson(storageKey.value,state.value);return true}return{clear,dismiss,restore,state}}function text$1(value=``){return String(value||``).trim()}function workspaceSetupFixPrompt(workspaceSetup={}){const diagnostic=text$1(workspaceSetup?.diagnostic)||`Workspace preparation did not complete.`;const transcript=text$1(workspaceSetup?.transcript);const recentTranscript=transcript.length>12e3?`[Earlier preparation output omitted.]\n${transcript.slice(-12e3)}`:transcript;return[`Workspace preparation needs attention.`,`Diagnostic:\n${diagnostic}`,recentTranscript?`Recent preparation output:\n${recentTranscript}`:``,`Diagnose and repair the current workspace while preserving its existing work.`,`When your turn finishes, Vibe64 will automatically rerun its deterministic workspace preparation. Do not merely tell the user to retry.`,`If the repair needs information only the user can provide, ask for it in this temporary conversation.`].filter(Boolean).join(`
11
11
 
@@ -13,13 +13,13 @@ import{_ as VProgressLinear,_r as __exportAll,a as VAvatar,cr as Transition,fr a
13
13
 
14
14
  `)}var REPOSITORY_TEMPORARY_AI_GIT_BOUNDARY=[`Vibe64—not Temporary AI—owns every repository operation. The failed operation has already been rolled back.`,`You may inspect Git read-only and edit ordinary working-tree files in this session. Do not change HEAD, branches, refs, the index, stashes, remotes, commits, checkpoints, or repository configuration.`,`Do not run git add, commit, checkout, switch, restore, reset, clean, stash, merge, rebase, cherry-pick, revert, pull, push, fetch, or update-ref. Do not create a recovery ref or stash; Vibe64 already owns durable recovery.`,`Record the initial HEAD and index with read-only commands, leave both byte-for-byte unchanged, and do not push. Resolve only by editing the conflicting working-tree files; Vibe64 owns applying and verifying the repository operation.`,`Preserve the intended behavior of both the latest saved work and this session. Do not hand-edit generated Genesis maps; Vibe64 regenerates its derived artifacts. A clean index after rollback is not proof that the conflict is resolved.`].join(`
15
15
  `);var UPDATE_REPAIR_MESSAGES={completion:`File repairs prepared. Vibe64 must check Update before this repair is finished.`,nextStep:`Vibe64 will check Update after the repair.`,handoff:[`Review every listed conflict against both the saved and session versions, preserving their intended changes. Leave an already-correct file unchanged. Confirm the content is resolved before reporting completion; valid syntax alone is insufficient.`,`Your task is to prepare the file repair, not to run or complete the rebase yourself. Return kind=complete with a factual report as soon as the edits and focused checks are ready for Vibe64 to try Update. Vibe64 then runs Update automatically and returns remaining conflicts to this same conversation.`,`Return kind=continue only when you need an actual user decision, and ask that specific question. Do not wait for the user to click Rebase or tell them to open another repair chat.`,`Describe progress in terms of the user's features and remaining work. Keep HEAD/index/ref bookkeeping in the technical checks, not routine progress or the final reply. Passing application tests is not proof that Update succeeded.`].join(`
16
- `)};var UPDATE_REPAIR_SUCCEEDED_MESSAGE=`Session updated. Your changes were preserved. Nothing was pushed.`;function updateRepairAttentionMessage(error=``){return`Update still needs attention: ${error||`The operation failed.`}`}var TEMPORARY_AI_RECOVERY_NOTICE=`This is a separate temporary chat. Temporary AI can edit this session to make the repair. Follow progress here and reply below if it needs a decision.`;function repositoryTemporaryAiDedupeKey({code=``,diagnostic=``,sessionId=``}={}){return[`repository-recovery`,text$1(sessionId),text$1(code),text$1(diagnostic)].join(`|`)}function useVibe64TemporaryAiRepairs(props,{actorKey,assistantFixAllowed,projectSlug,repositoryOperationActive,requestTemporaryAi=null,saveWork,sessionId,temporaryAiWorkspace=null,workspaceSetupActivity}){const workspaceSetupFixSending=ref(false);const workspaceSetupFixTaskId=ref(``);const workspaceRecoveryTaskId=ref(``);const repositoryRecoverySending=ref(false);const checkedUpdateRepairRuns=new Map;const systemReloadVersion=ref(0);const subsystemMapTaskKey=computed(()=>`subsystem-map:${sessionId.value}`);const{saveWorkActivityIsUpdate,saveWorkCanResolveWithTemporaryAi,saveWorkConflictFailure,saveWorkError,saveWorkFailure,saveWorkOperationActive,saveWorkSending}=saveWork;const{retryWorkspaceSetup,workspaceSetup,workspaceSetupDiagnostic,workspaceSetupNeedsAttention,workspaceSetupStatus}=workspaceSetupActivity;const temporaryAiAvailable=computed(()=>Boolean(typeof requestTemporaryAi===`function`&&assistantFixAllowed.value&&props.active&&sessionId.value&&!props.sessionSelectionArchived&&!repositoryOperationActive.value));const workspaceSetupAskDisabled=computed(()=>Boolean(!workspaceSetupNeedsAttention.value||workspaceSetupFixSending.value||!temporaryAiAvailable.value));async function fixWorkspaceSetupWithTemporaryAi(){if(workspaceSetupAskDisabled.value)return false;const setup={...workspaceSetup.value,diagnostic:workspaceSetupDiagnostic.value};workspaceSetupFixSending.value=true;try{const result=await requestTemporaryAi({completionMessage:`AI repair finished. Vibe64 is verifying workspace preparation now.`,dedupeKey:[`workspace-setup`,sessionId.value,workspaceSetupStatus.value,text$1(setup.updatedAt),text$1(setup.diagnostic)].join(`|`),displayMessage:`Fix workspace preparation.`,failureMessage:`Temporary AI stopped before confirming completion. Vibe64 is checking whether its edits repaired workspace preparation.`,message:workspaceSetupFixPrompt(setup),nextStepMessage:`When the AI finishes, Vibe64 will automatically retry workspace preparation to verify the repair.`,recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,title:`Fix workspace preparation`});const accepted=vibe64RequestAccepted(result);const taskId=text$1(result?.taskId);if(accepted&&taskId)workspaceSetupFixTaskId.value=taskId;return accepted}finally{workspaceSetupFixSending.value=false}}async function handleTemporaryAiTaskFinished(task={},reportRecovery=()=>{},{force=false}={}){const taskId=text$1(task?.id);const status=text$1(task?.status);if(task.sessionId===sessionId.value&&task.dedupeKey===subsystemMapTaskKey.value&&[`completed`,`failed`].includes(status)){systemReloadVersion.value+=1;return`subsystem-map`}if(task.recoveryOperation===`update`){const runId=text$1(task.runId);if(!taskId||!runId||task.sessionId!==sessionId.value||task.busy||[`starting`,`inProgress`].includes(status)||saveWorkSending.value||saveWorkOperationActive.value||[`checking`,`unconfirmed`].includes(task.recoveryOutcome)||!force&&(status!==`completed`||task.outcomeKind!==`complete`||checkedUpdateRepairRuns.get(taskId)===runId))return false;checkedUpdateRepairRuns.set(taskId,runId);return verifySessionUpdate(task,reportRecovery,!force?text$1(task.runConflictId):``)}if(taskId!==workspaceSetupFixTaskId.value||![`completed`,`failed`].includes(status))return false;workspaceSetupFixTaskId.value=``;if(workspaceSetupNeedsAttention.value)await retryWorkspaceSetup();return`workspace-setup`}async function verifySessionUpdate(task,reportRecovery,reviewedConflictId,{retryAi=true}={}){const taskId=task?.id;const checkingSessionId=sessionId.value;const checkingProjectSlug=projectSlug.value;const requestId=taskId?crypto.randomUUID():``;const checkpoint=taskId?reportRecovery(taskId,{status:`checking`,message:`Checking Update…`,recoveryRequestId:requestId}):true;const checkpointSaved=checkpoint&&typeof checkpoint.then===`function`?await checkpoint:checkpoint;if(checkingSessionId!==sessionId.value||checkingProjectSlug!==projectSlug.value)return false;if(checkpointSaved===false){if(taskId)reportRecovery(taskId,{status:`failed`,message:`Update was not started because its recovery checkpoint could not be saved. Try again after the save error is resolved.`});return false}const result=await saveWork.updateBeforeSave({reviewedConflictId,...requestId?{requestId}:{}});const work=typeof props.refreshSessionWork===`function`?await props.refreshSessionWork().catch(()=>null):null;await nextTick();if(checkingSessionId!==sessionId.value||checkingProjectSlug!==projectSlug.value)return false;if(!taskId)return`repository-update`;const operation=work?.updateOperation?.requestId===requestId?work.updateOperation:null;if([`queued`,`running`,`starting`].includes(operation?.status))return`repository-update`;const succeeded=operation?operation.status===`ready`:result?.ok===true;const confirmedFailure=operation?.status===`failed`||[`vibe64_agent_write_mode_busy`].includes(saveWorkFailure.value?.code)||Boolean(saveWorkFailure.value?.code?.startsWith(`vibe64_session_update_`));const outcome={status:succeeded?`succeeded`:confirmedFailure?`failed`:`unconfirmed`,message:succeeded?UPDATE_REPAIR_SUCCEEDED_MESSAGE:confirmedFailure?updateRepairAttentionMessage(operation?.error||saveWorkError.value):`Vibe64 could not confirm this Update result. Check the session's current Update status before trying again.`};if(confirmedFailure&&(saveWorkConflictFailure.value||operation?.conflictRecovery)){const failure=saveWorkFailure.value||operation;const recovery=failure?.details?.conflictRecovery||operation?.conflictRecovery;outcome.recoveryConflictId=recovery?.reviewId||``;if(retryAi){outcome.retryKey=JSON.stringify([failure?.code,recovery?.reviewId||recovery?.canonicalCommit||``,failure?.details?.conflictPaths||saveWorkError.value]);outcome.retryMessage=[`Vibe64 ran Update after the prepared repair, but it did not succeed. The working-tree edits remain. Inspect the current state and repair only the remaining conflicts; do not start over or repeat completed work.`,`Latest Update diagnostic:\n${saveWorkError.value}`,UPDATE_REPAIR_MESSAGES.handoff].join(`
16
+ `)};var UPDATE_REPAIR_SUCCEEDED_MESSAGE=`Session updated. Your changes were preserved. Nothing was pushed.`;function updateRepairAttentionMessage(error=``){return`Update still needs attention: ${error||`The operation failed.`}`}var TEMPORARY_AI_RECOVERY_NOTICE=`This is a separate temporary chat. Temporary AI can edit this session to make the repair. Follow progress here and reply below if it needs a decision.`;function repositoryTemporaryAiDedupeKey({code=``,diagnostic=``,sessionId=``}={}){return[`repository-recovery`,text$1(sessionId),text$1(code),text$1(diagnostic)].join(`|`)}function useVibe64TemporaryAiRepairs(props,{actorKey,assistantFixAllowed,projectSlug,repositoryOperationActive,requestTemporaryAi=null,saveWork,sessionId,temporaryAiWorkspace=null,workspaceSetupActivity}){const workspaceSetupFixSending=ref(false);const workspaceSetupFixTaskId=ref(``);const workspaceRecoveryTaskId=ref(``);const repositoryRecoverySending=ref(false);const checkedUpdateRepairRuns=new Map;const systemReloadVersion=ref(0);const subsystemMapTaskKey=computed(()=>`subsystem-map:${sessionId.value}`);const{saveWorkActivityIsUpdate,saveWorkCanResolveWithTemporaryAi,saveWorkConflictFailure,saveWorkError,saveWorkFailure,saveWorkOperationActive,saveWorkSending}=saveWork;const{retryWorkspaceSetup,workspaceSetup,workspaceSetupDiagnostic,workspaceSetupNeedsAttention,workspaceSetupStatus}=workspaceSetupActivity;const temporaryAiAvailable=computed(()=>Boolean(typeof requestTemporaryAi===`function`&&assistantFixAllowed.value&&props.active&&sessionId.value&&!props.sessionSelectionArchived&&!repositoryOperationActive.value));const updateOwnsSession=computed(()=>Boolean(saveWork.saveWorkRequiresUpdate?.value||saveWork.saveWorkActivityIsUpdate?.value&&saveWork.saveWorkFailure?.value));const workspaceSetupAskDisabled=computed(()=>Boolean(!workspaceSetupNeedsAttention.value||workspaceSetupFixSending.value||!temporaryAiAvailable.value||updateOwnsSession.value));async function fixWorkspaceSetupWithTemporaryAi(){if(workspaceSetupAskDisabled.value)return false;const setup={...workspaceSetup.value,diagnostic:workspaceSetupDiagnostic.value};workspaceSetupFixSending.value=true;try{const result=await requestTemporaryAi({completionMessage:`AI repair finished. Vibe64 is verifying workspace preparation now.`,dedupeKey:[`workspace-setup`,sessionId.value,workspaceSetupStatus.value,text$1(setup.updatedAt),text$1(setup.diagnostic)].join(`|`),displayMessage:`Fix workspace preparation.`,failureMessage:`Temporary AI stopped before confirming completion. Vibe64 is checking whether its edits repaired workspace preparation.`,message:workspaceSetupFixPrompt(setup),nextStepMessage:`When the AI finishes, Vibe64 will automatically retry workspace preparation to verify the repair.`,recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,title:`Fix workspace preparation`});const accepted=vibe64RequestAccepted(result);const taskId=text$1(result?.taskId);if(accepted&&taskId)workspaceSetupFixTaskId.value=taskId;return accepted}finally{workspaceSetupFixSending.value=false}}async function handleTemporaryAiTaskFinished(task={},reportRecovery=()=>{},{force=false}={}){const taskId=text$1(task?.id);const status=text$1(task?.status);if(task.sessionId===sessionId.value&&task.dedupeKey===subsystemMapTaskKey.value&&[`completed`,`failed`].includes(status)){systemReloadVersion.value+=1;return`subsystem-map`}if(task.recoveryOperation===`update`){const runId=text$1(task.runId);if(!taskId||!runId||task.sessionId!==sessionId.value||task.busy||[`starting`,`inProgress`].includes(status)||saveWorkSending.value||saveWorkOperationActive.value||[`checking`,`unconfirmed`].includes(task.recoveryOutcome)||!force&&(status!==`completed`||task.outcomeKind!==`complete`||checkedUpdateRepairRuns.get(taskId)===runId))return false;checkedUpdateRepairRuns.set(taskId,runId);return verifySessionUpdate(task,reportRecovery,!force?text$1(task.runConflictId):``)}if(taskId!==workspaceSetupFixTaskId.value||![`completed`,`failed`].includes(status))return false;workspaceSetupFixTaskId.value=``;if(workspaceSetupNeedsAttention.value)await retryWorkspaceSetup();return`workspace-setup`}async function verifySessionUpdate(task,reportRecovery,reviewedConflictId,{retryAi=true}={}){const taskId=task?.id;const checkingSessionId=sessionId.value;const checkingProjectSlug=projectSlug.value;const requestId=taskId?crypto.randomUUID():``;const checkpoint=taskId?reportRecovery(taskId,{status:`checking`,message:`Checking Update…`,recoveryRequestId:requestId}):true;const checkpointSaved=checkpoint&&typeof checkpoint.then===`function`?await checkpoint:checkpoint;if(checkingSessionId!==sessionId.value||checkingProjectSlug!==projectSlug.value)return false;if(checkpointSaved===false){if(taskId)reportRecovery(taskId,{status:`failed`,message:`Update was not started because its recovery checkpoint could not be saved. Try again after the save error is resolved.`});return false}const result=await saveWork.updateBeforeSave({reviewedConflictId,...requestId?{requestId}:{}});const work=typeof props.refreshSessionWork===`function`?await props.refreshSessionWork().catch(()=>null):null;await nextTick();if(checkingSessionId!==sessionId.value||checkingProjectSlug!==projectSlug.value)return false;if(!taskId)return`repository-update`;const operation=work?.updateOperation?.requestId===requestId?work.updateOperation:null;if([`queued`,`running`,`starting`].includes(operation?.status))return`repository-update`;const succeeded=operation?operation.status===`ready`:result?.ok===true;const confirmedFailure=operation?.status===`failed`||[`vibe64_agent_write_mode_busy`].includes(saveWorkFailure.value?.code)||Boolean(saveWorkFailure.value?.code?.startsWith(`vibe64_session_update_`));const outcome={status:succeeded?`succeeded`:confirmedFailure?`failed`:`unconfirmed`,message:succeeded?UPDATE_REPAIR_SUCCEEDED_MESSAGE:confirmedFailure?updateRepairAttentionMessage(operation?.error||saveWorkError.value):`Vibe64 could not confirm this Update result. Check the session's current Update status before trying again.`};if(confirmedFailure&&(saveWorkConflictFailure.value||operation?.conflictRecovery)){const failure=saveWorkFailure.value||operation;const recovery=failure?.details?.conflictRecovery||operation?.conflictRecovery;outcome.recoveryConflictId=recovery?.reviewId||``;if(retryAi){outcome.retryKey=JSON.stringify([failure?.code,recovery?.reviewId||recovery?.canonicalCommit||``,failure?.details?.conflictPaths||saveWorkError.value]);outcome.retryMessage=[`Vibe64 ran Update after the prepared repair, but it did not succeed. The working-tree edits remain. Inspect the current state and repair only the remaining conflicts; do not start over or repeat completed work.`,`Latest Update diagnostic:\n${saveWorkError.value}`,UPDATE_REPAIR_MESSAGES.handoff].join(`
17
17
 
18
18
  `)}}reportRecovery(taskId,outcome);return`repository-update`}function applyResolvedUpdate(task=null,reportRecovery=()=>{}){const review=saveWork.resolvedUpdateReview.value;if(saveWork.updateWorkDisabled.value||repositoryOperationActive.value||props.sessionRenewal?.sourceOperationsSuspended||!review||review.reviewId!==saveWork.updateConflictRecovery.value?.reviewId||task&&(task.sessionId!==sessionId.value||task.recoveryOperation!==`update`||task.busy||[`starting`,`inProgress`].includes(task.status)||[`checking`,`unconfirmed`].includes(task.recoveryOutcome)))return false;saveWork.resolvedUpdateReview.value=null;return verifySessionUpdate(task,reportRecovery,review.reviewId,{retryAi:false})}async function fixPreviewIdentityWithTemporaryAi(input={}){if(!temporaryAiAvailable.value)return false;const identity=input?.identity||{};const identityName=text$1(identity.name)||`the selected identity`;const error=text$1(input?.error);const result=await requestTemporaryAi({completionMessage:`AI repair finished. Try the preview identity again from the sign-in menu.`,dedupeKey:[`preview-identity`,sessionId.value,text$1(identity.type),text$1(identity.value),error].join(`|`),displayMessage:`Fix preview sign-in for ${identityName}.`,failureMessage:`Temporary AI stopped before completing the preview identity repair. Review the error and progress below before trying again.`,message:previewIdentityFixPrompt(input),nextStepMessage:`When the AI finishes, try this preview identity again from the sign-in menu.`,recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,title:`Fix preview identity`});return vibe64RequestAccepted(result)}async function requestRepositoryRepair({code=``,details=[],diagnostic=``,recoveryConflictId=``,retry,subject,title,update=false}){repositoryRecoverySending.value=true;try{const result=await requestTemporaryAi({completionMessage:update?UPDATE_REPAIR_MESSAGES.completion:`AI repair finished. Review its result, then retry ${retry}.`,dedupeKey:repositoryTemporaryAiDedupeKey({code,diagnostic,sessionId:sessionId.value}),displayMessage:`Fix this ${subject} problem without losing work.`,failureMessage:`Temporary AI stopped before completing the ${subject} repair. Review the error and progress below before retrying.`,message:[`Help resolve this Vibe64 ${subject} problem. Inspect the current session and canonical repository state, preserve all work, and do not push until the conflict is understood:`,REPOSITORY_TEMPORARY_AI_GIT_BOUNDARY,...details].join(`
19
19
 
20
20
  `),nextStepMessage:update?UPDATE_REPAIR_MESSAGES.nextStep:`Review the repair, then retry ${retry}.`,recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,recoveryOperation:update?`update`:``,recoveryConflictId,title});return vibe64RequestAccepted(result)}finally{repositoryRecoverySending.value=false}}async function fixRepositoryActionError(){if(repositoryRecoverySending.value||!temporaryAiAvailable.value||!saveWorkCanResolveWithTemporaryAi.value)return false;const action=saveWorkActivityIsUpdate.value?`Update`:`Save`;const update=action===`Update`;return requestRepositoryRepair({code:saveWorkFailure.value?.code,details:[update?UPDATE_REPAIR_MESSAGES.handoff:``,saveWorkError.value].filter(Boolean),diagnostic:saveWorkError.value,recoveryConflictId:saveWorkFailure.value?.details?.conflictRecovery?.reviewId||``,retry:action,subject:action,title:`Resolve ${action}`,update})}async function fixRepositoryError({code=``,error=``,title=`Resolve repository problem`}={}){const diagnostic=text$1(error);const update=[`vibe64_session_update_conflict`,`vibe64_session_update_history_diverged`].includes(code);const incoming=code===`vibe64_incoming_merge_conflict`;if(repositoryRecoverySending.value||!temporaryAiAvailable.value||!diagnostic)return false;return requestRepositoryRepair({code,details:[update?UPDATE_REPAIR_MESSAGES.handoff:``,incoming?`Repair only the listed conflicting files in this receiving session's worktree. Inspect both exact reviewed commits, preserve both sides' intended behavior and all unrelated/staged work. Do not commit, merge, rebase or push. Return to Incoming changes → Review resolved conflicts; only the person's reviewed Merge may integrate this contribution.`:``,diagnostic],diagnostic,recoveryConflictId:update?saveWorkFailure.value?.details?.conflictRecovery?.reviewId||``:``,retry:`the repository operation`,subject:`repository`,title,update})}async function describeSubsystems(){if(!temporaryAiAvailable.value)return false;const result=await requestTemporaryAi({title:`Subsystem map`,dedupeKey:subsystemMapTaskKey.value,displayMessage:`Generate the subsystem map from this application.`,message:[`Create or repair genesis/subsystems.md from the application source, existing Program, and schema. Inspect the repository with your normal tools and preserve substantive existing descriptions and unrelated edits. Responsibilities are full explanations of purpose, scope, main parts and collaboration, not one-line map captions. If boundaries change, transfer the applicable prose and Program assignments to the current directory owners, and revalidate each required main source under its owner.`,`Read .agents/skills/genesis-program/SKILL.md and use its exact subsystem grammar. Resolve the project's Genesis command through its installed skill instructions.`,"Explain meaningful subsystem responsibilities and declare their Program operations and owned/used tables. Each subsystem has one canonical project-relative directory root, recorded in a required ### Source section with one - Directory `path` entry. Cover every indexed source with a declared owner; nested roots own their more specific files. Stack directory-parent rules can inform adoption, but never create a competing owner list. Assign each Program document to exactly one subsystem, allowing its Sources to cite libraries owned elsewhere. UI components can live in the same subsystem as Engine code. Preserve existing stable subsystem ids and responsibility boundaries. Run Genesis inspect subsystems --json on the resulting file and resolve every validation error before claiming success. Creating the file alone is not completion.",`Leave the map as ordinary session changes for review; do not commit, push, or deploy.`].join(`
21
21
 
22
- `),completionMessage:`Subsystem map task finished. Review the map and session changes before saving.`,failureMessage:`The subsystem map task stopped before completion. Review its progress and any partial edits.`,nextStepMessage:`The subsystem view refreshes when this task finishes. File changes remain in the session for review and Save.`});return vibe64RequestAccepted(result)}function reportTemporaryRecovery(taskId,outcome){const workspace=temporaryAiWorkspace?.value;if(!workspace)return false;return outcome.status===`checking`?workspace.persistTaskRecovery?.(taskId,outcome)??false:workspace.reportTaskRecovery?.(taskId,outcome)??false}function reportVerifiedWorkspaceRecovery(){if(!workspaceRecoveryTaskId.value||workspaceSetupStatus.value!==`succeeded`)return false;const reported=temporaryAiWorkspace?.value?.reportTaskRecovery?.(workspaceRecoveryTaskId.value,{message:`Workspace preparation succeeded. Vibe64 independently verified the AI repair.`,status:`succeeded`});if(reported)workspaceRecoveryTaskId.value=``;return Boolean(reported)}async function finishTemporaryAiTask(task={}){const recovery=await handleTemporaryAiTaskFinished(task,reportTemporaryRecovery);if(!recovery)return false;if(recovery===`workspace-setup`){workspaceRecoveryTaskId.value=String(task.id||``).trim();reportVerifiedWorkspaceRecovery()}return true}function checkTemporaryAiUpdate(task){if(saveWork.updateWorkDisabled.value)return false;return handleTemporaryAiTaskFinished(task,reportTemporaryRecovery,{force:true})}watch(()=>[props.workState?.updateOperation,temporaryAiWorkspace?.value?.updateRepairTask],([operation,task])=>{if(!task||task.sessionId!==sessionId.value||!task.recoveryRequestId||operation?.requestId!==task.recoveryRequestId||![`checking`,`unconfirmed`].includes(task.recoveryOutcome))return;if(operation.status===`ready`)reportTemporaryRecovery(task.id,{status:`succeeded`,message:UPDATE_REPAIR_SUCCEEDED_MESSAGE});else if(operation.status===`failed`)reportTemporaryRecovery(task.id,{status:`failed`,message:updateRepairAttentionMessage(operation.error),recoveryConflictId:operation.conflictRecovery?.reviewId||``})},{flush:`post`});watch(workspaceSetupStatus,()=>{reportVerifiedWorkspaceRecovery()});watch(sessionId,()=>{workspaceRecoveryTaskId.value=``});watch([sessionId,projectSlug,actorKey],()=>{workspaceSetupFixTaskId.value=``;checkedUpdateRepairRuns.clear()});return{applyResolvedUpdate,checkTemporaryAiUpdate,describeSubsystems,finishTemporaryAiTask,fixPreviewIdentityWithTemporaryAi,fixRepositoryActionError,fixRepositoryError,fixWorkspaceSetupWithTemporaryAi,handleTemporaryAiTaskFinished,reportTemporaryRecovery,repositoryRecoverySending,systemReloadVersion,workspaceSetupAskDisabled,workspaceSetupFixSending}}function text(value=``){return String(value||``).trim()}function useVibe64WorkspaceSetupActivity(props,{actorKey,dismissals,projectSlug,retryBlocked,sessionId}){const workspaceSetupRetryError=ref(``);const workspaceSetupRetrying=ref(false);const workspaceSetup=computed(()=>{const value=props.session?.workspaceSetup;return value&&typeof value===`object`&&!Array.isArray(value)?value:{}});const workspaceSetupStatus=computed(()=>{const status=text(workspaceSetup.value?.status);if(status===`required`&&[`queued`,`running`,`starting`].includes(text(props.workState?.updateOperation?.status)))return`pending`;return[`ambiguous`,`failed`,`required`,`running`,`succeeded`].includes(status)?status:`unconfigured`});const workspaceSetupActivityKey=computed(()=>{const operationKey=text(workspaceSetup.value?.startedAt||workspaceSetup.value?.updatedAt);return operationKey?`workspace-setup:${operationKey}`:``});const workspaceSetupDismissed=computed(()=>Boolean(workspaceSetupActivityKey.value&&dismissals.state.value.workspaceSetup===workspaceSetupActivityKey.value));const workspaceSetupRunning=computed(()=>[`pending`,`running`].includes(workspaceSetupStatus.value));const workspaceSetupActionVisible=computed(()=>Boolean(sessionId.value&&workspaceSetupStatus.value!==`unconfigured`));const connectedRepositoryCount=computed(()=>{try{return JSON.parse(props.session?.metadata?.connected_sources||`null`)?.sources?.length||0}catch{return 0}});const connectedUpdateActionVisible=computed(()=>workspaceSetupActionVisible.value&&connectedRepositoryCount.value>0);const workspaceSetupNeedsAttention=computed(()=>[`failed`,`ambiguous`,`required`].includes(workspaceSetupStatus.value));const workspaceSetupDiagnostic=computed(()=>workspaceSetupRetryError.value||text(workspaceSetup.value?.diagnostic));const workspaceSetupOutput=computed(()=>text(workspaceSetup.value?.transcript)||workspaceSetupDiagnostic.value);const workspaceSetupTitle=computed(()=>({ambiguous:`Workspace setup needs a choice`,failed:`Workspace preparation failed`,required:`Workspace preparation required`,pending:`Waiting for session update…`,running:`Preparing workspace…`,succeeded:`Workspace prepared`})[workspaceSetupStatus.value]||``);const workspaceSetupCurrentLabel=computed(()=>{if(workspaceSetupStatus.value===`required`)return workspaceSetupDiagnostic.value;if(workspaceSetupStatus.value===`pending`)return`Workspace preparation will start automatically after the update.`;return workspaceSetupRunning.value?text(workspaceSetup.value?.currentLabel):``});const workspaceSetupError=computed(()=>workspaceSetupRetryError.value||(workspaceSetupNeedsAttention.value&&workspaceSetupStatus.value!==`required`?workspaceSetupDiagnostic.value:``));const workspaceSetupRetryDisabled=computed(()=>Boolean(workspaceSetupRunning.value||workspaceSetupRetrying.value||retryBlocked.value||!sessionId.value||props.sessionSelectionArchived));async function retryWorkspaceSetup(){if(workspaceSetupRetryDisabled.value)return false;dismissals.clear(`workspaceSetup`);workspaceSetupRetryError.value=``;workspaceSetupRetrying.value=true;try{return await props.retryWorkspaceSetup()!==false}catch(error){workspaceSetupRetryError.value=text(error?.message||error)||`Workspace preparation could not be started.`;return false}finally{workspaceSetupRetrying.value=false}}function dismissWorkspaceSetupActivity(){return dismissals.dismiss(`workspaceSetup`,workspaceSetupActivityKey.value)}watch([sessionId,projectSlug,actorKey],()=>{workspaceSetupRetryError.value=``});watch(()=>workspaceSetup.value?.updatedAt,()=>{workspaceSetupRetryError.value=``});return{connectedUpdateActionVisible,dismissWorkspaceSetupActivity,retryWorkspaceSetup,workspaceSetup,workspaceSetupActionVisible,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDiagnostic,workspaceSetupDismissed,workspaceSetupError,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}}var NUMBERED_QUESTION_UNSURE_VALUE=`I am not sure`;var NUMBERED_QUESTION_UNSURE_CHOICE=Object.freeze({label:NUMBERED_QUESTION_UNSURE_VALUE,recommended:false,selectLabel:NUMBERED_QUESTION_UNSURE_VALUE,value:NUMBERED_QUESTION_UNSURE_VALUE});function agentConnectionThinkingLabel({active=false,status=`connected`}={}){if(!active||[`connected`,`failed`,`restricted`].includes(status))return``;if(status===`initializing`)return`Loading assistant…`;if(status===`disconnected`)return`Connection lost — assistant status unknown.`;return status===`reconciling`?`Checking assistant status...`:`Assistant status could not be verified.`}function useVibe64AutopilotView(props,emit,{assistantAccessLoading=null,assistantCanUseAi=null,assistantCanRouteChat=null,assistantCanUseFix=null,assistantCanUseNative=null,assistantProgressLabel=null,mainChatApprovals=null,onAttachmentsAccepted=null,requestTemporaryAi=null,temporaryAiWorkspace=null}={}){const router=useRouter();const projectSlug=useVibe64ProjectSlug();const Vibe64OutputControls=defineVibe64AsyncComponent({label:`Launch controls`,loader:()=>__vitePreload(()=>import(`./Vibe64OutputControls-BPDF1XfG.js`),__vite__mapDeps([95,1,2,3,6,5,7,8,9,10,11,19,16,17,18,20,21,22,23,24,37,38,39,40,41,44,25,26,45,46,47,48,49,52,53,81,30,82,63,68,12,13,32,67,69,96,33,59,60,85,35,36,86,15,27,28,29,42,43,83,84,87,88,64,34,65,66,4,70,71,97,72,77,0,14,31,50,51,54,55,56,57,58,61,62,73,74,75,76,78,79,80,89,90,91,92,93,94,98,99,100,101,102,103,104,105,106,107])),minHeight:`10rem`});const agentSettings=computed(()=>props.conversationRuntime?.agentSettings);const preferredName=inject(VIBE64_WELCOME_NAME_KEY,()=>{const accounts=useVibe64Accounts();return computed(()=>accounts.status.value?.personalProfile?.preferredName)},true);const requestAgentSettings=computed(()=>agentSettings.value?.requestSettings.value||null);const sessionId=computed(()=>normalizeText$1(props.session?.sessionId));const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const reportActivity=usePageActivity();const actorKey=computed(()=>unref(viewer)?.actorKey||``);const assistantAccessConfigured=assistantCanUseAi!==null;const assistantAccessPending=computed(()=>assistantAccessConfigured&&unref(assistantAccessLoading)===true);const assistantDirectAllowed=computed(()=>!assistantAccessConfigured||unref(assistantCanUseAi)===true);const assistantFixAllowed=computed(()=>assistantCanUseFix===null?assistantDirectAllowed.value:unref(assistantCanUseFix)===true);const sessionGithubActor=computed(()=>sessionGithubCommandActor(props.session||{}));const sessionGithubActorHeaderVisible=computed(()=>Boolean(props.active&&sessionGithubActor.value.available&&String(props.githubActorTeleportTarget||``).trim()));const sessionSourceRoot=computed(()=>String(props.session?.sourcePath||``));const{activeAgentTurn,agentActive,agentNativeTurnReady,agentObservationLost,agentSteerable,agentWorking,assistantAccountMessage,assistantAccountUnavailable,assistantConnectionReady,composerConnectionStatus,reasoningActive}=useVibe64AgentTurnState(props,{assistantCanRouteChat,projectSlug,reportActivity,sessionId});const chatCollapsed=computed(()=>Boolean(props.chatCollapsed));const sessionToolbarVisible=computed(()=>Boolean(Array.isArray(props.sessionToolbar?.sessions)&&props.sessionToolbar.sessions.length));const approvalMode=computed(()=>mainChatApprovals?.memberMode===true);const approvalOwner=computed(()=>mainChatApprovals?.ownerName||`the owner`);const approvalOwnerSentence=computed(()=>approvalOwner.value.charAt(0).toUpperCase()+approvalOwner.value.slice(1));const lessonTeamAiLabel=computed(()=>mainChatApprovals?.lessonTeamAi===true&&props.session?.assistantSelection?vibe64AssistantSelectionLabel(props.session.assistantSelection):``);const composerKey=computed(()=>JSON.stringify([actorKey.value,projectSlug.value,sessionId.value]));const composerDraft=computed({get:()=>props.conversationRuntime?.draft.value||``,set:value=>{if(props.conversationRuntime)props.conversationRuntime.draft.value=value}});const composerAttachments=computed({get:()=>props.conversationRuntime?.draftAttachments.value||[],set:value=>{if(props.conversationRuntime)props.conversationRuntime.draftAttachments.value=value}});const composerRetrySubmission=computed(()=>props.conversationRuntime?.draftRetry.value||null);const messageDelivery=computed(()=>props.conversationRuntime?.delivery||null);const composerSending=computed(()=>messageDelivery.value?.state.sending===true);const composerQueueing=computed(()=>props.conversationRuntime?.queueWhileSending.value===true);const composerStartupQueueing=computed(()=>composerQueueing.value&&composerSending.value&&activeAgentTurn.value.state===`starting`&&!agentObservationLost.value);const composerSubmissionKind=ref(``);const routingRequest=computed(()=>assistantRoutingRequestForDisplay(props.session?.metadata));const routingBusy=computed(()=>assistantRoutingStatusIsPending(routingRequest.value)&&!assistantRoutingRequestCanBeReplaced(routingRequest.value,props.session?.assistantSelection));const composerRoutingQueueing=computed(()=>composerQueueing.value&&composerSending.value&&Boolean(routingRequest.value?.messageId)&&messageDelivery.value?.find(routingRequest.value.messageId)?.status===`pending`);const interrupting=ref(false);const previewAttachmentState=ref({attachDiagnostics:null,capture:null,captureAvailable:false,captureBusy:false,diagnosticsAvailable:false,diagnosticsBusy:false});const dismissals=useVibe64ShortActionDismissals(projectSlug,sessionId);const checkpointTask=computed(()=>(props.session?.backgroundTasks||[]).find(task=>task.id===`codex_turn_checkpoint`&&task.status===`failed`));const checkpointFailure=computed(()=>checkpointTask.value?.error||``);const checkpointFailureKey=computed(()=>checkpointFailure.value?JSON.stringify([checkpointTask.value.checkpointTurnId,checkpointTask.value.updatedAt,checkpointFailure.value]):``);const checkpointFailureVisible=computed(()=>Boolean(checkpointFailure.value&&dismissals.state.value.checkpoint!==checkpointFailureKey.value));const checkpointFailureReason=computed(()=>/\bSIG(?:TERM|KILL|INT)\b/u.test(checkpointFailure.value)?`The snapshot command was interrupted.`:`Vibe64 could not create a recovery snapshot for an assistant turn.`);function dismissCheckpointFailure(){return dismissals.dismiss(`checkpoint`,checkpointFailureKey.value)}const questionState=useAssistantQuestions({message:()=>latestAssistantMessageAwaitingUserReply(props.conversationLog),extraChoice:NUMBERED_QUESTION_UNSURE_CHOICE});const{answers:questionAnswers,choice:selectedAnswerChoice,questions:numberedQuestions,selectItems:numberedQuestionSelectItems,choices:answerChoices,active:structuredQuestionActive,dismiss:dismissNumberedQuestions}=questionState;const repositoryOperationActive=computed(()=>[props.workState?.operation,props.workState?.updateOperation].some(operation=>[`queued`,`running`,`starting`].includes(String(operation?.status||``).trim().toLowerCase())));const sessionInteractionDisabled=computed(()=>Boolean(!props.active||!sessionId.value||props.sessionSelectionArchived));const composerDisabled=computed(()=>Boolean(sessionInteractionDisabled.value||!approvalMode.value&&!assistantDirectAllowed.value));const composerAttachmentsSupported=computed(()=>!approvalMode.value);const composerAttachmentsEnabled=computed(()=>Boolean(composerAttachmentsSupported.value&&!composerDisabled.value&&!composerSending.value&&!interrupting.value&&(!agentActive.value||agentSteerable.value)&&!repositoryOperationActive.value));const composerRetryMatchesDraft=computed(()=>props.conversationRuntime?.draftRetryMatches.value===true);const composerSubmitMode=computed(()=>{if(approvalMode.value)return mainChatApprovals.sending?`approval-sending`:`approval`;if(assistantAccountUnavailable.value)return`unavailable`;if(composerConnectionStatus.value===`initializing`)return`initializing`;if(composerConnectionStatus.value===`failed`)return`failed`;if(composerConnectionStatus.value!==`connected`)return`reconnecting`;if(routingBusy.value&&!agentActive.value&&!composerRoutingQueueing.value)return`routing`;if(agentActive.value&&(!agentNativeTurnReady.value&&!composerStartupQueueing.value||!agentSteerable.value&&!composerQueueing.value))return`waiting`;if(composerSending.value&&!composerQueueing.value)return composerSubmissionKind.value===`steer`?`steering`:`sending`;if(agentSteerable.value)return composerRetryMatchesDraft.value?`retry`:`steer`;return composerRetryMatchesDraft.value?`retry`:`send`});const composerSubmitAriaLabel=computed(()=>({approval:`Send to ${approvalOwner.value} for approval`,"approval-sending":`Sending to ${approvalOwner.value} for approval`,routing:`Preparing the message recipient`,failed:`Assistant unavailable`,unavailable:`Connect your AI account to send messages`,initializing:`Waiting for the assistant to load`,reconnecting:`Waiting for the connection to recover`,retry:`Retry guidance to assistant`,sending:`Sending message`,steer:`Steer assistant`,steering:`Sending guidance to assistant`,waiting:`Waiting for the assistant to accept guidance`})[composerSubmitMode.value]||`Send message`);const composerSubmitTitle=computed(()=>({approval:`${approvalOwnerSentence.value} approves each message before it reaches main chat`,"approval-sending":`Keep typing while this message is sent for approval`,routing:`Keep typing while this request is routed`,failed:`Resolve the assistant startup error, then retry. Your draft is kept.`,unavailable:`Go to AI Accounts to connect your assistant. Your draft is kept.`,initializing:`Keep typing while the assistant loads`,reconnecting:`Your draft is kept while the connection recovers`,retry:`Retry the same guidance without duplicating it`,sending:`Keep typing while this message is sent`,steer:`Send this guidance to the active assistant turn`,steering:`Keep typing while this guidance is sent`,waiting:`Keep typing while the assistant becomes ready`})[composerSubmitMode.value]||`Send message`);const composerCanSubmit=computed(()=>{if(approvalMode.value)return!composerDisabled.value&&!mainChatApprovals.sending&&Boolean(composerDraft.value.trim());if(!props.conversationRuntime?.canSubmit.value||composerDisabled.value||routingBusy.value&&!agentSteerable.value&&!composerRoutingQueueing.value)return false;if(composerConnectionStatus.value!==`connected`||composerSending.value&&!composerQueueing.value||interrupting.value||repositoryOperationActive.value||agentActive.value&&(!agentNativeTurnReady.value&&!composerStartupQueueing.value||!agentSteerable.value&&(!composerQueueing.value||composerAttachments.value.length>0)))return false;if(numberedQuestions.value.length)return numberedQuestions.value.every(question=>String(questionAnswers.value[question.name]||``).trim());return Boolean(answerChoices.value.length&&selectedAnswerChoice.value||composerDraft.value.trim())});const agentStopVisible=computed(()=>agentActive.value||routingBusy.value);const agentStopEnabled=computed(()=>Boolean(agentStopVisible.value&&!interrupting.value&&(!composerSending.value||routingBusy.value||!agentSteerable.value&&composerQueueing.value)));const connectionRecoveryVisible=computed(()=>!sessionInteractionDisabled.value&&[`disconnected`,`unknown`,`reconciling`,`unavailable`,`failed`].includes(composerConnectionStatus.value));const thinkingVisible=computed(()=>Boolean(!assistantAccountUnavailable.value&&(agentActive.value||composerSending.value||!assistantConnectionReady.value&&![`failed`,`restricted`].includes(composerConnectionStatus.value)&&!sessionInteractionDisabled.value)));const thinkingLabel=computed(()=>(agentObservationLost.value&&agentActive.value?`Assistant stop not yet confirmed`:``)||agentConnectionThinkingLabel({active:!sessionInteractionDisabled.value,status:composerConnectionStatus.value})||(agentActive.value&&activeAgentTurn.value.phase===`compacting`?`Compacting conversation context…`:``)||(agentActive.value&&activeAgentTurn.value.phase===`background`?`Reply ready · background task still running…`:``)||(unref(props.conversationRuntime?.phase)===`compacting`?`Summarising the assistant's memory before sending…`:``)||(agentActive.value?unref(assistantProgressLabel):``)||(agentActive.value?`Assistant is working...`:``)||(composerSending.value?`Sending to assistant...`:``));const composerHint=computed(()=>approvalMode.value?`Main chat runs on ${approvalOwner.value}'s AI. ${approvalOwnerSentence.value} approves each message.`:lessonTeamAiLabel.value?`This lesson runs on the team AI: ${lessonTeamAiLabel.value}. Only you see this chat.`:agentObservationLost.value?agentActive.value?`The stop is not yet confirmed. Your draft is kept; you can retry Stop.`:`The assistant stopped because its progress could not be tracked. Send a message to continue.`:structuredQuestionActive.value?`Answer the assistant, then send one combined reply.`:``);const composerPlaceholder=computed(()=>approvalMode.value?`Message main chat — ${approvalOwner.value} approves before it's sent`:lessonTeamAiLabel.value?`Message your lesson's AI — ${lessonTeamAiLabel.value} (team AI)`:numberedQuestions.value.length?`Optional additional context…`:answerChoices.value.length?`Choose an answer above, or type another answer…`:``);const saveWork=useVibe64SessionSaveWork(props,{actorKey,agentActive,composerSending,dismissals,projectSlug,reportActivity,repositoryOperationActive,sessionId,sessionInteractionDisabled});const workspaceSetupActivity=useVibe64WorkspaceSetupActivity(props,{actorKey,dismissals,projectSlug,retryBlocked:computed(()=>Boolean(repositoryOperationActive.value||saveWork.saveWorkSending.value||saveWork.saveWorkOperationActive.value||agentActive.value)),sessionId});const temporaryAiRepairs=useVibe64TemporaryAiRepairs(props,{actorKey,assistantFixAllowed,projectSlug,repositoryOperationActive,requestTemporaryAi,saveWork,sessionId,temporaryAiWorkspace,workspaceSetupActivity});function updateComposerAttachments(attachments=[]){composerAttachments.value=Array.isArray(attachments)?attachments:[]}function updatePreviewAttachmentState(state={}){previewAttachmentState.value={attachDiagnostics:typeof state.attachDiagnostics===`function`?state.attachDiagnostics:null,capture:typeof state.capture===`function`?state.capture:null,captureAvailable:state.captureAvailable===true,captureBusy:state.captureBusy===true,diagnosticsAvailable:state.diagnosticsAvailable===true,diagnosticsBusy:state.diagnosticsBusy===true}}function captureVisiblePreview(){return previewAttachmentState.value.capture?.()??false}function attachPreviewDiagnostics(){return previewAttachmentState.value.attachDiagnostics?.()??false}async function requestAgentInterrupt(){if(!agentStopEnabled.value)return false;const stoppingSessionId=sessionId.value;const stoppingProjectSlug=projectSlug.value;const stoppingTurnId=normalizeText$1(activeAgentTurn.value.id);interrupting.value=true;let acknowledgeStop;const receipt=new Promise(resolve=>{acknowledgeStop=resolve});const stopWatchingReceipt=watch([sessionId,projectSlug,()=>activeAgentTurn.value.id,()=>activeAgentTurn.value.active],([currentSessionId,currentProjectSlug,turnId,active])=>{if(currentSessionId!==stoppingSessionId||currentProjectSlug!==stoppingProjectSlug)acknowledgeStop(false);else if(stoppingTurnId&&normalizeText$1(turnId)===stoppingTurnId&&active===false)acknowledgeStop(true)});try{return await Promise.race([props.interruptAgentTurn({reason:`user_interrupt`}),receipt])!==false}finally{stopWatchingReceipt();if(sessionId.value===stoppingSessionId&&projectSlug.value===stoppingProjectSlug)interrupting.value=false}}const chatPane=useVibe64AutopilotChatPane(props,{composerSending,messageDelivery,preferredName,routingRequest,sessionId,workspaceSetupStatus:workspaceSetupActivity.workspaceSetupStatus});const sessionToolPane=useVibe64SessionToolPane(props,emit,{actorKey,assistantAccessPending,assistantCanUseNative,assistantDirectAllowed,projectSlug,requestSaveWork:saveWork.requestSaveWork,sessionId,sessionSourceRoot});function integrationRequestAllowed(request){return Boolean(props.active&&!props.sessionSelectionArchived&&request.sessionId===sessionId.value)}function runIntegrationRequest({action,...request}){if(!integrationRequestAllowed(request))return false;return props.conversationLog?.[`${action}IntegrationRequest`]?.(request)||false}function openIntegrationRequest(request){if(!integrationRequestAllowed(request))return;router.push({path:projectAppPath(projectSlug.value,`/dashboard/integrations`),query:{integration:request.integrationId,integrationSession:sessionId.value,integrationTurn:request.turnId,integrationRequest:request.requestId}});emit(`project-attention`)}const assistantDraftAvailable=computed(()=>Boolean(props.active&&sessionId.value&&!props.sessionSelectionArchived&&assistantDirectAllowed.value));function prefillComposer(text=``,{append=false}={}){const prompt=normalizeText$1(text);if(!prompt||!assistantDraftAvailable.value)return false;composerDraft.value=append&&composerDraft.value.trim()?`${composerDraft.value}\n\n${prompt}`:prompt;emit(append?`chat-attention`:`project-attention`);return true}function askAssistantAboutFile(path=``){const normalizedPath=normalizeText$1(path);return normalizedPath?prefillComposer(`Please look at \`${normalizedPath}\` and help me with this file.`):false}watch([sessionId,projectSlug,actorKey],()=>{composerSubmissionKind.value=``;interrupting.value=false;questionState.reset()});const delivery=useVibe64MainChatDelivery(props,emit,{actorKey,agentSteerable,approvalMode,composerAttachments,composerCanSubmit,composerDraft,composerQueueing,composerRetryMatchesDraft,composerRetrySubmission,composerSending,composerSubmissionKind,mainChatApprovals,messageDelivery,onAttachmentsAccepted,projectSlug,questionState,reportActivity,requestAgentSettings,routingRequest,sessionId});watch(()=>Boolean(agentActive.value||composerSending.value||interrupting.value||saveWork.saveWorkSending.value),busy=>{emit(`busy-change`,busy)},{immediate:true});return{...saveWork,...workspaceSetupActivity,...temporaryAiRepairs,...sessionToolPane,...chatPane,...delivery,Vibe64OutputControls,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,attachPreviewDiagnostics,captureVisiblePreview,chatCollapsed,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,routingBusy,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,dismissNumberedQuestions,interrupting,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,previewAttachmentState,projectSlug,questionAnswers,repositoryOperationActive,requestAgentInterrupt,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,structuredQuestionActive,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState}}var vibe64AutopilotViewEmits=[`busy-change`,`chat-attention`,`execution-attention`,`project-attention`];var vibe64AutopilotViewProps={active:{default:true,type:Boolean},agentConnectionError:{default:``,type:String},agentConnectionStatus:{default:`connected`,type:String},retryAgentConnection:{default:()=>{},type:Function},chatCollapsed:{default:false,type:Boolean},cancelAgentMessage:{default:async()=>false,type:Function},conversationRuntime:{required:true,type:Object},conversationLog:{default:()=>({}),type:Object},githubActorTeleportTarget:{default:``,type:String},createSessionTeleportTarget:{default:``,type:String},interruptAgentTurn:{default:async()=>false,type:Function},page:{default:()=>({}),type:Object},previewToolbarTeleportTarget:{default:``,type:String},usageRecordingTeleportTarget:{default:``,type:String},promptHintPolicy:{default:()=>({enabled:true,ready:false,revision:0,version:0}),type:Object},projectContext:{default:()=>({}),type:Object},projectPane:{default:`preview`,type:String},refreshSessionData:{default:async()=>null,type:Function},refreshSessionWork:{default:async()=>null,type:Function},retryWorkspaceSetup:{default:async()=>false,type:Function},saveSessionWork:{default:async()=>false,type:Function},updateSessionWork:{default:async()=>false,type:Function},sendAgentMessage:{default:async()=>false,type:Function},session:{default:null,type:Object},sessionArchive:{default:()=>({}),type:Object},sessionRenewal:{default:()=>({}),type:Object},sessionSelectionArchived:{default:false,type:Boolean},sessionsApiPath:{default:``,type:[String,Object,Function]},sessionToolbar:{default:()=>({}),type:Object},workState:{default:()=>({}),type:Object}};var _hoisted_1$19=[`title`];var _sfc_main$21={__name:`Vibe64AutopilotView`,props:vibe64AutopilotViewProps,emits:vibe64AutopilotViewEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const learning=useVibe64Learning();const lessonShown=computed(()=>learning.lessonShown);const resourceRecoveryControl=inject(VIBE64_RESOURCE_RECOVERY_KEY,null);const usageOpenRequest=ref(null);watch(()=>props.session?.sessionId,()=>{usageOpenRequest.value=null});const sourceOperationsSuspended=computed(()=>props.sessionRenewal?.sourceOperationsSuspended===true);const composerInput=ref(null);const mainChat=ref(null);const approvalsPanel=ref(null);const{xs:phoneLayout}=useDisplay();const temporaryAiWorkspace=ref(null);const testApproval=ref(null);function updateTestApproval(value){if(value.sessionId===props.session?.sessionId)testApproval.value=value.approval}watch(()=>props.session?.sessionId,()=>{testApproval.value=null});const selectedAssistantSessionId=computed(()=>String(props.session?.sessionId||``).trim());const openCodeProgressLabel=ref(``);const openCodeProviderLabel=computed(()=>vibe64ProviderPresentation(props.session?.assistantSelection).label||`OpenCode`);function visibleOpenCodeProgressLabel(progress={}){if(String(progress.tool||``).trim())return`${openCodeProviderLabel.value} is using a tool…`;if(String(progress.partType||``).trim()===`reasoning`||String(progress.type||``).includes(`reasoning`))return`${openCodeProviderLabel.value} is reasoning…`;if(String(progress.text||``).trim())return`${openCodeProviderLabel.value} is writing…`;return`${openCodeProviderLabel.value} is working…`}useRealtimeEvent({enabled:computed(()=>Boolean(props.active&&!props.sessionSelectionArchived&&selectedAssistantSessionId.value&&props.session?.assistantSelection?.engineId===`opencode`)),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(String(payload.sessionId||payload.entityId||``).trim()===selectedAssistantSessionId.value&&(payload.assistantProgress||[`opencode-server-message-delivered`,`opencode-server-turn-active`,`opencode-server-turn-idle`].includes(payload.reason))),onEvent:({payload={}}={})=>{openCodeProgressLabel.value=payload.reason===`opencode-server-turn-idle`?``:visibleOpenCodeProgressLabel(payload.assistantProgress||{})}});watch([selectedAssistantSessionId,()=>props.session?.assistantSelection?.engineId],()=>{openCodeProgressLabel.value=``},{immediate:true});const{resource:modelRoutingResource}=useModelRouting({view:`main`,enabled:computed(()=>!props.sessionSelectionArchived&&Boolean(selectedAssistantSessionId.value))});const assistantCanConfigureRouting=computed(()=>modelRoutingResource.data.value?.canConfigure===true);const assistantAccessError=computed(()=>props.conversationRuntime.access.accessError.value);const assistantCanUseAiState=computed(()=>props.conversationRuntime.access.canUseChat.value);const assistantCanRouteChat=computed(()=>props.conversationRuntime.access.canRouteChat.value);const assistantCanUseNative=computed(()=>props.conversationRuntime.access.canUseNative.value);const assistantPurposes=computed(()=>props.conversationRuntime.access.purposes.value);const assistantAccessScopeKey=computed(()=>props.conversationRuntime.access.scopeKey.value);const assistantAccessLoading=computed(()=>props.conversationRuntime.access.initialAccessLoading.value);const assistantRestrictionMessage=computed(()=>mainChatApprovals.memberMode?``:props.conversationRuntime.access.restrictionMessage.value);const assistantCanUsePurpose=purpose=>props.conversationRuntime.access.canUsePurpose(purpose);const reloadAssistantAccess=()=>props.conversationRuntime.access.reload();const mainChatApprovals=reactive(useVibe64MainChatApprovals({active:()=>props.active&&!props.sessionSelectionArchived,projectSlug:useVibe64ProjectSlug(),sessionId:selectedAssistantSessionId,sessionsApiPath:()=>readRefOrGetterValue(props.sessionsApiPath),onReview(reviewedSessionId){if(reviewedSessionId&&reviewedSessionId!==selectedAssistantSessionId.value)props.sessionToolbar?.selectSession?.(reviewedSessionId);nextTick(revealApprovals)}}));const autopilotView=useVibe64AutopilotView(props,emit,{assistantAccessLoading,assistantCanUseAi:assistantCanUseAiState,assistantCanRouteChat,assistantCanUseFix:computed(()=>assistantCanUsePurpose(`fix`)),assistantCanUseNative,assistantProgressLabel:openCodeProgressLabel,mainChatApprovals,onAttachmentsAccepted:attachmentIds=>composerInput.value?.clearAttachments?.({attachmentIds}),requestTemporaryAi:startTemporaryAiTask,temporaryAiWorkspace});const{agentActive,assistantDirectAllowed,assistantDraftAvailable,assistantFixAllowed,chatCollapsed,dashboardSessionContext,fixRepositoryError,openSourceEditorFile,prefillComposer,projectSlug,selectSessionTool,sessionGithubActor,sessionGithubActorHeaderVisible,sessionId,sourceEditorOpenRequest}=autopilotView;function openUsage({entryId=``,mode=`recording`,recordingId=``}={}){if(!selectSessionTool(`system`))return;usageOpenRequest.value={view:`usage`,mode,...recordingId?{recordingId}:{},...entryId?{entryId}:{},nonce:(usageOpenRequest.value?.nonce||0)+1}}const fileBookmarks=useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath:()=>props.sessionsApiPath});function revealApprovals(){if(phoneLayout.value){approvalsPanel.value?.open();return}mainChat.value?.querySelector(`.vibe64-approvals`)?.scrollIntoView({block:`nearest`,behavior:`smooth`})}watch(agentActive,active=>{if(!active)openCodeProgressLabel.value=``},{flush:`sync`,immediate:true});const createPullRequestOpen=ref(false);const sessionPullRequest=computed(()=>vibe64SessionPullRequest(props.session));const sessionPullRequestTarget=computed(()=>sessionPullRequest.value?.number?{path:projectAppPath(projectSlug.value,`/dashboard/pull-requests`),query:{pr:String(sessionPullRequest.value.number)}}:void 0);const githubProject=computed(()=>githubProjectAvailable(props.projectContext));const assistantFixRestrictionMessage=computed(()=>assistantPurposes.value.fix?.message||`Fix it with AI is unavailable. Review Models.`);const dashboardContext=computed(()=>({...dashboardSessionContext.value||{},assistantDirectAllowed:assistantDirectAllowed.value,assistantDraftAvailable:assistantDraftAvailable.value,assistantFixAllowed:assistantFixAllowed.value,assistantFixRestrictionMessage:assistantFixRestrictionMessage.value,assistantRestrictionMessage:assistantRestrictionMessage.value,requestAssistantDraft:text=>prefillComposer(text,{append:true}),requestUpdateWork:props.updateSessionWork,requestTemporaryAi:fixRepositoryError,sourceOperationsSuspended:sourceOperationsSuspended.value}));async function startTemporaryAiTask(options={}){if(!assistantCanUsePurpose(`fix`)||props.sessionSelectionArchived)return false;emit(`chat-attention`);const workspace=temporaryAiWorkspace.value;if(typeof workspace?.startTask!==`function`)return false;return workspace.startTask(options)}function requestSessionRenewal(returnFocusTarget=null){props.sessionRenewal?.request?.({returnFocusTarget:returnFocusTarget?.$el||returnFocusTarget});return true}function openWorkingFile(path){if(typeof path!==`string`||!path)return false;openSourceEditorFile({path,presentation:`code`});return sourceEditorOpenRequest.value?.path===path}const view={...autopilotView,approvalsPanel,assistantAccessError,assistantAccessLoading,assistantAccessScopeKey,assistantCanConfigureRouting,assistantCanUsePurpose,assistantFixRestrictionMessage,assistantPurposes,assistantRestrictionMessage,composerInput,createPullRequestOpen,dashboardContext,emit,fileBookmarks,githubProject,lessonShown,mainChat,mainChatApprovals,openUsage,openWorkingFile,phoneLayout,props,reloadAssistantAccess,requestSessionRenewal,resourceRecoveryControl,revealApprovals,selectedAssistantSessionId,sessionPullRequest,sessionPullRequestTarget,sourceOperationsSuspended,startTemporaryAiTask,temporaryAiWorkspace,testApproval,updateTestApproval,usageOpenRequest};const assistantHost=inject(VIBE64_ASSISTANT_HOST_KEY,null);const assistantLayerSelected=computed(()=>props.active&&!props.sessionSelectionArchived&&!temporaryAiWorkspace.value?.visible);const assistantLayer=reactive({get sessionId(){return sessionId.value}});watchEffect(()=>{if(!assistantHost)return;if(assistantLayerSelected.value)assistantHost.value=assistantLayer;else if(assistantHost.value===assistantLayer)assistantHost.value=null},{flush:`sync`});onBeforeUnmount(()=>{if(assistantHost?.value===assistantLayer)assistantHost.value=null});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`studio-autopilot`,{"studio-autopilot--chat-collapsed":unref(chatCollapsed)}])},[unref(sessionGithubActorHeaderVisible)?(openBlock(),createBlock(Teleport,{key:0,to:props.githubActorTeleportTarget},[createBaseVNode(`div`,{class:normalizeClass([`studio-home-shell-session-github-actor`,{"studio-home-shell-session-github-actor--inactive":!unref(sessionGithubActor).active}]),role:`status`,title:unref(sessionGithubActor).title},[createVNode(VIcon,{icon:unref(mdiGithub),size:`14`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(unref(sessionGithubActor).displayLabel),1)],10,_hoisted_1$19)],8,[`to`])):createCommentVNode(``,true),props.active&&props.usageRecordingTeleportTarget&&unref(sessionId)?(openBlock(),createBlock(Teleport,{key:1,to:props.usageRecordingTeleportTarget,defer:``},[createVNode(unref(Vibe64UsageRecordingIndicator_default),{"session-id":unref(sessionId),onOpenUsage:openUsage},null,8,[`session-id`])],8,[`to`])):createCommentVNode(``,true),githubProject.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:2,modelValue:createPullRequestOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>createPullRequestOpen.value=$event),"dashboard-context":dashboardContext.value},null,8,[`modelValue`,`dashboard-context`])):createCommentVNode(``,true),createBaseVNode(`section`,{ref_key:`mainChat`,ref:mainChat,class:`studio-autopilot__chat-panel`,"aria-label":`Session chat`,tabindex:`-1`},[createVNode(Vibe64AutopilotSessionHeader_default,{view}),createVNode(Vibe64AutopilotActivity_default,{view}),createVNode(Vibe64AutopilotChat_default,{view})],512),createVNode(Vibe64AutopilotProjectPanel_default,{view},{dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,`dashboard`,normalizeProps(guardReactiveProps(dashboardSlotProps)),void 0,true)]),"ai-terminal":withCtx(terminalSlotProps=>[renderSlot(_ctx.$slots,`ai-terminal`,normalizeProps(guardReactiveProps(terminalSlotProps)),void 0,true)]),_:3}),createVNode(_sfc_main$35,{view})],2)}}};var Vibe64AutopilotView_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-246e6eb1`]]);var _sfc_main$20={__name:`Vibe64InteractiveTerminal`,props:{closeLabel:{default:`Close terminal`,type:String},closeOnCleanExit:{default:true,type:Boolean},commandPreview:{default:``,type:String},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},fill:{default:true,type:Boolean},height:{default:`100%`,type:String},presentation:{default:`inline`,type:String},showClose:{default:true,type:Boolean},showCopy:{default:true,type:Boolean},showInterrupt:{default:true,type:Boolean},stage:{default:``,type:String},status:{default:``,type:String},subtitle:{default:``,type:String},terminal:{required:true,type:Object},title:{default:`Interactive terminal`,type:String},visible:{default:false,type:Boolean}},emits:[`clean-exit`,`close`,`copy`,`interrupt`,`retry`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const forwardedSlots=[`actions-after`,`actions-before`,`before-terminal`,`error-actions`,`footer`,`heading`,`overlay`];function terminalValue(name,fallback=null){const value=unref(props.terminal?.[name]);return typeof value===`undefined`?fallback:value}watch(()=>[String(terminalValue(`terminalSessionId`,``)),String(terminalValue(`terminalStatus`,props.status)||``),terminalValue(`terminalExitCode`,null)],([terminalSessionId,status,exitCode],previous=[])=>{const previousStatus=String(previous[1]||``);if(props.closeOnCleanExit&&terminalSessionId&&status===`exited`&&[`closing`,`running`].includes(previousStatus)&&(exitCode===null||Number(exitCode)===0))emit(`clean-exit`,{terminalSessionId})});return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64Terminal_default,{"close-label":__props.closeLabel,collapsible:false,"command-preview":__props.commandPreview,error:__props.error,"error-title":__props.errorTitle,expanded:true,fill:__props.fill,height:__props.height,"mobile-takeover":``,presentation:__props.presentation,"show-close":__props.showClose,"show-copy":__props.showCopy,"show-interrupt":__props.showInterrupt,stage:__props.stage,status:__props.status,subtitle:__props.subtitle,terminal:__props.terminal,title:__props.title,visible:__props.visible,onClose:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`close`)),onCopy:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`copy`,$event)),onInterrupt:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`interrupt`)),onRetry:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`retry`))},createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})))])}})]),1032,[`close-label`,`command-preview`,`error`,`error-title`,`fill`,`height`,`presentation`,`show-close`,`show-copy`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`title`,`visible`])}}};var _hoisted_1$18={class:`vibe64-agent-terminal-drop-overlay`,"aria-live":`polite`,role:`status`};var _sfc_main$19={__name:`Vibe64AgentTerminalDropOverlay`,props:{label:{required:true,type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$18,[createVNode(VSheet,{class:`vibe64-agent-terminal-drop-overlay__card`,elevation:`4`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiPaperclip),size:`28`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.label),1)]),_:1})])}}};var Vibe64AgentTerminalDropOverlay_default=_plugin_vue_export_helper_default(_sfc_main$19,[[`__scopeId`,`data-v-2d9e2b1e`]]);var _hoisted_1$17={class:`vibe64-agent-terminal-start-panel`};var _hoisted_2$13={class:`vibe64-agent-terminal-start-panel__icon`};var _hoisted_3$13={class:`vibe64-agent-terminal-start-panel__copy`};var _sfc_main$18={__name:`Vibe64AgentTerminalStartPanel`,props:{actionText:{default:``,type:String},actionVisible:{default:true,type:Boolean},icon:{required:true,type:String},message:{default:``,type:String},starting:{default:false,type:Boolean},title:{default:``,type:String}},emits:[`start`],setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$17,[createVNode(VSheet,{class:`vibe64-agent-terminal-start-panel__card`,elevation:`4`,role:`status`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$13,[createVNode(VIcon,{icon:__props.icon,size:`30`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_3$13,[createBaseVNode(`strong`,null,toDisplayString(__props.title),1),createBaseVNode(`span`,null,toDisplayString(__props.message),1)]),__props.actionVisible?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.starting?`true`:void 0,class:`vibe64-agent-terminal-start-panel__action`,color:`primary`,disabled:__props.starting,"prepend-icon":__props.icon,variant:`flat`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`start`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.actionText),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`])):createCommentVNode(``,true)]),_:1})])}}};var Vibe64AgentTerminalStartPanel_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-e1543fc7`]]);function useVibe64AgentTerminalDisplay(props,serverTerminalId){const displayActive=computed(()=>props.visible&&props.displayMode!==`headless`);const hiddenListenActive=computed(()=>Boolean(props.listenWhenHidden&&serverTerminalId.value&&!displayActive.value));const streamActive=computed(()=>displayActive.value||hiddenListenActive.value);return{displayActive,presentation:computed(()=>displayActive.value?`inline`:`headless`),streamActive}}function vibe64ServerAgentTerminal(session=null){const terminal=session?.agentSession?.terminal;return terminal&&typeof terminal===`object`&&!Array.isArray(terminal)?terminal:{}}var STALE_OPERATION_CODES=new Set([`vibe64_stale_command_start`]);function plainObject$1(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function responseDetails(source={}){return plainObject$1(source.details)}function responseCode(source={}){return String(source?.code||source?.errors?.[0]?.code||responseDetails(source).code||``).trim()}function responseStatus(source={}){const value=source?.status??source?.statusCode??responseDetails(source).status??responseDetails(source).statusCode??null;if(value==null||value===``)return null;const number=Number(value);return Number.isFinite(number)?number:null}function responseOperationOutcome(source={}){return String(source?.operationOutcome||responseDetails(source).operationOutcome||``).trim()}function responseRefreshRecommended(source={}){return source?.refreshRecommended===true||responseDetails(source).refreshRecommended===true}function isVibe64StaleOperation(source={}){const code=responseCode(source);const operationOutcome=responseOperationOutcome(source);if(responseRefreshRecommended(source))return true;if(operationOutcome===`stale_operation`)return true;if(operationOutcome===`state_rejected`&&STALE_OPERATION_CODES.has(code))return true;return responseStatus(source)===409&&STALE_OPERATION_CODES.has(code)}function vibe64StaleOperationResult(source={}){const stale=isVibe64StaleOperation(source);const operationOutcome=responseOperationOutcome(source);return{code:responseCode(source),ok:false,operationOutcome:operationOutcome||(stale?`stale_operation`:``),refreshRecommended:responseRefreshRecommended(source)||stale,stale:true,status:responseStatus(source)}}function plainObject(value={}){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function normalizedId(value=``){return String(value||``).trim()}function commandMissingResponse(message){return{error:message,ok:false}}function useVibe64TerminalCommands(){const paths=usePaths();const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const startTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`POST`,path:String(context.path||``)}),buildRawPayload:(_model,{context})=>plainObject(context.payload),fallbackRunError:`Terminal failed to start.`,messages:{error:`Terminal failed to start.`},onRunError:async error=>{if(isVibe64StaleOperation(error))throw vibe64StaleOperationResult(error)},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.start`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});const closeTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`DELETE`,path:String(context.path||``)}),fallbackRunError:`Terminal could not close.`,messages:{error:`Terminal could not close.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.close`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`DELETE`});const writeTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`POST`,path:String(context.path||``)}),buildRawPayload:(_model,{context})=>({attachmentIds:Array.isArray(context.attachmentIds)?context.attachmentIds:[],text:String(context.text||``)}),fallbackRunError:`Terminal input could not be sent.`,messages:{error:`Terminal input could not be sent.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.write`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});async function runStart(path,payload={}){return await startTerminalCommand.run({path,payload})}async function runClose(path){return await closeTerminalCommand.run({path})}async function startAgentTerminal(sessionId=``){const normalizedSessionId=normalizedId(sessionId);if(!normalizedSessionId)return commandMissingResponse(`Vibe64 session id is required.`);return await runStart(vibe64AgentTerminalPath(sessionsApiPath.value,normalizedSessionId),vibe64RealtimeOriginPayload())}async function closeAgentTerminal(sessionId=``,terminalSessionId=``){const normalizedSessionId=normalizedId(sessionId);const normalizedTerminalSessionId=normalizedId(terminalSessionId);if(!normalizedSessionId||!normalizedTerminalSessionId)return commandMissingResponse(`AI terminal id is required.`);return await runClose(vibe64AgentTerminalPath(sessionsApiPath.value,normalizedSessionId,normalizedTerminalSessionId))}async function sendAgentTerminalText(sessionId=``,terminalSessionId=``,text=``,{attachmentIds=[]}={}){const normalizedSessionId=normalizedId(sessionId);const normalizedTerminalSessionId=normalizedId(terminalSessionId);const normalizedText=String(text||``);if(!normalizedSessionId||!normalizedTerminalSessionId||!normalizedText)return commandMissingResponse(`AI terminal id and input are required.`);return await writeTerminalCommand.run({attachmentIds:Array.isArray(attachmentIds)?attachmentIds.map(normalizedId).filter(Boolean):[],text:normalizedText,path:vibe64AgentTerminalControlTextPath(sessionsApiPath.value,normalizedSessionId,normalizedTerminalSessionId)})}return{closeAgentTerminal,closeTerminalCommand,sendAgentTerminalText,startAgentTerminal,startTerminalCommand,writeTerminalCommand}}function useVibe64CodexCommands(){return{...useVibe64TerminalCommands(),...useVibe64AttachmentCommands()}}function attachmentPathForTerminal(attachmentPath=``){const normalizedPath=String(attachmentPath||``).trim();return normalizedPath?`[${normalizedPath}] `:``}function useAgentTerminalAttachments({assistantLabel=`Codex`,canUpload=()=>true,deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,terminalSessionId,uploadAttachment}={}){const label=()=>String(unref(assistantLabel)||`AI`);const uploadAllowed=()=>Boolean(unref(sessionId))&&(typeof canUpload===`function`?canUpload()!==false:unref(canUpload)!==false);function currentTarget(attachment){return uploadAllowed()&&attachment.sessionId===unref(sessionId)&&attachment.terminalSessionId===unref(terminalSessionId)}async function injectUploadedAttachments(uploaded=[]){for(const attachment of uploaded){if(!currentTarget(attachment))throw new Error(`The terminal changed before the attachment was delivered. Attach the file again.`);const fileName=String(attachment.fileName||`attachment`);const terminalText=attachmentPathForTerminal(attachment.path);if(!terminalText)throw new Error(`${fileName} uploaded, but no attachment path was returned.`);if(!await sendAttachmentPath(terminalText,[attachment.attachmentId],{sessionId:attachment.sessionId,terminalSessionId:attachment.terminalSessionId}))throw new Error(`${fileName} uploaded, but its path could not be sent to ${label()}.`)}}const attachments=useAgentAttachments({canUpload:uploadAllowed,deleteAttachment,onUploaded:async(uploaded=[])=>{await injectUploadedAttachments(uploaded);const fileLabel=uploaded.length===1?uploaded[0].fileName:`${uploaded.length} files`;if(uploaded.every(currentTarget)){attachments.status.value=`${fileLabel} attached. Press Enter in ${label()} when ready.`;focusTerminal()}return{accepted:true}},sessionId,uploadAttachment:async(currentSessionId,file,options={})=>{if(!await ensureTerminalReady()||!uploadAllowed()||currentSessionId!==unref(sessionId)||options.signal?.aborted)throw new Error(`${label()} terminal is not ready for attachments.`);const targetTerminalId=unref(terminalSessionId);return{...await uploadAttachment(currentSessionId,file,options),terminalSessionId:targetTerminalId}}});if(terminalSessionId!==void 0)watch(()=>unref(terminalSessionId),(_next,previous)=>{if(!previous)return;attachments.abandonAttachments();attachments.clearStatus()},{flush:`sync`});return{attachmentDragActive:attachments.dragActive,attachmentCanAddFiles:attachments.canAddFiles,attachmentQueueItems:attachments.queueItems,attachmentStatus:attachments.status,attachmentUploading:attachments.uploading,abandonAttachments:attachments.abandonAttachments,cancelAttachment:attachments.cancelAttachment,clearAttachmentStatus:attachments.clearStatus,handleAttachmentDragEnter:attachments.handleDragEnter,handleAttachmentDragLeave:attachments.handleDragLeave,handleAttachmentDragOver:attachments.handleDragOver,handleAttachmentDrop:attachments.handleDrop,removeAttachment:attachments.removeAttachment,resetAttachmentDragState:attachments.resetDragState,retryAttachment:attachments.retryAttachment,uploadAttachmentFiles:attachments.uploadFiles}}var VIBE64_CODEX_APP_SERVER_TASK_ID=`codex_app_server`;function normalizedText(value=``){return String(value||``).trim()}function objectValue(value={}){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function arrayValue(value=[]){return Array.isArray(value)?value:[]}function sessionBackgroundTasks(session={}){return arrayValue(session?.backgroundTasks).filter(task=>task&&typeof task===`object`&&!Array.isArray(task))}function codexReconnectRequiredText(value=``){const text=normalizedText(value);return Boolean(text)&&(text.includes(`vibe64_codex_reconnect_required`)||text.includes(`Codex authentication was rejected. Reconnect Codex to continue.`))}function codexReconnectRequiredResult(result={}){const source=objectValue(result);return normalizedText(source.code)===`vibe64_codex_reconnect_required`||codexReconnectRequiredText(source.error)||codexReconnectRequiredText(source.message)||codexReconnectRequiredText(source.observed)||arrayValue(source.errors).some(error=>normalizedText(error?.code)===`vibe64_codex_reconnect_required`||codexReconnectRequiredText(error?.message))}function codexReconnectRequiredSignature(session={}){const sessionId=normalizedText(session?.sessionId);const backgroundTask=sessionBackgroundTasks(session).find(task=>normalizedText(task.id)===`codex_app_server`&&codexReconnectRequiredResult(task));if(backgroundTask)return[sessionId,`background-task`,normalizedText(backgroundTask.id),normalizedText(backgroundTask.status),normalizedText(backgroundTask.updatedAt),normalizedText(backgroundTask.error),normalizedText(backgroundTask.message)].join(`|`);const terminal=objectValue(session?.agentSession?.terminal);if(codexReconnectRequiredResult(terminal))return[sessionId,`terminal`,normalizedText(terminal.id||terminal.terminalSessionId),normalizedText(terminal.status),normalizedText(terminal.outputVersion),normalizedText(terminal.error||terminal.closeError||terminal.terminalError)].join(`|`);const turn=objectValue(session?.agentSession?.turn);if(codexReconnectRequiredResult(turn))return[sessionId,`agent-turn`,normalizedText(session?.agentSession?.thread?.id),normalizedText(turn.id),normalizedText(turn.status),normalizedText(turn.updatedAt),normalizedText(turn.error||turn.message)].join(`|`);return``}function openCodexReconnectDialog(){requestVibe64AccountConnectionsDialog({codexReconnectRequired:true,providerId:`codex`,refresh:false})}function codexAccountConnectedPayload(payload={}){const accountId=String(payload?.accountId||payload?.connectionId||``).trim().toLowerCase();const status=String(payload?.status||``).trim().toLowerCase();return accountId===`codex`&&payload?.connected===true&&(!status||status===`connected`)}function useCodexTerminalLifecycle({props,emit,codexCommands,terminalController,resetTerminalOutput,sessionId,serverTerminalSession,staleTerminalSessionIds,canUseTerminal,terminalCanStart,hasTerminalSession,terminalReconnectRequired,terminalAttachmentsEnabled,componentMounted}){const{closeTerminalSocket,connectTerminalSocket,focusTerminal:focusTerminalUi,resetTerminalDisplay,resetTerminalSessionState,sendTerminalData:sendTerminalBytes,terminalCommandPreview,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=terminalController;let terminalStartPromise=null;const attachments=useAgentTerminalAttachments({canUpload:terminalAttachmentsEnabled,deleteAttachment:codexCommands.deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,terminalSessionId,uploadAttachment:codexCommands.uploadAttachment});const{abandonAttachments:abandonTerminalAttachments,clearAttachmentStatus,resetAttachmentDragState}=attachments;function ensureTerminalReady(){if(!canUseTerminal.value){if(terminalCanStart.value)terminalError.value=`Create the session clone before starting Codex.`;return Promise.resolve(false)}if(terminalStartPromise)return terminalStartPromise;terminalStartPromise=startTerminalOnce();return terminalStartPromise.finally(()=>{terminalStartPromise=null})}function emitTerminalSessionState(extra={}){const currentTerminalId=String(extra.agentTerminalSessionId||terminalSessionId.value||``);if(!sessionId.value||!currentTerminalId)return;emit(`session-update`,{agentTerminalCommandPreview:terminalCommandPreview.value,agentTerminalSessionId:currentTerminalId,agentTerminalStatus:terminalStatus.value,sessionId:sessionId.value,...extra})}async function applyCodexTerminalSession(session={},{fallbackStatus=`running`,ownership=`attached`,preserveOutput=true}={}){const nextTerminalSessionId=String(session.id||session.terminalSessionId||``).trim();if(!nextTerminalSessionId)return{applied:false,hasTerminalSession:Boolean(terminalSessionId.value)};const previousTerminalSessionId=String(terminalSessionId.value||``);const sameTerminalSession=previousTerminalSessionId===nextTerminalSessionId;const terminalSessionChanged=Boolean(previousTerminalSessionId&&previousTerminalSessionId!==nextTerminalSessionId);if(terminalSessionChanged)resetTerminalOutput();await terminalController.attachTerminal({...session,id:nextTerminalSessionId},{connect:false,fallbackStatus,ownership,preserveOutput,resize:!sameTerminalSession});return{applied:true,sameTerminalSession,terminalSessionChanged,terminalSessionId:nextTerminalSessionId}}async function recoverCodexTerminalAfterAccountReconnect(){if(!terminalReconnectRequired.value)return;terminalError.value=``;closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();await ensureTerminalReady()}useRealtimeEvent({enabled:computed(()=>Boolean(componentMounted.value&&terminalReconnectRequired.value)),event:VIBE64_ACCOUNTS_CHANGED_EVENT,matches({payload={}}={}){return codexAccountConnectedPayload(payload)},onEvent(){recoverCodexTerminalAfterAccountReconnect()}});async function sendAttachmentPath(text,attachmentIds=[],target={}){if(!sessionId.value||!terminalSessionId.value)throw new Error(`Codex terminal is not ready for attachments.`);const response=await codexCommands.sendAgentTerminalText(target.sessionId,target.terminalSessionId,text,{attachmentIds});if(response?.ok===false)throw new Error(response.error||`Attachment path could not be sent to Codex.`);return true}async function sendEscape(){try{return await ensureTerminalReady()&&await sendTerminalBytes(`\x1B`)}catch(sendError){terminalError.value=String(sendError?.message||sendError||`Terminal input failed.`);return false}}async function focusTerminal(){if(!hasTerminalSession.value)return false;return focusTerminalUi()}async function focusWritableTerminalWhenShown(visible){if(!visible||props.readOnly||!hasTerminalSession.value)return;await nextTick();focusTerminal()}async function connectAttachedTerminal(){if(!await connectTerminalSocket()){const message=String(terminalError.value||`Terminal stream failed to connect.`);if(terminalSessionMissingError(message)||terminalOwnerAccessDenied(message)){markTerminalSessionStale(terminalSessionId.value||serverTerminalSession.value.id,message);return false}throw new Error(message)}return true}async function startTerminalOnce(){if(terminalReconnectRequired.value){openCodexReconnectDialog();return false}if(terminalExited.value&&terminalCanStart.value){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput()}if(terminalSessionId.value)return await connectAttachedTerminal();if(!terminalCanStart.value)return false;terminalStarting.value=true;terminalError.value=``;try{const session=await codexCommands.startAgentTerminal(sessionId.value);if(session?.ok===false){if(codexReconnectRequiredResult(session)){terminalError.value=CODEX_RECONNECT_REQUIRED_MESSAGE;openCodexReconnectDialog();return false}if(terminalOwnerAccessDenied(session)){const message=vibe64TerminalErrorMessage(session,`Codex terminal failed to start.`);markTerminalSessionStale(serverTerminalSession.value.id,message);terminalError.value=message;return false}throw new Error(vibe64TerminalErrorMessage(session,`Codex terminal failed to start.`))}if(!session?.id)throw new Error(`Codex terminal failed to start.`);await applyCodexTerminalSession(session,{fallbackStatus:`running`,ownership:`owned`});emitTerminalSessionState();return await connectAttachedTerminal()}catch(startError){terminalError.value=terminalError.value||vibe64TerminalErrorMessage(startError,`Codex terminal failed to start.`);return false}finally{terminalStarting.value=false}}function connectTerminalWhenReady(){if(!canUseTerminal.value||!terminalSessionId.value)return;connectAttachedTerminal().catch(error=>{terminalError.value=terminalError.value||String(error?.message||error||`Terminal stream failed to connect.`)})}async function attachTerminalSession(session={}){const attached=await applyCodexTerminalSession(session,{fallbackStatus:`running`});if(!attached.applied)return Boolean(terminalSessionId.value);if(attached.sameTerminalSession)return true;if(!canUseTerminal.value||!componentMounted.value)return true;try{return await connectAttachedTerminal()}catch(attachError){const message=String(attachError?.message||attachError||`Terminal stream failed to connect.`);if(terminalOwnerAccessDenied(message)){markTerminalSessionStale(session.id||terminalSessionId.value||serverTerminalSession.value.id,message);terminalError.value=message;return false}terminalError.value=terminalError.value||message;return false}}function markTerminalSessionStale(terminalId=``,message=``){const normalizedTerminalId=String(terminalId||``).trim();if(normalizedTerminalId)staleTerminalSessionIds.value=new Set([...staleTerminalSessionIds.value,normalizedTerminalId]);closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();abandonTerminalAttachments();terminalError.value=String(message||``);emitTerminalSessionState({agentTerminalSessionId:normalizedTerminalId,agentTerminalStatus:`stale`})}function detachTerminal(){terminalStartPromise=null;abandonTerminalAttachments();closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();clearAttachmentStatus();resetAttachmentDragState()}async function closeTerminal(){await abandonTerminalAttachments();if(!terminalSessionId.value){detachTerminal();return true}if(!await terminalController.closeTerminal({deleteSession:true}))return false;terminalStartPromise=null;resetTerminalOutput();clearAttachmentStatus();resetAttachmentDragState();return true}async function restartTerminal(){if(terminalReconnectRequired.value){openCodexReconnectDialog();return}terminalError.value=``;if(!await closeTerminal())return;await ensureTerminalReady()}return{attachments,attachTerminalSession,closeTerminal,connectTerminalWhenReady,detachTerminal,emitTerminalSessionState,focusWritableTerminalWhenShown,restartTerminal,sendEscape}}var CODEX_ACTIVITY_QUIET_MS=2200;var TERMINAL_STREAM_QUIET_MS=2500;function useCodexTerminalOutput({emitBusyChanged,sessionId}={}){const codexBusy=ref(false);const codexWorking=ref(false);const terminalStreaming=ref(false);let codexIdleTimer=null;let terminalStreamingTimer=null;let codexBusyOutputVersion=0;let terminalOutputVersion=0;function clearCodexIdleTimer(){if(!codexIdleTimer)return;globalThis.clearTimeout(codexIdleTimer);codexIdleTimer=null}function emitCodexActivityChanged(){const payload={busy:codexBusy.value,sessionId:unref(sessionId),streaming:terminalStreaming.value,working:codexWorking.value};emitBusyChanged?.(payload)}function clearTerminalStreamingTimer(){if(!terminalStreamingTimer)return;globalThis.clearTimeout(terminalStreamingTimer);terminalStreamingTimer=null}function setTerminalStreaming(nextStreaming){const streaming=Boolean(nextStreaming);if(terminalStreaming.value===streaming)return;terminalStreaming.value=streaming;emitCodexActivityChanged()}function markTerminalStreaming(){setTerminalStreaming(true);clearTerminalStreamingTimer();terminalStreamingTimer=globalThis.setTimeout(()=>{terminalStreamingTimer=null;setTerminalStreaming(false)},TERMINAL_STREAM_QUIET_MS)}function setCodexBusy(nextBusy){const busy=Boolean(nextBusy);if(codexBusy.value===busy)return;codexBusy.value=busy;emitCodexActivityChanged()}function setCodexWorking(nextWorking){const working=Boolean(nextWorking);if(codexWorking.value===working)return;codexWorking.value=working;emitCodexActivityChanged()}function clearCodexWorking(){setCodexWorking(false)}function markCodexBusy(){clearCodexIdleTimer();codexBusyOutputVersion=terminalOutputVersion;setCodexBusy(true)}function clearCodexBusy(){clearCodexIdleTimer();codexBusyOutputVersion=terminalOutputVersion;setCodexBusy(false)}function scheduleCodexIdleWhenQuiet(){if(!codexBusy.value||terminalOutputVersion<=codexBusyOutputVersion)return;clearCodexIdleTimer();codexIdleTimer=globalThis.setTimeout(()=>{codexIdleTimer=null;clearCodexBusy()},CODEX_ACTIVITY_QUIET_MS)}function noteTerminalOutput(){terminalOutputVersion+=1;scheduleCodexIdleWhenQuiet()}function writeTerminalOutput(){noteTerminalOutput()}function appendTerminalOutput(chunk){if(!String(chunk||``))return;markTerminalStreaming();noteTerminalOutput()}function resetTerminalOutput(){clearTerminalStreamingTimer();setTerminalStreaming(false);clearCodexBusy();clearCodexWorking();terminalOutputVersion+=1}return{appendTerminalOutput,clearCodexBusy,clearCodexWorking,codexBusy,codexWorking,markCodexBusy,resetTerminalOutput,terminalStreaming,writeTerminalOutput}}function useCodexTerminalPresentation({terminalController,serverCodexTerminal,sessionSourcePending,terminalReconnectRequired,terminalServerStale,terminalDisplayActive,canUseTerminal,terminalCanStart,componentMounted}){const{terminalConnectionStatus,terminalError,terminalExited,terminalSessionId,terminalStarting}=terminalController;const terminalErrorTitle=computed(()=>{if(terminalError.value===`Codex authentication was rejected. Reconnect Codex to continue.`)return`Reconnect Codex`;return String(terminalError.value||``).includes(`app-server`)?`Codex app-server is not available`:`Codex terminal needs attention`});const terminalErrorActionText=computed(()=>{if(terminalStarting.value)return`Starting Codex…`;return terminalError.value===`Codex authentication was rejected. Reconnect Codex to continue.`?`Reconnect Codex`:`Restart Codex`});const terminalSubtitle=computed(()=>{if(terminalStarting.value)return`Starting Codex`;if(terminalExited.value)return``;if(terminalConnectionStatus.value===`reconnecting`)return`Reconnecting Codex`;if(terminalConnectionStatus.value===`connecting`)return`Connecting Codex`;return``});const terminalStartActionVisible=computed(()=>!sessionSourcePending.value);const terminalStartIcon=computed(()=>terminalReconnectRequired.value||terminalExited.value||terminalServerStale.value?mdiRestart:mdiPlayCircleOutline);const terminalStartPanelTitle=computed(()=>{if(sessionSourcePending.value)return`Session source is being prepared`;if(terminalStarting.value)return`Starting Codex`;if(terminalReconnectRequired.value)return`Reconnect Codex`;if(terminalServerStale.value)return`Codex terminal needs restart`;return terminalExited.value?`Codex terminal exited`:`Codex terminal is off`});const terminalStartPanelMessage=computed(()=>{if(sessionSourcePending.value)return`Codex will start from the session source after the clone has been created.`;if(terminalStarting.value)return`Preparing this session terminal.`;if(terminalReconnectRequired.value)return`Reconnect the Codex account before starting this session terminal.`;if(terminalServerStale.value)return serverCodexTerminal.value.message||`The previous Codex terminal is still running, but Vibe64 cannot attach to it. Restart it for this session.`;return terminalExited.value?`Restart it for this session.`:`Start it for this session.`});const terminalStartButtonText=computed(()=>{if(terminalStarting.value)return`Starting Codex…`;if(terminalReconnectRequired.value)return`Reconnect Codex`;return terminalExited.value||terminalServerStale.value?`Restart Codex`:`Start Codex`});return{showTerminalStartPanel:computed(()=>componentMounted.value&&(sessionSourcePending.value||terminalStarting.value&&terminalDisplayActive.value||canUseTerminal.value&&terminalCanStart.value&&(!terminalSessionId.value||terminalExited.value||terminalServerStale.value))),terminalErrorActionText,terminalErrorTitle,terminalStartActionVisible,terminalStartButtonText,terminalStartIcon,terminalStartPanelMessage,terminalStartPanelTitle,terminalSubtitle}}var _hoisted_1$16=[`aria-hidden`];var _hoisted_2$12=[`disabled`];var _hoisted_3$12={class:`vibe64-codex-session__command`};var _hoisted_4$9={key:0,class:`text-caption text-medium-emphasis`};var _sfc_main$17={__name:`Vibe64CodexSession`,props:{session:{type:Object,default:null},visible:{type:Boolean,default:true},allowStart:{type:Boolean,default:true},displayMode:{type:String,default:`full`},readOnly:{type:Boolean,default:false},listenWhenHidden:{type:Boolean,default:false}},emits:[`session-update`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const codexCommands=useVibe64CodexCommands();const copyStatus=ref(``);const componentMounted=ref(false);const terminalAttachmentFileInput=ref(null);const staleTerminalSessionIds=ref(new Set);const sessionId=computed(()=>props.session?.sessionId||``);const terminalAttachmentsEnabled=computed(()=>Boolean(!props.readOnly&&sessionId.value));const sessionSource=computed(()=>String(props.session?.sourcePath||``));const rawServerCodexTerminal=computed(()=>vibe64ServerAgentTerminal(props.session));const serverCodexTerminal=computed(()=>{const terminal=rawServerCodexTerminal.value;if(terminal.stale||terminal.restartRequired)return{...terminal,id:``,terminalSessionId:``,status:`stale`};const terminalId=String(terminal.id||terminal.terminalSessionId||``).trim();if(!terminalId||!staleTerminalSessionIds.value.has(terminalId))return terminal;return{...terminal,id:``,terminalSessionId:``,status:``}});const serverTerminalSession=computed(()=>({commandPreview:String(serverCodexTerminal.value.commandPreview||``),id:String(serverCodexTerminal.value.id||serverCodexTerminal.value.terminalSessionId||``),status:String(serverCodexTerminal.value.status||``)}));const{displayActive:terminalDisplayActive,presentation:terminalPresentation,streamActive:terminalStreamActive}=useVibe64AgentTerminalDisplay(props,computed(()=>serverTerminalSession.value.id));const hasTerminalSession=computed(()=>Boolean(terminalSessionId.value||serverTerminalSession.value.id));const canUseTerminal=computed(()=>Boolean(terminalStreamActive.value&&sessionId.value&&(serverTerminalSession.value.id||props.allowStart&&sessionSource.value)));const canStartTerminal=computed(()=>Boolean(props.allowStart&&terminalDisplayActive.value&&sessionId.value&&sessionSource.value));const{appendTerminalOutput:noteTerminalOutputChunk,clearCodexBusy,clearCodexWorking,markCodexBusy,resetTerminalOutput,writeTerminalOutput:noteTerminalOutputSnapshot}=useCodexTerminalOutput();const terminalController=useVibe64Terminal({driver:createWebSocketTerminalDriver({closeSession:closeCodexTerminalDriverSession,webSocketUrl(terminalId){return vibe64AgentTerminalWebSocketUrl(sessionId.value,terminalId)}}),fitOnResize:true,initiallyVisible:false,liveResize:true,onOutput:handleTerminalOutput,onStatusUpdate:handleTerminalStatusUpdate,onUserData:handleTerminalUserData,readOnly:computed(()=>props.readOnly),resizeReportDelayMs:120});const{disposeTerminalUi,terminalFocused,terminalCommandPreview,terminalError,terminalSessionId,terminalStarting,terminalStatus}=terminalController;const terminalCanStart=computed(()=>Boolean(canStartTerminal.value));const sessionSourcePending=computed(()=>Boolean(terminalDisplayActive.value&&sessionId.value&&!sessionSource.value&&!hasTerminalSession.value));const terminalServerStale=computed(()=>Boolean(serverCodexTerminal.value.stale||serverCodexTerminal.value.restartRequired));const terminalReconnectRequired=computed(()=>terminalError.value===CODEX_RECONNECT_REQUIRED_MESSAGE);const sessionCodexReconnectSignature=computed(()=>codexReconnectRequiredSignature(props.session||{}));const{showTerminalStartPanel,terminalErrorActionText,terminalErrorTitle,terminalStartActionVisible,terminalStartButtonText,terminalStartIcon,terminalStartPanelMessage,terminalStartPanelTitle,terminalSubtitle}=useCodexTerminalPresentation({terminalController,serverCodexTerminal,sessionSourcePending,terminalReconnectRequired,terminalServerStale,terminalDisplayActive,canUseTerminal,terminalCanStart,componentMounted});const{attachments,attachTerminalSession,closeTerminal,connectTerminalWhenReady,detachTerminal,emitTerminalSessionState,focusWritableTerminalWhenShown,restartTerminal,sendEscape}=useCodexTerminalLifecycle({props,emit,codexCommands,terminalController,resetTerminalOutput,sessionId,serverTerminalSession,staleTerminalSessionIds,canUseTerminal,terminalCanStart,hasTerminalSession,terminalReconnectRequired,terminalAttachmentsEnabled,componentMounted});const{attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,resetAttachmentDragState,uploadAttachmentFiles}=attachments;const terminalAttachmentActionLabel=computed(()=>attachmentCanAddFiles.value?`Attach files to Codex terminal`:`Codex terminal attachment limit reached`);function openTerminalAttachmentPicker(){if(!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value)return false;terminalAttachmentFileInput.value?.click?.();return true}function handleTerminalAttachmentFileSelection(event){const input=event?.currentTarget||event?.target||null;const files=Array.from(input?.files||[]);if(input)input.value=``;if(files.length<1||!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value)return;uploadAttachmentFiles(files)}function handleTerminalCopy(){copyStatus.value=`Terminal text copied.`}function handleTerminalInterrupt(){clearCodexBusy();clearCodexWorking()}function handleTerminalOutput({chunk=``,output=``,source=``}={}){if(source===`append`){noteTerminalOutputChunk(chunk);return}noteTerminalOutputSnapshot(output)}function handleTerminalStatusUpdate({closeError=``,status=``}={}){if(closeError)terminalError.value=String(closeError);emitTerminalSessionState();if(status===`exited`){clearCodexBusy();clearCodexWorking()}}function handleTerminalUserData(data){const input=String(data||``);if(input.includes(``)){clearCodexBusy();clearCodexWorking();return}if(input.includes(`\r`))markCodexBusy()}async function closeCodexTerminalDriverSession(terminalId){const result=await codexCommands.closeAgentTerminal(sessionId.value,terminalId);if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`Codex terminal process could not be stopped.`));return result}watch(serverTerminalSession,terminal=>{attachTerminalSession(terminal)},{flush:`post`,immediate:true});watch(sessionId,(nextSessionId,previousSessionId)=>{if(previousSessionId&&previousSessionId!==nextSessionId)detachTerminal();staleTerminalSessionIds.value=new Set;resetAttachmentDragState();clearAttachmentStatus()});watch(canUseTerminal,ready=>{if(ready&&terminalSessionId.value)connectTerminalWhenReady()});watch([sessionCodexReconnectSignature,componentMounted,()=>props.displayMode],([signature,mounted,displayMode])=>{if(!signature||!mounted||displayMode===`headless`)return;terminalError.value=CODEX_RECONNECT_REQUIRED_MESSAGE},{flush:`post`,immediate:true});watch(terminalDisplayActive,(visible,previousVisible)=>{if(visible&&previousVisible===false)focusWritableTerminalWhenShown(visible)},{flush:`post`,immediate:true});onMounted(()=>{componentMounted.value=true;connectTerminalWhenReady()});onBeforeUnmount(()=>{componentMounted.value=false;detachTerminal();disposeTerminalUi()});__expose({focusTerminal:()=>focusWritableTerminalWhenShown(terminalDisplayActive.value),sendEscape});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vibe64-codex-session`,{"vibe64-codex-session--compact":__props.displayMode===`compact`,"vibe64-codex-session--focused":unref(terminalFocused),"vibe64-codex-session--headless":__props.displayMode===`headless`}]),"aria-hidden":__props.displayMode===`headless`?`true`:void 0,onDragenter:_cache[0]||(_cache[0]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragEnter)($event),[`prevent`])),onDragover:_cache[1]||(_cache[1]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragOver)($event),[`prevent`])),onDragleave:_cache[2]||(_cache[2]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragLeave)($event),[`prevent`])),onDrop:_cache[3]||(_cache[3]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDrop)($event),[`prevent`]))},[terminalAttachmentsEnabled.value?(openBlock(),createElementBlock(`input`,{key:0,ref_key:`terminalAttachmentFileInput`,ref:terminalAttachmentFileInput,disabled:!unref(attachmentCanAddFiles),hidden:``,multiple:``,type:`file`,onChange:handleTerminalAttachmentFileSelection},null,40,_hoisted_2$12)):createCommentVNode(``,true),createVNode(_sfc_main$20,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":unref(terminalErrorTitle),fill:``,height:`100%`,"mobile-takeover":``,presentation:unref(terminalPresentation),"show-copy":``,"show-interrupt":!__props.readOnly,stage:unref(terminalSubtitle),status:unref(terminalStatus),subtitle:unref(terminalSubtitle),terminal:unref(terminalController),title:`Codex terminal`,visible:unref(terminalStreamActive),onCleanExit:unref(closeTerminal),onClose:unref(closeTerminal),onCopy:handleTerminalCopy,onInterrupt:handleTerminalInterrupt},{"error-actions":withCtx(()=>[terminalCanStart.value?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":unref(terminalStarting)?`true`:void 0,class:`vibe64-codex-session__start-action`,color:`primary`,disabled:unref(terminalStarting),"prepend-icon":unref(mdiRestart),size:`small`,variant:`flat`,onClick:unref(restartTerminal)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(terminalErrorActionText)),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,variant:`tonal`,onClick:unref(closeTerminal)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close terminal `,-1)])]),_:1},8,[`onClick`])]),"actions-before":withCtx(()=>[terminalAttachmentsEnabled.value?(openBlock(),createBlock(VBtn,{key:0,"aria-label":terminalAttachmentActionLabel.value,class:`vibe64-codex-session__attachment-action`,disabled:!unref(attachmentCanAddFiles),icon:unref(mdiPaperclip),size:`small`,title:terminalAttachmentActionLabel.value,type:`button`,variant:`text`,onClick:openTerminalAttachmentPicker},null,8,[`aria-label`,`disabled`,`icon`,`title`])):createCommentVNode(``,true)]),overlay:withCtx(()=>[unref(attachmentDragActive)?(openBlock(),createBlock(Vibe64AgentTerminalDropOverlay_default,{key:0,label:`Drop temporary files for Codex`})):createCommentVNode(``,true),unref(showTerminalStartPanel)?(openBlock(),createBlock(Vibe64AgentTerminalStartPanel_default,{key:1,"action-text":unref(terminalStartButtonText),"action-visible":unref(terminalStartActionVisible),icon:unref(terminalStartIcon),message:unref(terminalStartPanelMessage),starting:unref(terminalStarting),title:unref(terminalStartPanelTitle),onStart:unref(restartTerminal)},null,8,[`action-text`,`action-visible`,`icon`,`message`,`starting`,`title`,`onStart`])):createCommentVNode(``,true)]),"before-terminal":withCtx(()=>[createVNode(_sfc_main$60,{items:unref(attachmentQueueItems),joined:false,onCancel:unref(cancelAttachment),onRemove:unref(removeAttachment),onRetry:unref(retryAttachment)},null,8,[`items`,`onCancel`,`onRemove`,`onRetry`])]),footer:withCtx(({commandPreview,status})=>[createBaseVNode(`span`,_hoisted_3$12,toDisplayString(commandPreview||`Codex is not running.`),1),copyStatus.value||unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_4$9,toDisplayString(unref(attachmentStatus)||copyStatus.value),1)):createCommentVNode(``,true),status?(openBlock(),createBlock(VChip,{key:1,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status),1)]),_:2},1024)):createCommentVNode(``,true)]),_:1},8,[`command-preview`,`error`,`error-title`,`presentation`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`visible`,`onCleanExit`,`onClose`])],42,_hoisted_1$16)}}};var Vibe64CodexSession_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-512de76d`]]);var _hoisted_1$15=[`aria-hidden`];var _hoisted_2$11=[`disabled`];var _hoisted_3$11={key:0,class:`text-caption px-3 py-2 ma-0`};var _hoisted_4$8={class:`vibe64-native-agent-session__command`};var _hoisted_5$7={key:0,class:`text-caption text-medium-emphasis`,role:`status`};var _sfc_main$16={__name:`Vibe64NativeAgentSession`,props:{allowStart:{default:true,type:Boolean},displayMode:{default:`full`,type:String},listenWhenHidden:{default:false,type:Boolean},readOnly:{default:false,type:Boolean},session:{default:null,type:Object},visible:{default:true,type:Boolean}},emits:[`session-update`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const terminalCommands=useVibe64TerminalCommands();const attachmentCommands=useVibe64AttachmentCommands();const attachmentFileInput=ref(null);const assistantProvider=computed(()=>findVibe64AgentProvider(props.session?.assistantSelection?.engineId));const assistantLabel=computed(()=>assistantProvider.value?.label||``);const assistantAcceptsAttachments=computed(()=>assistantProvider.value?.terminalAttachments===true);const sessionId=computed(()=>String(props.session?.sessionId||``));const sessionSource=computed(()=>String(props.session?.sourcePath||``));const serverTerminal=computed(()=>vibe64ServerAgentTerminal(props.session));const serverTerminalId=computed(()=>String(serverTerminal.value.id||serverTerminal.value.terminalSessionId||``));const{displayActive,presentation:terminalPresentation,streamActive:terminalStreamActive}=useVibe64AgentTerminalDisplay(props,serverTerminalId);const terminalController=useVibe64Terminal({driver:createWebSocketTerminalDriver({closeSession:closeDriverSession,webSocketUrl(terminalId){return vibe64AgentTerminalWebSocketUrl(sessionId.value,terminalId)}}),fitOnResize:true,initiallyVisible:false,liveResize:true,onStatusUpdate:emitTerminalState,readOnly:computed(()=>props.readOnly),resizeReportDelayMs:120});const{applyTerminalSession,closeTerminalSocket,connectTerminalSocket,disposeTerminalUi,focusTerminal,resetTerminalDisplay,resetTerminalSessionState,terminalCommandPreview,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=terminalController;const showAttachmentAction=computed(()=>Boolean(assistantAcceptsAttachments.value&&!props.readOnly&&displayActive.value));const attachmentsEnabled=computed(()=>Boolean(showAttachmentAction.value&&sessionId.value&&terminalSessionId.value&&terminalStatus.value===`running`));const{abandonAttachments,attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,uploadAttachmentFiles}=useAgentTerminalAttachments({assistantLabel,canUpload:attachmentsEnabled,deleteAttachment:attachmentCommands.deleteAttachment,ensureTerminalReady:()=>attachmentsEnabled.value,focusTerminal,async sendAttachmentPath(text,attachmentIds,target){const result=await terminalCommands.sendAgentTerminalText(target.sessionId,target.terminalSessionId,text,{attachmentIds});if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`The attachment could not be sent to ${assistantLabel.value}.`));return true},sessionId,terminalSessionId,uploadAttachment:attachmentCommands.uploadAttachment});function handleAttachmentSelection(event){const input=event.currentTarget;const files=Array.from(input.files||[]);input.value=``;uploadAttachmentFiles(files)}function handleTerminalPaste(event){if(!assistantAcceptsAttachments.value)return;const files=assistantAttachmentFilesFromPasteEvent(event);if(!files.length)return;event.preventDefault();event.stopPropagation();uploadAttachmentFiles(files)}watch(attachmentsEnabled,enabled=>{if(enabled)return;abandonAttachments();clearAttachmentStatus()},{flush:`sync`});const sourcePending=computed(()=>Boolean(displayActive.value&&sessionId.value&&!sessionSource.value&&!terminalSessionId.value));const canStart=computed(()=>Boolean(props.allowStart&&displayActive.value&&sessionId.value&&sessionSource.value));const showStartPanel=computed(()=>Boolean(displayActive.value&&!terminalStarting.value&&(!terminalSessionId.value||terminalExited.value)));const terminalSubtitle=computed(()=>{if(terminalStarting.value)return`Starting ${assistantLabel.value}`;return terminalExited.value?`Exited`:terminalStatus.value===`running`?``:`${assistantLabel.value} agent session`});function emitTerminalState(){const id=String(terminalSessionId.value||serverTerminalId.value||``);if(!sessionId.value||!id)return;emit(`session-update`,{agentTerminalCommandPreview:terminalCommandPreview.value,agentTerminalSessionId:id,agentTerminalStatus:terminalStatus.value,sessionId:sessionId.value})}async function closeDriverSession(terminalId){const result=await terminalCommands.closeAgentTerminal(sessionId.value,terminalId);if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`OpenCode terminal process could not be stopped.`));return result}async function attachTerminal(session={}){const id=String(session.id||session.terminalSessionId||``).trim();if(!id||id===terminalSessionId.value)return Boolean(id);closeTerminalSocket();resetTerminalDisplay();await applyTerminalSession({...session,id},{fallbackStatus:session.status||`running`,ownership:`attached`});if(terminalStreamActive.value)connectTerminalSocket();return true}async function startTerminal(){if(!canStart.value)return false;if(terminalExited.value){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay()}terminalStarting.value=true;terminalError.value=``;try{const session=await terminalCommands.startAgentTerminal(sessionId.value);if(session?.ok===false||!session?.id)throw new Error(vibe64TerminalErrorMessage(session,`${assistantLabel.value} terminal failed to start.`));await applyTerminalSession(session,{fallbackStatus:`running`,ownership:`owned`});emitTerminalState();return await connectTerminalSocket()}catch(error){terminalError.value=vibe64TerminalErrorMessage(error,`${assistantLabel.value} terminal failed to start.`);return false}finally{terminalStarting.value=false}}async function closeTerminal(){await abandonAttachments();if(!terminalSessionId.value){detachTerminal();return true}if(!await terminalController.closeTerminal({deleteSession:true}))return false;resetTerminalDisplay();emitTerminalState();return true}async function restartTerminal(){terminalError.value=``;if(terminalSessionId.value&&!await closeTerminal())return false;return startTerminal()}function detachTerminal(){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay()}watch(serverTerminal,terminal=>{attachTerminal(terminal)},{flush:`post`,immediate:true});watch(terminalStreamActive,active=>{if(active&&terminalSessionId.value)connectTerminalSocket()});watch(sessionId,(_next,previous)=>{if(previous)detachTerminal()});onMounted(()=>{if(terminalStreamActive.value&&terminalSessionId.value)connectTerminalSocket()});onBeforeUnmount(()=>{detachTerminal();disposeTerminalUi()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vibe64-native-agent-session`,{"vibe64-native-agent-session--headless":__props.displayMode===`headless`}]),"aria-hidden":__props.displayMode===`headless`?`true`:void 0,onDragenter:_cache[1]||(_cache[1]=withModifiers((...args)=>unref(handleAttachmentDragEnter)&&unref(handleAttachmentDragEnter)(...args),[`prevent`])),onDragover:_cache[2]||(_cache[2]=withModifiers((...args)=>unref(handleAttachmentDragOver)&&unref(handleAttachmentDragOver)(...args),[`prevent`])),onDragleave:_cache[3]||(_cache[3]=withModifiers((...args)=>unref(handleAttachmentDragLeave)&&unref(handleAttachmentDragLeave)(...args),[`prevent`])),onDrop:_cache[4]||(_cache[4]=withModifiers((...args)=>unref(handleAttachmentDrop)&&unref(handleAttachmentDrop)(...args),[`prevent`])),onPasteCapture:handleTerminalPaste},[showAttachmentAction.value?(openBlock(),createElementBlock(`input`,{key:0,ref_key:`attachmentFileInput`,ref:attachmentFileInput,disabled:!unref(attachmentCanAddFiles),hidden:``,multiple:``,type:`file`,onChange:handleAttachmentSelection},null,40,_hoisted_2$11)):createCommentVNode(``,true),createVNode(_sfc_main$20,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":`${assistantLabel.value} terminal needs attention`,fill:``,height:`100%`,presentation:unref(terminalPresentation),"show-interrupt":!__props.readOnly,stage:terminalSubtitle.value,status:unref(terminalStatus),subtitle:terminalSubtitle.value,terminal:unref(terminalController),title:`${assistantLabel.value} terminal`,visible:unref(terminalStreamActive),onCleanExit:closeTerminal,onClose:closeTerminal},{"actions-before":withCtx(()=>[showAttachmentAction.value?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Attach files to ${assistantLabel.value} terminal`,disabled:!unref(attachmentCanAddFiles),icon:unref(mdiPaperclip),size:`small`,title:`Attach files to ${assistantLabel.value} terminal`,type:`button`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>attachmentFileInput.value?.click())},null,8,[`aria-label`,`disabled`,`icon`,`title`])):createCommentVNode(``,true)]),"before-terminal":withCtx(()=>[__props.session?.assistantSelection?.engineId===`claude`?(openBlock(),createElementBlock(`p`,_hoisted_3$11,` Claude resumes this conversation in a new interactive process. Finish or stop any active chat turn first. Chat is unavailable while this terminal is open. Claude may ask you to complete its first-use setup or sign in. `)):createCommentVNode(``,true),createVNode(_sfc_main$60,{items:unref(attachmentQueueItems),joined:false,"session-id":sessionId.value,onCancel:unref(cancelAttachment),onRemove:unref(removeAttachment),onRetry:unref(retryAttachment)},null,8,[`items`,`session-id`,`onCancel`,`onRemove`,`onRetry`])]),overlay:withCtx(()=>[unref(attachmentDragActive)?(openBlock(),createBlock(Vibe64AgentTerminalDropOverlay_default,{key:0,label:`Drop files for ${assistantLabel.value}`},null,8,[`label`])):createCommentVNode(``,true),showStartPanel.value?(openBlock(),createBlock(Vibe64AgentTerminalStartPanel_default,{key:1,"action-text":unref(terminalStarting)?`Starting ${assistantLabel.value}…`:unref(terminalExited)?`Restart ${assistantLabel.value}`:`Start ${assistantLabel.value}`,"action-visible":!sourcePending.value,icon:unref(terminalExited)?unref(mdiRestart):unref(mdiPlayCircleOutline),message:sourcePending.value?`The terminal can start after the session source is ready.`:`Start an interactive ${assistantLabel.value} terminal for this session.`,starting:unref(terminalStarting),title:unref(terminalExited)?`${assistantLabel.value} terminal exited`:`${assistantLabel.value} terminal is off`,onStart:restartTerminal},null,8,[`action-text`,`action-visible`,`icon`,`message`,`starting`,`title`])):createCommentVNode(``,true)]),footer:withCtx(({commandPreview,status})=>[createBaseVNode(`span`,_hoisted_4$8,toDisplayString(commandPreview||`${assistantLabel.value} is not running.`),1),unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_5$7,toDisplayString(unref(attachmentStatus)),1)):createCommentVNode(``,true),status?(openBlock(),createBlock(VChip,{key:1,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status),1)]),_:2},1024)):createCommentVNode(``,true)]),_:1},8,[`command-preview`,`error`,`error-title`,`presentation`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`title`,`visible`])],42,_hoisted_1$15)}}};var Vibe64NativeAgentSession_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-437673a4`]]);var _hoisted_1$14={class:`studio-renewal-assistant__heading`};var _hoisted_2$10={class:`text-body-small`};var _hoisted_3$10={class:`studio-renewal-assistant__error`};var _hoisted_4$7={key:3,class:`studio-renewal-assistant__fields`};var _hoisted_5$6={key:4,class:`studio-renewal-assistant__summary text-body-small`,role:`status`};var _sfc_main$15={__name:`Vibe64RenewalAssistantSelector`,props:{active:{default:false,type:Boolean},disabled:{default:false,type:Boolean},initialSelection:{default:null,type:Object},emptyMessage:{default:`Connect an AI account before creating the fresh session.`,type:String},heading:{default:`AI for the fresh session`,type:String},manageLabel:{default:`Manage AIs`,type:String},summaryPrefix:{default:`Fresh session: `,type:String},supportingText:{default:`Keep the current AI, or continue the handover with another connected provider or model.`,type:String}},emits:[`update:ready`,`update:selection`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const headingId=`vibe64-renewal-assistant-${useId()}`;const engineId=ref(``);const modelProviderId=ref(``);const modelId=ref(``);const agentId=ref(``);const variantId=ref(``);const emptyText=ref(``);const active=computed(()=>props.active===true);const overview=useVibe64AssistantCatalog({active,configuredOnly:true});const details=useVibe64AssistantCatalog({active:computed(()=>active.value&&Boolean(engineId.value)),engineId,modelProviderId,modelSearch:emptyText,providerConnectedOnly:true,providerCursor:emptyText,providerSearch:emptyText});const engineRows=computed(()=>overview.engines.value.filter(engine=>engine.health?.status===`ready`&&(engine.modelProviders||[]).some(provider=>provider.connected===true)));const engineItems=computed(()=>engineRows.value.map(engine=>({title:engine.label||engine.engineId,value:engine.engineId})));const selectedEngine=computed(()=>[details.modelEngine.value,details.providerEngine.value,details.selectedOverviewEngine.value].find(engine=>engine?.engineId===engineId.value)||null);const providerRows=computed(()=>{return((engineId.value===`opencode`?details.providerEngine.value:details.selectedOverviewEngine.value)?.modelProviders||[]).filter(provider=>provider.connected===true)});const providerItems=computed(()=>providerRows.value.map(provider=>({title:provider.label||provider.id,value:provider.id})));const selectedProvider=computed(()=>providerRows.value.find(provider=>provider.id===modelProviderId.value)||null);const modelProvider=computed(()=>details.modelEngine.value?.engineId===engineId.value?details.modelEngine.value.modelProviders?.find(provider=>provider.id===modelProviderId.value&&provider.connected===true)||null:null);const modelRows=computed(()=>modelProvider.value?.models||[]);const availableModels=computed(()=>modelRows.value.filter(model=>model.status===`available`));const modelItems=computed(()=>availableModels.value.map(model=>({title:model.label||model.id,value:model.id})));const selectedModel=computed(()=>availableModels.value.find(model=>model.id===modelId.value)||null);const compatibleAgents=computed(()=>{const providerId=modelProviderId.value;const selectedModelId=modelId.value;return(selectedEngine.value?.agents||[]).filter(agent=>[`all`,`primary`].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===providerId)&&(!agent.modelId||agent.modelId===selectedModelId))});const selectedAgent=computed(()=>compatibleAgents.value.find(agent=>agent.id===agentId.value)||null);const variantItems=computed(()=>[{title:`Automatic`,value:``},...(selectedModel.value?.variants||[]).map(variant=>({title:variant.label||variant.id,value:variant.id}))]);const selectionRevision=computed(()=>String(selectedEngine.value?.revision||``));const selection=computed(()=>{if(!selectedProvider.value||!selectedModel.value||!selectedAgent.value||!selectionRevision.value)return null;return{agentId:selectedAgent.value.id,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:selectedModel.value.id,modelProviderId:selectedProvider.value.id,variantId:variantId.value}});const overviewLoading=computed(()=>Boolean(overview.overview.isInitialLoading.value||overview.overview.isLoading.value));const engineDetailsLoading=computed(()=>Boolean(engineId.value&&(details.overview.isInitialLoading.value||details.overview.isLoading.value)));const providerLoading=computed(()=>Boolean(engineId.value===`opencode`&&(details.providerPage.isInitialLoading.value||details.providerPage.isLoading.value)));const modelLoading=computed(()=>Boolean(modelProviderId.value&&(details.modelPage.isInitialLoading.value||details.modelPage.isLoading.value)));const detailsLoading=computed(()=>Boolean(engineDetailsLoading.value||providerLoading.value||modelLoading.value));const loading=computed(()=>overviewLoading.value||detailsLoading.value);const initialLoading=computed(()=>overviewLoading.value&&engineRows.value.length===0);const error=computed(()=>String(overview.overview.loadError.value||(engineId.value?details.overview.loadError.value:``)||(engineId.value===`opencode`?details.providerPage.loadError.value:``)||(engineId.value&&modelProviderId.value?details.modelPage.loadError.value:``)||``));const selectionSummary=computed(()=>selection.value?vibe64AssistantSelectionLabel(selection.value):``);function hydrateSelection(value=null){const current=value&&typeof value===`object`?value:{};engineId.value=String(current.engineId||``);modelProviderId.value=String(current.modelProviderId||``);modelId.value=String(current.modelId||``);agentId.value=String(current.agentId||``);variantId.value=String(current.variantId||``)}function selectEngine(value=``){engineId.value=String(value||``);modelProviderId.value=``;modelId.value=``;agentId.value=``;variantId.value=``}function selectProvider(value=``){modelProviderId.value=String(value||``);modelId.value=``;agentId.value=``;variantId.value=``}function selectModel(value=``){modelId.value=String(value||``);agentId.value=``;variantId.value=``}function selectVariant(value=``){variantId.value=String(value||``)}function openConnectionSettings(){if(!props.disabled)requestVibe64AccountConnectionsDialog({section:`ai`})}async function reload(){await Promise.allSettled([overview.reload(),details.reload()])}watch(active,(isActive,wasActive)=>{if(isActive&&!wasActive)hydrateSelection(props.initialSelection);if(!isActive){emit(`update:ready`,false);emit(`update:selection`,null)}},{immediate:true});watch([engineRows,overviewLoading],([engines,isLoading])=>{if(!active.value||isLoading||engines.some(engine=>engine.engineId===engineId.value))return;selectEngine(engines.find(engine=>engine.modelProviders?.some(provider=>provider.preferred===true))?.engineId||engines[0]?.engineId||``)},{immediate:true});watch([providerRows,engineDetailsLoading,providerLoading],([providers,engineLoading,providersLoading])=>{if(!active.value||engineLoading||providersLoading||providers.some(provider=>provider.id===modelProviderId.value))return;selectProvider(providers.find(provider=>provider.preferred===true)?.id||selectedEngine.value?.defaults?.modelProviderId||providers[0]?.id||``)},{immediate:true});watch([availableModels,modelRows,modelLoading],([models,allModels,isLoading])=>{if(!active.value||isLoading||allModels.some(model=>model.id===modelId.value&&model.status===`available`))return;const defaultModelId=selectedProvider.value?.defaultModelId||selectedEngine.value?.defaults?.modelId;selectModel(models.find(model=>model.id===defaultModelId)?.id||models[0]?.id||``)},{immediate:true});watch([compatibleAgents,detailsLoading],([agents,isLoading])=>{if(!active.value||isLoading||agents.some(agent=>agent.id===agentId.value))return;agentId.value=agents.find(agent=>agent.id===selectedEngine.value?.defaults?.agentId)?.id||agents[0]?.id||``},{immediate:true});watch([selectedModel,selectedAgent],([model,agent])=>{if(!active.value||!model)return;const fixedVariant=String(agent?.variantId||``);if(fixedVariant){variantId.value=fixedVariant;return}if(variantId.value&&!(model.variants||[]).some(variant=>variant.id===variantId.value))variantId.value=``},{immediate:true});watch(selection,current=>{emit(`update:ready`,Boolean(current)&&!loading.value&&!error.value);emit(`update:selection`,current)},{immediate:true});watch([loading,error],()=>{emit(`update:ready`,Boolean(selection.value)&&!loading.value&&!error.value)});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{"aria-labelledby":headingId,class:`studio-renewal-assistant`},[createBaseVNode(`div`,_hoisted_1$14,[createBaseVNode(`span`,null,[createBaseVNode(`strong`,{id:headingId,class:`text-title-small`},toDisplayString(__props.heading),1),createBaseVNode(`small`,_hoisted_2$10,toDisplayString(__props.supportingText),1)]),createVNode(VBtn,{disabled:__props.disabled||loading.value,size:`small`,type:`button`,variant:`text`,onClick:openConnectionSettings},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.manageLabel),1)]),_:1},8,[`disabled`])]),initialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,"aria-label":`Loading AI choices for the fresh session`,type:`list-item-two-line, list-item-two-line`})):error.value?(openBlock(),createBlock(VAlert,{key:1,density:`compact`,role:`alert`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_3$10,[createBaseVNode(`span`,null,toDisplayString(error.value),1),createVNode(VBtn,{disabled:loading.value,size:`small`,type:`button`,variant:`text`,onClick:reload},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Checking…`:`Try again`),1)]),_:1},8,[`disabled`])])]),_:1})):engineItems.value.length===0?(openBlock(),createBlock(VAlert,{key:2,density:`compact`,role:`status`,type:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.emptyMessage),1)]),_:1})):(openBlock(),createElementBlock(`div`,_hoisted_4$7,[engineItems.value.length>1?(openBlock(),createBlock(VSelect,{key:0,disabled:__props.disabled,"hide-details":`auto`,items:engineItems.value,label:`AI`,"model-value":engineId.value,variant:`outlined`,"onUpdate:modelValue":selectEngine},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true),providerItems.value.length>1?(openBlock(),createBlock(VSelect,{key:1,disabled:__props.disabled||detailsLoading.value,"hide-details":`auto`,items:providerItems.value,label:`Provider`,"model-value":modelProviderId.value,variant:`outlined`,"onUpdate:modelValue":selectProvider},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true),createVNode(VSelect,{disabled:__props.disabled||detailsLoading.value||modelItems.value.length===0,"hide-details":`auto`,items:modelItems.value,label:`Model`,"model-value":modelId.value,"no-data-text":`No available models`,variant:`outlined`,"onUpdate:modelValue":selectModel},null,8,[`disabled`,`items`,`model-value`]),variantItems.value.length>1?(openBlock(),createBlock(VSelect,{key:2,disabled:__props.disabled||detailsLoading.value,"hide-details":`auto`,items:variantItems.value,label:`Thinking`,"model-value":variantId.value,variant:`outlined`,"onUpdate:modelValue":selectVariant},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true)])),selectionSummary.value?(openBlock(),createElementBlock(`p`,_hoisted_5$6,toDisplayString(__props.summaryPrefix)+toDisplayString(selectionSummary.value),1)):createCommentVNode(``,true)])}}};var Vibe64RenewalAssistantSelector_default=_plugin_vue_export_helper_default(_sfc_main$15,[[`__scopeId`,`data-v-c35da031`]]);var _hoisted_1$13=[`aria-live`];var _hoisted_2$9={class:`text-title-small`};var _hoisted_3$9={"aria-label":`Session renewal progress`,class:`studio-session-renewal__steps text-body-medium`};var _hoisted_4$6=[`aria-current`];var _hoisted_5$5={class:`studio-session-renewal__step-icon`,"aria-hidden":`true`};var _hoisted_6$4={class:`d-sr-only`};var _sfc_main$14={__name:`Vibe64SessionRenewalProgress`,props:{refreshError:{default:``,type:String},stageLabel:{default:``,type:String},steps:{default:()=>[],type:Array}},setup(__props){const props=__props;const renewalProgress=computed(()=>{const steps=Array.isArray(props.steps)?props.steps:[];if(!steps.length)return 0;const completed=steps.reduce((value,step)=>value+(step.state===`complete`?1:step.state===`active`?.5:0),0);return Math.round(completed/steps.length*100)});function stepStateLabel(state=``){return{active:`Current step`,complete:`Complete`,pending:`Not started`}[String(state||``)]||``}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createBaseVNode(`div`,{class:`studio-session-renewal__progress-copy`,"aria-live":__props.refreshError?`off`:`polite`,role:`status`},[createBaseVNode(`strong`,_hoisted_2$9,toDisplayString(__props.stageLabel),1),_cache[0]||(_cache[0]=createBaseVNode(`span`,{class:`text-body-small`},`You can close this window. Progress is saved and will resume safely.`,-1))],8,_hoisted_1$13),createVNode(VProgressLinear,{"aria-label":`Session renewal in progress`,class:`studio-session-renewal__progress-line`,color:`primary`,indeterminate:!__props.refreshError,"model-value":__props.refreshError?renewalProgress.value:void 0,rounded:``},null,8,[`indeterminate`,`model-value`]),createBaseVNode(`ol`,_hoisted_3$9,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.steps,step=>{return openBlock(),createElementBlock(`li`,{key:step.id,"aria-current":step.state===`active`?`step`:void 0,class:normalizeClass([`studio-session-renewal__step--${step.state}`,{"font-weight-medium":step.state===`active`}])},[createBaseVNode(`span`,_hoisted_5$5,[createVNode(VIcon,{icon:step.state===`complete`?unref(mdiCheck):step.state===`active`?unref(mdiCircleSlice4):unref(mdiCircleOutline),size:`18`},null,8,[`icon`])]),createBaseVNode(`span`,null,toDisplayString(step.label),1),createBaseVNode(`span`,_hoisted_6$4,toDisplayString(stepStateLabel(step.state)),1)],10,_hoisted_4$6)}),128))])],64)}}};var Vibe64SessionRenewalProgress_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-c8c27703`]]);var SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS=2e4;var SESSION_RENEWAL_PROGRESS_STAGES=Object.freeze([Object.freeze({id:`handover`,label:`Prepare the handover`,stages:new Set([`draft_generating`,`draft_ready`])}),Object.freeze({id:`quiesce`,label:`Stop the old session safely`,stages:new Set([`old_quiescing`])}),Object.freeze({id:`successor`,label:`Create the fresh session`,stages:new Set([`successor_creating`,`successor_discarding`,`successor_setup`])}),Object.freeze({id:`briefing`,label:`Brief the fresh assistant`,stages:new Set([`successor_seeding`,`successor_acknowledged`])}),Object.freeze({id:`archive`,label:`Archive the old session`,stages:new Set([`old_archiving`])}),Object.freeze({id:`activate`,label:`Open the fresh session`,stages:new Set([`successor_activating`,`completed`])})]);var SESSION_RENEWAL_RESTORE_PROGRESS=Object.freeze([Object.freeze({id:`restore`,label:`Restore the old session safely`,state:`active`})]);var SESSION_RENEWAL_CANCEL_PROGRESS=Object.freeze([Object.freeze({id:`cancel`,label:`Keep the old session and discard the fresh one`,state:`active`})]);function sessionRenewalText(value=``){return String(value??``).replaceAll(`\r
22
+ `),completionMessage:`Subsystem map task finished. Review the map and session changes before saving.`,failureMessage:`The subsystem map task stopped before completion. Review its progress and any partial edits.`,nextStepMessage:`The subsystem view refreshes when this task finishes. File changes remain in the session for review and Save.`});return vibe64RequestAccepted(result)}function reportTemporaryRecovery(taskId,outcome){const workspace=temporaryAiWorkspace?.value;if(!workspace)return false;return outcome.status===`checking`?workspace.persistTaskRecovery?.(taskId,outcome)??false:workspace.reportTaskRecovery?.(taskId,outcome)??false}function reportVerifiedWorkspaceRecovery(){if(!workspaceRecoveryTaskId.value||workspaceSetupStatus.value!==`succeeded`)return false;const reported=temporaryAiWorkspace?.value?.reportTaskRecovery?.(workspaceRecoveryTaskId.value,{message:`Workspace preparation succeeded. Vibe64 independently verified the AI repair.`,status:`succeeded`});if(reported)workspaceRecoveryTaskId.value=``;return Boolean(reported)}async function finishTemporaryAiTask(task={}){const recovery=await handleTemporaryAiTaskFinished(task,reportTemporaryRecovery);if(!recovery)return false;if(recovery===`workspace-setup`){workspaceRecoveryTaskId.value=String(task.id||``).trim();reportVerifiedWorkspaceRecovery()}return true}function checkTemporaryAiUpdate(task){if(saveWork.updateWorkDisabled.value)return false;return handleTemporaryAiTaskFinished(task,reportTemporaryRecovery,{force:true})}watch(()=>[props.workState?.updateOperation,temporaryAiWorkspace?.value?.updateRepairTask],([operation,task])=>{if(!task||task.sessionId!==sessionId.value||!task.recoveryRequestId||operation?.requestId!==task.recoveryRequestId||![`checking`,`unconfirmed`].includes(task.recoveryOutcome))return;if(operation.status===`ready`)reportTemporaryRecovery(task.id,{status:`succeeded`,message:UPDATE_REPAIR_SUCCEEDED_MESSAGE});else if(operation.status===`failed`)reportTemporaryRecovery(task.id,{status:`failed`,message:updateRepairAttentionMessage(operation.error),recoveryConflictId:operation.conflictRecovery?.reviewId||``})},{flush:`post`});watch(workspaceSetupStatus,()=>{reportVerifiedWorkspaceRecovery()});watch(sessionId,()=>{workspaceRecoveryTaskId.value=``});watch([sessionId,projectSlug,actorKey],()=>{workspaceSetupFixTaskId.value=``;checkedUpdateRepairRuns.clear()});return{applyResolvedUpdate,checkTemporaryAiUpdate,describeSubsystems,finishTemporaryAiTask,fixPreviewIdentityWithTemporaryAi,fixRepositoryActionError,fixRepositoryError,fixWorkspaceSetupWithTemporaryAi,handleTemporaryAiTaskFinished,reportTemporaryRecovery,repositoryRecoverySending,systemReloadVersion,workspaceSetupAskDisabled,workspaceSetupFixSending}}function text(value=``){return String(value||``).trim()}function useVibe64WorkspaceSetupActivity(props,{actorKey,dismissals,projectSlug,retryBlocked,sessionId}){const workspaceSetupRetryError=ref(``);const workspaceSetupRetrying=ref(false);const workspaceSetup=computed(()=>{const value=props.session?.workspaceSetup;return value&&typeof value===`object`&&!Array.isArray(value)?value:{}});const workspaceSetupStatus=computed(()=>{const status=text(workspaceSetup.value?.status);if(status===`required`&&[`queued`,`running`,`starting`].includes(text(props.workState?.updateOperation?.status)))return`pending`;return[`ambiguous`,`failed`,`required`,`running`,`succeeded`].includes(status)?status:`unconfigured`});const workspaceSetupActivityKey=computed(()=>{const operationKey=text(workspaceSetup.value?.startedAt||workspaceSetup.value?.updatedAt);return operationKey?`workspace-setup:${operationKey}`:``});const workspaceSetupDismissed=computed(()=>Boolean(workspaceSetupActivityKey.value&&dismissals.state.value.workspaceSetup===workspaceSetupActivityKey.value));const workspaceSetupRunning=computed(()=>[`pending`,`running`].includes(workspaceSetupStatus.value));const workspaceSetupActionVisible=computed(()=>Boolean(sessionId.value&&workspaceSetupStatus.value!==`unconfigured`));const connectedRepositoryCount=computed(()=>{try{return JSON.parse(props.session?.metadata?.connected_sources||`null`)?.sources?.length||0}catch{return 0}});const connectedUpdateActionVisible=computed(()=>workspaceSetupActionVisible.value&&connectedRepositoryCount.value>0);const workspaceSetupNeedsAttention=computed(()=>[`failed`,`ambiguous`,`required`].includes(workspaceSetupStatus.value));const workspaceSetupDiagnostic=computed(()=>workspaceSetupRetryError.value||text(workspaceSetup.value?.diagnostic));const workspaceSetupOutput=computed(()=>text(workspaceSetup.value?.transcript)||workspaceSetupDiagnostic.value);const workspaceSetupTitle=computed(()=>({ambiguous:`Workspace setup needs a choice`,failed:`Workspace preparation failed`,required:`Workspace preparation required`,pending:`Waiting for session update…`,running:`Preparing workspace…`,succeeded:`Workspace prepared`})[workspaceSetupStatus.value]||``);const workspaceSetupCurrentLabel=computed(()=>{if(workspaceSetupStatus.value===`required`)return workspaceSetupDiagnostic.value;if(workspaceSetupStatus.value===`pending`)return`Workspace preparation will start automatically after the update.`;return workspaceSetupRunning.value?text(workspaceSetup.value?.currentLabel):``});const workspaceSetupError=computed(()=>workspaceSetupRetryError.value||(workspaceSetupNeedsAttention.value&&workspaceSetupStatus.value!==`required`?workspaceSetupDiagnostic.value:``));const workspaceSetupRetryDisabled=computed(()=>Boolean(workspaceSetupRunning.value||workspaceSetupRetrying.value||retryBlocked.value||!sessionId.value||props.sessionSelectionArchived));async function retryWorkspaceSetup(){if(workspaceSetupRetryDisabled.value)return false;dismissals.clear(`workspaceSetup`);workspaceSetupRetryError.value=``;workspaceSetupRetrying.value=true;try{return await props.retryWorkspaceSetup()!==false}catch(error){workspaceSetupRetryError.value=text(error?.message||error)||`Workspace preparation could not be started.`;return false}finally{workspaceSetupRetrying.value=false}}function dismissWorkspaceSetupActivity(){return dismissals.dismiss(`workspaceSetup`,workspaceSetupActivityKey.value)}watch([sessionId,projectSlug,actorKey],()=>{workspaceSetupRetryError.value=``});watch(()=>workspaceSetup.value?.updatedAt,()=>{workspaceSetupRetryError.value=``});return{connectedUpdateActionVisible,dismissWorkspaceSetupActivity,retryWorkspaceSetup,workspaceSetup,workspaceSetupActionVisible,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDiagnostic,workspaceSetupDismissed,workspaceSetupError,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}}var NUMBERED_QUESTION_UNSURE_VALUE=`I am not sure`;var NUMBERED_QUESTION_UNSURE_CHOICE=Object.freeze({label:NUMBERED_QUESTION_UNSURE_VALUE,recommended:false,selectLabel:NUMBERED_QUESTION_UNSURE_VALUE,value:NUMBERED_QUESTION_UNSURE_VALUE});function agentConnectionThinkingLabel({active=false,status=`connected`}={}){if(!active||[`connected`,`failed`,`restricted`].includes(status))return``;if(status===`initializing`)return`Loading assistant…`;if(status===`disconnected`)return`Connection lost — assistant status unknown.`;return status===`reconciling`?`Checking assistant status...`:`Assistant status could not be verified.`}function useVibe64AutopilotView(props,emit,{assistantAccessLoading=null,assistantCanUseAi=null,assistantCanRouteChat=null,assistantCanUseFix=null,assistantCanUseNative=null,assistantProgressLabel=null,mainChatApprovals=null,onAttachmentsAccepted=null,requestTemporaryAi=null,temporaryAiWorkspace=null}={}){const router=useRouter();const projectSlug=useVibe64ProjectSlug();const Vibe64OutputControls=defineVibe64AsyncComponent({label:`Launch controls`,loader:()=>__vitePreload(()=>import(`./Vibe64OutputControls-Dk_DWuFb.js`),__vite__mapDeps([95,1,2,3,6,5,7,8,9,10,11,19,16,17,18,20,21,22,23,24,37,38,39,40,41,44,25,26,45,46,47,48,49,52,53,81,30,82,63,68,12,13,32,67,69,96,33,59,60,85,35,36,86,15,27,28,29,42,43,83,84,87,88,64,34,65,66,4,70,71,97,72,77,0,14,31,50,51,54,55,56,57,58,61,62,73,74,75,76,78,79,80,89,90,91,92,93,94,98,99,100,101,102,103,104,105,106,107])),minHeight:`10rem`});const agentSettings=computed(()=>props.conversationRuntime?.agentSettings);const preferredName=inject(VIBE64_WELCOME_NAME_KEY,()=>{const accounts=useVibe64Accounts();return computed(()=>accounts.status.value?.personalProfile?.preferredName)},true);const requestAgentSettings=computed(()=>agentSettings.value?.requestSettings.value||null);const sessionId=computed(()=>normalizeText$1(props.session?.sessionId));const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const reportActivity=usePageActivity();const actorKey=computed(()=>unref(viewer)?.actorKey||``);const assistantAccessConfigured=assistantCanUseAi!==null;const assistantAccessPending=computed(()=>assistantAccessConfigured&&unref(assistantAccessLoading)===true);const assistantDirectAllowed=computed(()=>!assistantAccessConfigured||unref(assistantCanUseAi)===true);const assistantFixAllowed=computed(()=>assistantCanUseFix===null?assistantDirectAllowed.value:unref(assistantCanUseFix)===true);const sessionGithubActor=computed(()=>sessionGithubCommandActor(props.session||{}));const sessionGithubActorHeaderVisible=computed(()=>Boolean(props.active&&sessionGithubActor.value.available&&String(props.githubActorTeleportTarget||``).trim()));const sessionSourceRoot=computed(()=>String(props.session?.sourcePath||``));const{activeAgentTurn,agentActive,agentNativeTurnReady,agentObservationLost,agentSteerable,agentWorking,assistantAccountMessage,assistantAccountUnavailable,assistantConnectionReady,composerConnectionStatus,reasoningActive}=useVibe64AgentTurnState(props,{assistantCanRouteChat,projectSlug,reportActivity,sessionId});const chatCollapsed=computed(()=>Boolean(props.chatCollapsed));const sessionToolbarVisible=computed(()=>Boolean(Array.isArray(props.sessionToolbar?.sessions)&&props.sessionToolbar.sessions.length));const approvalMode=computed(()=>mainChatApprovals?.memberMode===true);const approvalOwner=computed(()=>mainChatApprovals?.ownerName||`the owner`);const approvalOwnerSentence=computed(()=>approvalOwner.value.charAt(0).toUpperCase()+approvalOwner.value.slice(1));const lessonTeamAiLabel=computed(()=>mainChatApprovals?.lessonTeamAi===true&&props.session?.assistantSelection?vibe64AssistantSelectionLabel(props.session.assistantSelection):``);const composerKey=computed(()=>JSON.stringify([actorKey.value,projectSlug.value,sessionId.value]));const composerDraft=computed({get:()=>props.conversationRuntime?.draft.value||``,set:value=>{if(props.conversationRuntime)props.conversationRuntime.draft.value=value}});const composerAttachments=computed({get:()=>props.conversationRuntime?.draftAttachments.value||[],set:value=>{if(props.conversationRuntime)props.conversationRuntime.draftAttachments.value=value}});const composerRetrySubmission=computed(()=>props.conversationRuntime?.draftRetry.value||null);const messageDelivery=computed(()=>props.conversationRuntime?.delivery||null);const composerSending=computed(()=>messageDelivery.value?.state.sending===true);const composerQueueing=computed(()=>props.conversationRuntime?.queueWhileSending.value===true);const composerStartupQueueing=computed(()=>composerQueueing.value&&composerSending.value&&activeAgentTurn.value.state===`starting`&&!agentObservationLost.value);const composerSubmissionKind=ref(``);const routingRequest=computed(()=>assistantRoutingRequestForDisplay(props.session?.metadata));const routingBusy=computed(()=>assistantRoutingStatusIsPending(routingRequest.value)&&!assistantRoutingRequestCanBeReplaced(routingRequest.value,props.session?.assistantSelection));const composerRoutingQueueing=computed(()=>composerQueueing.value&&composerSending.value&&Boolean(routingRequest.value?.messageId)&&messageDelivery.value?.find(routingRequest.value.messageId)?.status===`pending`);const interrupting=ref(false);const previewAttachmentState=ref({attachDiagnostics:null,capture:null,captureAvailable:false,captureBusy:false,diagnosticsAvailable:false,diagnosticsBusy:false});const dismissals=useVibe64ShortActionDismissals(projectSlug,sessionId);const checkpointTask=computed(()=>(props.session?.backgroundTasks||[]).find(task=>task.id===`codex_turn_checkpoint`&&task.status===`failed`));const checkpointFailure=computed(()=>checkpointTask.value?.error||``);const checkpointFailureKey=computed(()=>checkpointFailure.value?JSON.stringify([checkpointTask.value.checkpointTurnId,checkpointTask.value.updatedAt,checkpointFailure.value]):``);const checkpointFailureVisible=computed(()=>Boolean(checkpointFailure.value&&dismissals.state.value.checkpoint!==checkpointFailureKey.value));const checkpointFailureReason=computed(()=>/\bSIG(?:TERM|KILL|INT)\b/u.test(checkpointFailure.value)?`The snapshot command was interrupted.`:`Vibe64 could not create a recovery snapshot for an assistant turn.`);function dismissCheckpointFailure(){return dismissals.dismiss(`checkpoint`,checkpointFailureKey.value)}const questionState=useAssistantQuestions({message:()=>latestAssistantMessageAwaitingUserReply(props.conversationLog),extraChoice:NUMBERED_QUESTION_UNSURE_CHOICE});const{answers:questionAnswers,choice:selectedAnswerChoice,questions:numberedQuestions,selectItems:numberedQuestionSelectItems,choices:answerChoices,active:structuredQuestionActive,dismiss:dismissNumberedQuestions}=questionState;const repositoryOperationActive=computed(()=>[props.workState?.operation,props.workState?.updateOperation].some(operation=>[`queued`,`running`,`starting`].includes(String(operation?.status||``).trim().toLowerCase())));const sessionInteractionDisabled=computed(()=>Boolean(!props.active||!sessionId.value||props.sessionSelectionArchived));const composerDisabled=computed(()=>Boolean(sessionInteractionDisabled.value||!approvalMode.value&&!assistantDirectAllowed.value));const composerAttachmentsSupported=computed(()=>!approvalMode.value);const composerAttachmentsEnabled=computed(()=>Boolean(composerAttachmentsSupported.value&&!composerDisabled.value&&!composerSending.value&&!interrupting.value&&(!agentActive.value||agentSteerable.value)&&!repositoryOperationActive.value));const composerRetryMatchesDraft=computed(()=>props.conversationRuntime?.draftRetryMatches.value===true);const composerSubmitMode=computed(()=>{if(approvalMode.value)return mainChatApprovals.sending?`approval-sending`:`approval`;if(assistantAccountUnavailable.value)return`unavailable`;if(composerConnectionStatus.value===`initializing`)return`initializing`;if(composerConnectionStatus.value===`failed`)return`failed`;if(composerConnectionStatus.value!==`connected`)return`reconnecting`;if(routingBusy.value&&!agentActive.value&&!composerRoutingQueueing.value)return`routing`;if(agentActive.value&&(!agentNativeTurnReady.value&&!composerStartupQueueing.value||!agentSteerable.value&&!composerQueueing.value))return`waiting`;if(composerSending.value&&!composerQueueing.value)return composerSubmissionKind.value===`steer`?`steering`:`sending`;if(agentSteerable.value)return composerRetryMatchesDraft.value?`retry`:`steer`;return composerRetryMatchesDraft.value?`retry`:`send`});const composerSubmitAriaLabel=computed(()=>({approval:`Send to ${approvalOwner.value} for approval`,"approval-sending":`Sending to ${approvalOwner.value} for approval`,routing:`Preparing the message recipient`,failed:`Assistant unavailable`,unavailable:`Connect your AI account to send messages`,initializing:`Waiting for the assistant to load`,reconnecting:`Waiting for the connection to recover`,retry:`Retry guidance to assistant`,sending:`Sending message`,steer:`Steer assistant`,steering:`Sending guidance to assistant`,waiting:`Waiting for the assistant to accept guidance`})[composerSubmitMode.value]||`Send message`);const composerSubmitTitle=computed(()=>({approval:`${approvalOwnerSentence.value} approves each message before it reaches main chat`,"approval-sending":`Keep typing while this message is sent for approval`,routing:`Keep typing while this request is routed`,failed:`Resolve the assistant startup error, then retry. Your draft is kept.`,unavailable:`Go to AI Accounts to connect your assistant. Your draft is kept.`,initializing:`Keep typing while the assistant loads`,reconnecting:`Your draft is kept while the connection recovers`,retry:`Retry the same guidance without duplicating it`,sending:`Keep typing while this message is sent`,steer:`Send this guidance to the active assistant turn`,steering:`Keep typing while this guidance is sent`,waiting:`Keep typing while the assistant becomes ready`})[composerSubmitMode.value]||`Send message`);const composerCanSubmit=computed(()=>{if(approvalMode.value)return!composerDisabled.value&&!mainChatApprovals.sending&&Boolean(composerDraft.value.trim());if(!props.conversationRuntime?.canSubmit.value||composerDisabled.value||routingBusy.value&&!agentSteerable.value&&!composerRoutingQueueing.value)return false;if(composerConnectionStatus.value!==`connected`||composerSending.value&&!composerQueueing.value||interrupting.value||repositoryOperationActive.value||agentActive.value&&(!agentNativeTurnReady.value&&!composerStartupQueueing.value||!agentSteerable.value&&(!composerQueueing.value||composerAttachments.value.length>0)))return false;if(numberedQuestions.value.length)return numberedQuestions.value.every(question=>String(questionAnswers.value[question.name]||``).trim());return Boolean(answerChoices.value.length&&selectedAnswerChoice.value||composerDraft.value.trim())});const agentStopVisible=computed(()=>agentActive.value||routingBusy.value);const agentStopEnabled=computed(()=>Boolean(agentStopVisible.value&&!interrupting.value&&(!composerSending.value||routingBusy.value||!agentSteerable.value&&composerQueueing.value)));const connectionRecoveryVisible=computed(()=>!sessionInteractionDisabled.value&&[`disconnected`,`unknown`,`reconciling`,`unavailable`,`failed`].includes(composerConnectionStatus.value));const thinkingVisible=computed(()=>Boolean(!assistantAccountUnavailable.value&&(agentActive.value||composerSending.value||!assistantConnectionReady.value&&![`failed`,`restricted`].includes(composerConnectionStatus.value)&&!sessionInteractionDisabled.value)));const thinkingLabel=computed(()=>(agentObservationLost.value&&agentActive.value?`Assistant stop not yet confirmed`:``)||agentConnectionThinkingLabel({active:!sessionInteractionDisabled.value,status:composerConnectionStatus.value})||(agentActive.value&&activeAgentTurn.value.phase===`compacting`?`Compacting conversation context…`:``)||(agentActive.value&&activeAgentTurn.value.phase===`background`?`Reply ready · background task still running…`:``)||(unref(props.conversationRuntime?.phase)===`compacting`?`Summarising the assistant's memory before sending…`:``)||(agentActive.value?unref(assistantProgressLabel):``)||(agentActive.value?`Assistant is working...`:``)||(composerSending.value?`Sending to assistant...`:``));const composerHint=computed(()=>approvalMode.value?`Main chat runs on ${approvalOwner.value}'s AI. ${approvalOwnerSentence.value} approves each message.`:lessonTeamAiLabel.value?`This lesson runs on the team AI: ${lessonTeamAiLabel.value}. Only you see this chat.`:agentObservationLost.value?agentActive.value?`The stop is not yet confirmed. Your draft is kept; you can retry Stop.`:`The assistant stopped because its progress could not be tracked. Send a message to continue.`:structuredQuestionActive.value?`Answer the assistant, then send one combined reply.`:``);const composerPlaceholder=computed(()=>approvalMode.value?`Message main chat — ${approvalOwner.value} approves before it's sent`:lessonTeamAiLabel.value?`Message your lesson's AI — ${lessonTeamAiLabel.value} (team AI)`:numberedQuestions.value.length?`Optional additional context…`:answerChoices.value.length?`Choose an answer above, or type another answer…`:``);const saveWork=useVibe64SessionSaveWork(props,{actorKey,agentActive,composerSending,dismissals,projectSlug,reportActivity,repositoryOperationActive,sessionId,sessionInteractionDisabled});const workspaceSetupActivity=useVibe64WorkspaceSetupActivity(props,{actorKey,dismissals,projectSlug,retryBlocked:computed(()=>Boolean(repositoryOperationActive.value||saveWork.saveWorkSending.value||saveWork.saveWorkOperationActive.value||agentActive.value)),sessionId});const temporaryAiRepairs=useVibe64TemporaryAiRepairs(props,{actorKey,assistantFixAllowed,projectSlug,repositoryOperationActive,requestTemporaryAi,saveWork,sessionId,temporaryAiWorkspace,workspaceSetupActivity});function updateComposerAttachments(attachments=[]){composerAttachments.value=Array.isArray(attachments)?attachments:[]}function updatePreviewAttachmentState(state={}){previewAttachmentState.value={attachDiagnostics:typeof state.attachDiagnostics===`function`?state.attachDiagnostics:null,capture:typeof state.capture===`function`?state.capture:null,captureAvailable:state.captureAvailable===true,captureBusy:state.captureBusy===true,diagnosticsAvailable:state.diagnosticsAvailable===true,diagnosticsBusy:state.diagnosticsBusy===true}}function captureVisiblePreview(){return previewAttachmentState.value.capture?.()??false}function attachPreviewDiagnostics(){return previewAttachmentState.value.attachDiagnostics?.()??false}async function requestAgentInterrupt(){if(!agentStopEnabled.value)return false;const stoppingSessionId=sessionId.value;const stoppingProjectSlug=projectSlug.value;const stoppingTurnId=normalizeText$1(activeAgentTurn.value.id);interrupting.value=true;let acknowledgeStop;const receipt=new Promise(resolve=>{acknowledgeStop=resolve});const stopWatchingReceipt=watch([sessionId,projectSlug,()=>activeAgentTurn.value.id,()=>activeAgentTurn.value.active],([currentSessionId,currentProjectSlug,turnId,active])=>{if(currentSessionId!==stoppingSessionId||currentProjectSlug!==stoppingProjectSlug)acknowledgeStop(false);else if(stoppingTurnId&&normalizeText$1(turnId)===stoppingTurnId&&active===false)acknowledgeStop(true)});try{return await Promise.race([props.interruptAgentTurn({reason:`user_interrupt`}),receipt])!==false}finally{stopWatchingReceipt();if(sessionId.value===stoppingSessionId&&projectSlug.value===stoppingProjectSlug)interrupting.value=false}}const chatPane=useVibe64AutopilotChatPane(props,{composerSending,messageDelivery,preferredName,routingRequest,sessionId,workspaceSetupStatus:workspaceSetupActivity.workspaceSetupStatus});const sessionToolPane=useVibe64SessionToolPane(props,emit,{actorKey,assistantAccessPending,assistantCanUseNative,assistantDirectAllowed,projectSlug,requestSaveWork:saveWork.requestSaveWork,sessionId,sessionSourceRoot});function integrationRequestAllowed(request){return Boolean(props.active&&!props.sessionSelectionArchived&&request.sessionId===sessionId.value)}function runIntegrationRequest({action,...request}){if(!integrationRequestAllowed(request))return false;return props.conversationLog?.[`${action}IntegrationRequest`]?.(request)||false}function openIntegrationRequest(request){if(!integrationRequestAllowed(request))return;router.push({path:projectAppPath(projectSlug.value,`/dashboard/integrations`),query:{integration:request.integrationId,integrationSession:sessionId.value,integrationTurn:request.turnId,integrationRequest:request.requestId}});emit(`project-attention`)}const assistantDraftAvailable=computed(()=>Boolean(props.active&&sessionId.value&&!props.sessionSelectionArchived&&assistantDirectAllowed.value));function prefillComposer(text=``,{append=false}={}){const prompt=normalizeText$1(text);if(!prompt||!assistantDraftAvailable.value)return false;composerDraft.value=append&&composerDraft.value.trim()?`${composerDraft.value}\n\n${prompt}`:prompt;emit(append?`chat-attention`:`project-attention`);return true}function askAssistantAboutFile(path=``){const normalizedPath=normalizeText$1(path);return normalizedPath?prefillComposer(`Please look at \`${normalizedPath}\` and help me with this file.`):false}watch([sessionId,projectSlug,actorKey],()=>{composerSubmissionKind.value=``;interrupting.value=false;questionState.reset()});const delivery=useVibe64MainChatDelivery(props,emit,{actorKey,agentSteerable,approvalMode,composerAttachments,composerCanSubmit,composerDraft,composerQueueing,composerRetryMatchesDraft,composerRetrySubmission,composerSending,composerSubmissionKind,mainChatApprovals,messageDelivery,onAttachmentsAccepted,projectSlug,questionState,reportActivity,requestAgentSettings,routingRequest,sessionId});watch(()=>Boolean(agentActive.value||composerSending.value||interrupting.value||saveWork.saveWorkSending.value),busy=>{emit(`busy-change`,busy)},{immediate:true});return{...saveWork,...workspaceSetupActivity,...temporaryAiRepairs,...sessionToolPane,...chatPane,...delivery,Vibe64OutputControls,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,attachPreviewDiagnostics,captureVisiblePreview,chatCollapsed,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,routingBusy,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,dismissNumberedQuestions,interrupting,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,previewAttachmentState,projectSlug,questionAnswers,repositoryOperationActive,requestAgentInterrupt,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,structuredQuestionActive,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState}}var vibe64AutopilotViewEmits=[`busy-change`,`chat-attention`,`execution-attention`,`project-attention`];var vibe64AutopilotViewProps={active:{default:true,type:Boolean},agentConnectionError:{default:``,type:String},agentConnectionStatus:{default:`connected`,type:String},retryAgentConnection:{default:()=>{},type:Function},chatCollapsed:{default:false,type:Boolean},cancelAgentMessage:{default:async()=>false,type:Function},conversationRuntime:{required:true,type:Object},conversationLog:{default:()=>({}),type:Object},githubActorTeleportTarget:{default:``,type:String},createSessionTeleportTarget:{default:``,type:String},interruptAgentTurn:{default:async()=>false,type:Function},page:{default:()=>({}),type:Object},previewToolbarTeleportTarget:{default:``,type:String},usageRecordingTeleportTarget:{default:``,type:String},promptHintPolicy:{default:()=>({enabled:true,ready:false,revision:0,version:0}),type:Object},projectContext:{default:()=>({}),type:Object},projectPane:{default:`preview`,type:String},refreshSessionData:{default:async()=>null,type:Function},refreshSessionWork:{default:async()=>null,type:Function},retryWorkspaceSetup:{default:async()=>false,type:Function},saveSessionWork:{default:async()=>false,type:Function},updateSessionWork:{default:async()=>false,type:Function},sendAgentMessage:{default:async()=>false,type:Function},session:{default:null,type:Object},sessionArchive:{default:()=>({}),type:Object},sessionRenewal:{default:()=>({}),type:Object},sessionSelectionArchived:{default:false,type:Boolean},sessionsApiPath:{default:``,type:[String,Object,Function]},sessionToolbar:{default:()=>({}),type:Object},workState:{default:()=>({}),type:Object}};var _hoisted_1$19=[`title`];var _sfc_main$21={__name:`Vibe64AutopilotView`,props:vibe64AutopilotViewProps,emits:vibe64AutopilotViewEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const learning=useVibe64Learning();const lessonShown=computed(()=>learning.lessonShown);const resourceRecoveryControl=inject(VIBE64_RESOURCE_RECOVERY_KEY,null);const usageOpenRequest=ref(null);watch(()=>props.session?.sessionId,()=>{usageOpenRequest.value=null});const sourceOperationsSuspended=computed(()=>props.sessionRenewal?.sourceOperationsSuspended===true);const composerInput=ref(null);const mainChat=ref(null);const approvalsPanel=ref(null);const{xs:phoneLayout}=useDisplay();const temporaryAiWorkspace=ref(null);const testApproval=ref(null);function updateTestApproval(value){if(value.sessionId===props.session?.sessionId)testApproval.value=value.approval}watch(()=>props.session?.sessionId,()=>{testApproval.value=null});const selectedAssistantSessionId=computed(()=>String(props.session?.sessionId||``).trim());const openCodeProgressLabel=ref(``);const openCodeProviderLabel=computed(()=>vibe64ProviderPresentation(props.session?.assistantSelection).label||`OpenCode`);function visibleOpenCodeProgressLabel(progress={}){if(String(progress.tool||``).trim())return`${openCodeProviderLabel.value} is using a tool…`;if(String(progress.partType||``).trim()===`reasoning`||String(progress.type||``).includes(`reasoning`))return`${openCodeProviderLabel.value} is reasoning…`;if(String(progress.text||``).trim())return`${openCodeProviderLabel.value} is writing…`;return`${openCodeProviderLabel.value} is working…`}useRealtimeEvent({enabled:computed(()=>Boolean(props.active&&!props.sessionSelectionArchived&&selectedAssistantSessionId.value&&props.session?.assistantSelection?.engineId===`opencode`)),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(String(payload.sessionId||payload.entityId||``).trim()===selectedAssistantSessionId.value&&(payload.assistantProgress||[`opencode-server-message-delivered`,`opencode-server-turn-active`,`opencode-server-turn-idle`].includes(payload.reason))),onEvent:({payload={}}={})=>{openCodeProgressLabel.value=payload.reason===`opencode-server-turn-idle`?``:visibleOpenCodeProgressLabel(payload.assistantProgress||{})}});watch([selectedAssistantSessionId,()=>props.session?.assistantSelection?.engineId],()=>{openCodeProgressLabel.value=``},{immediate:true});const{resource:modelRoutingResource}=useModelRouting({view:`main`,enabled:computed(()=>!props.sessionSelectionArchived&&Boolean(selectedAssistantSessionId.value))});const assistantCanConfigureRouting=computed(()=>modelRoutingResource.data.value?.canConfigure===true);const assistantAccessError=computed(()=>props.conversationRuntime.access.accessError.value);const assistantCanUseAiState=computed(()=>props.conversationRuntime.access.canUseChat.value);const assistantCanRouteChat=computed(()=>props.conversationRuntime.access.canRouteChat.value);const assistantCanUseNative=computed(()=>props.conversationRuntime.access.canUseNative.value);const assistantPurposes=computed(()=>props.conversationRuntime.access.purposes.value);const assistantAccessScopeKey=computed(()=>props.conversationRuntime.access.scopeKey.value);const assistantAccessLoading=computed(()=>props.conversationRuntime.access.initialAccessLoading.value);const assistantRestrictionMessage=computed(()=>mainChatApprovals.memberMode?``:props.conversationRuntime.access.restrictionMessage.value);const assistantCanUsePurpose=purpose=>props.conversationRuntime.access.canUsePurpose(purpose);const reloadAssistantAccess=()=>props.conversationRuntime.access.reload();const mainChatApprovals=reactive(useVibe64MainChatApprovals({active:()=>props.active&&!props.sessionSelectionArchived,projectSlug:useVibe64ProjectSlug(),sessionId:selectedAssistantSessionId,sessionsApiPath:()=>readRefOrGetterValue(props.sessionsApiPath),onReview(reviewedSessionId){if(reviewedSessionId&&reviewedSessionId!==selectedAssistantSessionId.value)props.sessionToolbar?.selectSession?.(reviewedSessionId);nextTick(revealApprovals)}}));const autopilotView=useVibe64AutopilotView(props,emit,{assistantAccessLoading,assistantCanUseAi:assistantCanUseAiState,assistantCanRouteChat,assistantCanUseFix:computed(()=>assistantCanUsePurpose(`fix`)),assistantCanUseNative,assistantProgressLabel:openCodeProgressLabel,mainChatApprovals,onAttachmentsAccepted:attachmentIds=>composerInput.value?.clearAttachments?.({attachmentIds}),requestTemporaryAi:startTemporaryAiTask,temporaryAiWorkspace});const{agentActive,assistantDirectAllowed,assistantDraftAvailable,assistantFixAllowed,chatCollapsed,dashboardSessionContext,fixRepositoryError,openSourceEditorFile,prefillComposer,projectSlug,selectSessionTool,sessionGithubActor,sessionGithubActorHeaderVisible,sessionId,sourceEditorOpenRequest}=autopilotView;function openUsage({entryId=``,mode=`recording`,recordingId=``}={}){if(!selectSessionTool(`system`))return;usageOpenRequest.value={view:`usage`,mode,...recordingId?{recordingId}:{},...entryId?{entryId}:{},nonce:(usageOpenRequest.value?.nonce||0)+1}}const fileBookmarks=useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath:()=>props.sessionsApiPath});function revealApprovals(){if(phoneLayout.value){approvalsPanel.value?.open();return}mainChat.value?.querySelector(`.vibe64-approvals`)?.scrollIntoView({block:`nearest`,behavior:`smooth`})}watch(agentActive,active=>{if(!active)openCodeProgressLabel.value=``},{flush:`sync`,immediate:true});const createPullRequestOpen=ref(false);const sessionPullRequest=computed(()=>vibe64SessionPullRequest(props.session));const sessionPullRequestTarget=computed(()=>sessionPullRequest.value?.number?{path:projectAppPath(projectSlug.value,`/dashboard/pull-requests`),query:{pr:String(sessionPullRequest.value.number)}}:void 0);const githubProject=computed(()=>githubProjectAvailable(props.projectContext));const assistantFixRestrictionMessage=computed(()=>assistantPurposes.value.fix?.message||`Fix it with AI is unavailable. Review Models.`);const dashboardContext=computed(()=>({...dashboardSessionContext.value||{},assistantDirectAllowed:assistantDirectAllowed.value,assistantDraftAvailable:assistantDraftAvailable.value,assistantFixAllowed:assistantFixAllowed.value,assistantFixRestrictionMessage:assistantFixRestrictionMessage.value,assistantRestrictionMessage:assistantRestrictionMessage.value,requestAssistantDraft:text=>prefillComposer(text,{append:true}),requestUpdateWork:props.updateSessionWork,requestTemporaryAi:fixRepositoryError,sourceOperationsSuspended:sourceOperationsSuspended.value}));async function startTemporaryAiTask(options={}){if(!assistantCanUsePurpose(`fix`)||props.sessionSelectionArchived)return false;emit(`chat-attention`);const workspace=temporaryAiWorkspace.value;if(typeof workspace?.startTask!==`function`)return false;return workspace.startTask(options)}function requestSessionRenewal(returnFocusTarget=null){props.sessionRenewal?.request?.({returnFocusTarget:returnFocusTarget?.$el||returnFocusTarget});return true}function openWorkingFile(path){if(typeof path!==`string`||!path)return false;openSourceEditorFile({path,presentation:`code`});return sourceEditorOpenRequest.value?.path===path}const view={...autopilotView,approvalsPanel,assistantAccessError,assistantAccessLoading,assistantAccessScopeKey,assistantCanConfigureRouting,assistantCanUsePurpose,assistantFixRestrictionMessage,assistantPurposes,assistantRestrictionMessage,composerInput,createPullRequestOpen,dashboardContext,emit,fileBookmarks,githubProject,lessonShown,mainChat,mainChatApprovals,openUsage,openWorkingFile,phoneLayout,props,reloadAssistantAccess,requestSessionRenewal,resourceRecoveryControl,revealApprovals,selectedAssistantSessionId,sessionPullRequest,sessionPullRequestTarget,sourceOperationsSuspended,startTemporaryAiTask,temporaryAiWorkspace,testApproval,updateTestApproval,usageOpenRequest};const assistantHost=inject(VIBE64_ASSISTANT_HOST_KEY,null);const assistantLayerSelected=computed(()=>props.active&&!props.sessionSelectionArchived&&!temporaryAiWorkspace.value?.visible);const assistantLayer=reactive({get sessionId(){return sessionId.value}});watchEffect(()=>{if(!assistantHost)return;if(assistantLayerSelected.value)assistantHost.value=assistantLayer;else if(assistantHost.value===assistantLayer)assistantHost.value=null},{flush:`sync`});onBeforeUnmount(()=>{if(assistantHost?.value===assistantLayer)assistantHost.value=null});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`studio-autopilot`,{"studio-autopilot--chat-collapsed":unref(chatCollapsed)}])},[unref(sessionGithubActorHeaderVisible)?(openBlock(),createBlock(Teleport,{key:0,to:props.githubActorTeleportTarget},[createBaseVNode(`div`,{class:normalizeClass([`studio-home-shell-session-github-actor`,{"studio-home-shell-session-github-actor--inactive":!unref(sessionGithubActor).active}]),role:`status`,title:unref(sessionGithubActor).title},[createVNode(VIcon,{icon:unref(mdiGithub),size:`14`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(unref(sessionGithubActor).displayLabel),1)],10,_hoisted_1$19)],8,[`to`])):createCommentVNode(``,true),props.active&&props.usageRecordingTeleportTarget&&unref(sessionId)?(openBlock(),createBlock(Teleport,{key:1,to:props.usageRecordingTeleportTarget,defer:``},[createVNode(unref(Vibe64UsageRecordingIndicator_default),{"session-id":unref(sessionId),onOpenUsage:openUsage},null,8,[`session-id`])],8,[`to`])):createCommentVNode(``,true),githubProject.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:2,modelValue:createPullRequestOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>createPullRequestOpen.value=$event),"dashboard-context":dashboardContext.value},null,8,[`modelValue`,`dashboard-context`])):createCommentVNode(``,true),createBaseVNode(`section`,{ref_key:`mainChat`,ref:mainChat,class:`studio-autopilot__chat-panel`,"aria-label":`Session chat`,tabindex:`-1`},[createVNode(Vibe64AutopilotSessionHeader_default,{view}),createVNode(Vibe64AutopilotActivity_default,{view}),createVNode(Vibe64AutopilotChat_default,{view})],512),createVNode(Vibe64AutopilotProjectPanel_default,{view},{dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,`dashboard`,normalizeProps(guardReactiveProps(dashboardSlotProps)),void 0,true)]),"ai-terminal":withCtx(terminalSlotProps=>[renderSlot(_ctx.$slots,`ai-terminal`,normalizeProps(guardReactiveProps(terminalSlotProps)),void 0,true)]),_:3}),createVNode(_sfc_main$35,{view})],2)}}};var Vibe64AutopilotView_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-246e6eb1`]]);var _sfc_main$20={__name:`Vibe64InteractiveTerminal`,props:{closeLabel:{default:`Close terminal`,type:String},closeOnCleanExit:{default:true,type:Boolean},commandPreview:{default:``,type:String},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},fill:{default:true,type:Boolean},height:{default:`100%`,type:String},presentation:{default:`inline`,type:String},showClose:{default:true,type:Boolean},showCopy:{default:true,type:Boolean},showInterrupt:{default:true,type:Boolean},stage:{default:``,type:String},status:{default:``,type:String},subtitle:{default:``,type:String},terminal:{required:true,type:Object},title:{default:`Interactive terminal`,type:String},visible:{default:false,type:Boolean}},emits:[`clean-exit`,`close`,`copy`,`interrupt`,`retry`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const forwardedSlots=[`actions-after`,`actions-before`,`before-terminal`,`error-actions`,`footer`,`heading`,`overlay`];function terminalValue(name,fallback=null){const value=unref(props.terminal?.[name]);return typeof value===`undefined`?fallback:value}watch(()=>[String(terminalValue(`terminalSessionId`,``)),String(terminalValue(`terminalStatus`,props.status)||``),terminalValue(`terminalExitCode`,null)],([terminalSessionId,status,exitCode],previous=[])=>{const previousStatus=String(previous[1]||``);if(props.closeOnCleanExit&&terminalSessionId&&status===`exited`&&[`closing`,`running`].includes(previousStatus)&&(exitCode===null||Number(exitCode)===0))emit(`clean-exit`,{terminalSessionId})});return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64Terminal_default,{"close-label":__props.closeLabel,collapsible:false,"command-preview":__props.commandPreview,error:__props.error,"error-title":__props.errorTitle,expanded:true,fill:__props.fill,height:__props.height,"mobile-takeover":``,presentation:__props.presentation,"show-close":__props.showClose,"show-copy":__props.showCopy,"show-interrupt":__props.showInterrupt,stage:__props.stage,status:__props.status,subtitle:__props.subtitle,terminal:__props.terminal,title:__props.title,visible:__props.visible,onClose:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`close`)),onCopy:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`copy`,$event)),onInterrupt:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`interrupt`)),onRetry:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`retry`))},createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})))])}})]),1032,[`close-label`,`command-preview`,`error`,`error-title`,`fill`,`height`,`presentation`,`show-close`,`show-copy`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`title`,`visible`])}}};var _hoisted_1$18={class:`vibe64-agent-terminal-drop-overlay`,"aria-live":`polite`,role:`status`};var _sfc_main$19={__name:`Vibe64AgentTerminalDropOverlay`,props:{label:{required:true,type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$18,[createVNode(VSheet,{class:`vibe64-agent-terminal-drop-overlay__card`,elevation:`4`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiPaperclip),size:`28`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.label),1)]),_:1})])}}};var Vibe64AgentTerminalDropOverlay_default=_plugin_vue_export_helper_default(_sfc_main$19,[[`__scopeId`,`data-v-2d9e2b1e`]]);var _hoisted_1$17={class:`vibe64-agent-terminal-start-panel`};var _hoisted_2$13={class:`vibe64-agent-terminal-start-panel__icon`};var _hoisted_3$13={class:`vibe64-agent-terminal-start-panel__copy`};var _sfc_main$18={__name:`Vibe64AgentTerminalStartPanel`,props:{actionText:{default:``,type:String},actionVisible:{default:true,type:Boolean},icon:{required:true,type:String},message:{default:``,type:String},starting:{default:false,type:Boolean},title:{default:``,type:String}},emits:[`start`],setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$17,[createVNode(VSheet,{class:`vibe64-agent-terminal-start-panel__card`,elevation:`4`,role:`status`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$13,[createVNode(VIcon,{icon:__props.icon,size:`30`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_3$13,[createBaseVNode(`strong`,null,toDisplayString(__props.title),1),createBaseVNode(`span`,null,toDisplayString(__props.message),1)]),__props.actionVisible?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.starting?`true`:void 0,class:`vibe64-agent-terminal-start-panel__action`,color:`primary`,disabled:__props.starting,"prepend-icon":__props.icon,variant:`flat`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`start`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.actionText),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`])):createCommentVNode(``,true)]),_:1})])}}};var Vibe64AgentTerminalStartPanel_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-e1543fc7`]]);function useVibe64AgentTerminalDisplay(props,serverTerminalId){const displayActive=computed(()=>props.visible&&props.displayMode!==`headless`);const hiddenListenActive=computed(()=>Boolean(props.listenWhenHidden&&serverTerminalId.value&&!displayActive.value));const streamActive=computed(()=>displayActive.value||hiddenListenActive.value);return{displayActive,presentation:computed(()=>displayActive.value?`inline`:`headless`),streamActive}}function vibe64ServerAgentTerminal(session=null){const terminal=session?.agentSession?.terminal;return terminal&&typeof terminal===`object`&&!Array.isArray(terminal)?terminal:{}}var STALE_OPERATION_CODES=new Set([`vibe64_stale_command_start`]);function plainObject$1(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function responseDetails(source={}){return plainObject$1(source.details)}function responseCode(source={}){return String(source?.code||source?.errors?.[0]?.code||responseDetails(source).code||``).trim()}function responseStatus(source={}){const value=source?.status??source?.statusCode??responseDetails(source).status??responseDetails(source).statusCode??null;if(value==null||value===``)return null;const number=Number(value);return Number.isFinite(number)?number:null}function responseOperationOutcome(source={}){return String(source?.operationOutcome||responseDetails(source).operationOutcome||``).trim()}function responseRefreshRecommended(source={}){return source?.refreshRecommended===true||responseDetails(source).refreshRecommended===true}function isVibe64StaleOperation(source={}){const code=responseCode(source);const operationOutcome=responseOperationOutcome(source);if(responseRefreshRecommended(source))return true;if(operationOutcome===`stale_operation`)return true;if(operationOutcome===`state_rejected`&&STALE_OPERATION_CODES.has(code))return true;return responseStatus(source)===409&&STALE_OPERATION_CODES.has(code)}function vibe64StaleOperationResult(source={}){const stale=isVibe64StaleOperation(source);const operationOutcome=responseOperationOutcome(source);return{code:responseCode(source),ok:false,operationOutcome:operationOutcome||(stale?`stale_operation`:``),refreshRecommended:responseRefreshRecommended(source)||stale,stale:true,status:responseStatus(source)}}function plainObject(value={}){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function normalizedId(value=``){return String(value||``).trim()}function commandMissingResponse(message){return{error:message,ok:false}}function useVibe64TerminalCommands(){const paths=usePaths();const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const startTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`POST`,path:String(context.path||``)}),buildRawPayload:(_model,{context})=>plainObject(context.payload),fallbackRunError:`Terminal failed to start.`,messages:{error:`Terminal failed to start.`},onRunError:async error=>{if(isVibe64StaleOperation(error))throw vibe64StaleOperationResult(error)},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.start`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});const closeTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`DELETE`,path:String(context.path||``)}),fallbackRunError:`Terminal could not close.`,messages:{error:`Terminal could not close.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.close`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`DELETE`});const writeTerminalCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`POST`,path:String(context.path||``)}),buildRawPayload:(_model,{context})=>({attachmentIds:Array.isArray(context.attachmentIds)?context.attachmentIds:[],text:String(context.text||``)}),fallbackRunError:`Terminal input could not be sent.`,messages:{error:`Terminal input could not be sent.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.terminal.write`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});async function runStart(path,payload={}){return await startTerminalCommand.run({path,payload})}async function runClose(path){return await closeTerminalCommand.run({path})}async function startAgentTerminal(sessionId=``){const normalizedSessionId=normalizedId(sessionId);if(!normalizedSessionId)return commandMissingResponse(`Vibe64 session id is required.`);return await runStart(vibe64AgentTerminalPath(sessionsApiPath.value,normalizedSessionId),vibe64RealtimeOriginPayload())}async function closeAgentTerminal(sessionId=``,terminalSessionId=``){const normalizedSessionId=normalizedId(sessionId);const normalizedTerminalSessionId=normalizedId(terminalSessionId);if(!normalizedSessionId||!normalizedTerminalSessionId)return commandMissingResponse(`AI terminal id is required.`);return await runClose(vibe64AgentTerminalPath(sessionsApiPath.value,normalizedSessionId,normalizedTerminalSessionId))}async function sendAgentTerminalText(sessionId=``,terminalSessionId=``,text=``,{attachmentIds=[]}={}){const normalizedSessionId=normalizedId(sessionId);const normalizedTerminalSessionId=normalizedId(terminalSessionId);const normalizedText=String(text||``);if(!normalizedSessionId||!normalizedTerminalSessionId||!normalizedText)return commandMissingResponse(`AI terminal id and input are required.`);return await writeTerminalCommand.run({attachmentIds:Array.isArray(attachmentIds)?attachmentIds.map(normalizedId).filter(Boolean):[],text:normalizedText,path:vibe64AgentTerminalControlTextPath(sessionsApiPath.value,normalizedSessionId,normalizedTerminalSessionId)})}return{closeAgentTerminal,closeTerminalCommand,sendAgentTerminalText,startAgentTerminal,startTerminalCommand,writeTerminalCommand}}function useVibe64CodexCommands(){return{...useVibe64TerminalCommands(),...useVibe64AttachmentCommands()}}function attachmentPathForTerminal(attachmentPath=``){const normalizedPath=String(attachmentPath||``).trim();return normalizedPath?`[${normalizedPath}] `:``}function useAgentTerminalAttachments({assistantLabel=`Codex`,canUpload=()=>true,deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,terminalSessionId,uploadAttachment}={}){const label=()=>String(unref(assistantLabel)||`AI`);const uploadAllowed=()=>Boolean(unref(sessionId))&&(typeof canUpload===`function`?canUpload()!==false:unref(canUpload)!==false);function currentTarget(attachment){return uploadAllowed()&&attachment.sessionId===unref(sessionId)&&attachment.terminalSessionId===unref(terminalSessionId)}async function injectUploadedAttachments(uploaded=[]){for(const attachment of uploaded){if(!currentTarget(attachment))throw new Error(`The terminal changed before the attachment was delivered. Attach the file again.`);const fileName=String(attachment.fileName||`attachment`);const terminalText=attachmentPathForTerminal(attachment.path);if(!terminalText)throw new Error(`${fileName} uploaded, but no attachment path was returned.`);if(!await sendAttachmentPath(terminalText,[attachment.attachmentId],{sessionId:attachment.sessionId,terminalSessionId:attachment.terminalSessionId}))throw new Error(`${fileName} uploaded, but its path could not be sent to ${label()}.`)}}const attachments=useAgentAttachments({canUpload:uploadAllowed,deleteAttachment,onUploaded:async(uploaded=[])=>{await injectUploadedAttachments(uploaded);const fileLabel=uploaded.length===1?uploaded[0].fileName:`${uploaded.length} files`;if(uploaded.every(currentTarget)){attachments.status.value=`${fileLabel} attached. Press Enter in ${label()} when ready.`;focusTerminal()}return{accepted:true}},sessionId,uploadAttachment:async(currentSessionId,file,options={})=>{if(!await ensureTerminalReady()||!uploadAllowed()||currentSessionId!==unref(sessionId)||options.signal?.aborted)throw new Error(`${label()} terminal is not ready for attachments.`);const targetTerminalId=unref(terminalSessionId);return{...await uploadAttachment(currentSessionId,file,options),terminalSessionId:targetTerminalId}}});if(terminalSessionId!==void 0)watch(()=>unref(terminalSessionId),(_next,previous)=>{if(!previous)return;attachments.abandonAttachments();attachments.clearStatus()},{flush:`sync`});return{attachmentDragActive:attachments.dragActive,attachmentCanAddFiles:attachments.canAddFiles,attachmentQueueItems:attachments.queueItems,attachmentStatus:attachments.status,attachmentUploading:attachments.uploading,abandonAttachments:attachments.abandonAttachments,cancelAttachment:attachments.cancelAttachment,clearAttachmentStatus:attachments.clearStatus,handleAttachmentDragEnter:attachments.handleDragEnter,handleAttachmentDragLeave:attachments.handleDragLeave,handleAttachmentDragOver:attachments.handleDragOver,handleAttachmentDrop:attachments.handleDrop,removeAttachment:attachments.removeAttachment,resetAttachmentDragState:attachments.resetDragState,retryAttachment:attachments.retryAttachment,uploadAttachmentFiles:attachments.uploadFiles}}var VIBE64_CODEX_APP_SERVER_TASK_ID=`codex_app_server`;function normalizedText(value=``){return String(value||``).trim()}function objectValue(value={}){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function arrayValue(value=[]){return Array.isArray(value)?value:[]}function sessionBackgroundTasks(session={}){return arrayValue(session?.backgroundTasks).filter(task=>task&&typeof task===`object`&&!Array.isArray(task))}function codexReconnectRequiredText(value=``){const text=normalizedText(value);return Boolean(text)&&(text.includes(`vibe64_codex_reconnect_required`)||text.includes(`Codex authentication was rejected. Reconnect Codex to continue.`))}function codexReconnectRequiredResult(result={}){const source=objectValue(result);return normalizedText(source.code)===`vibe64_codex_reconnect_required`||codexReconnectRequiredText(source.error)||codexReconnectRequiredText(source.message)||codexReconnectRequiredText(source.observed)||arrayValue(source.errors).some(error=>normalizedText(error?.code)===`vibe64_codex_reconnect_required`||codexReconnectRequiredText(error?.message))}function codexReconnectRequiredSignature(session={}){const sessionId=normalizedText(session?.sessionId);const backgroundTask=sessionBackgroundTasks(session).find(task=>normalizedText(task.id)===`codex_app_server`&&codexReconnectRequiredResult(task));if(backgroundTask)return[sessionId,`background-task`,normalizedText(backgroundTask.id),normalizedText(backgroundTask.status),normalizedText(backgroundTask.updatedAt),normalizedText(backgroundTask.error),normalizedText(backgroundTask.message)].join(`|`);const terminal=objectValue(session?.agentSession?.terminal);if(codexReconnectRequiredResult(terminal))return[sessionId,`terminal`,normalizedText(terminal.id||terminal.terminalSessionId),normalizedText(terminal.status),normalizedText(terminal.outputVersion),normalizedText(terminal.error||terminal.closeError||terminal.terminalError)].join(`|`);const turn=objectValue(session?.agentSession?.turn);if(codexReconnectRequiredResult(turn))return[sessionId,`agent-turn`,normalizedText(session?.agentSession?.thread?.id),normalizedText(turn.id),normalizedText(turn.status),normalizedText(turn.updatedAt),normalizedText(turn.error||turn.message)].join(`|`);return``}function openCodexReconnectDialog(){requestVibe64AccountConnectionsDialog({codexReconnectRequired:true,providerId:`codex`,refresh:false})}function codexAccountConnectedPayload(payload={}){const accountId=String(payload?.accountId||payload?.connectionId||``).trim().toLowerCase();const status=String(payload?.status||``).trim().toLowerCase();return accountId===`codex`&&payload?.connected===true&&(!status||status===`connected`)}function useCodexTerminalLifecycle({props,emit,codexCommands,terminalController,resetTerminalOutput,sessionId,serverTerminalSession,staleTerminalSessionIds,canUseTerminal,terminalCanStart,hasTerminalSession,terminalReconnectRequired,terminalAttachmentsEnabled,componentMounted}){const{closeTerminalSocket,connectTerminalSocket,focusTerminal:focusTerminalUi,resetTerminalDisplay,resetTerminalSessionState,sendTerminalData:sendTerminalBytes,terminalCommandPreview,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=terminalController;let terminalStartPromise=null;const attachments=useAgentTerminalAttachments({canUpload:terminalAttachmentsEnabled,deleteAttachment:codexCommands.deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,terminalSessionId,uploadAttachment:codexCommands.uploadAttachment});const{abandonAttachments:abandonTerminalAttachments,clearAttachmentStatus,resetAttachmentDragState}=attachments;function ensureTerminalReady(){if(!canUseTerminal.value){if(terminalCanStart.value)terminalError.value=`Create the session clone before starting Codex.`;return Promise.resolve(false)}if(terminalStartPromise)return terminalStartPromise;terminalStartPromise=startTerminalOnce();return terminalStartPromise.finally(()=>{terminalStartPromise=null})}function emitTerminalSessionState(extra={}){const currentTerminalId=String(extra.agentTerminalSessionId||terminalSessionId.value||``);if(!sessionId.value||!currentTerminalId)return;emit(`session-update`,{agentTerminalCommandPreview:terminalCommandPreview.value,agentTerminalSessionId:currentTerminalId,agentTerminalStatus:terminalStatus.value,sessionId:sessionId.value,...extra})}async function applyCodexTerminalSession(session={},{fallbackStatus=`running`,ownership=`attached`,preserveOutput=true}={}){const nextTerminalSessionId=String(session.id||session.terminalSessionId||``).trim();if(!nextTerminalSessionId)return{applied:false,hasTerminalSession:Boolean(terminalSessionId.value)};const previousTerminalSessionId=String(terminalSessionId.value||``);const sameTerminalSession=previousTerminalSessionId===nextTerminalSessionId;const terminalSessionChanged=Boolean(previousTerminalSessionId&&previousTerminalSessionId!==nextTerminalSessionId);if(terminalSessionChanged)resetTerminalOutput();await terminalController.attachTerminal({...session,id:nextTerminalSessionId},{connect:false,fallbackStatus,ownership,preserveOutput,resize:!sameTerminalSession});return{applied:true,sameTerminalSession,terminalSessionChanged,terminalSessionId:nextTerminalSessionId}}async function recoverCodexTerminalAfterAccountReconnect(){if(!terminalReconnectRequired.value)return;terminalError.value=``;closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();await ensureTerminalReady()}useRealtimeEvent({enabled:computed(()=>Boolean(componentMounted.value&&terminalReconnectRequired.value)),event:VIBE64_ACCOUNTS_CHANGED_EVENT,matches({payload={}}={}){return codexAccountConnectedPayload(payload)},onEvent(){recoverCodexTerminalAfterAccountReconnect()}});async function sendAttachmentPath(text,attachmentIds=[],target={}){if(!sessionId.value||!terminalSessionId.value)throw new Error(`Codex terminal is not ready for attachments.`);const response=await codexCommands.sendAgentTerminalText(target.sessionId,target.terminalSessionId,text,{attachmentIds});if(response?.ok===false)throw new Error(response.error||`Attachment path could not be sent to Codex.`);return true}async function sendEscape(){try{return await ensureTerminalReady()&&await sendTerminalBytes(`\x1B`)}catch(sendError){terminalError.value=String(sendError?.message||sendError||`Terminal input failed.`);return false}}async function focusTerminal(){if(!hasTerminalSession.value)return false;return focusTerminalUi()}async function focusWritableTerminalWhenShown(visible){if(!visible||props.readOnly||!hasTerminalSession.value)return;await nextTick();focusTerminal()}async function connectAttachedTerminal(){if(!await connectTerminalSocket()){const message=String(terminalError.value||`Terminal stream failed to connect.`);if(terminalSessionMissingError(message)||terminalOwnerAccessDenied(message)){markTerminalSessionStale(terminalSessionId.value||serverTerminalSession.value.id,message);return false}throw new Error(message)}return true}async function startTerminalOnce(){if(terminalReconnectRequired.value){openCodexReconnectDialog();return false}if(terminalExited.value&&terminalCanStart.value){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput()}if(terminalSessionId.value)return await connectAttachedTerminal();if(!terminalCanStart.value)return false;terminalStarting.value=true;terminalError.value=``;try{const session=await codexCommands.startAgentTerminal(sessionId.value);if(session?.ok===false){if(codexReconnectRequiredResult(session)){terminalError.value=CODEX_RECONNECT_REQUIRED_MESSAGE;openCodexReconnectDialog();return false}if(terminalOwnerAccessDenied(session)){const message=vibe64TerminalErrorMessage(session,`Codex terminal failed to start.`);markTerminalSessionStale(serverTerminalSession.value.id,message);terminalError.value=message;return false}throw new Error(vibe64TerminalErrorMessage(session,`Codex terminal failed to start.`))}if(!session?.id)throw new Error(`Codex terminal failed to start.`);await applyCodexTerminalSession(session,{fallbackStatus:`running`,ownership:`owned`});emitTerminalSessionState();return await connectAttachedTerminal()}catch(startError){terminalError.value=terminalError.value||vibe64TerminalErrorMessage(startError,`Codex terminal failed to start.`);return false}finally{terminalStarting.value=false}}function connectTerminalWhenReady(){if(!canUseTerminal.value||!terminalSessionId.value)return;connectAttachedTerminal().catch(error=>{terminalError.value=terminalError.value||String(error?.message||error||`Terminal stream failed to connect.`)})}async function attachTerminalSession(session={}){const attached=await applyCodexTerminalSession(session,{fallbackStatus:`running`});if(!attached.applied)return Boolean(terminalSessionId.value);if(attached.sameTerminalSession)return true;if(!canUseTerminal.value||!componentMounted.value)return true;try{return await connectAttachedTerminal()}catch(attachError){const message=String(attachError?.message||attachError||`Terminal stream failed to connect.`);if(terminalOwnerAccessDenied(message)){markTerminalSessionStale(session.id||terminalSessionId.value||serverTerminalSession.value.id,message);terminalError.value=message;return false}terminalError.value=terminalError.value||message;return false}}function markTerminalSessionStale(terminalId=``,message=``){const normalizedTerminalId=String(terminalId||``).trim();if(normalizedTerminalId)staleTerminalSessionIds.value=new Set([...staleTerminalSessionIds.value,normalizedTerminalId]);closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();abandonTerminalAttachments();terminalError.value=String(message||``);emitTerminalSessionState({agentTerminalSessionId:normalizedTerminalId,agentTerminalStatus:`stale`})}function detachTerminal(){terminalStartPromise=null;abandonTerminalAttachments();closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();clearAttachmentStatus();resetAttachmentDragState()}async function closeTerminal(){await abandonTerminalAttachments();if(!terminalSessionId.value){detachTerminal();return true}if(!await terminalController.closeTerminal({deleteSession:true}))return false;terminalStartPromise=null;resetTerminalOutput();clearAttachmentStatus();resetAttachmentDragState();return true}async function restartTerminal(){if(terminalReconnectRequired.value){openCodexReconnectDialog();return}terminalError.value=``;if(!await closeTerminal())return;await ensureTerminalReady()}return{attachments,attachTerminalSession,closeTerminal,connectTerminalWhenReady,detachTerminal,emitTerminalSessionState,focusWritableTerminalWhenShown,restartTerminal,sendEscape}}var CODEX_ACTIVITY_QUIET_MS=2200;var TERMINAL_STREAM_QUIET_MS=2500;function useCodexTerminalOutput({emitBusyChanged,sessionId}={}){const codexBusy=ref(false);const codexWorking=ref(false);const terminalStreaming=ref(false);let codexIdleTimer=null;let terminalStreamingTimer=null;let codexBusyOutputVersion=0;let terminalOutputVersion=0;function clearCodexIdleTimer(){if(!codexIdleTimer)return;globalThis.clearTimeout(codexIdleTimer);codexIdleTimer=null}function emitCodexActivityChanged(){const payload={busy:codexBusy.value,sessionId:unref(sessionId),streaming:terminalStreaming.value,working:codexWorking.value};emitBusyChanged?.(payload)}function clearTerminalStreamingTimer(){if(!terminalStreamingTimer)return;globalThis.clearTimeout(terminalStreamingTimer);terminalStreamingTimer=null}function setTerminalStreaming(nextStreaming){const streaming=Boolean(nextStreaming);if(terminalStreaming.value===streaming)return;terminalStreaming.value=streaming;emitCodexActivityChanged()}function markTerminalStreaming(){setTerminalStreaming(true);clearTerminalStreamingTimer();terminalStreamingTimer=globalThis.setTimeout(()=>{terminalStreamingTimer=null;setTerminalStreaming(false)},TERMINAL_STREAM_QUIET_MS)}function setCodexBusy(nextBusy){const busy=Boolean(nextBusy);if(codexBusy.value===busy)return;codexBusy.value=busy;emitCodexActivityChanged()}function setCodexWorking(nextWorking){const working=Boolean(nextWorking);if(codexWorking.value===working)return;codexWorking.value=working;emitCodexActivityChanged()}function clearCodexWorking(){setCodexWorking(false)}function markCodexBusy(){clearCodexIdleTimer();codexBusyOutputVersion=terminalOutputVersion;setCodexBusy(true)}function clearCodexBusy(){clearCodexIdleTimer();codexBusyOutputVersion=terminalOutputVersion;setCodexBusy(false)}function scheduleCodexIdleWhenQuiet(){if(!codexBusy.value||terminalOutputVersion<=codexBusyOutputVersion)return;clearCodexIdleTimer();codexIdleTimer=globalThis.setTimeout(()=>{codexIdleTimer=null;clearCodexBusy()},CODEX_ACTIVITY_QUIET_MS)}function noteTerminalOutput(){terminalOutputVersion+=1;scheduleCodexIdleWhenQuiet()}function writeTerminalOutput(){noteTerminalOutput()}function appendTerminalOutput(chunk){if(!String(chunk||``))return;markTerminalStreaming();noteTerminalOutput()}function resetTerminalOutput(){clearTerminalStreamingTimer();setTerminalStreaming(false);clearCodexBusy();clearCodexWorking();terminalOutputVersion+=1}return{appendTerminalOutput,clearCodexBusy,clearCodexWorking,codexBusy,codexWorking,markCodexBusy,resetTerminalOutput,terminalStreaming,writeTerminalOutput}}function useCodexTerminalPresentation({terminalController,serverCodexTerminal,sessionSourcePending,terminalReconnectRequired,terminalServerStale,terminalDisplayActive,canUseTerminal,terminalCanStart,componentMounted}){const{terminalConnectionStatus,terminalError,terminalExited,terminalSessionId,terminalStarting}=terminalController;const terminalErrorTitle=computed(()=>{if(terminalError.value===`Codex authentication was rejected. Reconnect Codex to continue.`)return`Reconnect Codex`;return String(terminalError.value||``).includes(`app-server`)?`Codex app-server is not available`:`Codex terminal needs attention`});const terminalErrorActionText=computed(()=>{if(terminalStarting.value)return`Starting Codex…`;return terminalError.value===`Codex authentication was rejected. Reconnect Codex to continue.`?`Reconnect Codex`:`Restart Codex`});const terminalSubtitle=computed(()=>{if(terminalStarting.value)return`Starting Codex`;if(terminalExited.value)return``;if(terminalConnectionStatus.value===`reconnecting`)return`Reconnecting Codex`;if(terminalConnectionStatus.value===`connecting`)return`Connecting Codex`;return``});const terminalStartActionVisible=computed(()=>!sessionSourcePending.value);const terminalStartIcon=computed(()=>terminalReconnectRequired.value||terminalExited.value||terminalServerStale.value?mdiRestart:mdiPlayCircleOutline);const terminalStartPanelTitle=computed(()=>{if(sessionSourcePending.value)return`Session source is being prepared`;if(terminalStarting.value)return`Starting Codex`;if(terminalReconnectRequired.value)return`Reconnect Codex`;if(terminalServerStale.value)return`Codex terminal needs restart`;return terminalExited.value?`Codex terminal exited`:`Codex terminal is off`});const terminalStartPanelMessage=computed(()=>{if(sessionSourcePending.value)return`Codex will start from the session source after the clone has been created.`;if(terminalStarting.value)return`Preparing this session terminal.`;if(terminalReconnectRequired.value)return`Reconnect the Codex account before starting this session terminal.`;if(terminalServerStale.value)return serverCodexTerminal.value.message||`The previous Codex terminal is still running, but Vibe64 cannot attach to it. Restart it for this session.`;return terminalExited.value?`Restart it for this session.`:`Start it for this session.`});const terminalStartButtonText=computed(()=>{if(terminalStarting.value)return`Starting Codex…`;if(terminalReconnectRequired.value)return`Reconnect Codex`;return terminalExited.value||terminalServerStale.value?`Restart Codex`:`Start Codex`});return{showTerminalStartPanel:computed(()=>componentMounted.value&&(sessionSourcePending.value||terminalStarting.value&&terminalDisplayActive.value||canUseTerminal.value&&terminalCanStart.value&&(!terminalSessionId.value||terminalExited.value||terminalServerStale.value))),terminalErrorActionText,terminalErrorTitle,terminalStartActionVisible,terminalStartButtonText,terminalStartIcon,terminalStartPanelMessage,terminalStartPanelTitle,terminalSubtitle}}var _hoisted_1$16=[`aria-hidden`];var _hoisted_2$12=[`disabled`];var _hoisted_3$12={class:`vibe64-codex-session__command`};var _hoisted_4$9={key:0,class:`text-caption text-medium-emphasis`};var _sfc_main$17={__name:`Vibe64CodexSession`,props:{session:{type:Object,default:null},visible:{type:Boolean,default:true},allowStart:{type:Boolean,default:true},displayMode:{type:String,default:`full`},readOnly:{type:Boolean,default:false},listenWhenHidden:{type:Boolean,default:false}},emits:[`session-update`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const codexCommands=useVibe64CodexCommands();const copyStatus=ref(``);const componentMounted=ref(false);const terminalAttachmentFileInput=ref(null);const staleTerminalSessionIds=ref(new Set);const sessionId=computed(()=>props.session?.sessionId||``);const terminalAttachmentsEnabled=computed(()=>Boolean(!props.readOnly&&sessionId.value));const sessionSource=computed(()=>String(props.session?.sourcePath||``));const rawServerCodexTerminal=computed(()=>vibe64ServerAgentTerminal(props.session));const serverCodexTerminal=computed(()=>{const terminal=rawServerCodexTerminal.value;if(terminal.stale||terminal.restartRequired)return{...terminal,id:``,terminalSessionId:``,status:`stale`};const terminalId=String(terminal.id||terminal.terminalSessionId||``).trim();if(!terminalId||!staleTerminalSessionIds.value.has(terminalId))return terminal;return{...terminal,id:``,terminalSessionId:``,status:``}});const serverTerminalSession=computed(()=>({commandPreview:String(serverCodexTerminal.value.commandPreview||``),id:String(serverCodexTerminal.value.id||serverCodexTerminal.value.terminalSessionId||``),status:String(serverCodexTerminal.value.status||``)}));const{displayActive:terminalDisplayActive,presentation:terminalPresentation,streamActive:terminalStreamActive}=useVibe64AgentTerminalDisplay(props,computed(()=>serverTerminalSession.value.id));const hasTerminalSession=computed(()=>Boolean(terminalSessionId.value||serverTerminalSession.value.id));const canUseTerminal=computed(()=>Boolean(terminalStreamActive.value&&sessionId.value&&(serverTerminalSession.value.id||props.allowStart&&sessionSource.value)));const canStartTerminal=computed(()=>Boolean(props.allowStart&&terminalDisplayActive.value&&sessionId.value&&sessionSource.value));const{appendTerminalOutput:noteTerminalOutputChunk,clearCodexBusy,clearCodexWorking,markCodexBusy,resetTerminalOutput,writeTerminalOutput:noteTerminalOutputSnapshot}=useCodexTerminalOutput();const terminalController=useVibe64Terminal({driver:createWebSocketTerminalDriver({closeSession:closeCodexTerminalDriverSession,webSocketUrl(terminalId){return vibe64AgentTerminalWebSocketUrl(sessionId.value,terminalId)}}),fitOnResize:true,initiallyVisible:false,liveResize:true,onOutput:handleTerminalOutput,onStatusUpdate:handleTerminalStatusUpdate,onUserData:handleTerminalUserData,readOnly:computed(()=>props.readOnly),resizeReportDelayMs:120});const{disposeTerminalUi,terminalFocused,terminalCommandPreview,terminalError,terminalSessionId,terminalStarting,terminalStatus}=terminalController;const terminalCanStart=computed(()=>Boolean(canStartTerminal.value));const sessionSourcePending=computed(()=>Boolean(terminalDisplayActive.value&&sessionId.value&&!sessionSource.value&&!hasTerminalSession.value));const terminalServerStale=computed(()=>Boolean(serverCodexTerminal.value.stale||serverCodexTerminal.value.restartRequired));const terminalReconnectRequired=computed(()=>terminalError.value===CODEX_RECONNECT_REQUIRED_MESSAGE);const sessionCodexReconnectSignature=computed(()=>codexReconnectRequiredSignature(props.session||{}));const{showTerminalStartPanel,terminalErrorActionText,terminalErrorTitle,terminalStartActionVisible,terminalStartButtonText,terminalStartIcon,terminalStartPanelMessage,terminalStartPanelTitle,terminalSubtitle}=useCodexTerminalPresentation({terminalController,serverCodexTerminal,sessionSourcePending,terminalReconnectRequired,terminalServerStale,terminalDisplayActive,canUseTerminal,terminalCanStart,componentMounted});const{attachments,attachTerminalSession,closeTerminal,connectTerminalWhenReady,detachTerminal,emitTerminalSessionState,focusWritableTerminalWhenShown,restartTerminal,sendEscape}=useCodexTerminalLifecycle({props,emit,codexCommands,terminalController,resetTerminalOutput,sessionId,serverTerminalSession,staleTerminalSessionIds,canUseTerminal,terminalCanStart,hasTerminalSession,terminalReconnectRequired,terminalAttachmentsEnabled,componentMounted});const{attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,resetAttachmentDragState,uploadAttachmentFiles}=attachments;const terminalAttachmentActionLabel=computed(()=>attachmentCanAddFiles.value?`Attach files to Codex terminal`:`Codex terminal attachment limit reached`);function openTerminalAttachmentPicker(){if(!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value)return false;terminalAttachmentFileInput.value?.click?.();return true}function handleTerminalAttachmentFileSelection(event){const input=event?.currentTarget||event?.target||null;const files=Array.from(input?.files||[]);if(input)input.value=``;if(files.length<1||!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value)return;uploadAttachmentFiles(files)}function handleTerminalCopy(){copyStatus.value=`Terminal text copied.`}function handleTerminalInterrupt(){clearCodexBusy();clearCodexWorking()}function handleTerminalOutput({chunk=``,output=``,source=``}={}){if(source===`append`){noteTerminalOutputChunk(chunk);return}noteTerminalOutputSnapshot(output)}function handleTerminalStatusUpdate({closeError=``,status=``}={}){if(closeError)terminalError.value=String(closeError);emitTerminalSessionState();if(status===`exited`){clearCodexBusy();clearCodexWorking()}}function handleTerminalUserData(data){const input=String(data||``);if(input.includes(``)){clearCodexBusy();clearCodexWorking();return}if(input.includes(`\r`))markCodexBusy()}async function closeCodexTerminalDriverSession(terminalId){const result=await codexCommands.closeAgentTerminal(sessionId.value,terminalId);if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`Codex terminal process could not be stopped.`));return result}watch(serverTerminalSession,terminal=>{attachTerminalSession(terminal)},{flush:`post`,immediate:true});watch(sessionId,(nextSessionId,previousSessionId)=>{if(previousSessionId&&previousSessionId!==nextSessionId)detachTerminal();staleTerminalSessionIds.value=new Set;resetAttachmentDragState();clearAttachmentStatus()});watch(canUseTerminal,ready=>{if(ready&&terminalSessionId.value)connectTerminalWhenReady()});watch([sessionCodexReconnectSignature,componentMounted,()=>props.displayMode],([signature,mounted,displayMode])=>{if(!signature||!mounted||displayMode===`headless`)return;terminalError.value=CODEX_RECONNECT_REQUIRED_MESSAGE},{flush:`post`,immediate:true});watch(terminalDisplayActive,(visible,previousVisible)=>{if(visible&&previousVisible===false)focusWritableTerminalWhenShown(visible)},{flush:`post`,immediate:true});onMounted(()=>{componentMounted.value=true;connectTerminalWhenReady()});onBeforeUnmount(()=>{componentMounted.value=false;detachTerminal();disposeTerminalUi()});__expose({focusTerminal:()=>focusWritableTerminalWhenShown(terminalDisplayActive.value),sendEscape});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vibe64-codex-session`,{"vibe64-codex-session--compact":__props.displayMode===`compact`,"vibe64-codex-session--focused":unref(terminalFocused),"vibe64-codex-session--headless":__props.displayMode===`headless`}]),"aria-hidden":__props.displayMode===`headless`?`true`:void 0,onDragenter:_cache[0]||(_cache[0]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragEnter)($event),[`prevent`])),onDragover:_cache[1]||(_cache[1]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragOver)($event),[`prevent`])),onDragleave:_cache[2]||(_cache[2]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDragLeave)($event),[`prevent`])),onDrop:_cache[3]||(_cache[3]=withModifiers($event=>terminalAttachmentsEnabled.value&&unref(handleAttachmentDrop)($event),[`prevent`]))},[terminalAttachmentsEnabled.value?(openBlock(),createElementBlock(`input`,{key:0,ref_key:`terminalAttachmentFileInput`,ref:terminalAttachmentFileInput,disabled:!unref(attachmentCanAddFiles),hidden:``,multiple:``,type:`file`,onChange:handleTerminalAttachmentFileSelection},null,40,_hoisted_2$12)):createCommentVNode(``,true),createVNode(_sfc_main$20,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":unref(terminalErrorTitle),fill:``,height:`100%`,"mobile-takeover":``,presentation:unref(terminalPresentation),"show-copy":``,"show-interrupt":!__props.readOnly,stage:unref(terminalSubtitle),status:unref(terminalStatus),subtitle:unref(terminalSubtitle),terminal:unref(terminalController),title:`Codex terminal`,visible:unref(terminalStreamActive),onCleanExit:unref(closeTerminal),onClose:unref(closeTerminal),onCopy:handleTerminalCopy,onInterrupt:handleTerminalInterrupt},{"error-actions":withCtx(()=>[terminalCanStart.value?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":unref(terminalStarting)?`true`:void 0,class:`vibe64-codex-session__start-action`,color:`primary`,disabled:unref(terminalStarting),"prepend-icon":unref(mdiRestart),size:`small`,variant:`flat`,onClick:unref(restartTerminal)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(terminalErrorActionText)),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,variant:`tonal`,onClick:unref(closeTerminal)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close terminal `,-1)])]),_:1},8,[`onClick`])]),"actions-before":withCtx(()=>[terminalAttachmentsEnabled.value?(openBlock(),createBlock(VBtn,{key:0,"aria-label":terminalAttachmentActionLabel.value,class:`vibe64-codex-session__attachment-action`,disabled:!unref(attachmentCanAddFiles),icon:unref(mdiPaperclip),size:`small`,title:terminalAttachmentActionLabel.value,type:`button`,variant:`text`,onClick:openTerminalAttachmentPicker},null,8,[`aria-label`,`disabled`,`icon`,`title`])):createCommentVNode(``,true)]),overlay:withCtx(()=>[unref(attachmentDragActive)?(openBlock(),createBlock(Vibe64AgentTerminalDropOverlay_default,{key:0,label:`Drop temporary files for Codex`})):createCommentVNode(``,true),unref(showTerminalStartPanel)?(openBlock(),createBlock(Vibe64AgentTerminalStartPanel_default,{key:1,"action-text":unref(terminalStartButtonText),"action-visible":unref(terminalStartActionVisible),icon:unref(terminalStartIcon),message:unref(terminalStartPanelMessage),starting:unref(terminalStarting),title:unref(terminalStartPanelTitle),onStart:unref(restartTerminal)},null,8,[`action-text`,`action-visible`,`icon`,`message`,`starting`,`title`,`onStart`])):createCommentVNode(``,true)]),"before-terminal":withCtx(()=>[createVNode(_sfc_main$60,{items:unref(attachmentQueueItems),joined:false,onCancel:unref(cancelAttachment),onRemove:unref(removeAttachment),onRetry:unref(retryAttachment)},null,8,[`items`,`onCancel`,`onRemove`,`onRetry`])]),footer:withCtx(({commandPreview,status})=>[createBaseVNode(`span`,_hoisted_3$12,toDisplayString(commandPreview||`Codex is not running.`),1),copyStatus.value||unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_4$9,toDisplayString(unref(attachmentStatus)||copyStatus.value),1)):createCommentVNode(``,true),status?(openBlock(),createBlock(VChip,{key:1,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status),1)]),_:2},1024)):createCommentVNode(``,true)]),_:1},8,[`command-preview`,`error`,`error-title`,`presentation`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`visible`,`onCleanExit`,`onClose`])],42,_hoisted_1$16)}}};var Vibe64CodexSession_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-512de76d`]]);var _hoisted_1$15=[`aria-hidden`];var _hoisted_2$11=[`disabled`];var _hoisted_3$11={key:0,class:`text-caption px-3 py-2 ma-0`};var _hoisted_4$8={class:`vibe64-native-agent-session__command`};var _hoisted_5$7={key:0,class:`text-caption text-medium-emphasis`,role:`status`};var _sfc_main$16={__name:`Vibe64NativeAgentSession`,props:{allowStart:{default:true,type:Boolean},displayMode:{default:`full`,type:String},listenWhenHidden:{default:false,type:Boolean},readOnly:{default:false,type:Boolean},session:{default:null,type:Object},visible:{default:true,type:Boolean}},emits:[`session-update`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const terminalCommands=useVibe64TerminalCommands();const attachmentCommands=useVibe64AttachmentCommands();const attachmentFileInput=ref(null);const assistantProvider=computed(()=>findVibe64AgentProvider(props.session?.assistantSelection?.engineId));const assistantLabel=computed(()=>assistantProvider.value?.label||``);const assistantAcceptsAttachments=computed(()=>assistantProvider.value?.terminalAttachments===true);const sessionId=computed(()=>String(props.session?.sessionId||``));const sessionSource=computed(()=>String(props.session?.sourcePath||``));const serverTerminal=computed(()=>vibe64ServerAgentTerminal(props.session));const serverTerminalId=computed(()=>String(serverTerminal.value.id||serverTerminal.value.terminalSessionId||``));const{displayActive,presentation:terminalPresentation,streamActive:terminalStreamActive}=useVibe64AgentTerminalDisplay(props,serverTerminalId);const terminalController=useVibe64Terminal({driver:createWebSocketTerminalDriver({closeSession:closeDriverSession,webSocketUrl(terminalId){return vibe64AgentTerminalWebSocketUrl(sessionId.value,terminalId)}}),fitOnResize:true,initiallyVisible:false,liveResize:true,onStatusUpdate:emitTerminalState,readOnly:computed(()=>props.readOnly),resizeReportDelayMs:120});const{applyTerminalSession,closeTerminalSocket,connectTerminalSocket,disposeTerminalUi,focusTerminal,resetTerminalDisplay,resetTerminalSessionState,terminalCommandPreview,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=terminalController;const showAttachmentAction=computed(()=>Boolean(assistantAcceptsAttachments.value&&!props.readOnly&&displayActive.value));const attachmentsEnabled=computed(()=>Boolean(showAttachmentAction.value&&sessionId.value&&terminalSessionId.value&&terminalStatus.value===`running`));const{abandonAttachments,attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,uploadAttachmentFiles}=useAgentTerminalAttachments({assistantLabel,canUpload:attachmentsEnabled,deleteAttachment:attachmentCommands.deleteAttachment,ensureTerminalReady:()=>attachmentsEnabled.value,focusTerminal,async sendAttachmentPath(text,attachmentIds,target){const result=await terminalCommands.sendAgentTerminalText(target.sessionId,target.terminalSessionId,text,{attachmentIds});if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`The attachment could not be sent to ${assistantLabel.value}.`));return true},sessionId,terminalSessionId,uploadAttachment:attachmentCommands.uploadAttachment});function handleAttachmentSelection(event){const input=event.currentTarget;const files=Array.from(input.files||[]);input.value=``;uploadAttachmentFiles(files)}function handleTerminalPaste(event){if(!assistantAcceptsAttachments.value)return;const files=assistantAttachmentFilesFromPasteEvent(event);if(!files.length)return;event.preventDefault();event.stopPropagation();uploadAttachmentFiles(files)}watch(attachmentsEnabled,enabled=>{if(enabled)return;abandonAttachments();clearAttachmentStatus()},{flush:`sync`});const sourcePending=computed(()=>Boolean(displayActive.value&&sessionId.value&&!sessionSource.value&&!terminalSessionId.value));const canStart=computed(()=>Boolean(props.allowStart&&displayActive.value&&sessionId.value&&sessionSource.value));const showStartPanel=computed(()=>Boolean(displayActive.value&&!terminalStarting.value&&(!terminalSessionId.value||terminalExited.value)));const terminalSubtitle=computed(()=>{if(terminalStarting.value)return`Starting ${assistantLabel.value}`;return terminalExited.value?`Exited`:terminalStatus.value===`running`?``:`${assistantLabel.value} agent session`});function emitTerminalState(){const id=String(terminalSessionId.value||serverTerminalId.value||``);if(!sessionId.value||!id)return;emit(`session-update`,{agentTerminalCommandPreview:terminalCommandPreview.value,agentTerminalSessionId:id,agentTerminalStatus:terminalStatus.value,sessionId:sessionId.value})}async function closeDriverSession(terminalId){const result=await terminalCommands.closeAgentTerminal(sessionId.value,terminalId);if(result?.ok===false)throw new Error(vibe64TerminalErrorMessage(result,`OpenCode terminal process could not be stopped.`));return result}async function attachTerminal(session={}){const id=String(session.id||session.terminalSessionId||``).trim();if(!id||id===terminalSessionId.value)return Boolean(id);closeTerminalSocket();resetTerminalDisplay();await applyTerminalSession({...session,id},{fallbackStatus:session.status||`running`,ownership:`attached`});if(terminalStreamActive.value)connectTerminalSocket();return true}async function startTerminal(){if(!canStart.value)return false;if(terminalExited.value){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay()}terminalStarting.value=true;terminalError.value=``;try{const session=await terminalCommands.startAgentTerminal(sessionId.value);if(session?.ok===false||!session?.id)throw new Error(vibe64TerminalErrorMessage(session,`${assistantLabel.value} terminal failed to start.`));await applyTerminalSession(session,{fallbackStatus:`running`,ownership:`owned`});emitTerminalState();return await connectTerminalSocket()}catch(error){terminalError.value=vibe64TerminalErrorMessage(error,`${assistantLabel.value} terminal failed to start.`);return false}finally{terminalStarting.value=false}}async function closeTerminal(){await abandonAttachments();if(!terminalSessionId.value){detachTerminal();return true}if(!await terminalController.closeTerminal({deleteSession:true}))return false;resetTerminalDisplay();emitTerminalState();return true}async function restartTerminal(){terminalError.value=``;if(terminalSessionId.value&&!await closeTerminal())return false;return startTerminal()}function detachTerminal(){closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay()}watch(serverTerminal,terminal=>{attachTerminal(terminal)},{flush:`post`,immediate:true});watch(terminalStreamActive,active=>{if(active&&terminalSessionId.value)connectTerminalSocket()});watch(sessionId,(_next,previous)=>{if(previous)detachTerminal()});onMounted(()=>{if(terminalStreamActive.value&&terminalSessionId.value)connectTerminalSocket()});onBeforeUnmount(()=>{detachTerminal();disposeTerminalUi()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vibe64-native-agent-session`,{"vibe64-native-agent-session--headless":__props.displayMode===`headless`}]),"aria-hidden":__props.displayMode===`headless`?`true`:void 0,onDragenter:_cache[1]||(_cache[1]=withModifiers((...args)=>unref(handleAttachmentDragEnter)&&unref(handleAttachmentDragEnter)(...args),[`prevent`])),onDragover:_cache[2]||(_cache[2]=withModifiers((...args)=>unref(handleAttachmentDragOver)&&unref(handleAttachmentDragOver)(...args),[`prevent`])),onDragleave:_cache[3]||(_cache[3]=withModifiers((...args)=>unref(handleAttachmentDragLeave)&&unref(handleAttachmentDragLeave)(...args),[`prevent`])),onDrop:_cache[4]||(_cache[4]=withModifiers((...args)=>unref(handleAttachmentDrop)&&unref(handleAttachmentDrop)(...args),[`prevent`])),onPasteCapture:handleTerminalPaste},[showAttachmentAction.value?(openBlock(),createElementBlock(`input`,{key:0,ref_key:`attachmentFileInput`,ref:attachmentFileInput,disabled:!unref(attachmentCanAddFiles),hidden:``,multiple:``,type:`file`,onChange:handleAttachmentSelection},null,40,_hoisted_2$11)):createCommentVNode(``,true),createVNode(_sfc_main$20,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":`${assistantLabel.value} terminal needs attention`,fill:``,height:`100%`,presentation:unref(terminalPresentation),"show-interrupt":!__props.readOnly,stage:terminalSubtitle.value,status:unref(terminalStatus),subtitle:terminalSubtitle.value,terminal:unref(terminalController),title:`${assistantLabel.value} terminal`,visible:unref(terminalStreamActive),onCleanExit:closeTerminal,onClose:closeTerminal},{"actions-before":withCtx(()=>[showAttachmentAction.value?(openBlock(),createBlock(VBtn,{key:0,"aria-label":`Attach files to ${assistantLabel.value} terminal`,disabled:!unref(attachmentCanAddFiles),icon:unref(mdiPaperclip),size:`small`,title:`Attach files to ${assistantLabel.value} terminal`,type:`button`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>attachmentFileInput.value?.click())},null,8,[`aria-label`,`disabled`,`icon`,`title`])):createCommentVNode(``,true)]),"before-terminal":withCtx(()=>[__props.session?.assistantSelection?.engineId===`claude`?(openBlock(),createElementBlock(`p`,_hoisted_3$11,` Claude resumes this conversation in a new interactive process. Finish or stop any active chat turn first. Chat is unavailable while this terminal is open. Claude may ask you to complete its first-use setup or sign in. `)):createCommentVNode(``,true),createVNode(_sfc_main$60,{items:unref(attachmentQueueItems),joined:false,"session-id":sessionId.value,onCancel:unref(cancelAttachment),onRemove:unref(removeAttachment),onRetry:unref(retryAttachment)},null,8,[`items`,`session-id`,`onCancel`,`onRemove`,`onRetry`])]),overlay:withCtx(()=>[unref(attachmentDragActive)?(openBlock(),createBlock(Vibe64AgentTerminalDropOverlay_default,{key:0,label:`Drop files for ${assistantLabel.value}`},null,8,[`label`])):createCommentVNode(``,true),showStartPanel.value?(openBlock(),createBlock(Vibe64AgentTerminalStartPanel_default,{key:1,"action-text":unref(terminalStarting)?`Starting ${assistantLabel.value}…`:unref(terminalExited)?`Restart ${assistantLabel.value}`:`Start ${assistantLabel.value}`,"action-visible":!sourcePending.value,icon:unref(terminalExited)?unref(mdiRestart):unref(mdiPlayCircleOutline),message:sourcePending.value?`The terminal can start after the session source is ready.`:`Start an interactive ${assistantLabel.value} terminal for this session.`,starting:unref(terminalStarting),title:unref(terminalExited)?`${assistantLabel.value} terminal exited`:`${assistantLabel.value} terminal is off`,onStart:restartTerminal},null,8,[`action-text`,`action-visible`,`icon`,`message`,`starting`,`title`])):createCommentVNode(``,true)]),footer:withCtx(({commandPreview,status})=>[createBaseVNode(`span`,_hoisted_4$8,toDisplayString(commandPreview||`${assistantLabel.value} is not running.`),1),unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_5$7,toDisplayString(unref(attachmentStatus)),1)):createCommentVNode(``,true),status?(openBlock(),createBlock(VChip,{key:1,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status),1)]),_:2},1024)):createCommentVNode(``,true)]),_:1},8,[`command-preview`,`error`,`error-title`,`presentation`,`show-interrupt`,`stage`,`status`,`subtitle`,`terminal`,`title`,`visible`])],42,_hoisted_1$15)}}};var Vibe64NativeAgentSession_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-437673a4`]]);var _hoisted_1$14={class:`studio-renewal-assistant__heading`};var _hoisted_2$10={class:`text-body-small`};var _hoisted_3$10={class:`studio-renewal-assistant__error`};var _hoisted_4$7={key:3,class:`studio-renewal-assistant__fields`};var _hoisted_5$6={key:4,class:`studio-renewal-assistant__summary text-body-small`,role:`status`};var _sfc_main$15={__name:`Vibe64RenewalAssistantSelector`,props:{active:{default:false,type:Boolean},disabled:{default:false,type:Boolean},initialSelection:{default:null,type:Object},emptyMessage:{default:`Connect an AI account before creating the fresh session.`,type:String},heading:{default:`AI for the fresh session`,type:String},manageLabel:{default:`Manage AIs`,type:String},summaryPrefix:{default:`Fresh session: `,type:String},supportingText:{default:`Keep the current AI, or continue the handover with another connected provider or model.`,type:String}},emits:[`update:ready`,`update:selection`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const headingId=`vibe64-renewal-assistant-${useId()}`;const engineId=ref(``);const modelProviderId=ref(``);const modelId=ref(``);const agentId=ref(``);const variantId=ref(``);const emptyText=ref(``);const active=computed(()=>props.active===true);const overview=useVibe64AssistantCatalog({active,configuredOnly:true});const details=useVibe64AssistantCatalog({active:computed(()=>active.value&&Boolean(engineId.value)),engineId,modelProviderId,modelSearch:emptyText,providerConnectedOnly:true,providerCursor:emptyText,providerSearch:emptyText});const engineRows=computed(()=>overview.engines.value.filter(engine=>engine.health?.status===`ready`&&(engine.modelProviders||[]).some(provider=>provider.connected===true)));const engineItems=computed(()=>engineRows.value.map(engine=>({title:engine.label||engine.engineId,value:engine.engineId})));const selectedEngine=computed(()=>[details.modelEngine.value,details.providerEngine.value,details.selectedOverviewEngine.value].find(engine=>engine?.engineId===engineId.value)||null);const providerRows=computed(()=>{return((engineId.value===`opencode`?details.providerEngine.value:details.selectedOverviewEngine.value)?.modelProviders||[]).filter(provider=>provider.connected===true)});const providerItems=computed(()=>providerRows.value.map(provider=>({title:provider.label||provider.id,value:provider.id})));const selectedProvider=computed(()=>providerRows.value.find(provider=>provider.id===modelProviderId.value)||null);const modelProvider=computed(()=>details.modelEngine.value?.engineId===engineId.value?details.modelEngine.value.modelProviders?.find(provider=>provider.id===modelProviderId.value&&provider.connected===true)||null:null);const modelRows=computed(()=>modelProvider.value?.models||[]);const availableModels=computed(()=>modelRows.value.filter(model=>model.status===`available`));const modelItems=computed(()=>availableModels.value.map(model=>({title:model.label||model.id,value:model.id})));const selectedModel=computed(()=>availableModels.value.find(model=>model.id===modelId.value)||null);const compatibleAgents=computed(()=>{const providerId=modelProviderId.value;const selectedModelId=modelId.value;return(selectedEngine.value?.agents||[]).filter(agent=>[`all`,`primary`].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===providerId)&&(!agent.modelId||agent.modelId===selectedModelId))});const selectedAgent=computed(()=>compatibleAgents.value.find(agent=>agent.id===agentId.value)||null);const variantItems=computed(()=>[{title:`Automatic`,value:``},...(selectedModel.value?.variants||[]).map(variant=>({title:variant.label||variant.id,value:variant.id}))]);const selectionRevision=computed(()=>String(selectedEngine.value?.revision||``));const selection=computed(()=>{if(!selectedProvider.value||!selectedModel.value||!selectedAgent.value||!selectionRevision.value)return null;return{agentId:selectedAgent.value.id,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:selectedModel.value.id,modelProviderId:selectedProvider.value.id,variantId:variantId.value}});const overviewLoading=computed(()=>Boolean(overview.overview.isInitialLoading.value||overview.overview.isLoading.value));const engineDetailsLoading=computed(()=>Boolean(engineId.value&&(details.overview.isInitialLoading.value||details.overview.isLoading.value)));const providerLoading=computed(()=>Boolean(engineId.value===`opencode`&&(details.providerPage.isInitialLoading.value||details.providerPage.isLoading.value)));const modelLoading=computed(()=>Boolean(modelProviderId.value&&(details.modelPage.isInitialLoading.value||details.modelPage.isLoading.value)));const detailsLoading=computed(()=>Boolean(engineDetailsLoading.value||providerLoading.value||modelLoading.value));const loading=computed(()=>overviewLoading.value||detailsLoading.value);const initialLoading=computed(()=>overviewLoading.value&&engineRows.value.length===0);const error=computed(()=>String(overview.overview.loadError.value||(engineId.value?details.overview.loadError.value:``)||(engineId.value===`opencode`?details.providerPage.loadError.value:``)||(engineId.value&&modelProviderId.value?details.modelPage.loadError.value:``)||``));const selectionSummary=computed(()=>selection.value?vibe64AssistantSelectionLabel(selection.value):``);function hydrateSelection(value=null){const current=value&&typeof value===`object`?value:{};engineId.value=String(current.engineId||``);modelProviderId.value=String(current.modelProviderId||``);modelId.value=String(current.modelId||``);agentId.value=String(current.agentId||``);variantId.value=String(current.variantId||``)}function selectEngine(value=``){engineId.value=String(value||``);modelProviderId.value=``;modelId.value=``;agentId.value=``;variantId.value=``}function selectProvider(value=``){modelProviderId.value=String(value||``);modelId.value=``;agentId.value=``;variantId.value=``}function selectModel(value=``){modelId.value=String(value||``);agentId.value=``;variantId.value=``}function selectVariant(value=``){variantId.value=String(value||``)}function openConnectionSettings(){if(!props.disabled)requestVibe64AccountConnectionsDialog({section:`ai`})}async function reload(){await Promise.allSettled([overview.reload(),details.reload()])}watch(active,(isActive,wasActive)=>{if(isActive&&!wasActive)hydrateSelection(props.initialSelection);if(!isActive){emit(`update:ready`,false);emit(`update:selection`,null)}},{immediate:true});watch([engineRows,overviewLoading],([engines,isLoading])=>{if(!active.value||isLoading||engines.some(engine=>engine.engineId===engineId.value))return;selectEngine(engines.find(engine=>engine.modelProviders?.some(provider=>provider.preferred===true))?.engineId||engines[0]?.engineId||``)},{immediate:true});watch([providerRows,engineDetailsLoading,providerLoading],([providers,engineLoading,providersLoading])=>{if(!active.value||engineLoading||providersLoading||providers.some(provider=>provider.id===modelProviderId.value))return;selectProvider(providers.find(provider=>provider.preferred===true)?.id||selectedEngine.value?.defaults?.modelProviderId||providers[0]?.id||``)},{immediate:true});watch([availableModels,modelRows,modelLoading],([models,allModels,isLoading])=>{if(!active.value||isLoading||allModels.some(model=>model.id===modelId.value&&model.status===`available`))return;const defaultModelId=selectedProvider.value?.defaultModelId||selectedEngine.value?.defaults?.modelId;selectModel(models.find(model=>model.id===defaultModelId)?.id||models[0]?.id||``)},{immediate:true});watch([compatibleAgents,detailsLoading],([agents,isLoading])=>{if(!active.value||isLoading||agents.some(agent=>agent.id===agentId.value))return;agentId.value=agents.find(agent=>agent.id===selectedEngine.value?.defaults?.agentId)?.id||agents[0]?.id||``},{immediate:true});watch([selectedModel,selectedAgent],([model,agent])=>{if(!active.value||!model)return;const fixedVariant=String(agent?.variantId||``);if(fixedVariant){variantId.value=fixedVariant;return}if(variantId.value&&!(model.variants||[]).some(variant=>variant.id===variantId.value))variantId.value=``},{immediate:true});watch(selection,current=>{emit(`update:ready`,Boolean(current)&&!loading.value&&!error.value);emit(`update:selection`,current)},{immediate:true});watch([loading,error],()=>{emit(`update:ready`,Boolean(selection.value)&&!loading.value&&!error.value)});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{"aria-labelledby":headingId,class:`studio-renewal-assistant`},[createBaseVNode(`div`,_hoisted_1$14,[createBaseVNode(`span`,null,[createBaseVNode(`strong`,{id:headingId,class:`text-title-small`},toDisplayString(__props.heading),1),createBaseVNode(`small`,_hoisted_2$10,toDisplayString(__props.supportingText),1)]),createVNode(VBtn,{disabled:__props.disabled||loading.value,size:`small`,type:`button`,variant:`text`,onClick:openConnectionSettings},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.manageLabel),1)]),_:1},8,[`disabled`])]),initialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,"aria-label":`Loading AI choices for the fresh session`,type:`list-item-two-line, list-item-two-line`})):error.value?(openBlock(),createBlock(VAlert,{key:1,density:`compact`,role:`alert`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_3$10,[createBaseVNode(`span`,null,toDisplayString(error.value),1),createVNode(VBtn,{disabled:loading.value,size:`small`,type:`button`,variant:`text`,onClick:reload},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Checking…`:`Try again`),1)]),_:1},8,[`disabled`])])]),_:1})):engineItems.value.length===0?(openBlock(),createBlock(VAlert,{key:2,density:`compact`,role:`status`,type:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.emptyMessage),1)]),_:1})):(openBlock(),createElementBlock(`div`,_hoisted_4$7,[engineItems.value.length>1?(openBlock(),createBlock(VSelect,{key:0,disabled:__props.disabled,"hide-details":`auto`,items:engineItems.value,label:`AI`,"model-value":engineId.value,variant:`outlined`,"onUpdate:modelValue":selectEngine},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true),providerItems.value.length>1?(openBlock(),createBlock(VSelect,{key:1,disabled:__props.disabled||detailsLoading.value,"hide-details":`auto`,items:providerItems.value,label:`Provider`,"model-value":modelProviderId.value,variant:`outlined`,"onUpdate:modelValue":selectProvider},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true),createVNode(VSelect,{disabled:__props.disabled||detailsLoading.value||modelItems.value.length===0,"hide-details":`auto`,items:modelItems.value,label:`Model`,"model-value":modelId.value,"no-data-text":`No available models`,variant:`outlined`,"onUpdate:modelValue":selectModel},null,8,[`disabled`,`items`,`model-value`]),variantItems.value.length>1?(openBlock(),createBlock(VSelect,{key:2,disabled:__props.disabled||detailsLoading.value,"hide-details":`auto`,items:variantItems.value,label:`Thinking`,"model-value":variantId.value,variant:`outlined`,"onUpdate:modelValue":selectVariant},null,8,[`disabled`,`items`,`model-value`])):createCommentVNode(``,true)])),selectionSummary.value?(openBlock(),createElementBlock(`p`,_hoisted_5$6,toDisplayString(__props.summaryPrefix)+toDisplayString(selectionSummary.value),1)):createCommentVNode(``,true)])}}};var Vibe64RenewalAssistantSelector_default=_plugin_vue_export_helper_default(_sfc_main$15,[[`__scopeId`,`data-v-c35da031`]]);var _hoisted_1$13=[`aria-live`];var _hoisted_2$9={class:`text-title-small`};var _hoisted_3$9={"aria-label":`Session renewal progress`,class:`studio-session-renewal__steps text-body-medium`};var _hoisted_4$6=[`aria-current`];var _hoisted_5$5={class:`studio-session-renewal__step-icon`,"aria-hidden":`true`};var _hoisted_6$4={class:`d-sr-only`};var _sfc_main$14={__name:`Vibe64SessionRenewalProgress`,props:{refreshError:{default:``,type:String},stageLabel:{default:``,type:String},steps:{default:()=>[],type:Array}},setup(__props){const props=__props;const renewalProgress=computed(()=>{const steps=Array.isArray(props.steps)?props.steps:[];if(!steps.length)return 0;const completed=steps.reduce((value,step)=>value+(step.state===`complete`?1:step.state===`active`?.5:0),0);return Math.round(completed/steps.length*100)});function stepStateLabel(state=``){return{active:`Current step`,complete:`Complete`,pending:`Not started`}[String(state||``)]||``}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createBaseVNode(`div`,{class:`studio-session-renewal__progress-copy`,"aria-live":__props.refreshError?`off`:`polite`,role:`status`},[createBaseVNode(`strong`,_hoisted_2$9,toDisplayString(__props.stageLabel),1),_cache[0]||(_cache[0]=createBaseVNode(`span`,{class:`text-body-small`},`You can close this window. Progress is saved and will resume safely.`,-1))],8,_hoisted_1$13),createVNode(VProgressLinear,{"aria-label":`Session renewal in progress`,class:`studio-session-renewal__progress-line`,color:`primary`,indeterminate:!__props.refreshError,"model-value":__props.refreshError?renewalProgress.value:void 0,rounded:``},null,8,[`indeterminate`,`model-value`]),createBaseVNode(`ol`,_hoisted_3$9,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.steps,step=>{return openBlock(),createElementBlock(`li`,{key:step.id,"aria-current":step.state===`active`?`step`:void 0,class:normalizeClass([`studio-session-renewal__step--${step.state}`,{"font-weight-medium":step.state===`active`}])},[createBaseVNode(`span`,_hoisted_5$5,[createVNode(VIcon,{icon:step.state===`complete`?unref(mdiCheck):step.state===`active`?unref(mdiCircleSlice4):unref(mdiCircleOutline),size:`18`},null,8,[`icon`])]),createBaseVNode(`span`,null,toDisplayString(step.label),1),createBaseVNode(`span`,_hoisted_6$4,toDisplayString(stepStateLabel(step.state)),1)],10,_hoisted_4$6)}),128))])],64)}}};var Vibe64SessionRenewalProgress_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-c8c27703`]]);var SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS=2e4;var SESSION_RENEWAL_PROGRESS_STAGES=Object.freeze([Object.freeze({id:`handover`,label:`Prepare the handover`,stages:new Set([`draft_generating`,`draft_ready`])}),Object.freeze({id:`quiesce`,label:`Stop the old session safely`,stages:new Set([`old_quiescing`])}),Object.freeze({id:`successor`,label:`Create the fresh session`,stages:new Set([`successor_creating`,`successor_discarding`,`successor_setup`])}),Object.freeze({id:`briefing`,label:`Brief the fresh assistant`,stages:new Set([`successor_seeding`,`successor_acknowledged`])}),Object.freeze({id:`archive`,label:`Archive the old session`,stages:new Set([`old_archiving`])}),Object.freeze({id:`activate`,label:`Open the fresh session`,stages:new Set([`successor_activating`,`completed`])})]);var SESSION_RENEWAL_RESTORE_PROGRESS=Object.freeze([Object.freeze({id:`restore`,label:`Restore the old session safely`,state:`active`})]);var SESSION_RENEWAL_CANCEL_PROGRESS=Object.freeze([Object.freeze({id:`cancel`,label:`Keep the old session and discard the fresh one`,state:`active`})]);function sessionRenewalText(value=``){return String(value??``).replaceAll(`\r
23
23
  `,`
24
24
  `).replaceAll(`\r`,`
25
25
  `)}function sessionRenewalDraftCharacterCount(value=``){return Array.from(sessionRenewalText(value)).length}function sessionRenewalPhase(renewal=null,{initialLoading=false,loadError=``}={}){if(!renewal&&initialLoading)return`loading`;if(!renewal&&String(loadError||``).trim())return`load_error`;const status=String(renewal?.status||``).trim();if(!renewal||status===`cancelled`)return`intro`;if(status===`review`)return`review`;if(status===`failed`)return`failed`;if(status===`completed`)return`completed`;return`progress`}function sessionRenewalStageProgress(stage=``){const currentStage=String(stage||``).trim();if(currentStage===`failure_restoring`)return SESSION_RENEWAL_RESTORE_PROGRESS.map(step=>({...step}));if(currentStage===`cancelling`)return SESSION_RENEWAL_CANCEL_PROGRESS.map(step=>({...step}));const activeIndex=SESSION_RENEWAL_PROGRESS_STAGES.findIndex(step=>step.stages.has(currentStage));return SESSION_RENEWAL_PROGRESS_STAGES.map((step,index)=>({id:step.id,label:step.label,state:currentStage===`completed`||activeIndex>=0&&index<activeIndex?`complete`:index===activeIndex?`active`:`pending`}))}function sessionRenewalStageLabel(stage=``){return{cancelling:`Cancelling the renewal…`,draft_generating:`Preparing the handover…`,failure_restoring:`Restoring the old session…`,old_archiving:`Archiving the old session…`,old_quiescing:`Stopping old session tools…`,successor_acknowledged:`Fresh assistant is ready…`,successor_activating:`Opening the fresh session…`,successor_creating:`Creating the fresh session…`,successor_discarding:`Resetting the fresh session safely…`,successor_seeding:`Briefing the fresh assistant…`,successor_setup:`Preparing the fresh workspace…`}[String(stage||``).trim()]||`Renewing this session…`}function sessionRenewalFailureSupportingMessage(renewal=null){let message=``;if(String(renewal?.error?.code||``).trim()===`vibe64_session_renewal_restore_failed`)message=`The old session and its recovery state are retained, but it is not writable yet. Retry to finish restoring it safely, or Cancel renewal to keep the old session without the fresh one.`;else message=`The old session remains available. Fix the reported condition, then retry the same saved renewal, or Cancel renewal to keep the old session and discard the fresh one.`;return String(renewal?.error?.message||``).trim()===message?``:message}function sessionRenewalAdvisoryPresentation(advisory={}){const severity=String(advisory?.severity||`none`).trim();const recommended=advisory?.recommended===true;return{attention:recommended,color:severity===`soon`?`warning`:recommended?`primary`:void 0,label:severity===`soon`?`Renew soon`:recommended?`Consider renewal`:`Renew session`,reason:String(advisory?.reason||`Renew this session with a reviewed handover.`).trim()}}function sessionRenewalOperationKey(sessionId=``,{now=Date.now(),randomId=``}={}){const safeSessionId=String(sessionId||``).trim().replace(/[^A-Za-z0-9_.-]+/gu,`-`).slice(0,48)||`session`;const safeRandomId=String(randomId||``).trim().replace(/[^A-Za-z0-9_.-]+/gu,``).slice(0,40)||Math.random().toString(36).slice(2,14);return`renewal:${safeSessionId}:${Number(now).toString(36)}:${safeRandomId}`.slice(0,128)}var _hoisted_1$12={class:`studio-session-renewal__heading`};var _hoisted_2$8={class:`studio-session-renewal__icon`,"aria-hidden":`true`};var _hoisted_3$8={class:`studio-session-renewal__notice-with-action`};var _hoisted_4$5={class:`studio-session-renewal__notice-copy`};var _hoisted_5$4={class:`text-body-small`};var _hoisted_6$3={key:1,class:`studio-session-renewal__skeleton`,"aria-label":`Loading session renewal`,role:`status`};var _hoisted_7$3={class:`studio-session-renewal__notice-copy`};var _hoisted_8$3={class:`text-title-small`};var _hoisted_9$2={class:`text-body-medium`};var _hoisted_10$2={class:`studio-session-renewal__inline-actions`};var _hoisted_11$1={class:`studio-session-renewal__notice-copy`};var _hoisted_12$1={key:0,class:`text-body-small`};var _hoisted_13={key:0,"aria-label":`Saved source details to preserve`,class:`studio-session-renewal__source-details text-body-small`};var _hoisted_14={key:3,class:`studio-session-renewal__supporting text-body-small`,role:`status`};var _hoisted_15={key:0,class:`studio-session-renewal__supporting text-body-small`};var _hoisted_16={class:`studio-session-renewal__notice-copy`};var _hoisted_17={class:`text-body-small`};var _sfc_main$13={__name:`Vibe64SessionRenewalDialog`,props:{renewal:{default:()=>({}),type:Object}},setup(__props){const props=__props;const{smAndDown}=useDisplay();const renewalTitleId=`vibe64-session-renewal-title-${useId()}`;const assistantSelectionReady=ref(false);const successorSelection=ref(null);const routing=useModelRouting({enabled:computed(()=>Boolean(props.renewal.open)),view:`main`});const mainSelection=routing.mainChatSelection;const sameSelection=(left,right)=>[`engineId`,`agentId`,`modelProviderId`,`modelId`,`variantId`].every(key=>(left?.[key]||``)===(right?.[key]||``));const dialogBusy=computed(()=>Boolean(props.renewal.successorSelectionPending||props.renewal.busy&&props.renewal.phase!==`progress`));const canConfirmRenewal=computed(()=>Boolean(props.renewal.canConfirm&&assistantSelectionReady.value&&successorSelection.value));const manualDraft=computed(()=>props.renewal.renewal?.draft?.origin===`manual`);const failedSupportingMessage=computed(()=>sessionRenewalFailureSupportingMessage(props.renewal.renewal));const manualSourceItems=computed(()=>{const source=props.renewal.renewal?.basis?.source;if(!source||typeof source!==`object`||Array.isArray(source))return[];return[{label:`Authority`,value:source.authority},{label:`Repository`,value:source.repository},{label:`Reference`,value:source.ref},{label:`Commit`,value:source.commit}].filter(item=>String(item.value||``).trim()).map(item=>({...item,value:String(item.value).trim()}))});function closeFromModel(value){if(!value&&!dialogBusy.value)props.renewal.close?.()}function confirmRenewal(){if(canConfirmRenewal.value)props.renewal.confirm?.(sameSelection(successorSelection.value,mainSelection.value)?null:successorSelection.value)}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-labelledby":renewalTitleId,fullscreen:unref(smAndDown),"model-value":__props.renewal.open,"max-width":`46rem`,persistent:dialogBusy.value,scrollable:``,onAfterLeave:_cache[2]||(_cache[2]=$event=>__props.renewal.restoreTriggerFocus?.()),"onUpdate:modelValue":closeFromModel},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass([`studio-session-renewal`,{"studio-session-renewal--fullscreen":unref(smAndDown)}]),"data-vibe64-session-renewal":``,"data-vibe64-session-renewal-phase":__props.renewal.phase,rounded:unref(smAndDown)?`0`:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`studio-session-renewal__header`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$12,[createBaseVNode(`span`,_hoisted_2$8,[createVNode(VIcon,{icon:unref(mdiAutorenew),size:`24`},null,8,[`icon`])]),createBaseVNode(`span`,null,[createBaseVNode(`h2`,{id:renewalTitleId,class:`text-title-medium`},`Renew this session`),_cache[3]||(_cache[3]=createBaseVNode(`span`,{class:`studio-session-renewal__subtitle text-body-small`},` Continue in a fresh conversation `,-1))])]),createVNode(VBtn,{"aria-label":`Close session renewal`,"data-vibe64-session-renewal-close":`icon`,disabled:dialogBusy.value,height:`48`,icon:unref(mdiClose),title:`Close`,variant:`text`,width:`48`,onClick:__props.renewal.close},null,8,[`disabled`,`icon`,`onClick`])]),_:1}),createVNode(VDivider),createVNode(VCardText,{class:`studio-session-renewal__body`},{default:withCtx(()=>[__props.renewal.refreshError&&__props.renewal.phase!==`load_error`?(openBlock(),createBlock(VAlert,{key:0,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),role:`status`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$8,[createBaseVNode(`span`,_hoisted_4$5,[_cache[4]||(_cache[4]=createBaseVNode(`strong`,{class:`text-title-small`},`Latest progress could not be checked`,-1)),_cache[5]||(_cache[5]=createBaseVNode(`span`,{class:`text-body-medium`},`The last saved renewal state is shown. Nothing has been discarded.`,-1)),createBaseVNode(`span`,_hoisted_5$4,toDisplayString(__props.renewal.refreshError),1)]),createVNode(VBtn,{"aria-busy":__props.renewal.refreshing?`true`:void 0,disabled:__props.renewal.refreshing,height:`48`,type:`button`,variant:`text`,onClick:__props.renewal.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.refreshing?`Checking…`:`Check again`),1)]),_:1},8,[`aria-busy`,`disabled`,`onClick`])])]),_:1},8,[`icon`])):createCommentVNode(``,true),__props.renewal.phase===`loading`?(openBlock(),createElementBlock(`div`,_hoisted_6$3,[createVNode(VSkeletonLoader,{type:`paragraph, paragraph`}),createVNode(VSkeletonLoader,{height:`224`,type:`image`})])):__props.renewal.phase===`load_error`?(openBlock(),createBlock(StudioErrorNotice_default,{key:2,title:`Session renewal could not load`,error:__props.renewal.loadError},null,8,[`error`])):__props.renewal.phase===`intro`?(openBlock(),createElementBlock(Fragment,{key:3},[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`studio-session-renewal__lead text-body-large`},` Vibe64 will ask this session to write a detailed handover, let you review it, and create a fresh session from the current saved version. `,-1)),__props.renewal.advisoryPresentation?.attention?(openBlock(),createBlock(VAlert,{key:0,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),type:__props.renewal.advisoryPresentation.color===`warning`?`warning`:`info`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_7$3,[createBaseVNode(`strong`,_hoisted_8$3,toDisplayString(__props.renewal.advisoryPresentation.label),1),createBaseVNode(`span`,_hoisted_9$2,toDisplayString(__props.renewal.advisoryPresentation.reason),1)])]),_:1},8,[`icon`,`type`])):createCommentVNode(``,true),createVNode(VSheet,{class:`studio-session-renewal__assurance text-body-medium`,color:`surface-variant`,rounded:`lg`},{default:withCtx(()=>[createVNode(VIcon,{color:`primary`,icon:unref(mdiArchiveCheckOutline),size:`22`},null,8,[`icon`]),_cache[6]||(_cache[6]=createBaseVNode(`span`,null,[createBaseVNode(`strong`,{class:`font-weight-medium`},`Your old session is kept until the handover is delivered.`),createTextVNode(` Once it reaches the fresh assistant conversation, renewal completes even if the model cannot answer. `)],-1))]),_:1}),_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`studio-session-renewal__supporting text-body-small`},` Before starting, save or discard any source changes and wait for assistant, workspace, Save, and Update activity to finish. `,-1))],64)):__props.renewal.phase===`progress`?(openBlock(),createBlock(Vibe64SessionRenewalProgress_default,{key:4,"refresh-error":__props.renewal.refreshError,"stage-label":__props.renewal.stageLabel,steps:__props.renewal.steps},null,8,[`refresh-error`,`stage-label`,`steps`])):__props.renewal.phase===`review`?(openBlock(),createElementBlock(Fragment,{key:5},[_cache[14]||(_cache[14]=createBaseVNode(`p`,{class:`studio-session-renewal__lead text-body-large`},` Review what the fresh assistant will receive. Add anything important before continuing. `,-1)),__props.renewal.draftConflict?(openBlock(),createBlock(VAlert,{key:0,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),role:`alert`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[11]||(_cache[11]=createBaseVNode(`span`,{class:`studio-session-renewal__notice-copy`},[createBaseVNode(`strong`,{class:`text-title-small`},`This handover changed elsewhere`),createBaseVNode(`span`,{class:`text-body-medium`},`Your unsaved edits are still here. Choose which version to continue editing before saving or renewing.`)],-1)),createBaseVNode(`div`,_hoisted_10$2,[createVNode(VBtn,{height:`48`,type:`button`,variant:`text`,onClick:__props.renewal.keepLocalDraft},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Keep my edits `,-1)])]),_:1},8,[`onClick`]),createVNode(VBtn,{color:`primary`,height:`48`,type:`button`,variant:`tonal`,onClick:__props.renewal.acceptLatestDraft},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(` Discard my edits and use latest `,-1)])]),_:1},8,[`onClick`])])]),_:1},8,[`icon`])):createCommentVNode(``,true),manualDraft.value?(openBlock(),createBlock(VAlert,{key:1,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),type:`info`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_11$1,[_cache[12]||(_cache[12]=createBaseVNode(`strong`,{class:`text-title-small`},`Complete the handover template`,-1)),_cache[13]||(_cache[13]=createBaseVNode(`span`,{class:`text-body-medium`},` The assistant could not provide a verified handover. Fill in every section, and keep the Saved source details unchanged so the fresh assistant can verify its exact starting point. `,-1)),__props.renewal.renewal?.error?.message?(openBlock(),createElementBlock(`span`,_hoisted_12$1,toDisplayString(__props.renewal.renewal.error.message),1)):createCommentVNode(``,true)]),manualSourceItems.value.length?(openBlock(),createElementBlock(`dl`,_hoisted_13,[(openBlock(true),createElementBlock(Fragment,null,renderList(manualSourceItems.value,item=>{return openBlock(),createElementBlock(Fragment,{key:item.label},[createBaseVNode(`dt`,null,toDisplayString(item.label),1),createBaseVNode(`dd`,null,[createBaseVNode(`code`,null,toDisplayString(item.value),1)])],64)}),128))])):createCommentVNode(``,true)]),_:1},8,[`icon`])):__props.renewal.renewal?.error?.message?(openBlock(),createBlock(VAlert,{key:2,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),type:`info`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.renewal.error.message),1)]),_:1},8,[`icon`])):createCommentVNode(``,true),createVNode(VTextarea,{"model-value":__props.renewal.draftText,autofocus:``,class:`studio-session-renewal__draft`,counter:__props.renewal.maxHandoverCharacters,error:Boolean(__props.renewal.draftError),"error-messages":__props.renewal.draftError,label:`Handover for the fresh session`,"persistent-counter":``,rows:`12`,variant:`outlined`,"onUpdate:modelValue":__props.renewal.setDraftText},{counter:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(__props.renewal.draftCharacterCount.toLocaleString())+` / `+toDisplayString(__props.renewal.maxHandoverCharacters.toLocaleString()),1)]),_:1},8,[`model-value`,`counter`,`error`,`error-messages`,`onUpdate:modelValue`]),__props.renewal.draftDirty?(openBlock(),createElementBlock(`p`,_hoisted_14,` Unsaved edits are kept in this browser tab if you close this window or switch sessions. `)):createCommentVNode(``,true),createVNode(Vibe64RenewalAssistantSelector_default,{active:__props.renewal.open&&__props.renewal.phase===`review`&&!unref(routing).resource.isInitialLoading.value,disabled:dialogBusy.value,"initial-selection":unref(mainSelection),"onUpdate:ready":_cache[0]||(_cache[0]=$event=>assistantSelectionReady.value=$event),"onUpdate:selection":_cache[1]||(_cache[1]=$event=>successorSelection.value=$event)},null,8,[`active`,`disabled`,`initial-selection`]),_cache[15]||(_cache[15]=createBaseVNode(`p`,{class:`studio-session-renewal__supporting text-body-small`},` Renewing will stop this session’s tools, create and prepare a fresh session, deliver the handover, then archive this one. `,-1))],64)):__props.renewal.phase===`failed`?(openBlock(),createElementBlock(Fragment,{key:6},[createVNode(StudioErrorNotice_default,{title:`Session renewal needs attention`,error:__props.renewal.renewal?.error?.message||`Session renewal could not continue.`},null,8,[`error`]),failedSupportingMessage.value?(openBlock(),createElementBlock(`p`,_hoisted_15,toDisplayString(failedSupportingMessage.value),1)):createCommentVNode(``,true)],64)):__props.renewal.phase===`completed`?(openBlock(),createElementBlock(Fragment,{key:7},[createVNode(VSheet,{class:`studio-session-renewal__success text-body-medium`,color:`surface-variant`,rounded:`lg`,role:`status`},{default:withCtx(()=>[createVNode(VIcon,{color:`success`,icon:unref(mdiCheckCircleOutline),size:`28`},null,8,[`icon`]),createBaseVNode(`span`,null,[_cache[16]||(_cache[16]=createBaseVNode(`strong`,{class:`font-weight-medium`},`The fresh session is ready.`,-1)),createTextVNode(` `+toDisplayString(__props.renewal.successorSelectionError?`It is ready to open; the old session remains available in the archive.`:`Opening it now; the old session remains available in the archive.`),1)])]),_:1}),__props.renewal.maintenanceNeedsRetry?(openBlock(),createBlock(VAlert,{key:0,class:`studio-session-renewal__notice`,density:`compact`,icon:unref(mdiInformationOutline),role:`status`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_16,[_cache[17]||(_cache[17]=createBaseVNode(`strong`,{class:`text-title-small`},`Cleanup needs retry`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`span`,{class:`text-body-medium`},` The fresh session is ready, but Vibe64 has not finished retiring every old-session resource. `,-1)),createBaseVNode(`span`,_hoisted_17,toDisplayString(__props.renewal.maintenanceError),1)])]),_:1},8,[`icon`])):createCommentVNode(``,true),__props.renewal.successorSelectionError?(openBlock(),createBlock(StudioErrorNotice_default,{key:1,title:`The fresh session could not be opened automatically`,error:__props.renewal.successorSelectionError},null,8,[`error`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:1}),createVNode(VDivider),createVNode(VCardActions,{class:normalizeClass([`studio-session-renewal__actions`,{"studio-session-renewal__actions--compact":unref(smAndDown)}])},{default:withCtx(()=>[__props.renewal.phase===`review`?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.renewal.pendingAction===`cancel`?`true`:void 0,class:`studio-session-renewal__action`,disabled:dialogBusy.value||Boolean(__props.renewal.draftConflict),height:`48`,type:`button`,variant:`text`,onClick:__props.renewal.cancel},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`cancel`?__props.renewal.actionLabel:__props.renewal.draftDirty?`Discard edits and cancel`:`Cancel renewal`),1)]),_:1},8,[`aria-busy`,`disabled`,`onClick`])):__props.renewal.phase===`failed`?(openBlock(),createBlock(VBtn,{key:1,"aria-busy":__props.renewal.pendingAction===`cancel`?`true`:void 0,class:`studio-session-renewal__action`,"data-vibe64-session-renewal-cancel":`failed`,disabled:dialogBusy.value,height:`48`,type:`button`,variant:`text`,onClick:__props.renewal.cancel},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`cancel`?__props.renewal.actionLabel:`Cancel renewal`),1)]),_:1},8,[`aria-busy`,`disabled`,`onClick`])):(openBlock(),createBlock(VBtn,{key:2,class:`studio-session-renewal__action`,"data-vibe64-session-renewal-close":`footer`,disabled:dialogBusy.value,height:`48`,type:`button`,variant:`text`,onClick:__props.renewal.close},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(` Close `,-1)])]),_:1},8,[`disabled`,`onClick`])),_cache[20]||(_cache[20]=createBaseVNode(`span`,{class:`studio-session-renewal__actions-spacer`},null,-1)),__props.renewal.phase===`load_error`?(openBlock(),createBlock(VBtn,{key:3,"aria-busy":__props.renewal.refreshing?`true`:void 0,autofocus:``,class:`studio-session-renewal__action studio-session-renewal__action--primary`,disabled:__props.renewal.refreshing,height:`48`,type:`button`,variant:`tonal`,onClick:__props.renewal.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.refreshing?`Checking…`:`Try again`),1)]),_:1},8,[`aria-busy`,`disabled`,`onClick`])):__props.renewal.phase===`intro`?(openBlock(),createBlock(VBtn,{key:4,"aria-busy":__props.renewal.pendingAction===`draft`?`true`:void 0,autofocus:``,class:`studio-session-renewal__action studio-session-renewal__action--primary`,color:`primary`,disabled:__props.renewal.busy,height:`48`,"prepend-icon":unref(mdiFileDocumentEditOutline),type:`button`,variant:`flat`,onClick:__props.renewal.requestDraft},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.actionLabel||`Prepare handover`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):__props.renewal.phase===`review`?(openBlock(),createElementBlock(Fragment,{key:5},[createVNode(VBtn,{"aria-busy":__props.renewal.pendingAction===`save`?`true`:void 0,class:`studio-session-renewal__action`,disabled:!__props.renewal.canSaveDraft,height:`48`,type:`button`,variant:`tonal`,onClick:__props.renewal.saveDraft},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`save`?__props.renewal.actionLabel:`Save draft`),1)]),_:1},8,[`aria-busy`,`disabled`,`onClick`]),createVNode(VBtn,{"aria-busy":__props.renewal.pendingAction===`confirm`?`true`:void 0,class:`studio-session-renewal__action studio-session-renewal__action--primary`,color:`primary`,disabled:!canConfirmRenewal.value,height:`48`,"prepend-icon":unref(mdiAutorenew),type:`button`,variant:`flat`,onClick:confirmRenewal},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`confirm`?__props.renewal.actionLabel:`Renew session`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`])],64)):__props.renewal.phase===`failed`?(openBlock(),createBlock(VBtn,{key:6,"aria-busy":__props.renewal.pendingAction===`retry`?`true`:void 0,autofocus:``,class:`studio-session-renewal__action studio-session-renewal__action--primary`,color:`primary`,disabled:__props.renewal.busy,height:`48`,"prepend-icon":unref(mdiRefresh),type:`button`,variant:`flat`,onClick:__props.renewal.retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`retry`?__props.renewal.actionLabel:`Retry`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):__props.renewal.phase===`completed`?(openBlock(),createElementBlock(Fragment,{key:7},[__props.renewal.maintenanceNeedsRetry?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.renewal.pendingAction===`retry`?`true`:void 0,class:`studio-session-renewal__action`,disabled:__props.renewal.busy,height:`48`,"prepend-icon":unref(mdiRefresh),type:`button`,variant:`tonal`,onClick:__props.renewal.retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction===`retry`?__props.renewal.actionLabel:`Retry cleanup`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-busy":__props.renewal.successorSelectionPending?`true`:void 0,autofocus:Boolean(__props.renewal.successorSelectionError),class:`studio-session-renewal__action studio-session-renewal__action--primary`,color:`primary`,disabled:__props.renewal.successorSelectionPending,height:`48`,type:`button`,variant:`flat`,onClick:__props.renewal.openSuccessor},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.successorSelectionPending?`Opening…`:`Open fresh session`),1)]),_:1},8,[`aria-busy`,`autofocus`,`disabled`,`onClick`])],64)):createCommentVNode(``,true)]),_:1},8,[`class`])]),_:1},8,[`class`,`data-vibe64-session-renewal-phase`,`rounded`])]),_:1},8,[`fullscreen`,`model-value`,`persistent`])}}};var Vibe64SessionRenewalDialog_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-31adbcf9`]]);function useVibe64MountedSessionData({active=false,projectSlug:projectSlugInput,sessionId,sessionsApiPath,summarySession=null}={}){const projectSlug=projectSlugInput===void 0?useVibe64ProjectSlug():computed(()=>readRefOrGetterValue(projectSlugInput));const detailRecord=ref(null);const agentTurnOverlay=ref(null);const agentConnectionStatus=ref(`initializing`);const agentConnectionError=ref(``);const mountedActive=computed(()=>readRefOrGetterValue(active)===true);const activeSessionId=computed(()=>String(readRefOrGetterValue(sessionId)||``).trim());const activeSessionsApiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``).trim());const listSession=computed(()=>{const session=readRefOrGetterValue(summarySession);return session?.sessionId===activeSessionId.value?session:null});const detailPath=computed(()=>activeSessionId.value&&activeSessionsApiPath.value?vibe64SessionPath(activeSessionsApiPath.value,activeSessionId.value):``);const detailQueryKey=computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),activeSessionId.value,`detail`]);const detailResource=useEndpointResource({enabled:computed(()=>Boolean(activeSessionId.value&&activeSessionsApiPath.value)),fallbackLoadError:`Vibe64 session could not be loaded.`,path:detailPath,queryKey:detailQueryKey,queryOptions:{queryFn:({signal})=>getHttpWebClient().request(detailPath.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(2e4)])}),retry:false,refetchOnMount:`always`,refetchOnWindowFocus:false},readMethod:`GET`,realtime:{event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>vibe64SessionEventMatchesScope(payload,{projectSlug:projectSlug.value})&&mountedSessionRealtimeShouldRefresh({payload},activeSessionId.value)},refreshOnPull:true,requestRecoveryLabel:`Vibe64 session`});const detailState=computed(()=>mountedSessionDetailLoadState({detailSession:detailRecord.value,fetching:Boolean(detailResource.isFetching?.value),listSession:listSession.value,loadError:detailResource.loadError?.value||``,loading:Boolean(detailResource.isLoading?.value||detailResource.isInitialLoading?.value),sessionId:activeSessionId.value}));const baseSession=computed(()=>mountedSessionRecord(detailRecord.value,listSession.value,activeSessionId.value));const session=computed(()=>enrichVibe64SessionForDisplay(sessionWithAgentTurnRealtimeOverlay(baseSession.value,agentTurnOverlay.value)));let refreshInFlight=null;function acceptSessionResponse(candidate=null){const nextRecord=latestSessionDetailRecord(detailRecord.value,candidate,activeSessionId.value);if(!nextRecord||nextRecord===detailRecord.value)return false;detailRecord.value=nextRecord;const canonicalRevision=vibe64SessionRevision(nextRecord);if(canonicalRevision!==null&&canonicalRevision>=Number(agentTurnOverlay.value?.revision))agentTurnOverlay.value=null;return true}async function refresh(options={}){const reason=typeof options===`string`?options:String(options?.reason||``);if(!activeSessionId.value||!activeSessionsApiPath.value)return null;if(refreshInFlight)return refreshInFlight;const startedAtMs=Date.now();vibe64SessionDebugLog(`client.mountedSession.refresh.start`,{reason,sessionId:activeSessionId.value});refreshInFlight=Promise.resolve(refetchEndpointResource(detailResource));try{const result=await refreshInFlight;vibe64SessionDebugLog(`client.mountedSession.refresh.done`,{...vibe64SessionDebugSummary(session.value||{}),durationMs:vibe64SessionDebugDurationMs(startedAtMs),reason,sessionId:activeSessionId.value});return result}catch(error){vibe64SessionDebugLog(`client.mountedSession.refresh.error`,{durationMs:vibe64SessionDebugDurationMs(startedAtMs),error:vibe64SessionDebugError(error),reason,sessionId:activeSessionId.value});throw error}finally{refreshInFlight=null}}function refreshInBackground(reason=``){refresh({reason}).catch(()=>{})}useRealtimeEvent({enabled:computed(()=>Boolean(activeSessionId.value)),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(agentTurnRealtimeOverlayFromPayload(payload,activeSessionId.value)),onEvent:({payload={}}={})=>{const overlay=agentTurnRealtimeOverlayFromPayload(payload,activeSessionId.value);if(!overlay)return;agentTurnOverlay.value=latestAgentTurnRealtimeOverlay(agentTurnOverlay.value,overlay);vibe64SessionDebugLog(`client.mountedSession.agentTurn`,{active:overlay.active===true,reason:overlay.reason,sessionId:overlay.sessionId,threadId:String(overlay.agentSession?.thread?.id||``),turnId:String(overlay.agentSession?.turn?.id||``)})}});const realtimeSocket=useRealtimeSocket({required:false});let connectionGeneration=realtimeSocket.connected?1:0;let reconciliationInFlight=null;let reconciliationController=null;let reconciliationRetryTimer=null;let reconciliationRetryDelay=1e3;let disposed=false;function clearReconciliationRetry(){clearTimeout(reconciliationRetryTimer);reconciliationRetryTimer=null}function scheduleReconciliationRetry(){clearReconciliationRetry();if(disposed||!realtimeSocket.connected||globalThis.document?.hidden)return;reconciliationRetryTimer=setTimeout(()=>{reconciliationRetryTimer=null;if(!globalThis.document?.hidden)reconcileMountedAgentSession(`retry`)},reconciliationRetryDelay);reconciliationRetryDelay=Math.min(reconciliationRetryDelay*2,3e4)}async function reconcileMountedAgentSession(reason=`realtime-connect`){if(disposed||!realtimeSocket.connected||!activeSessionId.value||!activeSessionsApiPath.value)return null;if(reconciliationInFlight)return reconciliationInFlight;clearReconciliationRetry();const generation=connectionGeneration;const controller=new AbortController;reconciliationController=controller;const currentConnection=()=>!disposed&&realtimeSocket.connected&&generation===connectionGeneration;const timeout=setTimeout(()=>{controller.abort(new Error(`Assistant status check timed out.`))},45e3);const cancelled=new Promise((_resolve,reject)=>{controller.signal.addEventListener(`abort`,()=>reject(controller.signal.reason),{once:true})});if(agentConnectionStatus.value!==`connected`)agentConnectionStatus.value=[`disconnected`,`unknown`,`reconciling`,`unavailable`,`failed`].includes(agentConnectionStatus.value)?`reconciling`:`initializing`;vibe64SessionDebugLog(`client.mountedSession.agentConnection.check`,{reason,sessionId:activeSessionId.value,status:agentConnectionStatus.value});const checking=(async()=>{if(mountedActive.value)refreshInBackground(reason);else{const refreshed=await refresh({reason});if(!currentConnection()||controller.signal.aborted)return null;if(refreshed?.isError)throw refreshed.error}const recoveringActiveAgentWork=sessionRecordHasActiveAgentWork(session.value);if(!mountedActive.value&&!recoveringActiveAgentWork){agentConnectionStatus.value=`initializing`;return session.value}const result=await getHttpWebClient().request(vibe64SessionPath(activeSessionsApiPath.value,activeSessionId.value,`/agent-session`),{body:{},method:`POST`,signal:controller.signal});if(result?.ok!==true)throw Object.assign(new Error(result?.error||`Assistant status could not be reconciled.`),{code:result?.code});if(currentConnection()&&!controller.signal.aborted){agentConnectionStatus.value=`connected`;agentConnectionError.value=``;reconciliationRetryDelay=1e3;if(recoveringActiveAgentWork)refreshInBackground(`agent-session-reconciled`)}return session.value})();reconciliationInFlight=Promise.race([checking,cancelled]).catch(error=>{if(currentConnection()){if(error?.code===VIBE64_ASSISTANT_ACCESS_ERROR_CODES.RESTRICTED){agentConnectionStatus.value=`restricted`;agentConnectionError.value=``;return null}agentConnectionError.value=String(error?.message||`The assistant could not be started. Please retry.`);if(error?.code===VIBE64_ASSISTANT_ACCESS_ERROR_CODES.UNAVAILABLE)agentConnectionStatus.value=`unavailable`;else if([`vibe64_agent_control_path_too_long`,`vibe64_agent_control_recovery_failed`,`vibe64_codex_history_unsupported`,`vibe64_session_archived`].includes(error?.code))agentConnectionStatus.value=`failed`;else{agentConnectionStatus.value=`unknown`;scheduleReconciliationRetry()}console.warn(`Vibe64 assistant status check failed.`,{code:String(error?.code||``),message:String(error?.message||``),reason,sessionId:activeSessionId.value})}vibe64SessionDebugLog(`client.mountedSession.agentConnection.error`,{error:vibe64SessionDebugError(error),reason,sessionId:activeSessionId.value});return null}).finally(()=>{clearTimeout(timeout);reconciliationController=null;reconciliationInFlight=null;if(!disposed&&realtimeSocket.connected&&generation!==connectionGeneration)reconcileMountedAgentSession(`realtime-reconnected`);else if(!disposed&&realtimeSocket.connected&&mountedActive.value&&agentConnectionStatus.value===`initializing`)reconcileMountedAgentSession(`provider-not-prepared`)});return reconciliationInFlight}const reconcileAfterConnectionChange=reason=>{connectionGeneration+=1;reconciliationRetryDelay=1e3;reconciliationController?.abort();reconcileMountedAgentSession(reason)};const reconcileAfterRealtimeConnect=()=>reconcileAfterConnectionChange(`realtime-connect`);useRealtimeEvent({enabled:computed(()=>Boolean(activeSessionId.value)),event:VIBE64_CONNECTIONS_CHANGED_EVENT,onEvent:()=>reconcileAfterConnectionChange(`account-connections-changed`)});useRealtimeEvent({enabled:computed(()=>Boolean(activeSessionId.value)),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>vibe64SessionEventMatchesScope(payload,{projectSlug:projectSlug.value})&&payload.sessionId===activeSessionId.value&&payload.reason===`session-assistant-selection-updated`,onEvent:()=>{agentConnectionStatus.value=`initializing`;reconcileAfterConnectionChange(`assistant-selection-changed`)}});const markRealtimeDisconnected=()=>{connectionGeneration+=1;clearReconciliationRetry();reconciliationController?.abort();agentConnectionStatus.value=`disconnected`};const reconcileAfterVisible=()=>{if(!globalThis.document?.hidden&&agentConnectionStatus.value===`unknown`)reconcileMountedAgentSession(`visible`)};function retryAgentConnection(){if(disposed)return;if(realtimeSocket.connected)return reconcileMountedAgentSession(`manual-retry`);realtimeSocket.connect?.()}globalThis.document?.addEventListener(`visibilitychange`,reconcileAfterVisible);realtimeSocket.on(`connect`,reconcileAfterRealtimeConnect);realtimeSocket.on(`connect_error`,markRealtimeDisconnected);realtimeSocket.on(`disconnect`,markRealtimeDisconnected);if(realtimeSocket.connected)queueMicrotask(()=>{reconcileMountedAgentSession(`initial-realtime-connect`)});watch(mountedActive,active=>{if(active&&[`initializing`,`disconnected`,`unknown`,`reconciling`].includes(agentConnectionStatus.value))reconcileMountedAgentSession(`provider-not-ready`)});onScopeDispose(()=>{disposed=true;clearReconciliationRetry();reconciliationController?.abort();globalThis.document?.removeEventListener(`visibilitychange`,reconcileAfterVisible);realtimeSocket.off(`connect`,reconcileAfterRealtimeConnect);realtimeSocket.off(`connect_error`,markRealtimeDisconnected);realtimeSocket.off(`disconnect`,markRealtimeDisconnected)});watch(detailResource.data,candidate=>{acceptSessionResponse(candidate||null)},{immediate:true});let summaryRefreshKey=``;watch(()=>{const reason=mountedSessionDetailRefreshReason(detailRecord.value,listSession.value,activeSessionId.value);return{detailRevision:vibe64SessionRevision(detailRecord.value),fetching:Boolean(detailResource.isFetching?.value),listRevision:vibe64SessionRevision(listSession.value),reason,sessionId:activeSessionId.value}},state=>{if(!state.reason){summaryRefreshKey=``;return}if(state.fetching)return;const refreshKey=[state.sessionId,state.reason,state.detailRevision??``,state.listRevision??``].join(`|`);if(refreshKey===summaryRefreshKey)return;summaryRefreshKey=refreshKey;refreshInBackground(state.reason)},{flush:`post`,immediate:true});watch(detailState,state=>{vibe64SessionDebugLog(`client.mountedSession.detailState`,{loading:state.loading===true,ready:state.ready===true,sessionId:state.sessionId,state:state.state})},{immediate:true});return{acceptSessionResponse,agentConnectionError,agentConnectionStatus,detailState,retryAgentConnection,refresh,resource:detailResource,session}}function assistantAccessText(value=``){return String(value??``).trim()}function useVibe64AssistantAccess({active=true,projectSlug:projectSlugInput,viewer:viewerInput,sessionId=``,sessionsApiPath=``}={}){const projectSlug=projectSlugInput===void 0?useVibe64ProjectSlug():computed(()=>readRefOrGetterValue(projectSlugInput));const viewer=viewerInput===void 0?hasInjectionContext()?inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`}):{actorKey:`local`}:viewerInput;const actorKey=computed(()=>unref(viewer)?.actorKey||``);const currentSessionId=computed(()=>assistantAccessText(readRefOrGetterValue(sessionId)));const currentSessionsApiPath=computed(()=>assistantAccessText(readRefOrGetterValue(sessionsApiPath)));const enabled=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&currentSessionId.value&&currentSessionsApiPath.value&&actorKey.value));const accessPath=computed(()=>enabled.value?vibe64SessionPath(currentSessionsApiPath.value,currentSessionId.value,`/assistant-access`):``);const realtime={events:[VIBE64_SESSION_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT,VIBE64_ACCOUNTS_CHANGED_EVENT],matches:({event=``,payload={}}={})=>{if(event===`vibe64.connections.changed`||event===`vibe64.accounts.changed`)return true;return vibe64SessionEventMatchesScope(payload,{projectSlug:projectSlug.value})&&mountedSessionRealtimeShouldRefresh({payload},currentSessionId.value,`includeAccess`)}};const accessResource=useEndpointResource({enabled,fallbackLoadError:`AI access could not be loaded.`,path:accessPath,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),currentSessionId.value,`assistant-access`,actorKey.value||`signed-out`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:true},readMethod:`GET`,realtime,refreshOnPull:true,requestRecoveryLabel:`AI access`});const scopeKey=computed(()=>JSON.stringify([projectSlug.value,currentSessionId.value,actorKey.value]));const access=computed(()=>{const value=accessResource.data.value;return actorKey.value&&value&&value.ok!==false?value:null});const purposes=computed(()=>access.value?.purposes||{});const currentPurpose=computed(()=>purposes.value[access.value?.currentMode]);const accessLabel=computed(()=>{const selection=currentPurpose.value?.effectiveSelection;return selection?vibe64AssistantSelectionLabel(selection):assistantAccessText(access.value?.accessLabel)||`Unavailable`});const canUseChat=computed(()=>access.value?.canUse===true);const canRouteChat=computed(()=>!access.value?.steering&&currentPurpose.value?.available===true);const canUseNative=computed(()=>access.value?.nativeCanUse===true);const canUseAi=computed(()=>access.value?.canUseAny??canUseChat.value);const canUsePurpose=purpose=>purposes.value[purpose]?.available===true;const accessError=computed(()=>vibe64ResourceResponseError(accessResource.data.value,`AI access could not be loaded.`)||assistantAccessText(accessResource.loadError.value));const initialAccessLoading=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&!access.value&&!accessError.value&&(!enabled.value||accessResource.isInitialLoading.value||accessResource.isLoading.value)));const restrictionMessage=computed(()=>{if(canUseChat.value||initialAccessLoading.value)return``;if(access.value?.steering&&!canUseNative.value)return access.value.available===true?`Only the owner can steer this turn. You can send a message when it finishes.`:`This turn's AI connection is unavailable right now, so you can't steer it. Check AI Accounts, or send your message when the turn finishes.`;if(currentPurpose.value&&!currentPurpose.value.available)return currentPurpose.value.message;if(access.value?.available===true&&access.value?.ownerOnly===true)return`Only the workspace owner can use this personal AI connection.`;if(!access.value||access.value.available!==true)return accessError.value||`The selected AI connection is unavailable.`;return``});return{access,accessError,accessLabel,canUseAi,canUseChat,canRouteChat,canUseNative,canUsePurpose,purposes,scopeKey,initialAccessLoading,reload:accessResource.reload,restrictionMessage}}var AGENT_SETTINGS_STORAGE_KEY=`vibe64:agent-settings`;function agentSettingsStorageKey(baseKey=``,projectSlug=``){return vibe64ProjectScopedStorageKey(baseKey,projectSlug)}function useVibe64AgentSettings({projectSlug:projectSlugInput}={}){const projectSlug=projectSlugInput===void 0?useVibe64ProjectSlug():computed(()=>toValue(projectSlugInput));const storageKey=computed(()=>agentSettingsStorageKey(AGENT_SETTINGS_STORAGE_KEY,projectSlug.value));const settings=ref(defaultVibe64AgentSettings());function load(){settings.value=normalizeVibe64AgentSettings(readLocalStorageJson(storageKey.value,defaultVibe64AgentSettings()))}function update(partial={}){settings.value=normalizeVibe64AgentSettings({...settings.value,...partial&&typeof partial===`object`&&!Array.isArray(partial)?partial:{}})}watch(storageKey,load,{immediate:true});watch(settings,value=>{writeLocalStorageJson(storageKey.value,normalizeVibe64AgentSettings(value))},{deep:true});return{requestSettings:computed(()=>{const value=settings.value;return value.providerId!==VIBE64_DEFAULT_AGENT_PROVIDER_ID||value.model||value.thinking?value:null}),settings,update}}function browserDraftStorage(identity){try{const storage=typeof window!==`undefined`?window.sessionStorage:null;return storage?{storage,key:`vibe64:chat-composer:v1:${JSON.stringify([identity.actorKey,identity.projectSlug,identity.sessionId])}`}:null}catch{return null}}function createConversationApplication(conversation,{identity,viewer,summarySession}){const{active,current}=conversation;const mounted=useVibe64MountedSessionData({...identity,active,summarySession:computed(()=>toValue(summarySession)?.sessionId===identity.sessionId?toValue(summarySession):null)});const conversationLog=proxyRefs(useVibe64ConversationLog({...identity,active,session:mounted.session,conversation}));const access=useVibe64AssistantAccess({...identity,viewer,active});const agentSettings=useVibe64AgentSettings(identity);const turn=computed(()=>mounted.session.value?.agentSession?.turn||{});const steerable=computed(()=>conversation.steerable.value&&turn.value.active===true&&turn.value.status!==`observation_lost`&&Boolean(turn.value.id)&&turn.value.state===`active`&&mounted.agentConnectionStatus.value===`connected`);const available=computed(()=>current.value&&!isArchivedVibe64Session(mounted.session.value||{})&&!mounted.detailState.value?.error&&!access.accessError.value);const refreshGoal=()=>{if(!globalThis.document?.hidden)conversation.refreshGoal()};useRealtimeEvent({enabled:active,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>vibe64SessionEventMatchesScope(payload,identity)&&payload.projectSlug===identity.projectSlug&&payload.sessionId===identity.sessionId&&[`codex-goal`,`claude-goal`,`assistant-routing-changed`].includes(payload.reason),onEvent:refreshGoal});for(const event of[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT])useRealtimeEvent({enabled:active,event,matches:()=>true,onEvent:refreshGoal});function prepareMessage(payload,{messageId,submissionKind=steerable.value?`steer`:`send`}={}){if(!available.value)throw new Error(`This conversation is no longer available.`);if(!access.canUseChat.value)throw new Error(access.restrictionMessage.value||`AI access is not ready.`);const queuedStartup=conversation.queueWhileSending.value&&conversation.delivery.state.sending&&turn.value.state===`starting`&&turn.value.status!==`observation_lost`&&mounted.agentConnectionStatus.value===`connected`;if(turn.value.active&&conversation.steerable.value&&!steerable.value&&!queuedStartup)throw new Error(`Wait for this turn to finish or stop it before sending.`);const authored=conversation.delivery.find(messageId)?.payload||payload;if(authored.request)return authored;const body=agentTurnControlPayloadFromContext(authored);const data=Object.fromEntries([`agentSettings`,`displayMessage`,`displayAttachments`,`genesisTask`,`planRevision`,`reviewAction`,`originId`,`messageSource`].filter(key=>Object.hasOwn(body,key)).map(key=>[key,body[key]]));return{...authored,submissionKind,data,request:{text:String(authored.message||``),data,...authored.attachmentIds?.length?{attachmentIds:authored.attachmentIds}:{},...submissionKind===`steer`?{steer:true}:{}}}}async function send(payload,options={}){const prepared=prepareMessage(payload,options);try{const result=await conversation.send(prepared,options);if(result?.ok===false)throw vibe64ApiError(result,`Message could not be sent.`);return result}finally{mounted.refresh({reason:`agent-message-accepted`}).catch(()=>{})}}async function continueWorkflow(request){if(!available.value)throw new Error(`This conversation is no longer available.`);const messageId=String(request?.messageId||``).trim();const message=String(request?.input?.message||``);if(!messageId||!message.trim())throw new Error(`Refresh the session before continuing this workflow.`);try{const result=await getHttpWebClient().request(vibe64SessionPath(identity.sessionsApiPath,identity.sessionId,`/agent-message`),{body:{messageId,message,reviewAction:`retry`},method:`POST`});if(result?.ok===false)throw vibe64ApiError(result,`Workflow could not continue.`);return result}finally{mounted.refresh({reason:`agent-message-accepted`}).catch(()=>{})}}async function submitDraft(payload,options={}){const prepared=prepareMessage(payload,options);try{const result=await conversation.submitDraft(prepared,options);if(result?.ok===false)throw vibe64ApiError(result,`Message could not be sent.`);return result}finally{mounted.refresh({reason:`agent-message-accepted`}).catch(()=>{})}}async function interrupt(input=`user_interrupt`){if(!current.value)return false;const control=typeof input===`object`?input:{reason:input};try{const result=control.reason===`cancel-routing`?await getHttpWebClient().request(vibe64SessionPath(identity.sessionsApiPath,identity.sessionId,`/agent-turn/interrupt`),{body:agentTurnControlPayloadFromContext(control),method:`POST`}):await conversation.cancel();if(result?.ok===false)throw vibe64ApiError(result,`Assistant turn could not be interrupted.`);return result}finally{mounted.refresh({reason:`agent-turn-interrupted`}).catch(()=>{})}}return{identity,mounted,conversationLog,access,agentSettings,available,steerable,phase:computed(()=>conversation.snapshot.value?.phase||``),canSubmit:conversation.canSubmit,queueWhileSending:conversation.queueWhileSending,delivery:conversation.delivery,draft:conversation.draft,draftAttachments:conversation.draftAttachments,draftRetry:conversation.draftRetry,draftRetryMatches:conversation.draftRetryMatches,settleDraftRetry:conversation.settleDraftRetry,send,continueWorkflow,submitDraft,interrupt,goalState:conversation.goalState,goalView:conversation.goalView,goalLoadError:conversation.goalLoadError,changeGoal:conversation.changeGoal,refreshGoal:conversation.refreshGoal,sendAgentMessage:input=>send(input,{messageId:input.messageId,submissionKind:input.submissionKind}),cancelMessage:conversation.cancelMessage,inspectDelivery:conversation.inspectDelivery,retain(){const retained=conversation.retain();return{runtime:retained.runtime.application,release:retained.release}}}}function useVibe64ConversationRuntime({sessionId,projectSlug,sessionsApiPath,active=true,summarySession}={}){const viewer=inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const voice=useVibe64Voice();const identity=computed(()=>{const target={sessionId:String(toValue(sessionId)||``),projectSlug:String(toValue(projectSlug)||``),actorKey:toValue(viewer)?.actorKey||``,sessionsApiPath:scopedDevelopmentApiUrl(String(toValue(sessionsApiPath)||``),String(toValue(projectSlug)||``))};return Object.freeze(target)});const{api,...assistantOptions}=vibe64AssistantConversationOptions();const binding=useAssistantConversation({...assistantOptions,conversationId:()=>{const target=identity.value;if(!target.sessionId||!target.actorKey||!target.projectSlug)return``;try{return mainConversationId(target)}catch{return``}},actorKey:()=>identity.value.actorKey,active,goal:true,deferWhileWorking:true,draftStorage:()=>browserDraftStorage(identity.value),api:{...api,sendConversationMessage(id,input,...options){const state=voice?.controller.state;if(state?.binding?.conversationId===id)state.session?.inviteSpeech(input.messageId);return api.sendConversationMessage(id,input,...options)}},application(conversation){const target=mainConversationTarget(conversation.identity.conversationId);return createConversationApplication(conversation,{viewer,summarySession,identity:Object.freeze({...identity.value,...target,actorKey:conversation.identity.actorKey})})}});return computed(()=>binding.runtime.value?.application||null)}var PROJECT_WATCH=`vibe64.sessions.project.watch`;var PROJECT_WATCH_RELEASE=`vibe64.sessions.project.release`;function useVibe64ProjectWatch({projectSlug,sessionId=null}={}){const socket=useRealtimeSocket();const watchId=globalThis.crypto.randomUUID();let disposed=false;let watchedKey=``;function target(){const slug=disposed?``:String(readRefOrGetterValue(projectSlug)||``).trim();if(sessionId===null)return slug?{projectSlug:slug}:null;const session=String(readRefOrGetterValue(sessionId)||``).trim();return slug&&session?{projectSlug:slug,sessionId:session}:null}function sync({reconnected=false}={}){const next=target();const key=next?JSON.stringify(next):``;if(key===watchedKey&&!reconnected)return;if(watchedKey&&!key&&socket.connected)socket.emit(PROJECT_WATCH_RELEASE,{watchId});watchedKey=key;if(next&&socket.connected)socket.emit(PROJECT_WATCH,{watchId,...next})}const watchAfterReconnect=()=>sync({reconnected:true});socket.on(`connect`,watchAfterReconnect);watch(()=>target(),()=>sync(),{immediate:true});onScopeDispose(()=>{disposed=true;socket.off(`connect`,watchAfterReconnect);sync()})}var SESSION_RENEWAL_DRAFT_STORAGE_PREFIX=`vibe64:session-renewal-draft`;function renewalDraftStorageKey(projectSlug=``,sessionId=``,viewerScope=``,renewalId=``){const project=String(projectSlug||``).trim();const session=String(sessionId||``).trim();const viewer=String(viewerScope||``).trim();const renewal=String(renewalId||``).trim();return project&&session&&viewer&&renewal?`${SESSION_RENEWAL_DRAFT_STORAGE_PREFIX}:${encodeURIComponent(viewer)}:${encodeURIComponent(project)}:${encodeURIComponent(session)}:${encodeURIComponent(renewal)}`:``}function useVibe64SessionRenewalDraft({currentOperationKey,draftStorage,phase,projectSlug,renewal,sessionId}){const draftText=ref(``);const hydratedDraftIdentity=ref(``);const hydratedDraftText=ref(``);const hydratedDraftGuard=ref(null);const draftConflictState=ref(null);const draftStorageIdentity=ref(``);const draftStorageHydrated=ref(false);const draftValidationError=ref(``);const viewerScope=ref(``);const draftCharacterCount=computed(()=>sessionRenewalDraftCharacterCount(draftText.value));const draftTooLong=computed(()=>draftCharacterCount.value>SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS);const draftDirty=computed(()=>Boolean(hydratedDraftIdentity.value&&sessionRenewalText(draftText.value)!==sessionRenewalText(hydratedDraftText.value)));const manualDraftIncomplete=computed(()=>Boolean(renewal.value?.manualRequired===true&&String(renewal.value?.draft?.hash||``).trim()&&String(renewal.value?.draft?.hash||``).trim()===String(renewal.value?.manualTemplateHash||``).trim()&&!draftDirty.value));const draftError=computed(()=>{if(draftTooLong.value)return`Handover must be ${SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS.toLocaleString()} characters or fewer.`;if(draftValidationError.value)return draftValidationError.value;return manualDraftIncomplete.value?`Complete every handover section before creating the fresh session.`:``});const draftConflict=computed(()=>draftConflictState.value);function renewalDraftState(candidate=null){const draft=candidate?.draft;const identity=draft?`${Number(draft.revision||0)}:${String(draft.hash||``)}`:``;return{guard:{expectedHash:String(draft?.hash||``),expectedRevision:Number(draft?.revision||0),operationKey:String(candidate?.operationKey||currentOperationKey())},identity,text:identity?sessionRenewalText(draft?.text):``}}function activeDraftStorageKey(){return draftStorageIdentity.value}function removeStoredDraft(){const key=activeDraftStorageKey();if(!key||!draftStorage)return;try{draftStorage.removeItem(key)}catch{}}function persistStoredDraft(){const key=activeDraftStorageKey();if(!key||!draftStorage||!draftStorageHydrated.value)return;if(phase.value!==`review`||!draftDirty.value||!hydratedDraftIdentity.value||!renewal.value?.renewalId){removeStoredDraft();return}try{draftStorage.setItem(key,JSON.stringify({baseGuard:hydratedDraftGuard.value,baseIdentity:hydratedDraftIdentity.value,baseText:hydratedDraftText.value,renewalId:String(renewal.value.renewalId),text:sessionRenewalText(draftText.value)}))}catch{}}function restoreStoredDraft(candidate=null){if(draftStorageHydrated.value)return;draftStorageHydrated.value=true;const key=activeDraftStorageKey();if(!key||!draftStorage||String(candidate?.status||``)!==`review`)return;try{const stored=JSON.parse(String(draftStorage.getItem(key)||`null`));if(!stored||typeof stored!==`object`||Array.isArray(stored)||String(stored.renewalId||``)!==String(candidate?.renewalId||``)||!String(stored.baseIdentity||``)||typeof stored.baseText!==`string`||typeof stored.text!==`string`||!stored.baseGuard||typeof stored.baseGuard!==`object`||Array.isArray(stored.baseGuard)){removeStoredDraft();return}hydratedDraftIdentity.value=String(stored.baseIdentity);hydratedDraftText.value=sessionRenewalText(stored.baseText);hydratedDraftGuard.value={expectedHash:String(stored.baseGuard.expectedHash||``),expectedRevision:Number(stored.baseGuard.expectedRevision||0),operationKey:String(stored.baseGuard.operationKey||``)};draftText.value=sessionRenewalText(stored.text)}catch{removeStoredDraft()}}function resetDraftHydration(){hydratedDraftIdentity.value=``;hydratedDraftText.value=``;hydratedDraftGuard.value=null;draftConflictState.value=null;draftStorageHydrated.value=false;draftValidationError.value=``;draftText.value=``}function enterDraftContext(candidate,nextViewerScope){const nextStorageIdentity=candidate?renewalDraftStorageKey(projectSlug.value,sessionId.value,nextViewerScope,candidate.renewalId):``;if(viewerScope.value===nextViewerScope&&draftStorageIdentity.value===nextStorageIdentity)return false;persistStoredDraft();viewerScope.value=nextViewerScope;draftStorageIdentity.value=nextStorageIdentity;resetDraftHydration();return true}function leaveDraftContext(){persistStoredDraft();viewerScope.value=``;draftStorageIdentity.value=``;resetDraftHydration()}function hydrateDraft(candidate=null,{preserveLocal=false}={}){const next=renewalDraftState(candidate);hydratedDraftIdentity.value=next.identity;hydratedDraftText.value=next.text;hydratedDraftGuard.value=next.guard;if(!preserveLocal)draftText.value=next.text;draftConflictState.value=null;draftValidationError.value=``}function reconcileDraft(candidate=null){const next=renewalDraftState(candidate);if(next.identity===hydratedDraftIdentity.value)return;if(!(String(candidate?.status||``)===`review`)||!hydratedDraftIdentity.value||!draftDirty.value||next.text===sessionRenewalText(draftText.value)){hydrateDraft(candidate);return}draftConflictState.value=next}function draftGuard(){const guard=hydratedDraftGuard.value||renewalDraftState(renewal.value).guard;return{expectedHash:String(guard?.expectedHash||``),expectedRevision:Number(guard?.expectedRevision||0),operationKey:String(guard?.operationKey||currentOperationKey())}}function updateDraftText(value=``){draftText.value=sessionRenewalText(value);draftValidationError.value=``;persistStoredDraft()}function acceptLatestDraft(){const conflict=draftConflictState.value;if(!conflict)return;hydratedDraftIdentity.value=conflict.identity;hydratedDraftText.value=conflict.text;hydratedDraftGuard.value=conflict.guard;draftText.value=conflict.text;draftConflictState.value=null;draftValidationError.value=``;persistStoredDraft()}function keepLocalDraft(){const conflict=draftConflictState.value;if(!conflict)return;hydratedDraftIdentity.value=conflict.identity;hydratedDraftText.value=conflict.text;hydratedDraftGuard.value=conflict.guard;draftConflictState.value=null;persistStoredDraft()}onScopeDispose(persistStoredDraft);return{acceptLatestDraft,draftCharacterCount,draftConflict,draftDirty,draftError,draftGuard,draftText,draftTooLong,draftValidationError,enterDraftContext,keepLocalDraft,leaveDraftContext,manualDraftIncomplete,persistStoredDraft,reconcileDraft,restoreStoredDraft,updateDraftText}}var SESSION_RENEWAL_POLL_INTERVAL_MS=1200;var SESSION_RENEWAL_BACKGROUND_POLL_INTERVAL_MS=5e3;var SESSION_RENEWAL_RETRY_POLL_INTERVAL_MS=6e4;function useVibe64SessionRenewalPolling({hostActive,maintenanceInProgress,maintenanceNeedsRetry,open,projectSlug,reload,renewal,sessionId}){let pollTimer=null;function clearPoll(){if(pollTimer){clearTimeout(pollTimer);pollTimer=null}}function schedulePoll(){clearPoll();if(!hostActive.value||renewal.value?.status!==`running`&&!maintenanceInProgress.value&&!maintenanceNeedsRetry.value)return;const pollIntervalMs=maintenanceNeedsRetry.value?SESSION_RENEWAL_RETRY_POLL_INTERVAL_MS:open.value?SESSION_RENEWAL_POLL_INTERVAL_MS:SESSION_RENEWAL_BACKGROUND_POLL_INTERVAL_MS;pollTimer=setTimeout(async()=>{pollTimer=null;await reload().catch(()=>null);schedulePoll()},pollIntervalMs)}watch([hostActive,open,projectSlug,sessionId,()=>renewal.value?.status,()=>renewal.value?.maintenance?.status],schedulePoll,{immediate:true});onScopeDispose(clearPoll)}function refreshResultError(result=null){if(result&&typeof result===`object`&&(result.isError===true||result.status===`error`))return result.error instanceof Error?result.error:new Error(String(result.error||`Session list could not be refreshed.`));return null}function useVibe64SessionRenewalSuccessor({focusSession,hostActive,open,projectSlug,refreshSessionData,renewal,selectSession,sessionId,triggerFocusTarget}){const handledSuccessorId=ref(``);const successorSelectionPendingId=ref(``);const successorSelectionError=ref(``);function availableSuccessorId(){return renewal.value?.status===`completed`?String(renewal.value?.successor?.sessionId||``).trim():``}async function openSuccessor(){const successorId=availableSuccessorId();if(!successorId||!hostActive.value||handledSuccessorId.value===successorId||successorSelectionPendingId.value)return false;const predecessorSessionId=sessionId.value;successorSelectionPendingId.value=successorId;successorSelectionError.value=``;try{const refreshFailure=refreshResultError(await refreshSessionData({includeList:true,reason:`session-renewal-successor-available`}));if(refreshFailure)throw refreshFailure;if(!hostActive.value||sessionId.value!==predecessorSessionId||availableSuccessorId()!==successorId)return false;await Promise.resolve(selectSession(successorId));handledSuccessorId.value=successorId;triggerFocusTarget.value=null;open.value=false;await Promise.resolve(focusSession(successorId)).catch(()=>null);return true}catch(error){if(hostActive.value&&sessionId.value===predecessorSessionId){successorSelectionError.value=error instanceof Error?error.message:String(error||`The fresh session could not be opened.`);open.value=true}return false}finally{if(successorSelectionPendingId.value===successorId)successorSelectionPendingId.value=``}}watch([projectSlug,sessionId],()=>{handledSuccessorId.value=``;successorSelectionPendingId.value=``;successorSelectionError.value=``});watch([hostActive,()=>availableSuccessorId()],([activeNow,successorId])=>{if(activeNow&&successorId&&handledSuccessorId.value!==successorId)openSuccessor()},{immediate:true});return{openSuccessor,successorSelectionError,successorSelectionPending:computed(()=>Boolean(successorSelectionPendingId.value))}}function renewalRevision(value=null){const revision=Number(value?.revision);return Number.isSafeInteger(revision)&&revision>=1?revision:null}function renewalHandoverValidationMessage(error=null){const response=error?.response;if(!String(error?.code||response?.code||response?.errors?.[0]?.code||``).trim().startsWith(`vibe64_session_renewal_handover_`))return``;return String(error?.message||response?.errors?.[0]?.message||response?.error||`Review the handover and correct the highlighted problem.`).trim()}function keepRenewalHandoverValidationInContext(error=null){if(renewalHandoverValidationMessage(error))throw error}function useVibe64SessionRenewal({active=true,draftStorage=browserTabSessionStorage(),focusSession=async()=>null,refreshSessionData=async()=>null,selectSession=()=>null,selectedSession,selectedSessionId,sessionsApiPath}={}){const projectSlug=useVibe64ProjectSlug();const hostActive=computed(()=>readRefOrGetterValue(active)!==false);const sessionId=computed(()=>String(readRefOrGetterValue(selectedSessionId)||``).trim());const session=computed(()=>readRefOrGetterValue(selectedSession)||null);const apiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``).trim());const renewalPath=computed(()=>sessionId.value&&apiPath.value?vibe64SessionPath(apiPath.value,sessionId.value,`/renewal`):``);const open=ref(false);const triggerFocusTarget=shallowRef(null);const pendingActionState=ref(null);const localOperationKey=ref(``);const snapshot=ref(null);const manualReloading=ref(false);const resource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value&&apiPath.value)),fallbackLoadError:`Session renewal could not be loaded.`,path:renewalPath,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),sessionId.value,`renewal`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false},readMethod:`GET`,realtime:{event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>mountedSessionRealtimeShouldRefresh({payload},sessionId.value)},refreshOnPull:true,requestRecoveryLabel:`Session renewal`});const postCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`POST`,path:String(context?.path||``)}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload(context?.body||{}),fallbackRunError:`Session renewal could not continue.`,messages:{error:`Session renewal could not continue.`},onRunError:keepRenewalHandoverValidationInContext,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.renewal.post`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});const patchCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`PATCH`,path:String(context?.path||``)}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload(context?.body||{}),fallbackRunError:`The handover draft could not be saved.`,messages:{error:`The handover draft could not be saved.`},onRunError:keepRenewalHandoverValidationInContext,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.renewal.patch`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`PATCH`});const renewal=computed(()=>snapshot.value);const advisory=computed(()=>session.value?.renewalAdvisory||{});const advisoryPresentation=computed(()=>sessionRenewalAdvisoryPresentation(advisory.value));const loadError=computed(()=>String(resource.loadError?.value||``));const refreshError=computed(()=>snapshot.value&&loadError.value?loadError.value:``);const refreshing=computed(()=>Boolean(manualReloading.value||snapshot.value&&resource.isLoading?.value));const initialLoading=computed(()=>Boolean(!snapshot.value&&(resource.isInitialLoading?.value||resource.isLoading?.value)));const phase=computed(()=>sessionRenewalPhase(renewal.value,{initialLoading:initialLoading.value,loadError:loadError.value}));const maintenanceNeedsRetry=computed(()=>Boolean(renewal.value?.status===`completed`&&renewal.value?.maintenance?.status===`failed`));const maintenanceInProgress=computed(()=>Boolean(renewal.value?.status===`completed`&&renewal.value?.maintenance?.status===`pending`));const maintenanceError=computed(()=>String(renewal.value?.maintenance?.error?.message||`The fresh session is ready, but Vibe64 could not finish retiring the old session resources.`).trim());const stageLabel=computed(()=>sessionRenewalStageLabel(renewal.value?.stage));const steps=computed(()=>sessionRenewalStageProgress(renewal.value?.stage));const{acceptLatestDraft,draftCharacterCount,draftConflict,draftDirty,draftError,draftGuard,draftText,draftTooLong,draftValidationError,enterDraftContext,keepLocalDraft,leaveDraftContext,manualDraftIncomplete,persistStoredDraft,reconcileDraft,restoreStoredDraft,updateDraftText}=useVibe64SessionRenewalDraft({currentOperationKey,draftStorage,phase,projectSlug,renewal,sessionId});const pendingAction=computed(()=>pendingActionState.value?.sessionId===sessionId.value?String(pendingActionState.value?.name||``):``);const sourceOperationsSuspended=computed(()=>Boolean([`draft`,`confirm`,`retry`].includes(pendingAction.value)||[`running`,`completed`].includes(String(renewal.value?.status||``).trim())||String(renewal.value?.stage||``).trim()===`failure_restoring`));const actionLabel=computed(()=>pendingAction.value?String(pendingActionState.value?.label||``):``);const busy=computed(()=>Boolean(pendingAction.value));const canConfirm=computed(()=>Boolean(phase.value===`review`&&sessionRenewalText(draftText.value).trim()&&!draftTooLong.value&&!draftValidationError.value&&!manualDraftIncomplete.value&&!draftConflict.value&&!busy.value));const canSaveDraft=computed(()=>Boolean(phase.value===`review`&&draftDirty.value&&!draftTooLong.value&&!draftValidationError.value&&!draftConflict.value&&!busy.value));const visible=computed(()=>{const status=String(renewal.value?.status||``).trim();const durableRenewalNeedsAccess=[`completed`,`failed`,`review`,`running`].includes(status);return Boolean(sessionId.value&&(durableRenewalNeedsAccess||session.value?.archived!==true&&session.value?.status!==`archived`))});function prepareDraftContext(candidate=null,nextViewerScope=``){const normalizedViewerScope=String(nextViewerScope||``).trim();if(!normalizedViewerScope)return false;if(enterDraftContext(candidate,normalizedViewerScope)){snapshot.value=null;localOperationKey.value=``}return true}function acceptRenewal(candidate=null,{responseViewerScope=``}={}){if(candidate===null||candidate===void 0)return prepareDraftContext(null,responseViewerScope);if(typeof candidate!==`object`||Array.isArray(candidate)||String(candidate.sessionId||``).trim()!==sessionId.value)return false;const candidateRevision=renewalRevision(candidate);if(candidateRevision===null)return false;if(!prepareDraftContext(candidate,responseViewerScope))return false;const currentRevision=renewalRevision(snapshot.value);if(currentRevision!==null&&candidateRevision<=currentRevision)return candidateRevision===currentRevision;restoreStoredDraft(candidate);reconcileDraft(candidate);snapshot.value=candidate;persistStoredDraft();return true}function currentOperationKey(){return String(renewal.value?.operationKey||localOperationKey.value||``).trim()}function createOperationKey(){const randomId=globalThis.crypto?.randomUUID?.()||``;localOperationKey.value=sessionRenewalOperationKey(sessionId.value,{randomId});return localOperationKey.value}async function reload(){if(manualReloading.value)return renewal.value;manualReloading.value=true;try{await resource.reload?.();return renewal.value}finally{manualReloading.value=false}}let nextActionId=0;async function runAction(name,label,operation){const actionSessionId=sessionId.value;if(!actionSessionId||busy.value)return null;const actionId=++nextActionId;pendingActionState.value={actionId,label,name,sessionId:actionSessionId};try{let response;try{response=await operation()}catch(error){if(sessionId.value!==actionSessionId)return null;throw error}if(sessionId.value!==actionSessionId)return null;if(!response||response.ok===false)throw vibe64ApiError(response,`Session renewal could not continue.`);if(!acceptRenewal(response.renewal||null,{responseViewerScope:response.viewerScope}))return null;reload().catch(()=>null);return response.renewal||null}finally{if(pendingActionState.value?.actionId===actionId)pendingActionState.value=null}}async function requestDraft(){if(busy.value)return null;const operationKey=createOperationKey();return runAction(`draft`,`Starting…`,()=>postCommand.run({body:{operationKey},path:`${renewalPath.value}/draft`}))}async function saveDraft({pendingActionName=`save`}={}){if(!canSaveDraft.value)return renewal.value;try{return await runAction(pendingActionName,`Saving…`,()=>patchCommand.run({body:{...draftGuard(),draft:sessionRenewalText(draftText.value)},path:`${renewalPath.value}/draft`}))}catch(error){const message=renewalHandoverValidationMessage(error);if(!message)throw error;draftValidationError.value=message;return null}}async function confirm(assistantSelection=null){if(!canConfirm.value)return null;if(draftDirty.value){if(!await saveDraft({pendingActionName:`confirm`}))return null}try{return await runAction(`confirm`,`Renewing…`,()=>postCommand.run({body:{...draftGuard(),...assistantSelection?{assistantSelection}:{}},path:`${renewalPath.value}/confirm`}))}catch(error){const message=renewalHandoverValidationMessage(error);if(!message)throw error;draftValidationError.value=message;return null}}async function cancel(){const reviewing=phase.value===`review`;if(!reviewing&&phase.value!==`failed`||reviewing&&draftConflict.value||busy.value)return null;const result=await runAction(`cancel`,`Cancelling…`,()=>postCommand.run({body:reviewing?draftGuard():{operationKey:currentOperationKey()},path:`${renewalPath.value}/cancel`}));if(result?.status===`cancelled`)open.value=false;return result}async function retry(){if(phase.value!==`failed`&&!maintenanceNeedsRetry.value||busy.value)return null;return runAction(`retry`,maintenanceNeedsRetry.value?`Retrying cleanup…`:`Retrying…`,()=>postCommand.run({body:{operationKey:currentOperationKey()},path:`${renewalPath.value}/retry`}))}function request({returnFocusTarget=null}={}){if(!visible.value||!hostActive.value)return;const target=returnFocusTarget?.$el||returnFocusTarget;triggerFocusTarget.value=typeof target?.focus===`function`?target:null;open.value=true;reload().catch(()=>null)}function close(){persistStoredDraft();open.value=false}function restoreTriggerFocus(){if(open.value)return false;const target=triggerFocusTarget.value;triggerFocusTarget.value=null;if(target?.isConnected!==true||typeof target.focus!==`function`)return false;target.focus({preventScroll:true});return true}watch([projectSlug,sessionId],()=>{leaveDraftContext();snapshot.value=null;localOperationKey.value=``;triggerFocusTarget.value=null;open.value=false},{immediate:true});watch(()=>resource.data?.value||null,response=>{if(!response||response.ok===false)return;acceptRenewal(response.renewal||null,{responseViewerScope:response.viewerScope})},{immediate:true});watch(hostActive,activeNow=>{if(!activeNow){triggerFocusTarget.value=null;open.value=false}},{immediate:true});useVibe64SessionRenewalPolling({hostActive,maintenanceInProgress,maintenanceNeedsRetry,open,projectSlug,reload,renewal,sessionId});const{openSuccessor,successorSelectionError,successorSelectionPending}=useVibe64SessionRenewalSuccessor({focusSession,hostActive,open,projectSlug,refreshSessionData,renewal,selectSession,sessionId,triggerFocusTarget});const actionPresentation=computed(()=>{const status=String(renewal.value?.status||``).trim();if(status===`review`)return{attention:true,color:`primary`,label:`Review handover`,reason:`Review the handover before creating the fresh session.`};if(status===`running`)return{attention:true,color:`primary`,label:`Renewal in progress`,reason:stageLabel.value};if(status===`failed`)return{attention:true,color:`error`,label:`Renewal needs attention`,reason:String(renewal.value?.error?.message||`Open session renewal to continue safely.`).trim()};if(status===`completed`){if(maintenanceNeedsRetry.value)return{attention:true,color:`warning`,label:`Cleanup needs retry`,reason:maintenanceError.value};return{attention:true,color:successorSelectionError.value?`error`:`success`,label:successorSelectionError.value?`Open fresh session`:`Opening fresh session`,reason:successorSelectionError.value||`The fresh session is ready.`}}return advisoryPresentation.value});onScopeDispose(()=>{triggerFocusTarget.value=null});return{actionPresentation,actionLabel,acceptLatestDraft,advisory,advisoryPresentation,busy,canConfirm,canSaveDraft,cancel,close,confirm,draftCharacterCount,draftConflict,draftDirty,draftError,draftText,draftTooLong,initialLoading,keepLocalDraft,loadError,maintenanceError,maintenanceInProgress,maintenanceNeedsRetry,maxHandoverCharacters:SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS,open,openSuccessor,pendingAction,phase,refreshError,refreshing,reload,renewal,request,requestDraft,restoreTriggerFocus,retry,setDraftText:updateDraftText,saveDraft,sourceOperationsSuspended,stageLabel,steps,successorSelectionError,successorSelectionPending,visible}}var SESSION_WORK_TASK_IDS=[`codex_turn_checkpoint`,`save-work`,`update-session`];async function focusRuntimeSessionChat(sessionId=``,root=globalThis.document){const normalizedId=String(sessionId||``).trim();if(!normalizedId||!root?.querySelectorAll)return false;await nextTick();await nextTick();const target=[...root.querySelectorAll(`[data-vibe64-session-runtime-id]`)].find(element=>element.getAttribute(`data-vibe64-session-runtime-id`)===normalizedId)?.querySelector?.(`.studio-autopilot__chat-panel`);target?.focus?.({preventScroll:true});return Boolean(target)}function proxySessionDialogs(dialogs={}){return Object.fromEntries(Object.entries(dialogs).map(([name,dialog])=>[name,proxyRefs(dialog)]))}function runtimeHostToolbarSessions({activeAgentThinking=false,fallbackSessions=[],selectedSession=null,selectedSessionId=``,sessions=null}={}){const currentId=String(selectedSessionId||``).trim();const navigationSessions=sessions??fallbackSessions;return(Array.isArray(navigationSessions)?navigationSessions:[]).map(session=>{const sessionId=String(session?.sessionId||``).trim();if(!sessionId)return session;const source=sessionId===currentId&&selectedSession?.sessionId===sessionId?selectedSession:session;const agentThinking=Boolean((sessionId===currentId?activeAgentThinking:session.agentThinking)||sessionRecordHasActiveAgentWork(source));return Boolean(session?.agentThinking)===agentThinking?session:{...session,agentThinking}})}function runtimeHostAgentWorking({selectedSession=null,transientAgentThinking=false}={}){return Boolean(transientAgentThinking||sessionRecordHasActiveAgentWork(selectedSession))}var ACTIVE_WORK_TASK_STATUSES=[`queued`,`running`,`starting`];function workTaskActive(task={}){return ACTIVE_WORK_TASK_STATUSES.includes(String(task?.status||``).trim().toLowerCase())}function runtimeHostWorkInspectionRevision(session={}){return runtimeHostWorkTaskRevision(session,{progress:false})}function runtimeHostWorkTaskRevision(session={},{progress=true}={}){return(Array.isArray(session?.backgroundTasks)?session.backgroundTasks:[]).filter(task=>SESSION_WORK_TASK_IDS.includes(String(task?.id||``))).map(task=>{if(!progress&&task.id!==`codex_turn_checkpoint`&&workTaskActive(task))return[task.id,String(task.status||``).trim().toLowerCase(),String(task.operationId||``)].join(`:`);const events=Array.isArray(task?.events)?task.events:[];const latestEvent=events.at(-1)||{};return[String(task?.id||``),String(task?.status||``),String(task?.updatedAt||``),String(events.length),String(latestEvent.at||``),String(latestEvent.kind||``),String(latestEvent.status||``)].join(`:`)}).sort().join(`|`)}function runtimeHostWorkTaskState(session={}){const tasks=Array.isArray(session?.backgroundTasks)?session.backgroundTasks:[];const operation=tasks.find(task=>String(task?.id||``)===`save-work`)||null;const updateOperation=tasks.find(task=>String(task?.id||``)===`update-session`)||null;const activeOperation=[operation,updateOperation].find(workTaskActive);return{activeOperation:activeOperation?{kind:activeOperation===operation?`save`:`update`,operationId:String(activeOperation.operationId||``).trim()}:null,operation,updateOperation}}function useVibe64SessionRuntimeHost(props,emit){const selectedSessionId=computed(()=>String(props.sessionId||``).trim());const sessionsApiPath=props.sessionData.sessionsApiPath;const runtimeProjectContext=computed(()=>props.projectContext||{});const selectedListSession=computed(()=>{return(unref(props.sessionData.sessions)||[]).find(session=>session.sessionId===selectedSessionId.value)||null});const conversationRuntime=useVibe64ConversationRuntime({active:computed(()=>Boolean(props.active)),projectSlug:computed(()=>runtimeProjectContext.value.slug||``),sessionId:selectedSessionId,sessionsApiPath,summarySession:selectedListSession});useVibe64ProjectWatch({projectSlug:computed(()=>runtimeProjectContext.value.slug||``),sessionId:selectedSessionId});const mounted={session:computed(()=>conversationRuntime.value?.mounted.session.value||null),detailState:computed(()=>conversationRuntime.value?.mounted.detailState.value||{}),agentConnectionError:computed(()=>conversationRuntime.value?.mounted.agentConnectionError.value||``),agentConnectionStatus:computed(()=>conversationRuntime.value?.mounted.agentConnectionStatus.value||`initializing`),refresh:options=>conversationRuntime.value?.mounted.refresh(options),retryAgentConnection:(...args)=>conversationRuntime.value?.mounted.retryAgentConnection(...args)};const selectedSession=mounted.session;const selectedSessionArchived=computed(()=>isArchivedVibe64Session(selectedSession.value||{}));const selectedSessionTitle=computed(()=>vibe64SessionDisplayTitle(selectedSession.value||{})||`Session ${props.sessionData.shortSessionId(selectedSessionId.value)}`);const autopilotAgentThinking=ref(false);const activeAgentWorking=computed(()=>runtimeHostAgentWorking({selectedSession:selectedSession.value,transientAgentThinking:autopilotAgentThinking.value}));const workState=ref({checkedAt:``,error:``,loading:true,operation:null,unsaved:null});useRealtimeEvent({event:VIBE64_PROJECT_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===props.projectContext?.slug&&typeof payload.repositoryWorkflow?.requirePullRequest===`boolean`,onEvent:({payload})=>{workState.value={...workState.value,publicationRequiresPullRequest:workState.value.destination?.mode===`github`&&payload.repositoryWorkflow.requirePullRequest}}});let workStateActive=true;const workInspector=props.sessionWorkInspector;function applyInspectedWork(sessionId,state){if(state&&workStateActive&&!sourceOperationsSuspended.value&&selectedSessionId.value===sessionId&&!selectedSessionArchived.value)workState.value={...state}}watch(selectedSessionId,(sessionId,_previous,onCleanup)=>{if(sessionId)onCleanup(workInspector.subscribe(sessionId,state=>applyInspectedWork(sessionId,state)))},{flush:`sync`,immediate:true});async function inspectWorkState({settle=false}={}){const sessionId=selectedSessionId.value;if(sourceOperationsSuspended.value)return;if(!sessionId||selectedSessionArchived.value){workState.value={checkedAt:new Date().toISOString(),error:``,loading:false,operation:null,unsaved:null};return}if(workState.value.unsaved===null||workState.value.unsaved===void 0)workState.value={...workState.value,loading:true};await workInspector.inspect(sessionId,{settle})}async function refreshWorkState(observedWork=null){if(sourceOperationsSuspended.value)return workState.value;if(observedWork&&typeof observedWork===`object`&&observedWork.ok!==false&&String(observedWork.sessionId||``).trim()===selectedSessionId.value){workState.value={...observedWork,checkedAt:new Date().toISOString(),error:``,loading:false};return workState.value}await inspectWorkState();return workState.value}async function refreshSessionData(options={}){if(!(options?.includeList===true))return mounted.refresh(options);return Promise.allSettled([mounted.refresh(options),props.sessionData.refreshSessionData(options)])}const renewalModel=useVibe64SessionRenewal({active:computed(()=>Boolean(props.active)),focusSession:focusRuntimeSessionChat,refreshSessionData:props.sessionData.refreshSessionData,selectSession:props.sessionData.selectSessionId,selectedSession,selectedSessionId,sessionsApiPath});const sourceOperationsSuspended=renewalModel.sourceOperationsSuspended;const dialogs=proxySessionDialogs({archive:props.sessionData.archive,renewal:renewalModel});const conversationLog=computed(()=>conversationRuntime.value?.conversationLog||null);const selection=proxyRefs({isArchived:selectedSessionArchived,selectedSession,selectedSessionDetailState:mounted.detailState,selectedSessionId,selectedSessionTitle,statusColor:vibe64SessionStatusColor,statusLabel:vibe64SessionStatusLabel});const autopilotSessionToolbar=proxyRefs({sessionsApiPath,refreshSessionData,projectContext:runtimeProjectContext,refreshRepositoryState:props.refreshRepositoryState,canCreateSession:props.sessionData.canCreateSession,createSession:props.sessionData.createSession,createSessionCommand:props.sessionData.createSessionCommand,createSessionRunning:props.sessionData.createSessionRunning,createSessionVisible:props.sessionData.createSessionVisible,createSessionTitle:props.sessionData.createSessionTitle,selectSession:props.sessionData.selectSessionId,sessions:computed(()=>runtimeHostToolbarSessions({activeAgentThinking:activeAgentWorking.value,fallbackSessions:unref(props.sessionData.sessions),selectedSession:selectedSession.value,selectedSessionId:selectedSessionId.value,sessions:props.toolbarSessions}))});const pageError=computed(()=>String(mounted.detailState.value?.error||props.sessionData.sessionList?.loadError||``));const guardedPage=computed(()=>({busy:Boolean(mounted.detailState.value?.loading),copyText:async(value=``)=>typeof navigator===`undefined`?false:navigator.clipboard?.writeText?.(String(value||``)),error:pageError.value,launchBusy:Boolean(mounted.detailState.value?.loading)}));const interruptFeedback=useUiFeedback({dedupeWindowMs:0,errorChannel:`banner`,source:`vibe64.sessions.agent-turn.interrupt.feedback`});watch([selectedSessionId,()=>props.active,()=>selectedSession.value?.agentSession?.turn?.id,()=>selectedSession.value?.agentSession?.turn?.active],()=>interruptFeedback.success());async function interruptAgentTurn(input=`user_interrupt`){const sessionId=selectedSessionId.value;if(!sessionId)return false;const control=input&&typeof input===`object`&&!Array.isArray(input)?input:{reason:String(input||`user_interrupt`)};const turnId=selectedSession.value?.agentSession?.turn?.id;interruptFeedback.success();try{const result=await conversationRuntime.value.interrupt(control);if(result?.ok===false)throw vibe64ApiError(result,`Assistant turn could not be interrupted.`);refreshSessionData({reason:`agent-turn-interrupted`}).catch(()=>null);return result?.ok!==false}catch(error){const turn=selectedSession.value?.agentSession?.turn;if(props.active&&selectedSessionId.value===sessionId&&turn?.active&&turn.id===turnId)interruptFeedback.error(error,`Assistant turn could not be interrupted.`);refreshSessionData({reason:`agent-turn-interrupt-failed`}).catch(()=>null);return false}}function sendAgentMessage(input={}){return conversationRuntime.value?.sendAgentMessage(input)??false}async function retryWorkspaceSetup(){const sessionId=selectedSessionId.value;if(!sessionId)return false;const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,`/workspace-setup/retry`),{body:{},method:`POST`});if(result?.ok===false)throw new Error(result.error||`Workspace preparation could not be started.`);await refreshSessionData({reason:`workspace-setup-retry`});return true}async function saveSessionWork({destinationReview,connectedReview}={}){const sessionId=selectedSessionId.value;if(!sessionId)return false;const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,`/save`),{body:{...vibe64RealtimeOriginPayload(),destinationReview,...connectedReview!==void 0?{connectedReview}:{}},method:`POST`});await Promise.allSettled([refreshSessionData({reason:`session-work-save`}),refreshWorkState()]);if(result?.ok===false&&result?.code===`vibe64_session_save_update_required`)return result;if(result?.ok===false)throw vibe64ApiError(result,`Session work could not be saved.`);return result}async function updateSessionWork({reviewedConflictId=``,historyReview=void 0,requestId=``}={}){const sessionId=selectedSessionId.value;if(!sessionId)return false;let result;try{result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,`/updates/apply`),{body:vibe64RealtimeOriginPayload({reviewedConflictId,...historyReview?{historyReview}:{},...requestId?{requestId}:{}}),method:`POST`})}finally{await Promise.allSettled([refreshSessionData({reason:`session-work-update`}),refreshWorkState()])}if(result?.ok===false)throw vibe64ApiError(result,`This session could not be updated.`);return result}async function cancelAgentMessage(messageId=``){return conversationRuntime.value?.cancelMessage(String(messageId||``).trim())??false}function setAutopilotBusy(busy=false){autopilotAgentThinking.value=Boolean(busy)}function emitBusy(){emit(`busy-change`,{agentThinking:activeAgentWorking.value,busy:guardedPage.value.busy,sessionId:selectedSessionId.value})}function emitProjectAttention(){emit(`project-attention`)}function emitChatAttention(){emit(`chat-attention`)}const agentTerminal={sessionUpdate:()=>refreshSessionData()};const selectedAgentTerminalId=computed(()=>String(selectedSession.value?.agentSession?.terminal?.id||selectedSession.value?.agentSession?.terminal?.terminalSessionId||``));onMounted(()=>{emitBusy();emit(`page-error-change`,{error:pageError.value,sessionId:selectedSessionId.value})});watch([activeAgentWorking,()=>guardedPage.value.busy],emitBusy,{flush:`post`});watch(selectedSessionId,()=>{autopilotAgentThinking.value=false},{flush:`sync`});watch(pageError,error=>{emit(`page-error-change`,{error,sessionId:selectedSessionId.value})},{flush:`post`});watch(workState,state=>{emit(`work-state-change`,{sessionId:selectedSessionId.value,workState:{...state}})},{deep:true,flush:`post`,immediate:true});watch(sourceOperationsSuspended,(suspended,wasSuspended)=>{emit(`source-operations-suspension-change`,{sessionId:selectedSessionId.value,suspended:suspended===true});if(wasSuspended===true&&suspended!==true)refreshWorkState()},{flush:`sync`,immediate:true});watch(()=>{return`${selectedSessionId.value}:${selectedSessionArchived.value}:${runtimeHostWorkTaskRevision(selectedSession.value)}`},()=>{const taskState=runtimeHostWorkTaskState(selectedSession.value);if(taskState.operation||taskState.updateOperation)workState.value={...workState.value,...taskState,checkedAt:new Date().toISOString(),error:``,loading:false}},{flush:`post`,immediate:true});let workInspectionRevisionSeen=false;watch(()=>{return`${selectedSessionId.value}:${selectedSessionArchived.value}:${runtimeHostWorkInspectionRevision(selectedSession.value)}`},()=>{inspectWorkState({settle:workInspectionRevisionSeen});workInspectionRevisionSeen=true},{flush:`post`,immediate:true});onBeforeUnmount(()=>{interruptFeedback.success();workStateActive=false});return{agentConnectionError:mounted.agentConnectionError,agentConnectionStatus:mounted.agentConnectionStatus,retryAgentConnection:mounted.retryAgentConnection,agentTerminal,autopilotModeActive:computed(()=>Boolean(props.active)),autopilotSessionToolbar,cancelAgentMessage,codexTerminalCanStart:computed(()=>Boolean(props.active&&selectedSession.value?.sessionId===selectedSessionId.value)),conversationLog,conversationRuntime,dialogs,emitChatAttention,emitProjectAttention,guardedPage,interruptAgentTurn,refreshSessionData,refreshWorkState,retryWorkspaceSetup,runtimeProjectContext,sessionRenewal:dialogs.renewal,saveSessionWork,sessionsApiPath,selectedAgentTerminalId,selection,sendAgentMessage,setAutopilotBusy,updateSessionWork,workState}}var _hoisted_1$11=[`data-vibe64-agent-turn-active`,`data-vibe64-session-runtime-id`];var _sfc_main$12={__name:`Vibe64SessionRuntimeHost`,props:{refreshRepositoryState:{default:null,type:Function},createSessionTeleportTarget:{default:``,type:String},active:{default:false,type:Boolean},chatCollapsed:{default:false,type:Boolean},githubActorTeleportTarget:{default:``,type:String},sessionData:{required:true,type:Object},sessionId:{required:true,type:String},sessionWorkInspector:{required:true,type:Object},toolbarSessions:{default:null,type:Array},projectPane:{default:`preview`,type:String},previewToolbarTeleportTarget:{default:``,type:String},usageRecordingTeleportTarget:{default:``,type:String},promptHintPolicy:{default:()=>({enabled:true,ready:false}),type:Object},projectContext:{default:()=>({}),type:Object}},emits:[`busy-change`,`chat-attention`,`execution-attention`,`page-error-change`,`source-operations-suspension-change`,`work-state-change`,`project-attention`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{agentConnectionError,agentConnectionStatus,retryAgentConnection,autopilotModeActive,autopilotSessionToolbar,agentTerminal,cancelAgentMessage,codexTerminalCanStart,conversationLog,conversationRuntime,dialogs,emitChatAttention,emitProjectAttention,guardedPage,interruptAgentTurn,refreshSessionData,refreshWorkState,retryWorkspaceSetup,runtimeProjectContext,saveSessionWork,sessionsApiPath,sessionRenewal,selectedAgentTerminalId,selection,setAutopilotBusy,sendAgentMessage,updateSessionWork,workState}=useVibe64SessionRuntimeHost(props,emit);const selectedAssistantTerminal=computed(()=>findVibe64AgentProvider(selection.selectedSession?.assistantSelection?.engineId)?.terminal||``);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`studio-ai-session-runtime`,"data-vibe64-agent-turn-active":unref(selection).selectedSession?.agentSession?.turn?.active===true?`true`:`false`,"data-vibe64-session-runtime-id":props.sessionId},[createVNode(Vibe64AutopilotView_default,{active:unref(autopilotModeActive),"agent-connection-error":unref(agentConnectionError),"agent-connection-status":unref(agentConnectionStatus),"retry-agent-connection":unref(retryAgentConnection),"chat-collapsed":props.chatCollapsed,"create-session-teleport-target":props.createSessionTeleportTarget,"cancel-agent-message":unref(cancelAgentMessage),"conversation-log":unref(conversationLog),"conversation-runtime":unref(conversationRuntime),"github-actor-teleport-target":props.githubActorTeleportTarget,"interrupt-agent-turn":unref(interruptAgentTurn),page:unref(guardedPage),"project-context":unref(runtimeProjectContext),"preview-toolbar-teleport-target":props.previewToolbarTeleportTarget,"usage-recording-teleport-target":props.usageRecordingTeleportTarget,"prompt-hint-policy":props.promptHintPolicy,"refresh-session-data":unref(refreshSessionData),"refresh-session-work":unref(refreshWorkState),"retry-workspace-setup":unref(retryWorkspaceSetup),"save-session-work":unref(saveSessionWork),"session-archive":unref(dialogs).archive,"session-renewal":unref(sessionRenewal),session:unref(selection).selectedSession,"sessions-api-path":unref(sessionsApiPath),"session-selection-archived":unref(selection).isArchived,"session-toolbar":unref(autopilotSessionToolbar),"send-agent-message":unref(sendAgentMessage),"update-session-work":unref(updateSessionWork),"work-state":unref(workState),"project-pane":props.projectPane,onBusyChange:unref(setAutopilotBusy),onChatAttention:unref(emitChatAttention),onExecutionAttention:_cache[0]||(_cache[0]=$event=>emit(`execution-attention`,$event)),onProjectAttention:unref(emitProjectAttention)},{"ai-terminal":withCtx(({active:tabActive})=>[selectedAssistantTerminal.value===`codex`?(openBlock(),createBlock(Vibe64CodexSession_default,{key:0,class:`studio-ai-sessions__tab-terminal`,"allow-start":tabActive&&unref(codexTerminalCanStart),"display-mode":tabActive?`full`:`headless`,"listen-when-hidden":!tabActive&&Boolean(unref(selectedAgentTerminalId)),"read-only":!tabActive,scope:`session`,session:unref(selection).selectedSession,terminal:null,visible:tabActive,onSessionUpdate:unref(agentTerminal).sessionUpdate},null,8,[`allow-start`,`display-mode`,`listen-when-hidden`,`read-only`,`session`,`visible`,`onSessionUpdate`])):selectedAssistantTerminal.value===`native`?(openBlock(),createBlock(Vibe64NativeAgentSession_default,{key:1,class:`studio-ai-sessions__tab-terminal`,"allow-start":tabActive,"display-mode":tabActive?`full`:`headless`,"listen-when-hidden":!tabActive&&Boolean(unref(selectedAgentTerminalId)),"read-only":!tabActive,session:unref(selection).selectedSession,visible:tabActive,onSessionUpdate:unref(agentTerminal).sessionUpdate},null,8,[`allow-start`,`display-mode`,`listen-when-hidden`,`read-only`,`session`,`visible`,`onSessionUpdate`])):createCommentVNode(``,true)]),dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:{...dashboardSlotProps?.dashboardContext||{},sessions:props.toolbarSessions??unref(autopilotSessionToolbar).sessions}},void 0,true)]),_:3},8,[`active`,`agent-connection-error`,`agent-connection-status`,`retry-agent-connection`,`chat-collapsed`,`create-session-teleport-target`,`cancel-agent-message`,`conversation-log`,`conversation-runtime`,`github-actor-teleport-target`,`interrupt-agent-turn`,`page`,`project-context`,`preview-toolbar-teleport-target`,`usage-recording-teleport-target`,`prompt-hint-policy`,`refresh-session-data`,`refresh-session-work`,`retry-workspace-setup`,`save-session-work`,`session-archive`,`session-renewal`,`session`,`sessions-api-path`,`session-selection-archived`,`session-toolbar`,`send-agent-message`,`update-session-work`,`work-state`,`project-pane`,`onBusyChange`,`onChatAttention`,`onProjectAttention`]),createVNode(Vibe64SessionRenewalDialog_default,{renewal:unref(dialogs).renewal},null,8,[`renewal`])],8,_hoisted_1$11)}}};var Vibe64SessionRuntimeHost_default=_plugin_vue_export_helper_default(_sfc_main$12,[[`__scopeId`,`data-v-7eb1a297`]]);var _hoisted_1$10={class:`studio-ai-sessions__empty-main`,"aria-label":`Session chat`};var _hoisted_2$7={class:`studio-ai-sessions__empty-session-header`};var _hoisted_3$7={class:`studio-ai-sessions__empty-chat-body`};var _hoisted_4$4={key:0,class:`studio-ai-sessions__empty-hint`,role:`status`};var _hoisted_5$3={class:`studio-ai-sessions__empty-project-panel`,"aria-label":`Project`};var _hoisted_6$2={key:0,class:`studio-ai-sessions__dashboard-empty-pane`};var _hoisted_7$2={key:1,class:`studio-ai-sessions__preview-empty-pane`,"data-vibe64-guide-pane":`preview`};var _hoisted_8$2={class:`studio-ai-sessions__preview-empty-content`};var _hoisted_9$1={key:0,class:`studio-ai-sessions__preview-empty-title`};var _hoisted_10$1={key:1,class:`studio-ai-sessions__preview-empty-detail`};var _sfc_main$11={__name:`Vibe64EmptySessionLayout`,props:{chatCollapsed:Boolean,dashboard:Boolean,lesson:Boolean,hint:{default:``,type:String},previewTitle:{default:``,type:String},previewDetail:{default:``,type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`studio-ai-sessions__empty-layout`,{"studio-ai-sessions__empty-layout--chat-collapsed":__props.chatCollapsed,"studio-ai-sessions__empty-layout--dashboard":__props.dashboard}])},[createBaseVNode(`section`,_hoisted_1$10,[createBaseVNode(`div`,_hoisted_2$7,[renderSlot(_ctx.$slots,`header`,{},void 0,true)]),renderSlot(_ctx.$slots,`chat`,{},void 0,true),createBaseVNode(`div`,_hoisted_3$7,[__props.hint?(openBlock(),createElementBlock(`div`,_hoisted_4$4,toDisplayString(__props.hint),1)):createCommentVNode(``,true)]),_cache[0]||(_cache[0]=createBaseVNode(`div`,{class:`studio-ai-sessions__empty-thinking studio-ai-sessions__empty-thinking--empty`,"aria-hidden":`true`},[createBaseVNode(`span`,{class:`studio-ai-sessions__empty-thinking-mark`}),createBaseVNode(`span`,null,`Thinking...`)],-1)),_cache[1]||(_cache[1]=createBaseVNode(`div`,{class:`studio-ai-sessions__empty-runtime-status`},null,-1)),_cache[2]||(_cache[2]=createBaseVNode(`div`,{class:`studio-ai-sessions__empty-composer`},null,-1))]),createBaseVNode(`section`,_hoisted_5$3,[__props.dashboard?(openBlock(),createElementBlock(`div`,_hoisted_6$2,[renderSlot(_ctx.$slots,`dashboard`,{},void 0,true)])):(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createBaseVNode(`div`,_hoisted_8$2,[__props.previewTitle?(openBlock(),createElementBlock(`p`,_hoisted_9$1,toDisplayString(__props.previewTitle),1)):createCommentVNode(``,true),__props.previewDetail?(openBlock(),createElementBlock(`p`,_hoisted_10$1,toDisplayString(__props.previewDetail),1)):createCommentVNode(``,true),renderSlot(_ctx.$slots,`preview`,{},void 0,true)])])),__props.lesson?renderSlot(_ctx.$slots,`lesson`,{},void 0,true,2):createCommentVNode(``,true)])],2)}}};var Vibe64EmptySessionLayout_default=_plugin_vue_export_helper_default(_sfc_main$11,[[`__scopeId`,`data-v-7724f9c1`]]);var VIBE64_CHAT_COLUMN_STORAGE_KEY=`vibe64:studio-chat-column-width`;var VIBE64_CHAT_COLUMN_DEFAULT_WIDTH_PX=512;var VIBE64_CHAT_COLUMN_MIN_WIDTH_PX=320;var VIBE64_CHAT_COLUMN_MAX_WIDTH_PX=720;var VIBE64_PROJECT_COLUMN_MIN_WIDTH_PX=480;var VIBE64_PROJECT_COLUMN_GAP_PX=12;var VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX=16;var staticChatColumnBounds=Object.freeze({max:720,min:320});function vibe64ChatColumnBounds(containerWidth=0){const width=Number(containerWidth);if(!Number.isFinite(width)||width<=0)return{...staticChatColumnBounds};return{max:Math.max(320,Math.min(720,Math.floor(width-VIBE64_PROJECT_COLUMN_MIN_WIDTH_PX-VIBE64_PROJECT_COLUMN_GAP_PX))),min:320}}function constrainVibe64ChatColumnWidth(value,bounds=staticChatColumnBounds,fallback=512){const min=Number.isFinite(bounds?.min)?bounds.min:320;const max=Math.max(min,Number.isFinite(bounds?.max)?bounds.max:720);return Math.round(Math.min(max,Math.max(min,Number.isFinite(value)?value:fallback)))}function vibe64ChatColumnWidthForKey(key=``,currentWidth=0,bounds={}){if(key===`Home`)return constrainVibe64ChatColumnWidth(bounds.min,bounds);if(key===`End`)return constrainVibe64ChatColumnWidth(bounds.max,bounds);if(key===`ArrowLeft`)return constrainVibe64ChatColumnWidth(currentWidth-VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX,bounds);if(key===`ArrowRight`)return constrainVibe64ChatColumnWidth(currentWidth+VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX,bounds);return null}function useVibe64ChatColumnResize(){const separator=ref(null);const resizing=ref(false);const preferredWidth=ref(constrainVibe64ChatColumnWidth(readLocalStorageJson(VIBE64_CHAT_COLUMN_STORAGE_KEY,null),staticChatColumnBounds));const bounds=ref({...staticChatColumnBounds});const width=computed(()=>constrainVibe64ChatColumnWidth(preferredWidth.value,bounds.value));let drag=null;let pendingLayoutWidth=null;let resizeFrame=null;let resizeObserver=null;let windowResizeFallbackActive=false;function splitPane(){return separator.value?.parentElement||null}function syncBounds(){const containerWidth=splitPane()?.clientWidth||0;if(containerWidth>0)bounds.value=vibe64ChatColumnBounds(containerWidth)}function save(){writeLocalStorageJson(VIBE64_CHAT_COLUMN_STORAGE_KEY,width.value)}function heading(){return typeof document===`undefined`?null:document.querySelector(`.studio-home-shell-heading`)}function layoutTargets(){return[splitPane(),heading()].filter(Boolean)}function applyLayoutWidth(value){for(const target of layoutTargets())target.style.setProperty(`--studio-home-chat-column-width`,`${value}px`);const pane=splitPane();const bar=heading();if(pane&&bar){const edge=pane.getBoundingClientRect().left+value-bar.getBoundingClientRect().left;bar.style.setProperty(`--studio-home-chat-column-edge`,`${Math.round(edge)}px`)}separator.value?.setAttribute?.(`aria-valuenow`,String(value))}function flushLayoutWidth(){resizeFrame=null;if(pendingLayoutWidth===null)return;const value=pendingLayoutWidth;pendingLayoutWidth=null;applyLayoutWidth(value)}function scheduleLayoutWidth(value){pendingLayoutWidth=value;if(resizeFrame!==null||typeof window===`undefined`||typeof window.requestAnimationFrame!==`function`){if(resizeFrame===null)flushLayoutWidth();return}resizeFrame=window.requestAnimationFrame(flushLayoutWidth)}function cancelScheduledLayout(){if(resizeFrame!==null&&typeof window!==`undefined`&&typeof window.cancelAnimationFrame===`function`)window.cancelAnimationFrame(resizeFrame);resizeFrame=null;pendingLayoutWidth=null}function stopResize(event){if(event?.pointerId!==void 0&&drag?.pointerId!==void 0&&event.pointerId!==drag.pointerId)return;const completedDrag=drag;drag=null;resizing.value=false;if(typeof window!==`undefined`){window.removeEventListener(`pointermove`,moveResize);window.removeEventListener(`pointerup`,stopResize);window.removeEventListener(`pointercancel`,stopResize)}if(!completedDrag)return;if(completedDrag.target?.hasPointerCapture?.(completedDrag.pointerId))completedDrag.target.releasePointerCapture(completedDrag.pointerId);cancelScheduledLayout();preferredWidth.value=completedDrag.width;applyLayoutWidth(width.value);save()}function moveResize(event){if(!drag||event.pointerId!==drag.pointerId)return;drag.width=constrainVibe64ChatColumnWidth(drag.startWidth+event.clientX-drag.startX,bounds.value);scheduleLayoutWidth(drag.width)}function startResize(event){if(event.button!==0||typeof window===`undefined`)return;event.preventDefault();syncBounds();drag={pointerId:event.pointerId,startWidth:width.value,startX:event.clientX,target:event.currentTarget,width:width.value};resizing.value=true;event.currentTarget?.setPointerCapture?.(event.pointerId);window.addEventListener(`pointermove`,moveResize);window.addEventListener(`pointerup`,stopResize);window.addEventListener(`pointercancel`,stopResize)}function resizeWithKeyboard(event){syncBounds();const nextWidth=vibe64ChatColumnWidthForKey(event.key,width.value,bounds.value);if(nextWidth===null)return;event.preventDefault();preferredWidth.value=nextWidth;save()}function observeSplitPane(){const pane=splitPane();if(!pane)return;if(typeof ResizeObserver===`undefined`){if(typeof window!==`undefined`){windowResizeFallbackActive=true;window.addEventListener(`resize`,syncBounds)}return}resizeObserver=new ResizeObserver(syncBounds);resizeObserver.observe(pane)}watch(width,applyLayoutWidth,{immediate:true});onMounted(async()=>{await nextTick();syncBounds();applyLayoutWidth(width.value);observeSplitPane()});onBeforeUnmount(()=>{stopResize();cancelScheduledLayout();resizeObserver?.disconnect?.();resizeObserver=null;if(windowResizeFallbackActive&&typeof window!==`undefined`)window.removeEventListener(`resize`,syncBounds);windowResizeFallbackActive=false;for(const target of layoutTargets())target.style.removeProperty(`--studio-home-chat-column-width`);heading()?.style.removeProperty(`--studio-home-chat-column-edge`)});return{bounds,resizing,resizeWithKeyboard,separator,startResize,width}}var _hoisted_1$9=[`aria-valuemax`,`aria-valuemin`,`aria-valuenow`];var _sfc_main$10={__name:`Vibe64SessionFrame`,props:{chatCollapsed:Boolean},setup(__props){const{bounds,resizing,resizeWithKeyboard,separator,startResize,width}=useVibe64ChatColumnResize();return(_ctx,_cache)=>{return openBlock(),createBlock(VSheet,{rounded:`lg`,class:normalizeClass([`studio-ai-sessions studio-ai-sessions--autopilot studio-screen__panel`,{"studio-ai-sessions--resizing":unref(resizing)}])},{default:withCtx(()=>[withDirectives(createBaseVNode(`div`,{ref_key:`separator`,ref:separator,class:normalizeClass([`studio-ai-sessions__chat-column-separator`,{"studio-ai-sessions__chat-column-separator--resizing":unref(resizing)}]),"aria-label":`Resize chat`,"aria-orientation":`vertical`,"aria-valuemax":unref(bounds).max,"aria-valuemin":unref(bounds).min,"aria-valuenow":unref(width),role:`separator`,tabindex:`0`,title:`Resize chat`,onKeydown:_cache[0]||(_cache[0]=(...args)=>unref(resizeWithKeyboard)&&unref(resizeWithKeyboard)(...args)),onPointerdown:_cache[1]||(_cache[1]=(...args)=>unref(startResize)&&unref(startResize)(...args))},null,42,_hoisted_1$9),[[vShow,!__props.chatCollapsed]]),renderSlot(_ctx.$slots,`default`,{},void 0,true)]),_:3},8,[`class`])}}};var Vibe64SessionFrame_default=_plugin_vue_export_helper_default(_sfc_main$10,[[`__scopeId`,`data-v-07990013`]]);var DEFAULT_MAX_CONCURRENCY=2;var DEFAULT_STALE_AFTER_MS=3e5;var DEFAULT_STALE_CHECK_INTERVAL_MS=6e4;var DEFAULT_SETTLE_MS=1e3;var DEFAULT_MAX_SETTLE_MS=5e3;function createVibe64SessionRepositoryStatusQueue({clearTimer=timer=>clearTimeout(timer),maxConcurrency=DEFAULT_MAX_CONCURRENCY,maxSettleMs=DEFAULT_MAX_SETTLE_MS,now=()=>Date.now(),onInspected=()=>null,onState=()=>null,prioritized=()=>false,requestWork,setTimer=(callback,delay)=>setTimeout(callback,delay),settleMs=DEFAULT_SETTLE_MS,staleAfterMs=DEFAULT_STALE_AFTER_MS}={}){if(typeof requestWork!==`function`)throw new TypeError(`Session repository status requires a work inspector.`);const concurrency=Math.max(1,Number(maxConcurrency||0));const records=new Map;const requested=new Map;const activeSessions=new Set;const canonicalUpdatePending=new Map;const idleWaiters=new Set;let active=0;let disposed=false;function settled(){if(active||requested.size)return;for(const resolve of idleWaiters)resolve();idleWaiters.clear()}function observe(sessionId=``,workState=null){const id=String(sessionId||``).trim();if(!id)return;const state=workState&&typeof workState===`object`?{...workState}:{};if(canonicalUpdatePending.has(id)){const expectedCommit=canonicalUpdatePending.get(id);if(expectedCommit&&state.canonicalCommit===expectedCommit&&state.updateStatusPending!==true)canonicalUpdatePending.delete(id);else{state.updateAvailable=true;state.updateStatusPending=true}}const checkedAt=String(state.checkedAt||``).trim();records.set(id,{checkedAtMs:checkedAt?Date.parse(checkedAt)||now():now(),workState:state});onState({sessionId:id,workState:state})}function markUpdatePending(sessionId=``,canonicalCommit=``){const id=String(sessionId||``).trim();if(!id)return;const prior=records.get(id)?.workState||{};canonicalUpdatePending.set(id,String(canonicalCommit||``).trim());observe(id,{...prior,checkedAt:``,error:``,loading:false,updateAvailable:true,updateStatusPending:true})}function confirmCanonical(sessionId=``,{canonicalCommit=``,updateAvailable=false}={}){const id=String(sessionId||``).trim();const commit=String(canonicalCommit||``).trim();const expectedCommit=canonicalUpdatePending.get(id);if(updateAvailable&&(!expectedCommit||expectedCommit===commit))markUpdatePending(id,commit);else if(expectedCommit===``)canonicalUpdatePending.set(id,commit)}function markCanonicalCheckUnavailable(sessionId=``,error=``){const id=String(sessionId||``).trim();if(!id)return;observe(id,{...records.get(id)?.workState||{},checkedAt:new Date(now()).toISOString(),error:String(error||`Repository update status is unavailable.`),loading:false})}function fresh(sessionId){const checkedAtMs=records.get(sessionId)?.checkedAtMs||0;return checkedAtMs>0&&now()-checkedAtMs<staleAfterMs}async function inspect(sessionId,waiters){active+=1;activeSessions.add(sessionId);if(!(records.get(sessionId)?.workState||null))observe(sessionId,{checkedAt:``,error:``,loading:true,operation:null,unsaved:null});let workState=null;try{const result=await requestWork(sessionId);if(disposed)return;if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Session work could not be inspected.`));workState={...result,checkedAt:new Date(now()).toISOString(),error:``,loading:false};observe(sessionId,workState)}catch(error){if(disposed)return;workState={checkedAt:new Date(now()).toISOString(),error:error instanceof Error?error.message:String(error||`Session work could not be inspected.`),loading:false,operation:null,unsaved:null};observe(sessionId,workState)}finally{active-=1;activeSessions.delete(sessionId);if(workState)onInspected({sessionId,workState});for(const resolve of waiters)resolve(workState);const followUp=requested.get(sessionId);if(followUp)arm(sessionId,followUp);drain();settled()}}function start(next){next.timer=null;next.ready=true;drain()}function arm(sessionId,next){if(disposed||next.ready||activeSessions.has(sessionId))return;if(next.timer!==null){clearTimer(next.timer);next.timer=null}const delay=next.settle?Math.min(next.lastAt+settleMs,next.firstAt+maxSettleMs)-now():0;if(delay>0)next.timer=setTimer(()=>start(next),delay);else start(next)}function drain(){while(!disposed&&active<concurrency){let sessionId=``;for(const[id,next]of requested){if(!next.ready)continue;if(prioritized(id)){sessionId=id;break}sessionId||=id}if(!sessionId)return;const next=requested.get(sessionId);requested.delete(sessionId);inspect(sessionId,next.waiters)}}function request(sessionId,{settle=false,waiter=null}={}){const at=now();let next=requested.get(sessionId);if(next){next.lastAt=at;next.settle&&=settle}else{next={firstAt:at,lastAt:at,ready:false,settle,timer:null,waiters:[]};requested.set(sessionId,next)}if(waiter)next.waiters.push(waiter);arm(sessionId,next)}function enqueue(sessionIds=[],{force=false,settle=false}={}){if(disposed)return;for(const rawSessionId of sessionIds){const sessionId=String(rawSessionId||``).trim();if(!sessionId||!force&&(requested.has(sessionId)||activeSessions.has(sessionId)||fresh(sessionId)))continue;request(sessionId,{settle:force&&settle})}}function inspectSession(sessionId=``,{settle=false}={}){const id=String(sessionId||``).trim();if(disposed||!id)return Promise.resolve(null);return new Promise(resolve=>request(id,{settle,waiter:resolve}))}function cancel(sessionId){const next=requested.get(sessionId);requested.delete(sessionId);if(next?.timer!=null)clearTimer(next.timer);for(const resolve of next?.waiters||[])resolve(null)}function removeExcept(sessionIds=[]){const retained=new Set(sessionIds.map(sessionId=>String(sessionId||``).trim()).filter(Boolean));for(const sessionId of new Set([...records.keys(),...requested.keys()])){if(retained.has(sessionId))continue;records.delete(sessionId);canonicalUpdatePending.delete(sessionId);if(!requested.get(sessionId)?.waiters.length)cancel(sessionId)}settled()}function dispose(){disposed=true;for(const sessionId of[...requested.keys()])cancel(sessionId);canonicalUpdatePending.clear();settled()}function waitForIdle(){if(!active&&!requested.size)return Promise.resolve();return new Promise(resolve=>idleWaiters.add(resolve))}return{dispose,confirmCanonical,enqueue,inspect:inspectSession,markCanonicalCheckUnavailable,markUpdatePending,observe,removeExcept,waitForIdle}}function useVibe64SessionRepositoryStatusRegistry({maxVisibleSessions=3,onState=()=>null,projectSlug=``,selectedSessionId,sessionSourceOperationsSuspended=()=>false,sessions,sessionsApiPath}={}){const visibleSessions=computed(()=>visibleVibe64ToolbarSessions({limit:maxVisibleSessions,selectedSessionId:readRefOrGetterValue(selectedSessionId),sessions:readRefOrGetterValue(sessions)||[]}));const visibleSessionIds=computed(()=>visibleSessions.value.map(session=>String(session?.sessionId||``).trim()).filter(Boolean));const selectedId=computed(()=>String(readRefOrGetterValue(selectedSessionId)||``).trim());const apiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``).trim());const suspendedVisibleSessionIds=computed(()=>visibleSessionIds.value.filter(sessionId=>sessionSourceOperationsSuspended(sessionId)===true));const canonicalChecks=new Map;const canonicalCheckedAt=new Map;const canonicalAccessRevisions=new Map;const forcedCanonicalFollowups=new Set;const canonicalCheckInspections=new Map;const workListeners=new Map;let disposed=false;function sourceOperationsSuspended(sessionId=``){const id=String(sessionId||``).trim();return Boolean(id&&sessionSourceOperationsSuspended(id)===true)}function canonicalAccessRevision(sessionId=``){return Number(canonicalAccessRevisions.get(sessionId)||0)}function advanceCanonicalAccessRevision(sessionId=``){const id=String(sessionId||``).trim();if(!id)return 0;const revision=canonicalAccessRevision(id)+1;canonicalAccessRevisions.set(id,revision);return revision}const queue=createVibe64SessionRepositoryStatusQueue({onInspected({sessionId,workState}){for(const listener of workListeners.get(sessionId)||[])listener(workState)},onState,prioritized:sessionId=>sessionId===selectedId.value,async requestWork(sessionId){return getHttpWebClient().request(vibe64SessionPath(apiPath.value,sessionId,`/work`),{method:`GET`,timeoutMs:12e4})}});function inspectVisible({force=false,includeSelected=false,sessionId=``,settle=false}={}){if(!apiPath.value)return;const requestedId=String(sessionId||``).trim();const ids=visibleSessionIds.value.filter(id=>!sourceOperationsSuspended(id)&&(includeSelected||id!==selectedId.value)&&(!requestedId||id===requestedId));queue.enqueue(ids,{force,settle})}const sessionWork=Object.freeze({inspect(sessionId=``,{settle=false}={}){const id=String(sessionId||``).trim();if(disposed||!id||!apiPath.value||sourceOperationsSuspended(id))return Promise.resolve(null);return queue.inspect(id,{settle})},subscribe(sessionId=``,listener){const id=String(sessionId||``).trim();if(!id||typeof listener!==`function`)return()=>{};const listeners=workListeners.get(id)||new Set;listeners.add(listener);workListeners.set(id,listeners);return()=>{listeners.delete(listener);if(!listeners.size&&workListeners.get(id)===listeners)workListeners.delete(id)}}});function observeCanonicalCheck(sessionId,result,{settle=false}={}){if(forcedCanonicalFollowups.has(sessionId))return;const checkedAt=String(result.checkedAt||``);if(checkedAt&&checkedAt<=(canonicalCheckedAt.get(sessionId)||``))return;if(checkedAt)canonicalCheckedAt.set(sessionId,checkedAt);queue.confirmCanonical(sessionId,result);canonicalCheckInspections.set(sessionId,(canonicalCheckInspections.get(sessionId)||0)+1);inspectVisible({force:true,includeSelected:true,sessionId,settle})}async function checkCanonical(sessionId=``,{force=false}={}){const id=String(sessionId||``).trim();if(disposed||!id||!apiPath.value||sourceOperationsSuspended(id))return null;const accessRevision=canonicalAccessRevision(id);if(canonicalChecks.has(id)){const active=canonicalChecks.get(id);if(active.accessRevision===accessRevision){if(force)forcedCanonicalFollowups.add(id);return active.promise}}let request;const requestIsCurrent=()=>Boolean(!disposed&&!sourceOperationsSuspended(id)&&canonicalAccessRevision(id)===accessRevision&&canonicalChecks.get(id)?.promise===request);request=getHttpWebClient().request(vibe64SessionCheckUpdatesPath(apiPath.value,id),{body:{force},method:`POST`}).then(result=>{if(!requestIsCurrent())return null;if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Repository update status is unavailable.`));observeCanonicalCheck(id,result);return result}).catch(error=>{if(requestIsCurrent())queue.markCanonicalCheckUnavailable(id,error instanceof Error?error.message:String(error||`Repository update status is unavailable.`));return null}).finally(()=>{if(canonicalChecks.get(id)?.promise!==request)return;canonicalChecks.delete(id);if(!disposed&&!sourceOperationsSuspended(id)&&forcedCanonicalFollowups.delete(id))return checkCanonical(id,{force:true})});canonicalChecks.set(id,{accessRevision,promise:request});return request}async function refresh(sessionId){await checkCanonical(sessionId,{force:true});await queue.waitForIdle()}watch(()=>[apiPath.value,selectedId.value,...visibleSessionIds.value],()=>{queue.removeExcept(visibleSessionIds.value);for(const id of canonicalCheckedAt.keys())if(!visibleSessionIds.value.includes(id))canonicalCheckedAt.delete(id);inspectVisible();if(!canonicalCheckedAt.has(selectedId.value))checkCanonical(selectedId.value)},{immediate:true});let priorSuspendedSessionIds=new Set;watch(suspendedVisibleSessionIds,sessionIds=>{const nextSuspendedSessionIds=new Set(sessionIds);for(const sessionId of new Set([...priorSuspendedSessionIds,...nextSuspendedSessionIds])){const wasSuspended=priorSuspendedSessionIds.has(sessionId);const suspended=nextSuspendedSessionIds.has(sessionId);if(wasSuspended===suspended)continue;advanceCanonicalAccessRevision(sessionId);forcedCanonicalFollowups.delete(sessionId);if(!suspended&&visibleSessionIds.value.includes(sessionId))checkCanonical(sessionId,{force:true})}priorSuspendedSessionIds=nextSuspendedSessionIds},{flush:`sync`,immediate:true});useRealtimeEvent({enabled:computed(()=>visibleSessionIds.value.length>0),event:VIBE64_SESSION_SUMMARY_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(visibleSessionIds.value.includes(repositoryStatusSessionId(payload))&&!sourceOperationsSuspended(repositoryStatusSessionId(payload))&&(repositoryStatusRealtimeShouldRefresh(payload)||payload.reason===`session-repository-check-failed`)),onEvent:({payload={}}={})=>{const sessionId=repositoryStatusSessionId(payload);if(sourceOperationsSuspended(sessionId))return;if(payload.reason===`session-pull-request`){advanceCanonicalAccessRevision(sessionId);canonicalCheckedAt.delete(sessionId)}if(payload.reason===`session-repository-checked`){observeCanonicalCheck(sessionId,payload.repositoryUpdateCheck,{settle:true});return}if(payload.reason===`session-repository-check-failed`){queue.markCanonicalCheckUnavailable(sessionId,payload.repositoryUpdateCheckError?.message);return}const inspectChange=()=>inspectVisible({force:true,includeSelected:true,sessionId,settle:true});if(repositoryStatusRealtimeNeedsCanonicalCheck(payload)){queue.markUpdatePending(sessionId,payload.canonicalCommit);const checkInspections=canonicalCheckInspections.get(sessionId)||0;checkCanonical(sessionId,{force:true}).then(()=>{if((canonicalCheckInspections.get(sessionId)||0)===checkInspections)inspectChange()});return}inspectChange()}});useRealtimeEvent({enabled:computed(()=>visibleSessionIds.value.length>0),event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,matches:({payload={}}={})=>visibleSessionIds.value.includes(repositoryStatusSessionId(payload))&&!sourceOperationsSuspended(repositoryStatusSessionId(payload)),onEvent:({payload={}}={})=>inspectVisible({force:true,includeSelected:true,sessionId:repositoryStatusSessionId(payload),settle:true})});const browserDocument=typeof document===`undefined`?null:document;const interval=typeof window===`undefined`?null:window.setInterval(()=>{if(browserDocument?.visibilityState===`hidden`)return;inspectVisible()},DEFAULT_STALE_CHECK_INTERVAL_MS);useVibe64ProjectWatch({projectSlug});const refreshWhenVisible=()=>{if(browserDocument?.visibilityState!==`visible`)return;inspectVisible({force:true})};browserDocument?.addEventListener(`visibilitychange`,refreshWhenVisible);onScopeDispose(()=>{disposed=true;browserDocument?.removeEventListener(`visibilitychange`,refreshWhenVisible);if(interval!==null)window.clearInterval(interval);canonicalChecks.clear();canonicalCheckedAt.clear();canonicalAccessRevisions.clear();forcedCanonicalFollowups.clear();canonicalCheckInspections.clear();workListeners.clear();queue.dispose()});return{inspectVisible,observe:queue.observe,refresh,sessionWork,visibleSessionIds}}var vibe64SessionPanelEmits=[`chat-attention`,`execution-attention`,`project-attention`];var vibe64SessionPanelProps={createSessionTeleportTarget:{default:``,type:String},chatCollapsed:{default:false,type:Boolean},githubActorTeleportTarget:{default:``,type:String},projectContext:{default:()=>({}),type:Object},projectPane:{default:``,type:String},previewToolbarTeleportTarget:{default:``,type:String},usageRecordingTeleportTarget:{default:``,type:String}};function useVibe64SessionPanel(props,emit){const route=useRoute();const projectSlug=useVibe64ProjectSlug();const dismissedPageError=ref(``);const mountedRuntimeSessionIds=ref([]);const runtimeStateBySessionId=reactive({});const sessionData=useVibe64SessionData();const projectSettingsKey=computed(()=>projectSettingsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value));const projectSettings=useEndpointResource({enabled:computed(()=>Boolean(projectSlug.value)),fallbackLoadError:`Project settings could not load.`,path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:projectSettingsKey,realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,queryKey:computed(()=>projectSettingsKey.value.slice(0,-1))},refreshOnPull:true,requestRecoveryLabel:`Project settings`});const promptHintPolicy=computed(()=>{const promptHints=projectSettings.data.value?.promptHints;return{enabled:promptHints?.enabled!==false,ready:Boolean(promptHints&&!projectSettings.loadError.value)}});const selection=proxyRefs({isArchived:sessionData.isSelectedSessionArchived,selectedSession:sessionData.selectedSession,selectedSessionId:sessionData.selectedSessionId});const listedSelectedSessionId=computed(()=>{const id=selection.selectedSessionId;return(sessionData.sessions.value||[]).some(session=>session.sessionId===id)?id:``});const repositoryStatusRegistry=useVibe64SessionRepositoryStatusRegistry({onState:applyRuntimeWorkState,projectSlug,selectedSessionId:()=>listedSelectedSessionId.value,sessionSourceOperationsSuspended:sessionId=>runtimeStateBySessionId[sessionId]?.sourceOperationsSuspended===true,sessions:sessionData.sessions,sessionsApiPath:sessionData.sessionsApiPath});const toolbarSessions=computed(()=>sessionPanelToolbarSessions({runtimeStateBySessionId,selectedSession:selection.selectedSession,selectedSessionId:selection.selectedSessionId,sessions:sessionData.sessions.value||[]}));const toolbar=proxyRefs({sessionsApiPath:sessionData.sessionsApiPath,refreshSessionData:sessionData.refreshSessionData,refreshRepositoryState:repositoryStatusRegistry.refresh,canCreateSession:sessionData.canCreateSession,createSession:sessionData.createSession,createSessionCommand:sessionData.createSessionCommand,createSessionRunning:sessionData.createSessionRunning,createSessionVisible:sessionData.createSessionVisible,createSessionTitle:sessionData.createSessionTitle,selectSession:sessionData.selectSessionId,sessions:toolbarSessions,shortSessionId:sessionData.shortSessionId});const projectPane=computed(()=>normalizeProjectPane(props.projectPane||route.query.pane));const chatCollapsed=computed(()=>Boolean(props.chatCollapsed));const dashboardProjectActive=computed(()=>projectPane.value===`dashboard`);const emptyDashboardContext=computed(()=>sessionPanelDashboardContext(props.projectContext,sessionData.sessionsApiPath));const emptyBlockedReason=computed(()=>String(!toolbar.canCreateSession&&toolbar.createSessionTitle?toolbar.createSessionTitle:``).trim());const selectedRuntimeState=computed(()=>runtimeStateBySessionId[selection.selectedSessionId]||null);const sessionLoadError=computed(()=>Boolean(sessionData.sessionList.loadError));const runtimeHostSessionIds=computed(()=>{const visibleSessionIds=new Set(toolbarSessions.value.filter(session=>!session.archiving).map(session=>session.sessionId));if(listedSelectedSessionId.value)visibleSessionIds.add(listedSelectedSessionId.value);if(sessionLoadError.value)for(const mountedSessionId of mountedRuntimeSessionIds.value)visibleSessionIds.add(mountedSessionId);const archivingIds=new Set(toolbarSessions.value.filter(session=>session.archiving).map(session=>session.sessionId));return mountedRuntimeSessionIds.value.filter(sessionId=>visibleSessionIds.has(sessionId)&&!archivingIds.has(sessionId))});const emptyStateActivity=computed(()=>sessionPanelEmptyStateActivity({createSessionRunning:sessionData.createSessionRunning.value,selectedSession:selection.selectedSession,sessionListInitialLoading:sessionData.sessionList.isInitialLoading}));const emptyStateLoading=computed(()=>Boolean(emptyStateActivity.value));const emptyStateInitialLoading=computed(()=>emptyStateActivity.value===`loading`);const emptyStateStatusText=computed(()=>emptyStateActivity.value===`creating`?`Creating session.`:`Loading sessions.`);const emptyChatHintText=computed(()=>{if(emptyStateActivity.value===`creating`)return`Creating session.`;if(emptyStateActivity.value===`loading`)return`Loading sessions.`;return emptyBlockedReason.value||`Use the + button to start a session.`});const emptyPreviewTitleText=computed(()=>{if(emptyStateActivity.value===`creating`)return`Creating session.`;return emptyStateLoading.value?`Loading session.`:`Create a session to start preview.`});const emptyPreviewDetailText=computed(()=>{if(emptyStateLoading.value)return``;return emptyBlockedReason.value});const emptyCreateAttention=computed(()=>Boolean(!emptyStateLoading.value&&toolbar.canCreateSession&&(toolbar.sessions||[]).length<1));const emptyLayoutVisible=computed(()=>!selection.selectedSession);const selectedSessionArchiving=computed(()=>sessionPanelSelectedSessionArchiving({archive:sessionData.archive,selectedSessionId:selection.selectedSessionId}));const archiveWorkState=computed(()=>sessionPanelArchiveWorkState({archive:sessionData.archive,sessions:toolbarSessions.value}));const rawPageError=computed(()=>blockingVibe64SessionPageError({hasMountedRuntime:runtimeHostSessionIds.value.length>0,runtimePageError:selectedRuntimeState.value?.pageError,selectedSession:selection.selectedSession,sessionListLoadError:sessionData.sessionList.loadError,sessions:toolbar.sessions||[]}));const pageError=computed(()=>sessionPanelPageErrorMessage(rawPageError.value));const visiblePageError=computed(()=>Boolean(pageError.value&&dismissedPageError.value!==pageError.value));const runtimeHostDiagnostics=computed(()=>sessionPanelRuntimeHostDiagnostics({mountedRuntimeSessionIds:mountedRuntimeSessionIds.value,runtimeHostSessionIds:runtimeHostSessionIds.value,runtimeStateBySessionId,selectedSessionId:selection.selectedSessionId,sessionLoadError:sessionLoadError.value,sessions:toolbarSessions.value}));watch(sessionData.sessions,(sessions=[])=>{if(sessionLoadError.value){ensureRuntimeHost(listedSelectedSessionId.value);return}const visibleSessionIds=new Set(sessions.map(session=>session.sessionId));mountedRuntimeSessionIds.value=mountedRuntimeSessionIds.value.filter(sessionId=>visibleSessionIds.has(sessionId));for(const sessionId of Object.keys(runtimeStateBySessionId))if(!visibleSessionIds.has(sessionId))delete runtimeStateBySessionId[sessionId];ensureRuntimeHost(listedSelectedSessionId.value)});watch(listedSelectedSessionId,ensureRuntimeHost,{immediate:true});watch(pageError,error=>{if(!error)dismissedPageError.value=``});watch(runtimeHostDiagnostics,diagnostics=>{vibe64SessionDebugLog(`client.sessionPanel.runtimeHosts.changed`,diagnostics)},{immediate:true});return{archiveWorkState,chatCollapsed,dashboardProjectActive,dismissPageError,emitChatAttention,emitProjectAttention,emptyChatHintText,emptyCreateAttention,emptyDashboardContext,emptyLayoutVisible,emptyPreviewDetailText,emptyPreviewTitleText,emptyStateInitialLoading,emptyStateLoading,emptyStateStatusText,pageError,promptHintPolicy,projectPane,runtimeHostSessionIds,selectedSessionArchiving,selection,sessionData,setRuntimeBusy,setRuntimePageError,setRuntimeSourceOperationsSuspended,setRuntimeWorkState,sessionWorkInspector:repositoryStatusRegistry.sessionWork,toolbar,visiblePageError};function emitProjectAttention(){emit(`project-attention`)}function emitChatAttention(){emit(`chat-attention`)}function dismissPageError(){dismissedPageError.value=String(pageError.value||``)}function ensureRuntimeState(sessionId=``){const key=String(sessionId||``);if(!key)return null;if(!runtimeStateBySessionId[key])runtimeStateBySessionId[key]={agentThinking:false,busy:false,pageError:``,sourceOperationsSuspended:false,repositoryWorkState:{checkedAt:``,state:`checking`}};return runtimeStateBySessionId[key]}function ensureRuntimeHost(sessionId=``){const key=String(sessionId||``);if(!key||mountedRuntimeSessionIds.value.includes(key))return;mountedRuntimeSessionIds.value=[...mountedRuntimeSessionIds.value,key];ensureRuntimeState(key)}function setRuntimeBusy({agentThinking=false,busy=false,sessionId=``}={}){const state=ensureRuntimeState(sessionId);if(state){state.busy=Boolean(busy);state.agentThinking=Boolean(agentThinking)}}function setRuntimePageError({error=``,sessionId=``}={}){const state=ensureRuntimeState(sessionId);if(state)state.pageError=String(error||``)}function setRuntimeSourceOperationsSuspended({sessionId=``,suspended=false}={}){const state=ensureRuntimeState(sessionId);if(state)state.sourceOperationsSuspended=suspended===true}function setRuntimeWorkState({sessionId=``,workState=null}={}){repositoryStatusRegistry.observe(sessionId,workState)}function applyRuntimeWorkState({sessionId=``,workState=null}={}){const state=ensureRuntimeState(sessionId);if(state)state.repositoryWorkState=sessionRepositoryWorkState(workState)}}function normalizeProjectPane(value=``){return value===`dashboard`?value:`preview`}function sessionPanelPageErrorMessage(error=``){const message=String(error||``).trim();if(/^request failed\.?$/iu.test(message))return`The session API request failed. Check that the Vibe64 server is running, then refresh the session.`;return message}function sessionPanelSelectedSessionArchiving({archive=null,selectedSessionId=``}={}){const selectedId=String(selectedSessionId||``).trim();const archivingId=String(archive?.archivingSessionId||``).trim();return Boolean(archive?.archiving&&selectedId&&archivingId===selectedId)}function sessionPanelArchiveWorkState({archive=null,sessions=[]}={}){const sessionId=String(archive?.sessionId||``).trim();if(!sessionId)return null;return sessions.find(session=>session?.sessionId===sessionId)?.repositoryWorkState||null}function sessionPanelDashboardContext(projectContext={},sessionsApiPath=``){return{projectContext:projectContext&&typeof projectContext===`object`&&!Array.isArray(projectContext)?projectContext:{},sessionsApiPath:String(unref(sessionsApiPath)||``)}}function sessionPanelToolbarSessions({runtimeStateBySessionId={},selectedSession=null,selectedSessionId=``,sessions=[]}={}){const normalizedSelectedSessionId=String(selectedSessionId||``).trim();return sessions.map(session=>{const sessionId=String(session?.sessionId||``).trim();if(!sessionId)return session;const runtimeState=runtimeStateBySessionId[sessionId]||null;const sourceSession=sessionId===normalizedSelectedSessionId&&selectedSession?.sessionId===sessionId?selectedSession:session;const agentThinking=Boolean(runtimeState?.busy||runtimeState?.agentThinking||sessionRecordHasActiveAgentWork(sourceSession));return{...session,agentThinking,repositoryWorkState:runtimeState?.repositoryWorkState||{checkedAt:``,state:`checking`}}})}function sessionPanelRuntimeHostDiagnostics({mountedRuntimeSessionIds=[],runtimeHostSessionIds=[],runtimeStateBySessionId={},selectedSessionId=``,sessionLoadError=false,sessions=[]}={}){const mountedIds=mountedRuntimeSessionIds.map(sessionId=>String(sessionId||``).trim()).filter(Boolean);const renderedIds=runtimeHostSessionIds.map(sessionId=>String(sessionId||``).trim()).filter(Boolean);const sessionIds=sessions.map(session=>String(session?.sessionId||``).trim()).filter(Boolean);const renderedSet=new Set(renderedIds);const selectedId=String(selectedSessionId||``).trim();const sessionSet=new Set(sessionIds);const stateIds=Object.keys(runtimeStateBySessionId||{}).map(sessionId=>String(sessionId||``).trim()).filter(Boolean);const states=stateIds.map(sessionId=>runtimeStateBySessionId[sessionId]).filter(Boolean);return{activeRuntimeHostCount:selectedId&&mountedIds.includes(selectedId)?1:0,busyRuntimeHostCount:states.filter(state=>Boolean(state?.busy)).length,hiddenMountedRuntimeHostCount:mountedIds.filter(sessionId=>sessionId!==selectedId).length,mountedRuntimeHostCount:mountedIds.length,mountedRuntimeSessionIds:mountedIds,orphanedMountedRuntimeHostCount:mountedIds.filter(sessionId=>!sessionSet.has(sessionId)).length,pageErrorRuntimeHostCount:states.filter(state=>String(state?.pageError||``).trim()).length,renderedRuntimeHostCount:renderedIds.length,renderedRuntimeSessionIds:renderedIds,runtimeStateCount:stateIds.length,selectedSessionId:selectedId,sessionLoadError:Boolean(sessionLoadError),unrenderedMountedRuntimeHostCount:mountedIds.filter(sessionId=>!renderedSet.has(sessionId)).length,visibleSessionCount:sessionIds.length}}function sessionPanelEmptyStateActivity({createSessionRunning=false,selectedSession=null,sessionListInitialLoading=false}={}){if(selectedSession)return``;if(createSessionRunning)return`creating`;return sessionListInitialLoading?`loading`:``}var _hoisted_1$8={key:0,class:`studio-ai-sessions__error-overlay`};var _hoisted_2$6={key:0,class:`studio-ai-sessions__preview-empty-loading`,role:`status`};var _hoisted_3$6=[`aria-hidden`,`inert`];var _sfc_main$9={__name:`Vibe64SessionPanel`,props:vibe64SessionPanelProps,emits:vibe64SessionPanelEmits,setup(__props,{emit:__emit}){const hostConversation=inject(VIBE64_HOST_CONVERSATION_KEY,null);const emit=__emit;const props=__props;const sessionTooltip=createVibe64SessionTooltipState();const learning=useVibe64Learning();provide(VIBE64_SESSION_TOOLTIP_KEY,sessionTooltip);const{archiveWorkState,chatCollapsed,dashboardProjectActive,dismissPageError,emitChatAttention,emitProjectAttention,emptyChatHintText,emptyCreateAttention,emptyDashboardContext,emptyLayoutVisible,emptyPreviewDetailText,emptyPreviewTitleText,emptyStateInitialLoading,emptyStateStatusText,pageError,promptHintPolicy,projectPane,runtimeHostSessionIds,selectedSessionArchiving,selection,sessionData,setRuntimeBusy,setRuntimePageError,setRuntimeSourceOperationsSuspended,setRuntimeWorkState,sessionWorkInspector,toolbar,visiblePageError}=useVibe64SessionPanel(props,emit);async function createSessionForEmptyState(assistantSelection={},options={}){const response=await toolbar.createSession?.(assistantSelection,options);if(response?.sessionId)focusCreatedVibe64SessionTab(response.sessionId);return response}const emptyToolbar=computed(()=>({projectContext:props.projectContext,...toolbar,createSession:createSessionForEmptyState}));return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64SessionFrame_default,{"chat-collapsed":unref(chatCollapsed),class:normalizeClass({"studio-ai-sessions--unavailable":unref(sessionData).sessionList.unavailableItems.length>0}),onPointermove:unref(sessionTooltip).trackPointer,onPointerleave:unref(sessionTooltip).resumeHover},{default:withCtx(()=>[createVNode(Transition,{name:`studio-ai-sessions-error`},{default:withCtx(()=>[unref(visiblePageError)?(openBlock(),createElementBlock(`div`,_hoisted_1$8,[createVNode(StudioErrorNotice_default,{title:`Session data could not refresh`,error:unref(pageError),compact:``,dismissible:``,onDismiss:unref(dismissPageError)},null,8,[`error`,`onDismiss`])])):createCommentVNode(``,true)]),_:1}),createVNode(Vibe64UnavailableSessions_default,{sessions:unref(sessionData).sessionList.unavailableItems,loading:unref(sessionData).sessionList.isLoading,onRecheck:unref(sessionData).refreshSessionData},null,8,[`sessions`,`loading`,`onRecheck`]),createVNode(Vibe64SessionArchiveDialog_default,{archive:unref(sessionData).archive,"short-session-id":unref(sessionData).shortSessionId,"work-state":unref(archiveWorkState)},null,8,[`archive`,`short-session-id`,`work-state`]),unref(emptyLayoutVisible)?(openBlock(),createBlock(Vibe64EmptySessionLayout_default,{key:0,"aria-hidden":unref(selectedSessionArchiving)?`true`:void 0,"chat-collapsed":unref(chatCollapsed),dashboard:unref(dashboardProjectActive),lesson:unref(learning).lessonShown,hint:unref(emptyChatHintText),inert:unref(selectedSessionArchiving),"preview-detail":unref(emptyPreviewDetailText),"preview-title":unref(emptyPreviewTitleText)},{header:withCtx(()=>[createVNode(Vibe64SessionToolbar_default,{archive:unref(sessionData).archive,compact:``,"create-attention":unref(emptyCreateAttention),"create-teleport-target":unref(selectedSessionArchiving)?``:props.createSessionTeleportTarget,"create-visible":!unref(emptyStateInitialLoading)&&unref(toolbar).createSessionVisible,"max-visible-sessions":3,"selected-session-id":unref(selection).selectedSessionId,"selection-archived":unref(selection).isArchived,toolbar:emptyToolbar.value},null,8,[`archive`,`create-attention`,`create-teleport-target`,`create-visible`,`selected-session-id`,`selection-archived`,`toolbar`])]),chat:withCtx(()=>[unref(hostConversation)?(openBlock(),createBlock(Vibe64TemporaryAiWorkspace_default,{key:0,class:`studio-ai-sessions__empty-host-conversation`,active:``,onSelectMainChat:_cache[0]||(_cache[0]=$event=>unref(hostConversation).close())})):createCommentVNode(``,true)]),dashboard:withCtx(()=>[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:{...unref(emptyDashboardContext),sessionToolbar:unref(toolbar)}},void 0,true)]),lesson:withCtx(()=>[createVNode(Vibe64LessonSheet_default)]),preview:withCtx(()=>[unref(emptyStateInitialLoading)?(openBlock(),createElementBlock(`div`,_hoisted_2$6,[createVNode(VSkeletonLoader,{"aria-label":unref(emptyStateStatusText),class:`studio-ai-sessions__preview-empty-skeleton`,type:`button`},null,8,[`aria-label`])])):unref(toolbar).createSessionVisible?(openBlock(),createBlock(Vibe64CreateSessionButton_default,{key:1,"aria-label":`Create session`,"button-class":`studio-ai-sessions__preview-create-button`,"icon-only":false,label:`Create session`,toolbar:emptyToolbar.value},null,8,[`toolbar`])):createCommentVNode(``,true)]),_:3},8,[`aria-hidden`,`chat-collapsed`,`dashboard`,`lesson`,`hint`,`inert`,`preview-detail`,`preview-title`])):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,{class:`studio-ai-sessions__runtime-stack`,"aria-hidden":unref(selectedSessionArchiving)?`true`:void 0,inert:unref(selectedSessionArchiving)},[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(runtimeHostSessionIds),runtimeSessionId=>{return withDirectives((openBlock(),createBlock(Vibe64SessionRuntimeHost_default,{key:runtimeSessionId,active:runtimeSessionId===unref(selection).selectedSessionId,"session-data":unref(sessionData),"session-id":runtimeSessionId,"session-work-inspector":unref(sessionWorkInspector),"chat-collapsed":unref(chatCollapsed),"create-session-teleport-target":!unref(emptyLayoutVisible)&&!unref(selectedSessionArchiving)&&runtimeSessionId===unref(selection).selectedSessionId?props.createSessionTeleportTarget:``,"github-actor-teleport-target":runtimeSessionId===unref(selection).selectedSessionId?props.githubActorTeleportTarget:``,"project-context":props.projectContext,"preview-toolbar-teleport-target":runtimeSessionId===unref(selection).selectedSessionId?props.previewToolbarTeleportTarget:``,"usage-recording-teleport-target":runtimeSessionId===unref(selection).selectedSessionId?props.usageRecordingTeleportTarget:``,"prompt-hint-policy":unref(promptHintPolicy),"project-pane":unref(projectPane),"toolbar-sessions":unref(toolbar).sessions,"refresh-repository-state":unref(toolbar).refreshRepositoryState,onBusyChange:unref(setRuntimeBusy),onChatAttention:unref(emitChatAttention),onExecutionAttention:_cache[1]||(_cache[1]=$event=>emit(`execution-attention`,$event)),onPageErrorChange:unref(setRuntimePageError),onSourceOperationsSuspensionChange:unref(setRuntimeSourceOperationsSuspended),onWorkStateChange:unref(setRuntimeWorkState),onProjectAttention:unref(emitProjectAttention)},{dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:{...dashboardSlotProps?.dashboardContext||{},sessionToolbar:unref(toolbar)}},void 0,true)]),_:3},8,[`active`,`session-data`,`session-id`,`session-work-inspector`,`chat-collapsed`,`create-session-teleport-target`,`github-actor-teleport-target`,`project-context`,`preview-toolbar-teleport-target`,`usage-recording-teleport-target`,`prompt-hint-policy`,`project-pane`,`toolbar-sessions`,`refresh-repository-state`,`onBusyChange`,`onChatAttention`,`onPageErrorChange`,`onSourceOperationsSuspensionChange`,`onWorkStateChange`,`onProjectAttention`])),[[vShow,runtimeSessionId===unref(selection).selectedSessionId]])}),128))],8,_hoisted_3$6),[[vShow,!unref(emptyLayoutVisible)&&unref(runtimeHostSessionIds).length>0]])]),_:3},8,[`chat-collapsed`,`class`,`onPointermove`,`onPointerleave`])}}};var Vibe64SessionPanel_default=_plugin_vue_export_helper_default(_sfc_main$9,[[`__scopeId`,`data-v-b68d4c1c`]]);var _hoisted_1$7=[`aria-pressed`,`aria-description`];var _hoisted_2$5={class:`vibe64-lesson-toggle__switch`,"aria-hidden":`true`};var _hoisted_3$5={class:`vibe64-lesson-toggle__thumb`};var _sfc_main$8={__name:`Vibe64LessonToggle`,setup(__props){const learning=useVibe64Learning();const shown=computed(()=>learning.lessonShown);const action=computed(()=>shown.value?`Hide lesson`:`Show lesson`);return(_ctx,_cache)=>{return openBlock(),createBlock(VTooltip,{text:action.value,location:`bottom`},{activator:withCtx(({props:tooltipProps})=>[createBaseVNode(`button`,mergeProps(tooltipProps,{class:[`vibe64-lesson-toggle`,{"is-on":shown.value}],type:`button`,"aria-label":`Lesson`,"aria-pressed":shown.value?`true`:`false`,"aria-description":action.value,"data-test":`lesson-toggle`,"data-vibe64-guide":`lesson`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).toggleLesson())}),[createVNode(VIcon,{class:`vibe64-lesson-toggle__icon`,icon:unref(mdiSchoolOutline),size:`18`},null,8,[`icon`]),_cache[1]||(_cache[1]=createBaseVNode(`span`,{class:`vibe64-lesson-toggle__label`},`Lesson`,-1)),createBaseVNode(`span`,_hoisted_2$5,[createBaseVNode(`span`,_hoisted_3$5,[shown.value?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:`10`},null,8,[`icon`])):createCommentVNode(``,true)])])],16,_hoisted_1$7)]),_:1},8,[`text`])}}};var Vibe64LessonToggle_default=_plugin_vue_export_helper_default(_sfc_main$8,[[`__scopeId`,`data-v-7b9994e9`]]);var _hoisted_1$6={class:`vibe64-learning-step-bar__position`};var _hoisted_2$4={class:`vibe64-learning-step-bar__lesson`};var _hoisted_3$4={class:`vibe64-learning-step-bar__step`,"data-test":`learning-step-bar-position`};var _hoisted_4$3=[`aria-label`,`title`];var _hoisted_5$2={key:0,class:`vibe64-learning-step-bar__line`};var _hoisted_6$1={class:`vibe64-learning-step-bar__beat`,role:`status`,"data-test":`learning-step-bar-ai-required`};var _hoisted_7$1={key:1,class:`vibe64-learning-step-bar__line`};var _hoisted_8$1={key:0,class:`vibe64-learning-step-bar__beat`,"aria-live":`polite`,"data-test":`learning-step-bar-beat`};var _hoisted_9={key:6,class:`vibe64-learning-step-bar__note`,role:`status`};var _hoisted_10={key:7,class:`vibe64-learning-step-bar__note`,role:`status`,"data-test":`learning-step-bar-note`};var _hoisted_11={class:`vibe64-learning-step-bar__controls`,"aria-label":`Lesson navigation`};var _hoisted_12={key:2,class:`vibe64-learning-step-bar__lesson-toggle`};var NOT_SENT_NO_AI=`No AI is connected yet, so nothing was sent. Set up your AI, or press Next.`;var _sfc_main$7={__name:`Vibe64LearningStepBar`,setup(__props){const learning=useVibe64Learning();const lesson=computed(()=>learning.lesson.value);const steps=computed(()=>lesson.value?.steps||[]);const step=computed(()=>learning.currentStep.value);const player=learning.player;const index=computed(()=>steps.value.findIndex(value=>value.id===step.value?.id));const visible=computed(()=>learning.stepBarVisible);const ended=computed(()=>Boolean(lesson.value?.attempt?.ended));const aiRequired=computed(()=>learning.aiRequired);const busy=computed(()=>learning.state.busy);const status=computed(()=>step.value?learning.stepStatus(step.value.id):`not-started`);const beats=computed(()=>player.beats.value);const beat=computed(()=>player.beat.value);const beatIndex=computed(()=>player.index.value);const final=computed(()=>beats.value.length?player.final:true);const kind=computed(()=>step.value?.check?.kind||`none`);const verdict=computed(()=>{if(!final.value||ended.value||status.value===`passed`)return null;const stepId=step.value.id;if(kind.value===`self`)return{label:`Done`,run:()=>learning.done(stepId),busy:`done:${stepId}`};if(kind.value===`none`)return{label:`Mark as done`,run:()=>learning.done(stepId),busy:`done:${stepId}`};if(kind.value===`auto`)return{label:`Check my work`,run:check,busy:`check:${stepId}`};if(kind.value===`fact`)return{label:`Check now`,run:check,busy:`check:${stepId}`};if(kind.value===`review`)return{label:note.value?`Check again`:`Check my work`,run:checkReview,busy:`review:${stepId}`};if(kind.value===`choice`)return{label:`Answer in Lesson`,run:()=>learning.openLesson(),busy:``};return null});const beatText=computed(()=>{if(player.confirmed)return player.confirmed;if(reviewing.value)return`Checking your work with your AI…`;if(final.value&&status.value===`passed`&&kind.value===`review`)return learning.reviewNote(learning.savedReview(step.value.id))||`Passed ✓`;if(beat.value?.kind===`check`&&beat.value.target===`review`)return step.value?.check?.rubric||``;if(beat.value&&!(final.value&&status.value===`passed`))return beat.value.text;if(status.value===`passed`)return kind.value===`none`||kind.value===`self`?`Done ✓`:`Passed ✓`;return step.value?.title||``});const note=ref(``);watch(()=>step.value?.id,()=>{note.value=``});const setUpAiOffered=computed(()=>Boolean(aiOnboardingAvailable.value&&(aiRequired.value||note.value===NOT_SENT_NO_AI)));async function check(){const stepId=step.value.id;note.value=``;const result=await learning.runCheck(stepId);if(step.value?.id===stepId)note.value=checkNote(result)}const reviewing=computed(()=>Boolean(step.value&&busy.value===`review:${step.value.id}`));async function checkReview(){const stepId=step.value.id;note.value=``;const result=await learning.review(stepId);if(step.value?.id!==stepId||result?.outcome===`passed`&&beats.value.length)return;note.value=reviewRunNote(result,learning.state.lessonError)}async function showMe(){note.value=``;try{const result=await learning.showMe(step.value.id);if(result?.guide&&result.guide.shown===false)note.value=`That place is not visible on this page.`}catch(cause){note.value=String(cause?.message||`That place could not be shown.`)}}const stuckOffered=computed(()=>Boolean(!ended.value&&status.value!==`passed`&&!player.confirmed&&(beat.value?.kind===`do`||final.value&&[`auto`,`review`].includes(kind.value))));function askStuck(){note.value=``;try{learning.stuck(step.value.id)}catch(cause){note.value=String(cause?.message||`Colleague could not be asked.`)}}const canDoIt=computed(()=>Boolean(beat.value?.kind===`do`&&!player.confirmed&&!ended.value&&learning.doItForMeKind(beat.value)));const doing=ref(false);async function doItForMe(){note.value=``;doing.value=true;try{if(await learning.doItForMe()===false){const send=beat.value?.target===`send-message`;note.value=send&&aiOnboardingNeeded.value?NOT_SENT_NO_AI:send?`That could not be sent here. Send it yourself, or press Next.`:`That could not be done here. Do it yourself, or press Next.`}}catch(cause){note.value=String(cause?.message||`That could not be done here. Do it yourself, or press Next.`)}finally{doing.value=false}}watch(beat,()=>{note.value=``});const go=offset=>{const next=steps.value[index.value+offset];if(next)learning.selectStep(next.id)};const partLabel=computed(()=>`This step: part ${Math.min(beatIndex.value+1,beats.value.length)} of ${beats.value.length}`);const back=()=>beats.value.length?player.back():go(-1);const atStart=computed(()=>beats.value.length?player.atStart:index.value<=0);const lastStep=computed(()=>index.value>=steps.value.length-1);const forwardAction=computed(()=>{if(beats.value.length&&!player.final)return{label:`Next`,run:()=>player.next()};if(!lastStep.value)return{label:`Next step`,run:()=>beats.value.length?player.next():go(1)};return learning.complete&&!ended.value?{label:`Finish`,run:()=>learning.showFinished()}:null});const route=useRoute();const router=useRouter();const practiceSlug=computed(()=>learning.mode?.practiceSlug||lesson.value?.practiceProjectSlug||``);const practiceAway=computed(()=>Boolean(practiceSlug.value&&!ended.value&&projectSlugFromPathname(route.path)!==practiceSlug.value));const openPractice=()=>router.push(projectAppPath(practiceSlug.value));return(_ctx,_cache)=>{return visible.value?(openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-learning-step-bar-host`,onPointerenter:_cache[6]||(_cache[6]=$event=>unref(player).hold(true)),onPointerleave:_cache[7]||(_cache[7]=$event=>unref(player).hold(false)),onFocusin:_cache[8]||(_cache[8]=$event=>unref(player).hold(true)),onFocusout:_cache[9]||(_cache[9]=$event=>unref(player).hold(false))},[createBaseVNode(`section`,{class:normalizeClass([`vibe64-learning-step-bar`,{"vibe64-learning-step-bar--beats":beats.value.length}]),"aria-label":`Lesson steps`,"data-test":`learning-step-bar`,"data-vibe64-guide":`lesson-bar`},[createBaseVNode(`div`,_hoisted_1$6,[createBaseVNode(`span`,_hoisted_2$4,toDisplayString(lesson.value.title||lesson.value.code),1),createBaseVNode(`span`,_hoisted_3$4,[beats.value.length?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(`Step `+toDisplayString(index.value+1)+` of `+toDisplayString(steps.value.length),1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Step `+toDisplayString(index.value+1)+` of `+toDisplayString(steps.value.length)+`: `+toDisplayString(step.value.title),1)],64))]),beats.value.length?(openBlock(),createElementBlock(`span`,{key:0,class:`vibe64-learning-step-bar__dots`,role:`img`,"aria-label":partLabel.value,title:partLabel.value,"data-test":`learning-step-bar-dots`},[(openBlock(true),createElementBlock(Fragment,null,renderList(beats.value,(item,position)=>{return openBlock(),createElementBlock(`span`,{key:position,class:normalizeClass([`vibe64-learning-step-bar__dot`,{"is-done":position<beatIndex.value,"is-current":position===beatIndex.value}])},null,2)}),128))],8,_hoisted_4$3)):createCommentVNode(``,true)]),aiRequired.value?(openBlock(),createElementBlock(`div`,_hoisted_5$2,[createBaseVNode(`span`,_hoisted_6$1,toDisplayString(lesson.value.attempt.preparation.failure.message),1),setUpAiOffered.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-set-up-ai`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(` Set up your AI `,-1)])]),_:1})):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_7$1,[beats.value.length?(openBlock(),createElementBlock(`span`,_hoisted_8$1,toDisplayString(beatText.value),1)):step.value.required||status.value===`passed`?(openBlock(),createElementBlock(`span`,{key:1,class:normalizeClass([`vibe64-learning-step-bar__status`,`is-${status.value}`])},toDisplayString(step.value.required?unref(STEP_STATUS_LABELS)[status.value]:`Done`),3)):createCommentVNode(``,true),canDoIt.value?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-do-it`,loading:doing.value,onClick:doItForMe},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learning).doItForMeKind(beat.value)===`point`?`Show me`:`Do it for me`),1)]),_:1},8,[`loading`])):createCommentVNode(``,true),verdict.value?(openBlock(),createBlock(VBtn,{key:3,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-verdict`,disabled:Boolean(busy.value),loading:Boolean(verdict.value.busy)&&busy.value===verdict.value.busy,onClick:_cache[1]||(_cache[1]=$event=>verdict.value.run())},{default:withCtx(()=>[createTextVNode(toDisplayString(verdict.value.label),1)]),_:1},8,[`disabled`,`loading`])):createCommentVNode(``,true),stuckOffered.value?(openBlock(),createBlock(VBtn,{key:4,variant:`tonal`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-stuck`,class:normalizeClass({"vibe64-learning-step-bar__stuck--beside":canDoIt.value}),onClick:askStuck},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` I'm stuck `,-1)])]),_:1},8,[`class`])):createCommentVNode(``,true),!beats.value.length&&step.value.guide&&!ended.value?(openBlock(),createBlock(VBtn,{key:5,variant:`tonal`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-show-me`,onClick:showMe},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Show me `,-1)])]),_:1})):createCommentVNode(``,true),reviewing.value&&!beats.value.length?(openBlock(),createElementBlock(`span`,_hoisted_9,`Checking your work with your AI…`)):createCommentVNode(``,true),note.value?(openBlock(),createElementBlock(`span`,_hoisted_10,toDisplayString(note.value),1)):createCommentVNode(``,true),setUpAiOffered.value?(openBlock(),createBlock(VBtn,{key:8,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,"data-test":`learning-step-bar-set-up-ai`,onClick:_cache[2]||(_cache[2]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Set up your AI `,-1)])]),_:1})):createCommentVNode(``,true)])),createBaseVNode(`nav`,_hoisted_11,[beat.value?.kind===`show`&&!aiRequired.value?(openBlock(),createBlock(VBtn,{key:0,icon:unref(player).paused?unref(mdiPlay):unref(mdiPause),variant:`text`,size:`small`,"min-width":`40`,"min-height":`40`,"aria-label":unref(player).paused?`Play`:`Pause`,"data-test":`learning-step-bar-pause`,onClick:_cache[3]||(_cache[3]=$event=>unref(player).togglePause())},null,8,[`icon`,`aria-label`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`40`,"prepend-icon":unref(mdiChevronLeft),disabled:atStart.value,"data-test":`learning-step-bar-previous`,onClick:back},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Back `,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),forwardAction.value?(openBlock(),createBlock(VBtn,{key:1,variant:final.value&&verdict.value?`text`:`tonal`,color:`primary`,rounded:`pill`,"min-height":`40`,"append-icon":unref(mdiChevronRight),"data-test":`learning-step-bar-next`,onClick:_cache[4]||(_cache[4]=$event=>forwardAction.value.run())},{default:withCtx(()=>[createTextVNode(toDisplayString(forwardAction.value.label),1)]),_:1},8,[`variant`,`append-icon`])):createCommentVNode(``,true)]),unref(learning).lessonSwitchable?(openBlock(),createElementBlock(`span`,_hoisted_12,[createVNode(Vibe64LessonToggle_default)])):createCommentVNode(``,true),practiceAway.value?(openBlock(),createBlock(VBtn,{key:3,variant:`tonal`,rounded:`pill`,"min-height":`40`,"min-width":`40`,"prepend-icon":unref(mdiApplicationOutline),class:`vibe64-learning-step-bar__practice`,"aria-label":`Open practice project`,"data-test":`learning-step-bar-practice`,onClick:openPractice},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createBaseVNode(`span`,{class:`vibe64-learning-step-bar__practice-label`},`Open practice project`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`40`,"min-width":`40`,"prepend-icon":unref(mdiBookOpenPageVariantOutline),class:`vibe64-learning-step-bar__courses`,"aria-label":`Courses`,"data-test":`learning-step-bar-courses`,"data-vibe64-guide":`courses`,onClick:_cache[5]||(_cache[5]=$event=>unref(learning).openCourses(`courses`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createBaseVNode(`span`,{class:`vibe64-learning-step-bar__courses-label`},`Courses`,-1)])]),_:1},8,[`prepend-icon`]),beat.value?.kind===`show`&&!aiRequired.value?(openBlock(),createElementBlock(`span`,{key:4,class:`vibe64-learning-step-bar__progress`,"aria-hidden":`true`,style:normalizeStyle({transform:`scaleX(${unref(player).progress})`})},null,4)):createCommentVNode(``,true)],2)],32)):createCommentVNode(``,true)}}};var Vibe64LearningStepBar_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-1bc45eb7`]]);var _hoisted_1$5={class:`vibe64-learning-stage__body`};var _hoisted_2$3=[`inert`];var _hoisted_3$3={key:0,class:`vibe64-learning-stage__anchor`};var _hoisted_4$2={class:`vibe64-learning-stage__lesson`,"data-test":`learning-stage-lesson`};var _sfc_main$6={__name:`Vibe64LearningStage`,props:{studio:{type:Boolean,default:false}},setup(__props){const props=__props;const learning=useVibe64Learning();const route=useRoute();const router=useRouter();const{smAndDown}=useDisplay();const available=computed(()=>Boolean(props.studio&&learning.learnMode&&learning.lessonAttemptId));const lessonShown=computed(()=>available.value&&lessonShownIn(route.query));function hideLesson(){if(lessonShownIn(route.query))router.replace({path:route.path,query:withoutLesson(route.query)})}watch(()=>[route.path,lessonShownIn(route.query)],([path,shown],[previousPath,wasShown]=[])=>{if(path===previousPath||!wasShown||shown||!available.value||smAndDown.value)return;router.replace({path,query:{...route.query,lesson:`1`}})},{flush:`post`});const layout=inject(VIBE64_COLLEAGUE_LAYOUT_KEY);const owner={studio:true,projectSlug:``,ready:true,projectVisible:true,get lessonVisible(){return lessonShown.value},get lessonShown(){return lessonShown.value},hideLesson,chatVisible:false,showProject(){},showChat(){}};if(props.studio){watch(()=>props.studio,()=>{layout.value=owner},{immediate:true});onBeforeUnmount(()=>{if(layout.value===owner)layout.value=null})}return(_ctx,_cache)=>{return!__props.studio?(openBlock(),createBlock(Vibe64LearningStepBar_default,{key:0})):(openBlock(),createElementBlock(`div`,{key:1,class:normalizeClass([`vibe64-learning-stage`,{"is-covered":lessonShown.value,"is-phone":unref(smAndDown)}]),"data-test":`learning-stage`},[createVNode(Vibe64LearningStepBar_default,{class:`vibe64-learning-stage__bar`}),createBaseVNode(`div`,_hoisted_1$5,[createBaseVNode(`div`,{class:`vibe64-learning-stage__page`,inert:lessonShown.value&&unref(smAndDown)?true:void 0},[renderSlot(_ctx.$slots,`default`,{},void 0,true)],8,_hoisted_2$3),lessonShown.value?(openBlock(),createElementBlock(`div`,_hoisted_3$3,[createBaseVNode(`aside`,_hoisted_4$2,[createVNode(Vibe64LessonSheet_default)])])):createCommentVNode(``,true)])],2))}}};var Vibe64LearningStage_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-1e09ffae`]]);var _hoisted_1$4={class:`vibe64-learner-art`,viewBox:`0 0 320 240`,"aria-hidden":`true`,focusable:`false`};var _sfc_main$5={__name:`Vibe64LearnerIllustration`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`svg`,_hoisted_1$4,[..._cache[0]||(_cache[0]=[createStaticVNode(`<circle class="vibe64-learner-art__halo" cx="160" cy="130" r="108" data-v-e1a49930></circle><circle class="vibe64-learner-art__disc" cx="160" cy="134" r="88" data-v-e1a49930></circle><ellipse class="vibe64-learner-art__shadow" cx="160" cy="216" rx="64" ry="5" data-v-e1a49930></ellipse><polygon class="vibe64-learner-art__bit vibe64-learner-art__bit--primary" points="58,70 80,62 72,84" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__bit vibe64-learner-art__bit--outline" points="266,150 284,160 264,170" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__bit vibe64-learner-art__bit--learning" points="78,176 90,166 94,182" data-v-e1a49930></polygon><circle class="vibe64-learner-art__bit vibe64-learner-art__bit--learning" cx="94" cy="118" r="6" data-v-e1a49930></circle><circle class="vibe64-learner-art__bit vibe64-learner-art__bit--ring" cx="56" cy="138" r="8" data-v-e1a49930></circle><circle class="vibe64-learner-art__bit vibe64-learner-art__bit--primary" cx="246" cy="196" r="5" data-v-e1a49930></circle><circle class="vibe64-learner-art__bit vibe64-learner-art__bit--primary" cx="284" cy="104" r="4" data-v-e1a49930></circle><g class="vibe64-learner-art__wave" data-v-e1a49930><polygon class="vibe64-learner-art__body" points="174,170 190,160 230,88" data-v-e1a49930></polygon><circle class="vibe64-learner-art__skin" cx="230" cy="86" r="10" data-v-e1a49930></circle></g><polygon class="vibe64-learner-art__body" points="160,116 216,214 104,214" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__collar" points="148,132 172,132 160,150" data-v-e1a49930></polygon><circle class="vibe64-learner-art__skin" cx="160" cy="102" r="28" data-v-e1a49930></circle><circle class="vibe64-learner-art__ink" cx="150" cy="100" r="3.4" data-v-e1a49930></circle><circle class="vibe64-learner-art__ink" cx="170" cy="100" r="3.4" data-v-e1a49930></circle><circle class="vibe64-learner-art__cheek" cx="143" cy="110" r="5" data-v-e1a49930></circle><circle class="vibe64-learner-art__cheek" cx="177" cy="110" r="5" data-v-e1a49930></circle><path class="vibe64-learner-art__smile" d="M150 110 A10 10 0 0 0 170 110 Z" data-v-e1a49930></path><polygon class="vibe64-learner-art__cap" points="140,80 180,80 176,90 144,90" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__cap" points="120,74 160,60 200,74 160,88" data-v-e1a49930></polygon><polyline class="vibe64-learner-art__tassel" points="160,74 192,80 194,94" data-v-e1a49930></polyline><circle class="vibe64-learner-art__tassel-end" cx="194" cy="97" r="4.5" data-v-e1a49930></circle><g class="vibe64-learner-art__idea" data-v-e1a49930><polygon class="vibe64-learner-art__ray" points="250,6 256,6 253,16" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__ray" points="222,22 227,17 232,27" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__ray" points="284,22 279,17 274,27" data-v-e1a49930></polygon><polygon class="vibe64-learner-art__ray" points="292,44 292,50 282,47" data-v-e1a49930></polygon><circle class="vibe64-learner-art__bulb" cx="253" cy="44" r="17" data-v-e1a49930></circle><polygon class="vibe64-learner-art__base" points="245,62 261,62 257,72 249,72" data-v-e1a49930></polygon></g>`,24)])])}}};var Vibe64LearnerIllustration_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-e1a49930`]]);var _hoisted_1$3={class:`vibe64-learn-welcome`,"data-test":`learn-welcome`};var _sfc_main$4={__name:`Vibe64LearnWelcome`,setup(__props){const learning=useVibe64Learning();return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$3,[createVNode(Vibe64LearnerIllustration_default),_cache[2]||(_cache[2]=createBaseVNode(`h2`,{class:`vibe64-learn-welcome__title`},`Ready to learn something new?`,-1)),_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`vibe64-learn-welcome__text`},` Pick a lesson and Vibe64 sets up a practice project for you, with a teacher beside you every step of the way. `,-1)),createVNode(VBtn,{class:`vibe64-learn-welcome__choose`,"data-test":`choose-lesson`,"prepend-icon":unref(mdiSchoolOutline),rounded:`pill`,size:`large`,variant:`flat`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).openCourses(`courses`))},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Choose a lesson `,-1)])]),_:1},8,[`prepend-icon`])])}}};var Vibe64LearnWelcome_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-9f25f6fb`]]);var _hoisted_1$2={key:0,class:`studio-screen__lesson-layout`};var _hoisted_2$2={class:`studio-screen__no-lesson-chat`};var _hoisted_3$2={class:`studio-screen__no-project-text`};var _sfc_main$3={__name:`Vibe64NoProjectPane`,props:{chatCollapsed:{type:Boolean,default:false},projectPane:{type:String,default:`preview`},section:{type:String,default:``}},emits:[`select`],setup(__props){const learning=useVibe64Learning();const noLesson=computed(()=>Boolean(learning.mode)&&!learning.lessonAttemptId);const lesson=computed(()=>Boolean(learning.learnMode&&learning.lessonAttemptId));return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64SessionFrame_default,{class:`studio-screen__no-project`,"chat-collapsed":__props.chatCollapsed||lesson.value,"data-test":`no-project-pane`},{default:withCtx(()=>[lesson.value?(openBlock(),createElementBlock(`div`,_hoisted_1$2,[createVNode(Vibe64LearningLessonPane_default)])):(openBlock(),createBlock(Vibe64EmptySessionLayout_default,{key:1,"chat-collapsed":__props.chatCollapsed,dashboard:__props.projectPane===`dashboard`,hint:noLesson.value?``:`No project selected`,"preview-title":noLesson.value?``:`No project selected`},createSlots({dashboard:withCtx(()=>[createVNode(Vibe64DashboardShell_default,{"no-project":``,section:__props.section,onSelect:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`select`,$event))},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$2,[createBaseVNode(`p`,null,toDisplayString(noLesson.value?`No lesson in progress`:`No project selected`),1),noLesson.value?(openBlock(),createBlock(VBtn,{key:0,class:`studio-screen__choose-lesson`,"data-test":`choose-lesson`,"prepend-icon":unref(mdiSchoolOutline),variant:`tonal`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).openCourses(`courses`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Choose a lesson `,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)])]),_:1},8,[`section`])]),_:2},[noLesson.value?{name:`chat`,fn:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$2,[_cache[2]||(_cache[2]=createBaseVNode(`p`,{class:`studio-screen__no-lesson-note`},` Your teacher chats with you here once a lesson starts. `,-1)),createVNode(Vibe64LearnWelcome_default,{class:`studio-screen__no-lesson-welcome`})])]),key:`0`}:void 0,noLesson.value?{name:`preview`,fn:withCtx(()=>[createVNode(Vibe64LearnWelcome_default)]),key:`1`}:void 0]),1032,[`chat-collapsed`,`dashboard`,`hint`,`preview-title`]))]),_:1},8,[`chat-collapsed`])}}};var Vibe64NoProjectPane_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-9e31d2ce`]]);var _sfc_main$2={__name:`Vibe64LearningCoursesItem`,setup(__props){const learning=useVibe64Learning();return(_ctx,_cache)=>{return unref(learning).learnMode?(openBlock(),createBlock(VListItem,{key:0,"data-test":`learning-courses`,"data-vibe64-guide":`courses`,"prepend-icon":unref(mdiSchoolOutline),subtitle:`Start or continue a lesson`,title:`Courses`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).openCourses())},null,8,[`prepend-icon`])):createCommentVNode(``,true)}}};var _hoisted_1$1={class:`studio-home-shell-project-controls`};var _hoisted_2$1={key:1,class:`studio-home-shell-project-tabs studio-home-shell-project-tabs--desktop`,role:`tablist`,"aria-label":`Project`};var _hoisted_3$1=[`data-vibe64-guide`,`aria-label`,`title`,`aria-selected`,`onClick`];var _hoisted_4$1={key:2,class:`studio-home-shell-lesson-toggle`};var _hoisted_5$1=[`id`];var _hoisted_6=[`id`];var _hoisted_7=[`aria-label`,`title`];var _hoisted_8={class:`studio-home-shell-project-mobile-action__label`};var _sfc_main$1={__name:`Vibe64ProjectPaneControls`,props:{chatCollapsed:{default:false,type:Boolean},chatColumnVisible:{default:false,type:Boolean},chatToggleIcon:{default:``,type:String},chatToggleTitle:{default:``,type:String},lessonToggleVisible:{default:false,type:Boolean},mobileProjectAction:{default:null,type:Object},mobileProjectActionVisible:{default:false,type:Boolean},previewToolbarHostId:{default:``,type:String},previewToolbarHostVisible:{default:false,type:Boolean},projectPane:{default:``,type:String},projectPaneNavigationVisible:{default:false,type:Boolean},projectSlug:{default:``,type:String},projectTabs:{default:()=>[],type:Array},usageRecordingHostId:{default:``,type:String}},emits:[`select-pane`,`update:chat-collapsed`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$1,[__props.chatColumnVisible?(openBlock(),createBlock(VBtn,{key:0,class:`studio-home-shell-chat-toggle`,"data-vibe64-guide":`pane-switch`,density:`comfortable`,icon:__props.chatToggleIcon,size:`small`,title:__props.chatToggleTitle,type:`button`,variant:`tonal`,"aria-label":__props.chatToggleTitle,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:chat-collapsed`,!__props.chatCollapsed))},null,8,[`icon`,`title`,`aria-label`])):createCommentVNode(``,true),__props.projectPaneNavigationVisible?(openBlock(),createElementBlock(`div`,_hoisted_2$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.projectTabs,tab=>{return openBlock(),createElementBlock(`button`,{key:tab.id,class:normalizeClass([`studio-home-shell-project-tab`,{"studio-home-shell-project-tab--active":__props.projectPane===tab.id}]),role:`tab`,type:`button`,"data-vibe64-guide":tab.id,"aria-label":tab.name,title:tab.name,"aria-selected":__props.projectPane===tab.id?`true`:`false`,onClick:$event=>emit(`select-pane`,tab.id)},toDisplayString(tab.label),11,_hoisted_3$1)}),128))])):createCommentVNode(``,true),__props.lessonToggleVisible&&__props.projectPaneNavigationVisible?(openBlock(),createElementBlock(`div`,_hoisted_4$1,[createVNode(Vibe64LessonToggle_default)])):createCommentVNode(``,true),__props.projectSlug?(openBlock(),createElementBlock(`div`,{key:3,id:__props.usageRecordingHostId,class:`studio-home-shell-usage-recording-host`},null,8,_hoisted_5$1)):createCommentVNode(``,true),__props.previewToolbarHostVisible?(openBlock(),createElementBlock(`div`,{key:4,id:__props.previewToolbarHostId,class:`studio-home-shell-preview-toolbar-host`},null,8,_hoisted_6)):createCommentVNode(``,true),__props.mobileProjectActionVisible&&__props.mobileProjectAction?(openBlock(),createElementBlock(`button`,{key:5,class:`studio-home-shell-project-mobile-action`,"data-vibe64-guide":`pane-switch`,type:`button`,"aria-label":__props.mobileProjectAction.ariaLabel,title:__props.mobileProjectAction.name,onClick:_cache[1]||(_cache[1]=$event=>emit(`select-pane`,__props.mobileProjectAction.pane))},[createVNode(VIcon,{class:`studio-home-shell-project-mobile-action__icon`,icon:__props.mobileProjectAction.icon,size:`18`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_8,toDisplayString(__props.mobileProjectAction.label),1),createVNode(VIcon,{class:`studio-home-shell-project-mobile-action__chevron`,icon:unref(mdiChevronRight),size:`15`},null,8,[`icon`])],8,_hoisted_7)):createCommentVNode(``,true)])}}};var Vibe64ProjectPaneControls_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-9d713016`]]);var DRAWER_HIDDEN_CLASS=`studio-shell-drawer-hidden`;function setDrawerToggleHidden(hidden){if(typeof document===`undefined`)return;document.body.classList.toggle(DRAWER_HIDDEN_CLASS,Boolean(hidden))}function useStudioShellDrawer({hidden}){const{drawerDefaultOpen,setDrawerDefaultOpen,setDrawerOpen}=useShellLayoutState();const originalDrawerDefaultOpen=drawerDefaultOpen.value;watchEffect(()=>{const drawerHidden=Boolean(typeof hidden===`function`?hidden():hidden);setDrawerToggleHidden(drawerHidden);if(drawerHidden){setDrawerDefaultOpen(false);setDrawerOpen(false)}});onBeforeUnmount(()=>{setDrawerToggleHidden(false);setDrawerDefaultOpen(originalDrawerDefaultOpen);setDrawerOpen(originalDrawerDefaultOpen)})}function useVibe64ProjectsResource({enabled=true,projectSlug=``,fallbackLoadError=`Projects could not load.`,requestRecoveryLabel=`Projects`}={}){const slug=computed(()=>normalizeText(readRefOrGetterValue(projectSlug)));const selectionPath=computed(()=>projectSelectionGateEndpoint({projectSlug:slug.value,scopeSelectionToCurrentProject:Boolean(slug.value)}));const resource=useEndpointResource({enabled,fallbackLoadError,path:selectionPath,queryKey:computed(()=>projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:slug.value,scopeSelectionToCurrentProject:Boolean(slug.value),surfaceId:`app`})),refreshOnPull:true,requestRecoveryLabel});const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value,fallbackLoadError)||resource.loadError.value);const currentProject=computed(()=>resource.data.value?.currentProject||null);const projectsRoot=computed(()=>String(resource.data.value?.projectsRoot||``));const targetRoot=computed(()=>String(resource.data.value?.targetRoot||``));const projects=computed(()=>Array.isArray(resource.data.value?.projects)?resource.data.value.projects:[]);return{currentProject,data:resource.data,isFetching:resource.isFetching,isInitialLoading:resource.isInitialLoading,isLoading:resource.isLoading,isRefetching:resource.isRefetching,loadError,projects,projectsRoot,reload:resource.reload,resource,targetRoot}}function normalizeText(value=``){return String(value||``).trim()}var HOME_SHELL_CLASS=`studio-home-shell-active`;var PREVIEW_TOOLBAR_HOST_ID=`studio-home-shell-preview-toolbar`;var USAGE_RECORDING_HOST_ID=`studio-home-shell-usage-recording`;var USAGE_RECORDING_STRIP_HOST_ID=`studio-home-shell-usage-recording-strip`;var PHONE_BAR_MEDIA_QUERY=`(max-width: 600px)`;var PROJECT_RUNTIME_OPEN_API_PATH=`/api/vibe64/project-runtime/open`;var PROJECT_PANES=Object.freeze({preview:Object.freeze({id:`preview`,label:`Preview`,name:`Preview`,icon:mdiApplicationOutline}),dashboard:Object.freeze({id:`dashboard`,label:`Dash`,name:`Dashboard`,icon:mdiViewDashboardOutline})});function projectHeaderTitle(slug=``,{mode=null,lesson=null}={}){if(!slug)return`No project selected`;return projectDisplayName({slug},mode?.practiceSlug===slug?{lessonTitle:mode.lessonTitle,lessonCode:mode.lessonCode}:lesson?.practiceProjectSlug===slug?{lessonTitle:lesson.title,lessonCode:lesson.code}:{})}function projectPaneTabs({projectSlug=``,lesson=false}={}){const{preview,dashboard}=PROJECT_PANES;return!projectSlug&&lesson?[]:[preview,dashboard]}function nextProjectPane(tabs=[],pane=``){const next=tabs[(tabs.findIndex(tab=>tab.id===pane)+1)%tabs.length]||null;return next&&{ariaLabel:`Go to ${next.name.toLowerCase()}`,icon:next.icon,label:next.label,name:next.name,pane:next.id}}function useVibe64AppPage(){const route=useRoute();const router=useRouter();const pageError=ref(``);const chatCollapsed=ref(false);const mobilePaneLayout=ref(false);const phoneBar=ref(false);const projectPaneNavigationReadySlug=ref(``);const lastDashboardRoutePath=ref(``);let stopMediaQueries=[];const projectSlug=computed(()=>projectSlugFromRoute(route));const queryClient=useQueryClient();const feedback=useShellWebErrorRuntime();const projectOpenRevision=ref(0);const projectOpenKey=computed(()=>`${projectSlug.value}:${projectOpenRevision.value}`);const openedProjectKey=ref(``);const projectOpenFailure=ref(null);const projectRuntimeReady=computed(()=>!projectSlug.value||openedProjectKey.value===projectOpenKey.value);const projectRuntimeError=computed(()=>projectOpenFailure.value?.key===projectOpenKey.value?projectOpenFailure.value.message:``);let attemptedProjectOpenKey=``;const projectSelection=useVibe64ProjectsResource({enabled:computed(()=>Boolean(projectSlug.value)),fallbackLoadError:`Project selection could not load.`,projectSlug,requestRecoveryLabel:`Project selection`});const openProjectRuntimeCommand=useCommand({access:`never`,apiSuffix:`/vibe64/project-runtime/open`,buildCommandOptions:(_payload,{context})=>({method:`POST`,path:scopedDevelopmentApiUrl(PROJECT_RUNTIME_OPEN_API_PATH,context?.projectSlug)}),buildRawPayload:(_model,{context})=>({reason:String(context?.reason||`project-open`)}),clearOnRouteChange:false,fallbackRunError:`Project runtime could not be marked open.`,messages:{error:`Project runtime could not be marked open.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.project-runtime.open`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`POST`});const projectLoadError=projectSelection.loadError;const projects=projectSelection.projects;const learning=useVibe64Learning();const projectTitle=computed(()=>projectHeaderTitle(projectSlug.value,{mode:learning.mode,lesson:learning.lesson.value}));const developmentBasePath=computed(()=>projectAppPath(projectSlug.value));const dashboardBasePath=computed(()=>`${developmentBasePath.value}/dashboard`);const dashboardRouteActive=computed(()=>routePathContainsSection(route.path,dashboardBasePath.value)&&normalizeRoutePath(route.path)!==normalizeRoutePath(dashboardBasePath.value));const lessonPaneAvailable=computed(()=>Boolean(learning.learnMode&&learning.lessonAttemptId));const lessonShown=computed(()=>lessonPaneAvailable.value&&(!projectSlug.value||lessonShownIn(route.query)));const emptyPane=computed(()=>route.query?.pane===`dashboard`?`dashboard`:`preview`);const emptySection=computed(()=>typeof route.query?.section===`string`?route.query.section:``);const projectPane=computed(()=>!projectSlug.value?emptyPane.value:dashboardRouteActive.value?`dashboard`:`preview`);const projectTabs=computed(()=>projectPaneTabs({projectSlug:projectSlug.value,lesson:lessonPaneAvailable.value}));const chatColumnVisible=computed(()=>Boolean(projectSlug.value)||!lessonPaneAvailable.value);const learnMode=computed(()=>learning.learnMode);const switcherProjects=computed(()=>{const open=openProjectSwitcherProjects(projects.value);return learnMode.value?open.filter(project=>project.slug===learning.mode?.practiceSlug):open});const chatToggleIcon=computed(()=>{if(mobilePaneLayout.value)return chatCollapsed.value?mdiChevronLeft:mdiChevronRight;return chatCollapsed.value?mdiChevronRight:mdiChevronLeft});const chatToggleTitle=computed(()=>{if(mobilePaneLayout.value)return chatCollapsed.value?`Show chat`:`Show project`;return chatCollapsed.value?`Show chat`:`Collapse chat`});const mobileProjectAction=computed(()=>nextProjectPane(projectTabs.value,projectPane.value));const projectPaneNavigationVisible=computed(()=>projectTabs.value.length>1&&(!projectSlug.value||projectPaneNavigationReadySlug.value===projectSlug.value));const mobileProjectActionVisible=computed(()=>projectPaneNavigationVisible.value&&mobilePaneLayout.value&&(chatCollapsed.value||!chatColumnVisible.value));const mobilePaneSwipeEnabled=computed(()=>projectPaneNavigationVisible.value&&mobilePaneLayout.value&&chatColumnVisible.value);const projectVisible=computed(()=>!mobilePaneLayout.value||chatCollapsed.value||!chatColumnVisible.value);const lessonToggleVisible=computed(()=>Boolean(projectSlug.value)&&lessonPaneAvailable.value&&!mobilePaneLayout.value);const colleagueLayout=inject(VIBE64_COLLEAGUE_LAYOUT_KEY,null);const layoutOwner={get projectSlug(){return projectSlug.value},get ready(){return projectPaneNavigationVisible.value},get projectVisible(){return projectVisible.value},get lessonVisible(){return projectVisible.value&&lessonShown.value},get lessonShown(){return lessonShown.value},get lessonToggleOnBar(){return mobilePaneLayout.value},hideLesson,get chatVisible(){return chatColumnVisible.value&&!chatCollapsed.value},showProject:showProjectPane,showChat(){setChatCollapsed(false)}};const previewToolbarHostVisible=computed(()=>previewToolbarTargetVisible({chatCollapsed:chatCollapsed.value,mobilePaneLayout:mobilePaneLayout.value,projectPane:projectPane.value,projectPaneNavigationVisible:projectPaneNavigationVisible.value}));const previewToolbarTeleportTarget=computed(()=>previewToolbarHostVisible.value?`#${PREVIEW_TOOLBAR_HOST_ID}`:``);const usageRecordingTeleportTarget=computed(()=>projectSlug.value?`#${phoneBar.value?USAGE_RECORDING_STRIP_HOST_ID:USAGE_RECORDING_HOST_ID}`:``);useStudioShellDrawer({hidden:true});useRealtimeEvent({enabled:computed(()=>Boolean(projectSlug.value)),event:VIBE64_PROJECT_CHANGED_EVENT,matches:({payload={}}={})=>projectRuntimeClosedPayloadMatches(payload,projectSlug.value,{practice:isPracticeProjectSlug(projectSlug.value)}),onEvent:({payload={}}={})=>{handleProjectRuntimeClosed(payload)}});useRealtimeEvent({event:VIBE64_PROJECT_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.githubRefresh===true,onEvent:()=>invalidateGithubProjectQueries(queryClient,scopedDevelopmentApiUrl(`/api/vibe64/issues`,projectSlug.value))});useRealtimeEvent({event:VIBE64_PROJECT_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&Number.isSafeInteger(payload.issueComment?.number)&&payload.issueComment.number>0&&!vibe64RealtimePayloadFromCurrentTab(payload),onEvent:async({payload})=>{const comment=payload.issueComment;const basePath=scopedDevelopmentApiUrl(`/api/vibe64/issues`,projectSlug.value);feedback.report({source:`vibe64.issues.activity`,message:`${comment.author||`Someone`} commented on issue #${comment.number}.`,intent:`action-feedback`,severity:`info`,channel:`snackbar`,dedupeKey:`vibe64.issueComment:${payload.projectSlug}:${comment.id}`});await invalidateGithubIssueQueries(queryClient,basePath,`${basePath}/${comment.number}`)}});watch(projectSlug,retryProjectRuntime,{flush:`sync`});watch(lessonShown,shown=>{if(shown&&mobilePaneLayout.value)setChatCollapsed(true)});watch([projectOpenKey,()=>openProjectRuntimeCommand.canRun,()=>openProjectRuntimeCommand.isRunning],([key,canRun,running])=>{if(!projectSlug.value||!canRun||running||attemptedProjectOpenKey===key)return;attemptedProjectOpenKey=key;openProjectRuntimeForSlug(projectSlug.value,{key})},{immediate:true});const removeProjectNavigation=router.afterEach((to,_from,failure)=>{if(projectRuntimeError.value&&isNavigationFailure(failure,NavigationFailureType.duplicated)&&projectSlugFromRoute(to)===projectSlug.value)retryProjectRuntime()});onMounted(()=>{setHomeShellActive(true);stopMediaQueries=[followMediaQuery(`(max-width: 980px)`,matches=>{mobilePaneLayout.value=matches}),followMediaQuery(PHONE_BAR_MEDIA_QUERY,matches=>{phoneBar.value=matches})];if(mobilePaneLayout.value&&vibe64SessionToolIdFromDashboardPath(route.path,dashboardBasePath.value))setChatCollapsed(true);if(colleagueLayout)colleagueLayout.value=layoutOwner});onBeforeUnmount(()=>{if(colleagueLayout?.value===layoutOwner)colleagueLayout.value=null;removeProjectNavigation();setHomeShellActive(false);for(const stop of stopMediaQueries.splice(0))stop()});watch(()=>[dashboardBasePath.value,route.path].join(`|`),()=>{if(dashboardRouteActive.value)lastDashboardRoutePath.value=normalizeRoutePath(route.path)},{immediate:true});return{chatCollapsed,chatColumnVisible,chatToggleIcon,chatToggleTitle,dashboardRouteActive,handleProjectSelectionDeleted,handleProjectSelectionError,handleProjectSelectionMissing,handleProjectSelectionReady,mdiChevronDown,mdiChevronRight,mobilePaneSwipeEnabled,mobileProjectAction,mobileProjectActionVisible,openProject,pageError,previewToolbarHostId:PREVIEW_TOOLBAR_HOST_ID,previewToolbarHostVisible,previewToolbarTeleportTarget,usageRecordingHostId:USAGE_RECORDING_HOST_ID,usageRecordingStripHostId:USAGE_RECORDING_STRIP_HOST_ID,usageRecordingTeleportTarget,projectLoadError,projectPane,emptySection,selectEmptySection:section=>void router.replace({query:{...route.query,pane:`dashboard`,section}}),projectPaneNavigationVisible,projectRuntimeError,projectRuntimeReady,projectSlug,projectTabs,retryProjectRuntime,selectProjectPane,setChatCollapsed,showProjectPane,switcherProjects,learnMode,lessonShown,lessonToggleVisible,projectTitle};function setHomeShellActive(active){if(typeof document===`undefined`)return;document.body.classList.toggle(HOME_SHELL_CLASS,Boolean(active))}function hideLesson(){if(lessonShownIn(route.query))router.replace({path:route.path,query:withoutLesson(route.query)})}function selectProjectPane(pane=``){const known=projectTabs.value.some(tab=>tab.id===pane)?pane:`preview`;if(!projectSlug.value){router.replace({query:{...route.query,pane:known}});return}if(mobilePaneLayout.value)setChatCollapsed(true);if(known===`dashboard`){router.push(dashboardReturnPath({dashboardBasePath:dashboardBasePath.value,lastDashboardRoutePath:lastDashboardRoutePath.value}));return}router.push(developmentBasePath.value)}function openProject(project={}){const slug=String(project.slug||``).trim();if(!slug)return;if(slug===projectSlug.value&&route.path!==projectAppPath(slug))retryProjectRuntime();router.push(projectAppPath(slug))}async function openProjectRuntimeForSlug(slug=``,{reason=`project-open`,key=projectOpenKey.value}={}){const project=String(slug||``).trim();if(!project)return null;try{const result=await openProjectRuntimeCommand.run({projectSlug:project,reason});if(result?.ok!==true||result?.runtime?.open!==true)throw new Error(result?.error||`Project could not open. Try again.`);if(key===projectOpenKey.value)openedProjectKey.value=key;return result}catch(error){if(key===projectOpenKey.value)projectOpenFailure.value={key,message:String(error?.message||`Project could not open. Try again.`)};vibe64SessionDebugLog(`client.projectRuntime.open.error`,{error:vibe64SessionDebugError(error),projectSlug:project,reason});return null}}function retryProjectRuntime(){projectOpenRevision.value+=1}function handleProjectRuntimeClosed(payload={}){const closedSlug=String(payload.projectSlug||projectSlug.value||``).trim();pageError.value=String(payload.message||`Project is closed.`);const listPath=projectListPath();router.push(listPath?{path:listPath,query:{projectClosed:closedSlug}}:`/app`)}function showProjectPane(){if(mobilePaneLayout.value)setChatCollapsed(true)}function setChatCollapsed(collapsed=false){chatCollapsed.value=Boolean(collapsed)}function handleProjectSelectionReady(selection={}){pageError.value=``;const selectedSlug=selectedProjectSlug(selection);setProjectPaneNavigationReady(Boolean(selectedSlug&&selectedSlug===projectSlug.value))}function handleProjectSelectionMissing(){pageError.value=``;setProjectPaneNavigationReady(false)}function handleProjectSelectionDeleted(){pageError.value=``;setProjectPaneNavigationReady(false)}function handleProjectSelectionError(error){pageError.value=String(error||``);setProjectPaneNavigationReady(false)}function setProjectPaneNavigationReady(ready=false){projectPaneNavigationReadySlug.value=ready?projectSlug.value:``}}function projectRuntimeClosedPayloadMatches(payload={},currentSlug=``,{practice=false}={}){const projectSlug=String(currentSlug||``).trim();if(!projectSlug||String(payload?.projectSlug||``).trim()!==projectSlug)return false;if(practice&&String(payload?.runtimeCloseReason||``).trim()===`project-delete`)return false;return String(payload?.action||``).trim()===`runtime-closed`&&payload?.runtime?.open===false}function openProjectSwitcherProjects(projects=[]){if(!Array.isArray(projects))return[];return projects.filter(project=>project?.runtime?.open===true).sort((left,right)=>String(left?.slug||``).localeCompare(String(right?.slug||``)))}function followMediaQuery(query,sync){if(typeof window===`undefined`||typeof window.matchMedia!==`function`)return()=>{};const media=window.matchMedia(query);const listener=()=>sync(Boolean(media.matches));listener();if(typeof media.addEventListener===`function`){media.addEventListener(`change`,listener);return()=>media.removeEventListener(`change`,listener)}media.addListener?.(listener);return()=>media.removeListener?.(listener)}function previewToolbarTargetVisible({chatCollapsed=false,mobilePaneLayout=false,projectPane=``,projectPaneNavigationVisible=false}={}){return Boolean(projectPaneNavigationVisible&&projectPane===`preview`&&(!mobilePaneLayout||chatCollapsed))}function dashboardReturnPath({dashboardBasePath=``,lastDashboardRoutePath=``}={}){const base=normalizeRoutePath(dashboardBasePath);const last=normalizeRoutePath(lastDashboardRoutePath);return routePathContainsSection(last,base)&&last!==base?last:`${base}/env`}function selectedProjectSlug(selection={}){const currentProject=selection?.currentProject&&typeof selection.currentProject===`object`&&!Array.isArray(selection.currentProject)?selection.currentProject:{};return String(currentProject.slug||selection?.projectSlug||selection?.slug||``).trim()}var _slug__exports=__exportAll({default:()=>_slug__default});var _hoisted_1={class:`studio-home-shell-title-area`};var _hoisted_2={class:`studio-home-shell-project-name`};var _hoisted_3=[`id`];var _hoisted_4={class:`generated-ui-screen generated-ui-screen--studio studio-screen d-flex flex-column ga-3`};var _hoisted_5={key:2,class:`studio-screen__gate-scroll`};var githubActorHostId=`studio-home-shell-github-actor`;var _sfc_main={__name:`[slug]`,setup(__props){const githubActorTeleportTarget=`#${githubActorHostId}`;const{chatCollapsed,chatColumnVisible,chatToggleIcon,chatToggleTitle,dashboardRouteActive,emptySection,handleProjectSelectionDeleted,handleProjectSelectionError,handleProjectSelectionMissing,handleProjectSelectionReady,learnMode,lessonToggleVisible,mdiChevronDown,mobilePaneSwipeEnabled,mobileProjectAction,mobileProjectActionVisible,openProject,pageError,previewToolbarHostId,previewToolbarHostVisible,previewToolbarTeleportTarget,usageRecordingHostId,usageRecordingStripHostId,usageRecordingTeleportTarget,projectLoadError,projectPane,projectPaneNavigationVisible,projectRuntimeError,projectRuntimeReady,projectSlug,projectTabs,retryProjectRuntime,selectEmptySection,selectProjectPane,setChatCollapsed,showProjectPane,switcherProjects,projectTitle}=useVibe64AppPage();return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout_default,{"chat-collapsed":unref(chatCollapsed),"mobile-pane-swipe-enabled":unref(mobilePaneSwipeEnabled),"onUpdate:chatCollapsed":unref(setChatCollapsed)},{"top-left":withCtx(()=>[createBaseVNode(`div`,{class:normalizeClass([`studio-home-shell-heading`,{"studio-home-shell-heading--chat-collapsed":unref(chatCollapsed)}])},[createBaseVNode(`div`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(VMenu,{location:`bottom start`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps({class:`studio-home-shell-project-selector`,disabled:!unref(projectSlug)&&!unref(learnMode),variant:`text`},menuProps,{title:unref(projectSlug)&&unref(projectTitle)!==unref(projectSlug)?`${unref(projectTitle)} (${unref(projectSlug)})`:unref(projectTitle)}),{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(unref(projectTitle)||`Project`),1),createVNode(VIcon,{icon:unref(mdiChevronDown),size:`18`},null,8,[`icon`])]),_:1},16,[`disabled`,`title`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`240`},{default:withCtx(()=>[createVNode(_sfc_main$2),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(switcherProjects),project=>{return openBlock(),createBlock(VListItem,{key:project.slug,active:project.slug===unref(projectSlug),title:unref(projectDisplayName)(project),subtitle:unref(projectSubtitle)(project),onClick:$event=>unref(openProject)(project)},null,8,[`active`,`title`,`subtitle`,`onClick`])}),128)),unref(switcherProjects).length===0&&!unref(learnMode)?(openBlock(),createBlock(VListItem,{key:0,subtitle:unref(projectLoadError)||`No open projects found.`,title:`Projects`},null,8,[`subtitle`])):createCommentVNode(``,true)]),_:1})]),_:1})]),_cache[1]||(_cache[1]=createBaseVNode(`div`,{id:`studio-home-shell-create-session`,class:`studio-home-shell-create-session-host`},null,-1)),_cache[2]||(_cache[2]=createBaseVNode(`div`,{id:`studio-home-shell-local-remotes`,class:`studio-home-shell-local-remotes-host`},null,-1)),createBaseVNode(`div`,{id:githubActorHostId,class:`studio-home-shell-github-actor-host`})]),createVNode(Vibe64ProjectPaneControls_default,{"chat-collapsed":unref(chatCollapsed),"chat-column-visible":unref(chatColumnVisible),"chat-toggle-icon":unref(chatToggleIcon),"chat-toggle-title":unref(chatToggleTitle),"lesson-toggle-visible":unref(lessonToggleVisible),"mobile-project-action":unref(mobileProjectAction),"mobile-project-action-visible":unref(mobileProjectActionVisible),"preview-toolbar-host-id":unref(previewToolbarHostId),"preview-toolbar-host-visible":unref(previewToolbarHostVisible),"project-pane":unref(projectPane),"project-pane-navigation-visible":unref(projectPaneNavigationVisible),"project-slug":unref(projectSlug),"project-tabs":unref(projectTabs),"usage-recording-host-id":unref(usageRecordingHostId),onSelectPane:unref(selectProjectPane),"onUpdate:chatCollapsed":unref(setChatCollapsed)},null,8,[`chat-collapsed`,`chat-column-visible`,`chat-toggle-icon`,`chat-toggle-title`,`lesson-toggle-visible`,`mobile-project-action`,`mobile-project-action-visible`,`preview-toolbar-host-id`,`preview-toolbar-host-visible`,`project-pane`,`project-pane-navigation-visible`,`project-slug`,`project-tabs`,`usage-recording-host-id`,`onSelectPane`,`onUpdate:chatCollapsed`])],2)]),"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton_default)]),default:withCtx(()=>[unref(projectSlug)?(openBlock(),createElementBlock(`div`,{key:0,id:unref(usageRecordingStripHostId),class:`studio-home-shell-usage-recording-strip`},null,8,_hoisted_3)):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_4,[unref(pageError)?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,border:`start`,class:`studio-screen__alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pageError)),1)]),_:1})):createCommentVNode(``,true),createVNode(Vibe64LearningStage_default),!unref(projectSlug)?(openBlock(),createBlock(Vibe64NoProjectPane_default,{key:1,"chat-collapsed":unref(chatCollapsed),"project-pane":unref(projectPane),section:unref(emptySection),onSelect:unref(selectEmptySection)},null,8,[`chat-collapsed`,`project-pane`,`section`,`onSelect`])):(openBlock(),createElementBlock(`div`,_hoisted_5,[(openBlock(),createBlock(ProjectSelectionGate_default,{"runtime-ready":unref(projectRuntimeReady),"runtime-error":unref(projectRuntimeError),onRetryRuntime:unref(retryProjectRuntime),key:unref(projectSlug),"scope-selection-to-current-project":``,onError:unref(handleProjectSelectionError),onDeleted:unref(handleProjectSelectionDeleted),onMissing:unref(handleProjectSelectionMissing),onReady:unref(handleProjectSelectionReady)},{default:withCtx(projectSelectionSlotProps=>[projectSelectionSlotProps?.projectSelection?.currentProject?.repositoryMode===`local_source`?(openBlock(),createBlock(Teleport,{key:0,to:`#studio-home-shell-local-remotes`,defer:``},[createVNode(Vibe64LocalRemoteControls_default,{project:projectSelectionSlotProps.projectSelection.currentProject},null,8,[`project`])])):createCommentVNode(``,true),createVNode(Vibe64SessionPanel_default,{"chat-collapsed":unref(chatCollapsed),"create-session-teleport-target":`#studio-home-shell-create-session`,"github-actor-teleport-target":githubActorTeleportTarget,"project-context":projectSelectionSlotProps?.projectSelection?.currentProject||{},"preview-toolbar-teleport-target":unref(previewToolbarTeleportTarget),"project-pane":unref(projectPane),"usage-recording-teleport-target":unref(usageRecordingTeleportTarget),onChatAttention:_cache[0]||(_cache[0]=$event=>unref(setChatCollapsed)(false)),onProjectAttention:unref(showProjectPane)},{dashboard:withCtx(dashboardSlotProps=>[unref(dashboardRouteActive)?(openBlock(),createBlock(unref(RouterView),{key:0,"dashboard-context":dashboardSlotProps?.dashboardContext||{}},null,8,[`dashboard-context`])):createCommentVNode(``,true)]),_:1},8,[`chat-collapsed`,`project-context`,`preview-toolbar-teleport-target`,`project-pane`,`usage-recording-teleport-target`,`onProjectAttention`])]),_:1},8,[`runtime-ready`,`runtime-error`,`onRetryRuntime`,`onError`,`onDeleted`,`onMissing`,`onReady`]))]))])]),_:1},8,[`chat-collapsed`,`mobile-pane-swipe-enabled`,`onUpdate:chatCollapsed`])}}};if(typeof route_block_default===`function`)route_block_default(_sfc_main);var _slug__default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-df0dac94`]]);export{VIBE64_RESOURCE_RECOVERY_KEY as a,vibe64OutputTerminalWebSocketUrl as i,_slug__exports as n,terminalSessionMissingError as r,_slug__default as t};