vibe64 0.1.46 → 0.1.48
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.
- package/bin/run.js +1657 -1631
- package/bin/upgrade-state.js +2563 -2515
- package/dist/assets/{GithubBrowserTabs-D-Z3TlA8.js → GithubBrowserTabs-_l6htLOV.js} +1 -1
- package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-ih_gadbx.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BZsCIA2Z.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-DFE-2tFZ.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-BdvxuFPT.js} +1 -1
- package/dist/assets/{Vibe64OutputControls-DtybwgL3.js → Vibe64OutputControls-DsCbasR0.js} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-CVN2HKCB.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-DKo5wd8-.js} +2 -3
- package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-BYqVdBAt.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-CQjgoaS0.js} +1 -1
- package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-ByUkrRd7.js} +1 -1
- package/dist/assets/{_slug_-Bq84T_Iv.js → _slug_-hep_be7Z.js} +3 -3
- package/dist/assets/{access-Cx9RH95J.js → access-CWZMu-ND.js} +1 -1
- package/dist/assets/{app-DPx4KKOa.js → app-D_itm2S5.js} +1 -1
- package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
- package/dist/assets/{changes-DYsuQLFW.js → changes-BYuFfnEm.js} +1 -1
- package/dist/assets/{client-BYsDPxR3.js → client-B88Jggew.js} +1 -1
- package/dist/assets/client-CP2EwnrY.js +1 -0
- package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
- package/dist/assets/conversation-DG9lp25w.js +8 -0
- package/dist/assets/conversation-DL4AODd9.js +13 -0
- package/dist/assets/{dashboard-CWswAbYP.js → dashboard-R4qgYv8O.js} +1 -1
- package/dist/assets/english-definitions-CdIGswXU.js +1 -0
- package/dist/assets/{env-X7EOFLtl.js → env-DtkytCtq.js} +1 -1
- package/dist/assets/{health-C0f6s-G1.js → health-Ut9eZrbK.js} +1 -1
- package/dist/assets/{history-BQjETNB9.js → history-BrmvkGgi.js} +1 -1
- package/dist/assets/{incoming-COpY201m.js → incoming-CicEs40v.js} +1 -1
- package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
- package/dist/assets/index-DZgCwvFD.js +136 -0
- package/dist/assets/{integrations-BBkvNRHu.js → integrations-QHeHC-C9.js} +10 -2
- package/dist/assets/issues-Ds7iAQFQ.js +1 -0
- package/dist/assets/{learning-B8_wHoe1.js → learning-Dq0xbg3x.js} +1 -1
- package/dist/assets/linkPath-Ch9eft18.js +1 -0
- package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
- package/dist/assets/placement-DYM3JJ-F.js +1 -0
- package/dist/assets/{publish-CeLZE2AG.js → publish-eErG67LW.js} +1 -1
- package/dist/assets/pull-requests-DHLK83qZ.js +1 -0
- package/dist/assets/{repository-BNPt7UWc.js → repository-DWw1VFIQ.js} +1 -1
- package/dist/assets/{settings-lecRzZ-r.js → settings-QkwnoNn3.js} +1 -1
- package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
- package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
- package/dist/assets/{useArchivedVibe64Sessions-DHYRnyJD.js → useArchivedVibe64Sessions-Biy_4sxD.js} +1 -1
- package/dist/assets/useCommand-DhwB5k1w.js +1 -0
- package/dist/assets/useEndpointResource-tVvsJvd4.js +1 -0
- package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
- package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-DLUToc5y.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-jM3KOvN7.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-Cac_aZnv.js} +1 -1
- package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
- package/dist/assets/useVibe64SessionData-FGnNvFfK.js +1 -0
- package/dist/assets/{useVibe64SessionSelection-CDaX4uwY.js → useVibe64SessionSelection-Bgsif-tm.js} +1 -1
- package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-idV9zXa9.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
- package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
- package/dist/assets/{vibe64SessionFocus-DzqbVq60.js → vibe64SessionFocus-CDIB5Gpr.js} +1 -1
- package/dist/index.html +25 -22
- package/docs/colleague-usage/coding-agents.md +4 -7
- package/docs/colleague-usage/preview-browser-checks.md +5 -3
- package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
- package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
- package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
- package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +136 -0
- package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
- package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
- package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
- package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
- package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
- package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
- package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
- package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
- package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
- package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
- package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
- package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
- package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
- package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
- package/node_modules/@jskit-ai/kernel/package.json +6 -2
- package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
- package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
- package/node_modules/@jskit-ai/payments-core/package.json +3 -2
- package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
- package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/realtime/package.json +3 -2
- package/node_modules/@jskit-ai/resource-core/package.json +1 -1
- package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
- package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
- package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
- package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +15 -14
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +493 -453
- package/node_modules/@local/vibe64-genesis/src/server/index.js +109 -108
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +106 -106
- package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
- package/package.json +14 -14
- package/server.bundle.mjs +41988 -40760
- package/dist/assets/conversation-Bn7wpATa.js +0 -2
- package/dist/assets/conversation-CNcCrV-R.js +0 -16
- package/dist/assets/definitions-CEbi4qae.js +0 -1
- package/dist/assets/index-CBo1BEk6.js +0 -138
- package/dist/assets/issues-BiSiUd5o.js +0 -1
- package/dist/assets/placement-B5T1LR7m.js +0 -1
- package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
- package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
- package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
- package/dist/assets/usePaths-DdAnjVDj.js +0 -1
- package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
- package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
- package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Vibe64OutputControls-
|
|
2
|
-
import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.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{_ as VIcon,cr as withKeys,lr as withModifiers,lt as useDisplay,n as VBadge,p as VProgressLinear,rr as Transition,sr as vShow,t as VAvatar}from"./VAvatar-H2hyOWlB.js";import{r as useShellWebErrorRuntime}from"./error-W1ZAEk4a.js";import{J as useQueryClient,T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{_ as useRouter,c as isNavigationFailure,g as useRoute,t as NavigationFailureType}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as projectSlugFromPathname,c as vibe64ProjectScopedStorageKey,d as getHttpWebClient,i as projectListPath,n as normalizeProjectRoutePath,o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{c as VListItemTitle,n as VList,s as VListItem,t as VMenu}from"./VMenu-DnhVIMrr.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.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{i as studioApiPath,n as resolveWebSocketUrl,r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-CGKCbM_d.js";import{$ as mdiCloudDownloadOutline,Bn as mdiPaperclip,Br as mdiViewDashboardOutline,Ct as mdiDotsVertical,D as mdiAutoFix,Dr as mdiSwapVertical,E as mdiArrowUp,F as mdiCameraOutline,G as mdiCircle,Gn as mdiPinOutline,H as mdiChevronLeft,Ir as mdiTuneVariant,Jn as mdiPlus,K as mdiCircleOutline,Kn as mdiPlay,Kt as mdiGithub,L as mdiCheck,Mt as mdiFileDocumentEditOutline,Nt as mdiFileDocumentOutline,O as mdiAutorenew,Ot as mdiEyePlusOutline,R as mdiCheckCircle,Rr as mdiUndoVariant,S as mdiArrowLeft,Sr as mdiSourceRepository,St as mdiDotsHorizontalCircleOutline,T as mdiArrowTopRight,Tr as mdiStop,U as mdiChevronRight,Un as mdiPencilOutline,V as mdiChevronDown,Vn as mdiPause,W as mdiChevronUp,Wn as mdiPin,X as mdiClose,Xt as mdiHelpCircleOutline,Y as mdiClockOutline,Yr as mdiWrenchOutline,Zt as mdiHistory,_r as mdiSourceBranchPlus,b as mdiArchiveOutline,c as mdiAccountOutline,cr as mdiSchoolOutline,dt as mdiContentSaveAlertOutline,er as mdiRefresh,f as mdiAlertCircleOutline,ft as mdiContentSaveOutline,g as mdiArchiveArrowDownOutline,gr as mdiSourceBranch,h as mdiApplicationOutline,i as mdiAccountGroupOutline,it as mdiCogOutline,k as mdiBookOpenPageVariantOutline,kn as mdiMagnify,l as mdiAccountStarOutline,lr as mdiSend,lt as mdiConsoleNetworkOutline,nn as mdiIncognito,nr as mdiRestart,q as mdiCircleSlice4,qn as mdiPlayCircleOutline,rn as mdiInformationOutline,rr as mdiRestore,v as mdiArchiveCheckOutline,vr as mdiSourceBranchSync,wn as mdiLinkVariantOff,wr as mdiStarOutline,x as mdiArrowDown,xr as mdiSourcePull,yr as mdiSourceCommit,z as mdiCheckCircleOutline}from"./mdi-X9prU-DG.js";import{r as VProgressCircular,t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VCheckbox}from"./VCheckbox-CHFec5Bg.js";import{t as VDivider}from"./VDivider-AUQb_N9d.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{a as Vibe64StarredFilesList_default,c as conversationAttribution,d as _sfc_main$50,f as _sfc_main$51,h as assistantAttachmentFilesFromPasteEvent,i as sourceEditorLinkTarget,l as Vibe64ConversationStatus_default,m as useVibe64AttachmentCommands,n as Vibe64SessionSourceEditor_default,o as thinkingMessagePresentation,p as useAgentAttachments,r as Vibe64ConversationLog_default,s as usesCommentaryForThinking,t as Vibe64SessionFiles_default,u as _sfc_main$49}from"./Vibe64SessionFiles-Z9zxosyl.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-BgimJBV2.js";import{S as VIBE64_ACCOUNTS_CHANGED_EVENT,T as VForm,b as ModelRoutingForm_default,c as aiOnboardingNeeded,f as useLocalToolRows,g as useVibe64Accounts,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-BYsDPxR3.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as VSwitch}from"./VSwitch-B_DmcTxG.js";import{t as VTextarea}from"./VTextarea-wqoRFl1K.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,g as LongTextPreviewBlocks_default,i as AssistantQuestionInputs_default,n as AssistantConversationElement_default,o as AssistantGoalControl_default,r as AssistantModelControl_default,s as AssistantComposerSupport_default}from"./conversation-CNcCrV-R.js";import"./conversation-Bn7wpATa.js";import{n as useRealtimeEvent,r as useRealtimeSocket}from"./useRealtimeEvent-BNXVwzFG.js";import{a as Vibe64Terminal_default,i as useShellAsyncModuleRecoveryRuntime,n as createWebSocketTerminalDriver,o as Vibe64TerminalSurface_default,p as isDynamicImportError,s as terminalLastMeaningfulLine,t as useVibe64Terminal,u as dynamicImportErrorMessage}from"./useVibe64Terminal-Zr3Mig2L.js";import{t as usePaths}from"./usePaths-DdAnjVDj.js";import{c as vibe64AssistantSelectionLabel,d as VIBE64_DEFAULT_AGENT_PROVIDER_ID,f as defaultVibe64AgentSettings,h as VIBE64_ASSISTANT_ACCESS_ERROR_CODES,l as vibe64ProviderPresentation,m as normalizeVibe64AgentSettings,n as normalizedPromptHintSuggestion,o as normalizeVibe64ConversationAttachments,p as findVibe64AgentProvider,r as normalizedPromptHintSuggestions,s as VIBE64_AGENT_TASK_RESULT_SCHEMA,t as normalizedPromptHintDraft,u as VIBE64_AGENT_PROVIDERS}from"./shared-TUhK_uYM.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-D_9PZkWu.js";import{t as useCommand}from"./useCommand-Epd2yHhQ.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-DudSuU3G.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import"./shared-BEwrtWSp.js";import{i as vibe64ResourceResponseError,n as vibe64ApiResponseError,r as vibe64RequestAccepted,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{D as projectSelectionQueryKey,O as projectSettingsQueryKey,S as VIBE64_PROJECT_SELECT_API_SUFFIX,b as VIBE64_PROJECT_CHANGED_EVENT,c as PROJECT_SELECTION_ENDPOINT,l as PROJECT_SETTINGS_ENDPOINT,m as VIBE64_CONNECTIONS_CHANGED_EVENT,x as VIBE64_PROJECT_CREATE_API_SUFFIX}from"./studioGateApi-BVdclhPL.js";import{n as useVibe64ProjectSlug,t as provideVibe64OpenedProjectSlug}from"./useVibe64ProjectScope-D7b8n1gx.js";import{n as vibe64RealtimeOriginPayload,r as vibe64RealtimePayloadFromCurrentTab,t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$ as vibe64SessionEventMatchesScope,$t as checkNote,At as temporaryConversationId,Bt as VTab,C as useVibe64AssistantCatalog,Ct as useAssistantConversationFactory,D as VIBE64_SESSIONS_API_SUFFIX,Et as VIBE64_TRAINING_LEARNER_CHANGED_EVENT,I as vibe64AgentTerminalControlTextPath,Jt as usePageActivity,Kt as VBottomSheet,L as vibe64AgentTerminalPath,Lt as unmatchedOptimisticMessages,M as agentTurnControlPayloadFromContext,O as VIBE64_SESSION_CHANGED_EVENT,Ot as mainConversationId,Q as vibe64SessionCheckUpdatesPath,Qt as VIBE64_LEARNING_ROUTES,Rt as useAssistantQuestions,S as requestVibe64AccountConnectionsDialog,St as useAssistantConversation,Tt as latestAssistantMessageAwaitingUserReply,V as vibe64OutputRunPath,Xt as VIBE64_LEARNING_MODE_NOTE,Yt as STEP_STATUS_LABELS,Zt as VIBE64_LEARNING_MODE_PROJECT_CODE,_ as useVibe64LearningCourses,an as projectDisplayName,b as readRefOrGetterValue,bt as vibe64TemporaryConversationPath,en as lessonShownIn,et as vibe64SessionPath,g as courseProgress,in as isPracticeProjectSlug,it as vibe64SessionQueryKey,jt as useVibe64Voice,k as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,kt as mainConversationTarget,nn as reviewRunNote,nt as vibe64SessionPromptHintsCancelPath,on as projectSubtitle,p as Vibe64LearningMarkdown_default,rn as withoutLesson,rt as vibe64SessionPromptHintsPath,s as useShellLayoutState,sn as RouterView,tn as revealCurrentStep,v as useVibe64Learning,vt as vibe64SourceEditorStarsPath,w as VIBE64_API_SUFFIX,wt as createAssistantApi,xt as vibe64TemporaryConversationsPath,y as Vibe64SessionAssistantMenu_default,zt as VTabs}from"./index-CBo1BEk6.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-CV26vPTg.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-C06bcdUN.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-TLwqAxDo.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-CE9ig_nO.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-DzqbVq60.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-CPEGxBWZ.js";import{t as vibe64SessionInfoFacts}from"./vibe64SessionInfo-Cr7EeBBT.js";import{n as normalizeRoutePath,r as routePathContainsSection,t as Vibe64DashboardShell_default}from"./Vibe64DashboardShell-B4dQ-oHD.js";import{a as vibe64SessionToolGuideId,i as vibe64SessionToolDashboardSuffix,o as vibe64SessionToolIdFromRouteSegment,r as VIBE64_SESSION_TOOL_DEFINITIONS}from"./vibe64SessionToolDefinitions-hqh6mSY8.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-CreWtQAO.js";import{n as enrichVibe64SessionForDisplay,t as blockingVibe64SessionPageError}from"./vibe64SessionPanelModel-DoorGDCG.js";import{n as useVibe64ConversationLog}from"./useVibe64ConversationLog-DboM3tYN.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-TqsxvGSf.js";import{t as selectedSessionIdFromRoute}from"./useVibe64SessionSelection-CDaX4uwY.js";import{n as repositoryStatusRealtimeShouldRefresh,r as repositoryStatusSessionId,t as repositoryStatusRealtimeNeedsCanonicalCheck}from"./vibe64RepositoryRealtime-C-J0I5jY.js";function useAssistantSuggestions({active=true,requestKey=``,draft=``,configuration={},generate,onSelect=()=>false,debounceMs=750,minIntervalMs=0}={}){const items=ref([]);const loading=ref(false);const preview=ref(``);const error=ref(``);const dismissedKey=ref(null);const composerFocused=ref(false);const currentDraft=computed(()=>String(toValue(draft)??``).trim());const configurationKey=computed(()=>JSON.stringify(toValue(configuration)??{}));const key=computed(()=>JSON.stringify([toValue(requestKey),currentDraft.value,configurationKey.value]));const eligible=computed(()=>toValue(active)!==false&&typeof unref(generate)===`function`&&dismissedKey.value!==key.value);const visible=computed(()=>eligible.value&&(loading.value||items.value.length>0));let timer;let request;let lastStartedAt=-Infinity;function cancel(){clearTimeout(timer);const previous=request;request=null;previous?.abort();loading.value=false}watch([eligible,key,()=>unref(generate)],()=>{cancel();items.value=[];preview.value=``;error.value=``;if(!eligible.value)return;const controller=new AbortController;request=controller;const input={draft:currentDraft.value,configuration:JSON.parse(configurationKey.value),signal:controller.signal};const run=unref(generate);loading.value=true;timer=setTimeout(async()=>{lastStartedAt=Date.now();try{const result=await run(input);if(request!==controller)return;if(!Array.isArray(result)||result.some(item=>!item?.label?.trim()||!item?.prompt?.trim()))throw new TypeError(`Suggestions must contain a label and prompt.`);items.value=result.map(({label,prompt})=>({label:label.trim(),prompt:prompt.trim()}))}catch(failure){if(request===controller&&!controller.signal.aborted)error.value=String(failure.message||failure)}finally{if(request===controller){request=null;loading.value=false}}},Math.max(0,Number(toValue(debounceMs))||0,lastStartedAt+Math.max(0,Number(toValue(minIntervalMs))||0)-Date.now()))},{immediate:true,flush:`sync`});function currentSuggestion(value){return items.value.find(item=>item.label===value?.label&&item.prompt===value?.prompt)}function previewSuggestion(value){preview.value=currentDraft.value?``:currentSuggestion(value)?.prompt||``;return Boolean(preview.value)}function select(value){const suggestion=currentSuggestion(value);if(!suggestion||!eligible.value)return false;preview.value=``;return onSelect(suggestion.prompt)!==false}function dismiss(){preview.value=``;dismissedKey.value=key.value}function focus(){if(toValue(active)===false||composerFocused.value)return;composerFocused.value=true}function blur(){preview.value=``;composerFocused.value=false}watch(()=>toValue(active),value=>{if(value===false){composerFocused.value=false;dismissedKey.value=null}},{flush:`sync`});watch(currentDraft,()=>{preview.value=``},{flush:`sync`});onScopeDispose(cancel);return{items,loading,preview,error,visible,composerFocused,previewSuggestion,select,dismiss,focus,blur}}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$40={class:`vibe64-team-ai-gate__icon`};var _hoisted_2$33={class:`vibe64-team-ai-gate__text`};var _hoisted_3$29={class:`vibe64-team-ai-gate__ask`,"data-test":`team-ai-gate-ask`};var _hoisted_4$23={class:`vibe64-team-ai-gate__actions`};var _sfc_main$48={__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$40,[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$33,toDisplayString(ownerAtStart.value)+` needs to set up AI for team members before you can open projects here. `,1),createBaseVNode(`p`,_hoisted_3$29,` Ask `+toDisplayString(owner.value)+` to set up AI for team members. `,1),createBaseVNode(`div`,_hoisted_4$23,[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$48,[[`__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=hasInjectionContext()?useVibe64Learning():null;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$39={class:`project-selection-gate`};var _hoisted_2$32={class:`project-selection-gate__deleted-text`};var _hoisted_3$28={class:`project-selection-gate__header`};var _hoisted_4$22={class:`project-selection-gate__path`};var _hoisted_5$19={key:0,class:`project-selection-gate__learning-note`,role:`status`,"data-test":`learning-mode-picker-note`};var _hoisted_6$17={key:1,class:`project-selection-gate__team-ai`,role:`status`,"data-test":`team-ai-owner-prompt`};var _hoisted_7$16={key:2,class:`project-selection-gate__list`};var _hoisted_8$16={class:`project-selection-gate__project-name`};var _hoisted_9$14={class:`project-selection-gate__project-path`};var _sfc_main$47={__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$39,[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)),unref(learning)?(openBlock(),createBlock(VBtn,{key:0,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})):createCommentVNode(``,true)]),_: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$32,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$28,[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$22,toDisplayString(unref(projectsRoot)),1)])]),unref(learnMode)?(openBlock(),createElementBlock(`div`,_hoisted_5$19,[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$17,[_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$16,[(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$16,[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$47,[[`__scopeId`,`data-v-68686cbe`]]);var _hoisted_1$38={key:1,class:`local-remotes__branch-name`};var _hoisted_2$31={class:`d-flex ga-3 align-start`};var _hoisted_3$27={class:`min-w-0`};var _hoisted_4$21={class:`text-body-large font-weight-medium ma-0`};var _hoisted_5$18={class:`d-flex ga-3 align-start`};var _hoisted_6$16={class:`local-remotes__status text-body-small mb-3`,role:`status`,"aria-live":`polite`};var _hoisted_7$15={class:`d-flex flex-column ga-1`};var _hoisted_8$15={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$11={key:0,class:`text-body-medium text-error mt-3 local-remotes__message`};var _hoisted_12$10={key:1,class:`text-body-small text-medium-emphasis mt-3`};var _hoisted_13$8={key:0};var _hoisted_14$7={class:`local-remotes__message`};var _hoisted_15$7={key:0};var _hoisted_16$6={class:`local-remotes__url`};var _hoisted_17$6={key:0};var _hoisted_18$5={key:1};var _hoisted_19$5={key:2};var _sfc_main$46={__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`&¤t.incoming>0&¤t.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$38,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$31,[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$27,[createBaseVNode(`p`,_hoisted_4$21,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$18,[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$16,[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$15,[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$15,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$11,toDisplayString(remoteError.value),1)):!state.value?.upstream||!state.value?.push?(openBlock(),createElementBlock(`p`,_hoisted_12$10,` 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$8,`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$7,[_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$7,[..._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$6,toDisplayString(pendingReview.value.target.url),1),pendingReview.value.action===`push`?(openBlock(),createElementBlock(`p`,_hoisted_17$6,`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$5,`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$5,`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$46,[[`__scopeId`,`data-v-f775cba6`]]);var _hoisted_1$37={class:`studio-autopilot__composer-delivery`};var _sfc_main$45={__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$37,[__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$45,[[`__scopeId`,`data-v-9e56f63d`]]);var _hoisted_1$36={class:`d-flex align-center justify-space-between px-4`};var _hoisted_2$30={class:`d-flex`};var _hoisted_3$26={class:`chat-modes__details-body`};var _hoisted_4$20={key:0,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_5$17={key:2,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_6$15={key:3,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_7$14={class:`chat-modes__model`};var _hoisted_8$14={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$10={key:0,class:`text-body-small`};var _hoisted_12$9={class:`px-4 pb-3`};var _sfc_main$44={__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 routing settings.`:`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`:``}`);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$36,[_cache[15]||(_cache[15]=createBaseVNode(`strong`,null,`Chat mode`,-1)),createBaseVNode(`div`,_hoisted_2$30,[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiCogOutline),variant:`text`,width:`48`,height:`48`,"aria-label":`Configure model routing`,title:`Configure model routing`,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$26,[__props.connecting||__props.active||saving.value||!mode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$20,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$17,`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$15,`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$14,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$14,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$10,toDisplayString(reviewDescription.value),1)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])],64)),createBaseVNode(`div`,_hoisted_12$9,[renderSlot(_ctx.$slots,`default`,{},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$44,[[`__scopeId`,`data-v-649887bb`]]);var _sfc_main$43={__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 draftWithRestoredMessage(text=``,draft=``){return!draft||draft.startsWith(text)?draft||text:`${text}\n\n${draft}`}var _sfc_main$42={__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$49,{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`])}}};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}}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:``}}function temporaryAiId(prefix=`temporary`){return`${prefix}_${crypto.randomUUID()}`}function temporaryAiText(value=``){return String(value||``).trim()}function temporaryAiRequestError(response={},fallback=`Temporary AI request failed.`){return Object.assign(new Error(vibe64ApiResponseError(response,fallback)),{code:temporaryAiText(response.code),conversationExpired:response.conversationExpired===true||response.code===`vibe64_conversation_closed`,status:temporaryAiText(response.status)})}function temporaryAiTurnIsActive(status=``){const normalizedStatus=temporaryAiText(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 useVibe64TemporaryAi({active=()=>true,agentSettings=()=>defaultVibe64AgentSettings(),assistantReady=()=>false,onTaskFinished=null,operationBusy=()=>false,sessionId,sessionsApiPath}={}){const tasks=ref([]);const activeTaskId=ref(``);const open=ref(false);const restorations=new Map;const saveTimers=new Map;const pendingSaveFields=new Map;const unsentSaveFields=new Map;const saveVersions=new Map;const creations=new Map;const saves=new Map;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 restoreError=ref(``);let restoreGeneration=0;let restoreRetryTimer;const closingTaskIds=new Set;const stoppingTaskIds=new Set;let disposed=false;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 temporaryAiText(readRefOrGetterValue(sessionId))}function currentSessionsApiPath(){return temporaryAiText(readRefOrGetterValue(sessionsApiPath))}function canApplyTaskResponse(task){return!disposed&&tasks.value.some(current=>current.id===task.id&¤t.binding===task.binding)}function taskView(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 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`&&temporaryAiText(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(temporaryAiText(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=temporaryAiText(observed.status)||task.status;update.busy=temporaryAiTurnIsActive(update.status);update.phase=update.busy?temporaryAiText(snapshot.phase):``;update.runId=observed.runId||task.runId;update.outcomeKind=temporaryAiText(observed.outcome?.kind)}if(!observed.deferredReconciliation)update.error=temporaryAiText(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 taskView({...value,binding,releaseBinding:markRaw(()=>{stop();binding.release()})})}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 taskView({...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}function taskPresentation(task,selected){return Object.fromEntries([`title`,`draft`,`displayMessage`,`completionMessage`,`dedupeKey`,`failureMessage`,`nextStepMessage`,`recoveryNotice`,`recoveryOperation`,`recoveryConflictId`,`recoveryContext`,`recoveryOutcome`,`recoveryOutcomeMessage`,`recoveryRequestId`,`recoveryAutoPaused`,`recoveryRetryKeys`,`runConflictId`].filter(key=>!selected||selected.has(key)).map(key=>[key,task[key]]))}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=request(vibe64TemporaryConversationsPath(task.apiPath,task.sessionId),{method:`POST`,body:{conversationId:task.id,...task.includeRecentChatContext?{includeRecentChatContext:true}:{},...task.initialRouting?{assistantRouting:task.initialRouting}:{},agentSettings:current.agentSettings,presentation:taskPresentation(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||disposed&&!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=taskPresentation(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 request(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&¤t.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&¤t?.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})}async function restoreTasks(){clearTimeout(restoreRetryTimer);const generation=++restoreGeneration;if(disposed||!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(!disposed&&generation===restoreGeneration)return restoreTasks();return}restoring=request(vibe64TemporaryConversationsPath(apiPath,ownerSessionId),{method:`GET`}).finally(()=>restorations.delete(key));restorations.set(key,restoring);const response=await restoring;if(disposed||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(disposed||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 reportTaskFinished(taskId=``){if(typeof onTaskFinished!==`function`)return;const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;try{onTaskFinished(Object.freeze({completionMessage:temporaryAiText(task.completionMessage),dedupeKey:temporaryAiText(task.dedupeKey),error:temporaryAiText(task.error),failureMessage:temporaryAiText(task.failureMessage),id:task.id,outcomeKind:temporaryAiText(task.outcomeKind),recoveryOperation:temporaryAiText(task.recoveryOperation),runConflictId:temporaryAiText(task.runConflictId),runId:task.runId,sessionId:task.sessionId,status:temporaryAiText(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:temporaryAiText(completionMessage),conversationId:``,dedupeKey:temporaryAiText(dedupeKey),displayMessage:temporaryAiText(displayMessage),draft:temporaryAiText(draft),error:``,failureMessage:temporaryAiText(failureMessage),id:temporaryAiId(`temporary-ai`),messages:[],unread:false,nextStepMessage:temporaryAiText(nextStepMessage),pendingMessageId:``,recoveryOutcome:``,recoveryOutcomeMessage:``,recoveryNotice:temporaryAiText(recoveryNotice),recoveryOperation:recoveryOperation===`update`?`update`:``,recoveryConflictId:temporaryAiText(recoveryConflictId),recoveryContext:temporaryAiText(recoveryContext),recoveryRetryKeys:[],recoveryAutoPaused:false,runId:``,runConflictId:``,sessionId:currentSessionId(),status:`ready`,title:temporaryAiText(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=temporaryAiText(input.message||input.draft);if(!message||!currentSessionId()||!currentSessionsApiPath())return Object.freeze({ok:false,reused:false,started:false,taskId:``});const dedupeKey=temporaryAiText(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:temporaryAiText(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`&&temporaryAiText(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 request(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 request(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=temporaryAiText(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:temporaryAiText(message)||`Repair verified.`}}:{},recoveryOutcome:outcome,...recoveryRequestId?{recoveryRequestId}:{},recoveryAutoPaused:false,recoveryOutcomeMessage:temporaryAiText(message),...outcome!==`checking`?{recoveryContext:outcome===`failed`?retryMessage||message:message,recoveryConflictId:temporaryAiText(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 request(path=``,options={}){const response=await getHttpWebClient().request(path,options);if(response?.ok===false)throw temporaryAiRequestError(response);return response}function pendingMessage(task,messageId){const local=task?.delivery.find(messageId);const route=assistantRoutingRequestForDisplay(task?.routingMetadata);return route?.messageId===messageId&&routedChatMessage(route,local)||local}async function send(taskId=``,{retryMessageId=``,generatedMessage=null,attachmentOwner=null}={}){const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!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:taskPresentation(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`});clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId)},async prepare(submission){if(saves.has(taskId))await saves.get(taskId);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;task.delivery.remove(messageId);updateTask(taskId,{busy:false,pendingMessageId:``,error:``,errorCode:``,status:`interrupted`,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&¤t.pendingMessageId!==messageId)return true;const stillWorking=task.busy&&error?.conversationExpired!==true;updateTask(taskId,{busy:stillWorking,conversationId:error?.conversationExpired===true?``:current.conversationId,error:temporaryAiText(error?.message||error)||`Temporary AI message could not be sent.`,errorCode:temporaryAiText(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);if(disposed||!message||message.status!==`failed`||readRefOrGetterValue(operationBusy)||closingTaskIds.has(taskId)||task.recoveryOutcome===`checking`)return false;const route=assistantRoutingRequestForDisplay(task.routingMetadata);if(route?.messageId===messageId){if(route.delivery===`uncertain`){updateTask(taskId,{error:`Check delivery before editing or cancelling this message.`});return false}await stopTask(taskId)}else if(task.busy)return false;task.delivery.remove(messageId);updateTask(taskId,{...task.pendingMessageId===messageId?{pendingMessageId:``}:{},...task.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||!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(disposed||!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)}}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{clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId);if(saves.has(taskId))await saves.get(taskId);const conversationId=task.conversationId||(creations.has(taskId)?await creations.get(taskId):``);if(conversationId)await request(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}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}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={}})=>!disposed&&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={}})=>!disposed&&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();for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear();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});onBeforeUnmount(()=>{flushPendingSaves();disposed=true;clearTimeout(restoreRetryTimer);restoreGeneration+=1;for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear();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 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&¤tContext.value.projectSlug&¤tContext.value.sessionId&¤tContext.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&¤t!==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$35=[`aria-label`];var _hoisted_2$29={class:`vibe64-temporary-ai__tabs`,"aria-label":`Main and temporary conversations`};var _hoisted_3$25={class:`vibe64-temporary-ai__task-tabs`};var _hoisted_4$19=[`aria-current`,`data-temporary-ai-task-id`,`aria-label`,`title`,`onClick`];var _hoisted_5$16={key:0,class:`vibe64-temporary-ai__unread`,"aria-hidden":`true`};var _hoisted_6$14={key:1,class:`vibe64-temporary-ai__busy`,"aria-label":`Assistant working`};var _hoisted_7$13={class:`vibe64-temporary-ai__recovery-row`};var _hoisted_8$13={key:1,"aria-live":`polite`,class:`vibe64-temporary-ai__recovery`,"data-temporary-ai-recovery":``,role:`status`};var _hoisted_9$11={class:`vibe64-temporary-ai__recovery-summary`};var _hoisted_10$10={key:0};var _hoisted_11$9={key:1};var _hoisted_12$8={key:0};var _hoisted_13$7={key:0};var _hoisted_14$6={key:1,class:`vibe64-temporary-ai__feedback`};var _hoisted_15$6={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _hoisted_16$5=[`role`];var _hoisted_17$5={key:0,class:`text-caption`,role:`status`,"aria-live":`polite`};var _hoisted_18$4={class:`vibe64-temporary-ai__composer-actions`};var _hoisted_19$4={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _sfc_main$41={__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)}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=!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}}function openTask(options){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.openTask(options)}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}}function closeWorkspace(){selectionRevision.value+=1;hostConversation?.value?.close();temporary.closeWorkspace()}const workspace=ref(null);const completionMessage=ref(null);const returnToMainButton=ref(null);const taskTabButtons=new Map;const taskPrompts=new Map;const taskSendButtons=new Map;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 customOpen=ref(false);const customTarget=ref(null);const activeTask=temporary.activeTask;watch(()=>activeTask.value?.id,()=>{customOpen.value=false});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 closeTaskId=ref(``);const closingTask=ref(false);const stoppingTaskId=ref(``);const actionErrors=ref({});const taskToClose=computed(()=>temporary.tasks.value.find(task=>task.id===closeTaskId.value));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)));const activeTaskRecoveryTitle=computed(()=>{if(activeTaskRecoveryChecking.value)return`Checking Update…`;const status=String(activeTask.value?.status||``).trim();if([`starting`,`inProgress`].includes(status))return`AI repair in progress`;if(activeTask.value?.recoveryOutcome===`failed`)return`Update needs attention`;if(activeTask.value?.recoveryOutcome===`unconfirmed`)return`Update result not confirmed`;if(activeTask.value?.recoveryOperation===`update`)return`Update not yet verified`;if(activeTask.value?.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=activeTask.value||{};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.`});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=``}}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))}function taskPrompt(taskId=``){return taskPrompts.get(String(taskId||``))||null}function setTaskPrompt(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskPrompts.set(normalizedTaskId,element);return}taskPrompts.delete(normalizedTaskId)}function setTaskSendButton(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskSendButtons.set(normalizedTaskId,element);return}taskSendButtons.delete(normalizedTaskId)}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(){selectionRevision.value+=1;hostConversation?.value?.close();if(!temporary.tasks.value.length){temporary.open.value=true;openNewTask();return null}const task=temporary.showWorkspace();revealTaskTab(temporary.activeTaskId.value);return task}function setTaskTabButton(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskTabButtons.set(normalizedTaskId,element);return}taskTabButtons.delete(normalizedTaskId)}function afterBrowserPaint(){if(typeof globalThis.requestAnimationFrame!==`function`)return Promise.resolve();return new Promise(resolve=>{globalThis.requestAnimationFrame(()=>resolve())})}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?.()}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`});const colleagueView=inject(VIBE64_COLLEAGUE_VIEW_KEY,null);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});__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`},[createBaseVNode(`nav`,_hoisted_2$29,[createBaseVNode(`div`,{class:`vibe64-temporary-ai__tab vibe64-temporary-ai__tab--main`},[createBaseVNode(`button`,{class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-main-chat":``,type:`button`,onClick:selectMainChat},` Main chat `)]),createBaseVNode(`div`,_hoisted_3$25,[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[0]||(_cache[0]=$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(unref(temporary).tasks.value,task=>{return openBlock(),createElementBlock(`div`,{key:task.id,class:normalizeClass([`vibe64-temporary-ai__tab`,{"vibe64-temporary-ai__tab--active":!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value}])},[createBaseVNode(`button`,{ref_for:true,ref:element=>setTaskTabButton(task.id,element),"aria-current":!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value?`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=>selectTask(task.id)},[createBaseVNode(`span`,null,toDisplayString(task.label),1),task.unread?(openBlock(),createElementBlock(`span`,_hoisted_5$16)):createCommentVNode(``,true),task.nativeWorking?(openBlock(),createElementBlock(`span`,_hoisted_6$14)):createCommentVNode(``,true)],8,_hoisted_4$19),!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value?(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=>openRename(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`||closingTask.value||stoppingTaskId.value===task.id,height:`32`,icon:unref(mdiClose),"min-width":`32`,size:`x-small`,title:`Close ${task.label}`,type:`button`,variant:`text`,onClick:$event=>requestCloseTask(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:openNewTask},null,8,[`disabled`,`icon`])]),_cache[21]||(_cache[21]=createBaseVNode(`span`,{class:`vibe64-temporary-ai__tabs-spacer`},null,-1))]),newTaskOpen.value?(openBlock(),createBlock(VDialog,{key:0,"model-value":newTaskOpen.value,"aria-label":`New temporary chat`,"max-width":`480`,persistent:creatingTask.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=value=>{if(!value)cancelNewTask()})},{default:withCtx(()=>[createVNode(VCard,{title:`New temporary chat`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createVNode(VCheckbox,{modelValue:includeRecentChatContext.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>includeRecentChatContext.value=$event),disabled:creatingTask.value||Boolean(creatingTaskId.value),label:`Include recent chat context`,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[22]||(_cache[22]=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)),createTaskError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(createTaskError.value),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:creatingTask.value,onClick:cancelNewTask},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{loading:creatingTask.value,disabled:creatingTask.value,onClick:createTask},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(`Create chat`,-1)])]),_:1},8,[`loading`,`disabled`])]),_: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},[createBaseVNode(`div`,_hoisted_7$13,[unref(temporary).restoreError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(temporary).restoreError.value)+` `,1),createVNode(VBtn,{color:`error`,variant:`text`,height:`48`,onClick:_cache[3]||(_cache[3]=$event=>unref(temporary).restoreTasks())},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),unref(activeTask)?.recoveryNotice&&!activeTaskRecoveryVerified.value&&!props.connectionUnavailable?(openBlock(),createElementBlock(`div`,_hoisted_8$13,[createBaseVNode(`div`,_hoisted_9$11,[createBaseVNode(`strong`,null,toDisplayString(activeTaskRecoveryTitle.value),1),activeTaskRecoveryStatus.value&&!unref(activeTask).busy?(openBlock(),createElementBlock(`details`,_hoisted_10$10,[_cache[26]||(_cache[26]=createBaseVNode(`summary`,null,`Details`,-1)),createBaseVNode(`p`,null,toDisplayString(activeTaskRecoveryStatus.value),1)])):createCommentVNode(``,true)]),unref(activeTask).recoveryOperation===`update`&&!activeTaskRecoveryVerified.value?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-check-update":``,disabled:props.updateDisabled||taskInputDisabled(unref(activeTask))||unref(activeTask).busy||unref(activeTask).recoveryOutcome===`unconfirmed`,loading:activeTaskRecoveryChecking.value,title:props.updateDisabled?props.updateDisabledReason:`Check whether the repaired session can update`,size:`small`,variant:`tonal`,onClick:_cache[4]||(_cache[4]=$event=>emit(`check-update`,unref(activeTask)))},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(` Check Update `,-1)])]),_:1},8,[`disabled`,`loading`,`title`])):createCommentVNode(``,true),unref(activeTask).recoveryOperation===`update`&&!activeTaskRecoveryVerified.value&&props.canReviewUpdate?(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-review-update":``,disabled:props.updateDisabled||taskInputDisabled(unref(activeTask))||unref(activeTask).busy||unref(activeTask).recoveryOutcome===`unconfirmed`,size:`small`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>emit(`review-update`))},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true)]),unref(activeTask)?(openBlock(),createBlock(_sfc_main$42,{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[12]||(_cache[12]=$event=>sendTask(unref(activeTask).id,{retryMessageId:$event})),onCancel:_cache[13]||(_cache[13]=$event=>unref(temporary).cancelMessage(unref(activeTask).id,$event)),onEdit:_cache[14]||(_cache[14]=$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_11$9,toDisplayString(message.text),1)),message.messageId===recoveryMessageId.value&&canReturnToMainChat.value?(openBlock(),createBlock(VBtn,{key:2,ref_key:`returnToMainButton`,ref:returnToMainButton,"aria-busy":closingTask.value,class:`vibe64-temporary-ai__return`,color:`primary`,disabled:props.repositoryBusy||closingTask.value,size:`small`,variant:`tonal`,onClick:_cache[6]||(_cache[6]=$event=>closeTask(unref(activeTask).id,{returnToMainChat:true}))},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[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_12$8,[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_13$7,`Some text was omitted to fit the 64 KiB context limit.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),activeTaskError.value||actionErrors.value[unref(activeTask).id]||activityLabel.value?(openBlock(),createElementBlock(`div`,_hoisted_14$6,[actionErrors.value[unref(activeTask).id]&&!taskToClose.value?(openBlock(),createElementBlock(`div`,_hoisted_15$6,toDisplayString(actionErrors.value[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_16$5)):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_17$5,` 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$50,{key:task.id,"saved-attachments":task.attachments,"attachments-owned-by-conversation":``,ref_for:true,ref:element=>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[10]||(_cache[10]=$event=>unref(typingPresence).blur()),onInputActivity:_cache[11]||(_cache[11]=$event=>unref(typingPresence).noteInputActivity()),onSubmit:$event=>sendTask(task.id),onTabToSubmit:focusSendButton,"onUpdate:modelValue":$event=>unref(temporary).updateDraft(task.id,$event)},{footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_18$4,[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[7]||(_cache[7]=$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=>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[8]||(_cache[8]=$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[9]||(_cache[9]=$event=>__props.previewAttachmentState.attachDiagnostics?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),!task.routingMetadata?.assistant_routing?(openBlock(),createBlock(_sfc_main$43,{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=>setTaskSendButton(task.id,element),"stop-visible":task.busy,"stop-enabled":Boolean(task.conversationId)&&stoppingTaskId.value!==task.id,stopping:stoppingTaskId.value===task.id,sending:task.delivery.state.sending,"can-submit":!props.connectionUnavailable&&stoppingTaskId.value!==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=>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`,`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[15]||(_cache[15]=$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`]),renamingTask.value?(openBlock(),createBlock(VDialog,{key:1,"aria-label":`Rename chat`,"model-value":true,"max-width":`28rem`,persistent:renamePending.value,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(renamingTaskId.value=``))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:withModifiers(submitRename,[`prevent`])},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename chat`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:renameValue.value,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>renameValue.value=$event),label:`Chat name`,variant:`outlined`,maxlength:`80`,autofocus:``,disabled:renamePending.value,placeholder:`Temporary ${renamingTask.value.number||``}`.trim(),hint:`Leave empty to use the numbered name.`,"persistent-hint":``,"error-messages":renameError.value},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:renamePending.value,onClick:_cache[17]||(_cache[17]=$event=>renamingTaskId.value=``)},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,loading:renamePending.value},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Rename`,-1)])]),_:1},8,[`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])):createCommentVNode(``,true),taskToClose.value?(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(taskToClose.value.busy?`Stop and close repair?`:`Close incomplete repair?`),1)]),_:1},8,[`id`]),createVNode(VCardText,null,{default:withCtx(()=>[_cache[33]||(_cache[33]=createTextVNode(` Partial edits will stay in this session and may still need repair. Closing does not undo those edits or complete Update. `,-1)),actionErrors.value[taskToClose.value.id]?(openBlock(),createElementBlock(`p`,_hoisted_19$4,toDisplayString(actionErrors.value[taskToClose.value.id]),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{disabled:closingTask.value,onClick:_cache[19]||(_cache[19]=$event=>closeTaskId.value=``)},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Keep chat open`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:closingTask.value,onClick:_cache[20]||(_cache[20]=$event=>closeTask(taskToClose.value.id))},{default:withCtx(()=>[createTextVNode(toDisplayString(taskToClose.value.busy?`Stop and close`:`Close repair`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`aria-labelledby`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],10,_hoisted_1$35)):createCommentVNode(``,true)}}};var Vibe64TemporaryAiWorkspace_default=_plugin_vue_export_helper_default(_sfc_main$41,[[`__scopeId`,`data-v-633c22d6`]]);var _hoisted_1$34={class:`text-body-2 text-medium-emphasis mb-0`};var _sfc_main$40={__name:`Vibe64SessionArchiveDialog`,props:{archive:{default:()=>({}),type:Object},shortSessionId:{default:sessionId=>String(sessionId||``),type:Function}},setup(__props){const props=__props;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$34,[_cache[1]||(_cache[1]=createTextVNode(` Session: `,-1)),createBaseVNode(`strong`,null,toDisplayString(__props.archive.sessionTitle||__props.shortSessionId(__props.archive.sessionId)),1)])]),_: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…`:`Archive session`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64SessionArchiveDialog_default=_plugin_vue_export_helper_default(_sfc_main$40,[[`__scopeId`,`data-v-6853144f`]]);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 GIT_IDENTITY_COMMANDS=[`git config --global user.name "Your Name"`,`git config --global user.email "you@example.com"`].join(`
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Vibe64OutputControls-DsCbasR0.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/VAvatar-H2hyOWlB.js","assets/rolldown-runtime-DBalRfVu.js","assets/VAvatar-nHaK192T.css","assets/useEndpointResource-tVvsJvd4.js","assets/normalize-BNAdWJYg.js","assets/vibe64ProjectScope.local-l5_-E6pq.js","assets/returnToPath-gKtcu91D.js","assets/deepFreeze-BgoYkoTa.js","assets/useRealtimeEvent-BNXVwzFG.js","assets/VMenu-DnhVIMrr.js","assets/VOverlay-Bi97WKy3.js","assets/lazy-DPw3syqC.js","assets/VOverlay-DG-PukqI.css","assets/ssrBoot-Rlh6kLbD.js","assets/VDivider-AUQb_N9d.js","assets/VDivider-DvkP_iX7.css","assets/VMenu-D_W8zRGm.css","assets/VChip-Uixfx461.js","assets/VChip-PprDbmQn.css","assets/VTextField-CnkGeXaT.js","assets/VTextField-BiatYyd3.css","assets/mdi-X9prU-DG.js","assets/VBtn-Sj5jAuOx.js","assets/VBtn-uSpaN2Ha.css","assets/VAlert-7_VM9EUm.js","assets/VAlert-DVXMoK42.css","assets/VCheckbox-CHFec5Bg.js","assets/VCheckbox-ChRKi1kj.css","assets/VDialog-Drp3yzSH.js","assets/VDialog-DP-kc9Gx.css","assets/VCard-DExT9Cji.js","assets/VCard-dv-Dc592.css","assets/VSpacer-BSTt0_VA.js","assets/VSpacer-DfbUir7X.css","assets/_plugin-vue_export-helper-DNW4j-dv.js","assets/usePaths-Y6UuQxmI.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/linkPath-Ch9eft18.js","assets/surface-DzO5xqc8.js","assets/placement-DYM3JJ-F.js","assets/pathname-Bb895US8.js","assets/useCommand-DhwB5k1w.js","assets/error-W1ZAEk4a.js","assets/useUiFeedback-DLUToc5y.js","assets/useVibe64Terminal-B9EWJ9Ba.js","assets/preload-helper-BvdcsxN9.js","assets/asyncModuleRecovery-DJsn5NrL.js","assets/VSheet-CMhyReNa.js","assets/VSheet-BbLSwuzR.css","assets/StudioErrorNotice-DudSuU3G.js","assets/StudioErrorNotice-1K8E_MXD.css","assets/browserLocalStorage-B4C7rHrs.js","assets/clipboard-CZs9aH3L.js","assets/useVibe64Terminal-fDhiQNz6.css","assets/useVibe64ProjectScope-DXjsKKhl.js","assets/vibe64BrowserTabOrigin-SF9E31vi.js","assets/index-DZgCwvFD.js","assets/VSelect-Dqnp_CFi.js","assets/VSelect-y7fezdfU.css","assets/layout-BtR_9hCB.js","assets/vibe64AssistantHost-CP6oxv5b.js","assets/studioUrls-B0-GdWh8.js","assets/client-CP2EwnrY.js","assets/VAutocomplete-Ck14ZtUL.js","assets/VAutocomplete-D48FgPMA.css","assets/VRow--oHnzZ1V.js","assets/VRow-DIr3-SqU.css","assets/VExpansionPanels-BgimJBV2.js","assets/VExpansionPanels-cvCWEkWz.css","assets/client-B88Jggew.js","assets/VRadioGroup-OHg3N6_i.js","assets/VRadioGroup-C9f4tbih.css","assets/VSkeletonLoader-pc4bBTxv.js","assets/VSkeletonLoader-LCPSxykp.css","assets/VSwitch-B_DmcTxG.js","assets/VSwitch-FGoTnWb6.css","assets/shared-TUhK_uYM.js","assets/assistantRouting-D_9PZkWu.js","assets/shared-BEwrtWSp.js","assets/vibe64ApiResponses-B4VY77Q_.js","assets/studioGateApi-mkX1eOTX.js","assets/client-Dh1mE5bc.css","assets/VTextarea-wqoRFl1K.js","assets/VTextarea-DDl63AeD.css","assets/conversation-DL4AODd9.js","assets/conversation-DG9lp25w.js","assets/conversation-CSDHdGDb.css","assets/useVibe64DatabaseTools-Cac_aZnv.js","assets/useVibe64SystemGraph-idV9zXa9.js","assets/index-B-dukXUB.css","assets/Vibe64TemporaryAiFixAction-CV26vPTg.js","assets/Vibe64TemporaryAiFixAction-D_mq1dFE.css","assets/vibe64SessionViewModel-B0cCumM8.js","assets/vibe64SessionDebugLog-C06bcdUN.js","assets/Vibe64OutputControls-CfA0bG52.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.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{_ as VIcon,cr as withKeys,lr as withModifiers,lt as useDisplay,n as VBadge,p as VProgressLinear,rr as Transition,sr as vShow,t as VAvatar}from"./VAvatar-H2hyOWlB.js";import{r as useShellWebErrorRuntime}from"./error-W1ZAEk4a.js";import{D as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource,tt as useQueryClient}from"./useEndpointResource-tVvsJvd4.js";import{_ as useRouter,c as isNavigationFailure,g as useRoute,t as NavigationFailureType}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as projectSlugFromPathname,c as vibe64ProjectScopedStorageKey,d as getHttpWebClient,i as projectListPath,n as normalizeProjectRoutePath,o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-l5_-E6pq.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{c as VListItemTitle,n as VList,s as VListItem,t as VMenu}from"./VMenu-DnhVIMrr.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.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{i as studioApiPath,n as resolveWebSocketUrl,r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-B0-GdWh8.js";import{a as isDynamicImportError,n as dynamicImportErrorMessage}from"./asyncModuleRecovery-DJsn5NrL.js";import{$ as mdiCloudDownloadOutline,Bn as mdiPaperclip,Br as mdiViewDashboardOutline,Ct as mdiDotsVertical,D as mdiAutoFix,Dr as mdiSwapVertical,E as mdiArrowUp,F as mdiCameraOutline,G as mdiCircle,Gn as mdiPinOutline,H as mdiChevronLeft,Ir as mdiTuneVariant,Jn as mdiPlus,K as mdiCircleOutline,Kn as mdiPlay,Kt as mdiGithub,L as mdiCheck,Mt as mdiFileDocumentEditOutline,Nt as mdiFileDocumentOutline,O as mdiAutorenew,Ot as mdiEyePlusOutline,R as mdiCheckCircle,Rr as mdiUndoVariant,S as mdiArrowLeft,Sr as mdiSourceRepository,St as mdiDotsHorizontalCircleOutline,T as mdiArrowTopRight,Tr as mdiStop,U as mdiChevronRight,Un as mdiPencilOutline,V as mdiChevronDown,Vn as mdiPause,W as mdiChevronUp,Wn as mdiPin,X as mdiClose,Xt as mdiHelpCircleOutline,Y as mdiClockOutline,Yr as mdiWrenchOutline,Zt as mdiHistory,_r as mdiSourceBranchPlus,b as mdiArchiveOutline,c as mdiAccountOutline,cr as mdiSchoolOutline,dt as mdiContentSaveAlertOutline,er as mdiRefresh,f as mdiAlertCircleOutline,ft as mdiContentSaveOutline,g as mdiArchiveArrowDownOutline,gr as mdiSourceBranch,h as mdiApplicationOutline,i as mdiAccountGroupOutline,it as mdiCogOutline,k as mdiBookOpenPageVariantOutline,kn as mdiMagnify,l as mdiAccountStarOutline,lr as mdiSend,lt as mdiConsoleNetworkOutline,nn as mdiIncognito,nr as mdiRestart,q as mdiCircleSlice4,qn as mdiPlayCircleOutline,rn as mdiInformationOutline,rr as mdiRestore,v as mdiArchiveCheckOutline,vr as mdiSourceBranchSync,wn as mdiLinkVariantOff,wr as mdiStarOutline,x as mdiArrowDown,xr as mdiSourcePull,yr as mdiSourceCommit,z as mdiCheckCircleOutline}from"./mdi-X9prU-DG.js";import{r as VProgressCircular,t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VCheckbox}from"./VCheckbox-CHFec5Bg.js";import{t as VDivider}from"./VDivider-AUQb_N9d.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{a as Vibe64StarredFilesList_default,c as conversationAttribution,d as _sfc_main$50,f as _sfc_main$51,i as sourceEditorLinkTarget,l as Vibe64ConversationStatus_default,m as useVibe64AttachmentCommands,n as Vibe64SessionSourceEditor_default,o as thinkingMessagePresentation,p as useAgentAttachments,r as Vibe64ConversationLog_default,s as usesCommentaryForThinking,t as Vibe64SessionFiles_default,u as _sfc_main$49}from"./Vibe64SessionFiles-DKo5wd8-.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-BgimJBV2.js";import{S as VIBE64_ACCOUNTS_CHANGED_EVENT,T as VForm,b as ModelRoutingForm_default,c as aiOnboardingNeeded,f as useLocalToolRows,g as useVibe64Accounts,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-B88Jggew.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as VSwitch}from"./VSwitch-B_DmcTxG.js";import{t as VTextarea}from"./VTextarea-wqoRFl1K.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{a as assistantAttachmentFilesFromPasteEvent,b as LongTextPreviewBlocks_default,c as useAssistantSuggestions,d as AssistantQuestionInputs_default,l as AssistantConversationElement_default,m as AssistantComposerSupport_default,n as unmatchedOptimisticMessages,p as AssistantGoalControl_default,s as useAssistantQuestions,u as AssistantModelControl_default,x as parseLongTextReviewBlocks}from"./conversation-DL4AODd9.js";import"./conversation-DG9lp25w.js";import{n as useRealtimeEvent,r as useRealtimeSocket}from"./useRealtimeEvent-BNXVwzFG.js";import{t as usePaths}from"./usePaths-Y6UuQxmI.js";import{c as vibe64AssistantSelectionLabel,d as VIBE64_DEFAULT_AGENT_PROVIDER_ID,f as defaultVibe64AgentSettings,h as VIBE64_ASSISTANT_ACCESS_ERROR_CODES,l as vibe64ProviderPresentation,m as normalizeVibe64AgentSettings,n as normalizedPromptHintSuggestion,o as normalizeVibe64ConversationAttachments,p as findVibe64AgentProvider,r as normalizedPromptHintSuggestions,s as VIBE64_AGENT_TASK_RESULT_SCHEMA,t as normalizedPromptHintDraft,u as VIBE64_AGENT_PROVIDERS}from"./shared-TUhK_uYM.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-D_9PZkWu.js";import{t as useCommand}from"./useCommand-DhwB5k1w.js";import{t as useUiFeedback}from"./useUiFeedback-DLUToc5y.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-DudSuU3G.js";import{a as Vibe64Terminal_default,i as useShellAsyncModuleRecoveryRuntime,n as createWebSocketTerminalDriver,o as Vibe64TerminalSurface_default,s as terminalLastMeaningfulLine,t as useVibe64Terminal}from"./useVibe64Terminal-B9EWJ9Ba.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import"./shared-BEwrtWSp.js";import{i as vibe64ResourceResponseError,n as vibe64ApiResponseError,r as vibe64RequestAccepted,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{D as projectSelectionQueryKey,O as projectSettingsQueryKey,S as VIBE64_PROJECT_SELECT_API_SUFFIX,b as VIBE64_PROJECT_CHANGED_EVENT,c as PROJECT_SELECTION_ENDPOINT,l as PROJECT_SETTINGS_ENDPOINT,m as VIBE64_CONNECTIONS_CHANGED_EVENT,x as VIBE64_PROJECT_CREATE_API_SUFFIX}from"./studioGateApi-mkX1eOTX.js";import{n as useVibe64ProjectSlug,t as provideVibe64OpenedProjectSlug}from"./useVibe64ProjectScope-DXjsKKhl.js";import{n as vibe64RealtimeOriginPayload,r as vibe64RealtimePayloadFromCurrentTab,t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$t as VIBE64_LEARNING_ROUTES,A as VIBE64_SESSIONS_API_SUFFIX,B as vibe64AgentTerminalPath,Bt as VTabs,C as readRefOrGetterValue,Ct as vibe64TemporaryConversationPath,D as VIBE64_API_SUFFIX,Dt as createAssistantApi,E as useVibe64AssistantCatalog,Et as useAssistantConversationFactory,F as agentTurnControlPayloadFromContext,M as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,Mt as mainConversationTarget,Nt as temporaryConversationId,Ot as latestAssistantMessageAwaitingUserReply,Pt as useVibe64Voice,Qt as VIBE64_LEARNING_MODE_PROJECT_CODE,S as Vibe64SessionAssistantMenu_default,T as requestVibe64AccountConnectionsDialog,Tt as useAssistantConversation,Vt as VTab,W as vibe64OutputRunPath,Xt as STEP_STATUS_LABELS,Yt as usePageActivity,Zt as VIBE64_LEARNING_MODE_NOTE,an as isPracticeProjectSlug,at as vibe64SessionPromptHintsCancelPath,b as useVibe64LearningCourses,cn as RouterView,en as checkNote,g as Vibe64LearningMarkdown_default,in as withoutLesson,j as VIBE64_SESSION_CHANGED_EVENT,jt as mainConversationId,kt as VIBE64_TRAINING_LEARNER_CHANGED_EVENT,l as useShellLayoutState,nn as revealCurrentStep,nt as vibe64SessionEventMatchesScope,on as projectDisplayName,ot as vibe64SessionPromptHintsPath,qt as VBottomSheet,rn as reviewRunNote,rt as vibe64SessionPath,sn as projectSubtitle,st as vibe64SessionQueryKey,tn as lessonShownIn,tt as vibe64SessionCheckUpdatesPath,wt as vibe64TemporaryConversationsPath,x as useVibe64Learning,xt as vibe64SourceEditorStarsPath,y as courseProgress,z as vibe64AgentTerminalControlTextPath}from"./index-DZgCwvFD.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-CV26vPTg.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-C06bcdUN.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-BZsCIA2Z.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-CE9ig_nO.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-CDIB5Gpr.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-CPEGxBWZ.js";import{t as vibe64SessionInfoFacts}from"./vibe64SessionInfo-Cr7EeBBT.js";import{n as normalizeRoutePath,r as routePathContainsSection,t as Vibe64DashboardShell_default}from"./Vibe64DashboardShell-DFE-2tFZ.js";import{a as vibe64SessionToolGuideId,i as vibe64SessionToolDashboardSuffix,o as vibe64SessionToolIdFromRouteSegment,r as VIBE64_SESSION_TOOL_DEFINITIONS}from"./vibe64SessionToolDefinitions-hqh6mSY8.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-FGnNvFfK.js";import{n as enrichVibe64SessionForDisplay,t as blockingVibe64SessionPageError}from"./vibe64SessionPanelModel-DoorGDCG.js";import{n as useVibe64ConversationLog}from"./useVibe64ConversationLog-jM3KOvN7.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-CQjgoaS0.js";import{t as selectedSessionIdFromRoute}from"./useVibe64SessionSelection-Bgsif-tm.js";import{n as repositoryStatusRealtimeShouldRefresh,r as repositoryStatusSessionId,t as repositoryStatusRealtimeNeedsCanonicalCheck}from"./vibe64RepositoryRealtime-C-J0I5jY.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$40={class:`vibe64-team-ai-gate__icon`};var _hoisted_2$33={class:`vibe64-team-ai-gate__text`};var _hoisted_3$29={class:`vibe64-team-ai-gate__ask`,"data-test":`team-ai-gate-ask`};var _hoisted_4$23={class:`vibe64-team-ai-gate__actions`};var _sfc_main$48={__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$40,[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$33,toDisplayString(ownerAtStart.value)+` needs to set up AI for team members before you can open projects here. `,1),createBaseVNode(`p`,_hoisted_3$29,` Ask `+toDisplayString(owner.value)+` to set up AI for team members. `,1),createBaseVNode(`div`,_hoisted_4$23,[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$48,[[`__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=hasInjectionContext()?useVibe64Learning():null;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$39={class:`project-selection-gate`};var _hoisted_2$32={class:`project-selection-gate__deleted-text`};var _hoisted_3$28={class:`project-selection-gate__header`};var _hoisted_4$22={class:`project-selection-gate__path`};var _hoisted_5$19={key:0,class:`project-selection-gate__learning-note`,role:`status`,"data-test":`learning-mode-picker-note`};var _hoisted_6$17={key:1,class:`project-selection-gate__team-ai`,role:`status`,"data-test":`team-ai-owner-prompt`};var _hoisted_7$16={key:2,class:`project-selection-gate__list`};var _hoisted_8$16={class:`project-selection-gate__project-name`};var _hoisted_9$14={class:`project-selection-gate__project-path`};var _sfc_main$47={__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$39,[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)),unref(learning)?(openBlock(),createBlock(VBtn,{key:0,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})):createCommentVNode(``,true)]),_: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$32,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$28,[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$22,toDisplayString(unref(projectsRoot)),1)])]),unref(learnMode)?(openBlock(),createElementBlock(`div`,_hoisted_5$19,[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$17,[_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$16,[(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$16,[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$47,[[`__scopeId`,`data-v-68686cbe`]]);var _hoisted_1$38={key:1,class:`local-remotes__branch-name`};var _hoisted_2$31={class:`d-flex ga-3 align-start`};var _hoisted_3$27={class:`min-w-0`};var _hoisted_4$21={class:`text-body-large font-weight-medium ma-0`};var _hoisted_5$18={class:`d-flex ga-3 align-start`};var _hoisted_6$16={class:`local-remotes__status text-body-small mb-3`,role:`status`,"aria-live":`polite`};var _hoisted_7$15={class:`d-flex flex-column ga-1`};var _hoisted_8$15={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$11={key:0,class:`text-body-medium text-error mt-3 local-remotes__message`};var _hoisted_12$10={key:1,class:`text-body-small text-medium-emphasis mt-3`};var _hoisted_13$8={key:0};var _hoisted_14$7={class:`local-remotes__message`};var _hoisted_15$7={key:0};var _hoisted_16$6={class:`local-remotes__url`};var _hoisted_17$6={key:0};var _hoisted_18$5={key:1};var _hoisted_19$5={key:2};var _sfc_main$46={__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`&¤t.incoming>0&¤t.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$38,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$31,[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$27,[createBaseVNode(`p`,_hoisted_4$21,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$18,[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$16,[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$15,[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$15,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$11,toDisplayString(remoteError.value),1)):!state.value?.upstream||!state.value?.push?(openBlock(),createElementBlock(`p`,_hoisted_12$10,` 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$8,`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$7,[_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$7,[..._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$6,toDisplayString(pendingReview.value.target.url),1),pendingReview.value.action===`push`?(openBlock(),createElementBlock(`p`,_hoisted_17$6,`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$5,`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$5,`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$46,[[`__scopeId`,`data-v-f775cba6`]]);var _hoisted_1$37={class:`studio-autopilot__composer-delivery`};var _sfc_main$45={__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$37,[__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$45,[[`__scopeId`,`data-v-9e56f63d`]]);var _hoisted_1$36={class:`d-flex align-center justify-space-between px-4`};var _hoisted_2$30={class:`d-flex`};var _hoisted_3$26={class:`chat-modes__details-body`};var _hoisted_4$20={key:0,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_5$17={key:2,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_6$15={key:3,class:`text-body-small px-4 pb-2`,role:`status`};var _hoisted_7$14={class:`chat-modes__model`};var _hoisted_8$14={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$10={key:0,class:`text-body-small`};var _hoisted_12$9={class:`px-4 pb-3`};var _sfc_main$44={__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 routing settings.`:`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`:``}`);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$36,[_cache[15]||(_cache[15]=createBaseVNode(`strong`,null,`Chat mode`,-1)),createBaseVNode(`div`,_hoisted_2$30,[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiCogOutline),variant:`text`,width:`48`,height:`48`,"aria-label":`Configure model routing`,title:`Configure model routing`,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$26,[__props.connecting||__props.active||saving.value||!mode.value?(openBlock(),createElementBlock(`p`,_hoisted_4$20,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$17,`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$15,`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$14,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$14,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$10,toDisplayString(reviewDescription.value),1)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)])],64)),createBaseVNode(`div`,_hoisted_12$9,[renderSlot(_ctx.$slots,`default`,{},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$44,[[`__scopeId`,`data-v-649887bb`]]);var _sfc_main$43={__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 draftWithRestoredMessage(text=``,draft=``){return!draft||draft.startsWith(text)?draft||text:`${text}\n\n${draft}`}var _sfc_main$42={__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$49,{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`])}}};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}}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:``}}function temporaryAiId(prefix=`temporary`){return`${prefix}_${crypto.randomUUID()}`}function temporaryAiText(value=``){return String(value||``).trim()}function temporaryAiRequestError(response={},fallback=`Temporary AI request failed.`){return Object.assign(new Error(vibe64ApiResponseError(response,fallback)),{code:temporaryAiText(response.code),conversationExpired:response.conversationExpired===true||response.code===`vibe64_conversation_closed`,status:temporaryAiText(response.status)})}function temporaryAiTurnIsActive(status=``){const normalizedStatus=temporaryAiText(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 useVibe64TemporaryAi({active=()=>true,agentSettings=()=>defaultVibe64AgentSettings(),assistantReady=()=>false,onTaskFinished=null,operationBusy=()=>false,sessionId,sessionsApiPath}={}){const tasks=ref([]);const activeTaskId=ref(``);const open=ref(false);const restorations=new Map;const saveTimers=new Map;const pendingSaveFields=new Map;const unsentSaveFields=new Map;const saveVersions=new Map;const creations=new Map;const saves=new Map;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 restoreError=ref(``);let restoreGeneration=0;let restoreRetryTimer;const closingTaskIds=new Set;const stoppingTaskIds=new Set;let disposed=false;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 temporaryAiText(readRefOrGetterValue(sessionId))}function currentSessionsApiPath(){return temporaryAiText(readRefOrGetterValue(sessionsApiPath))}function canApplyTaskResponse(task){return!disposed&&tasks.value.some(current=>current.id===task.id&¤t.binding===task.binding)}function taskView(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 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`&&temporaryAiText(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(temporaryAiText(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=temporaryAiText(observed.status)||task.status;update.busy=temporaryAiTurnIsActive(update.status);update.phase=update.busy?temporaryAiText(snapshot.phase):``;update.runId=observed.runId||task.runId;update.outcomeKind=temporaryAiText(observed.outcome?.kind)}if(!observed.deferredReconciliation)update.error=temporaryAiText(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 taskView({...value,binding,releaseBinding:markRaw(()=>{stop();binding.release()})})}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 taskView({...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}function taskPresentation(task,selected){return Object.fromEntries([`title`,`draft`,`displayMessage`,`completionMessage`,`dedupeKey`,`failureMessage`,`nextStepMessage`,`recoveryNotice`,`recoveryOperation`,`recoveryConflictId`,`recoveryContext`,`recoveryOutcome`,`recoveryOutcomeMessage`,`recoveryRequestId`,`recoveryAutoPaused`,`recoveryRetryKeys`,`runConflictId`].filter(key=>!selected||selected.has(key)).map(key=>[key,task[key]]))}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=request(vibe64TemporaryConversationsPath(task.apiPath,task.sessionId),{method:`POST`,body:{conversationId:task.id,...task.includeRecentChatContext?{includeRecentChatContext:true}:{},...task.initialRouting?{assistantRouting:task.initialRouting}:{},agentSettings:current.agentSettings,presentation:taskPresentation(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||disposed&&!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=taskPresentation(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 request(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&¤t.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&¤t?.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})}async function restoreTasks(){clearTimeout(restoreRetryTimer);const generation=++restoreGeneration;if(disposed||!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(!disposed&&generation===restoreGeneration)return restoreTasks();return}restoring=request(vibe64TemporaryConversationsPath(apiPath,ownerSessionId),{method:`GET`}).finally(()=>restorations.delete(key));restorations.set(key,restoring);const response=await restoring;if(disposed||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(disposed||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 reportTaskFinished(taskId=``){if(typeof onTaskFinished!==`function`)return;const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task)return;try{onTaskFinished(Object.freeze({completionMessage:temporaryAiText(task.completionMessage),dedupeKey:temporaryAiText(task.dedupeKey),error:temporaryAiText(task.error),failureMessage:temporaryAiText(task.failureMessage),id:task.id,outcomeKind:temporaryAiText(task.outcomeKind),recoveryOperation:temporaryAiText(task.recoveryOperation),runConflictId:temporaryAiText(task.runConflictId),runId:task.runId,sessionId:task.sessionId,status:temporaryAiText(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:temporaryAiText(completionMessage),conversationId:``,dedupeKey:temporaryAiText(dedupeKey),displayMessage:temporaryAiText(displayMessage),draft:temporaryAiText(draft),error:``,failureMessage:temporaryAiText(failureMessage),id:temporaryAiId(`temporary-ai`),messages:[],unread:false,nextStepMessage:temporaryAiText(nextStepMessage),pendingMessageId:``,recoveryOutcome:``,recoveryOutcomeMessage:``,recoveryNotice:temporaryAiText(recoveryNotice),recoveryOperation:recoveryOperation===`update`?`update`:``,recoveryConflictId:temporaryAiText(recoveryConflictId),recoveryContext:temporaryAiText(recoveryContext),recoveryRetryKeys:[],recoveryAutoPaused:false,runId:``,runConflictId:``,sessionId:currentSessionId(),status:`ready`,title:temporaryAiText(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=temporaryAiText(input.message||input.draft);if(!message||!currentSessionId()||!currentSessionsApiPath())return Object.freeze({ok:false,reused:false,started:false,taskId:``});const dedupeKey=temporaryAiText(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:temporaryAiText(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`&&temporaryAiText(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 request(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 request(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=temporaryAiText(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:temporaryAiText(message)||`Repair verified.`}}:{},recoveryOutcome:outcome,...recoveryRequestId?{recoveryRequestId}:{},recoveryAutoPaused:false,recoveryOutcomeMessage:temporaryAiText(message),...outcome!==`checking`?{recoveryContext:outcome===`failed`?retryMessage||message:message,recoveryConflictId:temporaryAiText(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 request(path=``,options={}){const response=await getHttpWebClient().request(path,options);if(response?.ok===false)throw temporaryAiRequestError(response);return response}function pendingMessage(task,messageId){const local=task?.delivery.find(messageId);const route=assistantRoutingRequestForDisplay(task?.routingMetadata);return route?.messageId===messageId&&routedChatMessage(route,local)||local}async function send(taskId=``,{retryMessageId=``,generatedMessage=null,attachmentOwner=null}={}){const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!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:taskPresentation(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`});clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId)},async prepare(submission){if(saves.has(taskId))await saves.get(taskId);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;task.delivery.remove(messageId);updateTask(taskId,{busy:false,pendingMessageId:``,error:``,errorCode:``,status:`interrupted`,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&¤t.pendingMessageId!==messageId)return true;const stillWorking=task.busy&&error?.conversationExpired!==true;updateTask(taskId,{busy:stillWorking,conversationId:error?.conversationExpired===true?``:current.conversationId,error:temporaryAiText(error?.message||error)||`Temporary AI message could not be sent.`,errorCode:temporaryAiText(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);if(disposed||!message||message.status!==`failed`||readRefOrGetterValue(operationBusy)||closingTaskIds.has(taskId)||task.recoveryOutcome===`checking`)return false;const route=assistantRoutingRequestForDisplay(task.routingMetadata);if(route?.messageId===messageId){if(route.delivery===`uncertain`){updateTask(taskId,{error:`Check delivery before editing or cancelling this message.`});return false}await stopTask(taskId)}else if(task.busy)return false;task.delivery.remove(messageId);updateTask(taskId,{...task.pendingMessageId===messageId?{pendingMessageId:``}:{},...task.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||!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(disposed||!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)}}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{clearTimeout(saveTimers.get(taskId));saveTimers.delete(taskId);if(saves.has(taskId))await saves.get(taskId);const conversationId=task.conversationId||(creations.has(taskId)?await creations.get(taskId):``);if(conversationId)await request(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}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}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={}})=>!disposed&&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={}})=>!disposed&&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();for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear();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});onBeforeUnmount(()=>{flushPendingSaves();disposed=true;clearTimeout(restoreRetryTimer);restoreGeneration+=1;for(const timer of saveTimers.values())clearTimeout(timer);saveTimers.clear();pendingSaveFields.clear();saveVersions.clear();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 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&¤tContext.value.projectSlug&¤tContext.value.sessionId&¤tContext.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&¤t!==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$35=[`aria-label`];var _hoisted_2$29={class:`vibe64-temporary-ai__tabs`,"aria-label":`Main and temporary conversations`};var _hoisted_3$25={class:`vibe64-temporary-ai__task-tabs`};var _hoisted_4$19=[`aria-current`,`data-temporary-ai-task-id`,`aria-label`,`title`,`onClick`];var _hoisted_5$16={key:0,class:`vibe64-temporary-ai__unread`,"aria-hidden":`true`};var _hoisted_6$14={key:1,class:`vibe64-temporary-ai__busy`,"aria-label":`Assistant working`};var _hoisted_7$13={class:`vibe64-temporary-ai__recovery-row`};var _hoisted_8$13={key:1,"aria-live":`polite`,class:`vibe64-temporary-ai__recovery`,"data-temporary-ai-recovery":``,role:`status`};var _hoisted_9$11={class:`vibe64-temporary-ai__recovery-summary`};var _hoisted_10$10={key:0};var _hoisted_11$9={key:1};var _hoisted_12$8={key:0};var _hoisted_13$7={key:0};var _hoisted_14$6={key:1,class:`vibe64-temporary-ai__feedback`};var _hoisted_15$6={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _hoisted_16$5=[`role`];var _hoisted_17$5={key:0,class:`text-caption`,role:`status`,"aria-live":`polite`};var _hoisted_18$4={class:`vibe64-temporary-ai__composer-actions`};var _hoisted_19$4={key:0,class:`vibe64-temporary-ai__error`,role:`alert`};var _sfc_main$41={__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)}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=!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}}function openTask(options){selectionRevision.value+=1;hostConversation?.value?.close();return temporary.openTask(options)}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}}function closeWorkspace(){selectionRevision.value+=1;hostConversation?.value?.close();temporary.closeWorkspace()}const workspace=ref(null);const completionMessage=ref(null);const returnToMainButton=ref(null);const taskTabButtons=new Map;const taskPrompts=new Map;const taskSendButtons=new Map;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 customOpen=ref(false);const customTarget=ref(null);const activeTask=temporary.activeTask;watch(()=>activeTask.value?.id,()=>{customOpen.value=false});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 closeTaskId=ref(``);const closingTask=ref(false);const stoppingTaskId=ref(``);const actionErrors=ref({});const taskToClose=computed(()=>temporary.tasks.value.find(task=>task.id===closeTaskId.value));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)));const activeTaskRecoveryTitle=computed(()=>{if(activeTaskRecoveryChecking.value)return`Checking Update…`;const status=String(activeTask.value?.status||``).trim();if([`starting`,`inProgress`].includes(status))return`AI repair in progress`;if(activeTask.value?.recoveryOutcome===`failed`)return`Update needs attention`;if(activeTask.value?.recoveryOutcome===`unconfirmed`)return`Update result not confirmed`;if(activeTask.value?.recoveryOperation===`update`)return`Update not yet verified`;if(activeTask.value?.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=activeTask.value||{};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.`});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=``}}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))}function taskPrompt(taskId=``){return taskPrompts.get(String(taskId||``))||null}function setTaskPrompt(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskPrompts.set(normalizedTaskId,element);return}taskPrompts.delete(normalizedTaskId)}function setTaskSendButton(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskSendButtons.set(normalizedTaskId,element);return}taskSendButtons.delete(normalizedTaskId)}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(){selectionRevision.value+=1;hostConversation?.value?.close();if(!temporary.tasks.value.length){temporary.open.value=true;openNewTask();return null}const task=temporary.showWorkspace();revealTaskTab(temporary.activeTaskId.value);return task}function setTaskTabButton(taskId=``,element=null){const normalizedTaskId=String(taskId||``);if(!normalizedTaskId)return;if(element){taskTabButtons.set(normalizedTaskId,element);return}taskTabButtons.delete(normalizedTaskId)}function afterBrowserPaint(){if(typeof globalThis.requestAnimationFrame!==`function`)return Promise.resolve();return new Promise(resolve=>{globalThis.requestAnimationFrame(()=>resolve())})}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?.()}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`});const colleagueView=inject(VIBE64_COLLEAGUE_VIEW_KEY,null);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});__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`},[createBaseVNode(`nav`,_hoisted_2$29,[createBaseVNode(`div`,{class:`vibe64-temporary-ai__tab vibe64-temporary-ai__tab--main`},[createBaseVNode(`button`,{class:`vibe64-temporary-ai__tab-select`,"data-temporary-ai-main-chat":``,type:`button`,onClick:selectMainChat},` Main chat `)]),createBaseVNode(`div`,_hoisted_3$25,[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[0]||(_cache[0]=$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(unref(temporary).tasks.value,task=>{return openBlock(),createElementBlock(`div`,{key:task.id,class:normalizeClass([`vibe64-temporary-ai__tab`,{"vibe64-temporary-ai__tab--active":!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value}])},[createBaseVNode(`button`,{ref_for:true,ref:element=>setTaskTabButton(task.id,element),"aria-current":!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value?`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=>selectTask(task.id)},[createBaseVNode(`span`,null,toDisplayString(task.label),1),task.unread?(openBlock(),createElementBlock(`span`,_hoisted_5$16)):createCommentVNode(``,true),task.nativeWorking?(openBlock(),createElementBlock(`span`,_hoisted_6$14)):createCommentVNode(``,true)],8,_hoisted_4$19),!unref(hostConversation)?.selected&&task.id===unref(temporary).activeTaskId.value?(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=>openRename(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`||closingTask.value||stoppingTaskId.value===task.id,height:`32`,icon:unref(mdiClose),"min-width":`32`,size:`x-small`,title:`Close ${task.label}`,type:`button`,variant:`text`,onClick:$event=>requestCloseTask(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:openNewTask},null,8,[`disabled`,`icon`])]),_cache[21]||(_cache[21]=createBaseVNode(`span`,{class:`vibe64-temporary-ai__tabs-spacer`},null,-1))]),newTaskOpen.value?(openBlock(),createBlock(VDialog,{key:0,"model-value":newTaskOpen.value,"aria-label":`New temporary chat`,"max-width":`480`,persistent:creatingTask.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=value=>{if(!value)cancelNewTask()})},{default:withCtx(()=>[createVNode(VCard,{title:`New temporary chat`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createVNode(VCheckbox,{modelValue:includeRecentChatContext.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>includeRecentChatContext.value=$event),disabled:creatingTask.value||Boolean(creatingTaskId.value),label:`Include recent chat context`,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[22]||(_cache[22]=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)),createTaskError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(createTaskError.value),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:creatingTask.value,onClick:cancelNewTask},{default:withCtx(()=>[..._cache[23]||(_cache[23]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{loading:creatingTask.value,disabled:creatingTask.value,onClick:createTask},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(`Create chat`,-1)])]),_:1},8,[`loading`,`disabled`])]),_: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},[createBaseVNode(`div`,_hoisted_7$13,[unref(temporary).restoreError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(temporary).restoreError.value)+` `,1),createVNode(VBtn,{color:`error`,variant:`text`,height:`48`,onClick:_cache[3]||(_cache[3]=$event=>unref(temporary).restoreTasks())},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),unref(activeTask)?.recoveryNotice&&!activeTaskRecoveryVerified.value&&!props.connectionUnavailable?(openBlock(),createElementBlock(`div`,_hoisted_8$13,[createBaseVNode(`div`,_hoisted_9$11,[createBaseVNode(`strong`,null,toDisplayString(activeTaskRecoveryTitle.value),1),activeTaskRecoveryStatus.value&&!unref(activeTask).busy?(openBlock(),createElementBlock(`details`,_hoisted_10$10,[_cache[26]||(_cache[26]=createBaseVNode(`summary`,null,`Details`,-1)),createBaseVNode(`p`,null,toDisplayString(activeTaskRecoveryStatus.value),1)])):createCommentVNode(``,true)]),unref(activeTask).recoveryOperation===`update`&&!activeTaskRecoveryVerified.value?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-check-update":``,disabled:props.updateDisabled||taskInputDisabled(unref(activeTask))||unref(activeTask).busy||unref(activeTask).recoveryOutcome===`unconfirmed`,loading:activeTaskRecoveryChecking.value,title:props.updateDisabled?props.updateDisabledReason:`Check whether the repaired session can update`,size:`small`,variant:`tonal`,onClick:_cache[4]||(_cache[4]=$event=>emit(`check-update`,unref(activeTask)))},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(` Check Update `,-1)])]),_:1},8,[`disabled`,`loading`,`title`])):createCommentVNode(``,true),unref(activeTask).recoveryOperation===`update`&&!activeTaskRecoveryVerified.value&&props.canReviewUpdate?(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-temporary-ai__check-update`,"data-temporary-ai-review-update":``,disabled:props.updateDisabled||taskInputDisabled(unref(activeTask))||unref(activeTask).busy||unref(activeTask).recoveryOutcome===`unconfirmed`,size:`small`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>emit(`review-update`))},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(` Review resolved conflicts `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true)]),unref(activeTask)?(openBlock(),createBlock(_sfc_main$42,{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[12]||(_cache[12]=$event=>sendTask(unref(activeTask).id,{retryMessageId:$event})),onCancel:_cache[13]||(_cache[13]=$event=>unref(temporary).cancelMessage(unref(activeTask).id,$event)),onEdit:_cache[14]||(_cache[14]=$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_11$9,toDisplayString(message.text),1)),message.messageId===recoveryMessageId.value&&canReturnToMainChat.value?(openBlock(),createBlock(VBtn,{key:2,ref_key:`returnToMainButton`,ref:returnToMainButton,"aria-busy":closingTask.value,class:`vibe64-temporary-ai__return`,color:`primary`,disabled:props.repositoryBusy||closingTask.value,size:`small`,variant:`tonal`,onClick:_cache[6]||(_cache[6]=$event=>closeTask(unref(activeTask).id,{returnToMainChat:true}))},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[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_12$8,[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_13$7,`Some text was omitted to fit the 64 KiB context limit.`)):createCommentVNode(``,true)])):createCommentVNode(``,true),activeTaskError.value||actionErrors.value[unref(activeTask).id]||activityLabel.value?(openBlock(),createElementBlock(`div`,_hoisted_14$6,[actionErrors.value[unref(activeTask).id]&&!taskToClose.value?(openBlock(),createElementBlock(`div`,_hoisted_15$6,toDisplayString(actionErrors.value[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_16$5)):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_17$5,` 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$50,{key:task.id,"saved-attachments":task.attachments,"attachments-owned-by-conversation":``,ref_for:true,ref:element=>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[10]||(_cache[10]=$event=>unref(typingPresence).blur()),onInputActivity:_cache[11]||(_cache[11]=$event=>unref(typingPresence).noteInputActivity()),onSubmit:$event=>sendTask(task.id),onTabToSubmit:focusSendButton,"onUpdate:modelValue":$event=>unref(temporary).updateDraft(task.id,$event)},{footer:withCtx(({attachmentState})=>[createBaseVNode(`div`,_hoisted_18$4,[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[7]||(_cache[7]=$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=>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[8]||(_cache[8]=$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[9]||(_cache[9]=$event=>__props.previewAttachmentState.attachDiagnostics?.())},null,8,[`disabled`,`aria-busy`,`icon`])):createCommentVNode(``,true),!task.routingMetadata?.assistant_routing?(openBlock(),createBlock(_sfc_main$43,{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=>setTaskSendButton(task.id,element),"stop-visible":task.busy,"stop-enabled":Boolean(task.conversationId)&&stoppingTaskId.value!==task.id,stopping:stoppingTaskId.value===task.id,sending:task.delivery.state.sending,"can-submit":!props.connectionUnavailable&&stoppingTaskId.value!==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=>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`,`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[15]||(_cache[15]=$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`]),renamingTask.value?(openBlock(),createBlock(VDialog,{key:1,"aria-label":`Rename chat`,"model-value":true,"max-width":`28rem`,persistent:renamePending.value,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>!$event&&(renamingTaskId.value=``))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`form`,{onSubmit:withModifiers(submitRename,[`prevent`])},[createVNode(VCardTitle,{class:`pa-6 pb-2`},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createBaseVNode(`h2`,{class:`text-title-large`},`Rename chat`,-1)])]),_:1}),createVNode(VCardText,{class:`px-6`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:renameValue.value,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>renameValue.value=$event),label:`Chat name`,variant:`outlined`,maxlength:`80`,autofocus:``,disabled:renamePending.value,placeholder:`Temporary ${renamingTask.value.number||``}`.trim(),hint:`Leave empty to use the numbered name.`,"persistent-hint":``,"error-messages":renameError.value},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:renamePending.value,onClick:_cache[17]||(_cache[17]=$event=>renamingTaskId.value=``)},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,height:`48`,color:`primary`,variant:`flat`,rounded:`pill`,loading:renamePending.value},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Rename`,-1)])]),_:1},8,[`loading`])]),_:1})],32)]),_:1})]),_:1},8,[`persistent`])):createCommentVNode(``,true),taskToClose.value?(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(taskToClose.value.busy?`Stop and close repair?`:`Close incomplete repair?`),1)]),_:1},8,[`id`]),createVNode(VCardText,null,{default:withCtx(()=>[_cache[33]||(_cache[33]=createTextVNode(` Partial edits will stay in this session and may still need repair. Closing does not undo those edits or complete Update. `,-1)),actionErrors.value[taskToClose.value.id]?(openBlock(),createElementBlock(`p`,_hoisted_19$4,toDisplayString(actionErrors.value[taskToClose.value.id]),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{disabled:closingTask.value,onClick:_cache[19]||(_cache[19]=$event=>closeTaskId.value=``)},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Keep chat open`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:closingTask.value,onClick:_cache[20]||(_cache[20]=$event=>closeTask(taskToClose.value.id))},{default:withCtx(()=>[createTextVNode(toDisplayString(taskToClose.value.busy?`Stop and close`:`Close repair`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`aria-labelledby`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],10,_hoisted_1$35)):createCommentVNode(``,true)}}};var Vibe64TemporaryAiWorkspace_default=_plugin_vue_export_helper_default(_sfc_main$41,[[`__scopeId`,`data-v-633c22d6`]]);var _hoisted_1$34={class:`text-body-2 text-medium-emphasis mb-0`};var _sfc_main$40={__name:`Vibe64SessionArchiveDialog`,props:{archive:{default:()=>({}),type:Object},shortSessionId:{default:sessionId=>String(sessionId||``),type:Function}},setup(__props){const props=__props;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$34,[_cache[1]||(_cache[1]=createTextVNode(` Session: `,-1)),createBaseVNode(`strong`,null,toDisplayString(__props.archive.sessionTitle||__props.shortSessionId(__props.archive.sessionId)),1)])]),_: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…`:`Archive session`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64SessionArchiveDialog_default=_plugin_vue_export_helper_default(_sfc_main$40,[[`__scopeId`,`data-v-6853144f`]]);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 GIT_IDENTITY_COMMANDS=[`git config --global user.name "Your Name"`,`git config --global user.email "you@example.com"`].join(`
|
|
3
3
|
`);var _sfc_main$39={__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})}}};function projectOnboardingRequest(kind,{purpose=``,diagnostic=``,nextAction=``}={}){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$33={class:`project-preview`};var _hoisted_2$28={key:0};var _hoisted_3$24={key:0};var _hoisted_4$18={class:`project-preview__warning-actions`};var _hoisted_5$15={key:0};var _hoisted_6$13={class:`project-preview__warning-actions`};var _hoisted_7$12={key:2,class:`project-preview__output`};var _hoisted_8$12=[`aria-busy`];var _hoisted_9$10={class:`project-onboarding__choices`};var _hoisted_10$9=[`disabled`,`onClick`];var _hoisted_11$8={key:0};var _hoisted_12$7={class:`project-onboarding__choose`};var _hoisted_13$6={key:0};var _hoisted_14$5={class:`project-onboarding__actions`};var _hoisted_15$5={key:3,role:`status`};var _sfc_main$38={__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$33,[!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$28,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$24,`Use an installation with a newer Genesis version to update setup.`)):createCommentVNode(``,true)],64)),createBaseVNode(`div`,_hoisted_4$18,[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$15,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$13,[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$12,[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$10,[(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$8,`Source: `+toDisplayString(template.namespace),1)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_12$7,toDisplayString(applying.value===template.id?`Preparing your starter…`:`Use this starter →`),1)],8,_hoisted_10$9)}),128))])])}),128)),!groups.value.length?(openBlock(),createElementBlock(`p`,_hoisted_13$6,`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$5,[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$5,toDisplayString(applying.value?`Adding the starter to this session…`:`Opening Temporary AI…`),1)):createCommentVNode(``,true)],8,_hoisted_8$12))])}}};var Vibe64ProjectOnboarding_default=_plugin_vue_export_helper_default(_sfc_main$38,[[`__scopeId`,`data-v-bdc764b2`]]);var _hoisted_1$32={key:0,class:`text-body-small mt-2`};var _hoisted_2$27={class:`agent-plan-usage__details text-body-small`};var _sfc_main$37={__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 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,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,refetchOnMount:`always`,refetchOnWindowFocus:true,refetchInterval:()=>keyUsage.value?false:6e4,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(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 available=computed(()=>{if(!enabled.value||usage.loadError.value||currentUsage.value?.status!==`available`)return false;return balance.value||allowance.value&&(!allowance.value.resetsAt||allowance.value.resetsAt*1e3>Date.now())});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(!available.value)return``;if(balance.value)return formatBalance(balance.value);return`${Math.floor(allowance.value.remainingPercent)}%`});const usageLabel=computed(()=>currentUsage.value?.providerLabel||``);const usageTitle=computed(()=>`${usageLabel.value} ${balance.value?`balance`:`plan allowance`}`);const summaryLabel=computed(()=>balance.value?`${usageLabel.value} balance remaining: ${summary.value}`:`${weekly.value?`Weekly `:``}${usageLabel.value} allowance remaining: ${summary.value}`);const managementUrl=computed(()=>currentUsage.value?.managementUrl||``);const details=computed(()=>{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(`
|
|
4
4
|
`);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(`
|
|
5
5
|
`)});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$32,`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?(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$27,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$37,[[`__scopeId`,`data-v-27c8bd25`]]);var _sfc_main$36={__name:`Vibe64SessionPin`,props:{session:{type:Object,required:true},sessionsApiPath:{type:String,required:true},refresh:Function,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 _hoisted_1$31={class:`text-body-small`};var _hoisted_2$26={key:0,class:`text-body-small mb-2`};var _hoisted_3$23={key:1,class:`text-body-small mb-2`};var _hoisted_4$17={key:1,class:`text-body-small`};var _hoisted_5$14={key:2,class:`text-body-small mb-1`,role:`alert`};var _hoisted_6$12={key:3,class:`vibe64-routing-notice__actions d-flex flex-wrap ga-1`};var _hoisted_7$11={key:0,class:`position-absolute`};var _hoisted_8$11={key:0,class:`position-absolute`};var _sfc_main$35={__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$31,[createTextVNode(toDisplayString(label.value)+` · `,1),_cache[4]||(_cache[4]=createBaseVNode(`span`,{class:`text-decoration-underline`},`Details`,-1))]),previousAttempt.value?(openBlock(),createElementBlock(`p`,_hoisted_2$26,`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$23,toDisplayString(__props.request.error),1)):createCommentVNode(``,true)])):!followupNeedsAction.value?(openBlock(),createElementBlock(`div`,_hoisted_4$17,toDisplayString(label.value),1)):createCommentVNode(``,true),__props.actionError?(openBlock(),createElementBlock(`p`,_hoisted_5$14,toDisplayString(__props.actionError),1)):createCommentVNode(``,true),followupNeedsAction.value?(openBlock(),createElementBlock(`div`,_hoisted_6$12,[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$11,`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$11,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$35,[[`__scopeId`,`data-v-341758b6`]]);function parseWorkPlanLines(text,{markTechnicalDetails=false}={}){let fence=``;return text.split(`
|
|
@@ -17,7 +17,7 @@ import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.js";import{$ as mergeMo
|
|
|
17
17
|
|
|
18
18
|
`),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(`
|
|
19
19
|
|
|
20
|
-
`),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 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.`;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});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`]);var SHORT_ACTION_DISMISSALS_STORAGE_PREFIX=`vibe64:short-action-dismissals:v1`;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},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}};function emptyConversationWelcomeText({existingProject=false,preferredName=``,renewedSession=false}={}){const message=renewedSession?RENEWED_SESSION_CONVERSATION_WELCOME:existingProject?EXISTING_PROJECT_CONVERSATION_WELCOME:EMPTY_CONVERSATION_WELCOME;const name=normalizedAgentTurnText(preferredName);return name?message.replace(`Hi!`,`Hi ${name}!`):message}function normalizedAgentTurnText(value=``){return String(value||``).trim()}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 useShortActionDismissals(projectSlug,sessionId){const state=ref({saveWork:``,workspaceSetup:``,checkpoint:``});const storageKey=computed(()=>{const slug=normalizedAgentTurnText(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:normalizedAgentTurnText(stored?.saveWork),workspaceSetup:normalizedAgentTurnText(stored?.workspaceSetup),checkpoint:normalizedAgentTurnText(stored?.checkpoint)}},{flush:`sync`,immediate:true});function dismiss(name,activityKey=``){const key=normalizedAgentTurnText(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)}return{clear,dismiss,state}}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-DtybwgL3.js`),__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])),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(()=>normalizedAgentTurnText(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=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&&normalizedAgentTurnText(activeAgentTurn.value.id)&&normalizedAgentTurnText(activeAgentTurn.value.state)===`active`&&props.agentConnectionStatus===`connected`));const agentSteerable=computed(()=>agentNativeTurnReady.value&&props.conversationRuntime?.steerable.value===true);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 discardingMessageIds=reactive(new Set);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`);function restoreCancelledMessage(messageId){const message=messageDelivery.value?.find(messageId);if(!message||discardingMessageIds.has(messageId)||!unmatchedOptimisticMessages(props.conversationLog?.turns,[message]).length)return;composerDraft.value=draftWithRestoredMessage(message.payload.draftSnapshot||message.text,composerDraft.value);messageDelivery.value?.remove(messageId)}const conversationFollowLatestKey=ref(0);const interrupting=ref(false);const contextFullFailure=ref(null);const previewAttachmentState=ref({attachDiagnostics:null,capture:null,captureAvailable:false,captureBusy:false,diagnosticsAvailable:false,diagnosticsBusy:false});let messageSequence=0;const dismissals=useShortActionDismissals(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:`Open 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 assistantConnectionReady=computed(()=>composerConnectionStatus.value===`connected`);const reasoningActive=computed(()=>assistantConnectionReady.value&&agentActive.value&&!agentObservationLost.value&&activeAgentTurn.value.phase===`reasoning`);const assistantAccountUnavailable=computed(()=>composerConnectionStatus.value===`unavailable`);const assistantAccountMessage=computed(()=>(props.session?.assistantSelection?.engineId||VIBE64_DEFAULT_AGENT_PROVIDER_ID)===`codex`?`Codex is not connected. Sign in through AI Accounts to continue.`:`The selected AI account or model is unavailable. Check AI Accounts or choose another model.`);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}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||!normalizedAgentTurnText(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=normalizedAgentTurnText(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`||message.checking||discardingMessageIds.has(messageId))return false;const delivery=messageDelivery.value;const runtime=props.conversationRuntime;const routed=routingRequest.value?.messageId===messageId;discardingMessageIds.add(messageId);try{if(routed&&message.status===`uncertain`){const receipt=await runtime.inspectDelivery(messageId);if(receipt?.status===`accepted`)return true;if(receipt?.status!==`not-sent`||receipt.messageId!==messageId)return false}if(runtime!==props.conversationRuntime)return false;if(routed&&routingRequest.value?.messageId===messageId&&await props.interruptAgentTurn({reason:`cancel-routing`})===false)return false;if(message.status===`pending`&&await props.cancelAgentMessage(messageId)===false)return false;if(composerRetrySubmission.value?.messageId===messageId)settleComposerRetry(composerRetrySubmission.value);delivery?.remove(messageId);return true}finally{discardingMessageIds.delete(messageId)}}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`){if((await props.conversationRuntime.inspectDelivery(messageId))?.status===`accepted`){settleComposerRetry(retry);return true}if(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}async function requestAgentInterrupt(){if(!agentStopEnabled.value)return false;const stoppingSessionId=sessionId.value;const stoppingProjectSlug=projectSlug.value;const stoppingTurnId=normalizedAgentTurnText(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&&normalizedAgentTurnText(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 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).filter(turn=>!turn.optimistic||!discardingMessageIds.has(turn.optimistic.id))});const emptyConversationWelcome=computed(()=>sessionId.value&&!props.conversationLog?.loading&&!props.conversationLog?.error&&!chatTurns.value.length?emptyConversationWelcomeText({existingProject:workspaceSetupActivity.workspaceSetupStatus.value!==`unconfigured`,preferredName:preferredName.value,renewedSession:Boolean(normalizedAgentTurnText(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}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=normalizedAgentTurnText(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=normalizedAgentTurnText(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()});watch([routingRequest,()=>messageDelivery.value?.state.messages||[]],([request])=>{if(request?.stopped&&!request.helper&&!request.attemptedMessageId)restoreCancelledMessage(request.messageId)},{immediate:true});watch(()=>Boolean(agentActive.value||composerSending.value||interrupting.value||saveWork.saveWorkSending.value),busy=>{emit(`busy-change`,busy)},{immediate:true});return{...saveWork,...workspaceSetupActivity,...temporaryAiRepairs,...sessionToolPane,Vibe64OutputControls,sendLessonMessage,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,attachPreviewDiagnostics,cancelOptimisticMessage,captureVisiblePreview,chatCollapsed,chatReloading,chatTurns,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,routingBusy,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,dismissNumberedQuestions,editOptimisticMessage,emptyConversationWelcome,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,previewAttachmentState,projectSlug,questionAnswers,reloadChatPane,repositoryOperationActive,resendOptimisticMessage,requestAgentInterrupt,contextFullFailure,retryContextFull,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,structuredQuestionActive,submitComposerMessage,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState}}function executionAttentionForError(error=null,message=``){const code=normalizedAgentTurnText(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:normalizedAgentTurnText(message)||`This work could not start safely.`})}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&¤tPolicy.value.enabled!==false&¤tPolicy.value.ready===true&¤tSessionId.value&¤tSessionsApiPath.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$17=[`title`];var _hoisted_2$12={key:2,class:`studio-autopilot__save-symbol`,"aria-hidden":`true`};var _hoisted_3$12={class:`studio-autopilot__header-actions`};var _hoisted_4$8={class:`studio-autopilot__activity`,"aria-label":`Session activity`};var _hoisted_5$6={class:`studio-autopilot__connection-actions`};var _hoisted_6$4={key:0,class:`text-body-small`};var _hoisted_7$4={key:1,class:`text-body-small`};var _hoisted_8$4={class:`d-flex flex-wrap align-center ga-2`};var _hoisted_9$4={class:`flex-grow-1`};var _hoisted_10$4={class:`text-body-small mb-0`};var _hoisted_11$3={class:`studio-autopilot__checkpoint-details text-body-small`};var _hoisted_12$2={class:`text-body-small`};var _hoisted_13$1={key:0};var _hoisted_14$1={key:1};var _hoisted_15$1={class:`studio-autopilot__composer-actions`};var _hoisted_16$1={key:0,class:`studio-autopilot__settings-access`};var _hoisted_17$1={class:`text-body-small`,role:`status`};var _hoisted_18$1={class:`studio-autopilot__project-panel`,"aria-label":`Project`};var _hoisted_19$1=[`data-vibe64-guide-pane`];var _hoisted_20$1={class:`studio-autopilot__right-pane-page`,role:`tabpanel`};var _hoisted_21$1=[`data-vibe64-guide-pane`];var _hoisted_22$1={class:`studio-autopilot__session-tool-header`};var _hoisted_23$1={class:`studio-autopilot__right-pane-page`};var _hoisted_24=[`data-vibe64-guide-pane`];var _hoisted_25={class:`studio-autopilot__session-tool-header`};var _hoisted_26=[`data-vibe64-guide-pane`];var _hoisted_27={class:`studio-autopilot__session-tool-header`};var _hoisted_28=[`data-vibe64-guide-pane`];var _hoisted_29={class:`studio-autopilot__architecture-file`,"aria-label":`Architecture file viewer`};var _hoisted_30={class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":`preview`,role:`tabpanel`};var _hoisted_31={class:`my-3 pl-5`,style:{"overflow-wrap":`anywhere`}};var _hoisted_32={key:1,class:`d-flex align-center justify-space-between ga-2 mb-2`};var _hoisted_33={class:`text-label-small text-medium-emphasis`};var _hoisted_34={key:0,class:`text-body-small mt-1 mb-0`};var _hoisted_35={key:3,role:`status`};var _hoisted_36={key:4,role:`status`,class:`text-body-small mt-2`};var _hoisted_37={key:5,role:`status`,class:`mt-3`};var _hoisted_38={class:`text-wrap`,style:{"overflow-wrap":`anywhere`}};var SESSION_NAME_MAX_WIDTH=240;var _sfc_main$19={__name:`Vibe64AutopilotView`,props:vibe64AutopilotViewProps,emits:vibe64AutopilotViewEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const learning=useVibe64Learning();const lessonShown=computed(()=>Boolean(learning?.lessonShown));const resourceRecoveryControl=inject(VIBE64_RESOURCE_RECOVERY_KEY,null);const architectureFileRequest=ref(null);const architectureProgramRequest=ref(null);watch(()=>props.session?.sessionId,()=>{architectureFileRequest.value=null;architectureProgramRequest.value=null});const resourceRetryBusy=ref(false);const workspaceSetupToolsMissing=ref(false);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 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 sourceOperationsSuspended=computed(()=>props.sessionRenewal?.sourceOperationsSuspended===true);const Vibe64ArchitectureView=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CBo1BEk6.js`).then(n=>n.r).then(module=>module.loadVibe64ArchitectureView()),__vite__mapDeps([56,3,1,2,4,52,6,5,7,8,9,10,47,48,49,38,57,12,13,14,11,15,16,17,18,19,20,21,22,39,40,58,59,60,61,23,24,25,26,27,62,63,28,29,30,31,32,33,64,65,34,35,66,67,68,69,70,71,72,73,74,36,37,41,42,43,44,45,75,76,51,46,50,53,77,78,79,80,81,82,83,84,85,54,55,86,87,88])));const Vibe64DatabaseWorkspace=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CBo1BEk6.js`).then(n=>n.i).then(module=>module.loadVibe64DatabaseWorkspace()),__vite__mapDeps([56,3,1,2,4,52,6,5,7,8,9,10,47,48,49,38,57,12,13,14,11,15,16,17,18,19,20,21,22,39,40,58,59,60,61,23,24,25,26,27,62,63,28,29,30,31,32,33,64,65,34,35,66,67,68,69,70,71,72,73,74,36,37,41,42,43,44,45,75,76,51,46,50,53,77,78,79,80,81,82,83,84,85,54,55,86,87,88])));const LocalDatabaseServer=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-CBo1BEk6.js`).then(n=>n.i).then(module=>module.loadLocalDatabaseServer()),__vite__mapDeps([56,3,1,2,4,52,6,5,7,8,9,10,47,48,49,38,57,12,13,14,11,15,16,17,18,19,20,21,22,39,40,58,59,60,61,23,24,25,26,27,62,63,28,29,30,31,32,33,64,65,34,35,66,67,68,69,70,71,72,73,74,36,37,41,42,43,44,45,75,76,51,46,50,53,77,78,79,80,81,82,83,84,85,54,55,86,87,88])));const composerInput=ref(null);const conversationView=ref(null);const composerSendButton=ref(null);const composerSettingsOpen=ref(false);const composerSettingsButton=ref(null);const mainChat=ref(null);const approvalsPanel=ref(null);const{xs:phoneLayout}=useDisplay();const sessionActionsTrigger=ref(null);const temporaryAiWorkspace=ref(null);const workPlanViewer=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 thinkingStatusId=`studio-autopilot-thinking-${useId()}`;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 composerAttachmentState=ref({count:0,hasUnresolved:false,uploading:false});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({workflowsOnly:true,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{Vibe64OutputControls,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,fixPreviewIdentityWithTemporaryAi,fixWorkspaceSetupWithTemporaryAi,attachPreviewDiagnostics,backToDashboard,backToSystemFromEditor,cancelOptimisticMessage,cancelSaveWork,captureVisiblePreview,chatCollapsed,chatReloading,reloadChatPane,chatTurns,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,dashboardSessionContext,dashboardRouteVisible,dashboardShellVisible,sourceToolLoading,dismissSaveWorkActivity,dismissNumberedQuestions,dismissWorkspaceSetupActivity,confirmSaveWork,editOptimisticMessage,emptyConversationWelcome,fixRepositoryActionError,fixRepositoryError,finishTemporaryAiTask,checkTemporaryAiUpdate,reportTemporaryRecovery,updateConflictRecovery,resolvedUpdateReview,reviewResolvedUpdate,applyResolvedUpdate,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,openSourceEditorFile,openSubsystemTable,describeSubsystems,databaseOpenRequest,previewAttachmentState,projectSlug,questionAnswers,repositoryRecoverySending,repositoryOperationActive,retrySaveWork,retryWorkspaceSetup,requestSaveWork,resendOptimisticMessage,requestAgentInterrupt,rightPaneTab,rightPaneTabMounted,saveWorkConfirmOpen,contextFullFailure,retryContextFull,saveWorkReview,saveConnectedFirst,saveWorkConnectedReview,saveWorkConnectedResults,saveWorkStandInIdentity,saveWorkActivityDismissed,saveWorkActivityKey,saveWorkActivityIsUpdate,saveWorkActivityLabel,saveWorkDisabled,updateWorkDisabled,saveWorkError,saveWorkFailure,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkCanResolveWithTemporaryAi,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStatus,sendLessonMessage,saveWorkTitle,saveWorkRequiresUpdate,saveWorkUnsaved,selectSessionTool,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,sourceEditorOpenRequest,structuredQuestionActive,submitComposerMessage,systemBackAvailable,systemRestoreRequest,systemReloadVersion,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState,workspaceSetupActionVisible,connectedUpdateActionVisible,workspaceSetupAskDisabled,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDismissed,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupError,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}=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 fileBookmarks=useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath:()=>props.sessionsApiPath});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 revealApprovals(){if(phoneLayout.value){approvalsPanel.value?.open();return}mainChat.value?.querySelector(`.vibe64-approvals`)?.scrollIntoView({block:`nearest`,behavior:`smooth`})}function showApprovedMessage(entry){mainChat.value?.querySelector(`.vibe64-conversation-log [data-approval-id="${CSS.escape(entry.id)}"]`)?.scrollIntoView({block:`center`,behavior:`smooth`})}watch(agentActive,active=>{if(!active)openCodeProgressLabel.value=``},{flush:`sync`,immediate:true});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 updateHandledInRepair=computed(()=>Boolean((saveWorkActivityIsUpdate.value||saveWorkError.value)&&temporaryAiWorkspace.value?.updateRepairVisible));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));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 saveWorkNeedsPullRequest=computed(()=>!saveWorkConnectedReview.value&&githubProject.value&&props.workState?.publicationRequiresPullRequest===true&&!sessionPullRequest.value?.number);const saveWorkCanCreatePullRequest=computed(()=>githubProject.value&&!sessionPullRequest.value?.number&&saveWorkFailure.value?.code===`vibe64_pull_request_required`);const assistantFixRestrictionMessage=computed(()=>assistantPurposes.value.fix?.message||`Fix it with AI is unavailable. Review AI setup.`);const publicationLabel=computed(()=>{if(saveWorkConnectedReview.value)return`Push connected contributions`;if(saveWorkReview.value?.mode===`github`)return`Commit & push`;return`Save`});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}));const sessionArchiveDisabled=computed(()=>Boolean(props.sessionSelectionArchived||props.sessionArchive?.command?.isRunning||workspaceSetupRunning.value||workspaceSetupRetrying.value));async function sendComposerMessage(){if(conversationView.value?.composerBlocked||composerInput.value?.attachmentsCanSubmit?.()===false)return false;stopTypingOnSubmit();return submitComposerMessage()}async function continueConversation(){composerSettingsOpen.value=false;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}function copyActivityOutput(output=``){return writeClipboardText(output)}function openTemporaryAi(){if(!sessionId.value||props.sessionSelectionArchived)return false;temporaryAiWorkspace.value?.showWorkspace?.();return true}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)}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 status=saveWorkChecking.value?`Checking for updates…`:saveWorkCheckAvailable.value?`${saveWorkTitle.value}. Click to check for updates.`:saveWorkTitle.value;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()}async function showMainChat(){temporaryAiWorkspace.value?.closeWorkspace?.();await nextTick();mainChat.value?.focus?.({preventScroll:true})}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}function requestSessionRenewal(returnFocusTarget=null){props.sessionRenewal?.request?.({returnFocusTarget:returnFocusTarget?.$el||returnFocusTarget});return true}watch(()=>[(props.sessionToolbar?.sessions||[]).map(session=>session?.sessionName||session?.sessionId).join(`
|
|
20
|
+
`),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 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.`;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});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`]);var SHORT_ACTION_DISMISSALS_STORAGE_PREFIX=`vibe64:short-action-dismissals:v1`;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},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}};function emptyConversationWelcomeText({existingProject=false,preferredName=``,renewedSession=false}={}){const message=renewedSession?RENEWED_SESSION_CONVERSATION_WELCOME:existingProject?EXISTING_PROJECT_CONVERSATION_WELCOME:EMPTY_CONVERSATION_WELCOME;const name=normalizedAgentTurnText(preferredName);return name?message.replace(`Hi!`,`Hi ${name}!`):message}function normalizedAgentTurnText(value=``){return String(value||``).trim()}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 useShortActionDismissals(projectSlug,sessionId){const state=ref({saveWork:``,workspaceSetup:``,checkpoint:``});const storageKey=computed(()=>{const slug=normalizedAgentTurnText(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:normalizedAgentTurnText(stored?.saveWork),workspaceSetup:normalizedAgentTurnText(stored?.workspaceSetup),checkpoint:normalizedAgentTurnText(stored?.checkpoint)}},{flush:`sync`,immediate:true});function dismiss(name,activityKey=``){const key=normalizedAgentTurnText(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)}return{clear,dismiss,state}}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-DsCbasR0.js`),__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,95,96])),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(()=>normalizedAgentTurnText(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=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&&normalizedAgentTurnText(activeAgentTurn.value.id)&&normalizedAgentTurnText(activeAgentTurn.value.state)===`active`&&props.agentConnectionStatus===`connected`));const agentSteerable=computed(()=>agentNativeTurnReady.value&&props.conversationRuntime?.steerable.value===true);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 discardingMessageIds=reactive(new Set);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`);function restoreCancelledMessage(messageId){const message=messageDelivery.value?.find(messageId);if(!message||discardingMessageIds.has(messageId)||!unmatchedOptimisticMessages(props.conversationLog?.turns,[message]).length)return;composerDraft.value=draftWithRestoredMessage(message.payload.draftSnapshot||message.text,composerDraft.value);messageDelivery.value?.remove(messageId)}const conversationFollowLatestKey=ref(0);const interrupting=ref(false);const contextFullFailure=ref(null);const previewAttachmentState=ref({attachDiagnostics:null,capture:null,captureAvailable:false,captureBusy:false,diagnosticsAvailable:false,diagnosticsBusy:false});let messageSequence=0;const dismissals=useShortActionDismissals(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:`Open 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 assistantConnectionReady=computed(()=>composerConnectionStatus.value===`connected`);const reasoningActive=computed(()=>assistantConnectionReady.value&&agentActive.value&&!agentObservationLost.value&&activeAgentTurn.value.phase===`reasoning`);const assistantAccountUnavailable=computed(()=>composerConnectionStatus.value===`unavailable`);const assistantAccountMessage=computed(()=>(props.session?.assistantSelection?.engineId||VIBE64_DEFAULT_AGENT_PROVIDER_ID)===`codex`?`Codex is not connected. Sign in through AI Accounts to continue.`:`The selected AI account or model is unavailable. Check AI Accounts or choose another model.`);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}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||!normalizedAgentTurnText(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=normalizedAgentTurnText(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`||message.checking||discardingMessageIds.has(messageId))return false;const delivery=messageDelivery.value;const runtime=props.conversationRuntime;const routed=routingRequest.value?.messageId===messageId;discardingMessageIds.add(messageId);try{if(routed&&message.status===`uncertain`){const receipt=await runtime.inspectDelivery(messageId);if(receipt?.status===`accepted`)return true;if(receipt?.status!==`not-sent`||receipt.messageId!==messageId)return false}if(runtime!==props.conversationRuntime)return false;if(routed&&routingRequest.value?.messageId===messageId&&await props.interruptAgentTurn({reason:`cancel-routing`})===false)return false;if(message.status===`pending`&&await props.cancelAgentMessage(messageId)===false)return false;if(composerRetrySubmission.value?.messageId===messageId)settleComposerRetry(composerRetrySubmission.value);delivery?.remove(messageId);return true}finally{discardingMessageIds.delete(messageId)}}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`){if((await props.conversationRuntime.inspectDelivery(messageId))?.status===`accepted`){settleComposerRetry(retry);return true}if(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}async function requestAgentInterrupt(){if(!agentStopEnabled.value)return false;const stoppingSessionId=sessionId.value;const stoppingProjectSlug=projectSlug.value;const stoppingTurnId=normalizedAgentTurnText(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&&normalizedAgentTurnText(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 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).filter(turn=>!turn.optimistic||!discardingMessageIds.has(turn.optimistic.id))});const emptyConversationWelcome=computed(()=>sessionId.value&&!props.conversationLog?.loading&&!props.conversationLog?.error&&!chatTurns.value.length?emptyConversationWelcomeText({existingProject:workspaceSetupActivity.workspaceSetupStatus.value!==`unconfigured`,preferredName:preferredName.value,renewedSession:Boolean(normalizedAgentTurnText(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}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=normalizedAgentTurnText(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=normalizedAgentTurnText(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()});watch([routingRequest,()=>messageDelivery.value?.state.messages||[]],([request])=>{if(request?.stopped&&!request.helper&&!request.attemptedMessageId)restoreCancelledMessage(request.messageId)},{immediate:true});watch(()=>Boolean(agentActive.value||composerSending.value||interrupting.value||saveWork.saveWorkSending.value),busy=>{emit(`busy-change`,busy)},{immediate:true});return{...saveWork,...workspaceSetupActivity,...temporaryAiRepairs,...sessionToolPane,Vibe64OutputControls,sendLessonMessage,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,attachPreviewDiagnostics,cancelOptimisticMessage,captureVisiblePreview,chatCollapsed,chatReloading,chatTurns,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,routingBusy,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,dismissNumberedQuestions,editOptimisticMessage,emptyConversationWelcome,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,previewAttachmentState,projectSlug,questionAnswers,reloadChatPane,repositoryOperationActive,resendOptimisticMessage,requestAgentInterrupt,contextFullFailure,retryContextFull,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,structuredQuestionActive,submitComposerMessage,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState}}function executionAttentionForError(error=null,message=``){const code=normalizedAgentTurnText(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:normalizedAgentTurnText(message)||`This work could not start safely.`})}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&¤tPolicy.value.enabled!==false&¤tPolicy.value.ready===true&¤tSessionId.value&¤tSessionsApiPath.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$17=[`title`];var _hoisted_2$12={key:2,class:`studio-autopilot__save-symbol`,"aria-hidden":`true`};var _hoisted_3$12={class:`studio-autopilot__header-actions`};var _hoisted_4$8={class:`studio-autopilot__activity`,"aria-label":`Session activity`};var _hoisted_5$6={class:`studio-autopilot__connection-actions`};var _hoisted_6$4={key:0,class:`text-body-small`};var _hoisted_7$4={key:1,class:`text-body-small`};var _hoisted_8$4={class:`d-flex flex-wrap align-center ga-2`};var _hoisted_9$4={class:`flex-grow-1`};var _hoisted_10$4={class:`text-body-small mb-0`};var _hoisted_11$3={class:`studio-autopilot__checkpoint-details text-body-small`};var _hoisted_12$2={class:`text-body-small`};var _hoisted_13$1={key:0};var _hoisted_14$1={key:1};var _hoisted_15$1={class:`studio-autopilot__composer-actions`};var _hoisted_16$1={key:0,class:`studio-autopilot__settings-access`};var _hoisted_17$1={class:`text-body-small`,role:`status`};var _hoisted_18$1={class:`studio-autopilot__project-panel`,"aria-label":`Project`};var _hoisted_19$1=[`data-vibe64-guide-pane`];var _hoisted_20$1={class:`studio-autopilot__right-pane-page`,role:`tabpanel`};var _hoisted_21$1=[`data-vibe64-guide-pane`];var _hoisted_22$1={class:`studio-autopilot__session-tool-header`};var _hoisted_23$1={class:`studio-autopilot__right-pane-page`};var _hoisted_24=[`data-vibe64-guide-pane`];var _hoisted_25={class:`studio-autopilot__session-tool-header`};var _hoisted_26=[`data-vibe64-guide-pane`];var _hoisted_27={class:`studio-autopilot__session-tool-header`};var _hoisted_28=[`data-vibe64-guide-pane`];var _hoisted_29={class:`studio-autopilot__architecture-file`,"aria-label":`Architecture file viewer`};var _hoisted_30={class:`studio-autopilot__right-pane-page`,"data-vibe64-guide-pane":`preview`,role:`tabpanel`};var _hoisted_31={class:`my-3 pl-5`,style:{"overflow-wrap":`anywhere`}};var _hoisted_32={key:1,class:`d-flex align-center justify-space-between ga-2 mb-2`};var _hoisted_33={class:`text-label-small text-medium-emphasis`};var _hoisted_34={key:0,class:`text-body-small mt-1 mb-0`};var _hoisted_35={key:3,role:`status`};var _hoisted_36={key:4,role:`status`,class:`text-body-small mt-2`};var _hoisted_37={key:5,role:`status`,class:`mt-3`};var _hoisted_38={class:`text-wrap`,style:{"overflow-wrap":`anywhere`}};var SESSION_NAME_MAX_WIDTH=240;var _sfc_main$19={__name:`Vibe64AutopilotView`,props:vibe64AutopilotViewProps,emits:vibe64AutopilotViewEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const learning=useVibe64Learning();const lessonShown=computed(()=>Boolean(learning?.lessonShown));const resourceRecoveryControl=inject(VIBE64_RESOURCE_RECOVERY_KEY,null);const architectureFileRequest=ref(null);const architectureProgramRequest=ref(null);watch(()=>props.session?.sessionId,()=>{architectureFileRequest.value=null;architectureProgramRequest.value=null});const resourceRetryBusy=ref(false);const workspaceSetupToolsMissing=ref(false);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 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 sourceOperationsSuspended=computed(()=>props.sessionRenewal?.sourceOperationsSuspended===true);const Vibe64ArchitectureView=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-DZgCwvFD.js`).then(n=>n.a).then(module=>module.loadVibe64ArchitectureView()),__vite__mapDeps([58,3,1,2,4,44,6,5,7,8,9,10,38,39,47,59,12,13,14,11,15,16,17,18,19,20,21,22,49,50,60,61,62,40,63,64,48,23,24,25,26,27,65,66,28,29,30,31,32,33,67,68,34,35,69,70,71,72,73,74,75,76,77,36,78,79,43,41,37,42,45,46,51,52,53,54,55,80,81,82,83,84,85,86,87,88,56,57,89,90,91])));const Vibe64DatabaseWorkspace=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-DZgCwvFD.js`).then(n=>n.o).then(module=>module.loadVibe64DatabaseWorkspace()),__vite__mapDeps([58,3,1,2,4,44,6,5,7,8,9,10,38,39,47,59,12,13,14,11,15,16,17,18,19,20,21,22,49,50,60,61,62,40,63,64,48,23,24,25,26,27,65,66,28,29,30,31,32,33,67,68,34,35,69,70,71,72,73,74,75,76,77,36,78,79,43,41,37,42,45,46,51,52,53,54,55,80,81,82,83,84,85,86,87,88,56,57,89,90,91])));const LocalDatabaseServer=defineAsyncComponent(()=>__vitePreload(()=>import(`./index-DZgCwvFD.js`).then(n=>n.o).then(module=>module.loadLocalDatabaseServer()),__vite__mapDeps([58,3,1,2,4,44,6,5,7,8,9,10,38,39,47,59,12,13,14,11,15,16,17,18,19,20,21,22,49,50,60,61,62,40,63,64,48,23,24,25,26,27,65,66,28,29,30,31,32,33,67,68,34,35,69,70,71,72,73,74,75,76,77,36,78,79,43,41,37,42,45,46,51,52,53,54,55,80,81,82,83,84,85,86,87,88,56,57,89,90,91])));const composerInput=ref(null);const conversationView=ref(null);const composerSendButton=ref(null);const composerSettingsOpen=ref(false);const composerSettingsButton=ref(null);const mainChat=ref(null);const approvalsPanel=ref(null);const{xs:phoneLayout}=useDisplay();const sessionActionsTrigger=ref(null);const temporaryAiWorkspace=ref(null);const workPlanViewer=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 thinkingStatusId=`studio-autopilot-thinking-${useId()}`;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 composerAttachmentState=ref({count:0,hasUnresolved:false,uploading:false});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({workflowsOnly:true,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{Vibe64OutputControls,assistantDirectAllowed,assistantFixAllowed,agentActive,reasoningActive,agentObservationLost,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askAssistantAboutFile,fixPreviewIdentityWithTemporaryAi,fixWorkspaceSetupWithTemporaryAi,attachPreviewDiagnostics,backToDashboard,backToSystemFromEditor,cancelOptimisticMessage,cancelSaveWork,captureVisiblePreview,chatCollapsed,chatReloading,reloadChatPane,chatTurns,checkpointFailure,checkpointFailureReason,checkpointFailureVisible,dismissCheckpointFailure,approvalMode,composerKey,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,routingRequest,composerSubmitAriaLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,dashboardSessionContext,dashboardRouteVisible,dashboardShellVisible,sourceToolLoading,dismissSaveWorkActivity,dismissNumberedQuestions,dismissWorkspaceSetupActivity,confirmSaveWork,editOptimisticMessage,emptyConversationWelcome,fixRepositoryActionError,fixRepositoryError,finishTemporaryAiTask,checkTemporaryAiUpdate,reportTemporaryRecovery,updateConflictRecovery,resolvedUpdateReview,reviewResolvedUpdate,applyResolvedUpdate,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,runIntegrationRequest,openSourceEditorFile,openSubsystemTable,describeSubsystems,databaseOpenRequest,previewAttachmentState,projectSlug,questionAnswers,repositoryRecoverySending,repositoryOperationActive,retrySaveWork,retryWorkspaceSetup,requestSaveWork,resendOptimisticMessage,requestAgentInterrupt,rightPaneTab,rightPaneTabMounted,saveWorkConfirmOpen,contextFullFailure,retryContextFull,saveWorkReview,saveConnectedFirst,saveWorkConnectedReview,saveWorkConnectedResults,saveWorkStandInIdentity,saveWorkActivityDismissed,saveWorkActivityKey,saveWorkActivityIsUpdate,saveWorkActivityLabel,saveWorkDisabled,updateWorkDisabled,saveWorkError,saveWorkFailure,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkCanResolveWithTemporaryAi,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStatus,sendLessonMessage,saveWorkTitle,saveWorkRequiresUpdate,saveWorkUnsaved,selectSessionTool,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,assistantDraftAvailable,sourceEditorOpenRequest,structuredQuestionActive,submitComposerMessage,systemBackAvailable,systemRestoreRequest,systemReloadVersion,thinkingLabel,thinkingVisible,agentWorking,assistantAccountMessage,assistantAccountUnavailable,connectionRecoveryVisible,updateComposerAttachments,updatePreviewAttachmentState,workspaceSetupActionVisible,connectedUpdateActionVisible,workspaceSetupAskDisabled,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDismissed,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupError,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}=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 fileBookmarks=useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath:()=>props.sessionsApiPath});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 revealApprovals(){if(phoneLayout.value){approvalsPanel.value?.open();return}mainChat.value?.querySelector(`.vibe64-approvals`)?.scrollIntoView({block:`nearest`,behavior:`smooth`})}function showApprovedMessage(entry){mainChat.value?.querySelector(`.vibe64-conversation-log [data-approval-id="${CSS.escape(entry.id)}"]`)?.scrollIntoView({block:`center`,behavior:`smooth`})}watch(agentActive,active=>{if(!active)openCodeProgressLabel.value=``},{flush:`sync`,immediate:true});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 updateHandledInRepair=computed(()=>Boolean((saveWorkActivityIsUpdate.value||saveWorkError.value)&&temporaryAiWorkspace.value?.updateRepairVisible));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));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 saveWorkNeedsPullRequest=computed(()=>!saveWorkConnectedReview.value&&githubProject.value&&props.workState?.publicationRequiresPullRequest===true&&!sessionPullRequest.value?.number);const saveWorkCanCreatePullRequest=computed(()=>githubProject.value&&!sessionPullRequest.value?.number&&saveWorkFailure.value?.code===`vibe64_pull_request_required`);const assistantFixRestrictionMessage=computed(()=>assistantPurposes.value.fix?.message||`Fix it with AI is unavailable. Review AI setup.`);const publicationLabel=computed(()=>{if(saveWorkConnectedReview.value)return`Push connected contributions`;if(saveWorkReview.value?.mode===`github`)return`Commit & push`;return`Save`});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}));const sessionArchiveDisabled=computed(()=>Boolean(props.sessionSelectionArchived||props.sessionArchive?.command?.isRunning||workspaceSetupRunning.value||workspaceSetupRetrying.value));async function sendComposerMessage(){if(conversationView.value?.composerBlocked||composerInput.value?.attachmentsCanSubmit?.()===false)return false;stopTypingOnSubmit();return submitComposerMessage()}async function continueConversation(){composerSettingsOpen.value=false;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}function copyActivityOutput(output=``){return writeClipboardText(output)}function openTemporaryAi(){if(!sessionId.value||props.sessionSelectionArchived)return false;temporaryAiWorkspace.value?.showWorkspace?.();return true}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)}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 status=saveWorkChecking.value?`Checking for updates…`:saveWorkCheckAvailable.value?`${saveWorkTitle.value}. Click to check for updates.`:saveWorkTitle.value;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()}async function showMainChat(){temporaryAiWorkspace.value?.closeWorkspace?.();await nextTick();mainChat.value?.focus?.({preventScroll:true})}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}function requestSessionRenewal(returnFocusTarget=null){props.sessionRenewal?.request?.({returnFocusTarget:returnFocusTarget?.$el||returnFocusTarget});return true}watch(()=>[(props.sessionToolbar?.sessions||[]).map(session=>session?.sessionName||session?.sessionId).join(`
|
|
21
21
|
`),headerActionsAvailable.value.join(),saveWorkHeaderVisible.value,mainChatApprovals.waitingCount].join(`|`),()=>nextTick(measureHeaderActionRoom));const assistantHost=inject(VIBE64_ASSISTANT_HOST_KEY,null);function openWorkingFile(path){if(typeof path!==`string`||!path)return false;openSourceEditorFile({path,presentation:`code`});return sourceEditorOpenRequest.value?.path===path}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$17)],8,[`to`])):createCommentVNode(``,true),githubProject.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:1,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`},[createBaseVNode(`header`,{ref_key:`sessionHeader`,ref:sessionHeader,class:`studio-autopilot__session-header`},[unref(sessionToolbarVisible)?(openBlock(),createBlock(Vibe64SessionToolbar_default,{key:0,active:props.active,archive:props.sessionArchive,compact:``,"create-visible":props.sessionToolbar.createSessionVisible===true,"create-teleport-target":props.createSessionTeleportTarget,"max-visible-sessions":3,"selected-session-id":unref(sessionId),"selection-archived":sessionArchiveDisabled.value,toolbar: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||temporaryAiWorkspace.value?.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`])):props.workState?.destination?.mode===`github`?(openBlock(),createElementBlock(`span`,_hoisted_2$12,[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[46]||(_cache[46]=createBaseVNode(`span`,{role:`status`},`Checking…`,-1))]),_:1},8,[`model-value`])):createCommentVNode(``,true),mainChatApprovals.isOwner&&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":`${mainChatApprovals.waitingCount} ${mainChatApprovals.waitingCount===1?`message`:`messages`} waiting for your approval`,onClick:revealApprovals},{default:withCtx(()=>[createTextVNode(toDisplayString(mainChatApprovals.waitingCount)+` waiting `,1)]),_:1},8,[`prepend-icon`,`aria-label`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_3$12,[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)||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[1]||(_cache[1]=$event=>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$36,{"data-vibe64-header-action":`pin`,key:`${unref(readRefOrGetterValue)(props.sessionsApiPath)}:${unref(sessionId)}`,session:props.session,"sessions-api-path":unref(readRefOrGetterValue)(props.sessionsApiPath),refresh: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":sessionPullRequest.value?.number?`View pull request`:`Create pull request`,title:sessionPullRequest.value?.number?`View pull request #${sessionPullRequest.value.number}`:`Create pull request`,to:sessionPullRequestTarget.value,disabled:!sessionPullRequest.value?.number&&sourceOperationsSuspended.value,onClick:_cache[2]||(_cache[2]=$event=>!sessionPullRequest.value?.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)||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[3]||(_cache[3]=$event=>requestSessionRenewal(sessionActionsTrigger.value))},null,8,[`prepend-icon`,`subtitle`,`title`])):createCommentVNode(``,true),headerActions.value.overflow.includes(`pin`)?(openBlock(),createBlock(_sfc_main$36,{key:`${unref(readRefOrGetterValue)(props.sessionsApiPath)}:${unref(sessionId)}:menu`,"list-item":``,session:props.session,"sessions-api-path":unref(readRefOrGetterValue)(props.sessionsApiPath),refresh: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:sessionPullRequest.value?.number?`View pull request`:`Create pull request`,subtitle:sessionPullRequest.value?.number?`PR #${sessionPullRequest.value.number}`:`Propose this work for merging`,to:sessionPullRequestTarget.value,disabled:!sessionPullRequest.value?.number&&sourceOperationsSuspended.value,onClick:_cache[4]||(_cache[4]=$event=>!sessionPullRequest.value?.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),createBaseVNode(`div`,_hoisted_4$8,[githubProject.value&&sessionPullRequest.value?(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(sessionPullRequest.value.number?`PR #${sessionPullRequest.value.number}`:`Pull request branch`),1),createTextVNode(` · Commit & push to `+toDisplayString(sessionPullRequest.value.headRepository)+`:`+toDisplayString(sessionPullRequest.value.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_5$6,[unref(assistantAccountUnavailable)?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,"min-height":`32`,size:`small`,onClick:_cache[5]||(_cache[5]=$event=>unref(requestVibe64AccountConnectionsDialog)({section:`ai`}))},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(` Open AI Accounts `,-1)])]),_:1})):createCommentVNode(``,true),!unref(assistantAccountUnavailable)||props.sessionSelectionArchived?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`32`,size:`small`,disabled:props.agentConnectionStatus===`reconciling`,onClick:_cache[6]||(_cache[6]=$event=>props.retryAgentConnection())},{default:withCtx(()=>[createTextVNode(toDisplayString(props.agentConnectionStatus===`disconnected`?`Reconnect`:`Retry connection`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true),props.agentConnectionStatus===`failed`&&props.sessionRenewal?.visible?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,"min-height":`32`,size:`small`,onClick:_cache[7]||(_cache[7]=$event=>requestSessionRenewal($event.currentTarget))},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(` Renew session `,-1)])]),_:1})):createCommentVNode(``,true)]),unref(assistantAccountUnavailable)?(openBlock(),createElementBlock(`span`,_hoisted_6$4,toDisplayString(unref(assistantAccountMessage))+` Your draft is kept. `,1)):(openBlock(),createElementBlock(`span`,_hoisted_7$4,toDisplayString(props.agentConnectionStatus===`disconnected`?`Connection lost. Reconnecting automatically.`: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_8$4,[createBaseVNode(`div`,_hoisted_9$4,[_cache[49]||(_cache[49]=createBaseVNode(`strong`,{class:`text-body-medium`},`Recovery snapshot not saved`,-1)),createBaseVNode(`p`,_hoisted_10$4,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[50]||(_cache[50]=[createTextVNode(`Dismiss`,-1)])]),_:1},8,[`onClick`])]),(openBlock(),createElementBlock(`details`,{key:unref(checkpointFailure)},[_cache[51]||(_cache[51]=createBaseVNode(`summary`,{class:`text-body-small`},`Technical details`,-1)),_cache[52]||(_cache[52]=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_11$3,toDisplayString(unref(checkpointFailure)),1)]))]),_:1})):createCommentVNode(``,true),testApproval.value&&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_12$2,toDisplayString(testApproval.value.state===`waiting`?`Tests need memory approval`:`Resuming the original test…`),1),(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${testApproval.value.admissionId}`,"admission-id":testApproval.value.admissionId,"session-id":unref(sessionId),disabled:testApproval.value.state!==`waiting`,onRetryResult:_cache[8]||(_cache[8]=$event=>props.refreshSessionData?.()),onRecheck:_cache[9]||(_cache[9]=$event=>props.refreshSessionData?.())},null,40,[`admission-id`,`session-id`,`disabled`]))]),_:1})):createCommentVNode(``,true),unref(saveWorkStandInIdentity)?(openBlock(),createBlock(_sfc_main$39,{key:4,onClose:_cache[10]||(_cache[10]=$event=>saveWorkStandInIdentity.value=false)})):createCommentVNode(``,true),unref(saveWorkConnectedResults).length?(openBlock(),createBlock(VAlert,{key:5,type:`info`,variant:`tonal`,closable:``,"onClick:close":_cache[11]||(_cache[11]=$event=>saveWorkConnectedResults.value=[])},{default:withCtx(()=>[_cache[53]||(_cache[53]=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_13$1,` — retry Save to record this confirmed commit.`)):result.reconciled===false?(openBlock(),createElementBlock(`span`,_hoisted_14$1,` — open its session to finish reconciliation.`)):createCommentVNode(``,true)])}),128))]),_cache[54]||(_cache[54]=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[13]||(_cache[13]=$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)||sourceOperationsSuspended.value||temporaryAiWorkspace.value?.updateRepairTask?.busy,onClick:unref(reviewResolvedUpdate)},{default:withCtx(()=>[..._cache[55]||(_cache[55]=[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`:assistantFixRestrictionMessage.value,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)||sourceOperationsSuspended.value,onClick:_cache[12]||(_cache[12]=$event=>createPullRequestOpen.value=true)},{default:withCtx(()=>[..._cache[56]||(_cache[56]=[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$30,{"project-slug":unref(projectSlug),"session-id":unref(sessionId),failure:unref(saveWorkFailure),disabled:unref(saveWorkSending)||unref(saveWorkOperationActive)||sourceOperationsSuspended.value||unref(agentActive),onReplaced:_cache[14]||(_cache[14]=$event=>{props.refreshSessionData?.();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[17]||(_cache[17]=$event=>copyActivityOutput(unref(workspaceSetupOutput))),onDismiss:unref(dismissWorkspaceSetupActivity),onRetry:unref(retryWorkspaceSetup)},createSlots({_:2},[unref(workspaceSetupNeedsAttention)?{name:`error-actions`,fn:withCtx(()=>[unref(resourceRecoveryControl)&&props.session?.workspaceSetup?.resourceAdmissionId?(openBlock(),createBlock(resolveDynamicComponent(unref(resourceRecoveryControl)),{key:`${unref(sessionId)}:${props.session.workspaceSetup.resourceAdmissionId}`,"admission-id":props.session.workspaceSetup.resourceAdmissionId,"session-id":unref(sessionId),disabled:unref(workspaceSetupRetryDisabled)&&!resourceRetryBusy.value,onBusy:_cache[15]||(_cache[15]=$event=>resourceRetryBusy.value=$event),onRetryResult:_cache[16]||(_cache[16]=$event=>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[57]||(_cache[57]=[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`:assistantFixRestrictionMessage.value,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:props.session?.workspaceSetup?.runtimes||[],onMissing:_cache[18]||(_cache[18]=$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)]),createVNode(Vibe64ConversationLog_default,{ref_key:`conversationView`,ref:conversationView,"voice-runtime":props.active&&!props.sessionSelectionArchived?props.conversationRuntime:null,working:unref(agentWorking),"integration-action-pending":props.conversationLog?.integrationActionPending,"integration-connections":props.conversationLog?.integrationConnections,"integration-action-error":props.conversationLog?.integrationActionError,"integration-requests-enabled":props.active&&!props.sessionSelectionArchived,"session-id":unref(sessionId),"assistant-label":conversationAssistantLabel.value,class:`studio-autopilot__conversation`,error:props.conversationLog?.error,"error-reloadable":props.conversationLog?.errorReloadable,"follow-latest-key":unref(conversationFollowLatestKey),"has-more-before":props.conversationLog?.hasMoreBefore,loading:props.conversationLog?.loading,"loading-more":props.conversationLog?.loadingMore,"load-more-error":props.conversationLog?.loadMoreError,reloading:unref(chatReloading),"scroll-key":unref(conversationScrollKey),"source-root":unref(sessionSourceRoot),turns:unref(chatTurns),visible:unref(conversationLogVisible)&&!unref(chatCollapsed)&&!temporaryAiWorkspace.value?.visible,"welcome-message":unref(emptyConversationWelcome),onCancelTurn:unref(cancelOptimisticMessage),onEditTurn:unref(editOptimisticMessage),onLoadMore:unref(loadMoreChatTurns),onOpenSourceFile:unref(openSourceEditorFile),onOpenPlanHistory:_cache[30]||(_cache[30]=$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[58]||(_cache[58]=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_key:`approvalsPanel`,ref:approvalsPanel,approvals:mainChatApprovals,phone:unref(phoneLayout),onShowInChat:showApprovedMessage},null,8,[`approvals`,`phone`]),createVNode(Vibe64RoutingNotice_default,{request:unref(routingRequest),selection:props.session?.assistantSelection,mode:unref(assistantRoutingFromMetadata)(props.session?.metadata)?.mode||``,active:props.active&&unref(conversationLogVisible),"pending-action":routingActionSending.value,"action-error":routingActionError.value,busy:unref(agentActive)||unref(composerSending)||composerBlocked,onRetry:_cache[19]||(_cache[19]=$event=>sendRoutingAction(`continue`)),onImplement:_cache[20]||(_cache[20]=$event=>sendRoutingAction(`implement`)),onViewPlan:_cache[21]||(_cache[21]=$event=>workPlanViewer.value?.showPlan(`current`)),onSkip:_cache[22]||(_cache[22]=$event=>props.interruptAgentTurn({reason:`skip-review`}))},null,8,[`request`,`selection`,`mode`,`active`,`pending-action`,`action-error`,`busy`]),(openBlock(),createBlock(_sfc_main$50,{ref_key:`composerInput`,ref:composerInput,key:unref(composerKey),"saved-attachments":unref(composerAttachments),modelValue:unref(composerDraft),"onUpdate:modelValue":_cache[29]||(_cache[29]=$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[23]||(_cache[23]=$event=>isRef(questionAnswers)?questionAnswers.value=$event:null),choice:unref(selectedAnswerChoice),"onUpdate:choice":_cache[24]||(_cache[24]=$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_15$1,[!props.sessionSelectionArchived?(openBlock(),createBlock(Vibe64ChatModeControls_default,{key:0,session:props.session,"sessions-api-path":props.sessionsApiPath,goal:unref(readRefOrGetterValue)(props.conversationRuntime?.goalState)?.goal,purposes:assistantPurposes.value,disabled:sourceOperationsSuspended.value,active:unref(agentActive),"can-configure":assistantCanConfigureRouting.value,connecting:[`initializing`,`reconciling`].includes(props.agentConnectionStatus),loading:assistantAccessLoading.value,"load-error":assistantAccessError.value,onReload:reloadAssistantAccess,onSaved:reloadAssistantAccess,onCustom:_cache[25]||(_cache[25]=$event=>{composerSettingsButton.value=$event;composerSettingsOpen.value=true})},{default:withCtx(()=>[composerAccessHint.value?(openBlock(),createElementBlock(`div`,_hoisted_16$1,[createBaseVNode(`div`,_hoisted_17$1,[createTextVNode(toDisplayString(composerAccessHint.value)+` `,1),unref(agentObservationLost)&&!unref(agentActive)?(openBlock(),createBlock(VBtn,{key:0,size:`small`,variant:`text`,disabled:unref(composerDisabled)||unref(composerSending),onClick:continueConversation},{default:withCtx(()=>[..._cache[59]||(_cache[59]=[createTextVNode(` Continue `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])])):createCommentVNode(``,true)]),_:1},8,[`session`,`sessions-api-path`,`goal`,`purposes`,`disabled`,`active`,`can-configure`,`connecting`,`loading`,`load-error`])):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[26]||(_cache[26]=$event=>composerInput.value?.openFilePicker?.())},{default:withCtx(()=>[..._cache[60]||(_cache[60]=[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[61]||(_cache[61]=[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[62]||(_cache[62]=[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:props.active&&!props.sessionSelectionArchived,session:props.session,"conversation-runtime":props.conversationRuntime,"sessions-api-path":props.sessionsApiPath},null,8,[`active`,`session`,`conversation-runtime`,`sessions-api-path`]),createVNode(Vibe64WorkPlan_default,{ref_key:`workPlanViewer`,ref:workPlanViewer,session:props.session,"sessions-api-path":props.sessionsApiPath,active:props.active&&unref(conversationLogVisible),busy:unref(agentActive)},null,8,[`session`,`sessions-api-path`,`active`,`busy`]),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:composerSettingsOpen.value,"onUpdate:modelValue":_cache[27]||(_cache[27]=$event=>composerSettingsOpen.value=$event),target:composerSettingsButton.value,"can-configure":assistantCanConfigureRouting.value,"changes-disabled":sourceOperationsSuspended.value,session:props.session,"sessions-api-path":props.sessionsApiPath,onSaved:_cache[28]||(_cache[28]=$event=>{props.refreshSessionData?.();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[63]||(_cache[63]=[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:props.active&&!unref(chatCollapsed),"session-selected":props.active,"assistant-selection":props.session?.assistantSelection,"assistant-ready":Boolean(unref(sessionId))&&!props.sessionSelectionArchived,"connection-unavailable":unref(connectionRecoveryVisible),"can-configure-routing":assistantCanConfigureRouting.value,"preview-attachment-state":unref(previewAttachmentState),"project-slug":unref(projectSlug),"session-id":unref(sessionId),"main-has-messages":unref(chatTurns).length>0,"sessions-api-path":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":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`,`send-lesson-message`,`onCheckUpdate`,`onReviewUpdate`,`onTaskFinished`])],512),createBaseVNode(`section`,_hoisted_18$1,[unref(sourceToolLoading)?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,class:`studio-autopilot__right-pane-page`,label:`session source`,loading:``})):createCommentVNode(``,true),props.projectPane===`dashboard`?withDirectives((openBlock(),createBlock(Vibe64DashboardShell_default,{key:1,class:`studio-autopilot__dashboard-shell`,"dashboard-context":dashboardContext.value},{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:dashboardContext.value},void 0,true,0):createCommentVNode(``,true)],8,_hoisted_19$1),[[vShow,unref(dashboardRouteVisible)]]),withDirectives(createBaseVNode(`div`,_hoisted_20$1,[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),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_22$1,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:unref(backToDashboard)},null,8,[`onClick`])]),createBaseVNode(`div`,_hoisted_23$1,[renderSlot(_ctx.$slots,`dashboard`,{dashboardContext:dashboardContext.value},void 0,true)])],8,_hoisted_21$1)):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_25,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[31]||(_cache[31]=$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:assistantAccessScopeKey.value,"repo-available":Boolean(unref(sessionSourceRoot)),active:props.active&&props.projectPane===`dashboard`&&unref(rightPaneTab)===`editor`,"agent-active":unref(agentActive),"file-bookmarks":unref(fileBookmarks),"assistant-available":assistantCanUsePurpose(`source_explanation`),"assistant-unavailable-message":assistantPurposes.value.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)(props.sessionsApiPath),onAskAssistantAboutFile:unref(askAssistantAboutFile),onOpenProgram:_cache[32]||(_cache[32]=$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_24),[[vShow,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_27,[createVNode(Vibe64DashboardBackButton_default,{"data-vibe64-guide-pane":`dashboard`,onClick:_cache[33]||(_cache[33]=$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:assistantAccessScopeKey.value,"open-request":unref(databaseOpenRequest),active:props.active&&props.projectPane===`dashboard`&&unref(rightPaneTab)===`database`,"assistant-available":assistantCanUsePurpose(`fix`),class:`studio-autopilot__session-tool-content`,"project-slug":unref(projectSlug),"session-id":unref(sessionId),onRequestOverviewAssistant:_cache[34]||(_cache[34]=$event=>assistantCanUsePurpose(`fix`)?startTemporaryAiTask($event):unref(prefillComposer)($event.message,{append:true}))},null,8,[`open-request`,`active`,`assistant-available`,`project-slug`,`session-id`])):createCommentVNode(``,true)],8,_hoisted_26),[[vShow,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)&&!props.sessionSelectionArchived,active:props.active&&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,"reload-version":unref(systemReloadVersion),"project-slug":unref(projectSlug),onOpenTable:unref(openSubsystemTable),onDescribeSubsystems:unref(describeSubsystems),"session-id":unref(sessionId),onInspectFile:_cache[35]||(_cache[35]=$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: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)(props.sessionsApiPath),onOpenSourceFile:openFile,onInterfaceLocation:updateLocation,"assistant-available":assistantCanUsePurpose(`source_explanation`),"assistant-unavailable-message":assistantPurposes.value.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`,`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[37]||(_cache[37]=$event=>!$event&&(architectureFileRequest.value=null))},{default:withCtx(()=>[createBaseVNode(`section`,_hoisted_29,[createBaseVNode(`header`,null,[createBaseVNode(`strong`,null,toDisplayString(architectureFileRequest.value?.path),1),createVNode(VBtn,{variant:`text`,"aria-label":`Close file viewer`,onClick:_cache[36]||(_cache[36]=$event=>architectureFileRequest.value=null)},{default:withCtx(()=>[..._cache[64]||(_cache[64]=[createTextVNode(`Close`,-1)])]),_:1})]),architectureFileRequest.value?(openBlock(),createBlock(Vibe64SessionSourceEditor_default,{"single-file":``,key:architectureFileRequest.value.path,active:props.active,"agent-active":unref(agentActive),"open-request":architectureFileRequest.value,"project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":unref(readRefOrGetterValue)(props.sessionsApiPath),onOpenSourceFile:unref(openSourceEditorFile),"assistant-available":assistantCanUsePurpose(`source_explanation`),"assistant-unavailable-message":assistantPurposes.value.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_28),[[vShow,props.projectPane===`dashboard`&&unref(rightPaneTab)===`system`]]),lessonShown.value&&props.active?(openBlock(),createBlock(Vibe64LessonSheet_default,{key:3})):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,_hoisted_30,[createVNode(Vibe64ProjectOnboarding_default,{active:props.active&&props.projectPane===`preview`,archived:props.sessionSelectionArchived,busy:sourceOperationsSuspended.value||unref(agentActive)||Boolean(props.page?.busy||props.page?.launchBusy),"can-ask":unref(assistantFixAllowed),"request-temporary-ai":startTemporaryAiTask,"session-id":selectedAssistantSessionId.value},{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":!props.sessionSelectionArchived,"button-label":`Run`,"button-size":`small`,"button-variant":`tonal`,busy:unref(agentActive)||Boolean(props.page?.busy||props.page?.launchBusy),class:`studio-autopilot__preview-launch`,"embedded-preview":``,"preview-displayed":props.projectPane===`preview`&&!lessonShown.value,session:props.session,"source-operations-suspended":sourceOperationsSuspended.value,"toolbar-teleport-target":props.projectPane===`preview`?props.previewToolbarTeleportTarget:``,"window-displayed":props.active,onPreviewAttachmentState:unref(updatePreviewAttachmentState),onTestApproval: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`,`onPreviewAttachmentState`])]),_:1},8,[`active`,`archived`,`busy`,`can-ask`,`session-id`])],512),[[vShow,props.projectPane===`preview`]])]),createVNode(VDialog,{"model-value":Boolean(unref(resolvedUpdateReview)),"max-width":`36rem`,"aria-label":`Apply resolved Update`,scrollable:``,"onUpdate:modelValue":_cache[40]||(_cache[40]=$event=>!$event&&(resolvedUpdateReview.value=null))},{default:withCtx(()=>[unref(resolvedUpdateReview)?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[65]||(_cache[65]=[createTextVNode(`Apply resolved Update`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[66]||(_cache[66]=createBaseVNode(`p`,null,`Confirm that these files preserve the intended changes from both this session and the latest saved version.`,-1)),createBaseVNode(`ul`,_hoisted_31,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(resolvedUpdateReview).conflictPaths,file=>{return openBlock(),createElementBlock(`li`,{key:file},toDisplayString(file),1)}),128))]),_cache[67]||(_cache[67]=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[38]||(_cache[38]=$event=>resolvedUpdateReview.value=null)},{default:withCtx(()=>[..._cache[68]||(_cache[68]=[createTextVNode(`Cancel`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`auto`,"min-height":`48`,style:{"max-width":`100%`},disabled:unref(updateWorkDisabled)||sourceOperationsSuspended.value||temporaryAiWorkspace.value?.updateRepairTask?.busy,onClick:_cache[39]||(_cache[39]=$event=>unref(applyResolvedUpdate)(temporaryAiWorkspace.value?.updateRepairTask,unref(reportTemporaryRecovery)))},{default:withCtx(()=>[..._cache[69]||(_cache[69]=[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[42]||(_cache[42]=$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[70]||(_cache[70]=[createTextVNode(`Not enough room`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(unref(contextFullFailure).message),1),_cache[71]||(_cache[71]=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[41]||(_cache[41]=$event=>contextFullFailure.value=null)},{default:withCtx(()=>[..._cache[72]||(_cache[72]=[createTextVNode(`Close`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,onClick:unref(retryContextFull)},{default:withCtx(()=>[..._cache[73]||(_cache[73]=[createTextVNode(`Summarise and continue`,-1)])]),_:1},8,[`onClick`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`]),createVNode(VDialog,{modelValue:unref(saveWorkConfirmOpen),"onUpdate:modelValue":_cache[45]||(_cache[45]=$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[74]||(_cache[74]=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[75]||(_cache[75]=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_32,[createBaseVNode(`span`,null,toDisplayString(props.workState?.changedPaths?.length||0)+` changed `+toDisplayString(props.workState?.changedPaths?.length===1?`file`:`files`),1),createVNode(VBtn,{height:`48`,variant:`text`,onClick:_cache[43]||(_cache[43]=$event=>{unref(cancelSaveWork)();unref(selectSessionTool)(`changes`)})},{default:withCtx(()=>[..._cache[76]||(_cache[76]=[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_33,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),sessionPullRequest.value?(openBlock(),createElementBlock(`p`,_hoisted_34,`PR #`+toDisplayString(sessionPullRequest.value.number)+` · `+toDisplayString(sessionPullRequest.value.headBranch)+` → `+toDisplayString(sessionPullRequest.value.baseBranch),1)):createCommentVNode(``,true)]),_:1})):!unref(saveWorkReview)?(openBlock(),createElementBlock(`p`,_hoisted_35,`Refresh repository status to review the destination.`)):createCommentVNode(``,true),_cache[77]||(_cache[77]=createBaseVNode(`p`,{class:`text-body-small mt-3 mb-0`},`Save open file edits first.`,-1)),saveWorkNeedsPullRequest.value?(openBlock(),createElementBlock(`p`,_hoisted_36,`A pull request is required.`)):createCommentVNode(``,true),unref(saveWorkDisabled)?(openBlock(),createElementBlock(`p`,_hoisted_37,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[78]||(_cache[78]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`,`onClick`]),!unref(saveWorkConnectedReview)&&githubProject.value&&!sessionPullRequest.value?.number?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,height:`48`,variant:saveWorkNeedsPullRequest.value?`flat`:`outlined`,disabled:unref(saveWorkDisabled)||!unref(saveWorkReview),onClick:_cache[44]||(_cache[44]=$event=>{unref(cancelSaveWork)();createPullRequestOpen.value=true})},{default:withCtx(()=>[..._cache[79]||(_cache[79]=[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_38,toDisplayString(unref(saveWorkSending)?`Committing…`:publicationLabel.value),1)]),_:1},8,[`aria-busy`,`disabled`,`variant`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`aria-label`])],2)}}};var Vibe64AutopilotView_default=_plugin_vue_export_helper_default(_sfc_main$19,[[`__scopeId`,`data-v-41b46350`]]);var _sfc_main$18={__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$16={class:`vibe64-agent-terminal-drop-overlay`,"aria-live":`polite`,role:`status`};var _sfc_main$17={__name:`Vibe64AgentTerminalDropOverlay`,props:{label:{required:true,type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$16,[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$17,[[`__scopeId`,`data-v-2d9e2b1e`]]);var _hoisted_1$15={class:`vibe64-agent-terminal-start-panel`};var _hoisted_2$11={class:`vibe64-agent-terminal-start-panel__icon`};var _hoisted_3$11={class:`vibe64-agent-terminal-start-panel__copy`};var _sfc_main$16={__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$15,[createVNode(VSheet,{class:`vibe64-agent-terminal-start-panel__card`,elevation:`4`,role:`status`,rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$11,[createVNode(VIcon,{icon:__props.icon,size:`30`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_3$11,[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$16,[[`__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 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}}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``}var _hoisted_1$14=[`aria-hidden`];var _hoisted_2$10=[`disabled`];var _hoisted_3$10={class:`vibe64-codex-session__command`};var _hoisted_4$7={key:0,class:`text-caption text-medium-emphasis`};var _sfc_main$15={__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);let terminalStartPromise=null;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{closeTerminalSocket,connectTerminalSocket,disposeTerminalUi,focusTerminal:focusTerminalUi,resetTerminalDisplay,resetTerminalSessionState,sendTerminalData:sendTerminalBytes,terminalFocused,terminalCommandPreview,terminalConnectionStatus,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=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{abandonAttachments:abandonTerminalAttachments,attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,resetAttachmentDragState,uploadAttachmentFiles}=useAgentTerminalAttachments({canUpload:terminalAttachmentsEnabled,deleteAttachment:codexCommands.deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,terminalSessionId,uploadAttachment:codexCommands.uploadAttachment});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)}const terminalCanStart=computed(()=>Boolean(canStartTerminal.value));const sessionSourcePending=computed(()=>Boolean(terminalDisplayActive.value&&sessionId.value&&!sessionSource.value&&!hasTerminalSession.value));const terminalStartActionVisible=computed(()=>!sessionSourcePending.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 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`});const showTerminalStartPanel=computed(()=>componentMounted.value&&(sessionSourcePending.value||terminalStarting.value&&terminalDisplayActive.value||canUseTerminal.value&&terminalCanStart.value&&(!terminalSessionId.value||terminalExited.value||terminalServerStale.value)));function handleTerminalCopy(){copyStatus.value=`Terminal text copied.`}function handleTerminalInterrupt(){clearCodexBusy();clearCodexWorking()}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})}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}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}}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`)}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()}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$10)):createCommentVNode(``,true),createVNode(_sfc_main$18,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":terminalErrorTitle.value,fill:``,height:`100%`,"mobile-takeover":``,presentation:unref(terminalPresentation),"show-copy":``,"show-interrupt":!__props.readOnly,stage:terminalSubtitle.value,status:unref(terminalStatus),subtitle:terminalSubtitle.value,terminal:unref(terminalController),title:`Codex terminal`,visible:unref(terminalStreamActive),onCleanExit:closeTerminal,onClose: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:restartTerminal},{default:withCtx(()=>[createTextVNode(toDisplayString(terminalErrorActionText.value),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,variant:`tonal`,onClick:closeTerminal},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close terminal `,-1)])]),_:1})]),"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),showTerminalStartPanel.value?(openBlock(),createBlock(Vibe64AgentTerminalStartPanel_default,{key:1,"action-text":terminalStartButtonText.value,"action-visible":terminalStartActionVisible.value,icon:terminalStartIcon.value,message:terminalStartPanelMessage.value,starting:unref(terminalStarting),title:terminalStartPanelTitle.value,onStart:restartTerminal},null,8,[`action-text`,`action-visible`,`icon`,`message`,`starting`,`title`])):createCommentVNode(``,true)]),"before-terminal":withCtx(()=>[createVNode(_sfc_main$51,{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$10,toDisplayString(commandPreview||`Codex is not running.`),1),copyStatus.value||unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_4$7,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`])],42,_hoisted_1$14)}}};var Vibe64CodexSession_default=_plugin_vue_export_helper_default(_sfc_main$15,[[`__scopeId`,`data-v-64232d6f`]]);var _hoisted_1$13=[`aria-hidden`];var _hoisted_2$9=[`disabled`];var _hoisted_3$9={key:0,class:`text-caption px-3 py-2 ma-0`};var _hoisted_4$6={class:`vibe64-native-agent-session__command`};var _hoisted_5$5={key:0,class:`text-caption text-medium-emphasis`,role:`status`};var _sfc_main$14={__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$9)):createCommentVNode(``,true),createVNode(_sfc_main$18,{"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$9,` 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$51,{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$6,toDisplayString(commandPreview||`${assistantLabel.value} is not running.`),1),unref(attachmentStatus)?(openBlock(),createElementBlock(`span`,_hoisted_5$5,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$13)}}};var Vibe64NativeAgentSession_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-437673a4`]]);var _hoisted_1$12={class:`studio-renewal-assistant__heading`};var _hoisted_2$8={class:`text-body-small`};var _hoisted_3$8={class:`studio-renewal-assistant__error`};var _hoisted_4$5={key:3,class:`studio-renewal-assistant__fields`};var _hoisted_5$4={key:4,class:`studio-renewal-assistant__summary text-body-small`,role:`status`};var _sfc_main$13={__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$12,[createBaseVNode(`span`,null,[createBaseVNode(`strong`,{id:headingId,class:`text-title-small`},toDisplayString(__props.heading),1),createBaseVNode(`small`,_hoisted_2$8,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$8,[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$5,[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$4,toDisplayString(__props.summaryPrefix)+toDisplayString(selectionSummary.value),1)):createCommentVNode(``,true)])}}};var Vibe64RenewalAssistantSelector_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-c35da031`]]);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`})]);function sessionRenewalText(value=``){return String(value??``).replaceAll(`\r
|
|
22
22
|
`,`
|
|
23
23
|
`).replaceAll(`\r`,`
|