vibe64 0.1.26 → 0.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/assets/{VRadioGroup-D6WRdUau.js → VRadioGroup-BuRMvs7d.js} +1 -1
  2. package/dist/assets/{VTabs-BGX5dGoS.js → VTabs-CQq9CAuT.js} +1 -1
  3. package/dist/assets/{VTextarea-CD6H_mtJ.js → VTextarea-Duvzvmjq.js} +1 -1
  4. package/dist/assets/{Vibe64AsyncModuleState-Cel3OePx.js → Vibe64AsyncModuleState-DuuzlJDp.js} +1 -1
  5. package/dist/assets/{Vibe64AuthSettingsButton-CMMeacsl.js → Vibe64AuthSettingsButton-CKOCL-kl.js} +1 -1
  6. package/dist/assets/{Vibe64DashboardShell-C2UhX2ke.js → Vibe64DashboardShell-DMT8aOp1.js} +1 -1
  7. package/dist/assets/{Vibe64DatabaseWorkspace-C43TE5-O.js → Vibe64DatabaseWorkspace-CqH0zfFZ.js} +1 -1
  8. package/dist/assets/{Vibe64OutputControls-BmzH2ASf.js → Vibe64OutputControls-DDILWOYb.js} +1 -1
  9. package/dist/assets/{Vibe64RepositoryWorkspace-CT9tkvHh.js → Vibe64RepositoryWorkspace-D11BZHtF.js} +1 -1
  10. package/dist/assets/Vibe64SessionFiles-BSoB7Xrs.js +1 -0
  11. package/dist/assets/{Vibe64SessionFiles-CH5PCxwg.css → Vibe64SessionFiles-DVux69YS.css} +1 -1
  12. package/dist/assets/{Vibe64SubsystemsView-DNx-pZp8.js → Vibe64SubsystemsView-tLlxmK3M.js} +1 -1
  13. package/dist/assets/{Vibe64SystemWorldView-UdNJZbqX.js → Vibe64SystemWorldView-8og8TPyL.js} +1 -1
  14. package/dist/assets/{_sessionId_-DZTmI19N.js → _sessionId_-Dts6gv4W.js} +1 -1
  15. package/dist/assets/{_sessionTool_-CugJWIK4.js → _sessionTool_-bHJUlHCW.js} +1 -1
  16. package/dist/assets/_slug_-B3fqw8Sl.js +12 -0
  17. package/dist/assets/_slug_-DfHqx2_b.css +1 -0
  18. package/dist/assets/{dashboard-D4NXqPY1.js → dashboard-CcD6GIaB.js} +1 -1
  19. package/dist/assets/{definitions-CyUCoqu-.js → definitions-ChGXm26a.js} +1 -1
  20. package/dist/assets/{error-kYKTA8fu.js → error-CStS-Kbt.js} +1 -1
  21. package/dist/assets/{index-hy7AAm-B.js → index-B262pg9q.js} +1 -1
  22. package/dist/assets/{index-DX6Rm6jZ.js → index-B_grpOta.js} +1 -1
  23. package/dist/assets/{index-Cpt19GIW.js → index-BtHA_DX9.js} +1 -1
  24. package/dist/assets/{index-SBc6H2In.js → index-C4KnwA0g.js} +4 -4
  25. package/dist/assets/{index-DeRx59Iq.js → index-CC7BFJAg.js} +1 -1
  26. package/dist/assets/{index-6Kv-7k0S.js → index-CKFrWxnr.js} +1 -1
  27. package/dist/assets/{index-BDe3NnFP.js → index-CPG-_bMW.js} +1 -1
  28. package/dist/assets/{index-CuEZOpKL.js → index-CV9pOpbQ.js} +1 -1
  29. package/dist/assets/{index-D4p1hWbM.js → index-DIQxSy1c.js} +1 -1
  30. package/dist/assets/{index-D5vnCntG.js → index-DVaJ8fEr.js} +1 -1
  31. package/dist/assets/{index-BGu7hfTb.js → index-DtGqjUin.js} +1 -1
  32. package/dist/assets/{index-Cca4WXur.js → index-YQALXwL4.js} +1 -1
  33. package/dist/assets/{placement-Nw6LF6xp.js → placement-Cyt3SnRe.js} +1 -1
  34. package/dist/assets/{studioGateApi-B2eiydiA.js → studioGateApi-BwBnOYBp.js} +1 -1
  35. package/dist/assets/{useArchivedVibe64Sessions-LeGda1Y9.js → useArchivedVibe64Sessions-_FKt1-qN.js} +1 -1
  36. package/dist/assets/{useVibe64ConversationLog-BPyKYbvH.js → useVibe64ConversationLog-BjnpqM9K.js} +1 -1
  37. package/dist/assets/{useVibe64ProjectScope-n5T5l2pY.js → useVibe64ProjectScope-DcDkjbLT.js} +1 -1
  38. package/dist/assets/{useVibe64SessionData-BToODuTg.js → useVibe64SessionData-BHLSmuPm.js} +1 -1
  39. package/dist/assets/{useVibe64SessionSelection-D1wXIWTm.js → useVibe64SessionSelection-G6KQKJxb.js} +1 -1
  40. package/dist/assets/{vibe64RepositoryRealtime-Xo7aIksE.js → vibe64RepositoryRealtime-C2WPn5do.js} +1 -1
  41. package/dist/assets/{vibe64SessionInfo-Dy_4bL3a.js → vibe64SessionInfo-8kuxgD5r.js} +1 -1
  42. package/dist/assets/{vibe64SessionPanelModel-5UED-6V-.js → vibe64SessionPanelModel-DDaXjAJ_.js} +1 -1
  43. package/dist/assets/{vibe64SessionRequestConfig-B7Llggdb.js → vibe64SessionRequestConfig-uGWcyQY6.js} +1 -1
  44. package/dist/assets/{vibe64SessionToolDefinitions-C4maKOfp.js → vibe64SessionToolDefinitions-D5CgOIqa.js} +1 -1
  45. package/dist/assets/{vueRefOrGetterValue-_KqAOFjr.js → vueRefOrGetterValue-CV9c3oBd.js} +1 -1
  46. package/dist/index.html +1 -1
  47. package/node_modules/@jskit-ai/connector-google-calendar/package.json +3 -3
  48. package/node_modules/@jskit-ai/connector-google-calendar/patterns/calendar-cli/example/package.json +4 -4
  49. package/node_modules/@jskit-ai/connectors-catalog/package.json +3 -3
  50. package/node_modules/@jskit-ai/connectors-catalog/test/dbt-semantic-layer.test.js +3 -0
  51. package/node_modules/@jskit-ai/connectors-catalog/test/google-ads.test.js +3 -0
  52. package/node_modules/@jskit-ai/connectors-catalog/test/salesforce.test.js +3 -0
  53. package/node_modules/@jskit-ai/connectors-catalog/test/xero.test.js +3 -0
  54. package/node_modules/@jskit-ai/connectors-core/package.json +4 -4
  55. package/node_modules/@jskit-ai/http-web/package.json +6 -6
  56. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  57. package/node_modules/@jskit-ai/kernel/server/runtime/fastifyBootstrap.js +50 -10
  58. package/node_modules/@jskit-ai/kernel/server/runtime/fastifyBootstrap.test.js +38 -0
  59. package/node_modules/@jskit-ai/kernel/shared/support/normalize.js +8 -0
  60. package/node_modules/@jskit-ai/kernel/shared/support/normalize.test.js +10 -0
  61. package/node_modules/@jskit-ai/payments-core/package.json +1 -1
  62. package/node_modules/@jskit-ai/realtime/package.json +3 -3
  63. package/node_modules/@jskit-ai/realtime/patterns/realtime-application/example/package.json +2 -2
  64. package/node_modules/@jskit-ai/resource-core/package.json +2 -2
  65. package/node_modules/@jskit-ai/resource-crud-core/package.json +3 -3
  66. package/node_modules/@jskit-ai/shell-web/package.json +2 -2
  67. package/node_modules/@jskit-ai/uploads-runtime/package.json +2 -2
  68. package/node_modules/@local/current-app/package.json +1 -1
  69. package/node_modules/@local/main/package.json +2 -2
  70. package/node_modules/@local/studio-health/package.json +1 -1
  71. package/node_modules/@local/vibe64-accounts/package.json +3 -3
  72. package/node_modules/@local/vibe64-core/package.json +1 -1
  73. package/node_modules/@local/vibe64-database-tools/package.json +3 -3
  74. package/node_modules/@local/vibe64-project/package.json +1 -1
  75. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProvider.js +34 -0
  76. package/node_modules/@local/vibe64-sessions/package.json +1 -1
  77. package/node_modules/@local/vibe64-sessions/src/server/sessionRenewal.js +4 -1
  78. package/node_modules/@local/vibe64-source-editor/package.json +5 -5
  79. package/node_modules/@local/vibe64-system-graph/package.json +3 -3
  80. package/node_modules/@local/vibe64-terminals/package.json +2 -2
  81. package/node_modules/@local/vibe64-terminals/src/server/agent/providers/codexSessionAgentProvider.js +6 -0
  82. package/node_modules/@local/vibe64-terminals/src/server/agent/sessionAgentManager.js +16 -0
  83. package/node_modules/@local/vibe64-terminals/src/server/codexTerminal.js +180 -64
  84. package/node_modules/@local/vibe64-terminals/src/server/registerRoutes.js +12 -0
  85. package/node_modules/@local/vibe64-terminals/src/server/service.js +57 -16
  86. package/node_modules/@local/vibe64-terminals/src/server/sessionPromptHints.js +9 -1
  87. package/node_modules/@local/vibe64-terminals/src/server/sessionSaveCommitMessage.js +1 -1
  88. package/package.json +15 -15
  89. package/packages/current-app/package.json +1 -1
  90. package/packages/main/package.json +2 -2
  91. package/packages/studio-health/package.json +1 -1
  92. package/packages/vibe64-accounts/package.json +3 -3
  93. package/packages/vibe64-core/package.json +1 -1
  94. package/packages/vibe64-database-tools/package.json +3 -3
  95. package/packages/vibe64-project/package.json +1 -1
  96. package/packages/vibe64-runtime/src/server/codexAppServerProvider.js +34 -0
  97. package/packages/vibe64-sessions/package.json +1 -1
  98. package/packages/vibe64-sessions/src/server/sessionRenewal.js +4 -1
  99. package/packages/vibe64-source-editor/package.json +5 -5
  100. package/packages/vibe64-system-graph/package.json +3 -3
  101. package/packages/vibe64-terminals/package.json +2 -2
  102. package/packages/vibe64-terminals/src/server/agent/providers/codexSessionAgentProvider.js +6 -0
  103. package/packages/vibe64-terminals/src/server/agent/sessionAgentManager.js +16 -0
  104. package/packages/vibe64-terminals/src/server/codexTerminal.js +180 -64
  105. package/packages/vibe64-terminals/src/server/registerRoutes.js +12 -0
  106. package/packages/vibe64-terminals/src/server/service.js +57 -16
  107. package/packages/vibe64-terminals/src/server/sessionPromptHints.js +9 -1
  108. package/packages/vibe64-terminals/src/server/sessionSaveCommitMessage.js +1 -1
  109. package/dist/assets/Vibe64SessionFiles-BS5MW7Qz.js +0 -1
  110. package/dist/assets/_slug_-BzRzebKA.js +0 -12
  111. package/dist/assets/_slug_-Q7ibe3SE.css +0 -1
@@ -0,0 +1,12 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Vibe64OutputControls-DDILWOYb.js","assets/index-C4KnwA0g.js","assets/index-B0R44Dvo.css","assets/vibe64RepositoryRealtime-C2WPn5do.js","assets/vibe64RepositoryRealtime-Bw1TcLWf.css","assets/vibe64SessionRequestConfig-uGWcyQY6.js","assets/vueRefOrGetterValue-CV9c3oBd.js","assets/vibe64SessionPanelModel-DDaXjAJ_.js","assets/vibe64SessionViewModel-C4e2otoM.js","assets/vibe64BrowserTabOrigin-DDSCqr3B.js","assets/useVibe64ProjectScope-DcDkjbLT.js","assets/Vibe64AuthSettingsButton-CKOCL-kl.js","assets/studioGateApi-BwBnOYBp.js","assets/vibe64AccountConnectionsDialog-Cd1-kEer.js","assets/VTabs-CQq9CAuT.js","assets/VTabs-BNf8Ojba.css","assets/Vibe64AuthSettingsButton-B7BehvQ1.css","assets/Vibe64AsyncModuleState-DuuzlJDp.js","assets/Vibe64AsyncModuleState-bbjhm0uT.css","assets/vibe64ApiResponses-COQ3JIKv.js","assets/VTextarea-Duvzvmjq.js","assets/VTextarea-BCfYE4T3.css","assets/Vibe64SessionFiles-BSoB7Xrs.js","assets/useVibe64ConversationLog-BjnpqM9K.js","assets/definitions-ChGXm26a.js","assets/index-BYZl5lR4.js","assets/base-DDNBxAg7.js","assets/Vibe64SessionFiles-DVux69YS.css","assets/VRadioGroup-BuRMvs7d.js","assets/VRadioGroup-CDahLIja.css","assets/vibe64SessionInfo-8kuxgD5r.js","assets/Vibe64DashboardShell-DMT8aOp1.js","assets/placement-Cyt3SnRe.js","assets/vibe64SessionToolDefinitions-D5CgOIqa.js","assets/Vibe64DashboardShell-BcVewaTL.css","assets/useVibe64SessionData-BHLSmuPm.js","assets/useVibe64SessionSelection-G6KQKJxb.js","assets/route-block-D_Po64gA.js","assets/Vibe64OutputControls-Xq77pYif.css"])))=>i.map(i=>d[i]);
2
+ import{p as projectSelectionGateQueryKey,S as StudioAppShellLayout,P as ProjectSelectionGate,V as Vibe64AuthSettingsButton}from"./Vibe64AuthSettingsButton-CKOCL-kl.js";import{_ as _export_sfc,f as useId,a as openBlock,b as createBlock,w as withCtx,e as createVNode,V as VCard,g as VCardTitle,h as VIcon,i as unref,m as mdiArchiveOutline,j as createTextVNode,k as VCardText,d as createBaseVNode,t as toDisplayString,l as VCardActions,n as VBtn,p as VDialog,c as createElementBlock,q as mdiAlertCircleOutline,r as createCommentVNode,s as mdiMessageAlertOutline,v as VBadge,x as VCardSubtitle,F as Fragment,y as renderList,z as VSpacer,A as computed,B as ref,C as onBeforeUnmount,D as useEndpointResource,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,G as resolveStudioRequestUrl,H as watch,I as VAlert,J as renderSlot,K as VSkeletonLoader,L as getHttpWebClient,M as useRealtimeEvent,N as mergeProps,O as VMenu,P as usePaths,Q as VIBE64_SURFACE_ID,S as VSheet,T as VAvatar,U as mdiBrain,W as mdiClockOutline,X as mdiCheck,Y as VAutocomplete,Z as mdiLockOutline,$ as normalizeClass,a0 as mdiCreditCardOutline,a1 as mdiShieldCheckOutline,a2 as VSwitch,a3 as withModifiers,a4 as VCardItem,a5 as mdiCogOutline,a6 as nextTick,a7 as useDisplay,a8 as withKeys,a9 as VTextField,aa as mdiMagnify,ab as mdiClose,ac as mdiStarOutline,ad as resolveDynamicComponent,ae as VBottomSheet,af as useUiFeedback,ag as onScopeDispose,ah as mdiLightbulbOnOutline,ai as VChip,aj as mdiRefresh,ak as mdiConsoleLine,al as createSlots,am as normalizeProps,an as guardReactiveProps,ao as Vibe64TerminalSurface,ap as terminalLastMeaningfulLine,aq as mdiKeyOutline,ar as mdiCreationOutline,as as mdiCodeBraces,at as mdiPlus,au as inject,av as mdiInformationOutline,aw as VTooltip,ax as mdiDotsHorizontalCircleOutline,ay as mdiCloudDownloadOutline,az as mdiContentSaveAlertOutline,aA as mdiCheckCircleOutline,o as onMounted,aB as mdiRobotOutline,aC as withDirectives,aD as vShow,aE as mdiPaperclip,aF as mdiStopCircleOutline,aG as mdiArrowUp,aH as writeLocalStorageJson,aI as readLocalStorageJson,aJ as vibe64ProjectScopedStorageKey,aK as defineComponent,aL as useShellAsyncModuleRecoveryRuntime,aM as h,aN as isDynamicImportError,aO as dynamicImportErrorMessage,aP as shallowRef,aQ as markRaw,aR as useRoute,u as useRouter,aS as useVibe64Accounts,aT as normalizeProjectRoutePath,aU as projectAppPath,aV as __vitePreload,aW as useRealtimeSocket,aX as mdiGithub,aY as Teleport,aZ as mdiSourcePull,a_ as mdiContentSaveOutline,a$ as VList,b0 as VListItem,b1 as mdiAutorenew,b2 as mdiIncognito,b3 as mdiDotsVertical,b4 as mdiBroom,b5 as mdiEyePlusOutline,b6 as mdiConsoleNetworkOutline,b7 as mdiAccountArrowRightOutline,b8 as mdiSend,b9 as mdiArrowTopRight,ba as mdiPencilOutline,bb as VSelect,bc as VChipGroup,bd as isRef,be as mdiArrowLeft,bf as writeClipboardText,bg as defineAsyncComponent,bh as Vibe64Terminal,bi as studioApiPath,bj as resolveWebSocketUrl,bk as CODEX_RECONNECT_REQUIRED_CODE,bl as CODEX_RECONNECT_REQUIRED_MESSAGE,bm as useVibe64Terminal,bn as createWebSocketTerminalDriver,bo as VIBE64_ACCOUNTS_CHANGED_EVENT,bp as mdiRestart,bq as mdiPlayCircleOutline,br as VDivider,bs as StudioErrorNotice,bt as mdiArchiveCheckOutline,bu as VProgressLinear,bv as mdiCircleSlice4,bw as mdiCircleOutline,bx as mdiFileDocumentEditOutline,by as proxyRefs,bz as reactive,bA as scopedDevelopmentApiUrl,bB as Transition,bC as provide,bD as useShellLayoutState,bE as watchEffect,bF as mdiChevronRight,bG as mdiChevronDown,bH as projectSlugFromRoute,bI as mdiChevronLeft,bJ as RouterView}from"./index-C4KnwA0g.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-DuuzlJDp.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DcDkjbLT.js";import{v as vibe64ResourceResponseError,a as vibe64ApiResponseError,b as vibe64ApiError}from"./vibe64ApiResponses-COQ3JIKv.js";import{V as VTextarea}from"./VTextarea-Duvzvmjq.js";import{V as VIBE64_SESSION_CHANGED_EVENT,v as vibe64SessionPath,a as VIBE64_ASSISTANTS_API_SUFFIX,b as vibe64AssistantCapabilitiesQueryKey,c as VIBE64_SESSIONS_API_SUFFIX,d as VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX,e as vibe64AssistantModelAccessPath,f as vibe64SourceEditorStarsPath,g as vibe64TemporaryConversationPath,h as vibe64AgentAttachmentFilePath,i as vibe64TemporaryConversationStopPath,j as vibe64TemporaryConversationsPath,k as vibe64TemporaryConversationTurnsPath,l as vibe64SessionPromptHintsCancelPath,m as vibe64SessionPromptHintsPath,n as vibe64SessionQueryKey,o as vibe64AgentTerminalPath,p as vibe64GlobalCodexTerminalPath,q as vibe64OutputRunPath,r as VIBE64_API_SUFFIX,s as vibe64AgentTerminalControlTextPath,t as agentSettingsInputFromContext,u as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,w as vibe64SessionCheckUpdatesPath}from"./vibe64SessionRequestConfig-uGWcyQY6.js";import{r as readRefOrGetterValue}from"./vueRefOrGetterValue-CV9c3oBd.js";import{r as requestVibe64AccountConnectionsDialog}from"./vibe64AccountConnectionsDialog-Cd1-kEer.js";import{v as vibe64RealtimeOriginPayload,a as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-DDSCqr3B.js";import{V as Vibe64StarredFilesList,a as Vibe64ConversationProgress,p as parseLongTextReviewBlocks,L as LongTextPreviewBlocks,b as Vibe64ConversationAttachments,c as Vibe64AutopilotPromptTextarea,n as numberedQuestionSubmissionText,d as parseAnswerChoicePrompt,e as parseNumberedQuestionPrompt,f as Vibe64ConversationLog,g as Vibe64SessionFiles,u as useVibe64AttachmentCommands,h as useAgentAttachments,i as Vibe64AttachmentQueue}from"./Vibe64SessionFiles-BSoB7Xrs.js";import{V as Vibe64TemporaryAiFixAction,r as repositoryStatusSessionId,a as repositoryStatusRealtimeShouldRefresh,b as repositoryStatusRealtimeNeedsCanonicalCheck}from"./vibe64RepositoryRealtime-C2WPn5do.js";import{V as VIBE64_AGENT_PROVIDERS,n as normalizeVibe64AgentSettings,v as vibe64AgentSettingParameters,d as displayVibe64AgentSetting,a as normalizeVibe64ConversationAttachments,b as defaultVibe64AgentSettings,c as VIBE64_DEFAULT_AGENT_PROVIDER_ID,u as useVibe64ConversationLog}from"./useVibe64ConversationLog-BjnpqM9K.js";import{V as VRadioGroup,a as VRadio}from"./VRadioGroup-BuRMvs7d.js";import{v as vibe64SessionInfoFacts}from"./vibe64SessionInfo-8kuxgD5r.js";import{v as vibe64SessionStatusLabel,a as vibe64SessionStatusColor,b as vibe64SessionRevision,i as isArchivedVibe64Session,c as vibe64SessionDisplayTitle}from"./vibe64SessionViewModel-C4e2otoM.js";import{_ as _sfc_main$n}from"./Vibe64DashboardShell-DMT8aOp1.js";import{v as vibe64SessionToolDashboardSuffix,V as VIBE64_SESSION_TOOL_DEFINITIONS,a as vibe64SessionToolIdFromRouteSegment}from"./vibe64SessionToolDefinitions-D5CgOIqa.js";import{v as vibe64SessionSourcePath,a as vibe64SessionDebugLog,b as vibe64SessionDebugError,c as vibe64SessionDebugDurationMs,d as vibe64SessionDebugSummary,e as enrichVibe64SessionForDisplay,f as blockingVibe64SessionPageError}from"./vibe64SessionPanelModel-DDaXjAJ_.js";import{V as VIBE64_CONNECTIONS_CHANGED_EVENT,a as VIBE64_PROJECT_CHANGED_EVENT,p as projectSettingsQueryKey,P as PROJECT_SETTINGS_ENDPOINT,b as PROJECT_SELECTION_ENDPOINT}from"./studioGateApi-BwBnOYBp.js";import{u as useVibe64SessionData}from"./useVibe64SessionData-BHLSmuPm.js";import{b as block0}from"./route-block-D_Po64gA.js";const _hoisted_1$k={class:"text-body-2 text-medium-emphasis mb-0"};const _sfc_main$m={__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$k,[_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"])}}};const Vibe64SessionArchiveDialog=_export_sfc(_sfc_main$m,[["__scopeId","data-v-6853144f"]]);const VIBE64_RESOURCE_RECOVERY_KEY=Symbol("vibe64-resource-recovery");const _hoisted_1$j={key:0,class:"vibe64-assistant-access","aria-label":"AI attention required"};const _hoisted_2$i={key:0,class:"vibe64-assistant-access__queue-error"};const _hoisted_3$h={class:"text-body-small"};const _hoisted_4$h={key:1,class:"vibe64-assistant-access__empty text-body-small text-medium-emphasis"};const _hoisted_5$e={key:2,class:"vibe64-assistant-access__items"};const _hoisted_6$c={class:"vibe64-assistant-access__message"};const _hoisted_7$a={class:"text-label-large"};const _hoisted_8$9={class:"text-body-medium"};const _hoisted_9$6={key:0,class:"text-label-small text-medium-emphasis"};const _hoisted_10$6={key:1,class:"text-label-small text-error"};const _hoisted_11$6={class:"vibe64-assistant-access__actions"};const _sfc_main$l={__name:"Vibe64AssistantAccessPanel",props:{accessError:{default:"",type:String},actionIsPending:{default:()=>false,type:Function},canManage:{default:false,type:Boolean},pendingAction:{default:null,type:Object},pendingSuggestions:{default:()=>[],type:Array},suggestionsError:{default:"",type:String}},emits:["approve","discard","reload","withdraw"],setup(__props){const props=__props;const queueOpen=ref(false);const suggestionsRelevant=computed(()=>Boolean(props.suggestionsError||props.pendingSuggestions.length));const queueButtonAriaLabel=computed(()=>{if(props.suggestionsError){return"Message requests need attention"}return`Open ${props.pendingSuggestions.length} pending message request${props.pendingSuggestions.length===1?"":"s"}`});return(_ctx,_cache)=>{return __props.accessError||suggestionsRelevant.value?(openBlock(),createElementBlock("section",_hoisted_1$j,[__props.accessError?(openBlock(),createBlock(VBtn,{key:0,"aria-label":__props.accessError,color:"warning",icon:unref(mdiAlertCircleOutline),size:"small",title:__props.accessError,type:"button",variant:"text",onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit("reload"))},null,8,["aria-label","icon","title"])):createCommentVNode("",true),suggestionsRelevant.value?(openBlock(),createBlock(VBadge,{key:1,color:__props.suggestionsError||__props.pendingSuggestions.length?"warning":void 0,content:__props.suggestionsError?"!":__props.pendingSuggestions.length,inline:""},{default:withCtx(()=>[createVNode(VBtn,{"aria-label":queueButtonAriaLabel.value,color:__props.suggestionsError||__props.pendingSuggestions.length?"warning":void 0,icon:__props.suggestionsError?unref(mdiAlertCircleOutline):unref(mdiMessageAlertOutline),size:"small",title:queueButtonAriaLabel.value,type:"button",variant:"text",onClick:_cache[1]||(_cache[1]=$event=>queueOpen.value=true)},null,8,["aria-label","color","icon","title"])]),_:1},8,["color","content"])):createCommentVNode("",true),createVNode(VDialog,{modelValue:queueOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>queueOpen.value=$event),"max-width":"40rem",scrollable:""},{default:withCtx(()=>[createVNode(VCard,{rounded:"xl"},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(__props.canManage?"Message requests awaiting review":"Your message requests"),1)]),_:1}),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(__props.canManage?"Approve a message before it enters the AI conversation.":"The owner decides whether these messages enter the AI conversation."),1)]),_:1}),createVNode(VCardText,{class:"vibe64-assistant-access__queue"},{default:withCtx(()=>[__props.suggestionsError?(openBlock(),createElementBlock("div",_hoisted_2$i,[createBaseVNode("span",_hoisted_3$h,toDisplayString(__props.suggestionsError),1),createVNode(VBtn,{size:"small",type:"button",variant:"text",onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit("reload"))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(" Try again ",-1)])]),_:1})])):!__props.pendingSuggestions.length?(openBlock(),createElementBlock("p",_hoisted_4$h," No pending message requests. ")):(openBlock(),createElementBlock("div",_hoisted_5$e,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.pendingSuggestions,suggestion=>{var _a,_b,_c;return openBlock(),createElementBlock("article",{key:suggestion.id,class:"vibe64-assistant-access__item"},[createBaseVNode("div",_hoisted_6$c,[createBaseVNode("strong",_hoisted_7$a,toDisplayString(((_a=suggestion.author)==null?void 0:_a.displayName)||((_b=suggestion.author)==null?void 0:_b.username)||"Member"),1),createBaseVNode("p",_hoisted_8$9,toDisplayString(suggestion.displayMessage||suggestion.message),1),((_c=suggestion.attachmentIds)==null?void 0:_c.length)?(openBlock(),createElementBlock("span",_hoisted_9$6,toDisplayString(suggestion.attachmentIds.length)+" attachment"+toDisplayString(suggestion.attachmentIds.length===1?"":"s")+" retained ",1)):createCommentVNode("",true),suggestion.lastDeliveryError?(openBlock(),createElementBlock("span",_hoisted_10$6," Delivery failed: "+toDisplayString(suggestion.lastDeliveryError),1)):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_11$6,[__props.canManage?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{"aria-busy":__props.actionIsPending("discard",suggestion.id)?"true":void 0,disabled:Boolean(__props.pendingAction),size:"small",type:"button",variant:"text",onClick:$event=>_ctx.$emit("discard",suggestion.id)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(" Discard ",-1)])]),_:1},8,["aria-busy","disabled","onClick"]),createVNode(VBtn,{"aria-busy":__props.actionIsPending("approve",suggestion.id)?"true":void 0,color:"primary",disabled:Boolean(__props.pendingAction),size:"small",type:"button",variant:"tonal",onClick:$event=>_ctx.$emit("approve",suggestion.id)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(" Approve ",-1)])]),_:1},8,["aria-busy","disabled","onClick"])],64)):(openBlock(),createBlock(VBtn,{key:1,"aria-busy":__props.actionIsPending("withdraw",suggestion.id)?"true":void 0,disabled:Boolean(__props.pendingAction),size:"small",type:"button",variant:"text",onClick:$event=>_ctx.$emit("withdraw",suggestion.id)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(" Withdraw ",-1)])]),_:1},8,["aria-busy","disabled","onClick"]))])])}),128))]))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{type:"button",variant:"text",onClick:_cache[3]||(_cache[3]=$event=>queueOpen.value=false)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode("Close",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])])):createCommentVNode("",true)}}};const Vibe64AssistantAccessPanel=_export_sfc(_sfc_main$l,[["__scopeId","data-v-f33290e9"]]);const _hoisted_1$i={class:"project-preview"};const _hoisted_2$h={key:0};const _hoisted_3$g={key:0};const _hoisted_4$g={class:"project-preview__warning-actions"};const _hoisted_5$d={key:1};const _hoisted_6$b={key:2,role:"status"};const _hoisted_7$9={key:1,class:"project-preview__output"};const _hoisted_8$8=["aria-busy"];const _hoisted_9$5={class:"project-onboarding__choices"};const _hoisted_10$5=["disabled","onClick"];const _hoisted_11$5={key:0};const _hoisted_12$5={class:"project-onboarding__choose"};const _hoisted_13$5={key:0};const _hoisted_14$4={class:"project-onboarding__actions"};const _hoisted_15$4={key:3,role:"status"};const _sfc_main$k={__name:"Vibe64ProjectOnboarding",props:{active:Boolean,archived:Boolean,busy:Boolean,canAsk:Boolean,sendMessage:{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(()=>["vibe64","project-onboarding",projectSlug.value,props.sessionId]),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:true},realtime:{events:["vibe64.project.changed"],matches:({payload={}}={})=>!payload.projectSlug||payload.projectSlug===projectSlug.value},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(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.ok)===true?resource.data.value:null});const state=computed(()=>{var _a,_b;return((_b=(_a=onboarding.value)==null?void 0:_a.inspection)==null?void 0:_b.state)||""});const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value)||resource.loadError.value);const showPreview=computed(()=>{var _a;if(props.archived||((_a=onboarding.value)==null?void 0:_a.available)===false||loadError.value)return true;return onboarding.value!==null&&state.value!=="new"&&state.value!=="adoption"});const pending=computed(()=>Boolean(applying.value||asking.value));const disabled=computed(()=>pending.value||props.busy||!enabled.value);const groups=computed(()=>{var _a;const grouped=new Map;for(const template of((_a=onboarding.value)==null?void 0:_a.templates)||[]){if(!grouped.has(template.technology))grouped.set(template.technology,[]);grouped.get(template.technology).push(template)}return[...grouped].map(([technology,templates])=>({technology,templates}))});const groupsHaveMultipleSources=computed(()=>{var _a;return new Set((((_a=onboarding.value)==null?void 0:_a.templates)||[]).map(({namespace})=>namespace)).size>1});function technologyLabel(technology){return technology==="jskit"?"JSKIT":technology}async function apply(template){if(disabled.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){var _a,_b;if(disabled.value||!props.canAsk)return;const requests={create:"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.",adopt:`Set up this existing project for guided editing. What this project is and what I want to run: ${purpose.value.trim()}. 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.`,inspect:"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.",repair:`Inspect and update this project's Genesis setup. The opening inspection reports: ${(_b=(_a=onboarding.value)==null?void 0:_a.inspection)==null?void 0:_b.diagnostics.map(({message})=>message).join(" ")}. Use the appropriate migration or repair, preserve source and Git history, and explain the specific change.`};asking.value=true;try{await props.sendMessage({message:requests[kind]})}finally{asking.value=false}}watch(()=>props.sessionId,()=>{purpose.value=""});watch(()=>props.busy,(busy,previous)=>{if(previous&&!busy&&enabled.value)void resource.reload()});return(_ctx,_cache)=>{return openBlock(),createElementBlock("div",_hoisted_1$i,[!props.archived&&(loadError.value||state.value==="attention")?(openBlock(),createBlock(VAlert,{key:0,class:"project-preview__warning",density:"compact",role:"status",type:"warning",variant:"tonal"},{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$h,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$g,"Use an installation with a newer Genesis version to update setup.")):createCommentVNode("",true)],64)),createBaseVNode("div",_hoisted_4$g,[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"]),!loadError.value&&onboarding.value.inspection.nextAction!=="update-genesis"?(openBlock(),createBlock(VBtn,{key:0,disabled:disabled.value||!props.canAsk,size:"small",variant:"text",onClick:_cache[1]||(_cache[1]=$event=>ask("repair"))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(" Ask AI to update setup ",-1)])]),_:1},8,["disabled"])):createCommentVNode("",true),props.busy?(openBlock(),createElementBlock("span",_hoisted_5$d,"The assistant is working; setup can still be rechecked.")):asking.value?(openBlock(),createElementBlock("span",_hoisted_6$b,"Sending to the conversation…")):createCommentVNode("",true)])]),_:1})):createCommentVNode("",true),showPreview.value?(openBlock(),createElementBlock("div",_hoisted_7$9,[renderSlot(_ctx.$slots,"default",{},void 0,true)])):(openBlock(),createElementBlock("section",{key:2,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[8]||(_cache[8]=createBaseVNode("p",{class:"project-onboarding__eyebrow"},"Your starting point",-1)),_cache[9]||(_cache[9]=createBaseVNode("h2",null,"What would you like to build with?",-1)),_cache[10]||(_cache[10]=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(technologyLabel(group.technology)),1),createBaseVNode("div",_hoisted_9$5,[(openBlock(true),createElementBlock(Fragment,null,renderList(group.templates,template=>{return openBlock(),createElementBlock("button",{key:template.id,type:"button",class:"project-onboarding__choice",disabled:disabled.value,onClick:$event=>apply(template)},[createBaseVNode("strong",null,toDisplayString(template.name),1),createBaseVNode("span",null,toDisplayString(template.description),1),groupsHaveMultipleSources.value?(openBlock(),createElementBlock("small",_hoisted_11$5,"Source: "+toDisplayString(template.namespace),1)):createCommentVNode("",true),createBaseVNode("span",_hoisted_12$5,toDisplayString(applying.value===template.id?"Preparing your starter…":"Use this starter →"),1)],8,_hoisted_10$5)}),128))])])}),128)),!groups.value.length?(openBlock(),createElementBlock("p",_hoisted_13$5,"No starters are configured for this installation yet.")):createCommentVNode("",true),createVNode(VBtn,{disabled:disabled.value||!props.canAsk,variant:"text",onClick:_cache[2]||(_cache[2]=$event=>ask("create"))},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode("Start through conversation",-1)])]),_:1},8,["disabled"])],64)):state.value==="adoption"?(openBlock(),createElementBlock(Fragment,{key:2},[_cache[13]||(_cache[13]=createBaseVNode("p",{class:"project-onboarding__eyebrow"},"Bring your project",-1)),_cache[14]||(_cache[14]=createBaseVNode("h2",null,"Set up this existing project",-1)),_cache[15]||(_cache[15]=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[3]||(_cache[3]=$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:disabled.value},null,8,["modelValue","disabled"]),createBaseVNode("div",_hoisted_14$4,[createVNode(VBtn,{disabled:disabled.value||!props.canAsk||!purpose.value.trim(),color:"primary",onClick:_cache[4]||(_cache[4]=$event=>ask("adopt"))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode("Set up project",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{disabled:disabled.value||!props.canAsk,variant:"text",onClick:_cache[5]||(_cache[5]=$event=>ask("inspect"))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode("Inspect it for me",-1)])]),_:1},8,["disabled"])])],64)):createCommentVNode("",true),pending.value?(openBlock(),createElementBlock("p",_hoisted_15$4,toDisplayString(applying.value?"Adding the starter to this session…":"Sending to the conversation…"),1)):createCommentVNode("",true)],8,_hoisted_8$8))])}}};const Vibe64ProjectOnboarding=_export_sfc(_sfc_main$k,[["__scopeId","data-v-eef43273"]]);const _hoisted_1$h={key:0,class:"codex-plan-usage__running","aria-hidden":"true"};const _hoisted_2$g={key:1,class:"codex-plan-usage__goal","aria-hidden":"true"};const _hoisted_3$f={class:"codex-plan-usage__details text-body-small"};const _hoisted_4$f={key:2,class:"text-body-small"};const _hoisted_5$c={key:1,class:"text-body-small"};const _hoisted_6$a={key:2,role:"alert",class:"text-error text-body-small"};const _hoisted_7$8={key:3};const _hoisted_8$7={key:4,class:"codex-plan-usage__details text-body-small"};const _sfc_main$j={__name:"Vibe64CodexPlanUsage",props:{active:Boolean,session:{type:Object,default:null},sessionsApiPath:{type:[Function,Object,String],default:""}},setup(__props){const props=__props;const projectSlug=useVibe64ProjectSlug();const sessionId=computed(()=>{var _a;return((_a=props.session)==null?void 0:_a.sessionId)||""});const sessionsPath=computed(()=>String(readRefOrGetterValue(props.sessionsApiPath)||"").trim());const enabled=computed(()=>{var _a,_b;return props.active&&Boolean(sessionId.value&&sessionsPath.value)&&((_b=(_a=props.session)==null?void 0:_a.assistantSelection)==null?void 0:_b.engineId)==="codex"});const path=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,"/agent-plan-usage"));const usage=useEndpointResource({enabled,path,queryKey:computed(()=>["vibe64-codex-plan-usage",projectSlug.value,sessionsPath.value,sessionId.value]),fallbackLoadError:"Codex allowance is unavailable.",queryOptions:{queryFn:({signal})=>getHttpWebClient().request(path.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(15e3)])}),retry:false,refetchOnMount:"always",refetchOnWindowFocus:true,refetchInterval:6e4,refetchIntervalInBackground:false}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&payload.reason==="codex-plan-usage",onEvent:()=>{var _a;if(!((_a=globalThis.document)==null?void 0:_a.hidden))void usage.reload()}});const goalPath=computed(()=>vibe64SessionPath(sessionsPath.value,sessionId.value,"/agent-goal"));const goalResource=useEndpointResource({enabled,path:goalPath,queryKey:computed(()=>["vibe64-codex-goal",projectSlug.value,sessionsPath.value,sessionId.value]),fallbackLoadError:"Codex goal is unavailable.",queryOptions:{queryFn:({signal})=>getHttpWebClient().request(goalPath.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(15e3)])}),retry:false,refetchOnMount:"always",refetchOnWindowFocus:true,refetchInterval:6e4,refetchIntervalInBackground:false}});useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===sessionId.value&&payload.reason==="codex-goal",onEvent:()=>{var _a;if(!((_a=globalThis.document)==null?void 0:_a.hidden))void goalResource.reload()}});const goal=computed(()=>{var _a;return((_a=goalResource.data.value)==null?void 0:_a.goal)||null});const goalStatusLabel=computed(()=>{var _a;return{active:"Goal active",paused:"Goal paused",blocked:"Goal blocked",usageLimited:"Goal waiting for allowance",budgetLimited:"Goal budget reached",complete:"Goal complete"}[(_a=goal.value)==null?void 0:_a.status]||"No goal"});const goalAvailable=computed(()=>{var _a;return!goalResource.loadError.value&&((_a=goalResource.data.value)==null?void 0:_a.status)==="available"&&goal.value});const goalRunning=computed(()=>goalAvailable.value&&goal.value.status==="active");const goalUnavailableMessage=computed(()=>{var _a;return goalResource.loadError.value||(((_a=goalResource.data.value)==null?void 0:_a.status)==="available"?"No goal in this conversation.":"Goal status is unavailable.")});const changingGoal=ref(false);const goalError=ref("");watch([sessionId,sessionsPath],()=>{goalError.value=""});async function changeGoal(action){if(changingGoal.value||!goalAvailable.value){return}const targetSession=sessionId.value;changingGoal.value=true;goalError.value="";try{const result=await getHttpWebClient().request(goalPath.value,{method:"POST",body:{action,threadId:goal.value.threadId,createdAt:goal.value.createdAt,objective:goal.value.objective}});if(result.ok===false){throw new Error(result.error||"Could not change the Codex goal.")}}catch(error){if(targetSession===sessionId.value){goalError.value=error.message||"Could not change the Codex goal."}}finally{changingGoal.value=false;if(targetSession===sessionId.value){await goalResource.reload()}}}const weekly=computed(()=>{var _a,_b;return((_b=(_a=usage.data.value)==null?void 0:_a.windows)==null?void 0:_b.find(window2=>window2.windowDurationMins===10080))||null});const available=computed(()=>{var _a;return!usage.loadError.value&&((_a=usage.data.value)==null?void 0:_a.status)==="available"&&weekly.value&&(!weekly.value.resetsAt||weekly.value.resetsAt*1e3>Date.now())});const summary=computed(()=>available.value?`${Math.floor(weekly.value.remainingPercent)}%`:"");const details=computed(()=>{if(!available.value)return"";const lines=[`Weekly Codex allowance remaining: ${summary.value}.`];if(weekly.value.resetsAt)lines.push(`Weekly resets ${new Date(weekly.value.resetsAt*1e3).toLocaleString()}.`);const shortTerm=usage.data.value.windows.find(window2=>window2.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()}.`)}lines.push("Shared across sessions.");return lines.join("\n")});const indicatorTitle=computed(()=>[details.value,goalAvailable.value?goalStatusLabel.value:""].filter(Boolean).join("\n"));const indicatorLabel=computed(()=>[available.value?`Weekly Codex allowance remaining: ${summary.value}`:"Codex goal",goalAvailable.value?goalStatusLabel.value:""].filter(Boolean).join(". "));return(_ctx,_cache)=>{return enabled.value&&(available.value||goalAvailable.value||goalError.value)?(openBlock(),createBlock(VMenu,{key:0,location:"top","close-on-content-click":false},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{class:"codex-plan-usage",size:"small",variant:"text",title:indicatorTitle.value,"aria-label":indicatorLabel.value}),{default:withCtx(()=>[createTextVNode(toDisplayString(summary.value||(!goalAvailable.value?"!":""))+" ",1),goalRunning.value?(openBlock(),createElementBlock("span",_hoisted_1$h)):goalAvailable.value&&!summary.value?(openBlock(),createElementBlock("span",_hoisted_2$g,toDisplayString(goal.value.status==="paused"?"Ⅱ":"○"),1)):createCommentVNode("",true)]),_:1},16,["title","aria-label"])]),default:withCtx(()=>[createVNode(VCard,{"max-width":"340",class:"pa-3"},{default:withCtx(()=>[goalAvailable.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode("strong",null,toDisplayString(goalStatusLabel.value),1),createBaseVNode("p",_hoisted_3$f,toDisplayString(goal.value.objective),1),goalRunning.value?(openBlock(),createBlock(VBtn,{key:0,size:"small",loading:changingGoal.value,disabled:changingGoal.value,onClick:_cache[0]||(_cache[0]=$event=>changeGoal("pause"))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode("Pause goal",-1)])]),_:1},8,["loading","disabled"])):["paused","blocked","usageLimited"].includes(goal.value.status)?(openBlock(),createBlock(VBtn,{key:1,size:"small",loading:changingGoal.value,disabled:changingGoal.value,onClick:_cache[1]||(_cache[1]=$event=>changeGoal("resume"))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode("Resume goal",-1)])]),_:1},8,["loading","disabled"])):createCommentVNode("",true),goal.value.status==="budgetLimited"?(openBlock(),createElementBlock("p",_hoisted_4$f,"The goal reached its token budget. Adjust the budget in Codex before resuming.")):createCommentVNode("",true)],64)):createCommentVNode("",true),!goalAvailable.value?(openBlock(),createElementBlock("p",_hoisted_5$c,toDisplayString(goalUnavailableMessage.value),1)):createCommentVNode("",true),goalError.value?(openBlock(),createElementBlock("p",_hoisted_6$a,toDisplayString(goalError.value),1)):createCommentVNode("",true),available.value?(openBlock(),createElementBlock("strong",_hoisted_7$8,"Codex plan allowance")):createCommentVNode("",true),available.value?(openBlock(),createElementBlock("p",_hoisted_8$7,toDisplayString(details.value),1)):createCommentVNode("",true),available.value?(openBlock(),createBlock(VBtn,{key:5,href:"https://chatgpt.com/codex/settings/usage",target:"_blank",rel:"noopener noreferrer",size:"small",variant:"text"},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode("Usage details",-1)])]),_:1})):createCommentVNode("",true),createVNode(VBtn,{size:"small",variant:"text",onClick:_cache[2]||(_cache[2]=$event=>{unref(usage).reload();unref(goalResource).reload()})},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode("Refresh",-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode("",true)}}};const Vibe64CodexPlanUsage=_export_sfc(_sfc_main$j,[["__scopeId","data-v-e4ffa086"]]);function value(input){return unref(input)}function normalizedText$2(input){return String(value(input)||"").trim()}function responseEngines(resource){const payload=resource.data.value;return Array.isArray(payload==null?void 0:payload.engines)?payload.engines:[]}function useVibe64AssistantCatalog({active,configuredOnly=false,engineId,modelProviderId,modelSearch,providerConnectedOnly=false,providerCursor,providerSearch}={}){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const apiPath=computed(()=>paths.api(VIBE64_ASSISTANTS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const enabled=computed(()=>Boolean(value(active)));const overview=useEndpointResource({enabled,fallbackLoadError:"AI choices could not be loaded.",path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,["overview",value(configuredOnly)?"configured":normalizedText$2(engineId)||"all",value(providerConnectedOnly)?"connected":"all"].join(":"))),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:false},readQuery:computed(()=>({...value(configuredOnly)?{configuredOnly:"true"}:{},...value(providerConnectedOnly)?{connectedOnly:"true"}:{},...!value(configuredOnly)&&normalizedText$2(engineId)?{engineId:normalizedText$2(engineId)}:{},limit:value(configuredOnly)?"100":"25"})),requestRecoveryLabel:"AI choices"});const providerPage=useEndpointResource({enabled:computed(()=>enabled.value&&!value(configuredOnly)&&normalizedText$2(engineId)==="opencode"),fallbackLoadError:"OpenCode providers could not be loaded.",path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,(normalizedText$2(providerSearch)||normalizedText$2(providerCursor)?["providers",value(providerConnectedOnly)?"connected":"all",normalizedText$2(providerSearch),normalizedText$2(providerCursor)]:["overview","opencode",value(providerConnectedOnly)?"connected":"all"]).join(":"))),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:false},readQuery:computed(()=>({...value(providerConnectedOnly)?{connectedOnly:"true"}:{},...normalizedText$2(providerCursor)?{cursor:normalizedText$2(providerCursor)}:{},engineId:"opencode",limit:"25",...normalizedText$2(providerSearch)?{search:normalizedText$2(providerSearch)}:{}})),requestRecoveryLabel:"OpenCode providers"});const modelPage=useEndpointResource({enabled:computed(()=>Boolean(enabled.value&&!value(configuredOnly)&&normalizedText$2(engineId)&&normalizedText$2(modelProviderId))),fallbackLoadError:"Provider models could not be loaded.",path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,["models",normalizedText$2(engineId),normalizedText$2(modelProviderId),value(providerConnectedOnly)?"connected":"all",normalizedText$2(modelSearch)].join(":"))),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:false},readQuery:computed(()=>({...value(providerConnectedOnly)?{connectedOnly:"true"}:{},engineId:normalizedText$2(engineId),limit:"100",modelProviderId:normalizedText$2(modelProviderId),...normalizedText$2(modelSearch)?{search:normalizedText$2(modelSearch)}:{}})),requestRecoveryLabel:"Provider models"});const overviewEngines=computed(()=>responseEngines(overview));const providerEngine=computed(()=>responseEngines(providerPage)[0]||null);const modelEngine=computed(()=>responseEngines(modelPage)[0]||null);const selectedOverviewEngine=computed(()=>overviewEngines.value.find(engine=>String((engine==null?void 0:engine.engineId)||"")===normalizedText$2(engineId))||null);const selectedEngine=computed(()=>modelEngine.value||providerEngine.value||selectedOverviewEngine.value);const selectedProvider=computed(()=>{var _a,_b,_c;const providerId=normalizedText$2(modelProviderId);const sources=[...((_a=modelEngine.value)==null?void 0:_a.modelProviders)||[],...((_b=providerEngine.value)==null?void 0:_b.modelProviders)||[],...((_c=selectedOverviewEngine.value)==null?void 0:_c.modelProviders)||[]];return sources.find(provider=>String((provider==null?void 0:provider.id)||"")===providerId)||null});async function reload(){const requests=[overview.reload()];if(!value(configuredOnly)){if(normalizedText$2(engineId)==="opencode"&&(normalizedText$2(providerSearch)||normalizedText$2(providerCursor))){requests.push(providerPage.reload())}if(normalizedText$2(modelProviderId)){requests.push(modelPage.reload())}}await Promise.all(requests)}return{apiPath,engines:overviewEngines,modelEngine,modelPage,overview,providerEngine,providerPage,reload,selectedEngine,selectedOverviewEngine,selectedProvider}}const _hoisted_1$g={class:"vibe64-session-assistant-menu__header"};const _hoisted_2$f={class:"text-body-small"};const _hoisted_3$e={key:1,"aria-label":"Loading available AIs",class:"vibe64-session-assistant-menu__loading"};const _hoisted_4$e={key:2,class:"vibe64-session-assistant-menu__state",role:"alert"};const _hoisted_5$b={key:3,class:"vibe64-session-assistant-menu__state",role:"status"};const _hoisted_6$9={key:4,class:"vibe64-session-assistant-menu__choices"};const _hoisted_7$7={key:0,class:"text-body-small",role:"status"};const _hoisted_8$6={key:1,"aria-label":"Provider",class:"vibe64-session-assistant-menu__section"};const _hoisted_9$4={class:"vibe64-session-assistant-menu__options"};const _hoisted_10$4={"aria-label":"Model",class:"vibe64-session-assistant-menu__section"};const _hoisted_11$4={key:1,class:"vibe64-session-assistant-menu__options"};const _hoisted_12$4={key:2,class:"vibe64-session-assistant-menu__empty"};const _hoisted_13$4={key:3,class:"vibe64-session-assistant-menu__locked-note"};const _hoisted_14$3={key:2,"aria-label":"Provider model access",class:"vibe64-session-assistant-menu__section"};const _hoisted_15$3={class:"vibe64-session-assistant-menu__access-summary"};const _hoisted_16$2={key:3,"aria-label":"Thinking",class:"vibe64-session-assistant-menu__section"};const _hoisted_17$2={class:"vibe64-session-assistant-menu__options"};const _hoisted_18$2={class:"vibe64-session-assistant-menu__actions"};const _sfc_main$i={__name:"Vibe64SessionAssistantMenu",props:{accessLoading:{default:false,type:Boolean},accessLabel:{default:"",type:String},canConfigure:{default:false,type:Boolean},changesDisabled:{default:false,type:Boolean},session:{default:null,type:Object},sessionsApiPath:{default:"",type:[Function,Object,String]}},setup(__props){const props=__props;const menuOpen=ref(false);const saving=ref(false);const modelAccessUpdating=ref(false);const unlockConfirmOpen=ref(false);const modelProviderId=ref("");const modelId=ref("");const agentId=ref("");const variantId=ref("");const emptyText=ref("");const assistantSelection=computed(()=>{var _a;return((_a=props.session)==null?void 0:_a.assistantSelection)||null});const engineId=computed(()=>{var _a;return String(((_a=assistantSelection.value)==null?void 0:_a.engineId)||"")});const accessLabel=computed(()=>String(props.accessLabel||"").trim());const catalogActive=computed(()=>{var _a;return Boolean(((_a=props.session)==null?void 0:_a.sessionId)&&engineId.value)});const catalog=useVibe64AssistantCatalog({active:catalogActive,engineId,modelProviderId,modelSearch:emptyText,providerConnectedOnly:true,providerCursor:emptyText,providerSearch:emptyText});const overviewLoading=catalog.overview.isInitialLoading;const providerLoading=computed(()=>engineId.value==="opencode"&&catalog.providerPage.isInitialLoading.value);const modelLoading=computed(()=>Boolean(modelProviderId.value)&&catalog.modelPage.isInitialLoading.value);const catalogLoading=computed(()=>overviewLoading.value||providerLoading.value||modelLoading.value);const catalogError=computed(()=>String(catalog.overview.loadError.value||catalog.providerPage.loadError.value||catalog.modelPage.loadError.value||""));const selectedOverviewEngine=catalog.selectedOverviewEngine;const providerRows=computed(()=>{var _a,_b;return(engineId.value==="opencode"?((_a=catalog.providerEngine.value)==null?void 0:_a.modelProviders)||[]:((_b=selectedOverviewEngine.value)==null?void 0:_b.modelProviders)||[]).filter(provider=>provider.connected===true)});const selectedProvider=computed(()=>providerRows.value.find(provider=>provider.id===modelProviderId.value)||null);const savedProviderUnavailable=computed(()=>{var _a;return Boolean(((_a=assistantSelection.value)==null?void 0:_a.modelProviderId)&&!providerRows.value.some(provider=>provider.id===assistantSelection.value.modelProviderId))});const modelProvider=computed(()=>{var _a,_b;return((_b=(_a=catalog.modelEngine.value)==null?void 0:_a.modelProviders)==null?void 0:_b.find(provider=>provider.id===modelProviderId.value&&provider.connected===true))||null});const modelRows=computed(()=>{var _a;return(((_a=modelProvider.value)==null?void 0:_a.models)||[]).filter(model=>model.status==="available")});const modelAccess=computed(()=>{var _a,_b;return((_a=modelProvider.value)==null?void 0:_a.modelAccess)||((_b=selectedProvider.value)==null?void 0:_b.modelAccess)||{}});const modelAccessUnlocked=computed(()=>modelAccess.value.mode==="all");const recommendedModel=computed(()=>modelRows.value.find(model=>model.id===modelAccess.value.recommendedModelId&&model.status==="available")||null);const canRestoreRecommendedModel=computed(()=>Boolean(recommendedModel.value&&modelId.value!==recommendedModel.value.id));const modelAccessPendingLabel=computed(()=>{var _a;return modelAccessUnlocked.value?`Returning to ${((_a=recommendedModel.value)==null?void 0:_a.label)||"the recommended model"}…`:"Unlocking paid models…"});const selectedModel=computed(()=>modelRows.value.find(model=>model.id===modelId.value)||null);const compatibleAgents=computed(()=>{var _a;return(((_a=catalog.modelEngine.value)==null?void 0:_a.agents)||[]).filter(agent=>["all","primary"].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===modelProviderId.value)&&(!agent.modelId||agent.modelId===modelId.value))});const selectedAgent=computed(()=>compatibleAgents.value.find(agent=>agent.id===agentId.value)||null);const variantRows=computed(()=>{var _a;return[{id:"",label:"Automatic"},...((_a=selectedModel.value)==null?void 0:_a.variants)||[]]});const selectedVariant=computed(()=>variantRows.value.find(variant=>variant.id===variantId.value)||null);const selectionRevision=computed(()=>{var _a;return String(((_a=catalog.modelEngine.value)==null?void 0:_a.revision)||"")});const draftSelection=computed(()=>({agentId:agentId.value,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:modelId.value,modelProviderId:modelProviderId.value,variantId:variantId.value}));const selectionChanged=computed(()=>{const current=assistantSelection.value||{};return["agentId","engineId","modelId","modelProviderId","variantId"].some(field=>String(current[field]||"")!==String(draftSelection.value[field]||""))});const canSave=computed(()=>Boolean(!props.changesDisabled&&selectionChanged.value&&selectedProvider.value&&selectedModel.value&&selectedAgent.value&&selectionRevision.value&&!catalogLoading.value&&!catalogError.value&&!modelAccessUpdating.value));const selectionSummary=computed(()=>{var _a,_b,_c,_d,_e,_f;const engineLabel=((_a=selectedOverviewEngine.value)==null?void 0:_a.label)||engineId.value;const choices=[...providerRows.value.length>1?[((_b=selectedProvider.value)==null?void 0:_b.label)||((_c=assistantSelection.value)==null?void 0:_c.modelProviderId)]:[],((_d=selectedModel.value)==null?void 0:_d.label)||((_e=assistantSelection.value)==null?void 0:_e.modelId),(_f=selectedVariant.value)==null?void 0:_f.label].filter(Boolean).join(" / ");return[engineLabel,choices].filter(Boolean).join(" · ")||"Choose an available AI"});const buttonTitle=computed(()=>`Choose AI${selectionSummary.value?`: ${selectionSummary.value}`:""}${!props.accessLoading&&accessLabel.value?` · ${accessLabel.value}`:""}${props.changesDisabled?" · Changes available after the current turn":""}`);const updateCommand=useCommand({access:"never",apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:"PATCH",path:String((context==null?void 0:context.path)||"")}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload({assistantSelection:(context==null?void 0:context.assistantSelection)||{}}),fallbackRunError:"AI session choices could not be updated.",messages:{error:"AI session choices could not be updated.",success:"AI session choices updated."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.sessions.assistant-selection.update",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PATCH"});const modelAccessCommand=useCommand({access:"never",apiSuffix:VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:"PATCH",path:String((context==null?void 0:context.path)||"")}),buildRawPayload:(_model,{context})=>({engineId:String((context==null?void 0:context.engineId)||""),modelProviderId:String((context==null?void 0:context.modelProviderId)||""),unlocked:(context==null?void 0:context.unlocked)===true}),fallbackRunError:"Provider model access could not be changed.",messages:{error:"Provider model access could not be changed.",success:"Provider model access updated."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.assistants.model-access.update",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PATCH"});function hydrateSelection(){const selection=assistantSelection.value||{};modelProviderId.value=String(selection.modelProviderId||"");modelId.value=String(selection.modelId||"");agentId.value=String(selection.agentId||"");variantId.value=String(selection.variantId||"")}function selectProvider(value2=""){if(props.changesDisabled)return;modelProviderId.value=String(value2||"");modelId.value="";agentId.value="";variantId.value=""}function selectModel(value2=""){if(props.changesDisabled)return;const id=String(value2||"");if(!modelRows.value.some(model=>model.id===id&&model.status==="available"))return;modelId.value=id;agentId.value="";variantId.value=""}function selectVariant(value2=""){if(props.changesDisabled)return;variantId.value=String(value2||"")}function selectionForModel(model=null){var _a;if(!model||model.status!=="available"||!selectionRevision.value){return null}const agents=(((_a=catalog.modelEngine.value)==null?void 0:_a.agents)||[]).filter(agent2=>["all","primary"].includes(agent2.mode)&&(!agent2.modelProviderId||agent2.modelProviderId===modelProviderId.value)&&(!agent2.modelId||agent2.modelId===model.id));const agent=agents.find(candidate=>{var _a2,_b;return candidate.id===((_b=(_a2=selectedOverviewEngine.value)==null?void 0:_a2.defaults)==null?void 0:_b.agentId)})||agents[0]||null;if(!agent){return null}const requestedVariantId=String(agent.variantId||"");const variants=Array.isArray(model.variants)?model.variants:[];return{agentId:agent.id,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:model.id,modelProviderId:modelProviderId.value,variantId:variants.some(variant=>variant.id===requestedVariantId)?requestedVariantId:""}}function openConnectionSettings(){if(props.changesDisabled)return;menuOpen.value=false;requestVibe64AccountConnectionsDialog({section:"ai"})}async function applySelection(selection,{closeMenu=true}={}){var _a;const sessionId=String(((_a=props.session)==null?void 0:_a.sessionId)||"").trim();const sessionsPath=String(readRefOrGetterValue(props.sessionsApiPath)||"").trim();if(props.changesDisabled||!selection||!sessionId||!sessionsPath||saving.value){return null}saving.value=true;try{const response=await updateCommand.run({assistantSelection:selection,path:vibe64SessionPath(sessionsPath,sessionId,"/assistant-selection")});if((response==null?void 0:response.ok)!==false){modelId.value=selection.modelId;agentId.value=selection.agentId;variantId.value=selection.variantId;if(closeMenu)menuOpen.value=false}return response}finally{saving.value=false}}async function save(){if(!canSave.value)return;await applySelection(draftSelection.value)}async function restoreRecommendedModel({closeMenu=true}={}){const selection=selectionForModel(recommendedModel.value);return applySelection(selection,{closeMenu})}function requestModelAccessChange(unlocked){if(props.changesDisabled||!props.canConfigure||modelAccessUpdating.value||saving.value)return;if(unlocked===true){unlockConfirmOpen.value=true;return}void updateModelAccess(false)}async function confirmUnlockModelAccess(){unlockConfirmOpen.value=false;await updateModelAccess(true)}async function updateModelAccess(unlocked){const providerId=String(modelProviderId.value||"").trim();const path=vibe64AssistantModelAccessPath(catalog.apiPath.value);if(!props.canConfigure||props.changesDisabled||!providerId||!path||!modelAccess.value.configurable||modelAccessUpdating.value){return null}modelAccessUpdating.value=true;try{const current=assistantSelection.value||{};if(unlocked!==true&&current.modelProviderId===providerId&&recommendedModel.value&&current.modelId!==recommendedModel.value.id){const recovery=await restoreRecommendedModel({closeMenu:false});if((recovery==null?void 0:recovery.ok)===false||!recovery)return recovery;await nextTick()}const response=await modelAccessCommand.run({engineId:engineId.value,modelProviderId:providerId,path,unlocked:unlocked===true});if((response==null?void 0:response.ok)!==false){await catalog.reload()}return response}finally{modelAccessUpdating.value=false}}watch(assistantSelection,hydrateSelection,{immediate:true});watch(menuOpen,open=>{if(open){hydrateSelection();void catalog.reload().catch(()=>null)}});watch([menuOpen,providerRows,overviewLoading,providerLoading],([open,providers,loadingOverview,loadingProviders])=>{var _a;if(!open||loadingOverview||loadingProviders||providers.some(provider=>provider.id===modelProviderId.value))return;const preferred=providers.find(provider=>provider.preferred===true);const defaultProvider=providers.find(provider=>{var _a2,_b;return provider.id===((_b=(_a2=selectedOverviewEngine.value)==null?void 0:_a2.defaults)==null?void 0:_b.modelProviderId)});selectProvider((preferred==null?void 0:preferred.id)||(defaultProvider==null?void 0:defaultProvider.id)||((_a=providers[0])==null?void 0:_a.id)||"")},{immediate:true});watch([menuOpen,modelProvider,modelRows],([open,provider,models])=>{var _a,_b,_c;if(!open||!provider){return}if(models.some(model=>model.id===modelId.value)){return}modelId.value=((_a=models.find(model=>model.id===provider.defaultModelId))==null?void 0:_a.id)||((_b=models.find(model=>{var _a2,_b2;return model.id===((_b2=(_a2=selectedOverviewEngine.value)==null?void 0:_a2.defaults)==null?void 0:_b2.modelId)}))==null?void 0:_b.id)||((_c=models[0])==null?void 0:_c.id)||""},{immediate:true});watch([compatibleAgents,modelId],([agents])=>{var _a,_b;if(!menuOpen.value){return}if(!agents.some(agent=>agent.id===agentId.value)){agentId.value=((_a=agents.find(agent=>{var _a2,_b2;return agent.id===((_b2=(_a2=selectedOverviewEngine.value)==null?void 0:_a2.defaults)==null?void 0:_b2.agentId)}))==null?void 0:_a.id)||((_b=agents[0])==null?void 0:_b.id)||""}},{immediate:true});watch([selectedModel,selectedAgent],([model,agent])=>{if(!menuOpen.value||!model){return}const fixedVariant=String((agent==null?void 0:agent.variantId)||"");if(fixedVariant){variantId.value=fixedVariant}else if(variantId.value&&!model.variants.some(variant=>variant.id===variantId.value)){variantId.value=""}},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>menuOpen.value=$event),"close-on-content-click":false,location:"top start",transition:"scale-transition"},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{"aria-label":"Choose AI",class:"vibe64-session-assistant-menu__button",density:"comfortable",icon:unref(mdiCogOutline),rounded:"lg",size:"small",title:buttonTitle.value,type:"button",variant:"tonal"}),null,16,["icon","title"])]),default:withCtx(()=>[createVNode(VSheet,{"aria-label":"AI session selector",border:"",class:"vibe64-session-assistant-menu",elevation:3,rounded:"xl"},{default:withCtx(()=>[createBaseVNode("header",_hoisted_1$g,[createVNode(VAvatar,{color:"primary",size:"36",variant:"tonal"},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiBrain),size:"20"},null,8,["icon"])]),_:1}),createBaseVNode("div",null,[_cache[5]||(_cache[5]=createBaseVNode("strong",{class:"text-title-small"},"AI controls",-1)),createBaseVNode("span",_hoisted_2$f,toDisplayString(selectionSummary.value),1)])]),__props.changesDisabled?(openBlock(),createBlock(VSheet,{key:0,class:"vibe64-session-assistant-menu__view-only",rounded:"lg",role:"status"},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiClockOutline),size:"18"},null,8,["icon"]),_cache[6]||(_cache[6]=createBaseVNode("span",null,"AI choices are view-only while the assistant is working.",-1))]),_:1})):createCommentVNode("",true),catalogLoading.value?(openBlock(),createElementBlock("div",_hoisted_3$e,[createVNode(VSkeletonLoader,{type:"text, chip@4, text, chip@4"})])):catalogError.value?(openBlock(),createElementBlock("div",_hoisted_4$e,[createBaseVNode("span",null,toDisplayString(catalogError.value),1),createVNode(VBtn,{size:"small",variant:"text",onClick:_cache[0]||(_cache[0]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode("Try again",-1)])]),_:1})])):!providerRows.value.length?(openBlock(),createElementBlock("div",_hoisted_5$b," No configured AIs are available for this session. ")):(openBlock(),createElementBlock("div",_hoisted_6$9,[savedProviderUnavailable.value?(openBlock(),createElementBlock("p",_hoisted_7$7," This session's saved AI connection is unavailable. Choose an available model and Apply to reconnect. ")):createCommentVNode("",true),providerRows.value.length>1?(openBlock(),createElementBlock("section",_hoisted_8$6,[_cache[8]||(_cache[8]=createBaseVNode("div",{class:"vibe64-session-assistant-menu__label"},"Provider",-1)),createBaseVNode("div",_hoisted_9$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(providerRows.value,provider=>{return openBlock(),createBlock(VBtn,{key:provider.id,active:modelProviderId.value===provider.id,"aria-pressed":modelProviderId.value===provider.id,class:"vibe64-session-assistant-menu__option",color:modelProviderId.value===provider.id?"primary":void 0,disabled:__props.changesDisabled,rounded:"lg",size:"small",type:"button",variant:modelProviderId.value===provider.id?"tonal":"outlined",onClick:$event=>selectProvider(provider.id)},{default:withCtx(()=>[createBaseVNode("span",null,toDisplayString(provider.label),1),modelProviderId.value===provider.id?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:"15"},null,8,["icon"])):createCommentVNode("",true)]),_:2},1032,["active","aria-pressed","color","disabled","variant","onClick"])}),128))])])):createCommentVNode("",true),createBaseVNode("section",_hoisted_10$4,[_cache[10]||(_cache[10]=createBaseVNode("div",{class:"vibe64-session-assistant-menu__label"},"Model",-1)),modelRows.value.length>6?(openBlock(),createBlock(VAutocomplete,{key:0,"auto-select-first":"exact","hide-details":"",items:modelRows.value,"item-title":"label","item-value":"id",label:"Choose model","model-value":modelId.value,"no-data-text":"No matching models",variant:"outlined","onUpdate:modelValue":selectModel},null,8,["items","model-value"])):modelRows.value.length?(openBlock(),createElementBlock("div",_hoisted_11$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(modelRows.value,model=>{return openBlock(),createBlock(VBtn,{key:model.id,active:modelId.value===model.id,"aria-label":model.label,"aria-pressed":modelId.value===model.id,class:"vibe64-session-assistant-menu__option",color:modelId.value===model.id?"primary":void 0,disabled:__props.changesDisabled,rounded:"lg",size:"small",title:__props.changesDisabled?"Wait for the active turn to finish before changing models.":model.label,type:"button",variant:modelId.value===model.id?"tonal":"outlined",onClick:$event=>selectModel(model.id)},{default:withCtx(()=>[createBaseVNode("span",null,toDisplayString(model.label),1),modelId.value===model.id?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:"15"},null,8,["icon"])):createCommentVNode("",true)]),_:2},1032,["active","aria-label","aria-pressed","color","disabled","title","variant","onClick"])}),128))])):(openBlock(),createElementBlock("span",_hoisted_12$4,"No available models.")),modelAccess.value.configurable&&!modelAccess.value.managementOnly&&!modelAccessUnlocked.value?(openBlock(),createElementBlock("small",_hoisted_13$4,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:"14"},null,8,["icon"]),_cache[9]||(_cache[9]=createTextVNode(" Additional paid models are hidden until they are enabled. ",-1))])):createCommentVNode("",true)]),modelAccess.value.configurable&&!modelAccess.value.managementOnly?(openBlock(),createElementBlock("section",_hoisted_14$3,[_cache[11]||(_cache[11]=createBaseVNode("div",{class:"vibe64-session-assistant-menu__label"},"Z.AI access",-1)),createVNode(VSheet,{class:normalizeClass(["vibe64-session-assistant-menu__access",{"vibe64-session-assistant-menu__access--paid":modelAccessUnlocked.value}]),rounded:"lg"},{default:withCtx(()=>{var _a;return[createBaseVNode("div",_hoisted_15$3,[createVNode(VAvatar,{color:modelAccessUnlocked.value?"warning":"success",size:"36",variant:"tonal"},{default:withCtx(()=>[createVNode(VIcon,{icon:modelAccessUnlocked.value?unref(mdiCreditCardOutline):unref(mdiShieldCheckOutline),size:"19"},null,8,["icon"])]),_:1},8,["color"]),createBaseVNode("span",null,[createBaseVNode("strong",null,toDisplayString(modelAccessUnlocked.value?"Paid models unlocked":"Free-only mode"),1),createBaseVNode("small",null,toDisplayString(modelAccessUnlocked.value?"Other Z.AI models can consume API credit.":`${((_a=recommendedModel.value)==null?void 0:_a.label)||"The recommended model"} stays available without paid credit.`),1)])]),createVNode(VSwitch,{color:"primary",disabled:__props.changesDisabled||!__props.canConfigure||modelAccessUpdating.value||saving.value,"hide-details":"",inset:"",label:modelAccessUpdating.value?modelAccessPendingLabel.value:modelAccess.value.label,"model-value":modelAccessUnlocked.value,onClick:_cache[1]||(_cache[1]=withModifiers($event=>requestModelAccessChange(!modelAccessUnlocked.value),["prevent"]))},null,8,["disabled","label","model-value"]),canRestoreRecommendedModel.value?(openBlock(),createBlock(VBtn,{key:0,block:"",color:"primary",disabled:__props.changesDisabled||saving.value||modelAccessUpdating.value,size:"small",type:"button",variant:"tonal",onClick:restoreRecommendedModel},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Switching to ${recommendedModel.value.label}…`:`Use ${recommendedModel.value.label}`),1)]),_:1},8,["disabled"])):createCommentVNode("",true)]}),_:1},8,["class"])])):createCommentVNode("",true),variantRows.value.length>1?(openBlock(),createElementBlock("section",_hoisted_16$2,[_cache[12]||(_cache[12]=createBaseVNode("div",{class:"vibe64-session-assistant-menu__label"},"Thinking",-1)),createBaseVNode("div",_hoisted_17$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(variantRows.value,variant=>{return openBlock(),createBlock(VBtn,{key:variant.id||"automatic",active:variantId.value===variant.id,"aria-pressed":variantId.value===variant.id,class:"vibe64-session-assistant-menu__option",color:variantId.value===variant.id?"primary":void 0,disabled:__props.changesDisabled,rounded:"lg",size:"small",type:"button",variant:variantId.value===variant.id?"tonal":"outlined",onClick:$event=>selectVariant(variant.id)},{default:withCtx(()=>[createBaseVNode("span",null,toDisplayString(variant.label),1),variantId.value===variant.id?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:"15"},null,8,["icon"])):createCommentVNode("",true)]),_:2},1032,["active","aria-pressed","color","disabled","variant","onClick"])}),128))])])):createCommentVNode("",true)])),createBaseVNode("footer",_hoisted_18$2,[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,disabled:__props.changesDisabled,size:"small",variant:"text",onClick:openConnectionSettings},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(" Configure more AIs ",-1)])]),_:1},8,["disabled"])):createCommentVNode("",true),_cache[14]||(_cache[14]=createBaseVNode("span",null,null,-1)),createVNode(VBtn,{color:"primary",disabled:!canSave.value||saving.value,size:"small",variant:"flat",onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?"Applying…":"Apply"),1)]),_:1},8,["disabled"])])]),_:1}),createVNode(VDialog,{modelValue:unlockConfirmOpen.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>unlockConfirmOpen.value=$event),"max-width":"31rem",persistent:""},{default:withCtx(()=>[createVNode(VCard,{rounded:"xl"},{default:withCtx(()=>[createVNode(VCardItem,{class:"vibe64-session-assistant-menu__confirm-header"},{prepend:withCtx(()=>[createVNode(VAvatar,{color:"warning",size:"44",variant:"tonal"},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiCreditCardOutline),size:"23"},null,8,["icon"])]),_:1})]),default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(modelAccess.value.label||"Unlock provider models")+"?",1)]),_:1}),createVNode(VCardSubtitle,{class:"vibe64-session-assistant-menu__confirm-subtitle"},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(" GLM-4.7 Flash stays available either way. ",-1)])]),_:1})]),_:1}),createVNode(VCardText,{class:"text-body-medium"},{default:withCtx(()=>[createTextVNode(toDisplayString(modelAccess.value.warning||"These models may consume paid provider credit."),1)]),_:1}),createVNode(VCardActions,{class:"vibe64-session-assistant-menu__confirm-actions"},{default:withCtx(()=>[createVNode(VBtn,{disabled:modelAccessUpdating.value,type:"button",variant:"text",onClick:_cache[2]||(_cache[2]=$event=>unlockConfirmOpen.value=false)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(" Keep free only ",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{color:"warning",disabled:modelAccessUpdating.value,type:"button",variant:"flat",onClick:confirmUnlockModelAccess},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(" Unlock paid models ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])}}};const Vibe64SessionAssistantMenu=_export_sfc(_sfc_main$i,[["__scopeId","data-v-61130837"]]);const _hoisted_1$f={class:"starred-files-menu__header"};const _hoisted_2$e={class:"starred-files-menu__list"};const _sfc_main$h={__name:"Vibe64StarredFilesMenu",props:{bookmarks:{type:Object,required:true}},emits:["open-file"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{xs:mobile}=useDisplay();const opened=ref(false);const query=ref("");const trigger=ref(null);const panel=ref(null);const searchField=ref(null);const matchingFiles=computed(()=>{const search=(query.value||"").trim().toLocaleLowerCase();return props.bookmarks.files.value.filter(file=>file.path.toLocaleLowerCase().includes(search))});let returnFocus=false;function focusSearch(){var _a;if(opened.value){(_a=searchField.value)==null?void 0:_a.focus()}}function dismiss(){returnFocus=true;opened.value=false}function restoreTriggerFocus(){var _a,_b;if(returnFocus){(_b=(_a=trigger.value)==null?void 0:_a.$el)==null?void 0:_b.focus()}returnFocus=false}function onOpenChange(value2){var _a,_b,_c;if(value2){query.value="";void props.bookmarks.refresh()}else if(document.activeElement===((_a=trigger.value)==null?void 0:_a.$el)||((_c=(_b=panel.value)==null?void 0:_b.$el)==null?void 0:_c.contains(document.activeElement))){returnFocus=true}}function openFile(filePath){returnFocus=false;opened.value=false;emit("open-file",{path:filePath})}function openFirstMatch(){const file=matchingFiles.value.find(entry=>entry.available);if(file){openFile(file.path)}}return(_ctx,_cache)=>{return openBlock(),createBlock(resolveDynamicComponent(unref(mobile)?unref(VBottomSheet):unref(VMenu)),{modelValue:opened.value,"onUpdate:modelValue":[_cache[1]||(_cache[1]=$event=>opened.value=$event),onOpenChange],"close-on-content-click":false,"content-props":{role:"dialog","aria-label":"Starred files"},location:"top start","max-width":"400",onAfterEnter:focusSearch,onAfterLeave:restoreTriggerFocus},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps({ref_key:"trigger",ref:trigger},activatorProps,{"aria-haspopup":"dialog","aria-label":`Starred files (${__props.bookmarks.files.value.length})`,"prepend-icon":unref(mdiStarOutline),size:"small",title:"Your starred files",variant:"text"}),{default:withCtx(()=>[createTextVNode(toDisplayString(__props.bookmarks.files.value.length),1)]),_:1},16,["aria-label","prepend-icon"])]),default:withCtx(()=>[createVNode(VCard,{ref_key:"panel",ref:panel,class:"starred-files-menu",rounded:"lg",onKeydown:withKeys(withModifiers(dismiss,["stop","prevent"]),["esc"])},{default:withCtx(()=>[createBaseVNode("div",_hoisted_1$f,[createVNode(VTextField,{ref_key:"searchField",ref:searchField,modelValue:query.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>query.value=$event),"aria-label":"Find a starred file",autofocus:"",clearable:"",density:"compact","hide-details":"",placeholder:"Search","prepend-inner-icon":unref(mdiMagnify),variant:"outlined",onKeydown:withKeys(withModifiers(openFirstMatch,["prevent"]),["enter"])},null,8,["modelValue","prepend-inner-icon","onKeydown"]),createVNode(VBtn,{"aria-label":"Close starred files",icon:unref(mdiClose),size:"small",variant:"text",onClick:dismiss},null,8,["icon"])]),createBaseVNode("div",_hoisted_2$e,[createVNode(Vibe64StarredFilesList,{bookmarks:__props.bookmarks,files:matchingFiles.value,onOpenFile:openFile},null,8,["bookmarks","files"])])]),_:1},8,["onKeydown"])]),_:1},40,["modelValue"])}}};const Vibe64StarredFilesMenu=_export_sfc(_sfc_main$h,[["__scopeId","data-v-5be6fa61"]]);function useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath}={}){const files=ref([]);const loading=ref(false);const error=ref("");const pendingPaths=ref([]);const feedback=useUiFeedback({source:"vibe64.source-editor.stars"});const paths=computed(()=>files.value.map(file=>file.path));const endpoint=computed(()=>{const id=readRefOrGetterValue(sessionId);const base=readRefOrGetterValue(sessionsApiPath);return id&&base?vibe64SourceEditorStarsPath(base,id):""});let generation=0;let readSequence=0;let needsRefresh=false;onScopeDispose(()=>{generation+=1});async function request(url,options){const response=await getHttpWebClient().request(url,options);if((response==null?void 0:response.ok)===false){throw new Error(vibe64ApiResponseError(response,"Starred files could not load."))}return response}async function refresh(){if(!endpoint.value||pendingPaths.value.length){return}const sequence=++readSequence;const context=generation;loading.value=true;error.value="";try{const response=await request(endpoint.value);if(context===generation&&sequence===readSequence){files.value=response.files||[];needsRefresh=false}}catch(cause){if(context===generation&&sequence===readSequence){error.value=cause.message||"Starred files could not load."}}finally{if(context===generation&&sequence===readSequence){loading.value=false}}}async function toggle(filePath){if(!endpoint.value||!filePath||pendingPaths.value.includes(filePath)){return}const context=generation;const previousIndex=files.value.findIndex(file=>file.path===filePath);const previous=files.value[previousIndex];const starred=!previous;readSequence+=1;loading.value=false;pendingPaths.value=[...pendingPaths.value,filePath];files.value=starred?[...files.value,{path:filePath,available:true}]:files.value.filter(file=>file.path!==filePath);try{await request(endpoint.value,{method:"POST",body:{path:filePath,starred}});if(context===generation){error.value=""}}catch(cause){if(context!==generation){return}files.value=files.value.filter(file=>file.path!==filePath);if(previous){files.value.splice(previousIndex,0,previous)}needsRefresh=true;feedback.error(cause,"The star could not be saved.")}finally{if(context===generation){pendingPaths.value=pendingPaths.value.filter(value2=>value2!==filePath);if(needsRefresh&&pendingPaths.value.length===0){await refresh()}}}}watch([endpoint,()=>readRefOrGetterValue(projectSlug)],()=>{generation+=1;needsRefresh=false;files.value=[];pendingPaths.value=[];error.value="";loading.value=false;void refresh()},{immediate:true});return{error,files,loading,paths,pendingPaths,refresh,toggle}}const VIBE64_PROMPT_HINT_LABEL_MAX_CHARACTERS=24;const VIBE64_PROMPT_HINT_PROMPT_MAX_CHARACTERS=108;function normalizedPromptHintDraft(value2=""){return Array.from(String(value2??"").replace(/\r\n?/gu,"\n").trim()).slice(-4e3).join("")}function normalizedPromptHintSuggestion(suggestion={}){if(!suggestion||typeof suggestion!=="object"||Array.isArray(suggestion)||Object.keys(suggestion).length!==2||!Object.hasOwn(suggestion,"label")||!Object.hasOwn(suggestion,"prompt")||typeof suggestion.label!=="string"||typeof suggestion.prompt!=="string"||[suggestion.label,suggestion.prompt].some(text=>Array.from(text).some(character=>{const codePoint=character.codePointAt(0);return codePoint<=31||codePoint===127}))){return null}const label=suggestion.label.trim().replace(/[\t ]+/gu," ");const prompt=suggestion.prompt.trim().replace(/[\t ]+/gu," ");const labelWordCount=label?label.split(/\s+/u).length:0;return label&&prompt&&Array.from(label).length<=VIBE64_PROMPT_HINT_LABEL_MAX_CHARACTERS&&Array.from(prompt).length<=VIBE64_PROMPT_HINT_PROMPT_MAX_CHARACTERS&&labelWordCount>=2&&labelWordCount<=4?{label,prompt}:null}function normalizedPromptHintSuggestions(value2=[]){if(!Array.isArray(value2)||value2.length!==3){return[]}const suggestions=value2.map(normalizedPromptHintSuggestion).filter(Boolean);return suggestions.length===3&&new Set(suggestions.map(({label})=>label.toLocaleLowerCase())).size===3&&new Set(suggestions.map(({prompt})=>prompt.toLocaleLowerCase())).size===3?suggestions:[]}const VIBE64_SESSION_PRESENCE_CHANGED_EVENT="vibe64.session.presence.changed";const VIBE64_SESSION_PRESENCE_DEBOUNCE_MS=250;const VIBE64_SESSION_PRESENCE_HEARTBEAT_MS=1e3;const VIBE64_SESSION_PRESENCE_IDLE_MS=3e3;const _hoisted_1$e=["id"];const _hoisted_2$d={key:0,"aria-hidden":"true",class:"vibe64-prompt-hints__assistant-status"};const _hoisted_3$d={key:0,"aria-hidden":"true",class:"vibe64-prompt-hints__loading"};const _hoisted_4$d={key:1,class:"vibe64-prompt-hints__options","aria-label":"Suggested prompts","aria-orientation":"horizontal",role:"group"};const _sfc_main$g={__name:"Vibe64PromptHints",props:{assistantLabel:{default:"",type:String},loading:{default:false,type:Boolean},statusId:{default:"",type:String},suggestions:{default:()=>[],type:Array}},emits:["dismiss","focusout","preview","select"],setup(__props){const props=__props;const mode=computed(()=>{if(String(props.assistantLabel||"").trim()){return"assistant"}if(props.loading){return"loading"}return props.suggestions.length===3?"ready":"hidden"});const statusAnnouncement=computed(()=>{if(mode.value==="assistant"){return String(props.assistantLabel||"").trim()}if(mode.value==="loading"){return"Thinking of a few ideas."}if(mode.value==="ready"){return"Three suggested prompts are available before the message controls."}return""});return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",{class:normalizeClass(["vibe64-prompt-hints",`vibe64-prompt-hints--${mode.value}`]),"data-vibe64-prompt-hints":"",onFocusout:_cache[3]||(_cache[3]=$event=>_ctx.$emit("focusout",$event)),onKeydown:_cache[4]||(_cache[4]=withKeys(withModifiers($event=>_ctx.$emit("dismiss"),["stop","prevent"]),["esc"]))},[createBaseVNode("span",{id:__props.statusId||void 0,"aria-atomic":"true","aria-live":"polite",class:"vibe64-prompt-hints__sr-status",role:"status"},toDisplayString(statusAnnouncement.value),9,_hoisted_1$e),mode.value==="assistant"?(openBlock(),createElementBlock("div",_hoisted_2$d,[_cache[5]||(_cache[5]=createBaseVNode("span",{class:"vibe64-prompt-hints__assistant-mark"},null,-1)),createBaseVNode("span",null,toDisplayString(__props.assistantLabel),1)])):mode.value!=="hidden"?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VIcon,{"aria-hidden":"true",class:"vibe64-prompt-hints__marker",icon:unref(mdiLightbulbOnOutline),size:"16"},null,8,["icon"]),mode.value==="loading"?(openBlock(),createElementBlock("div",_hoisted_3$d,[..._cache[6]||(_cache[6]=[createBaseVNode("span",null,"Thinking of a few ideas",-1)])])):(openBlock(),createElementBlock("div",_hoisted_4$d,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.suggestions,suggestion=>{return openBlock(),createBlock(VBtn,{key:suggestion.prompt,"aria-label":`Use suggestion: ${suggestion.prompt}`,class:"vibe64-prompt-hints__option",rounded:"xl",size:"small",type:"button",variant:"tonal",onBlur:_cache[0]||(_cache[0]=$event=>_ctx.$emit("preview",null)),onMousedown:_cache[1]||(_cache[1]=withModifiers(()=>{},["prevent"])),onFocus:$event=>_ctx.$emit("preview",suggestion),onMouseenter:$event=>_ctx.$emit("preview",suggestion),onMouseleave:_cache[2]||(_cache[2]=$event=>_ctx.$emit("preview",null)),onClick:$event=>_ctx.$emit("select",suggestion)},{default:withCtx(()=>[createBaseVNode("span",null,toDisplayString(suggestion.label),1)]),_:2},1032,["aria-label","onFocus","onMouseenter","onClick"])}),128))]))],64)):createCommentVNode("",true)],34)}}};const Vibe64PromptHints=_export_sfc(_sfc_main$g,[["__scopeId","data-v-c496ce18"]]);const _hoisted_1$d={key:0,class:"vibe64-temporary-action-terminal"};const _hoisted_2$c={class:"vibe64-temporary-action-terminal__title"};const _hoisted_3$c={class:"vibe64-temporary-action-terminal__line"};const _hoisted_4$c={class:"vibe64-temporary-action-terminal__actions"};const _sfc_main$f={__name:"Vibe64TemporaryActionTerminal",props:{active:{default:false,type:Boolean},dismissed:{default:false,type:Boolean},error:{default:"",type:String},errorTitle:{default:"Action needs attention",type:String},height:{default:"clamp(8rem, 22vh, 14rem)",type:String},operationKey:{default:"",type:String},output:{default:"",type:String},retryable:{default:false,type:Boolean},stage:{default:"",type:String},starting:{default:false,type:Boolean},status:{default:"",type:String},subtitle:{default:"",type:String},title:{default:"Action",type:String}},emits:["copy","dismiss","retry"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const detailsOpen=ref(false);const detailsViewed=ref(false);const canDismiss=computed(()=>!props.active);const forwardedSlots=["actions-after","actions-before","error-actions","output","overlay"];const visible=computed(()=>!props.dismissed&&Boolean(props.active||props.error||detailsViewed.value));const summaryText=computed(()=>{const outputLine=terminalLastMeaningfulLine(props.output);if(props.error){return props.error}if(props.stage&&outputLine&&props.stage!==outputLine){return`${props.stage} · ${outputLine}`}return props.stage||outputLine||"Working…"});function openDetails(){detailsViewed.value=true;detailsOpen.value=true}function closeDetails(){detailsOpen.value=false}function dismiss(){closeDetails();detailsViewed.value=false;emit("dismiss")}watch(()=>props.operationKey,()=>{detailsOpen.value=false;detailsViewed.value=false},{immediate:true});watch(()=>props.active,(active,previousActive)=>{if(active&&!previousActive){detailsOpen.value=false;detailsViewed.value=false}},{immediate:true});return(_ctx,_cache)=>{return visible.value&&!detailsOpen.value?(openBlock(),createElementBlock("div",_hoisted_1$d,[createVNode(VSheet,{class:normalizeClass(["vibe64-temporary-action-terminal__summary",{"vibe64-temporary-action-terminal__summary--error":Boolean(__props.error)}]),rounded:"lg",color:"surface-variant",role:__props.error?"alert":"status"},{default:withCtx(()=>[createBaseVNode("strong",_hoisted_2$c,toDisplayString(__props.title),1),__props.status?(openBlock(),createBlock(VChip,{key:0,class:"vibe64-temporary-action-terminal__status",size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode("",true),createBaseVNode("span",_hoisted_3$c,toDisplayString(summaryText.value),1),createBaseVNode("div",_hoisted_4$c,[__props.error?renderSlot(_ctx.$slots,"error-actions",{},void 0,true,0):createCommentVNode("",true),__props.error&&__props.retryable?(openBlock(),createBlock(VBtn,{key:1,"aria-busy":__props.starting?"true":void 0,"aria-label":`Retry ${__props.title}`,disabled:__props.starting,icon:unref(mdiRefresh),size:"small",title:`Retry ${__props.title}`,variant:"text",onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit("retry"))},null,8,["aria-busy","aria-label","disabled","icon","title"])):createCommentVNode("",true),createVNode(VBtn,{"aria-label":`Show ${__props.title} details`,color:__props.error?"error":void 0,icon:__props.error?unref(mdiAlertCircleOutline):unref(mdiConsoleLine),size:"small",title:`Show ${__props.title} details`,variant:"text",onClick:openDetails},null,8,["aria-label","color","icon","title"]),canDismiss.value?(openBlock(),createBlock(VBtn,{key:2,"aria-label":`Dismiss ${__props.title}`,icon:unref(mdiClose),size:"small",title:`Dismiss ${__props.title}`,variant:"text",onClick:dismiss},null,8,["aria-label","icon","title"])):createCommentVNode("",true)])]),_:3},8,["class","role"])])):visible.value?(openBlock(),createBlock(Vibe64TerminalSurface,{key:1,"body-mode":"log","close-label":"Dismiss",collapsible:"",error:__props.error,expanded:"","error-title":__props.errorTitle,height:__props.height,"mobile-takeover":"","open-error-details":Boolean(__props.error),output:__props.output,retryable:__props.retryable,"show-close":canDismiss.value,"show-copy":Boolean(__props.output),"show-interrupt":false,stage:__props.stage,starting:__props.starting,status:__props.status,subtitle:__props.subtitle,title:__props.title,onClose:dismiss,onCopy:_cache[1]||(_cache[1]=$event=>_ctx.$emit("copy")),onRetry:_cache[2]||(_cache[2]=$event=>_ctx.$emit("retry")),onToggleExpanded:closeDetails},createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1032,["error","error-title","height","open-error-details","output","retryable","show-close","show-copy","stage","starting","status","subtitle","title"])):createCommentVNode("",true)}}};const Vibe64TemporaryActionTerminal=_export_sfc(_sfc_main$f,[["__scopeId","data-v-cc5c0372"]]);const _hoisted_1$c={key:0,"aria-label":"Loading connected AI choices",class:"vibe64-assistant-dialog__choices"};const _hoisted_2$b={class:"vibe64-assistant-dialog__error"};const _hoisted_3$b={key:2,class:"vibe64-assistant-dialog__empty"};const _hoisted_4$b=["for"];const _hoisted_5$a={class:"vibe64-assistant-dialog__choice-icon"};const _hoisted_6$8={class:"vibe64-assistant-dialog__choice-copy"};const _hoisted_7$6={class:"vibe64-assistant-dialog__choice-heading"};const _sfc_main$e={__name:"Vibe64AssistantSessionDialog",props:{modelValue:{default:false,type:Boolean},toolbar:{default:()=>({}),type:Object}},emits:["created","update:model-value"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const selectedChoiceId=ref("");const submitButton=ref(null);let catalogReloadId=0;const catalog=useVibe64AssistantCatalog({active:true,configuredOnly:true});const loading=computed(()=>Boolean(catalog.overview.isInitialLoading.value||catalog.overview.isLoading.value));const loadError=computed(()=>String(catalog.overview.loadError.value||""));const submitting=computed(()=>props.toolbar.createSessionRunning===true);function availableModel(provider={}){const models=Array.isArray(provider.models)?provider.models:[];return models.find(model=>model.id===provider.defaultModelId&&model.status==="available")||models.find(model=>model.status==="available")||null}function compatibleAgent(engine={},provider={},model={}){const agents=Array.isArray(engine.agents)?engine.agents:[];return agents.find(agent=>{var _a;return agent.id===((_a=engine.defaults)==null?void 0:_a.agentId)&&(!agent.modelProviderId||agent.modelProviderId===provider.id)&&(!agent.modelId||agent.modelId===model.id)})||agents.find(agent=>["all","primary"].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===provider.id)&&(!agent.modelId||agent.modelId===model.id))||null}function configuredChoice(engine={},provider={}){var _a;if(provider.connected!==true){return null}const model=availableModel(provider);const agent=model?compatibleAgent(engine,provider,model):null;if(!model||!agent||!engine.revision){return null}const requestedVariantId=String(agent.variantId||((_a=engine.defaults)==null?void 0:_a.variantId)||"");const variants=Array.isArray(model.variants)?model.variants:[];const variantId=variants.some(variant=>variant.id===requestedVariantId)?requestedVariantId:"";const id=`${engine.engineId}:${provider.id}`;return{description:engine.engineId==="codex"?`OpenAI account · ${model.label}`:[provider.label,provider.description].filter(Boolean).join(" · "),domId:id.replace(/[^a-z0-9_-]+/giu,"-"),engineId:engine.engineId,id,label:engine.engineId==="codex"?"Codex":model.label,preferred:provider.preferred===true,selection:{agentId:agent.id,catalogRevision:engine.revision,engineId:engine.engineId,modelId:model.id,modelProviderId:provider.id,variantId}}}const choices=computed(()=>catalog.engines.value.flatMap(engine=>(Array.isArray(engine.modelProviders)?engine.modelProviders:[]).map(provider=>configuredChoice(engine,provider)).filter(Boolean)).sort((left,right)=>Number(right.preferred)-Number(left.preferred)));const selectedChoice=computed(()=>choices.value.find(choice=>choice.id===selectedChoiceId.value)||null);function defaultChoiceId(available=choices.value){var _a,_b;return((_a=available.find(choice=>choice.preferred))==null?void 0:_a.id)||((_b=available[0])==null?void 0:_b.id)||""}function openConnectionSettings(){requestVibe64AccountConnectionsDialog({section:"ai"})}function close(){if(!submitting.value){emit("update:model-value",false)}}async function submit(){var _a,_b;if(!selectedChoice.value||submitting.value){return}let response;try{response=await((_b=(_a=props.toolbar).createSession)==null?void 0:_b.call(_a,selectedChoice.value.selection))}catch{return}if((response==null?void 0:response.ok)!==false&&(response==null?void 0:response.sessionId)){emit("created",response);emit("update:model-value",false)}}watch(choices,available=>{if(!available.some(choice=>choice.id===selectedChoiceId.value)||!props.modelValue){selectedChoiceId.value=defaultChoiceId(available)}},{immediate:true});watch(()=>props.modelValue,async open=>{const reloadId=++catalogReloadId;if(!open)return;selectedChoiceId.value=defaultChoiceId();try{await catalog.overview.reload()}catch{}if(reloadId===catalogReloadId&&props.modelValue){selectedChoiceId.value=defaultChoiceId()}},{immediate:true});watch(submitting,async(running,wasRunning)=>{var _a;if(running||!wasRunning||!props.modelValue){return}await nextTick();const target=((_a=submitButton.value)==null?void 0:_a.$el)||submitButton.value;if((target==null?void 0:target.isConnected)===true&&typeof target.focus==="function"){target.focus({preventScroll:true})}});return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":"38rem","onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>emit("update:model-value",$event))},{default:withCtx(()=>[createVNode(VCard,{class:"vibe64-assistant-dialog",rounded:"xl"},{default:withCtx(()=>[createVNode(VCardTitle,{class:"vibe64-assistant-dialog__title"},{default:withCtx(()=>[_cache[3]||(_cache[3]=createBaseVNode("span",{class:"vibe64-assistant-dialog__title-copy"},[createBaseVNode("strong",{class:"text-title-large"},"Start an AI session"),createBaseVNode("small",{class:"text-body-small"},"Your preferred AI is selected automatically.")],-1)),createVNode(VBtn,{"aria-label":"Close AI session dialog",disabled:submitting.value,icon:unref(mdiClose),title:"Close",variant:"text",onClick:close},null,8,["disabled","icon"])]),_:1}),createVNode(VCardText,{class:"vibe64-assistant-dialog__body"},{default:withCtx(()=>[loading.value?(openBlock(),createElementBlock("div",_hoisted_1$c,[(openBlock(),createElementBlock(Fragment,null,renderList(3,index=>{return createBaseVNode("div",{key:index,class:"vibe64-assistant-dialog__choice-skeleton"},[createVNode(VSkeletonLoader,{type:"avatar"}),createVNode(VSkeletonLoader,{type:"list-item-two-line"})])}),64))])):loadError.value&&choices.value.length===0?(openBlock(),createBlock(VAlert,{key:1,color:"error",role:"alert",variant:"tonal"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_2$b,[createBaseVNode("span",null,toDisplayString(loadError.value),1),createVNode(VBtn,{size:"small",variant:"tonal",onClick:_cache[0]||(_cache[0]=$event=>unref(catalog).overview.reload())},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(" Try again ",-1)])]),_:1})])]),_:1})):choices.value.length===0?(openBlock(),createElementBlock("div",_hoisted_3$b,[createVNode(VIcon,{icon:unref(mdiKeyOutline),color:"primary",size:"32"},null,8,["icon"]),_cache[6]||(_cache[6]=createBaseVNode("strong",null,"No AI is connected",-1)),_cache[7]||(_cache[7]=createBaseVNode("span",null,"Connect an AI account, then come back to start a session.",-1)),createVNode(VBtn,{color:"primary",variant:"tonal",onClick:openConnectionSettings},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(" Manage AI accounts ",-1)])]),_:1})])):(openBlock(),createBlock(VRadioGroup,{key:3,modelValue:selectedChoiceId.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>selectedChoiceId.value=$event),"aria-label":"Connected AI",class:"vibe64-assistant-dialog__choices","hide-details":""},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(choices.value,choice=>{return openBlock(),createElementBlock("label",{key:choice.id,class:normalizeClass(["vibe64-assistant-dialog__choice",{"vibe64-assistant-dialog__choice--selected":selectedChoiceId.value===choice.id}]),for:`vibe64-assistant-${choice.domId}`},[createBaseVNode("span",_hoisted_5$a,[createVNode(VIcon,{icon:choice.engineId==="codex"?unref(mdiCreationOutline):unref(mdiCodeBraces),size:"22"},null,8,["icon"])]),createBaseVNode("span",_hoisted_6$8,[createBaseVNode("span",_hoisted_7$6,[createBaseVNode("strong",null,toDisplayString(choice.label),1),choice.preferred?(openBlock(),createBlock(VChip,{key:0,color:"success",size:"x-small",variant:"tonal"},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(" Recommended ",-1)])]),_:1})):createCommentVNode("",true)]),createBaseVNode("small",null,toDisplayString(choice.description),1)]),createVNode(VRadio,{id:`vibe64-assistant-${choice.domId}`,"aria-label":choice.label,color:"primary",value:choice.id},null,8,["id","aria-label","value"])],10,_hoisted_4$b)}),128))]),_:1},8,["modelValue"]))]),_:1}),createVNode(VCardActions,{class:"vibe64-assistant-dialog__actions"},{default:withCtx(()=>[createVNode(VBtn,{disabled:submitting.value,variant:"text",onClick:close},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode("Cancel",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{ref_key:"submitButton",ref:submitButton,color:"primary",disabled:!selectedChoice.value||submitting.value,variant:"flat",onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(submitting.value?"Creating session…":"Create session"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["model-value"])}}};const Vibe64AssistantSessionDialog=_export_sfc(_sfc_main$e,[["__scopeId","data-v-501fcad7"]]);const CREATED_SESSION_FOCUS_TIMEOUT_MS=2e3;async function focusCreatedVibe64SessionTab(sessionId=""){const normalizedSessionId=String(sessionId||"").trim();if(!normalizedSessionId||typeof document==="undefined"){return false}const deadline=Date.now()+CREATED_SESSION_FOCUS_TIMEOUT_MS;while(Date.now()<deadline){const dialogVisible=[...document.querySelectorAll(".vibe64-assistant-dialog")].some(element=>element.getClientRects().length>0);const target=[...document.querySelectorAll("[data-vibe64-session-id]")].find(element=>element.getAttribute("data-vibe64-session-id")===normalizedSessionId&&element.getClientRects().length>0);if(!dialogVisible&&target&&typeof target.focus==="function"){target.focus({preventScroll:true});return document.activeElement===target}await new Promise(resolve=>{const schedule=globalThis.requestAnimationFrame||(callback=>setTimeout(callback,16));schedule(resolve)})}return false}const _sfc_main$d={__name:"Vibe64CreateSessionButton",props:{ariaLabel:{default:"",type:String},block:{default:false,type:Boolean},buttonClass:{default:"",type:[Array,Object,String]},iconOnly:{default:true,type:Boolean},label:{default:"New session",type:String},size:{default:"small",type:String},toolbar:{default:()=>({}),type:Object},variant:{default:"flat",type:String}},setup(__props){const props=__props;const button=ref(null);const dialogOpen=ref(false);const createSessionRunning=computed(()=>props.toolbar.createSessionRunning===true);const creationUnavailable=computed(()=>!createSessionRunning.value&&props.toolbar.canCreateSession!==true);const buttonAriaLabel=computed(()=>{if(createSessionRunning.value){return"Creating session…"}const label=String(props.ariaLabel||props.label||"New session").trim();return creationUnavailable.value&&buttonTitle.value?`${label}. ${buttonTitle.value}`:label});const buttonLabel=computed(()=>createSessionRunning.value?"Creating session…":props.label);const buttonTitle=computed(()=>createSessionRunning.value?"Creating session…":String(props.toolbar.createSessionTitle||props.ariaLabel||props.label||"New session").trim());function requestCreateSession(){if(creationUnavailable.value||createSessionRunning.value){return}dialogOpen.value=true}function handleCreated(response={}){if(response==null?void 0:response.sessionId){void focusCreatedVibe64SessionTab(response.sessionId)}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{ref_key:"button",ref:button,"aria-busy":createSessionRunning.value?"true":void 0,"aria-disabled":creationUnavailable.value?"true":void 0,"aria-label":buttonAriaLabel.value,block:__props.block,class:normalizeClass([__props.buttonClass,{"studio-ai-sessions__create-button--unavailable":creationUnavailable.value}]),disabled:createSessionRunning.value,icon:__props.iconOnly?true:void 0,"prepend-icon":__props.iconOnly?void 0:unref(mdiPlus),size:__props.size,title:buttonTitle.value,variant:__props.variant,onClick:requestCreateSession},{default:withCtx(()=>[__props.iconOnly?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiPlus)},null,8,["icon"])):createCommentVNode("",true),!__props.iconOnly?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(buttonLabel.value),1)],64)):createCommentVNode("",true)]),_:1},8,["aria-busy","aria-disabled","aria-label","block","class","disabled","icon","prepend-icon","size","title","variant"]),createVNode(Vibe64AssistantSessionDialog,{modelValue:dialogOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>dialogOpen.value=$event),toolbar:__props.toolbar,onCreated:handleCreated},null,8,["modelValue","toolbar"])],64)}}};const Vibe64CreateSessionButton=_export_sfc(_sfc_main$d,[["__scopeId","data-v-b1b96967"]]);const VIBE64_SESSION_TOOLTIP_KEY=Symbol("vibe64-session-tooltip");function createVibe64SessionTooltipState(){const suppressedSessionId=ref("");function resumeHover(){suppressedSessionId.value=""}function trackPointer(event){var _a,_b;if(!suppressedSessionId.value)return;const tab=(_b=(_a=event.target).closest)==null?void 0:_b.call(_a,"[data-vibe64-session-id]");if((tab==null?void 0:tab.dataset.vibe64SessionId)!==suppressedSessionId.value)resumeHover()}return{suppressedSessionId,resumeHover,trackPointer}}const DEFAULT_VISIBLE_SESSION_LIMIT=3;function visibleVibe64ToolbarSessions({limit=DEFAULT_VISIBLE_SESSION_LIMIT,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==null?void 0:session.sessionId)===selectedId);if(selectedIndex<0||selectedIndex<boundedLimit){return items.slice(0,boundedLimit)}return[...items.slice(0,Math.max(0,boundedLimit-1)),items[selectedIndex]]}const _hoisted_1$b={class:"studio-ai-sessions__tabs"};const _hoisted_2$a={class:"studio-ai-sessions__tab-main"};const _hoisted_3$a={class:"studio-ai-sessions__tab-label"};const _hoisted_4$a={key:0,class:"studio-ai-sessions__tab-close-slot"};const _hoisted_5$9={class:"studio-ai-sessions__info"};const _hoisted_6$7={class:"studio-ai-sessions__info-facts"};const _sfc_main$c={__name:"Vibe64SessionToolbar",props:{active:{default:true,type:Boolean},archive:{default:()=>({}),type:Object},selectedSessionId:{default:"",type:String},selectionArchived:{default:false,type:Boolean},toolbar:{default:()=>({}),type:Object},compact:{default:false,type:Boolean},createAttention:{default:false,type:Boolean},createVisible:{default:true,type:Boolean},maxVisibleSessions:{default:3,type:Number}},emits:["select-session"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const infoSessionId=ref("");const sessionTooltip=inject(VIBE64_SESSION_TOOLTIP_KEY);const infoId=useId();const createdAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"});function setSessionInfo(sessionId,visible){if(visible&&!props.active)return;if(visible||infoSessionId.value===sessionId){infoSessionId.value=visible?sessionId:""}}watch(()=>props.active,active=>{if(!active)infoSessionId.value=""},{flush:"sync"});function sessionInfoFacts(sessionItem){const selection=sessionItem.assistantSelection||{};const assistant=VIBE64_AGENT_PROVIDERS.find(provider=>provider.id===selection.engineId);const details=vibe64SessionInfoFacts(sessionItem).filter(fact=>["session","branch","created-at"].includes(fact.key)).map(fact=>{const createdAt=fact.key==="created-at"?Date.parse(fact.value):NaN;return{...fact,value:Number.isFinite(createdAt)?createdAtFormatter.format(createdAt):fact.copyValue}});return[{key:"status",label:"Status",value:sessionItem.agentThinking?"Working":vibe64SessionStatusLabel(sessionItem.status)},{key:"assistant",label:"Assistant",value:(assistant==null?void 0:assistant.label)||selection.engineId},{key:"model",label:"Model",value:selection.modelId},{key:"saved-work",label:"Work",value:repositoryStateLabel(sessionItem)},...details].filter(fact=>fact.value)}function selectSession(sessionId=""){var _a,_b;sessionTooltip.suppressedSessionId.value=sessionId;infoSessionId.value="";emit("select-session",sessionId);(_b=(_a=props.toolbar).selectSession)==null?void 0:_b.call(_a,sessionId)}function sessionTabLabel(sessionItem={}){var _a,_b,_c;const sessionName=String(sessionItem.sessionName||((_a=sessionItem.metadata)==null?void 0:_a.issue_word)||"").trim();if(sessionName){return sessionName}return((_c=(_b=props.toolbar).shortSessionId)==null?void 0:_c.call(_b,sessionItem.sessionId))||String(sessionItem.sessionId||"")}function repositoryState(sessionItem={}){var _a;const state=String(((_a=sessionItem==null?void 0:sessionItem.repositoryWorkState)==null?void 0:_a.state)||"checking");return["needs_help","saved","saving","unavailable","unsaved","update_available","updating"].includes(state)?state:"checking"}function repositoryStateLabel(sessionItem={}){var _a,_b;const state=repositoryState(sessionItem);if(state==="unsaved"){const changedCount=Number(((_a=sessionItem==null?void 0:sessionItem.repositoryWorkState)==null?void 0:_a.changedCount)||0);const changeLabel=changedCount===1?"1 change":`${changedCount||"Unsaved"} changes`;return((_b=sessionItem==null?void 0:sessionItem.repositoryWorkState)==null?void 0:_b.updateAvailable)?`${changeLabel}; update available`:changeLabel}return{checking:"Checking whether work is saved",needs_help:"Repository needs help",saved:"All work is saved",saving:"Saving work",unavailable:"Save status is unavailable",update_available:"Update available",updating:"Updating session"}[state]}function repositoryStateIcon(sessionItem={}){return{checking:mdiDotsHorizontalCircleOutline,needs_help:mdiAlertCircleOutline,saved:mdiCheckCircleOutline,saving:mdiDotsHorizontalCircleOutline,unavailable:mdiAlertCircleOutline,unsaved:mdiContentSaveAlertOutline,update_available:mdiCloudDownloadOutline,updating:mdiDotsHorizontalCircleOutline}[repositoryState(sessionItem)]}function sessionTabAriaLabel(sessionItem={}){if(sessionItem.archiving){return`${sessionTabLabel(sessionItem)}. Inactive. Archiving session.`}return`${sessionTabLabel(sessionItem)}. ${repositoryStateLabel(sessionItem)}.`}const allSessions=computed(()=>Array.isArray(props.toolbar.sessions)?props.toolbar.sessions:[]);const sessionLimit=computed(()=>Math.max(0,Number(props.maxVisibleSessions||0)));const createSessionButtonClass=computed(()=>["studio-ai-sessions__create-button",{"studio-ai-sessions__create-button--attention":props.createAttention}]);const visibleSessions=computed(()=>{return visibleVibe64ToolbarSessions({limit:sessionLimit.value,selectedSessionId:props.selectedSessionId,sessions:allSessions.value})});return(_ctx,_cache)=>{return openBlock(),createElementBlock("div",{class:normalizeClass(["studio-ai-sessions__toolbar",{"studio-ai-sessions__toolbar--compact":__props.compact}])},[createBaseVNode("div",_hoisted_1$b,[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSessions.value,sessionItem=>{return openBlock(),createBlock(VChip,{key:sessionItem.sessionId,class:normalizeClass(["studio-ai-sessions__tab",{"studio-ai-sessions__tab--active":sessionItem.sessionId===__props.selectedSessionId,"studio-ai-sessions__tab--thinking":!sessionItem.archiving&&sessionItem.agentThinking,"studio-ai-sessions__tab--archiving":sessionItem.archiving}]),size:__props.compact?"small":"large","aria-label":sessionTabAriaLabel(sessionItem),disabled:sessionItem.archiving,"data-vibe64-session-id":sessionItem.sessionId,variant:"flat",onClick:$event=>selectSession(sessionItem.sessionId),onFocusin:_cache[0]||(_cache[0]=$event=>__props.active&&$event.target.matches(":focus-visible")&&unref(sessionTooltip).resumeHover())},{default:withCtx(()=>[createBaseVNode("span",_hoisted_2$a,[createBaseVNode("span",{class:normalizeClass(["studio-ai-sessions__status-dot",`studio-ai-sessions__status-dot--${sessionItem.status}`])},null,2),createBaseVNode("span",_hoisted_3$a,toDisplayString(sessionItem.archiving?`${sessionTabLabel(sessionItem)} · Archiving…`:sessionTabLabel(sessionItem)),1),createVNode(VIcon,{class:normalizeClass(["studio-ai-sessions__repository-state studio-ai-sessions__repository-state--desktop",`studio-ai-sessions__repository-state--${repositoryState(sessionItem)}`]),icon:repositoryStateIcon(sessionItem),size:"14",title:repositoryStateLabel(sessionItem)},null,8,["class","icon","title"]),createVNode(VBtn,{class:"studio-ai-sessions__tab-info","aria-label":`Session info: ${sessionTabLabel(sessionItem)}`,"aria-expanded":infoSessionId.value===sessionItem.sessionId,"aria-describedby":`${unref(infoId)}-${sessionItem.sessionId}`,icon:unref(mdiInformationOutline),size:"x-small",variant:"text",onClick:withModifiers($event=>setSessionInfo(sessionItem.sessionId,infoSessionId.value!==sessionItem.sessionId),["stop"])},null,8,["aria-label","aria-expanded","aria-describedby","icon","onClick"])]),sessionItem.sessionId===__props.selectedSessionId?(openBlock(),createElementBlock("span",_hoisted_4$a,[createVNode(VBtn,{class:"studio-ai-sessions__tab-archive",density:"comfortable",disabled:__props.selectionArchived||__props.archive.command.isRunning,icon:unref(mdiArchiveOutline),size:"small",title:"Archive session",variant:"text","aria-label":"Archive session",onClick:withModifiers(__props.archive.request,["stop"])},null,8,["disabled","icon","onClick"])])):createCommentVNode("",true),createVNode(VTooltip,{id:`${unref(infoId)}-${sessionItem.sessionId}`,activator:"parent","model-value":infoSessionId.value===sessionItem.sessionId,disabled:!__props.active,"open-delay":1e3,"close-delay":150,"open-on-click":false,"open-on-focus":"",interactive:"",color:"surface-variant",location:"bottom","max-width":320,"onUpdate:modelValue":$event=>(!$event||unref(sessionTooltip).suppressedSessionId.value!==sessionItem.sessionId)&&setSessionInfo(sessionItem.sessionId,$event)},{default:withCtx(()=>[createBaseVNode("div",_hoisted_5$9,[createBaseVNode("strong",null,toDisplayString(sessionTabLabel(sessionItem)),1),createBaseVNode("dl",_hoisted_6$7,[(openBlock(true),createElementBlock(Fragment,null,renderList(sessionInfoFacts(sessionItem),fact=>{return openBlock(),createElementBlock(Fragment,{key:fact.key},[createBaseVNode("dt",null,toDisplayString(fact.label),1),createBaseVNode("dd",null,toDisplayString(fact.value),1)],64)}),128))])])]),_:2},1032,["id","model-value","disabled","onUpdate:modelValue"])]),_:2},1032,["class","size","aria-label","disabled","data-vibe64-session-id","onClick"])}),128)),__props.createVisible&&(sessionLimit.value<1||allSessions.value.length<sessionLimit.value)?(openBlock(),createBlock(Vibe64CreateSessionButton,{key:0,"aria-label":"New session","button-class":createSessionButtonClass.value,"icon-only":"",toolbar:__props.toolbar},null,8,["button-class","toolbar"])):createCommentVNode("",true),renderSlot(_ctx.$slots,"after-sessions",{},void 0,true)])],2)}}};const Vibe64SessionToolbar=_export_sfc(_sfc_main$c,[["__scopeId","data-v-a7ff2d0b"]]);const _hoisted_1$a={class:"vibe64-agent-settings-menu","aria-label":"AI controls"};const _hoisted_2$9={class:"vibe64-agent-settings-menu__header"};const _hoisted_3$9={class:"vibe64-agent-settings-menu__heading"};const _hoisted_4$9={class:"vibe64-agent-settings-menu__label"};const _hoisted_5$8={class:"vibe64-agent-settings-menu__options"};const _hoisted_6$6=["aria-pressed","onClick"];const _sfc_main$b={__name:"Vibe64AgentSettingsMenu",props:{agentSettings:{default:()=>({}),type:Object},disabled:{default:false,type:Boolean},location:{default:"top start",type:String}},emits:["update-setting"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const menuOpen=ref(false);const currentSettings=computed(()=>normalizeVibe64AgentSettings(props.agentSettings));const provider=computed(()=>VIBE64_AGENT_PROVIDERS.find(candidate=>candidate.id===currentSettings.value.providerId)||VIBE64_AGENT_PROVIDERS[0]);const providerLabel=computed(()=>{var _a;return((_a=provider.value)==null?void 0:_a.label)||"AI"});const parameters=computed(()=>vibe64AgentSettingParameters(currentSettings.value));const summary=computed(()=>{const text=parameters.value.map(parameter=>displayVibe64AgentSetting(currentSettings.value.providerId,parameter.id,parameterValue(parameter.id))).filter(Boolean).join(" / ");return text||"Automatic"});const controlsTitle=computed(()=>`AI controls: ${summary.value}`);function parameterValue(parameterId=""){var _a;return String(((_a=currentSettings.value)==null?void 0:_a[parameterId])||"")}function parameterSelected(parameterId="",value2=""){return parameterValue(parameterId)===String(value2||"")}function updateParameter(parameterId="",value2=""){emit("update-setting",parameterId,value2)}return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>menuOpen.value=$event),"close-on-content-click":false,location:__props.location,transition:"scale-transition"},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{"aria-label":"AI parameters",class:"vibe64-agent-settings-menu__button",density:"comfortable",disabled:__props.disabled,icon:unref(mdiCogOutline),size:"small",title:controlsTitle.value,type:"button",variant:"flat"}),null,16,["disabled","icon","title"])]),default:withCtx(()=>[createBaseVNode("div",_hoisted_1$a,[createBaseVNode("div",_hoisted_2$9,[createVNode(VIcon,{icon:unref(mdiBrain),size:"20"},null,8,["icon"]),createBaseVNode("div",_hoisted_3$9,[_cache[1]||(_cache[1]=createBaseVNode("strong",null,"AI Controls",-1)),createBaseVNode("span",null,toDisplayString(providerLabel.value)+" - "+toDisplayString(summary.value),1)])]),(openBlock(true),createElementBlock(Fragment,null,renderList(parameters.value,parameter=>{return openBlock(),createElementBlock("section",{key:parameter.id,class:"vibe64-agent-settings-menu__section"},[createBaseVNode("div",_hoisted_4$9,toDisplayString(parameter.label),1),createBaseVNode("div",_hoisted_5$8,[(openBlock(true),createElementBlock(Fragment,null,renderList(parameter.options,option=>{return openBlock(),createElementBlock("button",{key:`${parameter.id}:${option.value}`,class:normalizeClass(["vibe64-agent-settings-menu__option",{"vibe64-agent-settings-menu__option--active":parameterSelected(parameter.id,option.value)}]),type:"button","aria-pressed":parameterSelected(parameter.id,option.value),onClick:$event=>updateParameter(parameter.id,option.value)},[createBaseVNode("span",null,toDisplayString(option.label),1),parameterSelected(parameter.id,option.value)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck),size:"15"},null,8,["icon"])):createCommentVNode("",true)],10,_hoisted_6$6)}),128))])])}),128))])]),_:1},8,["modelValue","location"])}}};const Vibe64AgentSettingsMenu=_export_sfc(_sfc_main$b,[["__scopeId","data-v-08067fca"]]);const _hoisted_1$9={key:0,class:"vibe64-ephemeral-conversation__empty"};const _hoisted_2$8={key:2};const _hoisted_3$8={key:3};const _hoisted_4$8={key:4};const _sfc_main$a={__name:"Vibe64EphemeralConversationMessages",props:{sessionId:{default:"",type:String},assistantLabel:{default:"Temporary AI",type:String},emptyMessage:{default:"Ask a focused question without adding it to the main conversation.",type:String},messages:{default:()=>[],type:Array},userLabel:{default:"You",type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[__props.messages.length===0?(openBlock(),createElementBlock("div",_hoisted_1$9,toDisplayString(__props.emptyMessage),1)):createCommentVNode("",true),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.messages,message=>{var _a,_b;return openBlock(),createElementBlock("article",{key:message.id,class:normalizeClass(["vibe64-ephemeral-conversation__message",`vibe64-ephemeral-conversation__message--${message.role}`])},[createBaseVNode("strong",null,toDisplayString(message.role==="user"?__props.userLabel:__props.assistantLabel),1),message.role==="assistant"&&((_a=message.progressUpdates)==null?void 0:_a.length)?(openBlock(),createBlock(Vibe64ConversationProgress,{key:`${message.id}:${["starting","inProgress"].includes(message.status)?"active":"completed"}`,class:"vibe64-ephemeral-conversation__progress","aria-label":`${__props.assistantLabel} progress`,messages:message.progressUpdates,"preview-limit":0},null,8,["aria-label","messages"])):createCommentVNode("",true),message.text&&message.role==="assistant"?(openBlock(),createBlock(LongTextPreviewBlocks,{key:1,blocks:unref(parseLongTextReviewBlocks)(message.text)},null,8,["blocks"])):message.text?(openBlock(),createElementBlock("p",_hoisted_2$8,toDisplayString(message.text),1)):message.status==="interrupted"?(openBlock(),createElementBlock("span",_hoisted_3$8,"Stopped.")):message.status==="failed"?(openBlock(),createElementBlock("span",_hoisted_4$8,toDisplayString(__props.assistantLabel)+" stopped with an error.",1)):createCommentVNode("",true),((_b=message.attachments)==null?void 0:_b.length)?(openBlock(),createBlock(Vibe64ConversationAttachments,{key:5,items:message.attachments,"session-id":__props.sessionId},null,8,["items","session-id"])):createCommentVNode("",true)],2)}),128))],64)}}};const Vibe64EphemeralConversationMessages=_export_sfc(_sfc_main$a,[["__scopeId","data-v-ddc02923"]]);function chatText(value2=""){return String(value2||"").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;const safeOrigin=origin.replace(/[^A-Za-z0-9_-]+/gu,"_");return`message_${safeOrigin}_${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==null?void 0:attachment.attachmentId)).filter(Boolean);const displayAttachments=normalizeVibe64ConversationAttachments(files.filter(attachment=>chatText(attachment==null?void 0:attachment.attachmentId)));return{...attachmentIds.length?{attachmentIds}:{},...displayAttachments.length?{displayAttachments}:{},displayMessage:text,message:text}}function turnMatchesOptimisticMessage(turn={},optimistic={}){var _a,_b,_c;const canonicalMessageId=chatText((_a=turn==null?void 0:turn.user)==null?void 0:_a.messageId);const optimisticMessageId=chatText(optimistic.id);if(canonicalMessageId&&optimisticMessageId){return canonicalMessageId===optimisticMessageId}if(chatText((_b=turn==null?void 0:turn.user)==null?void 0:_b.text)!==optimistic.text){return false}const userAtMs=Date.parse(String(((_c=turn==null?void 0:turn.user)==null?void 0:_c.at)||""));return Number.isFinite(userAtMs)&&userAtMs>=optimistic.createdAtMs-5e3}function unmatchedOptimisticMessages(turns=[],optimisticMessages=[]){const conversationTurns2=Array.isArray(turns)?turns:[];const matchedTurnIndexes=new Set;return(Array.isArray(optimisticMessages)?optimisticMessages:[]).filter(message=>{const turnIndex=conversationTurns2.findIndex((turn,index)=>!matchedTurnIndexes.has(index)&&turnMatchesOptimisticMessage(turn,message));if(turnIndex<0){return true}matchedTurnIndexes.add(turnIndex);return false})}const TEMPORARY_AI_POLL_INTERVAL_MS=650;const TEMPORARY_AI_WORKSPACE_WRITE_POLICY="workspace_write";function temporaryAiId(prefix="temporary"){return`${prefix}_${crypto.randomUUID()}`}function temporaryAiText(value2=""){return String(value2||"").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})}function temporaryAiTurnIsActive(status=""){return["starting","inProgress"].includes(temporaryAiText(status))}function temporaryAiProgressUpdates(value2=[]){if(!Array.isArray(value2)){return[]}return value2.map((update={},index)=>({id:temporaryAiText(update.id)||`progress:${index+1}`,text:temporaryAiText(update.text)})).filter(update=>update.text)}function temporaryAiTurnMessages(messages=[],runId="",update={}){return messages.map(message=>message.runId===runId&&message.role==="assistant"?{...message,...update}:message)}function useVibe64TemporaryAi({agentSettings=()=>defaultVibe64AgentSettings(),onTaskFinished=null,operationBusy=()=>false,sessionId,sessionsApiPath}={}){const tasks=ref([]);const activeTaskId=ref("");const open=ref(false);const pollTimers=new Map;const closingTaskIds=new Set;const stoppingTaskIds=new Set;let disposed=false;let nextTaskNumber=1;const activeTask=computed(()=>tasks.value.find(task=>task.id===activeTaskId.value)||tasks.value[0]||null);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 updateTask(taskId="",update={}){tasks.value=tasks.value.map(task=>task.id===taskId?{...task,...update}:task);return tasks.value.find(task=>task.id===taskId)||null}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),error:temporaryAiText(task.error),failureMessage:temporaryAiText(task.failureMessage),id:task.id,outcomeKind:temporaryAiText(task.outcomeKind),recoveryOperation:temporaryAiText(task.recoveryOperation),runId:task.runId,sessionId:task.sessionId,status:temporaryAiText(task.status),title:temporaryAiText(task.title)||"Temporary AI"}))}catch{}}function openTask({completionMessage="",dedupeKey="",displayMessage="",draft="",failureMessage="",nextStepMessage="",policy="read",recoveryNotice="",recoveryOperation="",title=""}={}){const number=nextTaskNumber;nextTaskNumber+=1;const task={agentSettings:normalizeVibe64AgentSettings(readRefOrGetterValue(agentSettings)),attachments:[],busy:false,completionMessage:temporaryAiText(completionMessage),conversationId:"",dedupeKey:temporaryAiText(dedupeKey),displayMessage:temporaryAiText(displayMessage),draft:temporaryAiText(draft),error:"",failureMessage:temporaryAiText(failureMessage),id:temporaryAiId("temporary-ai"),messages:[],nextStepMessage:temporaryAiText(nextStepMessage),ownedAttachmentIds:[],pendingMessageId:"",policy:policy===TEMPORARY_AI_WORKSPACE_WRITE_POLICY?TEMPORARY_AI_WORKSPACE_WRITE_POLICY:"read",recoveryOutcome:"",recoveryOutcomeMessage:"",recoveryNotice:temporaryAiText(recoveryNotice),recoveryOperation:recoveryOperation==="update"?"update":"",recoveryContext:"",recoveryRetryKeys:[],recoveryAutoPaused:false,runId:"",sessionId:currentSessionId(),status:"ready",title:temporaryAiText(title)||`Temporary ${number}`};tasks.value=[...tasks.value,task];activeTaskId.value=task.id;open.value=true;return task}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,{draft:message,displayMessage:"Continue repairing this Update.",recoveryRetryKeys:[]})}const started2=await send(repair.id);return{ok:started2,reused:true,started:started2,taskId:repair.id}}const existingTask=dedupeKey?[...tasks.value].reverse().find(task2=>task2.dedupeKey===dedupeKey&&(task2.busy||task2.status==="failed"&&temporaryAiText(task2.draft)&&temporaryAiText(task2.pendingMessageId))):null;if(existingTask){selectTask(existingTask.id);const started2=existingTask.busy?false:await send(existingTask.id);return Object.freeze({ok:existingTask.busy||started2,reused:true,started:started2,taskId:existingTask.id})}const task=openTask({...input,dedupeKey,draft:message});const started=await send(task.id);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}function updateDraft(taskId="",draft=""){updateTask(taskId,{displayMessage:"",draft:String(draft||""),pendingMessageId:""})}function updateAgentSetting(taskId="",parameterId="",value2=""){const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task){return}updateTask(taskId,{agentSettings:normalizeVibe64AgentSettings({...task.agentSettings,[parameterId]:value2})})}function updatePolicy(taskId="",policy="read"){updateTask(taskId,{policy:policy===TEMPORARY_AI_WORKSPACE_WRITE_POLICY?TEMPORARY_AI_WORKSPACE_WRITE_POLICY:"read"})}function reportRecoveryOutcome(taskId="",{message="",status="",retryMessage="",retryKey=""}={}){const outcome=temporaryAiText(status);const task=tasks.value.find(task2=>task2.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||!["checking","failed","succeeded"].includes(outcome)){return false}updateTask(taskId,{recoveryOutcome:outcome,recoveryAutoPaused:false,recoveryOutcomeMessage:temporaryAiText(message),...outcome!=="checking"?{recoveryContext:outcome==="failed"?retryMessage||message:message}:{}});if(outcome==="failed"&&task.recoveryOperation==="update"&&retryMessage&&retryKey&&!readRefOrGetterValue(operationBusy)&&!stoppingTaskIds.has(taskId)&&!task.busy&&task.status!=="interrupted"&&task.policy===TEMPORARY_AI_WORKSPACE_WRITE_POLICY){const retries=task.recoveryRetryKeys||[];if(retries.includes(retryKey)||retries.length>=3){updateTask(taskId,{recoveryAutoPaused:true,recoveryOutcomeMessage:`${message}
3
+ Automatic 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],draft:"Continue repairing the remaining conflicts from Vibe64's latest Update check.",displayMessage:"Continue repairing the remaining conflicts."});void send(taskId)}}return true}function updateAttachments(taskId="",attachments=[]){const task=tasks.value.find(candidate=>candidate.id===taskId);if(!task){return}const current=Array.isArray(attachments)?attachments:[];const ids=current.map(attachment=>temporaryAiText(attachment==null?void 0:attachment.attachmentId)).filter(Boolean);updateTask(taskId,{attachments:current,ownedAttachmentIds:[...new Set(ids)]})}async function request(path="",options={}){const response=await getHttpWebClient().request(path,options);if((response==null?void 0:response.ok)===false){throw temporaryAiRequestError(response)}return response}function stopPolling(taskId=""){clearTimeout(pollTimers.get(taskId));pollTimers.delete(taskId)}async function pollTask(taskId=""){var _a;stopPolling(taskId);const task=tasks.value.find(candidate=>candidate.id===taskId);const canApplyResponse=()=>{const current=tasks.value.find(candidate=>candidate.id===taskId);return!disposed&&(current==null?void 0:current.busy)&&current.runId===task.runId&&!closingTaskIds.has(taskId)&&!stoppingTaskIds.has(taskId)};if(!(task==null?void 0:task.conversationId)||!task.runId||!canApplyResponse()){return}try{const response=await request(vibe64TemporaryConversationPath(currentSessionsApiPath(),currentSessionId(),task.conversationId),{method:"GET"});if(!canApplyResponse())return;const text=temporaryAiText(response.text||response.message||response.rawText);const status=temporaryAiText(response.status)||"completed";const messages=temporaryAiTurnMessages(task.messages,task.runId,{progressUpdates:temporaryAiProgressUpdates(response.progressUpdates),status,text});const active=temporaryAiTurnIsActive(status);updateTask(taskId,{busy:active,conversationId:response.conversationExpired===true?"":task.conversationId,error:active?"":temporaryAiText(response.error),messages,outcomeKind:temporaryAiText((_a=response.outcome)==null?void 0:_a.kind),runId:response.conversationExpired===true?"":task.runId,status});if(active){pollTimers.set(taskId,setTimeout(()=>void pollTask(taskId),TEMPORARY_AI_POLL_INTERVAL_MS))}else{reportTaskFinished(taskId)}}catch(error){if(!canApplyResponse())return;const message=temporaryAiText((error==null?void 0:error.message)||error)||"Temporary AI response could not be read.";updateTask(taskId,{busy:false,conversationId:(error==null?void 0:error.conversationExpired)===true?"":task.conversationId,error:message,messages:temporaryAiTurnMessages(task.messages,task.runId,{status:"failed"}),runId:(error==null?void 0:error.conversationExpired)===true?"":task.runId,status:"failed"});reportTaskFinished(taskId)}}async function send(taskId=""){var _a;const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!task||closingTaskIds.has(taskId)||stoppingTaskIds.has(taskId)||readRefOrGetterValue(operationBusy)||task.busy||task.recoveryOutcome==="checking"){return false}const payload=chatMessagePayload(task.draft,task.attachments);if(!(payload==null?void 0:payload.message)){return false}const messageId=task.pendingMessageId||temporaryAiId("message");updateTask(taskId,{busy:true,draft:"",error:"",pendingMessageId:messageId,outcomeKind:"",recoveryOutcome:task.recoveryOutcome==="failed"?"failed":"",recoveryOutcomeMessage:task.recoveryOutcome==="failed"?task.recoveryOutcomeMessage:"",status:"starting"});let conversationId=task.conversationId;const apiPath=currentSessionsApiPath();const ownerSessionId=task.sessionId;try{if(!conversationId){const created=await request(vibe64TemporaryConversationsPath(apiPath,ownerSessionId),{body:{agentSettings:task.agentSettings,policy:task.policy},method:"POST"});conversationId=created.conversationId;if(disposed){await request(vibe64TemporaryConversationPath(apiPath,ownerSessionId,conversationId),{method:"DELETE"});return false}updateTask(task.id,{conversationId})}const response=await request(vibe64TemporaryConversationTurnsPath(apiPath,ownerSessionId,conversationId),{body:{agentSettings:task.agentSettings,...((_a=payload.attachmentIds)==null?void 0:_a.length)?{attachmentIds:payload.attachmentIds}:{},messageId,message:task.recoveryOperation==="update"&&task.recoveryContext?`${task.recoveryContext}
4
+
5
+ User message:
6
+ ${payload.message}`:payload.message,policy:task.policy,promptLabel:task.title},method:"POST"});if(disposed)return false;const messages=[...task.messages,{attachments:payload.displayAttachments||[],id:messageId,role:"user",status:"completed",text:task.displayMessage||payload.displayMessage},{id:temporaryAiId("message"),role:"assistant",runId:response.runId,status:response.status||"inProgress",progressUpdates:[],text:""}];updateTask(taskId,{attachments:[],busy:true,conversationId,displayMessage:"",messages,ownedAttachmentIds:[],pendingMessageId:"",runId:response.runId,status:response.status||"inProgress"});void pollTask(taskId);return true}catch(error){if(disposed)return false;updateTask(taskId,{busy:false,conversationId:(error==null?void 0:error.conversationExpired)===true?"":conversationId,draft:task.draft,error:temporaryAiText((error==null?void 0:error.message)||error)||"Temporary AI message could not be sent.",pendingMessageId:messageId,runId:(error==null?void 0:error.conversationExpired)===true?"":task.runId,status:"failed"});reportTaskFinished(taskId);return false}}async function stopTask(taskId=""){const task=tasks.value.find(candidate=>candidate.id===taskId);if(disposed||!(task==null?void 0:task.busy)||stoppingTaskIds.has(taskId)){return false}if(task.status==="starting"||!task.conversationId||!task.runId){throw new Error("Temporary AI is still starting. Wait for it to start, then stop it.")}stoppingTaskIds.add(taskId);stopPolling(taskId);try{await request(vibe64TemporaryConversationStopPath(currentSessionsApiPath(),currentSessionId(),task.conversationId),{body:{runId:task.runId},method:"POST"});if(disposed)return false;updateTask(taskId,{busy:false,messages:temporaryAiTurnMessages(task.messages,task.runId,{status:"interrupted"}),status:"interrupted"});return true}catch(error){if(disposed)return false;pollTimers.set(taskId,setTimeout(()=>void pollTask(taskId),TEMPORARY_AI_POLL_INTERVAL_MS));throw error}finally{stoppingTaskIds.delete(taskId)}}async function closeTask(taskId=""){var _a;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);stopPolling(taskId);try{if(task.busy){await stopTask(taskId)}if(disposed)return;if(task.conversationId){await request(vibe64TemporaryConversationPath(currentSessionsApiPath(),currentSessionId(),task.conversationId),{method:"DELETE"})}if(disposed)return;tasks.value=tasks.value.filter(candidate=>candidate.id!==taskId);if(activeTaskId.value===taskId){activeTaskId.value=((_a=tasks.value[0])==null?void 0:_a.id)||""}if(tasks.value.length===0){open.value=false}}catch(error){if(disposed)return;throw error}finally{closingTaskIds.delete(taskId)}}function closeWorkspace(){open.value=false}function cleanupOnPageExit(){const currentSession=currentSessionId();const apiPath=currentSessionsApiPath();for(const task of tasks.value){if(task.conversationId){void fetch(resolveStudioRequestUrl(vibe64TemporaryConversationPath(apiPath,currentSession,task.conversationId)),{credentials:"same-origin",keepalive:true,method:"DELETE"})}for(const attachmentId of task.ownedAttachmentIds){void fetch(resolveStudioRequestUrl(vibe64AgentAttachmentFilePath(apiPath,currentSession,attachmentId)),{credentials:"same-origin",keepalive:true,method:"DELETE"})}}}onMounted(()=>window.addEventListener("beforeunload",cleanupOnPageExit));onBeforeUnmount(()=>{disposed=true;window.removeEventListener("beforeunload",cleanupOnPageExit);cleanupOnPageExit();for(const task of tasks.value){stopPolling(task.id)}});return{activeTask,activeTaskId,closeTask,closeWorkspace,open,openTask,reportRecoveryOutcome,selectTask,send,showWorkspace,startTask,stopTask,tasks,updateAgentSetting,updateAttachments,updateDraft,updateRepairTask,updatePolicy}}const _hoisted_1$8={class:"vibe64-temporary-ai__tabs","aria-label":"Main and temporary conversations"};const _hoisted_2$7={class:"vibe64-temporary-ai__tab vibe64-temporary-ai__tab--main"};const _hoisted_3$7={class:"vibe64-temporary-ai__task-tabs"};const _hoisted_4$7=["aria-current","data-temporary-ai-task-id","title","onClick"];const _hoisted_5$7={key:0,class:"vibe64-temporary-ai__busy","aria-label":"Assistant working"};const _hoisted_6$5={class:"vibe64-temporary-ai__recovery-row"};const _hoisted_7$5={key:0};const _hoisted_8$5={class:"vibe64-temporary-ai__messages","aria-live":"polite"};const _hoisted_9$3={key:0,class:"vibe64-temporary-ai__feedback"};const _hoisted_10$3={key:0,class:"vibe64-temporary-ai__error",role:"alert"};const _hoisted_11$3=["role"];const _hoisted_12$3={class:"vibe64-temporary-ai__composer-actions"};const _hoisted_13$3={key:0,class:"vibe64-temporary-ai__error",role:"alert"};const _sfc_main$9={__name:"Vibe64TemporaryAiWorkspace",props:{active:Boolean,repositoryBusy:Boolean,updateDisabled:Boolean,updateDisabledReason:{type:String,default:""},agentSettings:{default:()=>({}),type:Object},sessionId:{default:"",type:String},sessionsApiPath:{default:"",type:[String,Object,Function]}},emits:["select-main-chat","task-finished","check-update"],setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const props=__props;const workspace=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({agentSettings:computed(()=>props.agentSettings),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 activeTask=temporary.activeTask;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(()=>{var _a;return((_a=activeTask.value)==null?void 0:_a.recoveryOutcome)==="checking"});const activeTaskRecoveryVerified=computed(()=>{var _a;return((_a=activeTask.value)==null?void 0:_a.recoveryOutcome)==="succeeded"});const activeTaskRecoveryTitle=computed(()=>{var _a,_b,_c,_d,_e;if(activeTaskRecoveryChecking.value){return"Checking Update…"}const status=String(((_a=activeTask.value)==null?void 0:_a.status)||"").trim();if(["starting","inProgress"].includes(status)){return"AI repair in progress"}if(((_b=activeTask.value)==null?void 0:_b.recoveryOutcome)==="failed"){return"Update needs attention"}if(activeTaskRecoveryVerified.value){return((_c=activeTask.value)==null?void 0:_c.recoveryOperation)==="update"?"Session updated":"Repair verified"}if(((_d=activeTask.value)==null?void 0:_d.recoveryOperation)==="update"){return"Update not yet verified"}if(((_e=activeTask.value)==null?void 0:_e.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.recoveryOutcome==="succeeded"){return task.recoveryOutcomeMessage||"Vibe64 independently verified that the repair succeeded."}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; the latest diagnostic is in the activity panel above.":"The Update check did not succeed. Continue this repair or check Update again; the latest diagnostic is in the activity panel above."}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."});const workspaceWritePolicy=TEMPORARY_AI_WORKSPACE_WRITE_POLICY;function requestCloseTask(task){if(task.recoveryOperation==="update"&&task.recoveryOutcome!=="succeeded"&&(task.busy||task.messages.length)){closeTaskId.value=task.id;return}void closeTask(task.id)}async function closeTask(taskId){closingTask.value=true;delete actionErrors.value[taskId];try{await temporary.closeTask(taskId);closeTaskId.value=""}catch(error){actionErrors.value[taskId]=(error==null?void 0: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==null?void 0:error.message)||"Temporary AI could not be stopped. Try again."}finally{stoppingTaskId.value=""}}function taskInputDisabled(task){return props.repositoryBusy||task.busy||task.recoveryOutcome==="checking"}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=""){var _a,_b;const currentPrompt=taskPrompt(taskId);if(!taskId||((_a=currentPrompt==null?void 0:currentPrompt.attachmentsCanSubmit)==null?void 0:_a.call(currentPrompt))===false){return}const sent=await temporary.send(taskId);if(sent){(_b=currentPrompt==null?void 0:currentPrompt.clearAttachments)==null?void 0:_b.call(currentPrompt)}return sent}async function startTask(options={}){var _a,_b;const started=temporary.startTask(options);const taskId=temporary.activeTaskId.value;await revealTaskTab(taskId,{focus:true});const result=await started;if(result==null?void 0:result.started){(_b=(_a=taskPrompt(taskId))==null?void 0:_a.clearAttachments)==null?void 0:_b.call(_a)}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}function showWorkspace(){const task=temporary.showWorkspace();void 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}={}){var _a,_b;const normalizedTaskId=String(taskId||"");if(!normalizedTaskId){return false}await nextTick();await afterBrowserPaint();const button=taskTabButtons.get(normalizedTaskId);(_a=button==null?void 0:button.scrollIntoView)==null?void 0:_a.call(button,{block:"nearest",inline:"nearest"});if(focus){const target=button||workspace.value;(_b=target==null?void 0:target.focus)==null?void 0:_b.call(target,{preventScroll:true})}return Boolean(button)}function focusSendButton(){var _a,_b;const sendButton=taskSendButtons.get((_a=activeTask.value)==null?void 0:_a.id);const button=(sendButton==null?void 0:sendButton.$el)||sendButton;(_b=button==null?void 0:button.focus)==null?void 0:_b.call(button)}function togglePolicy(task={}){const policy=task.policy===workspaceWritePolicy?"read":workspaceWritePolicy;temporary.updatePolicy(task.id,policy)}function updateActiveAgentSetting(parameterId="",value2=""){var _a;if((_a=activeTask.value)==null?void 0:_a.id){temporary.updateAgentSetting(activeTask.value.id,parameterId,value2)}}watch(()=>temporary.activeTaskId.value,taskId=>{void revealTaskTab(taskId)},{flush:"post"});__expose({closeWorkspace:temporary.closeWorkspace,openTask:temporary.openTask,reportTaskRecovery,selectTask:temporary.selectTask,startTask,showWorkspace,updateRepairTask:temporary.updateRepairTask});return(_ctx,_cache)=>{return unref(temporary).open.value?(openBlock(),createElementBlock("section",{key:0,ref_key:"workspace",ref:workspace,class:"vibe64-temporary-ai","aria-label":"Temporary AI workspace",tabindex:"-1"},[createBaseVNode("nav",_hoisted_1$8,[createBaseVNode("div",_hoisted_2$7,[createBaseVNode("button",{class:"vibe64-temporary-ai__tab-select","data-temporary-ai-main-chat":"",type:"button",onClick:_cache[0]||(_cache[0]=$event=>emit("select-main-chat"))}," Main chat ")]),createBaseVNode("div",_hoisted_3$7,[(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":task.id===unref(temporary).activeTaskId.value}])},[createBaseVNode("button",{ref_for:true,ref:element=>setTaskTabButton(task.id,element),"aria-current":task.id===unref(temporary).activeTaskId.value?"page":void 0,class:"vibe64-temporary-ai__tab-select","data-temporary-ai-task-id":task.id,title:task.title,type:"button",onClick:$event=>unref(temporary).selectTask(task.id)},[createBaseVNode("span",null,toDisplayString(task.title),1),task.busy?(openBlock(),createElementBlock("span",_hoisted_5$7)):createCommentVNode("",true)],8,_hoisted_4$7),createVNode(VBtn,{"aria-label":`Close ${task.title}`,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.title}`,type:"button",variant:"text",onClick:$event=>requestCloseTask(task)},null,8,["aria-label","disabled","icon","title","onClick"])],2)}),128)),createVNode(VBtn,{"aria-label":"New temporary AI task",class:"vibe64-temporary-ai__new-task",height:"32",icon:unref(mdiPlus),"min-width":"32",size:"x-small",title:"New temporary AI task",type:"button",variant:"text",onClick:_cache[1]||(_cache[1]=$event=>unref(temporary).openTask())},null,8,["icon"])]),_cache[6]||(_cache[6]=createBaseVNode("span",{class:"vibe64-temporary-ai__tabs-spacer"},null,-1)),unref(activeTask)?(openBlock(),createBlock(VBtn,{key:0,"aria-label":unref(activeTask).policy===unref(workspaceWritePolicy)?"Read/write: temporary AI may edit this session":"Read-only: temporary AI cannot edit this session",class:"vibe64-temporary-ai__policy",color:unref(activeTask).policy===unref(workspaceWritePolicy)?"warning":void 0,disabled:taskInputDisabled(unref(activeTask)),height:"28","min-width":"40",size:"x-small",title:unref(activeTask).policy===unref(workspaceWritePolicy)?"R/W: temporary AI may edit this session. Click to make it read-only.":"R/O: temporary AI cannot edit this session. Click to allow edits.",type:"button",variant:"tonal",onClick:_cache[2]||(_cache[2]=$event=>togglePolicy(unref(activeTask)))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(activeTask).policy===unref(workspaceWritePolicy)?"R/W":"R/O"),1)]),_:1},8,["aria-label","color","disabled","title"])):createCommentVNode("",true)]),unref(activeTask)?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode("div",_hoisted_6$5,[unref(activeTask).recoveryNotice?(openBlock(),createBlock(VAlert,{key:0,"aria-live":"polite",class:"vibe64-temporary-ai__recovery",color:activeTaskRecoveryVerified.value?"success":void 0,"data-temporary-ai-recovery":"",density:"compact",icon:activeTaskRecoveryVerified.value?unref(mdiCheckCircleOutline):unref(mdiRobotOutline),role:"status",title:activeTaskRecoveryTitle.value,variant:"tonal"},{default:withCtx(()=>[activeTaskRecoveryStatus.value&&!unref(activeTask).busy?(openBlock(),createElementBlock("p",_hoisted_7$5,toDisplayString(activeTaskRecoveryStatus.value),1)):createCommentVNode("",true),unref(activeTask).recoveryOperation==="update"&&!activeTaskRecoveryVerified.value?(openBlock(),createBlock(VBtn,{key:1,class:"vibe64-temporary-ai__check-update","data-temporary-ai-check-update":"",disabled:props.updateDisabled||taskInputDisabled(unref(activeTask)),loading:activeTaskRecoveryChecking.value,title:props.updateDisabled?props.updateDisabledReason:"Check whether the repaired session can update",size:"small",variant:"tonal",onClick:_cache[3]||(_cache[3]=$event=>emit("check-update",unref(activeTask)))},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(" Check Update ",-1)])]),_:1},8,["disabled","loading","title"])):createCommentVNode("",true)]),_:1},8,["color","icon","title"])):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_8$5,[createVNode(Vibe64EphemeralConversationMessages,{"session-id":props.sessionId,messages:unref(activeTask).messages,"empty-message":"Ask a focused question or investigate a problem without adding it to the main conversation."},null,8,["session-id","messages"])]),unref(activeTask).error||actionErrors.value[unref(activeTask).id]||unref(activeTask).busy||activeTaskRecoveryChecking.value?(openBlock(),createElementBlock("div",_hoisted_9$3,[actionErrors.value[unref(activeTask).id]&&!taskToClose.value?(openBlock(),createElementBlock("div",_hoisted_10$3,toDisplayString(actionErrors.value[unref(activeTask).id]),1)):createCommentVNode("",true),unref(activeTask).error?(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(unref(activeTask).error)+" The repair was independently verified. ",1)],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(unref(activeTask).error),1)],64))],10,_hoisted_11$3)):createCommentVNode("",true),unref(activeTask).busy||activeTaskRecoveryChecking.value?(openBlock(),createBlock(Vibe64PromptHints,{key:2,class:"vibe64-temporary-ai__activity","assistant-label":activeTaskRecoveryChecking.value?"Checking Update…":"AI is working…"},null,8,["assistant-label"])):createCommentVNode("",true)])):createCommentVNode("",true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(temporary).tasks.value,task=>{return withDirectives((openBlock(),createBlock(Vibe64AutopilotPromptTextarea,{key:task.id,ref_for:true,ref:element=>setTaskPrompt(task.id,element),"model-value":task.draft,"aria-label":"Message temporary AI","attachments-enabled":Boolean(props.sessionId),disabled:taskInputDisabled(task),placeholder:"Ask temporary AI…",rows:2,"session-id":props.sessionId,"tab-to-submit":"",onAttachmentsChange:$event=>unref(temporary).updateAttachments(task.id,$event),onSubmit:$event=>sendTask(task.id),onTabToSubmit:focusSendButton,"onUpdate:modelValue":$event=>unref(temporary).updateDraft(task.id,$event)},{footer:withCtx(({attachmentState})=>[createBaseVNode("div",_hoisted_12$3,[createVNode(Vibe64AgentSettingsMenu,{"agent-settings":task.agentSettings,disabled:taskInputDisabled(task),onUpdateSetting:updateActiveAgentSetting},null,8,["agent-settings","disabled"]),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=>{var _a,_b;return(_b=(_a=taskPrompt(task.id))==null?void 0:_a.openFilePicker)==null?void 0:_b.call(_a)}},null,8,["disabled","icon","onClick"]),_cache[9]||(_cache[9]=createBaseVNode("span",{class:"vibe64-temporary-ai__spacer"},null,-1)),task.busy?(openBlock(),createBlock(VBtn,{key:0,color:"error","prepend-icon":unref(mdiStopCircleOutline),size:"small",type:"button",variant:"tonal",disabled:task.status==="starting",loading:stoppingTaskId.value===task.id,onClick:$event=>stopTask(task.id)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(" Stop ",-1)])]),_:1},8,["prepend-icon","disabled","loading","onClick"])):(openBlock(),createBlock(VBtn,{key:1,ref_for:true,ref:element=>setTaskSendButton(task.id,element),"aria-label":"Send to temporary AI",color:"primary",disabled:task.recoveryOutcome==="checking"||!task.draft.trim()||!attachmentState.canSubmit,icon:unref(mdiArrowUp),size:"small",title:"Send to temporary AI",type:"button",variant:"flat",onClick:$event=>sendTask(task.id)},null,8,["disabled","icon","onClick"]))])]),_:2},1032,["model-value","attachments-enabled","disabled","session-id","onAttachmentsChange","onSubmit","onUpdate:modelValue"])),[[vShow,task.id===unref(activeTask).id]])}),128))],64)):createCommentVNode("",true),taskToClose.value?(openBlock(),createBlock(VDialog,{key:1,"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[10]||(_cache[10]=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_13$3,toDisplayString(actionErrors.value[taskToClose.value.id]),1)):createCommentVNode("",true)]),_:1}),createVNode(VCardActions,{class:"flex-wrap"},{default:withCtx(()=>[createVNode(VBtn,{disabled:closingTask.value,onClick:_cache[4]||(_cache[4]=$event=>closeTaskId.value="")},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode("Keep chat open",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{color:"error",loading:closingTask.value,onClick:_cache[5]||(_cache[5]=$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)],512)):createCommentVNode("",true)}}};const Vibe64TemporaryAiWorkspace=_export_sfc(_sfc_main$9,[["__scopeId","data-v-31db016b"]]);const AGENT_SETTINGS_STORAGE_KEY="vibe64:agent-settings";function normalizeAgentSettingsEmail(value2=""){return String(value2||"").trim().toLowerCase()}function agentSettingsStorageKey(baseKey="",projectSlug="",email=""){const projectKey=vibe64ProjectScopedStorageKey(baseKey,projectSlug);const normalizedEmail=normalizeAgentSettingsEmail(email);return normalizedEmail?`${projectKey}:user:${normalizedEmail}`:projectKey}function useVibe64AgentSettings(){const projectSlug=useVibe64ProjectSlug();const storageKey=computed(()=>agentSettingsStorageKey(AGENT_SETTINGS_STORAGE_KEY,projectSlug.value,""));const settings=ref(defaultVibe64AgentSettings());function load(){settings.value=normalizeVibe64AgentSettings(readLocalStorageJson(storageKey.value,defaultVibe64AgentSettings()))}function update(partial={}){settings.value=normalizeVibe64AgentSettings({...settings.value,...partial&&typeof partial==="object"&&!Array.isArray(partial)?partial:{}})}watch(storageKey,load,{immediate:true});watch(settings,value2=>{writeLocalStorageJson(storageKey.value,normalizeVibe64AgentSettings(value2))},{deep:true});return{settings,update}}function messageText(value2=""){return String(value2||"").trim()}function conversationTurns(conversationLog={}){if(Array.isArray(conversationLog==null?void 0:conversationLog.turns)){return conversationLog.turns}return Array.isArray(conversationLog)?conversationLog:[]}function latestAssistantMessageAwaitingUserReply(conversationLog={}){var _a,_b;const turns=conversationTurns(conversationLog);for(let turnIndex=turns.length-1;turnIndex>=0;turnIndex-=1){const turn=turns[turnIndex];const messages=Array.isArray(turn==null?void 0:turn.messages)?turn.messages:[];if(messages.length){for(let index=messages.length-1;index>=0;index-=1){const message=messages[index];const text=messageText(message==null?void 0:message.text);if(!text){continue}if((message==null?void 0:message.role)==="user"){return""}if((message==null?void 0:message.role)==="assistant"){return text}}continue}if(messageText((_a=turn==null?void 0:turn.user)==null?void 0:_a.text)){return""}const assistantText=messageText((_b=turn==null?void 0:turn.assistant)==null?void 0:_b.text);if(assistantText){return assistantText}}return""}function normalizedGitActorText(value2=""){return String(value2||"").trim()}function sessionUsesGithub(session={}){const metadata=(session==null?void 0:session.metadata)&&typeof session.metadata==="object"&&!Array.isArray(session.metadata)?session.metadata:{};const remoteUrl=normalizedGitActorText(metadata.source_remote_url||metadata.github_repository||session.sourceRemoteUrl||session.githubRepository);if(!remoteUrl){return false}if(normalizedGitActorText(metadata.github_repository||session.githubRepository)){return true}try{const url=new URL(remoteUrl);return url.hostname.toLowerCase()==="github.com"}catch{return/^(?:git@|ssh:\/\/git@)github\.com(?::|\/)/iu.test(remoteUrl)}}function sessionGithubCommandActor(session={}){const metadata=(session==null?void 0:session.metadata)&&typeof session.metadata==="object"&&!Array.isArray(session.metadata)?session.metadata:{};const scope=normalizedGitActorText(metadata.session_git_command_actor_scope);const userKey=normalizedGitActorText(metadata.session_git_command_actor_user_key);const account=scope==="local"?"local GitHub":userKey;const available=sessionUsesGithub(session);if(!account){return{active:false,available,displayLabel:"not selected",label:"GitHub: not selected",title:"No GitHub command actor is selected for this session yet."}}return{active:true,available,displayLabel:account,label:`GitHub: ${account}`,title:`GitHub commands for this session run as ${account}.`}}function resolvedModuleComponent(moduleValue){return(moduleValue==null?void 0:moduleValue.default)||moduleValue}function defineVibe64AsyncComponent({label="Vibe64 module",loader,minHeight=""}={}){if(typeof loader!=="function"){throw new TypeError("defineVibe64AsyncComponent requires a loader function.")}return defineComponent({name:"Vibe64AsyncComponent",inheritAttrs:false,setup(_props,context){const component=shallowRef(null);const error=ref(null);const loading=ref(false);const asyncModuleRecoveryRuntime=useShellAsyncModuleRecoveryRuntime();let disposed=false;let requestId=0;async function load(){var _a;const activeRequestId=requestId+1;requestId=activeRequestId;loading.value=true;error.value=null;try{const loaded=resolvedModuleComponent(await loader());if(disposed||activeRequestId!==requestId){return false}component.value=markRaw(loaded);return true}catch(loadError){if(disposed||activeRequestId!==requestId){return false}component.value=null;error.value=loadError;(_a=asyncModuleRecoveryRuntime==null?void 0:asyncModuleRecoveryRuntime.notify)==null?void 0:_a.call(asyncModuleRecoveryRuntime,loadError,{label,stale:isDynamicImportError(loadError)});return false}finally{if(!disposed&&activeRequestId===requestId){loading.value=false}}}onBeforeUnmount(()=>{disposed=true;requestId+=1});void load();return()=>{if(component.value){return h(component.value,context.attrs,context.slots)}const errorValue=error.value;const stale=isDynamicImportError(errorValue);return h(Vibe64AsyncModuleState,{class:context.attrs.class,style:context.attrs.style,label,loading:loading.value,message:errorValue?dynamicImportErrorMessage(errorValue,{label,stale}):`Loading ${label}.`,minHeight,stale,onReload:()=>{var _a;return(_a=asyncModuleRecoveryRuntime==null?void 0:asyncModuleRecoveryRuntime.reload)==null?void 0:_a.call(asyncModuleRecoveryRuntime)},onRetry:load})}}})}const VIBE64_WELCOME_NAME_KEY=Symbol("vibe64-welcome-name");const DIRECT_SESSION_TOOL_IDS=new Set(["info","changes","repository","editor","database","system","ai-terminal"]);const STANDALONE_SESSION_TOOL_IDS=new Set(["editor","database","system"]);const 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.";const 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.";const 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.";const NUMBERED_QUESTION_UNSURE_VALUE="I am not sure";const NUMBERED_QUESTION_UNSURE_CHOICE=Object.freeze({label:NUMBERED_QUESTION_UNSURE_VALUE,recommended:false,selectLabel:NUMBERED_QUESTION_UNSURE_VALUE,value:NUMBERED_QUESTION_UNSURE_VALUE});const EXECUTION_CAPACITY_ERROR_CODES=new Set(["vibe64_capacity_rejected"]);const 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_economy_runtime_cleanup_required","vibe64_codex_economy_runtime_metadata_failed","vibe64_execution_cleanup_required","vibe64_execution_drain_failed","vibe64_execution_ownership_unknown","vibe64_managed_execution_provider_unavailable"]);const SHORT_ACTION_DISMISSALS_STORAGE_PREFIX="vibe64:short-action-dismissals:v1";const vibe64AutopilotViewEmits=["busy-change","chat-attention","execution-attention","project-attention"];const vibe64AutopilotViewProps={active:{default:true,type:Boolean},agentConnectionStatus:{default:"connected",type:String},chatCollapsed:{default:false,type:Boolean},cancelAgentMessage:{default:async()=>false,type:Function},conversationLog:{default:()=>({}),type:Object},githubActorTeleportTarget:{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(value2=""){return String(value2||"").trim()}function composerDraftAfterAcceptedSubmission(currentDraft="",submittedDraft=""){const current=String(currentDraft||"");const submitted=String(submittedDraft||"");if(current===submitted){return""}return submitted&&current.startsWith(submitted)?current.slice(submitted.length):current}function agentConnectionThinkingLabel({active=false,status="connected"}={}){if(!active||status==="connected"){return""}if(status==="disconnected"){return"Connection lost — assistant status unknown."}return status==="reconciling"?"Checking assistant status...":"Assistant status could not be verified."}function normalizeProjectPane$1(value2=""){return value2==="dashboard"?"dashboard":"preview"}function sessionNavLabel(session={}){var _a;const name=normalizedAgentTurnText((session==null?void 0:session.sessionName)||((_a=session==null?void 0:session.metadata)==null?void 0:_a.issue_word));if(name){return name}const sessionId=normalizedAgentTurnText(session==null?void 0:session.sessionId);return sessionId.includes("_")?sessionId.split("_").slice(-2).join("_"):sessionId.slice(0,12)}function workspaceSetupFixPrompt(workspaceSetup={}){const diagnostic=normalizedAgentTurnText(workspaceSetup==null?void 0:workspaceSetup.diagnostic)||"Workspace preparation did not complete.";const transcript=normalizedAgentTurnText(workspaceSetup==null?void 0:workspaceSetup.transcript);const recentTranscript=transcript.length>12e3?`[Earlier preparation output omitted.]
7
+ ${transcript.slice(-12e3)}`:transcript;return["Workspace preparation needs attention.",`Diagnostic:
8
+ ${diagnostic}`,recentTranscript?`Recent preparation output:
9
+ ${recentTranscript}`:"","Diagnose and repair the current workspace while preserving its existing work.","When your turn finishes, Vibe64 will automatically rerun its deterministic workspace preparation. Do not merely tell the user to retry.","If the repair needs information only the user can provide, ask for it in this temporary conversation."].filter(Boolean).join("\n\n")}function previewIdentityFixPrompt({error="",identity={}}={}){const name=normalizedAgentTurnText(identity==null?void 0:identity.name)||"configured identity";const type=normalizedAgentTurnText(identity==null?void 0:identity.type)||"selector";const value2=normalizedAgentTurnText(identity==null?void 0:identity.value)||"unknown";const diagnostic=normalizedAgentTurnText(error)||"The application rejected the identity.";return[`The managed preview could not sign in as \`${name}\` (${type}: \`${value2}\`):`,diagnostic,"Please diagnose and fix this in the current application. Ensure its app-owned, idempotent development seed creates this user profile and any workspace membership the app requires in every fresh database, then run the normal database preparation command and verify the identity exchange. Keep preview authentication material host-managed; do not add, reveal, or hardcode Vibe64 secrets."].join("\n\n")}const REPOSITORY_TEMPORARY_AI_GIT_BOUNDARY=["Vibe64—not Temporary AI—owns every repository operation. The failed operation has already been rolled back.","You may inspect Git read-only and edit ordinary working-tree files in this session. Do not change HEAD, branches, refs, the index, stashes, remotes, commits, checkpoints, or repository configuration.","Do not run git add, commit, checkout, switch, restore, reset, clean, stash, merge, rebase, cherry-pick, revert, pull, push, fetch, or update-ref. Do not create a recovery ref or stash; Vibe64 already owns durable recovery.","Record the initial HEAD and index with read-only commands, leave both byte-for-byte unchanged, and do not publish. Resolve only by editing the conflicting working-tree files; Vibe64 owns applying and verifying the repository operation.","Preserve the intended behavior of both the latest saved work and this session. Do not hand-edit generated Genesis maps; Vibe64 regenerates its derived artifacts. A clean index after rollback is not proof that the conflict is resolved."].join("\n");const UPDATE_REPAIR_MESSAGES={completion:"File repairs prepared. Vibe64 must check Update before this repair is finished.",nextStep:"Vibe64 will check Update after the repair.",handoff:["Your task is to prepare the file repair, not to run or complete the rebase yourself. Return kind=complete with a factual report as soon as the edits and focused checks are ready for Vibe64 to try Update. Vibe64 then runs Update automatically and returns remaining conflicts to this same conversation.","Return kind=continue only when you need an actual user decision, and ask that specific question. Do not wait for the user to click Rebase or tell them to open another repair chat.","Describe progress in terms of the user's features and remaining work. Keep HEAD/index/ref bookkeeping in the technical checks, not routine progress or the final reply. Passing application tests is not proof that Update succeeded."].join("\n")};const TEMPORARY_AI_RECOVERY_NOTICE="This is a separate temporary chat. Temporary AI can edit this session to make the repair. Follow progress here and reply below if it needs a decision.";function repositoryTemporaryAiDedupeKey({code="",diagnostic="",sessionId=""}={}){return["repository-recovery",normalizedAgentTurnText(sessionId),normalizedAgentTurnText(code),normalizedAgentTurnText(diagnostic)].join("|")}function useVibe64AutopilotView(props,emit,{assistantAccessLoading=null,assistantCanRequestMessage=null,assistantCanUseAi=null,assistantRestrictionMessage=null,onAttachmentsAccepted=null,requestTemporaryAi=null,sendMainChatMessage=null}={}){const route=useRoute();const router=useRouter();const projectSlug=useVibe64ProjectSlug();const Vibe64OutputControls=defineVibe64AsyncComponent({label:"Launch controls",loader:()=>__vitePreload(()=>import("./Vibe64OutputControls-DDILWOYb.js"),true?__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]):void 0),minHeight:"10rem"});const agentSettings=useVibe64AgentSettings();const preferredName=inject(VIBE64_WELCOME_NAME_KEY,()=>{const accounts=useVibe64Accounts();return computed(()=>{var _a,_b;return(_b=(_a=accounts.status.value)==null?void 0:_a.personalProfile)==null?void 0:_b.preferredName})},true);const currentAgentSettings=computed(()=>agentSettings.settings.value);const requestAgentSettings=computed(()=>{const settings=currentAgentSettings.value||{};return String(settings.providerId||"")!==VIBE64_DEFAULT_AGENT_PROVIDER_ID||String(settings.model||"")||String(settings.thinking||"")?settings:null});const sessionId=computed(()=>{var _a;return normalizedAgentTurnText((_a=props.session)==null?void 0:_a.sessionId)});const assistantAccessConfigured=assistantCanUseAi!==null;const assistantAccessPending=computed(()=>assistantAccessConfigured&&unref(assistantAccessLoading)===true);const currentAssistantRestrictionMessage=computed(()=>normalizedAgentTurnText(unref(assistantRestrictionMessage))||"The selected AI connection is unavailable for this account.");const assistantDirectAllowed=computed(()=>!assistantAccessConfigured||unref(assistantCanUseAi)===true);const assistantMainChatAllowed=computed(()=>!assistantAccessConfigured||unref(assistantCanUseAi)===true||unref(assistantCanRequestMessage)===true);const sessionGithubActor=computed(()=>sessionGithubCommandActor(props.session||{}));const sessionGithubActorHeaderVisible=computed(()=>Boolean(props.active&&sessionGithubActor.value.available&&String(props.githubActorTeleportTarget||"").trim()));const sessionSourceRoot=computed(()=>vibe64SessionSourcePath(props.session||{}));const activeAgentTurn=computed(()=>{var _a,_b;const turn=(_b=(_a=props.session)==null?void 0:_a.agentSession)==null?void 0:_b.turn;return turn&&typeof turn==="object"&&!Array.isArray(turn)?turn:{}});const agentActive=computed(()=>activeAgentTurn.value.active===true);const agentSteerable=computed(()=>Boolean(agentActive.value&&normalizedAgentTurnText(activeAgentTurn.value.id)&&normalizedAgentTurnText(activeAgentTurn.value.state)==="active"&&props.agentConnectionStatus==="connected"));const chatCollapsed=computed(()=>Boolean(props.chatCollapsed));const sessionToolbarVisible=computed(()=>{var _a;return Boolean(Array.isArray((_a=props.sessionToolbar)==null?void 0:_a.sessions)&&props.sessionToolbar.sessions.length)});const composerDraft=ref("");const composerAttachments=ref([]);const composerRetrySubmission=ref(null);const composerSending=ref(false);const composerSubmissionKind=ref("");const conversationFollowLatestKey=ref(0);const interrupting=ref(false);const optimisticMessages=ref([]);const questionAnswers=ref({});const dismissedNumberedQuestionText=ref("");const submittedQuestionText=ref("");const saveWorkConfirmOpen=ref(false);const saveWorkError=ref("");const saveWorkFailure=ref(null);const saveWorkAttempt=ref(null);const saveWorkSending=ref(false);const savedCommitDeslop=ref("");const savedCommitDeslopSending=ref(false);const selectedAnswerChoice=ref("");const shortActionDismissals=ref({saveWork:"",workspaceSetup:""});const workspaceSetupRetryError=ref("");const workspaceSetupRetrying=ref(false);const workspaceSetupFixSending=ref(false);const workspaceSetupFixTaskId=ref("");const repositoryRecoverySending=ref(false);const checkedUpdateRepairRuns=new Map;const previewAttachmentState=ref({attachDiagnostics:null,capture:null,captureAvailable:false,captureBusy:false,diagnosticsAvailable:false,diagnosticsBusy:false});let messageSequence=0;let repositoryRequestSequence=0;const shortActionDismissalsStorageKey=computed(()=>{const slug=normalizedAgentTurnText(projectSlug.value);const selectedSessionId=sessionId.value;return slug&&selectedSessionId?`${SHORT_ACTION_DISMISSALS_STORAGE_PREFIX}:${encodeURIComponent(slug)}:${encodeURIComponent(selectedSessionId)}`:""});watch(shortActionDismissalsStorageKey,storageKey=>{const stored=readLocalStorageJson(storageKey,{});shortActionDismissals.value={saveWork:normalizedAgentTurnText(stored==null?void 0:stored.saveWork),workspaceSetup:normalizedAgentTurnText(stored==null?void 0:stored.workspaceSetup)}},{flush:"sync",immediate:true});function dismissShortAction(name,activityKey=""){const key=normalizedAgentTurnText(activityKey);const storageKey=shortActionDismissalsStorageKey.value;if(!key||!storageKey){return false}shortActionDismissals.value={...shortActionDismissals.value,[name]:key};writeLocalStorageJson(storageKey,shortActionDismissals.value);return true}const latestAssistantQuestionText=computed(()=>latestAssistantMessageAwaitingUserReply(props.conversationLog));const numberedQuestionInput=computed(()=>parseNumberedQuestionPrompt(latestAssistantQuestionText.value));const numberedQuestions=computed(()=>[dismissedNumberedQuestionText.value,submittedQuestionText.value].includes(latestAssistantQuestionText.value)?[]:numberedQuestionInput.value.questions||[]);const numberedQuestionSelectItems=computed(()=>Object.fromEntries(numberedQuestions.value.map(question=>{const choices=Array.isArray(question.choices)?question.choices:[];const includesUnsureChoice=choices.some(choice=>String((choice==null?void 0:choice.value)||"").trim().toLowerCase()===NUMBERED_QUESTION_UNSURE_VALUE.toLowerCase());return[question.name,includesUnsureChoice?choices:[...choices,NUMBERED_QUESTION_UNSURE_CHOICE]]})));const answerChoices=computed(()=>numberedQuestions.value.length||submittedQuestionText.value===latestAssistantQuestionText.value?[]:parseAnswerChoicePrompt(latestAssistantQuestionText.value).choices||[]);const structuredQuestionActive=computed(()=>Boolean(numberedQuestions.value.length||answerChoices.value.length));const repositoryOperationActive=computed(()=>{var _a,_b;return[(_a=props.workState)==null?void 0:_a.operation,(_b=props.workState)==null?void 0:_b.updateOperation].some(operation=>["queued","running","starting"].includes(String((operation==null?void 0:operation.status)||"").trim().toLowerCase()))});const sessionInteractionDisabled=computed(()=>Boolean(!props.active||!sessionId.value||props.sessionSelectionArchived));const composerDisabled=computed(()=>Boolean(sessionInteractionDisabled.value||!assistantMainChatAllowed.value));const composerAttachmentsSupported=computed(()=>true);const composerAttachmentsEnabled=computed(()=>Boolean(composerAttachmentsSupported.value&&!composerDisabled.value&&!composerSending.value&&!interrupting.value&&!agentActive.value&&!repositoryOperationActive.value));const composerRetryMatchesDraft=computed(()=>{const retry=composerRetrySubmission.value;const draft=String(composerDraft.value||"");const submitted=String((retry==null?void 0:retry.draftSnapshot)||"");return Boolean(retry&&submitted&&(draft===submitted||draft.startsWith(submitted)))});const composerSubmitMode=computed(()=>{if(agentActive.value&&!agentSteerable.value){return"waiting"}if(composerSending.value){return composerSubmissionKind.value==="steer"?"steering":"sending"}if(agentActive.value){return composerRetryMatchesDraft.value?"retry":"steer"}return composerRetryMatchesDraft.value?"retry":"send"});const composerSubmitLabel=computed(()=>({retry:"Retry",sending:"Sending…",steer:"Steer",steering:"Steering…",waiting:"Waiting…"})[composerSubmitMode.value]||"");const composerSubmitAriaLabel=computed(()=>({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(()=>({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(()=>Boolean(!composerDisabled.value&&!composerSending.value&&!interrupting.value&&!repositoryOperationActive.value&&(!agentActive.value||agentSteerable.value)&&(!agentActive.value||composerAttachments.value.length===0)&&(numberedQuestions.value.length?numberedQuestions.value.every(question=>String(questionAnswers.value[question.name]||"").trim()):answerChoices.value.length?selectedAnswerChoice.value||composerDraft.value.trim():composerDraft.value.trim())));const agentStopVisible=computed(()=>agentActive.value);const agentStopEnabled=computed(()=>Boolean(agentStopVisible.value&&!interrupting.value&&!composerSending.value));const assistantConnectionReady=computed(()=>props.agentConnectionStatus==="connected");const thinkingVisible=computed(()=>Boolean(agentActive.value||composerSending.value||!assistantConnectionReady.value&&!sessionInteractionDisabled.value));const thinkingLabel=computed(()=>agentConnectionThinkingLabel({active:!sessionInteractionDisabled.value,status:props.agentConnectionStatus})||(agentActive.value?"Assistant is working...":"")||(composerSending.value?"Sending to assistant...":""));const composerHint=computed(()=>structuredQuestionActive.value?"Answer the assistant, then send one combined reply.":"");const composerPlaceholder=computed(()=>numberedQuestions.value.length?"Optional additional context…":answerChoices.value.length?"Choose an answer above, or type another answer…":"");const workspaceSetup=computed(()=>{var _a;const value2=(_a=props.session)==null?void 0:_a.workspaceSetup;return value2&&typeof value2==="object"&&!Array.isArray(value2)?value2:{}});const workspaceSetupStatus=computed(()=>{var _a;const status=normalizedAgentTurnText((_a=workspaceSetup.value)==null?void 0:_a.status);return["ambiguous","failed","required","running","succeeded"].includes(status)?status:"unconfigured"});const workspaceSetupActivityKey=computed(()=>{var _a,_b;const operationKey=normalizedAgentTurnText(((_a=workspaceSetup.value)==null?void 0:_a.startedAt)||((_b=workspaceSetup.value)==null?void 0:_b.updatedAt));return operationKey?`workspace-setup:${operationKey}`:""});const workspaceSetupDismissed=computed(()=>Boolean(workspaceSetupActivityKey.value&&shortActionDismissals.value.workspaceSetup===workspaceSetupActivityKey.value));const workspaceSetupRunning=computed(()=>workspaceSetupStatus.value==="running");const workspaceSetupNeedsAttention=computed(()=>["failed","ambiguous","required"].includes(workspaceSetupStatus.value));const workspaceSetupOutput=computed(()=>{var _a;return normalizedAgentTurnText((_a=workspaceSetup.value)==null?void 0:_a.transcript)||workspaceSetupDiagnostic.value});const workspaceSetupTitle=computed(()=>({ambiguous:"Workspace setup needs a choice",failed:"Workspace preparation failed",required:"Workspace preparation required",running:"Preparing workspace…",succeeded:"Workspace prepared"})[workspaceSetupStatus.value]||"");const workspaceSetupCurrentLabel=computed(()=>{var _a;return workspaceSetupRunning.value?normalizedAgentTurnText((_a=workspaceSetup.value)==null?void 0:_a.currentLabel):""});const workspaceSetupDiagnostic=computed(()=>{var _a;return workspaceSetupRetryError.value||normalizedAgentTurnText((_a=workspaceSetup.value)==null?void 0:_a.diagnostic)});const workspaceSetupRetryDisabled=computed(()=>Boolean(workspaceSetupRunning.value||workspaceSetupRetrying.value||saveWorkSending.value||saveWorkOperationActive.value||agentActive.value||!sessionId.value||props.sessionSelectionArchived));const workspaceSetupAskDisabled=computed(()=>Boolean(!workspaceSetupNeedsAttention.value||workspaceSetupFixSending.value||!props.active||!sessionId.value||props.sessionSelectionArchived||repositoryOperationActive.value||!assistantDirectAllowed.value));async function retryWorkspaceSetup(){if(workspaceSetupRetryDisabled.value){return false}workspaceSetupRetryError.value="";workspaceSetupRetrying.value=true;try{return await props.retryWorkspaceSetup()!==false}catch(error){workspaceSetupRetryError.value=normalizedAgentTurnText((error==null?void 0:error.message)||error)||"Workspace preparation could not be started.";return false}finally{workspaceSetupRetrying.value=false}}function dismissWorkspaceSetupActivity(){return dismissShortAction("workspaceSetup",workspaceSetupActivityKey.value)}async function askCodexToFixWorkspaceSetup(){if(workspaceSetupAskDisabled.value||typeof requestTemporaryAi!=="function"){return false}const setup={...workspaceSetup.value,diagnostic:workspaceSetupDiagnostic.value};workspaceSetupFixSending.value=true;try{const result=await requestTemporaryAi({completionMessage:"AI repair finished. Vibe64 is verifying workspace preparation now.",dedupeKey:["workspace-setup",sessionId.value,workspaceSetupStatus.value,normalizedAgentTurnText(setup.updatedAt),normalizedAgentTurnText(setup.diagnostic)].join("|"),displayMessage:"Fix workspace preparation.",failureMessage:"Temporary AI stopped before confirming completion. Vibe64 is checking whether its edits repaired workspace preparation.",message:workspaceSetupFixPrompt(setup),nextStepMessage:"When the AI finishes, Vibe64 will automatically retry workspace preparation to verify the repair.",policy:"workspace_write",recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,title:"Fix workspace preparation"});const accepted=result!==false&&(result==null?void 0:result.ok)!==false;const taskId=normalizedAgentTurnText(result==null?void 0:result.taskId);if(accepted&&taskId){workspaceSetupFixTaskId.value=taskId}return accepted}finally{workspaceSetupFixSending.value=false}}async function handleTemporaryAiTaskFinished(task={},reportRecovery=()=>{},{force=false}={}){var _a,_b,_c,_d,_e,_f;const taskId=normalizedAgentTurnText(task==null?void 0:task.id);const status=normalizedAgentTurnText(task==null?void 0:task.status);if(task.recoveryOperation==="update"){const runId=normalizedAgentTurnText(task.runId);if(!taskId||!runId||task.sessionId!==sessionId.value||task.busy||["starting","inProgress"].includes(status)||saveWorkSending.value||saveWorkOperationActive.value||!force&&(status!=="completed"||task.outcomeKind!=="complete"||checkedUpdateRepairRuns.get(taskId)===runId)){return false}checkedUpdateRepairRuns.set(taskId,runId);reportRecovery(taskId,{status:"checking",message:"Checking Update…"});const result=await updateBeforeSave();await nextTick();if(task.sessionId!==sessionId.value){return false}const succeeded=(result==null?void 0:result.ok)===true;reportRecovery(taskId,{status:succeeded?"succeeded":"failed",message:succeeded?"Session updated. Your changes were preserved. Nothing was published.":`Update still needs attention: ${saveWorkError.value||"The operation did not confirm success."}`,...!succeeded&&saveWorkCanResolveWithTemporaryAi.value?{retryKey:JSON.stringify([(_a=saveWorkFailure.value)==null?void 0:_a.code,((_d=(_c=(_b=saveWorkFailure.value)==null?void 0:_b.details)==null?void 0:_c.conflictRecovery)==null?void 0:_d.canonicalCommit)||"",((_f=(_e=saveWorkFailure.value)==null?void 0:_e.details)==null?void 0:_f.conflictPaths)||saveWorkError.value]),retryMessage:["Vibe64 ran Update after the prepared repair, but it did not succeed. The working-tree edits remain. Inspect the current state and repair only the remaining conflicts; do not start over or repeat completed work.",`Latest Update diagnostic:
10
+ ${saveWorkError.value}`,UPDATE_REPAIR_MESSAGES.handoff].join("\n\n")}:{}});return"repository-update"}if(taskId!==workspaceSetupFixTaskId.value||!["completed","failed"].includes(status)){return false}workspaceSetupFixTaskId.value="";if(workspaceSetupNeedsAttention.value){await retryWorkspaceSetup()}return"workspace-setup"}async function askCodexToFixPreviewIdentity(input={}){if(typeof requestTemporaryAi!=="function"||!assistantDirectAllowed.value||!props.active||!sessionId.value||props.sessionSelectionArchived||repositoryOperationActive.value){return false}const identity=(input==null?void 0:input.identity)||{};const identityName=normalizedAgentTurnText(identity.name)||"the selected identity";const error=normalizedAgentTurnText(input==null?void 0:input.error);const result=await requestTemporaryAi({completionMessage:"AI repair finished. Try the preview identity again from the sign-in menu.",dedupeKey:["preview-identity",sessionId.value,normalizedAgentTurnText(identity.type),normalizedAgentTurnText(identity.value),error].join("|"),displayMessage:`Fix preview sign-in for ${identityName}.`,failureMessage:"Temporary AI stopped before completing the preview identity repair. Review the error and progress below before trying again.",message:previewIdentityFixPrompt(input),nextStepMessage:"When the AI finishes, try this preview identity again from the sign-in menu.",policy:"workspace_write",recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,title:"Fix preview identity"});return result!==false&&(result==null?void 0:result.ok)!==false}function temporaryAiRecoveryUnavailable(){return Boolean(repositoryRecoverySending.value||typeof requestTemporaryAi!=="function"||!assistantDirectAllowed.value||!props.active||!sessionId.value||props.sessionSelectionArchived||repositoryOperationActive.value)}async function fixRepositoryActionError(){var _a;if(temporaryAiRecoveryUnavailable()||!saveWorkCanResolveWithTemporaryAi.value){return false}const action=saveWorkActivityIsUpdate.value?"Update":"Save";repositoryRecoverySending.value=true;try{const result=await requestTemporaryAi({completionMessage:action==="Update"?UPDATE_REPAIR_MESSAGES.completion:`AI repair finished. Review its result, then retry ${action}.`,dedupeKey:repositoryTemporaryAiDedupeKey({code:(_a=saveWorkFailure.value)==null?void 0:_a.code,diagnostic:saveWorkError.value,sessionId:sessionId.value}),displayMessage:`Fix this ${action} problem without losing work.`,failureMessage:`Temporary AI stopped before completing the ${action} repair. Review the error and progress below before retrying.`,message:[`Help resolve this Vibe64 ${action} problem. Inspect the current session and canonical repository state, preserve all work, and do not publish until the conflict is understood:`,REPOSITORY_TEMPORARY_AI_GIT_BOUNDARY,action==="Update"?UPDATE_REPAIR_MESSAGES.handoff:"",saveWorkError.value].filter(Boolean).join("\n\n"),nextStepMessage:action==="Update"?UPDATE_REPAIR_MESSAGES.nextStep:`Review the repair, then retry ${action}.`,policy:"workspace_write",recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,recoveryOperation:action==="Update"?"update":"",title:`Resolve ${action}`});return result!==false&&(result==null?void 0:result.ok)!==false}finally{repositoryRecoverySending.value=false}}async function fixRepositoryError({code="",error="",title="Resolve repository problem"}={}){const diagnostic=normalizedAgentTurnText(error);const isUpdate=["vibe64_session_update_conflict","vibe64_session_update_history_diverged"].includes(code);if(temporaryAiRecoveryUnavailable()||!diagnostic){return false}repositoryRecoverySending.value=true;try{const result=await requestTemporaryAi({completionMessage:isUpdate?UPDATE_REPAIR_MESSAGES.completion:"AI repair finished. Review its result, then retry the repository operation.",dedupeKey:repositoryTemporaryAiDedupeKey({code,diagnostic,sessionId:sessionId.value}),displayMessage:"Fix this repository problem without losing work.",failureMessage:"Temporary AI stopped before completing the repository repair. Review the error and progress below before retrying.",message:["Help resolve this Vibe64 repository problem. Inspect the current session and canonical repository state, preserve all work, and do not publish until the conflict is understood:",REPOSITORY_TEMPORARY_AI_GIT_BOUNDARY,isUpdate?UPDATE_REPAIR_MESSAGES.handoff:"",diagnostic].join("\n\n"),nextStepMessage:isUpdate?UPDATE_REPAIR_MESSAGES.nextStep:"Review the repair, then retry the repository operation.",policy:"workspace_write",recoveryNotice:TEMPORARY_AI_RECOVERY_NOTICE,recoveryOperation:isUpdate?"update":"",title});return result!==false&&(result==null?void 0:result.ok)!==false}finally{repositoryRecoverySending.value=false}}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(){var _a,_b;return((_b=(_a=previewAttachmentState.value).capture)==null?void 0:_b.call(_a))??false}function attachPreviewDiagnostics(){var _a,_b;return((_b=(_a=previewAttachmentState.value).attachDiagnostics)==null?void 0:_b.call(_a))??false}function nextMessageId(){messageSequence+=1;return createChatMessageId({sequence:messageSequence})}function optimisticMessage(payload={},messageId=""){const now=new Date;return{attachments:Array.isArray(payload==null?void 0:payload.displayAttachments)?payload.displayAttachments:[],createdAt:now.toISOString(),createdAtMs:now.getTime(),error:"",id:messageId,payload,status:"pending",text:normalizedAgentTurnText((payload==null?void 0:payload.displayMessage)||(payload==null?void 0:payload.message))}}function updateOptimisticMessage(messageId="",update={}){optimisticMessages.value=optimisticMessages.value.map(message=>message.id===messageId?{...message,...update}:message)}function settleComposerRetry(retry=composerRetrySubmission.value){var _a;if(!retry||retry.messageId!==((_a=composerRetrySubmission.value)==null?void 0:_a.messageId)){return false}composerDraft.value=composerDraftAfterAcceptedSubmission(composerDraft.value,retry.draftSnapshot);composerRetrySubmission.value=null;return true}async function sendChatPayload(payload={},{messageId:existingMessageId="",submissionKind="send"}={}){var _a;if(composerSending.value||!normalizedAgentTurnText(payload==null?void 0:payload.message)){return false}const messageId=String(existingMessageId||"").trim()||nextMessageId();const sendingSessionId=sessionId.value;const sendingProjectSlug=projectSlug.value;const optimistic=optimisticMessage(payload,messageId);optimisticMessages.value=[...optimisticMessages.value.filter(message=>message.id!==messageId),optimistic];composerSubmissionKind.value=submissionKind==="steer"?"steer":"send";composerSending.value=true;let acknowledgeMessage;const receipt=new Promise(resolve=>{acknowledgeMessage=resolve});const stopWatchingReceipt=watch([sessionId,projectSlug,()=>{var _a2;return(_a2=props.conversationLog)==null?void 0:_a2.turns}],([currentSessionId,currentProjectSlug,turns])=>{if(currentSessionId!==sendingSessionId||currentProjectSlug!==sendingProjectSlug){acknowledgeMessage(false)}else if(Array.isArray(turns)&&turns.some(turn=>{var _a2;return((_a2=turn==null?void 0:turn.user)==null?void 0:_a2.messageId)===messageId})){acknowledgeMessage({ok:true})}},{immediate:true});try{const sendMessage=typeof sendMainChatMessage==="function"?sendMainChatMessage:props.sendAgentMessage;const response=await Promise.race([sendMessage({...payload,...requestAgentSettings.value?{agentSettings:requestAgentSettings.value}:{},messageId}),receipt]);if(sessionId.value!==sendingSessionId||projectSlug.value!==sendingProjectSlug){return false}const accepted=response!==false&&(response==null?void 0:response.ok)!==false;const suggested=(response==null?void 0:response.suggested)===true;if(!accepted){updateOptimisticMessage(messageId,{error:"Message could not be sent.",status:"failed"})}if(accepted&&suggested){optimisticMessages.value=optimisticMessages.value.filter(message=>message.id!==messageId)}else if(accepted){conversationFollowLatestKey.value+=1}if(accepted&&((_a=payload.attachmentIds)==null?void 0:_a.length)){onAttachmentsAccepted==null?void 0:onAttachmentsAccepted(payload.attachmentIds)}return accepted}catch(error){if(sessionId.value!==sendingSessionId||projectSlug.value!==sendingProjectSlug){return false}const message=normalizedAgentTurnText((error==null?void 0:error.message)||error)||"Message could not be sent.";updateOptimisticMessage(messageId,{error:message,status:"failed"});const attention=executionAttentionForError(error,message);if(attention){emit("execution-attention",attention)}return false}finally{stopWatchingReceipt();if(sessionId.value===sendingSessionId&&projectSlug.value===sendingProjectSlug){composerSending.value=false;composerSubmissionKind.value=""}}}async function submitComposerMessage(){var _a;if(!composerCanSubmit.value){return false}const retry=composerRetryMatchesDraft.value?composerRetrySubmission.value:null;if(!retry){composerRetrySubmission.value=null}const draftSnapshot=(retry==null?void 0:retry.draftSnapshot)||composerDraft.value;const additionalContext=draftSnapshot.trim();const message=numberedQuestions.value.length?[numberedQuestionSubmissionText(numberedQuestions.value,questionAnswers.value),additionalContext].filter(Boolean).join("\n\n"):selectedAnswerChoice.value||additionalContext;const payload=(retry==null?void 0:retry.payload)||chatMessagePayload(message,composerAttachments.value);if(!payload){return false}const submissionKind=(retry==null?void 0:retry.submissionKind)||(agentSteerable.value?"steer":"send");const questionTextSnapshot=(retry==null?void 0:retry.questionTextSnapshot)||(structuredQuestionActive.value?latestAssistantQuestionText.value:"");const messageId=(retry==null?void 0:retry.messageId)||nextMessageId();if(!retry){submittedQuestionText.value=questionTextSnapshot;composerDraft.value="";questionAnswers.value={};selectedAnswerChoice.value=""}const sendingSessionId=sessionId.value;const sendingProjectSlug=projectSlug.value;const accepted=await sendChatPayload(payload,{messageId,submissionKind});if(sessionId.value!==sendingSessionId||projectSlug.value!==sendingProjectSlug){return false}if(accepted&&retry){submittedQuestionText.value=questionTextSnapshot;if(!settleComposerRetry(retry)){composerDraft.value=composerDraftAfterAcceptedSubmission(composerDraft.value,draftSnapshot)}questionAnswers.value={};selectedAnswerChoice.value=""}else if(!accepted&&submissionKind==="steer"&&(retry||!composerDraft.value)){if(!retry){composerDraft.value=draftSnapshot}const optimistic=optimisticMessageById(messageId)||{createdAtMs:Date.now(),id:messageId,text:normalizedAgentTurnText(payload.displayMessage||payload.message)};composerRetrySubmission.value={draftSnapshot,messageId,optimistic,payload,questionTextSnapshot,submissionKind};if(!unmatchedOptimisticMessages((_a=props.conversationLog)==null?void 0:_a.turns,[optimistic]).length){settleComposerRetry(composerRetrySubmission.value)}}return accepted}function dismissNumberedQuestions(){if(!numberedQuestions.value.length){return false}dismissedNumberedQuestionText.value=latestAssistantQuestionText.value;questionAnswers.value={};return true}function optimisticMessageById(messageId=""){return optimisticMessages.value.find(message=>message.id===messageId)||null}async function cancelOptimisticMessage(messageId=""){var _a;const message=optimisticMessageById(messageId);if(!message){return false}if(message.status==="pending"&&await props.cancelAgentMessage(messageId)===false){return false}if(((_a=composerRetrySubmission.value)==null?void 0:_a.messageId)===messageId){settleComposerRetry(composerRetrySubmission.value)}optimisticMessages.value=optimisticMessages.value.filter(item=>item.id!==messageId);return true}function editOptimisticMessage(messageId=""){const message=optimisticMessageById(messageId);if(!message||message.status!=="failed"){return false}const currentDraft=String(composerDraft.value||"");composerDraft.value=!currentDraft?message.text:currentDraft.startsWith(message.text)?currentDraft:[message.text,currentDraft].filter(Boolean).join("\n\n");optimisticMessages.value=optimisticMessages.value.filter(item=>item.id!==messageId);return true}async function resendOptimisticMessage(messageId=""){var _a;const message=optimisticMessageById(messageId);if(!message||message.status!=="failed"){return false}const retry=((_a=composerRetrySubmission.value)==null?void 0:_a.messageId)===messageId?composerRetrySubmission.value:null;optimisticMessages.value=optimisticMessages.value.filter(item=>item.id!==messageId);const accepted=await sendChatPayload(message.payload,{messageId,submissionKind:(retry==null?void 0:retry.submissionKind)||(agentSteerable.value?"steer":"send")});if(accepted){settleComposerRetry(retry)}return accepted}const toolbarRepositoryWorkState=computed(()=>{var _a,_b,_c;const selectedId=String(((_a=props.session)==null?void 0:_a.sessionId)||"").trim();const sessions=Array.isArray((_b=props.sessionToolbar)==null?void 0:_b.sessions)?props.sessionToolbar.sessions:[];return((_c=sessions.find(session=>String((session==null?void 0:session.sessionId)||"").trim()===selectedId))==null?void 0:_c.repositoryWorkState)||null});const saveWorkRepositoryState=computed(()=>{const inspected=props.workState&&typeof props.workState==="object"?props.workState:{};const monitored=toolbarRepositoryWorkState.value;const inspectedAt=Date.parse(String(inspected.checkedAt||""))||0;const monitoredAt=Date.parse(String((monitored==null?void 0:monitored.checkedAt)||""))||0;const monitoredState=String((monitored==null?void 0:monitored.state)||"");if(!monitored||monitored.updateStatusPending!==true&&monitoredAt<inspectedAt){return inspected}const monitoredUnsaved=monitoredState==="unsaved"?true:["saved","update_available"].includes(monitoredState)?false:inspected.unsaved;return{...inspected,checkedAt:monitored.checkedAt||inspected.checkedAt,error:monitoredState==="unavailable"?inspected.error||"Repository status is unavailable.":inspected.error||"",loading:monitoredState==="checking",unsaved:monitoredUnsaved,updateAvailable:monitored.updateAvailable===true||["update_available","updating"].includes(monitoredState),updateStatusPending:monitored.updateStatusPending===true||monitoredState==="updating"}});const saveWorkUnsaved=computed(()=>{var _a;return((_a=saveWorkRepositoryState.value)==null?void 0:_a.unsaved)===true});const saveWorkRequiresUpdate=computed(()=>{var _a,_b;return Boolean(((_a=saveWorkRepositoryState.value)==null?void 0:_a.updateAvailable)===true||((_b=saveWorkRepositoryState.value)==null?void 0:_b.updateStatusPending)===true)});const saveWorkRepositoryBusy=computed(()=>{var _a;return["saving","updating"].includes(String(((_a=toolbarRepositoryWorkState.value)==null?void 0:_a.state)||""))});const updateWorkDisabled=computed(()=>{var _a,_b;return Boolean(sessionInteractionDisabled.value||!assistantConnectionReady.value||agentActive.value||composerSending.value||saveWorkSending.value||saveWorkRepositoryBusy.value||((_a=saveWorkRepositoryState.value)==null?void 0:_a.loading)||((_b=saveWorkRepositoryState.value)==null?void 0:_b.error))});const saveWorkDisabled=computed(()=>Boolean(updateWorkDisabled.value||!saveWorkRequiresUpdate.value&&!assistantDirectAllowed.value||!saveWorkRequiresUpdate.value&&!saveWorkUnsaved.value));const saveWorkActionLabel=computed(()=>saveWorkRequiresUpdate.value?"Update this session (rebase)":"Save work");const saveWorkHeaderAriaLabel=computed(()=>saveWorkRequiresUpdate.value?"Update selected session (rebase)":"Save selected session work");const saveWorkHeaderVisible=computed(()=>Boolean(props.active&&sessionId.value));const saveWorkTitle=computed(()=>{var _a,_b;if(!assistantConnectionReady.value){return props.agentConnectionStatus==="reconciling"?"Checking the assistant connection before saving or updating":"Waiting for the assistant to reconnect before saving or updating"}if(repositoryOperationActive.value||saveWorkRepositoryBusy.value){return"Wait for the current repository operation to finish"}if(agentActive.value||composerSending.value){return"Wait for the assistant turn to finish before saving or updating"}if((_a=saveWorkRepositoryState.value)==null?void 0:_a.loading){return"Checking whether this session has work to save"}if((_b=saveWorkRepositoryState.value)==null?void 0:_b.error){return"Repository status is unavailable; check for updates before saving"}if(saveWorkRequiresUpdate.value){return saveWorkUnsaved.value?"Update this session (rebase) with the latest saved project version while preserving its unsaved work. Save will be available when the update finishes.":"Update this session (rebase) to the latest saved project version."}if(!saveWorkUnsaved.value){return"No work to save"}if(!assistantDirectAllowed.value){return currentAssistantRestrictionMessage.value}return"Save this session's work to the project repository"});watch(()=>{var _a;const attempt=saveWorkAttempt.value;const activeOperation=(_a=props.workState)==null?void 0:_a.activeOperation;return{attempt,kind:String((activeOperation==null?void 0:activeOperation.kind)||"").trim(),operationId:String((activeOperation==null?void 0:activeOperation.operationId)||"").trim()}},({attempt,kind,operationId})=>{if(!attempt||attempt.operationId||!operationId||kind!==attempt.kind){return}saveWorkAttempt.value={...attempt,operationId}});const saveWorkOperation=computed(()=>{var _a,_b,_c;const saveOperation=((_a=props.workState)==null?void 0:_a.operation)||null;const updateOperation=((_b=props.workState)==null?void 0:_b.updateOperation)||null;const attempt=saveWorkAttempt.value;if(attempt){const operation=attempt.kind==="update"?updateOperation:saveOperation;const operationId=String((operation==null?void 0:operation.operationId)||"").trim();return attempt.operationId&&operationId===attempt.operationId?operation:null}const activeOperation=(_c=props.workState)==null?void 0:_c.activeOperation;const activeOperationId=String((activeOperation==null?void 0:activeOperation.operationId)||"").trim();if(activeOperationId){const operation=(activeOperation==null?void 0:activeOperation.kind)==="update"?updateOperation:saveOperation;return String((operation==null?void 0:operation.operationId)||"").trim()===activeOperationId?operation:null}const saveStatus=String((saveOperation==null?void 0:saveOperation.status)||"").trim().toLowerCase();const updateStatus=String((updateOperation==null?void 0:updateOperation.status)||"").trim().toLowerCase();const saveFailed=saveStatus==="failed";const updateFailed=updateStatus==="failed";if(saveFailed!==updateFailed){return updateFailed?updateOperation:saveOperation}if(saveFailed&&updateFailed){return String((updateOperation==null?void 0:updateOperation.updatedAt)||"")>String((saveOperation==null?void 0:saveOperation.updatedAt)||"")?updateOperation:saveOperation}return null});const saveWorkActivityIsUpdate=computed(()=>{var _a;if(saveWorkAttempt.value){return saveWorkAttempt.value.kind==="update"}return Boolean(((_a=props.workState)==null?void 0:_a.updateOperation)&&saveWorkOperation.value===props.workState.updateOperation||!saveWorkOperation.value&&saveWorkRequiresUpdate.value)});const saveWorkActivityKey=computed(()=>{var _a;const operationId=normalizedAgentTurnText((_a=saveWorkOperation.value)==null?void 0:_a.operationId);if(!operationId){return""}return`${saveWorkActivityIsUpdate.value?"update-session":"save-work"}:${operationId}`});const saveWorkActivityDismissed=computed(()=>Boolean(saveWorkActivityKey.value&&shortActionDismissals.value.saveWork===saveWorkActivityKey.value));const saveWorkActivityLabel=computed(()=>saveWorkActivityIsUpdate.value?"Update this session (rebase)":"Save work");const saveWorkOperationActive=computed(()=>{var _a;return["queued","running","starting"].includes(String(((_a=saveWorkOperation.value)==null?void 0:_a.status)||"").trim().toLowerCase())});const saveWorkOutput=computed(()=>{var _a;return Array.isArray((_a=saveWorkOperation.value)==null?void 0:_a.events)?saveWorkOperation.value.events.map(event=>[event.at,event.message].filter(Boolean).join(" ")).filter(Boolean).join("\n"):""});const saveWorkStatus=computed(()=>{var _a;return String(((_a=saveWorkOperation.value)==null?void 0:_a.status)||(saveWorkSending.value?"starting":""))});const saveWorkStage=computed(()=>{var _a;return String(((_a=saveWorkOperation.value)==null?void 0:_a.stage)||(saveWorkSending.value&&!saveWorkOperation.value?"Waiting for the session to be ready":""))});watch(()=>{var _a,_b,_c,_d,_e;return{code:String(((_a=saveWorkOperation.value)==null?void 0:_a.code)||""),details:((_b=saveWorkOperation.value)==null?void 0:_b.details)||null,error:String(((_c=saveWorkOperation.value)==null?void 0:_c.error)||""),operationId:String(((_d=saveWorkOperation.value)==null?void 0:_d.operationId)||""),status:String(((_e=saveWorkOperation.value)==null?void 0:_e.status)||"").trim().toLowerCase()}},operation=>{var _a;if(operation.code==="vibe64_session_save_update_required"){if(((_a=saveWorkFailure.value)==null?void 0:_a.code)===operation.code){saveWorkError.value="";saveWorkFailure.value=null}return}if(operation.status!=="failed"||!operation.error){return}saveWorkError.value=operation.error;saveWorkFailure.value={code:operation.code,details:operation.details,message:operation.error}},{immediate:true});const saveWorkCanResolveWithTemporaryAi=computed(()=>{var _a;return["vibe64_session_save_history_diverged","vibe64_session_update_conflict","vibe64_session_update_history_diverged"].includes(String(((_a=saveWorkFailure.value)==null?void 0:_a.code)||""))});const saveWorkRetryable=computed(()=>Boolean(saveWorkError.value&&!saveWorkDisabled.value&&!saveWorkCanResolveWithTemporaryAi.value));async function updateBeforeSave(){var _a,_b;const requestSequence=++repositoryRequestSequence;const updatingSessionId=sessionId.value;const updatingProjectSlug=projectSlug.value;const requestIsCurrent=()=>requestSequence===repositoryRequestSequence&&sessionId.value===updatingSessionId&&projectSlug.value===updatingProjectSlug;saveWorkAttempt.value={kind:"update",operationId:""};saveWorkSending.value=true;saveWorkError.value="";saveWorkFailure.value=null;try{const result=await props.updateSessionWork();if(!requestIsCurrent()){return false}saveWorkAttempt.value=null;return result}catch(error){if(!requestIsCurrent()){return false}saveWorkFailure.value=error&&typeof error==="object"?{code:String(error.code||((_a=error.response)==null?void 0:_a.code)||""),details:error.details||((_b=error.response)==null?void 0:_b.details)||null,message:error instanceof Error?error.message:String(error||"")}:null;saveWorkError.value=error instanceof Error?error.message:String(error||"This session could not be updated.");return false}finally{if(requestIsCurrent()){saveWorkSending.value=false}}}function requestSaveWork(){if(saveWorkDisabled.value){return false}if(saveWorkRequiresUpdate.value){return updateBeforeSave()}saveWorkConfirmOpen.value=true;return true}function retrySaveWork(){return saveWorkRetryable.value?requestSaveWork():false}function dismissSaveWorkActivity(){if(saveWorkSending.value||saveWorkOperationActive.value){return false}if(!saveWorkActivityKey.value&&saveWorkError.value){saveWorkError.value="";saveWorkFailure.value=null;return true}return dismissShortAction("saveWork",saveWorkActivityKey.value)}function cancelSaveWork(){saveWorkConfirmOpen.value=false}async function confirmSaveWork(){var _a,_b;if(saveWorkDisabled.value){return false}const requestSequence=++repositoryRequestSequence;const savingSessionId=sessionId.value;const savingProjectSlug=projectSlug.value;const requestIsCurrent=()=>requestSequence===repositoryRequestSequence&&sessionId.value===savingSessionId&&projectSlug.value===savingProjectSlug;saveWorkAttempt.value={kind:"save",operationId:""};saveWorkSending.value=true;saveWorkError.value="";saveWorkFailure.value=null;savedCommitDeslop.value="";saveWorkConfirmOpen.value=false;try{const result=await props.saveSessionWork();if(!requestIsCurrent()){return false}const saveCommit=normalizedAgentTurnText(result==null?void 0:result.saveCommit);if((result==null?void 0:result.reconciled)===true&&/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/iu.test(saveCommit)){savedCommitDeslop.value=saveCommit}saveWorkAttempt.value=null;return result}catch(error){if(!requestIsCurrent()){return false}saveWorkFailure.value=error&&typeof error==="object"?{code:String(error.code||((_a=error.response)==null?void 0:_a.code)||""),details:error.details||((_b=error.response)==null?void 0:_b.details)||null,message:error instanceof Error?error.message:String(error||"")}:null;saveWorkError.value=error instanceof Error?error.message:String(error||"Session work could not be saved.");return false}finally{if(requestIsCurrent()){saveWorkSending.value=false}}}function dismissSavedCommitDeslop(){savedCommitDeslop.value=""}async function startSavedCommitDeslop(){const saveCommit=savedCommitDeslop.value;if(!saveCommit||savedCommitDeslopSending.value||composerSending.value||agentActive.value||!assistantMainChatAllowed.value){return false}const sendingSessionId=sessionId.value;const sendingProjectSlug=projectSlug.value;savedCommitDeslopSending.value=true;try{const accepted=await sendChatPayload({displayMessage:`Deslop saved commit ${saveCommit.slice(0,12)}.`,genesisTask:"deslop",message:`Deslop commit ${saveCommit}.`});if(accepted){savedCommitDeslop.value=""}return accepted}finally{if(sessionId.value===sendingSessionId&&projectSlug.value===sendingProjectSlug){savedCommitDeslopSending.value=false}}}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(()=>{var _a;const turns=Array.isArray((_a=props.conversationLog)==null?void 0:_a.turns)?props.conversationLog.turns:[];if(!optimisticMessages.value.length){return turns}const optimistic=unmatchedOptimisticMessages(turns,optimisticMessages.value);return[...turns,...optimistic.map(message=>({optimistic:{error:message.error,id:message.id,status:message.status},turnId:message.id,user:{attachments:message.attachments,at:message.createdAt,role:"user",text:message.text}}))]});const emptyConversationWelcome=computed(()=>{var _a,_b,_c,_d;return sessionId.value&&!((_a=props.conversationLog)==null?void 0:_a.loading)&&!((_b=props.conversationLog)==null?void 0:_b.error)&&!chatTurns.value.length?emptyConversationWelcomeText({existingProject:workspaceSetupStatus.value!=="unconfigured",preferredName:preferredName.value,renewedSession:Boolean(normalizedAgentTurnText((_d=(_c=props.session)==null?void 0:_c.metadata)==null?void 0:_d.renewed_from))}):""});const conversationLogVisible=computed(()=>Boolean(props.active));const conversationScrollKey=computed(()=>sessionId.value);const chatReloading=ref(false);const chatReloadAvailable=computed(()=>{var _a;return Boolean(props.active&&props.session&&(typeof props.refreshSessionData==="function"||typeof((_a=props.conversationLog)==null?void 0:_a.reload)==="function"))});async function reloadChatPane(){var _a,_b,_c;if(!chatReloadAvailable.value||chatReloading.value){return false}chatReloading.value=true;try{await Promise.allSettled([(_a=props.refreshSessionData)==null?void 0:_a.call(props),(_c=(_b=props.conversationLog)==null?void 0:_b.reload)==null?void 0:_c.call(_b)]);return true}finally{chatReloading.value=false}}async function loadMoreChatTurns(request={}){var _a;return typeof((_a=props.conversationLog)==null?void 0:_a.loadMore)==="function"?props.conversationLog.loadMore(request):false}const rightPaneTab=ref("preview");const lastDashboardRoutePath=ref("");const sourceEditorOpenRequest=ref(null);const systemRestoreRequest=ref(null);const databaseOpenRequest=ref(null);const systemReturnContext=ref(null);let sourceEditorOpenSequence=0;let systemRestoreSequence=0;const projectPaneValue=computed(()=>normalizeProjectPane$1(props.projectPane));const routeSessionToolId=computed(()=>{const dashboardPrefix=`${normalizeProjectRoutePath(projectAppPath(projectSlug.value,"/dashboard"))}/`;const routePath=`${normalizeProjectRoutePath(route.path)}/`;if(!routePath.startsWith(dashboardPrefix)){return""}const segment=routePath.slice(dashboardPrefix.length).split("/")[0]||"";const toolId=vibe64SessionToolIdFromRouteSegment(segment);return DIRECT_SESSION_TOOL_IDS.has(toolId)?toolId:""});const sourceToolLoading=computed(()=>{var _a;return Boolean(projectPaneValue.value==="dashboard"&&STANDALONE_SESSION_TOOL_IDS.has(routeSessionToolId.value)&&!sessionSourceRoot.value&&((_a=props.page)==null?void 0:_a.launchBusy))});const dashboardShellVisible=computed(()=>Boolean(projectPaneValue.value==="dashboard"&&!sourceToolLoading.value&&!STANDALONE_SESSION_TOOL_IDS.has(rightPaneTab.value)));const dashboardRouteVisible=computed(()=>["dashboard","info","changes","repository"].includes(rightPaneTab.value));const sessionToolBackPath=computed(()=>lastDashboardRoutePath.value||projectAppPath(projectSlug.value,"/dashboard/env"));function sessionToolRuntimeState(toolId=""){if(toolId==="ai-terminal"&&!assistantAccessPending.value&&!assistantDirectAllowed.value){return{disabled:true,title:currentAssistantRestrictionMessage.value}}if(toolId==="editor"){return{disabled:!props.session,title:"Browse repository files, Drop Zone and session files"}}if(["database","system"].includes(toolId)){return{disabled:!sessionSourceRoot.value,title:sessionSourceRoot.value?toolId==="database"?"Query and map the active session database":"Explore the current project Cities":"Create the session source first"}}return{}}const sessionToolControls=computed(()=>VIBE64_SESSION_TOOL_DEFINITIONS.filter(definition=>DIRECT_SESSION_TOOL_IDS.has(definition.id)).map(definition=>({...definition,...sessionToolRuntimeState(definition.id)})));function sessionToolRoutePath(toolId=""){const suffix=vibe64SessionToolDashboardSuffix(toolId);return suffix?projectAppPath(projectSlug.value,suffix):""}function selectSessionTool(toolId="",{navigate=true}={}){if(!DIRECT_SESSION_TOOL_IDS.has(toolId)){return false}const tool=sessionToolControls.value.find(item=>item.id===toolId);if(!tool||tool.disabled){return false}rightPaneTab.value=toolId;if(navigate){const targetPath=sessionToolRoutePath(toolId);if(targetPath&&normalizeProjectRoutePath(targetPath)!==normalizeProjectRoutePath(route.path)){void router.push(targetPath)}}emit("project-attention");return true}function backToDashboard(){const targetPath=sessionToolBackPath.value;if(targetPath&&normalizeProjectRoutePath(targetPath)!==normalizeProjectRoutePath(route.path)){void router.push(targetPath)}}function connectIntegrationRequest(request){var _a,_b;if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return false;return((_b=(_a=props.conversationLog)==null?void 0:_a.connectIntegrationRequest)==null?void 0:_b.call(_a,request))||false}function checkIntegrationRequest(request){var _a,_b;if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return false;return((_b=(_a=props.conversationLog)==null?void 0:_a.checkIntegrationRequest)==null?void 0:_b.call(_a,request))||false}function cancelIntegrationRequest(request){var _a,_b;if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return false;return((_b=(_a=props.conversationLog)==null?void 0:_a.cancelIntegrationRequest)==null?void 0:_b.call(_a,request))||false}function skipIntegrationRequest(request){var _a,_b;if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return false;return((_b=(_a=props.conversationLog)==null?void 0:_a.skipIntegrationRequest)==null?void 0:_b.call(_a,request))||false}function resumeIntegrationRequest(request){var _a,_b;if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return false;return((_b=(_a=props.conversationLog)==null?void 0:_a.resumeIntegrationRequest)==null?void 0:_b.call(_a,request))||false}function openIntegrationRequest(request){if(!props.active||props.sessionSelectionArchived||request.sessionId!==sessionId.value)return;void router.push({path:projectAppPath(projectSlug.value,"/dashboard/integrations"),query:{integration:request.integrationId,integrationSession:sessionId.value,integrationTurn:request.turnId,integrationRequest:request.requestId}});emit("project-attention")}function rightPaneTabMounted(tabId=""){return rightPaneTab.value===String(tabId||"")}const activeSessionNav=computed(()=>{var _a,_b;return{label:sessionNavLabel(props.session||{}),selectTool:selectSessionTool,sessionId:sessionId.value,status:String(((_a=props.session)==null?void 0:_a.status)||""),statusLabel:vibe64SessionStatusLabel((_b=props.session)==null?void 0:_b.status),tools:sessionToolControls.value.map(tool=>({...tool,active:rightPaneTab.value===tool.id,disabledReason:tool.disabled?tool.title||"":"",to:sessionToolRoutePath(tool.id)})),visible:Boolean(props.session)}});const dashboardSessionContext=computed(()=>{var _a,_b,_c;return{active:Boolean(props.active),activeSessionNav:activeSessionNav.value,copyText:typeof((_a=props.page)==null?void 0:_a.copyText)==="function"?props.page.copyText:null,embeddedShell:true,projectContext:props.projectContext||{},refreshSessionWork:props.refreshSessionWork,refreshConversation:()=>{var _a2,_b2;return(_b2=(_a2=props.conversationLog)==null?void 0:_a2.reload)==null?void 0:_b2.call(_a2)},requestSaveWork,session:props.session||null,sessionId:sessionId.value,sessionsApiPath:props.sessionsApiPath,statusColor:vibe64SessionStatusColor((_b=props.session)==null?void 0:_b.status),statusLabel:vibe64SessionStatusLabel((_c=props.session)==null?void 0:_c.status),workState:props.workState||null}});const systemBackAvailable=computed(()=>{var _a;return Boolean(((_a=systemReturnContext.value)==null?void 0:_a.sessionId)===sessionId.value)});function openSourceEditorFile(target={}){const path=normalizedAgentTurnText(target==null?void 0:target.path);if(!path){return false}systemReturnContext.value=target.origin==="system"?{...target.systemContext&&typeof target.systemContext==="object"?target.systemContext:{},sessionId:sessionId.value}:null;sourceEditorOpenSequence+=1;sourceEditorOpenRequest.value={column:Number(target.column||0)||0,line:Number(target.line||0)||0,path,sequence:sourceEditorOpenSequence};return selectSessionTool("editor")}function openSubsystemTable(target={}){if(!target.qualifiedName)return false;systemReturnContext.value={...target.systemContext,sessionId:sessionId.value};databaseOpenRequest.value={qualifiedName:target.qualifiedName,sequence:Date.now()};return selectSessionTool("database")}function describeSubsystems(){prefillComposer("Please create or update genesis/subsystems.md from the application source, existing Program, and schema. Explain the meaningful subsystem responsibilities and declare their Program operations and owned/used tables.")}function backToSystemFromEditor(){if(!systemBackAvailable.value){return false}systemRestoreSequence+=1;systemRestoreRequest.value={...systemReturnContext.value,sequence:systemRestoreSequence};return selectSessionTool("system")}const sourceEditorAskCodexAvailable=computed(()=>Boolean(props.active&&sessionId.value&&!props.sessionSelectionArchived&&assistantDirectAllowed.value));function prefillComposer(text="",{append=false}={}){const prompt=normalizedAgentTurnText(text);if(!prompt||!sourceEditorAskCodexAvailable.value){return false}composerDraft.value=append&&composerDraft.value.trim()?`${composerDraft.value}
11
+
12
+ ${prompt}`:prompt;emit(append?"chat-attention":"project-attention");return true}function askCodexAboutSourceEditorFile(path=""){const normalizedPath2=normalizedAgentTurnText(path);return normalizedPath2?prefillComposer(`Please look at \`${normalizedPath2}\` and help me with this file.`):false}function updateAgentSetting(parameterId="",value2=""){agentSettings.update({[String(parameterId||"")]:String(value2||"")})}watch(()=>[props.active,projectPaneValue.value,route.path,routeSessionToolId.value,sessionSourceRoot.value,sourceToolLoading.value,assistantAccessPending.value,assistantDirectAllowed.value].join("|"),()=>{if(!props.active||projectPaneValue.value==="preview"){return}if(sourceToolLoading.value){emit("project-attention");return}if(routeSessionToolId.value){if(selectSessionTool(routeSessionToolId.value,{navigate:false})){return}const fallbackPath=projectAppPath(projectSlug.value,"/dashboard/env");lastDashboardRoutePath.value=fallbackPath;rightPaneTab.value="dashboard";if(normalizeProjectRoutePath(fallbackPath)!==normalizeProjectRoutePath(route.path)){void router.replace(fallbackPath)}return}lastDashboardRoutePath.value=route.path;rightPaneTab.value="dashboard"},{immediate:true});watch([sessionId,projectSlug],()=>{repositoryRequestSequence+=1;saveWorkConfirmOpen.value=false;saveWorkSending.value=false;saveWorkAttempt.value=null;saveWorkError.value="";saveWorkFailure.value=null;composerSending.value=false;composerSubmissionKind.value="";interrupting.value=false;composerDraft.value="";composerAttachments.value=[];composerRetrySubmission.value=null;optimisticMessages.value=[];questionAnswers.value={};dismissedNumberedQuestionText.value="";submittedQuestionText.value="";selectedAnswerChoice.value="";savedCommitDeslop.value="";savedCommitDeslopSending.value=false;workspaceSetupRetryError.value="";workspaceSetupFixTaskId.value="";checkedUpdateRepairRuns.clear();systemReturnContext.value=null;systemRestoreRequest.value=null;databaseOpenRequest.value=null});watch(()=>{var _a;return(_a=workspaceSetup.value)==null?void 0:_a.updatedAt},()=>{workspaceSetupRetryError.value=""});watch(latestAssistantQuestionText,questionText=>{questionAnswers.value={};if(questionText!==dismissedNumberedQuestionText.value){dismissedNumberedQuestionText.value=""}if(questionText!==submittedQuestionText.value){submittedQuestionText.value=""}selectedAnswerChoice.value=""});watch(()=>{var _a;return(_a=props.conversationLog)==null?void 0:_a.turns},turns=>{if(!optimisticMessages.value.length){return}const remaining=unmatchedOptimisticMessages(turns,optimisticMessages.value);const retry=composerRetrySubmission.value;if(retry&&!unmatchedOptimisticMessages(turns,[retry.optimistic]).length){settleComposerRetry(retry)}if(remaining.length!==optimisticMessages.value.length){optimisticMessages.value=remaining}});watch(()=>Boolean(agentActive.value||composerSending.value||interrupting.value||saveWorkSending.value),busy=>{emit("busy-change",busy)},{immediate:true});return{Vibe64OutputControls,assistantDirectAllowed,agentActive,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askCodexAboutSourceEditorFile,askCodexToFixPreviewIdentity,askCodexToFixWorkspaceSetup,attachPreviewDiagnostics,backToDashboard,backToSystemFromEditor,cancelOptimisticMessage,cancelSaveWork,captureVisiblePreview,chatCollapsed,chatReloadAvailable,chatReloading,chatTurns,composerAttachments,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,composerSubmitAriaLabel,composerSubmitLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,currentAgentSettings,dashboardSessionContext,dashboardRouteVisible,dashboardShellVisible,sourceToolLoading,dismissSaveWorkActivity,dismissNumberedQuestions,dismissSavedCommitDeslop,dismissWorkspaceSetupActivity,confirmSaveWork,editOptimisticMessage,emptyConversationWelcome,fixRepositoryActionError,fixRepositoryError,handleTemporaryAiTaskFinished,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,skipIntegrationRequest,resumeIntegrationRequest,connectIntegrationRequest,checkIntegrationRequest,cancelIntegrationRequest,openSourceEditorFile,openSubsystemTable,describeSubsystems,databaseOpenRequest,previewAttachmentState,projectSlug,questionAnswers,reloadChatPane,repositoryRecoverySending,repositoryOperationActive,retrySaveWork,retryWorkspaceSetup,requestSaveWork,resendOptimisticMessage,requestAgentInterrupt,rightPaneTab,rightPaneTabMounted,saveWorkConfirmOpen,saveWorkDisabled,updateWorkDisabled,saveWorkActivityDismissed,saveWorkActivityKey,saveWorkActivityIsUpdate,saveWorkActivityLabel,saveWorkActionLabel,saveWorkError,saveWorkFailure,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkCanResolveWithTemporaryAi,saveWorkOperation,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStatus,saveWorkTitle,saveWorkRequiresUpdate,saveWorkUnsaved,savedCommitDeslop,savedCommitDeslopSending,selectSessionTool,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolControls,sessionToolbarVisible,selectedAnswerChoice,sourceEditorAskCodexAvailable,sourceEditorOpenRequest,structuredQuestionActive,startSavedCommitDeslop,submitComposerMessage,systemBackAvailable,systemRestoreRequest,thinkingLabel,thinkingVisible,updateAgentSetting,updateComposerAttachments,updatePreviewAttachmentState,workspaceSetupAskDisabled,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDiagnostic,workspaceSetupDismissed,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}}function executionAttentionForError(error=null,message=""){const code=normalizedAgentTurnText(error==null?void 0: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."})}const PROMPT_HINT_DEBOUNCE_MS=750;let promptHintOperationSequence=0;function normalizedPromptHintText(value2=""){return String(value2||"").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={})=>{var _a,_b;return{assistant:normalizedPromptHintText((_a=turn==null?void 0:turn.assistant)==null?void 0:_a.text),turnId:normalizedPromptHintText(turn==null?void 0:turn.turnId),user:normalizedPromptHintText((_b=turn==null?void 0:turn.user)==null?void 0:_b.text)}}))}function useVibe64PromptHints({active=true,blankConversation=false,canRequest=true,conversationKey="",draft="",existingProject=false,onSelect=()=>false,policy={},sessionId="",sessionsApiPath=""}={},{debounceMs=PROMPT_HINT_DEBOUNCE_MS,request=(path,options)=>getHttpWebClient().request(path,options)}={}){const composerFocused=ref(false);const dismissedRequestKey=ref("");const loading=ref(false);const preview=ref("");const suggestions=ref([]);const status=ref("idle");const originId=vibe64BrowserTabOriginId();let debounceTimer=0;let requestRevision=0;let currentOperation=null;let scheduledKey="";const currentSessionId=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionId)));const currentSessionsApiPath=computed(()=>normalizedPromptHintText(readRefOrGetterValue(sessionsApiPath)));const currentPolicy=computed(()=>readRefOrGetterValue(policy)||{});const currentDraft=computed(()=>normalizedPromptHintDraft(readRefOrGetterValue(draft)));const policyKey=computed(()=>[currentPolicy.value.enabled===false?"off":"on",currentPolicy.value.ready===true?"ready":"loading",Number(currentPolicy.value.revision||0),Number(currentPolicy.value.version||0)].join(":"));const requestKey=computed(()=>[currentSessionId.value,normalizedPromptHintText(readRefOrGetterValue(conversationKey)),currentDraft.value,policyKey.value,readRefOrGetterValue(blankConversation)===true?"blank":"history",readRefOrGetterValue(existingProject)===true?"existing":"greenfield"].join("\0"));const eligible=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&readRefOrGetterValue(canRequest)!==false&&currentPolicy.value.enabled!==false&&currentPolicy.value.ready===true&&currentSessionId.value&&currentSessionsApiPath.value&&dismissedRequestKey.value!==requestKey.value));const visible=computed(()=>Boolean(eligible.value&&(loading.value||suggestions.value.length===3)));function clearDebounce(){if(!debounceTimer){return}clearTimeout(debounceTimer);debounceTimer=0}function sendCancellation(operation=currentOperation){if(!(operation==null?void 0:operation.operationId)||!(operation==null?void 0:operation.sessionId)||!(operation==null?void 0:operation.sessionsApiPath)){return}void request(vibe64SessionPromptHintsCancelPath(operation.sessionsApiPath,operation.sessionId),{body:{operationId:operation.operationId,originId},method:"POST"}).catch(()=>null)}function cancelCurrentPromptHints({notify=true}={}){var _a,_b;clearDebounce();requestRevision+=1;const operation=currentOperation;currentOperation=null;(_b=(_a=operation==null?void 0:operation.controller)==null?void 0:_a.abort)==null?void 0:_b.call(_a);if(notify){sendCancellation(operation)}loading.value=false}function clearPromptHints({notify=true}={}){cancelCurrentPromptHints({notify});preview.value="";suggestions.value=[];status.value="idle"}async function generatePromptHints(revision,key){debounceTimer=0;if(!eligible.value||key!==requestKey.value||revision!==requestRevision){loading.value=false;return}const operationId=promptHintOperationId();const controller=new AbortController;const operation={controller,operationId,sessionId:currentSessionId.value,sessionsApiPath:currentSessionsApiPath.value};currentOperation=operation;try{const response=await request(vibe64SessionPromptHintsPath(operation.sessionsApiPath,operation.sessionId),{body:{draft:currentDraft.value,operationId,originId},method:"POST",signal:controller.signal});if(revision!==requestRevision||currentOperation!==operation||!eligible.value||key!==requestKey.value){return}const nextSuggestions=["ready","static"].includes(response==null?void 0:response.status)?normalizedPromptHintSuggestions(response.suggestions):[];suggestions.value=nextSuggestions;status.value=nextSuggestions.length===3?response.status:"idle"}catch{if(revision===requestRevision&&currentOperation===operation){suggestions.value=[];status.value="idle"}}finally{if(revision===requestRevision&&currentOperation===operation){currentOperation=null;loading.value=false}}}function schedulePromptHints(){clearPromptHints();if(!eligible.value){scheduledKey="";return}const key=requestKey.value;scheduledKey=key;loading.value=true;status.value="loading";const revision=requestRevision;debounceTimer=setTimeout(()=>{void generatePromptHints(revision,key)},Math.max(0,Number(debounceMs)||0))}function focusComposer(){if(readRefOrGetterValue(active)===false||composerFocused.value){return}dismissedRequestKey.value="";composerFocused.value=true}function blurComposer(){preview.value="";composerFocused.value=false}function dismissPromptHints(){preview.value="";dismissedRequestKey.value=requestKey.value}function currentPromptHintSuggestion(suggestion=null){const normalized=normalizedPromptHintSuggestion(suggestion);if(!normalized){return null}return suggestions.value.find(({label,prompt})=>label===normalized.label&&prompt===normalized.prompt)||null}function previewPromptHint(suggestion=null){preview.value="";if(normalizedPromptHintText(readRefOrGetterValue(draft))){return false}const current=currentPromptHintSuggestion(suggestion);if(!current){return false}preview.value=current.prompt;return true}function selectPromptHint(suggestion=null){const current=currentPromptHintSuggestion(suggestion);if(!current){return false}preview.value="";return onSelect(current.prompt)!==false}watch(()=>readRefOrGetterValue(active)!==false,isActive=>{if(isActive){return}composerFocused.value=false;dismissedRequestKey.value=""},{flush:"sync"});watch(()=>normalizedPromptHintText(readRefOrGetterValue(draft)),value2=>{if(value2){preview.value=""}},{flush:"sync"});watch(()=>[eligible.value?"eligible":"blocked",requestKey.value,dismissedRequestKey.value===requestKey.value?"dismissed":"available"].join("\0"),()=>{if(!eligible.value){scheduledKey="";clearPromptHints();return}if(scheduledKey!==requestKey.value){schedulePromptHints()}},{flush:"sync",immediate:true});onScopeDispose(()=>{clearPromptHints()});return{blurComposer,composerFocused,dismissPromptHints,focusComposer,loading,preview,previewPromptHint,selectPromptHint,status,suggestions,visible}}function presenceText(value2=""){return String(value2??"").trim()}function presenceTimestamp(value2=""){const timestamp=Date.parse(String(value2||""));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 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,displayName:Array.from(displayName).slice(0,80).join("")||"Another user",expiresAt,originId,projectSlug,sequence,sessionId,typing,updatedAt})}function typingPresenceLabel(people=[]){var _a;const visible=Array.isArray(people)?people:[];if(visible.length===1){return`${presenceText((_a=visible[0])==null?void 0:_a.displayName)||"Another user"} is typing…`}return visible.length>1?`${visible.length} people are typing…`:""}function useVibe64SessionTypingPresence({active=true,projectSlug="",sessionId="",sessionsApiPath=""}={},{clearTimer=clearTimeout,debounceMs=VIBE64_SESSION_PRESENCE_DEBOUNCE_MS,heartbeatMs=VIBE64_SESSION_PRESENCE_HEARTBEAT_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 heartbeatTimer=null;let idleTimer=null;let localSequence=Math.max(0,Math.floor(Number(now())||0));let localTyping=false;let typingContext=null;const currentContext=computed(()=>Object.freeze({active:readRefOrGetterValue(active)!==false,projectSlug:presenceText(readRefOrGetterValue(projectSlug)),sessionId:presenceText(readRefOrGetterValue(sessionId)),sessionsApiPath:presenceText(readRefOrGetterValue(sessionsApiPath))}));const eligible=computed(()=>Boolean(currentContext.value.active&&currentContext.value.projectSlug&&currentContext.value.sessionId&&currentContext.value.sessionsApiPath));const typingPeople=computed(()=>{const byActor=new Map;for(const entry of remoteEntries.value.values()){if(!entry.typing||entry.expiresAt<=now()){continue}byActor.set(entry.actorId,{actorId:entry.actorId,displayName:entry.displayName})}return[...byActor.values()].sort((left,right)=>left.displayName.localeCompare(right.displayName))});const typingLabel=computed(()=>typingPresenceLabel(typingPeople.value));function clearScheduledTimer(name){const timer=name==="debounce"?debounceTimer:name==="heartbeat"?heartbeatTimer:idleTimer;if(timer){clearTimer(timer)}if(name==="debounce"){debounceTimer=null}else if(name==="heartbeat"){heartbeatTimer=null}else{idleTimer=null}}function requestPresence(typing,context=typingContext||currentContext.value){if(!(context==null?void 0:context.projectSlug)||!(context==null?void 0:context.sessionId)||!(context==null?void 0:context.sessionsApiPath)){return}localSequence+=1;void request(sessionPresencePath(context.sessionsApiPath,context.sessionId),{body:{originId,sequence:localSequence,typing:typing===true},method:"POST"}).catch(()=>null)}function scheduleHeartbeat(){clearScheduledTimer("heartbeat");if(!localTyping){return}heartbeatTimer=setTimer(()=>{heartbeatTimer=null;if(!localTyping||!eligible.value){stopTyping();return}requestPresence(true);scheduleHeartbeat()},Math.max(1,Number(heartbeatMs)||VIBE64_SESSION_PRESENCE_HEARTBEAT_MS))}function startTyping(){debounceTimer=null;if(localTyping||!eligible.value){return}typingContext={...currentContext.value};localTyping=true;requestPresence(true);scheduleHeartbeat()}function stopTyping({notify=true}={}){clearScheduledTimer("debounce");clearScheduledTimer("heartbeat");clearScheduledTimer("idle");if(localTyping&&notify){requestPresence(false)}localTyping=false;typingContext=null}function noteInputActivity(){if(!eligible.value){return}clearScheduledTimer("idle");idleTimer=setTimer(()=>{idleTimer=null;stopTyping()},Math.max(1,Number(idleMs)||VIBE64_SESSION_PRESENCE_IDLE_MS));if(localTyping||debounceTimer){return}debounceTimer=setTimer(startTyping,Math.max(0,Number(debounceMs)||0))}function clearRemotePresence(){for(const entry of remoteEntries.value.values()){if(entry.timer){clearTimer(entry.timer)}}remoteEntries.value=new Map}function removeRemotePresence(key,expected=null){const current=remoteEntries.value.get(key);if(!current||expected&&current!==expected){return}if(current.timer){clearTimer(current.timer)}const next=new Map(remoteEntries.value);next.delete(key);remoteEntries.value=next}function applyRemotePresence(payload={}){const entry=normalizedRemotePresence(payload,now());const context=currentContext.value;if(!entry||entry.originId===originId||entry.projectSlug!==context.projectSlug||entry.sessionId!==context.sessionId){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==null?void 0: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)||VIBE64_SESSION_PRESENCE_IDLE_MS));const next=new Map(remoteEntries.value);next.set(key,stored);remoteEntries.value=next}function handleRealtimeConnect(){if(localTyping&&eligible.value){requestPresence(true)}}function handleRealtimeDisconnect(){clearRemotePresence()}useRealtimeEvent({enabled:eligible,event:VIBE64_SESSION_PRESENCE_CHANGED_EVENT,onEvent:({payload})=>applyRemotePresence(payload)});realtimeSocket.on("connect",handleRealtimeConnect);realtimeSocket.on("disconnect",handleRealtimeDisconnect);watch(()=>[currentContext.value.active,currentContext.value.projectSlug,currentContext.value.sessionId,currentContext.value.sessionsApiPath].join("\0"),()=>{stopTyping();clearRemotePresence()},{flush:"sync"});onScopeDispose(()=>{stopTyping();clearRemotePresence();realtimeSocket.off("connect",handleRealtimeConnect);realtimeSocket.off("disconnect",handleRealtimeDisconnect)});return Object.freeze({applyRemotePresence,blur:stopTyping,noteInputActivity,stop:stopTyping,submit:stopTyping,typingLabel,typingPeople})}const MOUNTED_SESSION_IGNORED_REALTIME_REASONS=new Set(["assistant-response-bundle","codex-app-server-commentary","codex-app-server-prompt-injected","codex-app-server-ready","codex-app-server-final-assistant-message","codex-app-server-live-progress","codex-app-server-reasoning-summary","codex-app-server-running","codex-app-server-terminal-assistant-message","codex-app-server-terminal-thinking-message","codex-app-server-terminal-user-message","codex-app-server-turn-active","codex-app-server-turn-claimed","codex-app-server-turn-finalizing","codex-app-server-turn-idle","codex-app-server-turn-state","codex-app-server-message-delivered","codex-context-replaced","codex-prompt-injected","opencode-server-assistant-message","opencode-server-message-delivered","opencode-server-progress","opencode-server-reasoning","opencode-server-tool","opencode-server-turn-active","opencode-server-turn-idle","output-target-started","output-target-ready","output-target-closed","output-target-stopped"]);function sessionRecordHasDetailProjection(session=null){return Boolean(session&&typeof session==="object"&&Object.hasOwn(session,"agentSession"))}function sessionRecordHasActiveAgentWork(session=null){var _a,_b;return((_b=(_a=session==null?void 0:session.agentSession)==null?void 0:_a.turn)==null?void 0:_b.active)===true}function sessionRecordMatchesId(session=null,sessionId=""){const normalizedSessionId=String(sessionId||"").trim();return Boolean(normalizedSessionId&&(session==null?void 0:session.sessionId)===normalizedSessionId&&(session==null?void 0:session.ok)!==false)}function latestSessionDetailRecord(current=null,candidate=null,sessionId=""){if(!sessionRecordMatchesId(candidate,sessionId)){return current}if(!sessionRecordMatchesId(current,sessionId)){return candidate}const currentRevision=vibe64SessionRevision(current);const candidateRevision=vibe64SessionRevision(candidate);if(currentRevision!==null&&candidateRevision!==null&&candidateRevision<currentRevision){return current}return candidate}function mountedSessionRecord(detailSession=null,listSession=null,sessionId=""){const normalizedSessionId=String(sessionId||"").trim();const listSessionMatches=sessionRecordMatchesId(listSession,normalizedSessionId);if(!sessionRecordMatchesId(detailSession,normalizedSessionId)){return listSessionMatches?listSession:null}const detailRevision=vibe64SessionRevision(detailSession);const listRevision=vibe64SessionRevision(listSession);if(listSessionMatches&&listRevision!==null&&detailRevision!==null&&listRevision>detailRevision){if(sessionRecordHasDetailProjection(detailSession)&&!sessionRecordHasDetailProjection(listSession)){return detailSession}return listSession}return detailSession}function mountedSessionDetailRefreshReason(detailSession=null,listSession=null,sessionId=""){const normalizedSessionId=String(sessionId||"").trim();if(!sessionRecordMatchesId(detailSession,normalizedSessionId)||!sessionRecordMatchesId(listSession,normalizedSessionId)){return""}const detailRevision=vibe64SessionRevision(detailSession);const listRevision=vibe64SessionRevision(listSession);if(listRevision!==null&&detailRevision!==null&&listRevision>detailRevision&&sessionRecordHasDetailProjection(detailSession)&&!sessionRecordHasDetailProjection(listSession)){return"newer_summary_without_detail"}return""}function mountedSessionDetailLoadState({detailSession=null,fetching=false,listSession=null,loadError="",loading=false,sessionId=""}={}){const normalizedSessionId=String(sessionId||"").trim();const hasDetail=sessionRecordMatchesId(detailSession,normalizedSessionId);const hasSummary=sessionRecordMatchesId(listSession,normalizedSessionId);const error=String(loadError||"").trim();if(!normalizedSessionId){return{error:"",label:"",loading:false,ready:false,restoring:false,sessionId:"",state:"summaryOnly"}}if(error&&!hasDetail){return{error,label:"Session could not load.",loading:false,ready:false,restoring:false,sessionId:normalizedSessionId,state:"detailError"}}if(hasDetail){return{error:"",label:"",loading:false,ready:true,refreshing:Boolean(fetching||loading),restoring:false,sessionId:normalizedSessionId,state:"detailReady"}}if(loading||fetching){return{error:"",label:"Loading session...",loading:true,ready:false,restoring:false,sessionId:normalizedSessionId,state:"detailLoading"}}return{error:"",label:hasSummary?"Session could not load.":"Loading session...",loading:false,ready:false,restoring:false,sessionId:normalizedSessionId,state:"summaryOnly"}}function mountedSessionRealtimeShouldRefresh({payload={}}={},sessionId=""){const changedSessionId=String(payload.sessionId||payload.entityId||"").trim();if(!changedSessionId||changedSessionId!==String(sessionId||"").trim()){return false}const reason=String((payload==null?void 0:payload.reason)||"").trim();return!reason||!MOUNTED_SESSION_IGNORED_REALTIME_REASONS.has(reason)}const ASSISTANT_ACCESS_IGNORED_REALTIME_REASONS=new Set(["opencode-credential-failure","opencode-provider-failure","opencode-server-assistant-message","opencode-server-message-delivered","opencode-server-progress","opencode-server-reasoning","opencode-server-tool","opencode-server-turn-idle"]);function assistantAccessText(value2=""){return String(value2??"").trim()}function useVibe64AssistantAccess({active=true,sessionId="",sessionsApiPath=""}={}){const projectSlug=useVibe64ProjectSlug();const currentSessionId=computed(()=>assistantAccessText(readRefOrGetterValue(sessionId)));const currentSessionsApiPath=computed(()=>assistantAccessText(readRefOrGetterValue(sessionsApiPath)));const enabled=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&currentSessionId.value&&currentSessionsApiPath.value));const sessionPath=computed(()=>enabled.value?vibe64SessionPath(currentSessionsApiPath.value,currentSessionId.value):"");const accessPath=computed(()=>sessionPath.value?`${sessionPath.value}/assistant-access`:"");const suggestionsPath=computed(()=>sessionPath.value?`${sessionPath.value}/message-suggestions`:"");const realtime={events:[VIBE64_SESSION_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT],matches:({event="",payload={}}={})=>{if(event===VIBE64_CONNECTIONS_CHANGED_EVENT){return true}const reason=assistantAccessText(payload.reason);return!ASSISTANT_ACCESS_IGNORED_REALTIME_REASONS.has(reason)&&mountedSessionRealtimeShouldRefresh({payload},currentSessionId.value)}};const accessResource=useEndpointResource({enabled,fallbackLoadError:"AI access could not be loaded.",path:accessPath,queryKey:computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),currentSessionId.value,"assistant-access"]),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:true},readMethod:"GET",realtime,refreshOnPull:true,requestRecoveryLabel:"AI access"});const suggestionsResource=useEndpointResource({enabled,fallbackLoadError:"Message suggestions could not be loaded.",path:suggestionsPath,queryKey:computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),currentSessionId.value,"message-suggestions"]),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:true},readMethod:"GET",realtime,refreshOnPull:true,requestRecoveryLabel:"Message suggestions"});const suggestionCommand=useCommand({access:"never",apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:"POST",path:assistantAccessText(context==null?void 0:context.path)}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload((context==null?void 0:context.body)||{}),fallbackRunError:"The message suggestion could not be updated.",messages:{error:"The message suggestion could not be updated."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.sessions.message-suggestions.command",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const pendingAction=ref(null);const access=computed(()=>{const value2=accessResource.data.value;return value2&&value2.ok!==false?value2:null});const accessLabel=computed(()=>{var _a;return assistantAccessText((_a=access.value)==null?void 0:_a.accessLabel)||"Unavailable"});const canUseAi=computed(()=>{var _a;return((_a=access.value)==null?void 0:_a.canUse)===true});const canRequestMessage=computed(()=>{var _a;return((_a=access.value)==null?void 0:_a.canRequestMessage)===true});const canSubmitMainChat=computed(()=>canUseAi.value||canRequestMessage.value);const canManage=computed(()=>{var _a;return((_a=suggestionsResource.data.value)==null?void 0:_a.canManage)===true});const suggestions=computed(()=>{var _a;return Array.isArray((_a=suggestionsResource.data.value)==null?void 0:_a.suggestions)?suggestionsResource.data.value.suggestions:[]});const pendingSuggestions=computed(()=>suggestions.value.filter(suggestion=>["pending","delivering"].includes(assistantAccessText(suggestion==null?void 0:suggestion.status))));const accessError=computed(()=>vibe64ResourceResponseError(accessResource.data.value,"AI access could not be loaded.")||assistantAccessText(accessResource.loadError.value));const suggestionsError=computed(()=>vibe64ResourceResponseError(suggestionsResource.data.value,"Message suggestions could not be loaded.")||assistantAccessText(suggestionsResource.loadError.value));const initialAccessLoading=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&!access.value&&!accessError.value&&(!enabled.value||accessResource.isInitialLoading.value||accessResource.isLoading.value)));const restrictionMessage=computed(()=>{var _a,_b;if(canRequestMessage.value){return"Only the workspace owner can run this personal AI connection. You can request a main-chat message for approval."}if(((_a=access.value)==null?void 0:_a.available)===true&&((_b=access.value)==null?void 0:_b.ownerOnly)===true){return"Only the workspace owner can use this personal AI connection."}if(!access.value||access.value.available!==true){return accessError.value||"The selected AI connection is unavailable."}return""});function actionIsPending(name="",suggestionId=""){var _a,_b;return((_a=pendingAction.value)==null?void 0:_a.name)===name&&(!suggestionId||((_b=pendingAction.value)==null?void 0:_b.suggestionId)===suggestionId)}async function reload(){var _a,_b;await Promise.all([(_a=accessResource.reload)==null?void 0:_a.call(accessResource),(_b=suggestionsResource.reload)==null?void 0:_b.call(suggestionsResource)])}async function runSuggestionAction(name,path,body={},suggestionId=""){var _a,_b;if(!enabled.value||pendingAction.value){return null}const actionSessionId=currentSessionId.value;pendingAction.value={name,sessionId:actionSessionId,suggestionId};try{const response=await suggestionCommand.run({body,path});if(currentSessionId.value===actionSessionId&&(response==null?void 0:response.ok)!==false){await((_a=suggestionsResource.reload)==null?void 0:_a.call(suggestionsResource))}return response}finally{if(((_b=pendingAction.value)==null?void 0:_b.sessionId)===actionSessionId){pendingAction.value=null}}}async function suggestMessage(input={}){const response=await runSuggestionAction("suggest",suggestionsPath.value,input);return(response==null?void 0:response.ok)===false||!response?response:{...response,suggested:true}}function suggestionDecisionPath(suggestionId="",decision=""){return`${suggestionsPath.value}/${encodeURIComponent(assistantAccessText(suggestionId))}/${decision}`}function withdrawSuggestion(suggestionId=""){const id=assistantAccessText(suggestionId);return runSuggestionAction("withdraw",suggestionDecisionPath(id,"withdraw"),{},id)}function approveSuggestion(suggestionId=""){const id=assistantAccessText(suggestionId);return runSuggestionAction("approve",suggestionDecisionPath(id,"approve"),{},id)}function discardSuggestion(suggestionId=""){const id=assistantAccessText(suggestionId);return runSuggestionAction("discard",suggestionDecisionPath(id,"discard"),{},id)}return{access,accessError,accessLabel,actionIsPending,approveSuggestion,canManage,canRequestMessage,canSubmitMainChat,canUseAi,discardSuggestion,initialAccessLoading,pendingAction,pendingSuggestions,reload,restrictionMessage,suggestMessage,suggestionsError,withdrawSuggestion}}const _hoisted_1$7=["title"];const _hoisted_2$6={class:"studio-autopilot__session-header"};const _hoisted_3$6={class:"studio-autopilot__header-actions studio-autopilot__header-actions--compact"};const _hoisted_4$6={class:"studio-autopilot__header-actions studio-autopilot__header-actions--expanded"};const _hoisted_5$6={class:"studio-autopilot__activity","aria-label":"Session activity"};const _hoisted_6$4={class:"text-body-small"};const _hoisted_7$4={key:0,class:"studio-autopilot__question-fields","aria-label":"Assistant questions"};const _hoisted_8$4={class:"studio-autopilot__question-fields-header"};const _hoisted_9$2={key:1,class:"studio-autopilot__answer-choices","aria-label":"Suggested answers"};const _hoisted_10$2={class:"studio-autopilot__composer-actions"};const _hoisted_11$2={class:"studio-autopilot__composer-tools"};const _hoisted_12$2={class:"studio-autopilot__composer-delivery"};const _hoisted_13$2={class:"studio-autopilot__project-panel","aria-label":"Project"};const _hoisted_14$2={class:"studio-autopilot__right-pane-page",role:"tabpanel"};const _hoisted_15$2={class:"studio-autopilot__right-pane-page",role:"tabpanel"};const _hoisted_16$1={class:"studio-autopilot__right-pane-page studio-autopilot__session-tool-pane",role:"tabpanel"};const _hoisted_17$1={class:"studio-autopilot__session-tool-header"};const _hoisted_18$1={class:"studio-autopilot__right-pane-page studio-autopilot__session-tool-pane",role:"tabpanel"};const _hoisted_19$1={class:"studio-autopilot__session-tool-header"};const _hoisted_20$1={class:"studio-autopilot__right-pane-page studio-autopilot__session-tool-pane",role:"tabpanel"};const _hoisted_21$1={class:"studio-autopilot__session-tool-header"};const _hoisted_22$1={class:"studio-autopilot__right-pane-page",role:"tabpanel"};const _hoisted_23$1={key:0,role:"status",class:"mt-3"};const _sfc_main$8={__name:"Vibe64AutopilotView",props:vibe64AutopilotViewProps,emits:vibe64AutopilotViewEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const resourceRecoveryControl=inject(VIBE64_RESOURCE_RECOVERY_KEY,null);const resourceRetryBusy=ref(false);const sessionRenewalActionPresentation=computed(()=>{var _a,_b;return((_a=props.sessionRenewal)==null?void 0:_a.actionPresentation)||((_b=props.sessionRenewal)==null?void 0:_b.advisoryPresentation)||{attention:false,color:void 0,label:"Renew session",reason:"Renew this session with a reviewed handover."}});const sessionActionsLabel=computed(()=>sessionRenewalActionPresentation.value.attention?`Session actions: ${sessionRenewalActionPresentation.value.label}`:"Session actions");const sourceOperationsSuspended=computed(()=>{var _a;return((_a=props.sessionRenewal)==null?void 0:_a.sourceOperationsSuspended)===true});const Vibe64SubsystemsView=defineAsyncComponent(()=>__vitePreload(()=>import("./index-C4KnwA0g.js").then(n=>n.f1),true?__vite__mapDeps([1,2]):void 0).then(module=>module.loadVibe64SubsystemsView()));const Vibe64DatabaseWorkspace=defineAsyncComponent(()=>__vitePreload(()=>import("./index-C4KnwA0g.js").then(n=>n.f0),true?__vite__mapDeps([1,2]):void 0).then(module=>module.loadVibe64DatabaseWorkspace()));const composerInput=ref(null);const composerSendButton=ref(null);const mainChat=ref(null);const sessionActionsTrigger=ref(null);const temporaryAiWorkspace=ref(null);const workspaceRecoveryTaskId=ref("");const thinkingStatusId=`studio-autopilot-thinking-${useId()}`;const testApproval=ref(null);function updateTestApproval(value2){var _a;if(value2.sessionId===((_a=props.session)==null?void 0:_a.sessionId))testApproval.value=value2.approval}watch(()=>{var _a;return(_a=props.session)==null?void 0:_a.sessionId},()=>{testApproval.value=null});const composerAttachmentState=ref({count:0,hasUnresolved:false,uploading:false});const selectedAssistantSessionId=computed(()=>{var _a;return String(((_a=props.session)==null?void 0:_a.sessionId)||"").trim()});const openCodeProgressLabel=ref("");const openCodeProviderLabel=computed(()=>{var _a,_b;return{deepseek:"DeepSeek","zai-coding-plan":"Z.AI"}[String(((_b=(_a=props.session)==null?void 0:_a.assistantSelection)==null?void 0:_b.modelProviderId)||"").trim()]||"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(()=>{var _a,_b;return Boolean(props.active&&!props.sessionSelectionArchived&&selectedAssistantSessionId.value&&((_b=(_a=props.session)==null?void 0:_a.assistantSelection)==null?void 0:_b.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,()=>{var _a,_b;return(_b=(_a=props.session)==null?void 0:_a.assistantSelection)==null?void 0:_b.engineId}],()=>{openCodeProgressLabel.value=""},{immediate:true});const{accessError:assistantAccessError,accessLabel:assistantAccessLabel,actionIsPending:assistantActionIsPending,approveSuggestion:approveAssistantSuggestion,canManage:assistantSuggestionsCanManage,canRequestMessage:assistantCanRequestMessage,canUseAi:assistantCanUseAiState,discardSuggestion:discardAssistantSuggestion,initialAccessLoading:assistantAccessLoading,pendingAction:assistantPendingAction,pendingSuggestions:assistantPendingSuggestions,reload:reloadAssistantAccess,restrictionMessage:assistantRestrictionMessage,suggestMessage:suggestAssistantMessage,suggestionsError:assistantSuggestionsError,withdrawSuggestion:withdrawAssistantSuggestion}=useVibe64AssistantAccess({active:computed(()=>props.active&&!props.sessionSelectionArchived),sessionId:selectedAssistantSessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});async function sendMainChatMessage(input={}){if(assistantCanRequestMessage.value){return suggestAssistantMessage(input)}if(assistantCanUseAiState.value){return props.sendAgentMessage(input)}throw new Error(assistantRestrictionMessage.value)}const{Vibe64OutputControls,assistantDirectAllowed,agentActive,agentStopEnabled,agentStopVisible,answerChoices,prefillComposer,askCodexAboutSourceEditorFile,askCodexToFixPreviewIdentity,askCodexToFixWorkspaceSetup,attachPreviewDiagnostics,backToDashboard,backToSystemFromEditor,cancelOptimisticMessage,cancelSaveWork,captureVisiblePreview,chatCollapsed,chatReloadAvailable,chatReloading,chatTurns,composerAttachmentsEnabled,composerAttachmentsSupported,composerCanSubmit,composerDisabled,composerDraft,composerHint,composerPlaceholder,composerSending,composerSubmitAriaLabel,composerSubmitLabel,composerSubmitMode,composerSubmitTitle,conversationLogVisible,conversationFollowLatestKey,conversationScrollKey,currentAgentSettings,dashboardSessionContext,dashboardRouteVisible,dashboardShellVisible,sourceToolLoading,dismissSaveWorkActivity,dismissNumberedQuestions,dismissSavedCommitDeslop,dismissWorkspaceSetupActivity,confirmSaveWork,editOptimisticMessage,emptyConversationWelcome,fixRepositoryActionError,fixRepositoryError,handleTemporaryAiTaskFinished,interrupting,loadMoreChatTurns,numberedQuestionSelectItems,numberedQuestions,openIntegrationRequest,skipIntegrationRequest,resumeIntegrationRequest,connectIntegrationRequest,checkIntegrationRequest,cancelIntegrationRequest,openSourceEditorFile,openSubsystemTable,describeSubsystems,databaseOpenRequest,previewAttachmentState,projectSlug,questionAnswers,reloadChatPane,repositoryRecoverySending,repositoryOperationActive,retrySaveWork,retryWorkspaceSetup,requestSaveWork,resendOptimisticMessage,requestAgentInterrupt,rightPaneTab,rightPaneTabMounted,saveWorkConfirmOpen,saveWorkActivityDismissed,saveWorkActivityKey,saveWorkActivityIsUpdate,saveWorkActivityLabel,saveWorkDisabled,updateWorkDisabled,saveWorkError,saveWorkHeaderAriaLabel,saveWorkHeaderVisible,saveWorkCanResolveWithTemporaryAi,saveWorkOperationActive,saveWorkOutput,saveWorkRetryable,saveWorkSending,saveWorkStage,saveWorkStatus,saveWorkTitle,saveWorkRequiresUpdate,saveWorkUnsaved,savedCommitDeslop,savedCommitDeslopSending,sessionId,sessionGithubActor,sessionGithubActorHeaderVisible,sessionSourceRoot,sessionToolbarVisible,selectedAnswerChoice,sourceEditorAskCodexAvailable,sourceEditorOpenRequest,structuredQuestionActive,startSavedCommitDeslop,submitComposerMessage,systemBackAvailable,systemRestoreRequest,thinkingLabel,thinkingVisible,updateComposerAttachments,updatePreviewAttachmentState,workspaceSetupAskDisabled,workspaceSetupActivityKey,workspaceSetupCurrentLabel,workspaceSetupDiagnostic,workspaceSetupDismissed,workspaceSetupFixSending,workspaceSetupNeedsAttention,workspaceSetupOutput,workspaceSetupRetryDisabled,workspaceSetupRetrying,workspaceSetupRunning,workspaceSetupStatus,workspaceSetupTitle}=useVibe64AutopilotView(props,emit,{assistantAccessLoading,assistantCanRequestMessage,assistantCanUseAi:assistantCanUseAiState,assistantRestrictionMessage,onAttachmentsAccepted:attachmentIds=>{var _a,_b;return(_b=(_a=composerInput.value)==null?void 0:_a.clearAttachments)==null?void 0:_b.call(_a,{attachmentIds})},requestTemporaryAi:startTemporaryAiTask,sendMainChatMessage});const fileBookmarks=useVibe64StarredFiles({projectSlug,sessionId,sessionsApiPath:()=>props.sessionsApiPath});const composerSuggesting=computed(()=>assistantCanRequestMessage.value&&["retry","send","sending","steer","steering"].includes(composerSubmitMode.value));const composerSubmitActionLabel=computed(()=>{if(!composerSuggesting.value){return composerSubmitMode.value==="send"?"Send":composerSubmitLabel.value}return"Suggest to owner"});const composerSubmitActionAriaLabel=computed(()=>composerSuggesting.value?"Request message from workspace owner":composerSubmitAriaLabel.value);const composerSubmitActionTitle=computed(()=>composerSuggesting.value?assistantRestrictionMessage.value:composerSubmitTitle.value);const composerAccessHint=computed(()=>assistantCanRequestMessage.value?assistantRestrictionMessage.value:composerHint.value);const{blur:stopTypingOnBlur,noteInputActivity:noteTypingActivity,submit:stopTypingOnSubmit,typingLabel}=useVibe64SessionTypingPresence({active:computed(()=>props.active&&!props.sessionSelectionArchived),projectSlug,sessionId,sessionsApiPath:computed(()=>readRefOrGetterValue(props.sessionsApiPath))});const composerAssistantLabel=computed(()=>{var _a;return(((_a=testApproval.value)==null?void 0:_a.state)==="waiting"?"Waiting for memory approval":"")||openCodeProgressLabel.value||(thinkingVisible.value?thinkingLabel.value:typingLabel.value)});watch(agentActive,active=>{if(!active){openCodeProgressLabel.value=""}},{flush:"sync",immediate:true});const conversationAssistantLabel=computed(()=>{var _a,_b;return((_b=(_a=props.session)==null?void 0:_a.assistantSelection)==null?void 0:_b.engineId)==="opencode"?"OpenCode":"Codex"});const promptHintsBlankConversation=computed(()=>chatTurns.value.length<1);const promptHintsCanRequest=computed(()=>{var _a,_b;return Boolean(props.active&&!((_a=props.conversationLog)==null?void 0:_a.loading)&&!((_b=props.conversationLog)==null?void 0:_b.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||props.agentConnectionStatus==="connected"&&assistantDirectAllowed.value)&&!structuredQuestionActive.value&&composerAttachmentState.value.count<1&&!composerAttachmentState.value.uploading&&!composerAttachmentState.value.hasUnresolved&&!previewAttachmentState.value.captureBusy&&!previewAttachmentState.value.diagnosticsBusy)});const promptHintsConversationKey=computed(()=>promptHintConversationFingerprint(chatTurns.value));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 dashboardContext=computed(()=>({...dashboardSessionContext.value||{},assistantDirectAllowed:assistantDirectAllowed.value,assistantRestrictionMessage:assistantRestrictionMessage.value,requestAssistantDraft:text=>prefillComposer(text,{append:true}),requestUpdateWork:props.updateSessionWork,requestTemporaryAi:fixRepositoryError,sourceOperationsSuspended:sourceOperationsSuspended.value}));const sessionArchiveDisabled=computed(()=>{var _a,_b;return Boolean(props.sessionSelectionArchived||((_b=(_a=props.sessionArchive)==null?void 0:_a.command)==null?void 0:_b.isRunning)||workspaceSetupRunning.value||workspaceSetupRetrying.value)});async function sendComposerMessage(){var _a,_b;if(((_b=(_a=composerInput.value)==null?void 0:_a.attachmentsCanSubmit)==null?void 0:_b.call(_a))===false){return false}stopTypingOnSubmit();return submitComposerMessage()}function focusComposerSendButton(){var _a,_b;const button=((_a=composerSendButton.value)==null?void 0:_a.$el)||composerSendButton.value;(_b=button==null?void 0:button.focus)==null?void 0:_b.call(button)}function updateComposerAttachmentState(state={}){composerAttachmentState.value={count:Number((state==null?void 0:state.count)||0),hasUnresolved:(state==null?void 0:state.hasUnresolved)===true,uploading:(state==null?void 0:state.uploading)===true}}function focusTargetInside(target,selector){var _a;return Boolean((_a=target==null?void 0:target.closest)==null?void 0:_a.call(target,selector))}function handleComposerBlur(event={}){stopTypingOnBlur();if(focusTargetInside(event.relatedTarget,"[data-vibe64-prompt-hints], .studio-autopilot__composer")){return}blurPromptHints()}function handleComposerRegionFocusOut(event={}){var _a,_b;if(((_b=(_a=event.currentTarget)==null?void 0:_a.contains)==null?void 0:_b.call(_a,event.relatedTarget))||focusTargetInside(event.relatedTarget,"[data-vibe64-prompt-hints]")){return}blurPromptHints()}function handlePromptHintsFocusOut(event={}){var _a,_b;if(((_b=(_a=event.currentTarget)==null?void 0:_a.contains)==null?void 0:_b.call(_a,event.relatedTarget))||focusTargetInside(event.relatedTarget,".studio-autopilot-prompt-textarea")){return}blurPromptHints()}function dismissPromptHintsAndFocus(){var _a,_b;(_b=(_a=composerInput.value)==null?void 0:_a.focus)==null?void 0:_b.call(_a,{preventScroll:true});dismissPromptHints()}function applyPromptHint(text=""){var _a,_b;const suggestion=String(text||"").trim();if(!suggestion){return false}if(composerDraft.value!==suggestion){(_b=(_a=composerInput.value)==null?void 0:_a.preserveHeightForNextModelValue)==null?void 0:_b.call(_a);composerDraft.value=suggestion}void nextTick(()=>{var _a2,_b2;(_b2=(_a2=composerInput.value)==null?void 0:_a2.focus)==null?void 0:_b2.call(_a2,{preventScroll:true})});return true}function copyActivityOutput(output=""){return writeClipboardText(output)}function openTemporaryAi(){var _a,_b;if(!assistantDirectAllowed.value){return false}(_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.showWorkspace)==null?void 0:_b.call(_a);return true}async function startTemporaryAiTask(options={}){if(!assistantDirectAllowed.value){return false}emit("chat-attention");const workspace=temporaryAiWorkspace.value;if(typeof(workspace==null?void 0:workspace.startTask)!=="function"){return false}return workspace.startTask(options)}function reportVerifiedWorkspaceRecovery(){var _a,_b;if(!workspaceRecoveryTaskId.value||workspaceSetupStatus.value!=="succeeded"){return false}const reported=(_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.reportTaskRecovery)==null?void 0:_b.call(_a,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,(taskId,outcome)=>{var _a,_b;return(_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.reportTaskRecovery)==null?void 0:_b.call(_a,taskId,outcome)});if(!recovery){return false}if(recovery==="workspace-setup"){workspaceRecoveryTaskId.value=String(task.id||"").trim();reportVerifiedWorkspaceRecovery()}return true}function checkTemporaryAiUpdate(task){if(updateWorkDisabled.value)return false;return handleTemporaryAiTaskFinished(task,(taskId,outcome)=>{var _a,_b;return(_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.reportTaskRecovery)==null?void 0:_b.call(_a,taskId,outcome)},{force:true})}function requestSessionSaveWork(){var _a,_b,_c;const repair=(_a=temporaryAiWorkspace.value)==null?void 0:_a.updateRepairTask;if(saveWorkRequiresUpdate.value&&repair){(_c=(_b=temporaryAiWorkspace.value)==null?void 0:_b.selectTask)==null?void 0:_c.call(_b,repair.id);return checkTemporaryAiUpdate(repair)}return requestSaveWork()}async function showMainChat(){var _a,_b,_c,_d;(_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.closeWorkspace)==null?void 0:_b.call(_a);await nextTick();(_d=(_c=mainChat.value)==null?void 0:_c.focus)==null?void 0:_d.call(_c,{preventScroll:true})}watch(workspaceSetupStatus,()=>{reportVerifiedWorkspaceRecovery()});watch(selectedAssistantSessionId,()=>{workspaceRecoveryTaskId.value=""});async function attachPreviewFile(file){var _a,_b;const uploaded=await((_b=(_a=composerInput.value)==null?void 0:_a.attachFiles)==null?void 0:_b.call(_a,[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={}){var _a,_b;const uploaded=await((_b=(_a=composerInput.value)==null?void 0:_a.attachFileProducer)==null?void 0:_b.call(_a,options));return Array.isArray(uploaded)&&uploaded.length>0?uploaded[0]:null}function requestSessionRenewal(returnFocusTarget=null){var _a,_b;if(!assistantDirectAllowed.value){return false}(_b=(_a=props.sessionRenewal)==null?void 0:_a.request)==null?void 0:_b.call(_a,{returnFocusTarget:(returnFocusTarget==null?void 0:returnFocusTarget.$el)||returnFocusTarget});return true}return(_ctx,_cache)=>{var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m;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$7)],8,["to"])):createCommentVNode("",true),createBaseVNode("section",{ref_key:"mainChat",ref:mainChat,class:"studio-autopilot__chat-panel","aria-label":"Session chat",tabindex:"-1"},[createBaseVNode("header",_hoisted_2$6,[unref(sessionToolbarVisible)?(openBlock(),createBlock(Vibe64SessionToolbar,{key:0,active:props.active,archive:props.sessionArchive,compact:"","create-visible":props.sessionToolbar.createSessionVisible===true,"max-visible-sessions":3,"selected-session-id":unref(sessionId),"selection-archived":sessionArchiveDisabled.value,toolbar:props.sessionToolbar},null,8,["active","archive","create-visible","selected-session-id","selection-archived","toolbar"])):createCommentVNode("",true),unref(saveWorkHeaderVisible)?(openBlock(),createBlock(VBtn,{key:1,"aria-busy":unref(saveWorkSending)?"true":void 0,"aria-label":unref(saveWorkHeaderAriaLabel),class:"studio-autopilot__save-work",color:unref(saveWorkRequiresUpdate)?"warning":unref(saveWorkUnsaved)?"primary":void 0,disabled:unref(saveWorkDisabled)||((_b=(_a=temporaryAiWorkspace.value)==null?void 0:_a.updateRepairTask)==null?void 0:_b.busy),height:"48",icon:unref(saveWorkRequiresUpdate)?unref(mdiSourcePull):unref(mdiContentSaveOutline),title:unref(saveWorkTitle),type:"button",variant:"tonal",width:"48",onClick:requestSessionSaveWork},null,8,["aria-busy","aria-label","color","disabled","icon","title"])):createCommentVNode("",true),createBaseVNode("div",_hoisted_3$6,[createVNode(VMenu,{location:"bottom end"},{activator:withCtx(({props:menuProps})=>[createVNode(VBadge,{color:sessionRenewalActionPresentation.value.color||"primary",dot:"","model-value":sessionRenewalActionPresentation.value.attention===true,"offset-x":"5","offset-y":"5"},{default:withCtx(()=>[createVNode(VBtn,mergeProps({ref_key:"sessionActionsTrigger",ref:sessionActionsTrigger},menuProps,{"aria-label":sessionActionsLabel.value,"data-vibe64-session-actions":"",height:"48",icon:unref(mdiDotsVertical),title:"Session actions",type:"button",variant:"text",width:"48"}),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(()=>{var _a2;return[((_a2=props.sessionRenewal)==null?void 0:_a2.visible)?(openBlock(),createBlock(VListItem,{key:0,class:"studio-autopilot__session-action-item","data-vibe64-session-renew-action":"",disabled:!unref(assistantDirectAllowed),"prepend-icon":unref(mdiAutorenew),subtitle:unref(assistantDirectAllowed)?sessionRenewalActionPresentation.value.reason:unref(assistantRestrictionMessage),title:sessionRenewalActionPresentation.value.label,onClick:_cache[0]||(_cache[0]=$event=>requestSessionRenewal(sessionActionsTrigger.value))},null,8,["disabled","prepend-icon","subtitle","title"])):createCommentVNode("",true),createVNode(VListItem,{class:"studio-autopilot__session-action-item","data-vibe64-temporary-ai-action":"",disabled:!unref(sessionId)||!unref(assistantDirectAllowed),"prepend-icon":unref(mdiIncognito),subtitle:unref(assistantDirectAllowed)?"Open a separate short-lived conversation":unref(assistantRestrictionMessage),title:"Temporary AI",onClick:openTemporaryAi},null,8,["disabled","prepend-icon","subtitle"])]}),_:1})]),_:1})]),createBaseVNode("div",_hoisted_4$6,[((_c=props.sessionRenewal)==null?void 0:_c.visible)?(openBlock(),createBlock(VBadge,{key:0,color:sessionRenewalActionPresentation.value.color||"primary",dot:"","model-value":sessionRenewalActionPresentation.value.attention===true,"offset-x":"5","offset-y":"5"},{default:withCtx(()=>[createVNode(VBtn,{"aria-label":sessionRenewalActionPresentation.value.label,color:sessionRenewalActionPresentation.value.color,"data-vibe64-session-renew-action":"",disabled:!unref(assistantDirectAllowed),height:"48",icon:unref(mdiAutorenew),title:unref(assistantDirectAllowed)?sessionRenewalActionPresentation.value.reason:unref(assistantRestrictionMessage),type:"button",variant:"text",width:"48",onClick:_cache[1]||(_cache[1]=$event=>requestSessionRenewal($event.currentTarget))},null,8,["aria-label","color","disabled","icon","title"])]),_:1},8,["color","model-value"])):createCommentVNode("",true),createVNode(VBtn,{"aria-label":"Open temporary AI",disabled:!unref(sessionId)||!unref(assistantDirectAllowed),height:"48",icon:unref(mdiIncognito),title:unref(assistantDirectAllowed)?"Open a temporary AI conversation":unref(assistantRestrictionMessage),type:"button",variant:"text",width:"48",onClick:openTemporaryAi},null,8,["disabled","icon","title"])])]),createBaseVNode("div",_hoisted_5$6,[testApproval.value&&unref(resourceRecoveryControl)?(openBlock(),createBlock(VSheet,{key:0,class:"d-flex flex-wrap align-center justify-space-between ga-2 pa-2",color:"surface-variant",rounded:"lg"},{default:withCtx(()=>[createBaseVNode("span",_hoisted_6$4,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[2]||(_cache[2]=$event=>{var _a2;return(_a2=props.refreshSessionData)==null?void 0:_a2.call(props)}),onRecheck:_cache[3]||(_cache[3]=$event=>{var _a2;return(_a2=props.refreshSessionData)==null?void 0:_a2.call(props)})},null,40,["admission-id","session-id","disabled"]))]),_:1})):createCommentVNode("",true),createVNode(Vibe64TemporaryActionTerminal,{active:unref(saveWorkOperationActive)||unref(saveWorkSending),dismissed:unref(saveWorkActivityDismissed),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[4]||(_cache[4]=$event=>copyActivityOutput(unref(saveWorkOutput))),onDismiss:unref(dismissSaveWorkActivity),onRetry:unref(retrySaveWork)},createSlots({_:2},[unref(saveWorkError)&&unref(saveWorkCanResolveWithTemporaryAi)?{name:"error-actions",fn:withCtx(()=>[createVNode(Vibe64TemporaryAiFixAction,{disabled:unref(repositoryRecoverySending)||!unref(assistantDirectAllowed),pending:unref(repositoryRecoverySending),title:unref(assistantDirectAllowed)?"Open temporary AI to resolve this repository problem":unref(assistantRestrictionMessage),onClick:unref(fixRepositoryActionError)},null,8,["disabled","pending","title","onClick"])]),key:"0"}:void 0]),1032,["active","dismissed","error","error-title","operation-key","output","retryable","stage","starting","status","subtitle","title","onDismiss","onRetry"]),unref(savedCommitDeslop)?(openBlock(),createBlock(VSheet,{key:1,border:"",class:"studio-autopilot__deslop-offer",color:"surface-variant",rounded:"lg"},{default:withCtx(()=>[_cache[14]||(_cache[14]=createBaseVNode("div",{class:"studio-autopilot__deslop-copy"},[createBaseVNode("strong",null,"Work saved"),createBaseVNode("span",null,"Run a behavior-preserving cleanup of this commit?")],-1)),createVNode(VBtn,{disabled:unref(savedCommitDeslopSending),size:"small",type:"button",variant:"text",onClick:unref(dismissSavedCommitDeslop)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(" Not now ",-1)])]),_:1},8,["disabled","onClick"]),createVNode(VBtn,{"aria-busy":unref(savedCommitDeslopSending)?"true":void 0,class:"studio-autopilot__deslop-action",color:"primary",disabled:unref(savedCommitDeslopSending)||unref(agentActive)||unref(composerSending),"prepend-icon":unref(mdiBroom),size:"small",type:"button",variant:"tonal",onClick:unref(startSavedCommitDeslop)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(savedCommitDeslopSending)?"Starting…":"Deslop"),1)]),_:1},8,["aria-busy","disabled","prepend-icon","onClick"])]),_:1})):createCommentVNode("",true),createVNode(Vibe64TemporaryActionTerminal,{active:unref(workspaceSetupRunning)||unref(workspaceSetupRetrying),dismissed:unref(workspaceSetupDismissed),error:unref(workspaceSetupNeedsAttention)?unref(workspaceSetupDiagnostic):"","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[7]||(_cache[7]=$event=>copyActivityOutput(unref(workspaceSetupOutput))),onDismiss:unref(dismissWorkspaceSetupActivity),onRetry:unref(retryWorkspaceSetup)},createSlots({_:2},[unref(workspaceSetupNeedsAttention)?{name:"error-actions",fn:withCtx(()=>{var _a2,_b2;return[unref(resourceRecoveryControl)&&((_b2=(_a2=props.session)==null?void 0:_a2.workspaceSetup)==null?void 0:_b2.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[5]||(_cache[5]=$event=>resourceRetryBusy.value=$event),onRetryResult:_cache[6]||(_cache[6]=$event=>{var _a3;return(_a3=props.refreshSessionData)==null?void 0:_a3.call(props)}),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[15]||(_cache[15]=[createTextVNode(" Prepare workspace ",-1)])]),_:1},8,["disabled","loading","onClick"])):(openBlock(),createBlock(Vibe64TemporaryAiFixAction,{key:2,disabled:unref(workspaceSetupAskDisabled),pending:unref(workspaceSetupFixSending),title:unref(assistantDirectAllowed)?"Open temporary AI to resolve workspace preparation":unref(assistantRestrictionMessage),onClick:unref(askCodexToFixWorkspaceSetup)},null,8,["disabled","pending","title","onClick"]))]}),key:"0"}:void 0]),1032,["active","dismissed","error","operation-key","output","retryable","stage","starting","status","title","onDismiss","onRetry"])]),createVNode(Vibe64ConversationLog,{"integration-action-pending":(_d=props.conversationLog)==null?void 0:_d.integrationActionPending,"integration-connections":(_e=props.conversationLog)==null?void 0:_e.integrationConnections,"integration-action-error":(_f=props.conversationLog)==null?void 0:_f.integrationActionError,"integration-requests-enabled":props.active&&!props.sessionSelectionArchived,"session-id":unref(sessionId),"assistant-label":conversationAssistantLabel.value,class:"studio-autopilot__conversation",error:(_g=props.conversationLog)==null?void 0:_g.error,"follow-latest-key":unref(conversationFollowLatestKey),"has-more-before":(_h=props.conversationLog)==null?void 0:_h.hasMoreBefore,loading:(_i=props.conversationLog)==null?void 0:_i.loading,"loading-more":(_j=props.conversationLog)==null?void 0:_j.loadingMore,"load-more-error":(_k=props.conversationLog)==null?void 0:_k.loadMoreError,reloadable:unref(chatReloadAvailable),reloading:unref(chatReloading),"scroll-key":unref(conversationScrollKey),"source-root":unref(sessionSourceRoot),turns:unref(chatTurns),visible:unref(conversationLogVisible),"welcome-message":unref(emptyConversationWelcome),onCancelTurn:unref(cancelOptimisticMessage),onEditTurn:unref(editOptimisticMessage),onLoadMore:unref(loadMoreChatTurns),onOpenSourceFile:unref(openSourceEditorFile),onOpenIntegration:unref(openIntegrationRequest),onSkipIntegration:unref(skipIntegrationRequest),onResumeIntegration:unref(resumeIntegrationRequest),onConnectIntegration:unref(connectIntegrationRequest),onCheckIntegration:unref(checkIntegrationRequest),onCancelIntegration:unref(cancelIntegrationRequest),onReload:unref(reloadChatPane),onResendTurn:unref(resendOptimisticMessage)},null,8,["integration-action-pending","integration-connections","integration-action-error","integration-requests-enabled","session-id","assistant-label","error","follow-latest-key","has-more-before","loading","loading-more","load-more-error","reloadable","reloading","scroll-key","source-root","turns","visible","welcome-message","onCancelTurn","onEditTurn","onLoadMore","onOpenSourceFile","onOpenIntegration","onSkipIntegration","onResumeIntegration","onConnectIntegration","onCheckIntegration","onCancelIntegration","onReload","onResendTurn"]),createVNode(Vibe64PromptHints,{"assistant-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)},null,8,["assistant-label","loading","suggestions","onPreview","onSelect"]),createBaseVNode("div",{class:"studio-autopilot__composer",onFocusout:handleComposerRegionFocusOut},[createVNode(Vibe64AutopilotPromptTextarea,{ref_key:"composerInput",ref:composerInput,modelValue:unref(composerDraft),"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>isRef(composerDraft)?composerDraft.value=$event:null),"aria-label":"Message AI assistant","attachments-enabled":unref(composerAttachmentsEnabled),"described-by":composerSupportStatusVisible.value?thinkingStatusId:"",disabled:unref(composerDisabled),hint:composerAccessHint.value,"persistent-hint":"",placeholder:composerPromptHintPlaceholder.value,"placeholder-affects-height":!composerPromptHintPreview.value,rows:unref(numberedQuestions).length?1:2,"session-id":unref(sessionId),"submit-enabled":unref(composerCanSubmit),"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(()=>[unref(numberedQuestions).length?(openBlock(),createElementBlock("div",_hoisted_7$4,[createBaseVNode("div",_hoisted_8$4,[createVNode(VBtn,{"aria-label":"Answer normally instead",color:"primary","prepend-icon":unref(mdiPencilOutline),size:"small",variant:"tonal",onClick:unref(dismissNumberedQuestions)},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(" Answer normally instead ",-1)])]),_:1},8,["prepend-icon","onClick"])]),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(numberedQuestions),question=>{return openBlock(),createElementBlock("div",{key:question.name,class:"studio-autopilot__question-field"},[question.choices.length?(openBlock(),createBlock(VSelect,{key:0,modelValue:unref(questionAnswers)[question.name],"onUpdate:modelValue":$event=>unref(questionAnswers)[question.name]=$event,class:"studio-autopilot__question-select",density:"compact","hide-details":"auto","item-title":"selectLabel","item-value":"value",items:unref(numberedQuestionSelectItems)[question.name],label:`[${question.number}] ${question.label}`,title:question.label,variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","items","label","title"])):(openBlock(),createBlock(VTextField,{key:1,modelValue:unref(questionAnswers)[question.name],"onUpdate:modelValue":$event=>unref(questionAnswers)[question.name]=$event,autocomplete:"off",density:"compact","hide-details":"auto",label:`[${question.number}] ${question.label}`,title:question.label,variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","label","title"]))])}),128))])):unref(answerChoices).length?(openBlock(),createElementBlock("div",_hoisted_9$2,[createVNode(VChipGroup,{modelValue:unref(selectedAnswerChoice),"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>isRef(selectedAnswerChoice)?selectedAnswerChoice.value=$event:null),column:"","selected-class":"text-primary"},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(answerChoices),choice=>{return openBlock(),createBlock(VChip,{key:choice.value,filter:"",value:choice.value,variant:"outlined"},{default:withCtx(()=>[createTextVNode(toDisplayString(choice.label),1)]),_:2},1032,["value"])}),128))]),_:1},8,["modelValue"])])):createCommentVNode("",true)]),footer:withCtx(({attachmentState})=>[createBaseVNode("div",_hoisted_10$2,[createBaseVNode("div",_hoisted_11$2,[createVNode(Vibe64AssistantAccessPanel,{"access-error":unref(assistantAccessError),"action-is-pending":unref(assistantActionIsPending),"can-manage":unref(assistantSuggestionsCanManage),"pending-action":unref(assistantPendingAction),"pending-suggestions":unref(assistantPendingSuggestions),"suggestions-error":unref(assistantSuggestionsError),onApprove:unref(approveAssistantSuggestion),onDiscard:unref(discardAssistantSuggestion),onReload:unref(reloadAssistantAccess),onWithdraw:unref(withdrawAssistantSuggestion)},null,8,["access-error","action-is-pending","can-manage","pending-action","pending-suggestions","suggestions-error","onApprove","onDiscard","onReload","onWithdraw"]),createVNode(Vibe64SessionAssistantMenu,{"access-label":unref(assistantAccessLabel),"access-loading":unref(assistantAccessLoading),"can-configure":unref(assistantSuggestionsCanManage),"changes-disabled":unref(composerSending)||unref(agentActive),session:props.session,"sessions-api-path":props.sessionsApiPath},null,8,["access-label","access-loading","can-configure","changes-disabled","session","sessions-api-path"]),createVNode(Vibe64CodexPlanUsage,{active:props.active&&!props.sessionSelectionArchived,session:props.session,"sessions-api-path":props.sessionsApiPath},null,8,["active","session","sessions-api-path"]),createVNode(Vibe64StarredFilesMenu,{bookmarks:unref(fileBookmarks),onOpenFile:unref(openSourceEditorFile)},null,8,["bookmarks","onOpenFile"]),unref(composerAttachmentsSupported)?(openBlock(),createBlock(VBtn,{key:0,"aria-label":"Attach files",class:"studio-autopilot__composer-action",disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles,icon:unref(mdiPaperclip),size:"small",title:"Attach files",type:"button",variant:"text",onClick:_cache[9]||(_cache[9]=$event=>{var _a2,_b2;return(_b2=(_a2=composerInput.value)==null?void 0:_a2.openFilePicker)==null?void 0:_b2.call(_a2)})},null,8,["disabled","icon"])):createCommentVNode("",true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).captureAvailable?(openBlock(),createBlock(VBtn,{key:1,"aria-label":"Attach visible preview",class:"studio-autopilot__composer-action","aria-busy":unref(previewAttachmentState).captureBusy?"true":void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).captureBusy,icon:unref(mdiEyePlusOutline),size:"small",title:"Attach visible preview",type:"button",variant:"text",onClick:unref(captureVisiblePreview)},null,8,["aria-busy","disabled","icon","onClick"])):createCommentVNode("",true),unref(composerAttachmentsSupported)&&unref(previewAttachmentState).diagnosticsAvailable?(openBlock(),createBlock(VBtn,{key:2,"aria-label":"Attach console & network",class:"studio-autopilot__composer-action","aria-busy":unref(previewAttachmentState).diagnosticsBusy?"true":void 0,disabled:!unref(composerAttachmentsEnabled)||!attachmentState.canAddFiles||unref(previewAttachmentState).diagnosticsBusy,icon:unref(mdiConsoleNetworkOutline),size:"small",title:"Attach console and network diagnostics",type:"button",variant:"text",onClick:unref(attachPreviewDiagnostics)},null,8,["aria-busy","disabled","icon","onClick"])):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_12$2,[unref(agentStopVisible)?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":unref(interrupting)?"true":void 0,class:"studio-autopilot__composer-action",color:"error",disabled:!unref(agentStopEnabled),"prepend-icon":unref(mdiStopCircleOutline),size:"small",type:"button",variant:"tonal",onClick:unref(requestAgentInterrupt)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(interrupting)?"Stopping…":"Stop"),1)]),_:1},8,["aria-busy","disabled","prepend-icon","onClick"])):createCommentVNode("",true),createVNode(VBtn,{ref_key:"composerSendButton",ref:composerSendButton,"aria-busy":unref(composerSending)?"true":void 0,"aria-label":composerSubmitActionAriaLabel.value,class:"studio-autopilot__composer-action studio-autopilot__send-action",color:"primary",disabled:!unref(composerCanSubmit)||!attachmentState.canSubmit,"prepend-icon":composerSuggesting.value?unref(mdiAccountArrowRightOutline):unref(composerSubmitMode)==="send"?unref(mdiSend):["steer","steering"].includes(unref(composerSubmitMode))?unref(mdiArrowTopRight):void 0,size:"small",title:composerSubmitActionTitle.value,type:"button",variant:"flat",onClick:sendComposerMessage},{default:withCtx(()=>[createTextVNode(toDisplayString(composerSubmitActionLabel.value),1)]),_:1},8,["aria-busy","aria-label","disabled","prepend-icon","title"])])])]),_:1},8,["modelValue","attachments-enabled","described-by","disabled","hint","placeholder","placeholder-affects-height","rows","session-id","submit-enabled","onAttachmentsChange","onEscape","onFocus","onInputActivity"])],32),createVNode(Vibe64TemporaryAiWorkspace,{ref_key:"temporaryAiWorkspace",ref:temporaryAiWorkspace,active:props.active,"agent-settings":unref(currentAgentSettings),"session-id":unref(sessionId),"sessions-api-path":props.sessionsApiPath,"repository-busy":unref(saveWorkOperationActive)||unref(saveWorkSending),"update-disabled":unref(updateWorkDisabled),"update-disabled-reason":unref(saveWorkTitle),onCheckUpdate:checkTemporaryAiUpdate,onSelectMainChat:showMainChat,onTaskFinished:finishTemporaryAiTask},null,8,["active","agent-settings","session-id","sessions-api-path","repository-busy","update-disabled","update-disabled-reason"])],512),createBaseVNode("section",_hoisted_13$2,[unref(sourceToolLoading)?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,class:"studio-autopilot__right-pane-page",label:"session source",loading:""})):createCommentVNode("",true),props.projectPane==="dashboard"?withDirectives((openBlock(),createBlock(_sfc_main$n,{key:1,class:"studio-autopilot__dashboard-shell","dashboard-context":dashboardContext.value},{default:withCtx(()=>[withDirectives(createBaseVNode("div",_hoisted_14$2,[unref(dashboardRouteVisible)?renderSlot(_ctx.$slots,"dashboard",{dashboardContext:dashboardContext.value},void 0,true,0):createCommentVNode("",true)],512),[[vShow,unref(dashboardRouteVisible)]]),withDirectives(createBaseVNode("div",_hoisted_15$2,[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),withDirectives(createBaseVNode("section",_hoisted_16$1,[createBaseVNode("header",_hoisted_17$1,[unref(systemBackAvailable)?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiArrowLeft),size:"x-small",type:"button",variant:"tonal",onClick:unref(backToSystemFromEditor)},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(" Back to Subsystems ",-1)])]),_:1},8,["prepend-icon","onClick"])):(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiArrowLeft),size:"x-small",type:"button",variant:"tonal",onClick:unref(backToDashboard)},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(" Back to dashboard ",-1)])]),_:1},8,["prepend-icon","onClick"]))]),unref(rightPaneTabMounted)("editor")?(openBlock(),createBlock(Vibe64SessionFiles,{key:0,"repo-available":Boolean(unref(sessionSourceRoot)),active:props.active&&props.projectPane==="dashboard"&&unref(rightPaneTab)==="editor","agent-active":unref(agentActive),"file-bookmarks":unref(fileBookmarks),"assistant-available":unref(assistantDirectAllowed),"assistant-unavailable-message":unref(assistantRestrictionMessage),"ask-codex-available":unref(sourceEditorAskCodexAvailable),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),onAskCodexAboutFile:unref(askCodexAboutSourceEditorFile)},null,8,["repo-available","active","agent-active","file-bookmarks","assistant-available","assistant-unavailable-message","ask-codex-available","open-request","project-slug","session-id","sessions-api-path","onAskCodexAboutFile"])):createCommentVNode("",true)],512),[[vShow,props.projectPane==="dashboard"&&unref(rightPaneTab)==="editor"]]),withDirectives(createBaseVNode("section",_hoisted_18$1,[createBaseVNode("header",_hoisted_19$1,[createVNode(VBtn,{"prepend-icon":unref(mdiArrowLeft),size:"x-small",type:"button",variant:"tonal",onClick:_cache[11]||(_cache[11]=$event=>unref(systemBackAvailable)?unref(backToSystemFromEditor)():unref(backToDashboard)())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(systemBackAvailable)?"Back to Subsystems":"Back to dashboard"),1)]),_:1},8,["prepend-icon"])]),unref(rightPaneTabMounted)("database")?(openBlock(),createBlock(unref(Vibe64DatabaseWorkspace),{key:0,"open-request":unref(databaseOpenRequest),active:props.active&&props.projectPane==="dashboard"&&unref(rightPaneTab)==="database","assistant-available":unref(assistantDirectAllowed),"assistant-unavailable-message":unref(assistantRestrictionMessage),class:"studio-autopilot__session-tool-content","project-slug":unref(projectSlug),"session-id":unref(sessionId),"sessions-api-path":props.sessionsApiPath,onRequestOverviewAssistant:startTemporaryAiTask},null,8,["open-request","active","assistant-available","assistant-unavailable-message","project-slug","session-id","sessions-api-path"])):createCommentVNode("",true)],512),[[vShow,props.projectPane==="dashboard"&&unref(rightPaneTab)==="database"]]),withDirectives(createBaseVNode("section",_hoisted_20$1,[createBaseVNode("header",_hoisted_21$1,[createVNode(VBtn,{"prepend-icon":unref(mdiArrowLeft),size:"x-small",type:"button",variant:"tonal",onClick:unref(backToDashboard)},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(" Back to dashboard ",-1)])]),_:1},8,["prepend-icon","onClick"])]),unref(rightPaneTabMounted)("system")?(openBlock(),createBlock(unref(Vibe64SubsystemsView),{key:0,"assistant-available":unref(assistantDirectAllowed),active:props.active&&props.projectPane==="dashboard"&&unref(rightPaneTab)==="system",class:"studio-autopilot__session-tool-content","resolve-request-url":unref(resolveStudioRequestUrl),"restore-request":unref(systemRestoreRequest),"project-slug":unref(projectSlug),onOpenTable:unref(openSubsystemTable),onDescribeSubsystems:unref(describeSubsystems),"session-id":unref(sessionId),onOpenSourceFileImmersive:unref(openSourceEditorFile),onOpenSourceFile:unref(openSourceEditorFile)},null,8,["assistant-available","active","resolve-request-url","restore-request","project-slug","onOpenTable","onDescribeSubsystems","session-id","onOpenSourceFileImmersive","onOpenSourceFile"])):createCommentVNode("",true)],512),[[vShow,props.projectPane==="dashboard"&&unref(rightPaneTab)==="system"]]),withDirectives(createBaseVNode("div",_hoisted_22$1,[createVNode(Vibe64ProjectOnboarding,{active:props.active&&props.projectPane==="preview",archived:props.sessionSelectionArchived,busy:sourceOperationsSuspended.value||unref(agentActive)||Boolean(((_l=props.page)==null?void 0:_l.busy)||((_m=props.page)==null?void 0:_m.launchBusy)),"can-ask":unref(assistantCanUseAiState)||unref(assistantCanRequestMessage),"send-message":sendMainChatMessage,"session-id":selectedAssistantSessionId.value},{default:withCtx(()=>{var _a2,_b2;return[createVNode(unref(Vibe64OutputControls),{"ask-codex-to-fix-preview-identity":unref(assistantDirectAllowed)?unref(askCodexToFixPreviewIdentity):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(((_a2=props.page)==null?void 0:_a2.busy)||((_b2=props.page)==null?void 0:_b2.launchBusy)),class:"studio-autopilot__preview-launch","embedded-preview":"","preview-displayed":props.projectPane==="preview",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,["ask-codex-to-fix-preview-identity","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!=="dashboard"]])]),createVNode(VDialog,{modelValue:unref(saveWorkConfirmOpen),"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>isRef(saveWorkConfirmOpen)?saveWorkConfirmOpen.value=$event:null),"max-width":"34rem"},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode("Save current work?",-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[21]||(_cache[21]=createTextVNode(" Vibe64 will save this session to the project's canonical repository. It preserves concurrent canonical changes and stops before publishing only when another open session has changes that Git cannot merge cleanly. ",-1)),unref(saveWorkDisabled)?(openBlock(),createElementBlock("p",_hoisted_23$1,toDisplayString(unref(saveWorkTitle)),1)):createCommentVNode("",true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:unref(saveWorkSending),type:"button",variant:"text",onClick:unref(cancelSaveWork)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled","onClick"]),createVNode(VBtn,{"aria-busy":unref(saveWorkSending)?"true":void 0,color:"primary",disabled:unref(saveWorkDisabled),type:"button",variant:"flat",onClick:unref(confirmSaveWork)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(saveWorkSending)?"Saving…":"Save"),1)]),_:1},8,["aria-busy","disabled","onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],2)}}};const Vibe64AutopilotView=_export_sfc(_sfc_main$8,[["__scopeId","data-v-4fe7d68f"]]);const _sfc_main$7={__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){var _a;const value2=unref((_a=props.terminal)==null?void 0:_a[name]);return typeof value2==="undefined"?fallback:value2}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,{"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"])}}};const VIBE64_ENDPOINT=studioApiPath("vibe64");const VIBE64_SESSIONS_ENDPOINT=`${VIBE64_ENDPOINT}/sessions`;function appendQueryParam(url="",key="",value2=""){const normalizedValue=String(value2||"").trim();if(!normalizedValue){return url}const separator=String(url||"").includes("?")?"&":"?";return`${url}${separator}${encodeURIComponent(key)}=${encodeURIComponent(normalizedValue)}`}function vibe64AgentTerminalWebSocketUrl(sessionId,terminalSessionId){const endpoint=appendQueryParam(`${vibe64AgentTerminalPath(VIBE64_SESSIONS_ENDPOINT,sessionId,terminalSessionId)}/ws`,"originId",vibe64BrowserTabOriginId());return resolveWebSocketUrl(endpoint)}function vibe64GlobalCodexTerminalWebSocketUrl(_scopeId,terminalSessionId){return resolveWebSocketUrl(`${vibe64GlobalCodexTerminalPath(VIBE64_ENDPOINT,terminalSessionId)}/ws`)}function vibe64OutputTerminalWebSocketUrl(sessionId,terminalSessionId){return resolveWebSocketUrl(`${vibe64OutputRunPath(VIBE64_SESSIONS_ENDPOINT,sessionId,terminalSessionId)}/ws`)}const STALE_OPERATION_CODES=new Set(["vibe64_stale_command_start"]);function plainObject$1(value2=null){return value2&&typeof value2==="object"&&!Array.isArray(value2)?value2:{}}function responseDetails(source={}){return plainObject$1(source.details)}function responseCode(source={}){var _a,_b;return String((source==null?void 0:source.code)||((_b=(_a=source==null?void 0:source.errors)==null?void 0:_a[0])==null?void 0:_b.code)||responseDetails(source).code||"").trim()}function responseStatus(source={}){const value2=(source==null?void 0:source.status)??(source==null?void 0:source.statusCode)??responseDetails(source).status??responseDetails(source).statusCode??null;if(value2==null||value2===""){return null}const number=Number(value2);return Number.isFinite(number)?number:null}function responseOperationOutcome(source={}){return String((source==null?void 0:source.operationOutcome)||responseDetails(source).operationOutcome||"").trim()}function responseRefreshRecommended(source={}){return(source==null?void 0: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(value2={}){return value2&&typeof value2==="object"&&!Array.isArray(value2)?value2:{}}function normalizedId(value2=""){return String(value2||"").trim()}function commandMissingResponse(message){return{error:message,ok:false}}function useProvidedPath(providedPath,fallback){return computed(()=>String(readRefOrGetterValue(providedPath)||fallback()||""))}function useVibe64TerminalCommands({sessionsApiPath:providedSessionsApiPath=null,vibe64ApiPath:providedVibe64ApiPath=null}={}){const paths=usePaths();const sessionsApiPath=useProvidedPath(providedSessionsApiPath,()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const vibe64ApiPath=useProvidedPath(providedVibe64ApiPath,()=>paths.api(VIBE64_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));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:VIBE64_SURFACE_ID,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:VIBE64_SURFACE_ID,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:VIBE64_SURFACE_ID,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 startGlobalCodexTerminal(){return await runStart(vibe64GlobalCodexTerminalPath(vibe64ApiPath.value))}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 normalizedText2=String(text||"");if(!normalizedSessionId||!normalizedTerminalSessionId||!normalizedText2){return commandMissingResponse("AI terminal id and input are required.")}return await writeTerminalCommand.run({attachmentIds:Array.isArray(attachmentIds)?attachmentIds.map(normalizedId).filter(Boolean):[],text:normalizedText2,path:vibe64AgentTerminalControlTextPath(sessionsApiPath.value,normalizedSessionId,normalizedTerminalSessionId)})}async function closeGlobalCodexTerminal(scopeIdOrTerminalSessionId="",terminalSessionId=""){const normalizedTerminalSessionId=normalizedId(terminalSessionId||scopeIdOrTerminalSessionId);if(!normalizedTerminalSessionId){return commandMissingResponse("Codex terminal id is required.")}return await runClose(vibe64GlobalCodexTerminalPath(vibe64ApiPath.value,normalizedTerminalSessionId))}return{closeAgentTerminal,closeGlobalCodexTerminal,closeTerminalCommand,sendAgentTerminalText,startAgentTerminal,startGlobalCodexTerminal,startTerminalCommand,writeTerminalCommand}}function useVibe64CodexCommands(){const paths=usePaths();const terminalCommands=useVibe64TerminalCommands({sessionsApiPath:computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID})),vibe64ApiPath:computed(()=>paths.api(VIBE64_API_SUFFIX,{surface:VIBE64_SURFACE_ID}))});return{...terminalCommands,...useVibe64AttachmentCommands()}}function attachmentPathForTerminal(attachmentPath=""){const normalizedPath2=String(attachmentPath||"").trim();return normalizedPath2?`[${normalizedPath2}] `:""}function useCodexTerminalAttachments({canUpload=()=>true,deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath,sessionId,uploadAttachment}={}){async function injectAttachmentPath(attachmentPath="",attachmentIds=[]){const terminalText=attachmentPathForTerminal(attachmentPath);return terminalText?sendAttachmentPath(terminalText,attachmentIds):false}async function injectUploadedAttachments(uploaded=[]){for(const attachment of uploaded){const fileName=String(attachment.fileName||"attachment");const attachmentPath=String(attachment.path||"").trim();if(!attachmentPath){throw new Error(`${fileName} uploaded, but no Codex path was returned.`)}if(!await injectAttachmentPath(attachmentPath,[attachment.attachmentId])){throw new Error(`${fileName} uploaded, but its path could not be sent to Codex.`)}}}const attachments=useAgentAttachments({canUpload:()=>Boolean(unref(sessionId))&&(typeof canUpload==="function"?canUpload()!==false:unref(canUpload)!==false),deleteAttachment,onUploaded:async(uploaded=[])=>{await injectUploadedAttachments(uploaded);const label=uploaded.length===1?uploaded[0].fileName:`${uploaded.length} files`;attachments.status.value=`${label} attached. Press Enter in Codex when ready.`;focusTerminal();return{accepted:true}},sessionId,uploadAttachment:async(currentSessionId,file,options={})=>{if(!await ensureTerminalReady()){throw new Error("Codex terminal is not ready for attachments.")}return uploadAttachment(currentSessionId,file,options)}});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}}const CODEX_ACTIVITY_QUIET_MS=2200;const 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 terminalOutput="";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==null?void 0: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(output){const nextOutput=String(output||"");terminalOutput=nextOutput;noteTerminalOutput()}function appendTerminalOutput(chunk){const outputChunk=String(chunk||"");if(!outputChunk){return}markTerminalStreaming();terminalOutput+=outputChunk;noteTerminalOutput()}function resetTerminalOutput(){clearTerminalStreamingTimer();setTerminalStreaming(false);clearCodexBusy();clearCodexWorking();terminalOutput="";terminalOutputVersion+=1}return{appendTerminalOutput,clearCodexBusy,clearCodexWorking,codexBusy,codexWorking,getTerminalOutput:()=>terminalOutput,markCodexBusy,resetTerminalOutput,terminalStreaming,writeTerminalOutput}}const VIBE64_CODEX_APP_SERVER_TASK_ID="codex_app_server";function normalizedText$1(value2=""){return String(value2||"").trim()}function objectValue(value2={}){return value2&&typeof value2==="object"&&!Array.isArray(value2)?value2:{}}function arrayValue(value2=[]){return Array.isArray(value2)?value2:[]}function sessionBackgroundTasks(session={}){return arrayValue(session==null?void 0:session.backgroundTasks).filter(task=>task&&typeof task==="object"&&!Array.isArray(task))}function codexReconnectRequiredText(value2=""){const text=normalizedText$1(value2);return Boolean(text)&&(text.includes(CODEX_RECONNECT_REQUIRED_CODE)||text.includes(CODEX_RECONNECT_REQUIRED_MESSAGE))}function codexReconnectRequiredResult(result={}){const source=objectValue(result);return normalizedText$1(source.code)===CODEX_RECONNECT_REQUIRED_CODE||codexReconnectRequiredText(source.error)||codexReconnectRequiredText(source.message)||codexReconnectRequiredText(source.observed)||arrayValue(source.errors).some(error=>normalizedText$1(error==null?void 0:error.code)===CODEX_RECONNECT_REQUIRED_CODE||codexReconnectRequiredText(error==null?void 0:error.message))}function codexReconnectRequiredSignature(session={}){var _a,_b,_c,_d;const sessionId=normalizedText$1(session==null?void 0:session.sessionId);const backgroundTask=sessionBackgroundTasks(session).find(task=>normalizedText$1(task.id)===VIBE64_CODEX_APP_SERVER_TASK_ID&&codexReconnectRequiredResult(task));if(backgroundTask){return[sessionId,"background-task",normalizedText$1(backgroundTask.id),normalizedText$1(backgroundTask.status),normalizedText$1(backgroundTask.updatedAt),normalizedText$1(backgroundTask.error),normalizedText$1(backgroundTask.message)].join("|")}const terminal=objectValue((_a=session==null?void 0:session.agentSession)==null?void 0:_a.terminal);if(codexReconnectRequiredResult(terminal)){return[sessionId,"terminal",normalizedText$1(terminal.id||terminal.terminalSessionId),normalizedText$1(terminal.status),normalizedText$1(terminal.outputVersion),normalizedText$1(terminal.error||terminal.closeError||terminal.terminalError)].join("|")}const turn=objectValue((_b=session==null?void 0:session.agentSession)==null?void 0:_b.turn);if(codexReconnectRequiredResult(turn)){return[sessionId,"agent-turn",normalizedText$1((_d=(_c=session==null?void 0:session.agentSession)==null?void 0:_c.thread)==null?void 0:_d.id),normalizedText$1(turn.id),normalizedText$1(turn.status),normalizedText$1(turn.updatedAt),normalizedText$1(turn.error||turn.message)].join("|")}return""}function normalizedText(value2=""){return String(value2||"").trim()}function terminalErrorCode(source={}){var _a,_b,_c;if(!source||typeof source!=="object"){return""}return normalizedText(source.code||((_b=(_a=source.errors)==null?void 0:_a[0])==null?void 0:_b.code)||((_c=source.cause)==null?void 0:_c.code))}function terminalErrorText(source={}){var _a,_b,_c;if(!source||typeof source!=="object"){return normalizedText(source)}return normalizedText(source.error||source.message||((_b=(_a=source.errors)==null?void 0:_a[0])==null?void 0:_b.message)||((_c=source.cause)==null?void 0:_c.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 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}const _hoisted_1$6=["aria-hidden"];const _hoisted_2$5=["disabled"];const _hoisted_3$5={key:0,class:"vibe64-codex-session__drop-overlay","aria-live":"polite",role:"status"};const _hoisted_4$5={key:1,class:"vibe64-codex-session__start-panel"};const _hoisted_5$5={class:"vibe64-codex-session__start-icon"};const _hoisted_6$3={class:"vibe64-codex-session__start-copy"};const _hoisted_7$3={class:"vibe64-codex-session__command"};const _hoisted_8$3={key:0,class:"text-caption text-medium-emphasis"};const _sfc_main$6={__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},autoFocus:{type:Boolean,default:false},scope:{type:String,default:"session",validator:value2=>["session","global"].includes(value2)},terminal:{type:Object,default:null}},emits:["activity-change","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 globalScope=computed(()=>props.scope==="global");const sessionId=computed(()=>{var _a;return((_a=props.session)==null?void 0:_a.sessionId)||""});const terminalScopeId=computed(()=>globalScope.value?"global":sessionId.value);const terminalAttachmentsEnabled=computed(()=>Boolean(!globalScope.value&&!props.readOnly&&sessionId.value));const sessionSource=computed(()=>vibe64SessionSourcePath(props.session||{}));const terminalDisplayActive=computed(()=>props.visible&&props.displayMode!=="headless");const rawServerCodexTerminal=computed(()=>{var _a,_b;if(props.terminal&&typeof props.terminal==="object"&&!Array.isArray(props.terminal)){return props.terminal}const terminal=(_b=(_a=props.session)==null?void 0:_a.agentSession)==null?void 0:_b.terminal;return terminal&&typeof terminal==="object"&&!Array.isArray(terminal)?terminal:{}});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 hiddenTerminalListenActive=computed(()=>Boolean(props.listenWhenHidden&&serverTerminalSession.value.id&&!terminalDisplayActive.value));const terminalStreamActive=computed(()=>Boolean(terminalDisplayActive.value||hiddenTerminalListenActive.value));const terminalPresentation=computed(()=>terminalDisplayActive.value?"inline":"headless");const hasTerminalSession=computed(()=>Boolean(terminalSessionId.value||serverTerminalSession.value.id));const canUseTerminal=computed(()=>{if(globalScope.value){return Boolean(terminalStreamActive.value&&terminalScopeId.value&&(props.allowStart||serverTerminalSession.value.id))}return Boolean(terminalStreamActive.value&&sessionId.value&&(serverTerminalSession.value.id||props.allowStart&&sessionSource.value))});const canStartTerminal=computed(()=>{if(globalScope.value){return Boolean(props.allowStart&&terminalDisplayActive.value&&terminalScopeId.value)}return Boolean(props.allowStart&&terminalDisplayActive.value&&sessionId.value&&sessionSource.value)});const{appendTerminalOutput:noteTerminalOutputChunk,clearCodexBusy,clearCodexWorking,codexBusy,codexWorking,markCodexBusy,resetTerminalOutput,terminalStreaming,writeTerminalOutput:noteTerminalOutputSnapshot}=useCodexTerminalOutput({emitBusyChanged:emitCodexActivityChanged,sessionId:terminalScopeId});const terminalController=useVibe64Terminal({driver:createWebSocketTerminalDriver({closeSession:closeCodexTerminalDriverSession,webSocketUrl(terminalId){return webSocketUrlForScope(terminalScopeId.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_RECONNECT_REQUIRED_MESSAGE){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_RECONNECT_REQUIRED_MESSAGE?"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 terminalStatus.value==="running"?"":"Codex agent session"});const{abandonAttachments:abandonTerminalAttachments,attachmentCanAddFiles,attachmentDragActive,attachmentQueueItems,attachmentStatus,cancelAttachment,clearAttachmentStatus,handleAttachmentDragEnter,handleAttachmentDragLeave,handleAttachmentDragOver,handleAttachmentDrop,removeAttachment,retryAttachment,resetAttachmentDragState,uploadAttachmentFiles}=useCodexTerminalAttachments({canUpload:terminalAttachmentsEnabled,deleteAttachment:codexCommands.deleteAttachment,ensureTerminalReady,focusTerminal,sendAttachmentPath:sendAttachmentPathForScope,sessionId:terminalScopeId,uploadAttachment:uploadAttachmentForScope});const terminalAttachmentActionLabel=computed(()=>attachmentCanAddFiles.value?"Attach files to Codex terminal":"Codex terminal attachment limit reached");function openTerminalAttachmentPicker(){var _a,_b;if(!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value){return false}(_b=(_a=terminalAttachmentFileInput.value)==null?void 0:_a.click)==null?void 0:_b.call(_a);return true}function handleTerminalAttachmentFileSelection(event){const input=(event==null?void 0:event.currentTarget)||(event==null?void 0:event.target)||null;const files=Array.from((input==null?void 0:input.files)||[]);if(input){input.value=""}if(files.length<1||!terminalAttachmentsEnabled.value||!attachmentCanAddFiles.value){return}void uploadAttachmentFiles(files)}function handleTerminalAttachmentDragEnter(event){var _a;(_a=event==null?void 0:event.preventDefault)==null?void 0:_a.call(event);if(!terminalAttachmentsEnabled.value){return}handleAttachmentDragEnter(event)}function handleTerminalAttachmentDragOver(event){var _a;(_a=event==null?void 0:event.preventDefault)==null?void 0:_a.call(event);if(!terminalAttachmentsEnabled.value){return}handleAttachmentDragOver(event)}function handleTerminalAttachmentDragLeave(event){var _a;(_a=event==null?void 0:event.preventDefault)==null?void 0:_a.call(event);if(!terminalAttachmentsEnabled.value){return}handleAttachmentDragLeave(event)}function handleTerminalAttachmentDrop(event){var _a;(_a=event==null?void 0:event.preventDefault)==null?void 0:_a.call(event);if(!terminalAttachmentsEnabled.value){return}void handleAttachmentDrop(event)}const terminalCanStart=computed(()=>Boolean(canStartTerminal.value));const sessionSourcePending=computed(()=>Boolean(!globalScope.value&&terminalDisplayActive.value&&sessionId.value&&!sessionSource.value&&!hasTerminalSession.value));const terminalStartActionVisible=computed(()=>!sessionSourcePending.value);const terminalServerStale=computed(()=>Boolean(serverCodexTerminal.value.stale||serverCodexTerminal.value.restartRequired));const terminalStartIcon=computed(()=>terminalExited.value||terminalServerStale.value?mdiRestart:mdiPlayCircleOutline);const terminalReconnectRequired=computed(()=>terminalError.value===CODEX_RECONNECT_REQUIRED_MESSAGE);const sessionCodexReconnectSignature=computed(()=>codexReconnectRequiredSignature(props.session||{}));const terminalStartButtonIcon=computed(()=>{if(terminalReconnectRequired.value||terminalExited.value||terminalServerStale.value){return mdiRestart}return 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 emitCodexActivityChanged(payload={}){const busy=Object.hasOwn(payload,"busy")?Boolean(payload.busy):Boolean(codexBusy.value);const working=Object.hasOwn(payload,"working")?Boolean(payload.working):Boolean(codexWorking.value);const streaming=Object.hasOwn(payload,"streaming")?Boolean(payload.streaming):Boolean(terminalStreaming.value);emit("activity-change",{active:Boolean(streaming),busy,scope:props.scope,sessionId:String(payload.sessionId||terminalScopeId.value||""),streaming,terminalSessionId:terminalSessionId.value||serverTerminalSession.value.id||"",working})}function emitTerminalSessionState(extra={}){const currentTerminalId=String(extra.agentTerminalSessionId||terminalSessionId.value||"");if(!terminalScopeId.value||!currentTerminalId){return}emit("session-update",{agentTerminalCommandPreview:terminalCommandPreview.value,agentTerminalSessionId:currentTerminalId,agentTerminalStatus:terminalStatus.value,sessionId:terminalScopeId.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()}}function startTerminalSessionForScope(currentScopeId){return globalScope.value?codexCommands.startGlobalCodexTerminal():codexCommands.startAgentTerminal(currentScopeId)}function closeTerminalSessionForScope(currentScopeId,terminalId){return globalScope.value?codexCommands.closeGlobalCodexTerminal(currentScopeId,terminalId):codexCommands.closeAgentTerminal(currentScopeId,terminalId)}async function closeCodexTerminalDriverSession(terminalId){const result=await closeTerminalSessionForScope(terminalScopeId.value,terminalId);if((result==null?void 0: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 webSocketUrlForScope(currentScopeId,terminalId){return globalScope.value?vibe64GlobalCodexTerminalWebSocketUrl(currentScopeId,terminalId):vibe64AgentTerminalWebSocketUrl(currentScopeId,terminalId)}function openCodexReconnectDialog(){requestVibe64AccountConnectionsDialog({codexReconnectRequired:true,providerId:"codex",refresh:false})}function codexAccountConnectedPayload(payload={}){const accountId=String((payload==null?void 0:payload.accountId)||(payload==null?void 0:payload.connectionId)||"").trim().toLowerCase();const status=String((payload==null?void 0:payload.status)||"").trim().toLowerCase();return accountId==="codex"&&(payload==null?void 0: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(){void recoverCodexTerminalAfterAccountReconnect()}});async function uploadAttachmentForScope(currentScopeId,file,options={}){if(globalScope.value){throw new Error("Temporary attachments are available in session Codex terminals.")}return codexCommands.uploadAttachment(currentScopeId,file,options)}async function sendAttachmentPathForScope(text,attachmentIds=[]){if(globalScope.value||!sessionId.value||!terminalSessionId.value){throw new Error("Codex terminal is not ready for attachments.")}const response=await codexCommands.sendAgentTerminalText(sessionId.value,terminalSessionId.value,text,{attachmentIds});if((response==null?void 0:response.ok)===false){throw new Error(response.error||"Attachment path could not be sent to Codex.")}return true}async function sendTerminalData(data,{source="program"}={}){const input=String(data);try{if(!await ensureTerminalReady()){return false}if(!await sendTerminalBytes(input)){return false}if(source==="user"&&input.includes("")){clearCodexBusy();clearCodexWorking()}else if(source==="user"&&input.includes("\r")){markCodexBusy()}return true}catch(sendError){terminalError.value=String((sendError==null?void 0:sendError.message)||sendError||"Terminal input failed.");return false}}async function sendEscape(){return sendTerminalData("\x1B",{source:"user"})}async function focusTerminal(){if(!hasTerminalSession.value){return false}return focusTerminalUi()}async function focusWritableTerminalWhenShown(visible){if(!visible||props.readOnly||!hasTerminalSession.value){return}await nextTick();focusTerminal();for(const delayMs of[50,150,300]){globalThis.setTimeout(()=>{if(terminalDisplayActive.value&&props.autoFocus&&!props.readOnly&&!terminalFocused.value){focusTerminal()}},delayMs)}}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 startTerminalSessionForScope(terminalScopeId.value);if((session==null?void 0: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==null?void 0: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}void connectAttachedTerminal().catch(error=>{terminalError.value=terminalError.value||String((error==null?void 0: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==null?void 0: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 terminalSessionMissingError(message=""){return/terminal session not found/iu.test(String(message||""))}function markTerminalSessionStale(terminalId="",message=""){const normalizedTerminalId=String(terminalId||"").trim();if(normalizedTerminalId){staleTerminalSessionIds.value=new Set([...staleTerminalSessionIds.value,normalizedTerminalId])}closeTerminalSocket();resetTerminalSessionState();resetTerminalDisplay();resetTerminalOutput();void abandonTerminalAttachments();terminalError.value=String(message||"");emitTerminalSessionState({agentTerminalSessionId:normalizedTerminalId,agentTerminalStatus:"stale"})}function detachTerminal(){terminalStartPromise=null;void 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=>{void 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||props.autoFocus)){void 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:handleTerminalAttachmentDragEnter,onDragover:handleTerminalAttachmentDragOver,onDragleave:handleTerminalAttachmentDragLeave,onDrop:handleTerminalAttachmentDrop},[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$5)):createCommentVNode("",true),createVNode(_sfc_main$7,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":terminalErrorTitle.value,fill:"",height:"100%","mobile-takeover":"",presentation:terminalPresentation.value,"show-copy":"","show-interrupt":!__props.readOnly,stage:terminalSubtitle.value,status:unref(terminalStatus),subtitle:terminalSubtitle.value,terminal:unref(terminalController),title:"Codex terminal",visible:terminalStreamActive.value,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[0]||(_cache[0]=[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(),createElementBlock("div",_hoisted_3$5,[createVNode(VSheet,{class:"vibe64-codex-session__drop-card",rounded:"lg",elevation:"4"},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiPaperclip),size:"28"},null,8,["icon"]),_cache[1]||(_cache[1]=createBaseVNode("span",null,"Drop temporary files for Codex",-1))]),_:1})])):createCommentVNode("",true),showTerminalStartPanel.value?(openBlock(),createElementBlock("div",_hoisted_4$5,[createVNode(VSheet,{class:"vibe64-codex-session__start-card",rounded:"lg",elevation:"4",role:"status"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_5$5,[createVNode(VIcon,{icon:terminalStartIcon.value,size:"30"},null,8,["icon"])]),createBaseVNode("div",_hoisted_6$3,[createBaseVNode("strong",null,toDisplayString(terminalStartPanelTitle.value),1),createBaseVNode("span",null,toDisplayString(terminalStartPanelMessage.value),1)]),terminalStartActionVisible.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":terminalStartButtonIcon.value,size:"default",variant:"flat",onClick:restartTerminal},{default:withCtx(()=>[createTextVNode(toDisplayString(terminalStartButtonText.value),1)]),_:1},8,["aria-busy","disabled","prepend-icon"])):createCommentVNode("",true)]),_:1})])):createCommentVNode("",true)]),"before-terminal":withCtx(()=>[createVNode(Vibe64AttachmentQueue,{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_7$3,toDisplayString(commandPreview||"Codex is not running."),1),copyStatus.value||unref(attachmentStatus)?(openBlock(),createElementBlock("span",_hoisted_8$3,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$6)}}};const Vibe64CodexSession=_export_sfc(_sfc_main$6,[["__scopeId","data-v-6bd6d51d"]]);const _hoisted_1$5=["aria-hidden"];const _hoisted_2$4={key:0,class:"vibe64-opencode-session__start-panel"};const _hoisted_3$4={class:"vibe64-opencode-session__start-icon"};const _hoisted_4$4={class:"vibe64-opencode-session__start-copy"};const _hoisted_5$4={class:"vibe64-opencode-session__command"};const _sfc_main$5={__name:"Vibe64OpenCodeSession",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 sessionId=computed(()=>{var _a;return String(((_a=props.session)==null?void 0:_a.sessionId)||"")});const sessionSource=computed(()=>vibe64SessionSourcePath(props.session||{}));const displayActive=computed(()=>props.visible&&props.displayMode!=="headless");const serverTerminal=computed(()=>{var _a,_b;const terminal=(_b=(_a=props.session)==null?void 0:_a.agentSession)==null?void 0:_b.terminal;return terminal&&typeof terminal==="object"&&!Array.isArray(terminal)?terminal:{}});const serverTerminalId=computed(()=>String(serverTerminal.value.id||serverTerminal.value.terminalSessionId||""));const hiddenListenActive=computed(()=>Boolean(props.listenWhenHidden&&serverTerminalId.value&&!displayActive.value));const terminalStreamActive=computed(()=>Boolean(displayActive.value||hiddenListenActive.value));const terminalPresentation=computed(()=>displayActive.value?"inline":"headless");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,resetTerminalDisplay,resetTerminalSessionState,terminalCommandPreview,terminalError,terminalExited,terminalSessionId,terminalStarting,terminalStatus}=terminalController;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 OpenCode"}return terminalExited.value?"Exited":terminalStatus.value==="running"?"":"OpenCode 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==null?void 0: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){void 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==null?void 0:session.ok)===false||!(session==null?void 0:session.id)){throw new Error(vibe64TerminalErrorMessage(session,"OpenCode terminal failed to start."))}await applyTerminalSession(session,{fallbackStatus:"running",ownership:"owned"});emitTerminalState();return await connectTerminalSocket()}catch(error){terminalError.value=vibe64TerminalErrorMessage(error,"OpenCode terminal failed to start.");return false}finally{terminalStarting.value=false}}async function closeTerminal(){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=>{void attachTerminal(terminal)},{flush:"post",immediate:true});watch(terminalStreamActive,active=>{if(active&&terminalSessionId.value){void connectTerminalSocket()}});watch(sessionId,(_next,previous)=>{if(previous){detachTerminal()}});onMounted(()=>{if(terminalStreamActive.value&&terminalSessionId.value){void connectTerminalSocket()}});onBeforeUnmount(()=>{detachTerminal();disposeTerminalUi()});return(_ctx,_cache)=>{return openBlock(),createElementBlock("div",{class:normalizeClass(["vibe64-opencode-session",{"vibe64-opencode-session--headless":__props.displayMode==="headless"}]),"aria-hidden":__props.displayMode==="headless"?"true":void 0},[createVNode(_sfc_main$7,{"command-preview":unref(terminalCommandPreview),error:unref(terminalError),"error-title":"OpenCode terminal needs attention",fill:"",height:"100%",presentation:terminalPresentation.value,"show-interrupt":!__props.readOnly,stage:terminalSubtitle.value,status:unref(terminalStatus),subtitle:terminalSubtitle.value,terminal:unref(terminalController),title:"OpenCode terminal",visible:terminalStreamActive.value,onCleanExit:closeTerminal,onClose:closeTerminal},{overlay:withCtx(()=>[showStartPanel.value?(openBlock(),createElementBlock("div",_hoisted_2$4,[createVNode(VSheet,{class:"vibe64-opencode-session__start-card",elevation:"4",role:"status",rounded:"lg"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_3$4,[createVNode(VIcon,{icon:unref(terminalExited)?unref(mdiRestart):unref(mdiPlayCircleOutline),size:"30"},null,8,["icon"])]),createBaseVNode("div",_hoisted_4$4,[createBaseVNode("strong",null,toDisplayString(unref(terminalExited)?"OpenCode terminal exited":"OpenCode terminal is off"),1),createBaseVNode("span",null,toDisplayString(sourcePending.value?"The terminal can start after the session source is ready.":"Start an interactive OpenCode terminal for this session."),1)]),!sourcePending.value?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":unref(terminalStarting)?"true":void 0,class:"vibe64-opencode-session__start-action",color:"primary",disabled:unref(terminalStarting),"prepend-icon":unref(terminalExited)?unref(mdiRestart):unref(mdiPlayCircleOutline),variant:"flat",onClick:restartTerminal},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(terminalStarting)?"Starting OpenCode…":unref(terminalExited)?"Restart OpenCode":"Start OpenCode"),1)]),_:1},8,["aria-busy","disabled","prepend-icon"])):createCommentVNode("",true)]),_:1})])):createCommentVNode("",true)]),footer:withCtx(({commandPreview,status})=>[createBaseVNode("span",_hoisted_5$4,toDisplayString(commandPreview||"OpenCode is not running."),1),status?(openBlock(),createBlock(VChip,{key:0,size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(status),1)]),_:2},1024)):createCommentVNode("",true)]),_:1},8,["command-preview","error","presentation","show-interrupt","stage","status","subtitle","terminal","visible"])],10,_hoisted_1$5)}}};const Vibe64OpenCodeSession=_export_sfc(_sfc_main$5,[["__scopeId","data-v-2e064c10"]]);const _hoisted_1$4={class:"studio-renewal-assistant__heading"};const _hoisted_2$3={class:"text-body-small"};const _hoisted_3$3={class:"studio-renewal-assistant__error"};const _hoisted_4$3={key:3,class:"studio-renewal-assistant__fields"};const _hoisted_5$3={key:4,class:"studio-renewal-assistant__summary text-body-small",role:"status"};const _sfc_main$4={__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=>{var _a;return((_a=engine.health)==null?void 0:_a.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==null?void 0:engine.engineId)===engineId.value)||null);const providerRows=computed(()=>{const engine=engineId.value==="opencode"?details.providerEngine.value:details.selectedOverviewEngine.value;return((engine==null?void 0:engine.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(()=>{var _a,_b;return((_a=details.modelEngine.value)==null?void 0:_a.engineId)===engineId.value?((_b=details.modelEngine.value.modelProviders)==null?void 0:_b.find(provider=>provider.id===modelProviderId.value&&provider.connected===true))||null:null});const modelRows=computed(()=>{var _a;return((_a=modelProvider.value)==null?void 0:_a.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(()=>{var _a;const providerId=modelProviderId.value;const selectedModelId=modelId.value;return(((_a=selectedEngine.value)==null?void 0:_a.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(()=>{var _a;return[{title:"Automatic",value:""},...(((_a=selectedModel.value)==null?void 0:_a.variants)||[]).map(variant=>({title:variant.label||variant.id,value:variant.id}))]});const selectionRevision=computed(()=>{var _a;return String(((_a=selectedEngine.value)==null?void 0:_a.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(()=>{var _a,_b,_c;if(!selection.value)return"";const engine=engineRows.value.find(row=>row.engineId===engineId.value);return[(engine==null?void 0:engine.label)||engineId.value,(_a=selectedProvider.value)==null?void 0:_a.label,((_b=selectedModel.value)==null?void 0:_b.label)||modelId.value,(_c=variantItems.value.find(variant=>variant.value===variantId.value))==null?void 0:_c.title].filter(Boolean).join(" · ")});function hydrateSelection(value2=null){const current=value2&&typeof value2==="object"?value2:{};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(value2=""){engineId.value=String(value2||"");modelProviderId.value="";modelId.value="";agentId.value="";variantId.value=""}function selectProvider(value2=""){modelProviderId.value=String(value2||"");modelId.value="";agentId.value="";variantId.value=""}function selectModel(value2=""){modelId.value=String(value2||"");agentId.value="";variantId.value=""}function selectVariant(value2=""){variantId.value=String(value2||"")}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])=>{var _a;if(!active.value||isLoading||engines.some(engine=>engine.engineId===engineId.value))return;const preferred=engines.find(engine=>{var _a2;return(_a2=engine.modelProviders)==null?void 0:_a2.some(provider=>provider.preferred===true)});selectEngine((preferred==null?void 0:preferred.engineId)||((_a=engines[0])==null?void 0:_a.engineId)||"")},{immediate:true});watch([providerRows,engineDetailsLoading,providerLoading],([providers,engineLoading,providersLoading])=>{var _a,_b,_c;if(!active.value||engineLoading||providersLoading||providers.some(provider=>provider.id===modelProviderId.value))return;const preferred=providers.find(provider=>provider.preferred===true);selectProvider((preferred==null?void 0:preferred.id)||((_b=(_a=selectedEngine.value)==null?void 0:_a.defaults)==null?void 0:_b.modelProviderId)||((_c=providers[0])==null?void 0:_c.id)||"")},{immediate:true});watch([availableModels,modelRows,modelLoading],([models,allModels,isLoading])=>{var _a,_b,_c,_d,_e;if(!active.value||isLoading||allModels.some(model=>model.id===modelId.value&&model.status==="available"))return;const defaultModelId=((_a=selectedProvider.value)==null?void 0:_a.defaultModelId)||((_c=(_b=selectedEngine.value)==null?void 0:_b.defaults)==null?void 0:_c.modelId);selectModel(((_d=models.find(model=>model.id===defaultModelId))==null?void 0:_d.id)||((_e=models[0])==null?void 0:_e.id)||"")},{immediate:true});watch([compatibleAgents,detailsLoading],([agents,isLoading])=>{var _a,_b;if(!active.value||isLoading||agents.some(agent=>agent.id===agentId.value))return;agentId.value=((_a=agents.find(agent=>{var _a2,_b2;return agent.id===((_b2=(_a2=selectedEngine.value)==null?void 0:_a2.defaults)==null?void 0:_b2.agentId)}))==null?void 0:_a.id)||((_b=agents[0])==null?void 0:_b.id)||""},{immediate:true});watch([selectedModel,selectedAgent],([model,agent])=>{if(!active.value||!model)return;const fixedVariant=String((agent==null?void 0: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$4,[createBaseVNode("span",null,[createBaseVNode("strong",{id:headingId,class:"text-title-small"},toDisplayString(__props.heading),1),createBaseVNode("small",_hoisted_2$3,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$3,[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$3,[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$3,toDisplayString(__props.summaryPrefix)+toDisplayString(selectionSummary.value),1)):createCommentVNode("",true)])}}};const Vibe64RenewalAssistantSelector=_export_sfc(_sfc_main$4,[["__scopeId","data-v-baa8b844"]]);const SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS=2e4;const 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"])})]);const SESSION_RENEWAL_RESTORE_PROGRESS=Object.freeze([Object.freeze({id:"restore",label:"Restore the old session safely",state:"active"})]);function sessionRenewalText(value2=""){return String(value2??"").replaceAll("\r\n","\n").replaceAll("\r","\n")}function sessionRenewalDraftCharacterCount(value2=""){return Array.from(sessionRenewalText(value2)).length}function sessionRenewalPhase(renewal=null,{initialLoading=false,loadError=""}={}){if(!renewal&&initialLoading){return"loading"}if(!renewal&&String(loadError||"").trim()){return"load_error"}const status=String((renewal==null?void 0:renewal.status)||"").trim();if(!renewal||status==="cancelled"){return"intro"}if(status==="review"){return"review"}if(status==="failed"){return"failed"}if(status==="completed"){return"completed"}return"progress"}function sessionRenewalStageProgress(stage=""){const currentStage=String(stage||"").trim();if(currentStage==="failure_restoring"){return SESSION_RENEWAL_RESTORE_PROGRESS.map(step=>({...step}))}const activeIndex=SESSION_RENEWAL_PROGRESS_STAGES.findIndex(step=>step.stages.has(currentStage));return SESSION_RENEWAL_PROGRESS_STAGES.map((step,index)=>({id:step.id,label:step.label,state:currentStage==="completed"||activeIndex>=0&&index<activeIndex?"complete":index===activeIndex?"active":"pending"}))}function sessionRenewalStageLabel(stage=""){return{draft_generating:"Preparing the handover…",failure_restoring:"Restoring the old session…",old_archiving:"Archiving the old session…",old_quiescing:"Stopping old session tools…",successor_acknowledged:"Fresh assistant is ready…",successor_activating:"Opening the fresh session…",successor_creating:"Creating the fresh session…",successor_discarding:"Resetting the fresh session safely…",successor_seeding:"Briefing the fresh assistant…",successor_setup:"Preparing the fresh workspace…"}[String(stage||"").trim()]||"Renewing this session…"}function sessionRenewalFailureSupportingMessage(renewal=null){var _a,_b,_c;let message="";if(String(((_a=renewal==null?void 0:renewal.error)==null?void 0:_a.code)||"").trim()==="vibe64_session_renewal_restore_failed"){message="The old session and its recovery state are retained, but it is not writable yet. Retry to finish restoring it safely."}else if(((_b=renewal==null?void 0:renewal.error)==null?void 0:_b.retryable)!==false){message="The old session remains available. Fix the reported condition, then retry the same saved renewal."}else{message="The old session remains available. This renewal cannot be retried here; resolve the reported condition before continuing from the old session."}return String(((_c=renewal==null?void 0:renewal.error)==null?void 0:_c.message)||"").trim()===message?"":message}function sessionRenewalAdvisoryPresentation(advisory={}){const severity=String((advisory==null?void 0:advisory.severity)||"none").trim();const recommended=(advisory==null?void 0:advisory.recommended)===true;return{attention:recommended,color:severity==="soon"?"warning":recommended?"primary":void 0,label:severity==="soon"?"Renew soon":recommended?"Consider renewal":"Renew session",reason:String((advisory==null?void 0:advisory.reason)||"Renew this session with a reviewed handover.").trim()}}function sessionRenewalOperationKey(sessionId="",{now=Date.now(),randomId=""}={}){const safeSessionId=String(sessionId||"").trim().replace(/[^A-Za-z0-9_.-]+/gu,"-").slice(0,48)||"session";const safeRandomId=String(randomId||"").trim().replace(/[^A-Za-z0-9_.-]+/gu,"").slice(0,40)||Math.random().toString(36).slice(2,14);return`renewal:${safeSessionId}:${Number(now).toString(36)}:${safeRandomId}`.slice(0,128)}const _hoisted_1$3={class:"studio-session-renewal__heading"};const _hoisted_2$2={class:"studio-session-renewal__icon","aria-hidden":"true"};const _hoisted_3$2={class:"studio-session-renewal__notice-with-action"};const _hoisted_4$2={class:"studio-session-renewal__notice-copy"};const _hoisted_5$2={class:"text-body-small"};const _hoisted_6$2={key:1,class:"studio-session-renewal__skeleton","aria-label":"Loading session renewal",role:"status"};const _hoisted_7$2={class:"studio-session-renewal__notice-copy"};const _hoisted_8$2={class:"text-title-small"};const _hoisted_9$1={class:"text-body-medium"};const _hoisted_10$1=["aria-live"];const _hoisted_11$1={class:"text-title-small"};const _hoisted_12$1={"aria-label":"Session renewal progress",class:"studio-session-renewal__steps text-body-medium"};const _hoisted_13$1=["aria-current"];const _hoisted_14$1={class:"studio-session-renewal__step-icon","aria-hidden":"true"};const _hoisted_15$1={class:"d-sr-only"};const _hoisted_16={class:"studio-session-renewal__inline-actions"};const _hoisted_17={class:"studio-session-renewal__notice-copy"};const _hoisted_18={key:0,class:"text-body-small"};const _hoisted_19={key:0,"aria-label":"Saved source details to preserve",class:"studio-session-renewal__source-details text-body-small"};const _hoisted_20={key:3,class:"studio-session-renewal__supporting text-body-small",role:"status"};const _hoisted_21={key:0,class:"studio-session-renewal__supporting text-body-small"};const _hoisted_22={class:"studio-session-renewal__notice-copy"};const _hoisted_23={class:"text-body-small"};const _sfc_main$3={__name:"Vibe64SessionRenewalDialog",props:{renewal:{default:()=>({}),type:Object}},setup(__props){const props=__props;const{smAndDown}=useDisplay();const renewalTitleId=`vibe64-session-renewal-title-${useId()}`;const assistantSelectionReady=ref(false);const successorAssistantSelection=ref(null);const dialogBusy=computed(()=>Boolean(props.renewal.successorSelectionPending||props.renewal.busy&&props.renewal.phase!=="progress"));const renewalProgress=computed(()=>{const steps=Array.isArray(props.renewal.steps)?props.renewal.steps:[];if(!steps.length){return 0}const completed=steps.reduce((value2,step)=>value2+(step.state==="complete"?1:step.state==="active"?.5:0),0);return Math.round(completed/steps.length*100)});const canConfirmRenewal=computed(()=>Boolean(props.renewal.canConfirm&&assistantSelectionReady.value&&successorAssistantSelection.value));const manualDraft=computed(()=>{var _a,_b;return((_b=(_a=props.renewal.renewal)==null?void 0:_a.draft)==null?void 0:_b.origin)==="manual"});const failedSupportingMessage=computed(()=>sessionRenewalFailureSupportingMessage(props.renewal.renewal));const manualSourceItems=computed(()=>{var _a,_b;const source=(_b=(_a=props.renewal.renewal)==null?void 0:_a.basis)==null?void 0:_b.source;if(!source||typeof source!=="object"||Array.isArray(source)){return[]}return[{label:"Authority",value:source.authority},{label:"Repository",value:source.repository},{label:"Reference",value:source.ref},{label:"Commit",value:source.commit}].filter(item=>String(item.value||"").trim()).map(item=>({...item,value:String(item.value).trim()}))});function stepStateLabel(state=""){return{active:"Current step",complete:"Complete",pending:"Not started"}[String(state||"")]||""}function closeFromModel(value2){var _a,_b;if(!value2&&!dialogBusy.value){(_b=(_a=props.renewal).close)==null?void 0:_b.call(_a)}}function confirmRenewal(){var _a,_b;if(canConfirmRenewal.value){(_b=(_a=props.renewal).confirm)==null?void 0:_b.call(_a,successorAssistantSelection.value)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"aria-labelledby":renewalTitleId,fullscreen:unref(smAndDown),"model-value":__props.renewal.open,"max-width":"46rem",persistent:dialogBusy.value,scrollable:"",onAfterLeave:_cache[2]||(_cache[2]=$event=>{var _a,_b;return(_b=(_a=__props.renewal).restoreTriggerFocus)==null?void 0:_b.call(_a)}),"onUpdate:modelValue":closeFromModel},{default:withCtx(()=>[createVNode(VCard,{class:normalizeClass(["studio-session-renewal",{"studio-session-renewal--fullscreen":unref(smAndDown)}]),"data-vibe64-session-renewal":"","data-vibe64-session-renewal-phase":__props.renewal.phase,rounded:unref(smAndDown)?"0":"xl"},{default:withCtx(()=>[createVNode(VCardTitle,{class:"studio-session-renewal__header"},{default:withCtx(()=>[createBaseVNode("span",_hoisted_1$3,[createBaseVNode("span",_hoisted_2$2,[createVNode(VIcon,{icon:unref(mdiAutorenew),size:"24"},null,8,["icon"])]),createBaseVNode("span",null,[createBaseVNode("h2",{id:renewalTitleId,class:"text-title-medium"},"Renew this session"),_cache[3]||(_cache[3]=createBaseVNode("span",{class:"studio-session-renewal__subtitle text-body-small"}," Continue in a fresh conversation ",-1))])]),createVNode(VBtn,{"aria-label":"Close session renewal","data-vibe64-session-renewal-close":"icon",disabled:dialogBusy.value,height:"48",icon:unref(mdiClose),title:"Close",variant:"text",width:"48",onClick:__props.renewal.close},null,8,["disabled","icon","onClick"])]),_:1}),createVNode(VDivider),createVNode(VCardText,{class:"studio-session-renewal__body"},{default:withCtx(()=>{var _a,_b,_c,_d,_e;return[__props.renewal.refreshError&&__props.renewal.phase!=="load_error"?(openBlock(),createBlock(VAlert,{key:0,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),role:"status",type:"warning",variant:"tonal"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_3$2,[createBaseVNode("span",_hoisted_4$2,[_cache[4]||(_cache[4]=createBaseVNode("strong",{class:"text-title-small"},"Latest progress could not be checked",-1)),_cache[5]||(_cache[5]=createBaseVNode("span",{class:"text-body-medium"},"The last saved renewal state is shown. Nothing has been discarded.",-1)),createBaseVNode("span",_hoisted_5$2,toDisplayString(__props.renewal.refreshError),1)]),createVNode(VBtn,{"aria-busy":__props.renewal.refreshing?"true":void 0,disabled:__props.renewal.refreshing,height:"48",type:"button",variant:"text",onClick:__props.renewal.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.refreshing?"Checking…":"Check again"),1)]),_:1},8,["aria-busy","disabled","onClick"])])]),_:1},8,["icon"])):createCommentVNode("",true),__props.renewal.phase==="loading"?(openBlock(),createElementBlock("div",_hoisted_6$2,[createVNode(VSkeletonLoader,{type:"paragraph, paragraph"}),createVNode(VSkeletonLoader,{height:"224",type:"image"})])):__props.renewal.phase==="load_error"?(openBlock(),createBlock(StudioErrorNotice,{key:2,title:"Session renewal could not load",error:__props.renewal.loadError},null,8,["error"])):__props.renewal.phase==="intro"?(openBlock(),createElementBlock(Fragment,{key:3},[_cache[7]||(_cache[7]=createBaseVNode("p",{class:"studio-session-renewal__lead text-body-large"}," Vibe64 will ask this session to write a detailed handover, let you review it, and create a fresh session from the current saved version. ",-1)),((_a=__props.renewal.advisoryPresentation)==null?void 0:_a.attention)?(openBlock(),createBlock(VAlert,{key:0,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),type:__props.renewal.advisoryPresentation.color==="warning"?"warning":"info",variant:"tonal"},{default:withCtx(()=>[createBaseVNode("span",_hoisted_7$2,[createBaseVNode("strong",_hoisted_8$2,toDisplayString(__props.renewal.advisoryPresentation.label),1),createBaseVNode("span",_hoisted_9$1,toDisplayString(__props.renewal.advisoryPresentation.reason),1)])]),_:1},8,["icon","type"])):createCommentVNode("",true),createVNode(VSheet,{class:"studio-session-renewal__assurance text-body-medium",color:"surface-variant",rounded:"lg"},{default:withCtx(()=>[createVNode(VIcon,{color:"primary",icon:unref(mdiArchiveCheckOutline),size:"22"},null,8,["icon"]),_cache[6]||(_cache[6]=createBaseVNode("span",null,[createBaseVNode("strong",{class:"font-weight-medium"},"Your old session is kept until the handover is delivered."),createTextVNode(" Once it reaches the fresh assistant conversation, renewal completes even if the model cannot answer. ")],-1))]),_:1}),_cache[8]||(_cache[8]=createBaseVNode("p",{class:"studio-session-renewal__supporting text-body-small"}," Before starting, save or discard any source changes and wait for assistant, workspace, Save, and Update activity to finish. ",-1))],64)):__props.renewal.phase==="progress"?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode("div",{class:"studio-session-renewal__progress-copy","aria-live":__props.renewal.refreshError?"off":"polite",role:"status"},[createBaseVNode("strong",_hoisted_11$1,toDisplayString(__props.renewal.stageLabel),1),_cache[9]||(_cache[9]=createBaseVNode("span",{class:"text-body-small"},"You can close this window. Progress is saved and will resume safely.",-1))],8,_hoisted_10$1),createVNode(VProgressLinear,{"aria-label":"Session renewal in progress",class:"studio-session-renewal__progress-line",color:"primary",indeterminate:!__props.renewal.refreshError,"model-value":__props.renewal.refreshError?renewalProgress.value:void 0,rounded:""},null,8,["indeterminate","model-value"]),createBaseVNode("ol",_hoisted_12$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.renewal.steps,step=>{return openBlock(),createElementBlock("li",{key:step.id,"aria-current":step.state==="active"?"step":void 0,class:normalizeClass([`studio-session-renewal__step--${step.state}`,{"font-weight-medium":step.state==="active"}])},[createBaseVNode("span",_hoisted_14$1,[createVNode(VIcon,{icon:step.state==="complete"?unref(mdiCheck):step.state==="active"?unref(mdiCircleSlice4):unref(mdiCircleOutline),size:"18"},null,8,["icon"])]),createBaseVNode("span",null,toDisplayString(step.label),1),createBaseVNode("span",_hoisted_15$1,toDisplayString(stepStateLabel(step.state)),1)],10,_hoisted_13$1)}),128))])],64)):__props.renewal.phase==="review"?(openBlock(),createElementBlock(Fragment,{key:5},[_cache[15]||(_cache[15]=createBaseVNode("p",{class:"studio-session-renewal__lead text-body-large"}," Review what the fresh assistant will receive. Add anything important before continuing. ",-1)),__props.renewal.draftConflict?(openBlock(),createBlock(VAlert,{key:0,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),role:"alert",type:"warning",variant:"tonal"},{default:withCtx(()=>[_cache[12]||(_cache[12]=createBaseVNode("span",{class:"studio-session-renewal__notice-copy"},[createBaseVNode("strong",{class:"text-title-small"},"This handover changed elsewhere"),createBaseVNode("span",{class:"text-body-medium"},"Your unsaved edits are still here. Choose which version to continue editing before saving or renewing.")],-1)),createBaseVNode("div",_hoisted_16,[createVNode(VBtn,{height:"48",type:"button",variant:"text",onClick:__props.renewal.keepLocalDraft},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(" Keep my edits ",-1)])]),_:1},8,["onClick"]),createVNode(VBtn,{color:"primary",height:"48",type:"button",variant:"tonal",onClick:__props.renewal.acceptLatestDraft},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(" Discard my edits and use latest ",-1)])]),_:1},8,["onClick"])])]),_:1},8,["icon"])):createCommentVNode("",true),manualDraft.value?(openBlock(),createBlock(VAlert,{key:1,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),type:"info",variant:"tonal"},{default:withCtx(()=>{var _a2,_b2;return[createBaseVNode("span",_hoisted_17,[_cache[13]||(_cache[13]=createBaseVNode("strong",{class:"text-title-small"},"Complete the handover template",-1)),_cache[14]||(_cache[14]=createBaseVNode("span",{class:"text-body-medium"}," The assistant could not provide a verified handover. Fill in every section, and keep the Saved source details unchanged so the fresh assistant can verify its exact starting point. ",-1)),((_b2=(_a2=__props.renewal.renewal)==null?void 0:_a2.error)==null?void 0:_b2.message)?(openBlock(),createElementBlock("span",_hoisted_18,toDisplayString(__props.renewal.renewal.error.message),1)):createCommentVNode("",true)]),manualSourceItems.value.length?(openBlock(),createElementBlock("dl",_hoisted_19,[(openBlock(true),createElementBlock(Fragment,null,renderList(manualSourceItems.value,item=>{return openBlock(),createElementBlock(Fragment,{key:item.label},[createBaseVNode("dt",null,toDisplayString(item.label),1),createBaseVNode("dd",null,[createBaseVNode("code",null,toDisplayString(item.value),1)])],64)}),128))])):createCommentVNode("",true)]}),_:1},8,["icon"])):((_c=(_b=__props.renewal.renewal)==null?void 0:_b.error)==null?void 0:_c.message)?(openBlock(),createBlock(VAlert,{key:2,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),type:"info",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.renewal.error.message),1)]),_:1},8,["icon"])):createCommentVNode("",true),createVNode(VTextarea,{"model-value":__props.renewal.draftText,autofocus:"",class:"studio-session-renewal__draft",counter:__props.renewal.maxHandoverCharacters,error:Boolean(__props.renewal.draftError),"error-messages":__props.renewal.draftError,label:"Handover for the fresh session","persistent-counter":"",rows:"12",variant:"outlined","onUpdate:modelValue":__props.renewal.setDraftText},{counter:withCtx(()=>[createBaseVNode("span",null,toDisplayString(__props.renewal.draftCharacterCount.toLocaleString())+" / "+toDisplayString(__props.renewal.maxHandoverCharacters.toLocaleString()),1)]),_:1},8,["model-value","counter","error","error-messages","onUpdate:modelValue"]),__props.renewal.draftDirty?(openBlock(),createElementBlock("p",_hoisted_20," Unsaved edits are kept in this browser tab if you close this window or switch sessions. ")):createCommentVNode("",true),createVNode(Vibe64RenewalAssistantSelector,{active:__props.renewal.open&&__props.renewal.phase==="review",disabled:dialogBusy.value,"initial-selection":__props.renewal.assistantSelection,"onUpdate:ready":_cache[0]||(_cache[0]=$event=>assistantSelectionReady.value=$event),"onUpdate:selection":_cache[1]||(_cache[1]=$event=>successorAssistantSelection.value=$event)},null,8,["active","disabled","initial-selection"]),_cache[16]||(_cache[16]=createBaseVNode("p",{class:"studio-session-renewal__supporting text-body-small"}," Renewing will stop this session’s tools, create and prepare a fresh session, deliver the handover, then archive this one. ",-1))],64)):__props.renewal.phase==="failed"?(openBlock(),createElementBlock(Fragment,{key:6},[createVNode(StudioErrorNotice,{title:"Session renewal needs attention",error:((_e=(_d=__props.renewal.renewal)==null?void 0:_d.error)==null?void 0:_e.message)||"Session renewal could not continue."},null,8,["error"]),failedSupportingMessage.value?(openBlock(),createElementBlock("p",_hoisted_21,toDisplayString(failedSupportingMessage.value),1)):createCommentVNode("",true)],64)):__props.renewal.phase==="completed"?(openBlock(),createElementBlock(Fragment,{key:7},[createVNode(VSheet,{class:"studio-session-renewal__success text-body-medium",color:"surface-variant",rounded:"lg",role:"status"},{default:withCtx(()=>[createVNode(VIcon,{color:"success",icon:unref(mdiCheckCircleOutline),size:"28"},null,8,["icon"]),createBaseVNode("span",null,[_cache[17]||(_cache[17]=createBaseVNode("strong",{class:"font-weight-medium"},"The fresh session is ready.",-1)),createTextVNode(" "+toDisplayString(__props.renewal.successorSelectionError?"It is ready to open; the old session remains available in the archive.":"Opening it now; the old session remains available in the archive."),1)])]),_:1}),__props.renewal.maintenanceNeedsRetry?(openBlock(),createBlock(VAlert,{key:0,class:"studio-session-renewal__notice",density:"compact",icon:unref(mdiInformationOutline),role:"status",type:"warning",variant:"tonal"},{default:withCtx(()=>[createBaseVNode("span",_hoisted_22,[_cache[18]||(_cache[18]=createBaseVNode("strong",{class:"text-title-small"},"Cleanup needs retry",-1)),_cache[19]||(_cache[19]=createBaseVNode("span",{class:"text-body-medium"}," The fresh session is ready, but Vibe64 has not finished retiring every old-session resource. ",-1)),createBaseVNode("span",_hoisted_23,toDisplayString(__props.renewal.maintenanceError),1)])]),_:1},8,["icon"])):createCommentVNode("",true),__props.renewal.successorSelectionError?(openBlock(),createBlock(StudioErrorNotice,{key:1,title:"The fresh session could not be opened automatically",error:__props.renewal.successorSelectionError},null,8,["error"])):createCommentVNode("",true)],64)):createCommentVNode("",true)]}),_:1}),createVNode(VDivider),createVNode(VCardActions,{class:normalizeClass(["studio-session-renewal__actions",{"studio-session-renewal__actions--compact":unref(smAndDown)}])},{default:withCtx(()=>{var _a,_b;return[__props.renewal.phase==="review"?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.renewal.pendingAction==="cancel"?"true":void 0,class:"studio-session-renewal__action",disabled:dialogBusy.value||Boolean(__props.renewal.draftConflict),height:"48",type:"button",variant:"text",onClick:__props.renewal.cancel},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction==="cancel"?__props.renewal.actionLabel:__props.renewal.draftDirty?"Discard edits and cancel":"Cancel renewal"),1)]),_:1},8,["aria-busy","disabled","onClick"])):(openBlock(),createBlock(VBtn,{key:1,class:"studio-session-renewal__action","data-vibe64-session-renewal-close":"footer",disabled:dialogBusy.value,height:"48",type:"button",variant:"text",onClick:__props.renewal.close},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(" Close ",-1)])]),_:1},8,["disabled","onClick"])),_cache[21]||(_cache[21]=createBaseVNode("span",{class:"studio-session-renewal__actions-spacer"},null,-1)),__props.renewal.phase==="load_error"?(openBlock(),createBlock(VBtn,{key:2,"aria-busy":__props.renewal.refreshing?"true":void 0,autofocus:"",class:"studio-session-renewal__action studio-session-renewal__action--primary",disabled:__props.renewal.refreshing,height:"48",type:"button",variant:"tonal",onClick:__props.renewal.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.refreshing?"Checking…":"Try again"),1)]),_:1},8,["aria-busy","disabled","onClick"])):__props.renewal.phase==="intro"?(openBlock(),createBlock(VBtn,{key:3,"aria-busy":__props.renewal.pendingAction==="draft"?"true":void 0,autofocus:"",class:"studio-session-renewal__action studio-session-renewal__action--primary",color:"primary",disabled:__props.renewal.busy,height:"48","prepend-icon":unref(mdiFileDocumentEditOutline),type:"button",variant:"flat",onClick:__props.renewal.requestDraft},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.actionLabel||"Prepare handover"),1)]),_:1},8,["aria-busy","disabled","prepend-icon","onClick"])):__props.renewal.phase==="review"?(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VBtn,{"aria-busy":__props.renewal.pendingAction==="save"?"true":void 0,class:"studio-session-renewal__action",disabled:!__props.renewal.canSaveDraft,height:"48",type:"button",variant:"tonal",onClick:__props.renewal.saveDraft},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction==="save"?__props.renewal.actionLabel:"Save draft"),1)]),_:1},8,["aria-busy","disabled","onClick"]),createVNode(VBtn,{"aria-busy":__props.renewal.pendingAction==="confirm"?"true":void 0,class:"studio-session-renewal__action studio-session-renewal__action--primary",color:"primary",disabled:!canConfirmRenewal.value,height:"48","prepend-icon":unref(mdiAutorenew),type:"button",variant:"flat",onClick:confirmRenewal},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction==="confirm"?__props.renewal.actionLabel:"Renew session"),1)]),_:1},8,["aria-busy","disabled","prepend-icon"])],64)):__props.renewal.phase==="failed"&&((_b=(_a=__props.renewal.renewal)==null?void 0:_a.error)==null?void 0:_b.retryable)!==false?(openBlock(),createBlock(VBtn,{key:5,"aria-busy":__props.renewal.pendingAction==="retry"?"true":void 0,autofocus:"",class:"studio-session-renewal__action studio-session-renewal__action--primary",color:"primary",disabled:__props.renewal.busy,height:"48","prepend-icon":unref(mdiRefresh),type:"button",variant:"flat",onClick:__props.renewal.retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.actionLabel||"Retry"),1)]),_:1},8,["aria-busy","disabled","prepend-icon","onClick"])):__props.renewal.phase==="completed"?(openBlock(),createElementBlock(Fragment,{key:6},[__props.renewal.maintenanceNeedsRetry?(openBlock(),createBlock(VBtn,{key:0,"aria-busy":__props.renewal.pendingAction==="retry"?"true":void 0,class:"studio-session-renewal__action",disabled:__props.renewal.busy,height:"48","prepend-icon":unref(mdiRefresh),type:"button",variant:"tonal",onClick:__props.renewal.retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.pendingAction==="retry"?__props.renewal.actionLabel:"Retry cleanup"),1)]),_:1},8,["aria-busy","disabled","prepend-icon","onClick"])):createCommentVNode("",true),createVNode(VBtn,{"aria-busy":__props.renewal.successorSelectionPending?"true":void 0,autofocus:Boolean(__props.renewal.successorSelectionError),class:"studio-session-renewal__action studio-session-renewal__action--primary",color:"primary",disabled:__props.renewal.successorSelectionPending,height:"48",type:"button",variant:"flat",onClick:__props.renewal.openSuccessor},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.renewal.successorSelectionPending?"Opening…":"Open fresh session"),1)]),_:1},8,["aria-busy","autofocus","disabled","onClick"])],64)):createCommentVNode("",true)]}),_:1},8,["class"])]),_:1},8,["class","data-vibe64-session-renewal-phase","rounded"])]),_:1},8,["fullscreen","model-value","persistent"])}}};const Vibe64SessionRenewalDialog=_export_sfc(_sfc_main$3,[["__scopeId","data-v-b0429194"]]);function plainObjectValue(value2=null){return value2&&typeof value2==="object"&&!Array.isArray(value2)?value2:{}}function sessionChangedReason(payload={}){return String((payload==null?void 0:payload.reason)||"").trim()}function sessionRevision(value2){const revision=Number(value2);return Number.isSafeInteger(revision)&&revision>=0?revision:null}function agentTurnRealtimeOverlayFromPayload(payload={},selectedSessionId=""){const changedSessionId=String((payload==null?void 0:payload.sessionId)||(payload==null?void 0:payload.entityId)||"").trim();if(!changedSessionId||changedSessionId!==String(selectedSessionId||"").trim()){return null}const agentSession=plainObjectValue(payload.agentSession);const turn=plainObjectValue(agentSession.turn);const run=plainObjectValue(payload.agentRun);const revision=sessionRevision(payload.revision);if(revision===null||!Object.keys(turn).length&&!Object.keys(run).length){return null}const active=turn.active===true||run.active===true;return{active,agentRun:{...run,active},agentSession:{...agentSession,turn:{...turn,active}},reason:sessionChangedReason(payload),revision,sessionId:changedSessionId}}function latestAgentTurnRealtimeOverlay(current=null,candidate=null){if(!candidate){return current}if(!current||candidate.revision>current.revision){return candidate}return current}function mergeAgentRunOverlay(agentRuns=[],overlayRun={}){const runs=Array.isArray(agentRuns)?agentRuns:[];const runId=String(overlayRun.id||"").trim();if(!runId){return runs}const nextRun={...overlayRun,id:runId};const index=runs.findIndex(run=>String((run==null?void 0:run.id)||"").trim()===runId);if(index<0){return[...runs,nextRun]}return runs.map((run,runIndex)=>runIndex===index?{...run,...nextRun}:run)}function sessionWithAgentTurnRealtimeOverlay(session=null,overlay=null){var _a,_b;const currentRevision=sessionRevision(session==null?void 0:session.revision);if(!session||!overlay||(session==null?void 0:session.ok)===false||session.sessionId!==overlay.sessionId||currentRevision!==null&&overlay.revision<=currentRevision){return session}const overlayAgentSession=plainObjectValue(overlay.agentSession);return{...session,agentRuns:mergeAgentRunOverlay(session.agentRuns,plainObjectValue(overlay.agentRun)),agentSession:{...plainObjectValue(session.agentSession),...overlayAgentSession,thread:{...plainObjectValue((_a=session.agentSession)==null?void 0:_a.thread),...plainObjectValue(overlayAgentSession.thread)},turn:{...plainObjectValue((_b=session.agentSession)==null?void 0:_b.turn),...plainObjectValue(overlayAgentSession.turn),active:overlay.active===true}},revision:overlay.revision}}function refetchMountedSessionResource(resource){var _a,_b;if(typeof((_a=resource==null?void 0:resource.query)==null?void 0:_a.refetch)==="function"){return resource.query.refetch({cancelRefetch:false})}return(_b=resource==null?void 0:resource.reload)==null?void 0:_b.call(resource)}function useVibe64MountedSessionData({active=false,sessionId,sessionsApiPath,summarySession=null}={}){var _a;const projectSlug=useVibe64ProjectSlug();const detailRecord=ref(null);const agentTurnOverlay=ref(null);const agentConnectionStatus=ref("disconnected");const mountedActive=computed(()=>readRefOrGetterValue(active)===true);const activeSessionId=computed(()=>String(readRefOrGetterValue(sessionId)||"").trim());const activeSessionsApiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||"").trim());const listSession=computed(()=>{const session2=readRefOrGetterValue(summarySession);return(session2==null?void 0:session2.sessionId)===activeSessionId.value?session2:null});const detailPath=computed(()=>activeSessionId.value&&activeSessionsApiPath.value?vibe64SessionPath(activeSessionsApiPath.value,activeSessionId.value):"");const detailQueryKey=computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),activeSessionId.value]);const detailResource=useEndpointResource({enabled:computed(()=>Boolean(activeSessionId.value&&activeSessionsApiPath.value)),fallbackLoadError:"Vibe64 session could not be loaded.",path:detailPath,queryKey:detailQueryKey,queryOptions:{queryFn:({signal})=>getHttpWebClient().request(detailPath.value,{signal:AbortSignal.any([signal,AbortSignal.timeout(2e4)])}),retry:false,refetchOnMount:"always",refetchOnWindowFocus:false},readMethod:"GET",realtime:{event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>mountedSessionRealtimeShouldRefresh({payload},activeSessionId.value)},refreshOnPull:true,requestRecoveryLabel:"Vibe64 session"});const detailState=computed(()=>{var _a2,_b,_c,_d;return mountedSessionDetailLoadState({detailSession:detailRecord.value,fetching:Boolean((_a2=detailResource.isFetching)==null?void 0:_a2.value),listSession:listSession.value,loadError:((_b=detailResource.loadError)==null?void 0:_b.value)||"",loading:Boolean(((_c=detailResource.isLoading)==null?void 0:_c.value)||((_d=detailResource.isInitialLoading)==null?void 0:_d.value)),sessionId:activeSessionId.value})});const baseSession=computed(()=>mountedSessionRecord(detailRecord.value,listSession.value,activeSessionId.value));const session=computed(()=>enrichVibe64SessionForDisplay(sessionWithAgentTurnRealtimeOverlay(baseSession.value,agentTurnOverlay.value)));let refreshInFlight=null;function acceptSessionResponse(candidate=null){var _a2;const nextRecord=latestSessionDetailRecord(detailRecord.value,candidate,activeSessionId.value);if(!nextRecord||nextRecord===detailRecord.value){return false}detailRecord.value=nextRecord;const canonicalRevision=vibe64SessionRevision(nextRecord);if(canonicalRevision!==null&&canonicalRevision>=Number((_a2=agentTurnOverlay.value)==null?void 0:_a2.revision)){agentTurnOverlay.value=null}return true}async function refresh(options={}){const reason=typeof options==="string"?options:String((options==null?void 0:options.reason)||"");if(!activeSessionId.value||!activeSessionsApiPath.value){return null}if(refreshInFlight){return refreshInFlight}const startedAtMs=Date.now();vibe64SessionDebugLog("client.mountedSession.refresh.start",{reason,sessionId:activeSessionId.value});refreshInFlight=Promise.resolve(refetchMountedSessionResource(detailResource));try{const result=await refreshInFlight;vibe64SessionDebugLog("client.mountedSession.refresh.done",{...vibe64SessionDebugSummary(session.value||{}),durationMs:vibe64SessionDebugDurationMs(startedAtMs),reason,sessionId:activeSessionId.value});return result}catch(error){vibe64SessionDebugLog("client.mountedSession.refresh.error",{durationMs:vibe64SessionDebugDurationMs(startedAtMs),error:vibe64SessionDebugError(error),reason,sessionId:activeSessionId.value});throw error}finally{refreshInFlight=null}}function refreshInBackground(reason=""){void refresh({reason}).catch(()=>{})}useRealtimeEvent({enabled:computed(()=>Boolean(activeSessionId.value)),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(agentTurnRealtimeOverlayFromPayload(payload,activeSessionId.value)),onEvent:({payload={}}={})=>{var _a2,_b,_c,_d;const overlay=agentTurnRealtimeOverlayFromPayload(payload,activeSessionId.value);if(!overlay){return}agentTurnOverlay.value=latestAgentTurnRealtimeOverlay(agentTurnOverlay.value,overlay);vibe64SessionDebugLog("client.mountedSession.agentTurn",{active:overlay.active===true,reason:overlay.reason,sessionId:overlay.sessionId,threadId:String(((_b=(_a2=overlay.agentSession)==null?void 0:_a2.thread)==null?void 0:_b.id)||""),turnId:String(((_d=(_c=overlay.agentSession)==null?void 0:_c.turn)==null?void 0:_d.id)||"")})}});const realtimeSocket=useRealtimeSocket({required:false});let connectionGeneration=realtimeSocket.connected?1:0;let reconciliationInFlight=null;let reconciliationController=null;let reconciliationRetryTimer=null;let reconciliationRetryDelay=1e3;let disposed=false;function clearReconciliationRetry(){clearTimeout(reconciliationRetryTimer);reconciliationRetryTimer=null}function scheduleReconciliationRetry(){var _a2;clearReconciliationRetry();if(disposed||!realtimeSocket.connected||((_a2=globalThis.document)==null?void 0:_a2.hidden)){return}reconciliationRetryTimer=setTimeout(()=>{var _a3;reconciliationRetryTimer=null;if(!((_a3=globalThis.document)==null?void 0:_a3.hidden)){void reconcileMountedAgentSession("retry")}},reconciliationRetryDelay);reconciliationRetryDelay=Math.min(reconciliationRetryDelay*2,3e4)}async function reconcileMountedAgentSession(reason="realtime-connect"){if(disposed||!realtimeSocket.connected||!activeSessionId.value||!activeSessionsApiPath.value){return null}if(reconciliationInFlight){return reconciliationInFlight}clearReconciliationRetry();const generation=connectionGeneration;const controller=new AbortController;reconciliationController=controller;const currentConnection=()=>!disposed&&realtimeSocket.connected&&generation===connectionGeneration;const timeout=setTimeout(()=>{controller.abort(new Error("Assistant status check timed out."))},45e3);const cancelled=new Promise((_resolve,reject)=>{controller.signal.addEventListener("abort",()=>reject(controller.signal.reason),{once:true})});agentConnectionStatus.value="reconciling";const checking=(async()=>{const refreshed=await refresh({reason});if(!currentConnection()||controller.signal.aborted){return null}if(refreshed==null?void 0:refreshed.isError){throw refreshed.error}const recoveringActiveAgentWork=sessionRecordHasActiveAgentWork(session.value);if(mountedActive.value||recoveringActiveAgentWork){const result=await getHttpWebClient().request(vibe64SessionPath(activeSessionsApiPath.value,activeSessionId.value,"/agent-session"),{body:{},method:"POST",signal:controller.signal});if((result==null?void 0:result.ok)!==true){throw Object.assign(new Error((result==null?void 0:result.error)||"Assistant status could not be reconciled."),{code:result==null?void 0:result.code})}}if(currentConnection()&&!controller.signal.aborted){agentConnectionStatus.value="connected";reconciliationRetryDelay=1e3;if(recoveringActiveAgentWork){refreshInBackground("agent-session-reconciled")}}return session.value})();reconciliationInFlight=Promise.race([checking,cancelled]).catch(error=>{if(currentConnection()){agentConnectionStatus.value="unknown";scheduleReconciliationRetry();console.warn("Vibe64 assistant status check failed; recovery will retry.",{code:String((error==null?void 0:error.code)||""),message:String((error==null?void 0:error.message)||""),reason,sessionId:activeSessionId.value})}vibe64SessionDebugLog("client.mountedSession.agentConnection.error",{error:vibe64SessionDebugError(error),reason,sessionId:activeSessionId.value});return null}).finally(()=>{clearTimeout(timeout);reconciliationController=null;reconciliationInFlight=null;if(!disposed&&realtimeSocket.connected&&generation!==connectionGeneration){void reconcileMountedAgentSession("realtime-reconnected")}});return reconciliationInFlight}const reconcileAfterRealtimeConnect=()=>{connectionGeneration+=1;reconciliationRetryDelay=1e3;void reconcileMountedAgentSession()};const markRealtimeDisconnected=()=>{connectionGeneration+=1;clearReconciliationRetry();reconciliationController==null?void 0:reconciliationController.abort();agentConnectionStatus.value="disconnected"};const reconcileAfterVisible=()=>{var _a2;if(!((_a2=globalThis.document)==null?void 0:_a2.hidden)&&agentConnectionStatus.value==="unknown"){void reconcileMountedAgentSession("visible")}};(_a=globalThis.document)==null?void 0:_a.addEventListener("visibilitychange",reconcileAfterVisible);realtimeSocket.on("connect",reconcileAfterRealtimeConnect);realtimeSocket.on("connect_error",markRealtimeDisconnected);realtimeSocket.on("disconnect",markRealtimeDisconnected);if(realtimeSocket.connected){agentConnectionStatus.value="reconciling";queueMicrotask(()=>{void reconcileMountedAgentSession("initial-realtime-connect")})}onScopeDispose(()=>{var _a2;disposed=true;clearReconciliationRetry();reconciliationController==null?void 0:reconciliationController.abort();(_a2=globalThis.document)==null?void 0:_a2.removeEventListener("visibilitychange",reconcileAfterVisible);realtimeSocket.off("connect",reconcileAfterRealtimeConnect);realtimeSocket.off("connect_error",markRealtimeDisconnected);realtimeSocket.off("disconnect",markRealtimeDisconnected)});watch(detailResource.data,candidate=>{acceptSessionResponse(candidate||null)},{immediate:true});let summaryRefreshKey="";watch(()=>{var _a2;const reason=mountedSessionDetailRefreshReason(detailRecord.value,listSession.value,activeSessionId.value);return{detailRevision:vibe64SessionRevision(detailRecord.value),fetching:Boolean((_a2=detailResource.isFetching)==null?void 0:_a2.value),listRevision:vibe64SessionRevision(listSession.value),reason,sessionId:activeSessionId.value}},state=>{if(!state.reason){summaryRefreshKey="";return}if(state.fetching){return}const refreshKey=[state.sessionId,state.reason,state.detailRevision??"",state.listRevision??""].join("|");if(refreshKey===summaryRefreshKey){return}summaryRefreshKey=refreshKey;refreshInBackground(state.reason)},{flush:"post",immediate:true});watch(detailState,state=>{vibe64SessionDebugLog("client.mountedSession.detailState",{loading:state.loading===true,ready:state.ready===true,sessionId:state.sessionId,state:state.state})},{immediate:true});return{acceptSessionResponse,agentConnectionStatus,detailState,reconcileMountedAgentSession,refresh,resource:detailResource,session}}const SESSION_RENEWAL_POLL_INTERVAL_MS=1200;const SESSION_RENEWAL_BACKGROUND_POLL_INTERVAL_MS=5e3;const SESSION_RENEWAL_RETRY_POLL_INTERVAL_MS=6e4;const SESSION_RENEWAL_DRAFT_STORAGE_PREFIX="vibe64:session-renewal-draft";function renewalRevision(value2=null){const revision=Number(value2==null?void 0:value2.revision);return Number.isSafeInteger(revision)&&revision>=1?revision:null}function browserSessionStorage(root=globalThis){var _a;try{return(root==null?void 0:root.sessionStorage)||((_a=root==null?void 0:root.window)==null?void 0:_a.sessionStorage)||null}catch{return null}}function renewalDraftStorageKey(projectSlug="",sessionId="",viewerScope="",renewalId=""){const project=String(projectSlug||"").trim();const session=String(sessionId||"").trim();const viewer=String(viewerScope||"").trim();const renewal=String(renewalId||"").trim();return project&&session&&viewer&&renewal?`${SESSION_RENEWAL_DRAFT_STORAGE_PREFIX}:${encodeURIComponent(viewer)}:${encodeURIComponent(project)}:${encodeURIComponent(session)}:${encodeURIComponent(renewal)}`:""}function renewalHandoverValidationMessage(error=null){var _a,_b,_c,_d;const response=error==null?void 0:error.response;const code=String((error==null?void 0:error.code)||(response==null?void 0:response.code)||((_b=(_a=response==null?void 0:response.errors)==null?void 0:_a[0])==null?void 0:_b.code)||"").trim();if(!code.startsWith("vibe64_session_renewal_handover_")){return""}return String((error==null?void 0:error.message)||((_d=(_c=response==null?void 0:response.errors)==null?void 0:_c[0])==null?void 0:_d.message)||(response==null?void 0:response.error)||"Review the handover and correct the highlighted problem.").trim()}function keepRenewalHandoverValidationInContext(error=null){if(renewalHandoverValidationMessage(error)){throw error}}function useVibe64SessionRenewal({active=true,draftStorage=browserSessionStorage(),focusSession=async()=>null,refreshSessionData=async()=>null,selectSession=()=>null,selectedSession,selectedSessionId,sessionsApiPath}={}){const projectSlug=useVibe64ProjectSlug();const hostActive=computed(()=>readRefOrGetterValue(active)!==false);const sessionId=computed(()=>String(readRefOrGetterValue(selectedSessionId)||"").trim());const session=computed(()=>readRefOrGetterValue(selectedSession)||null);const apiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||"").trim());const renewalPath=computed(()=>sessionId.value&&apiPath.value?vibe64SessionPath(apiPath.value,sessionId.value,"/renewal"):"");const open=ref(false);const triggerFocusTarget=shallowRef(null);const pendingActionState=ref(null);const draftText=ref("");const hydratedDraftIdentity=ref("");const hydratedDraftText=ref("");const hydratedDraftGuard=ref(null);const draftConflictState=ref(null);const draftStorageIdentity=ref("");const draftStorageHydrated=ref(false);const draftValidationError=ref("");const localOperationKey=ref("");const snapshot=ref(null);const viewerScope=ref("");const handledSuccessorId=ref("");const successorSelectionPendingId=ref("");const successorSelectionError=ref("");const manualReloading=ref(false);const resource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value&&apiPath.value)),fallbackLoadError:"Session renewal could not be loaded.",path:renewalPath,queryKey:computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),sessionId.value,"renewal"]),queryOptions:{refetchOnMount:"always",refetchOnWindowFocus:false},readMethod:"GET",realtime:{event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>mountedSessionRealtimeShouldRefresh({payload},sessionId.value)},refreshOnPull:true,requestRecoveryLabel:"Session renewal"});const postCommand=useCommand({access:"never",apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:"POST",path:String((context==null?void 0:context.path)||"")}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload((context==null?void 0:context.body)||{}),fallbackRunError:"Session renewal could not continue.",messages:{error:"Session renewal could not continue."},onRunError:keepRenewalHandoverValidationInContext,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.sessions.renewal.post",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const patchCommand=useCommand({access:"never",apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:"PATCH",path:String((context==null?void 0:context.path)||"")}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload((context==null?void 0:context.body)||{}),fallbackRunError:"The handover draft could not be saved.",messages:{error:"The handover draft could not be saved."},onRunError:keepRenewalHandoverValidationInContext,ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.sessions.renewal.patch",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"PATCH"});const renewal=computed(()=>snapshot.value);const advisory=computed(()=>{var _a;return((_a=session.value)==null?void 0:_a.renewalAdvisory)||{}});const advisoryPresentation=computed(()=>sessionRenewalAdvisoryPresentation(advisory.value));const loadError=computed(()=>{var _a;return String(((_a=resource.loadError)==null?void 0:_a.value)||"")});const refreshError=computed(()=>snapshot.value&&loadError.value?loadError.value:"");const refreshing=computed(()=>{var _a;return Boolean(manualReloading.value||snapshot.value&&((_a=resource.isLoading)==null?void 0:_a.value))});const initialLoading=computed(()=>{var _a,_b;return Boolean(!snapshot.value&&(((_a=resource.isInitialLoading)==null?void 0:_a.value)||((_b=resource.isLoading)==null?void 0:_b.value)))});const phase=computed(()=>sessionRenewalPhase(renewal.value,{initialLoading:initialLoading.value,loadError:loadError.value}));const maintenanceNeedsRetry=computed(()=>{var _a,_b,_c;return Boolean(((_a=renewal.value)==null?void 0:_a.status)==="completed"&&((_c=(_b=renewal.value)==null?void 0:_b.maintenance)==null?void 0:_c.status)==="failed")});const maintenanceInProgress=computed(()=>{var _a,_b,_c;return Boolean(((_a=renewal.value)==null?void 0:_a.status)==="completed"&&((_c=(_b=renewal.value)==null?void 0:_b.maintenance)==null?void 0:_c.status)==="pending")});const maintenanceError=computed(()=>{var _a,_b,_c;return String(((_c=(_b=(_a=renewal.value)==null?void 0:_a.maintenance)==null?void 0:_b.error)==null?void 0:_c.message)||"The fresh session is ready, but Vibe64 could not finish retiring the old session resources.").trim()});const stageLabel=computed(()=>{var _a;return sessionRenewalStageLabel((_a=renewal.value)==null?void 0:_a.stage)});const actionPresentation=computed(()=>{var _a,_b,_c;const status=String(((_a=renewal.value)==null?void 0:_a.status)||"").trim();if(status==="review"){return{attention:true,color:"primary",label:"Review handover",reason:"Review the handover before creating the fresh session."}}if(status==="running"){return{attention:true,color:"primary",label:"Renewal in progress",reason:stageLabel.value}}if(status==="failed"){return{attention:true,color:"error",label:"Renewal needs attention",reason:String(((_c=(_b=renewal.value)==null?void 0:_b.error)==null?void 0:_c.message)||"Open session renewal to continue safely.").trim()}}if(status==="completed"){if(maintenanceNeedsRetry.value){return{attention:true,color:"warning",label:"Cleanup needs retry",reason:maintenanceError.value}}return{attention:true,color:successorSelectionError.value?"error":"success",label:successorSelectionError.value?"Open fresh session":"Opening fresh session",reason:successorSelectionError.value||"The fresh session is ready."}}return advisoryPresentation.value});const steps=computed(()=>{var _a;return sessionRenewalStageProgress((_a=renewal.value)==null?void 0:_a.stage)});const draftCharacterCount=computed(()=>sessionRenewalDraftCharacterCount(draftText.value));const draftTooLong=computed(()=>draftCharacterCount.value>SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS);const draftDirty=computed(()=>Boolean(hydratedDraftIdentity.value&&sessionRenewalText(draftText.value)!==sessionRenewalText(hydratedDraftText.value)));const manualDraftIncomplete=computed(()=>{var _a,_b,_c,_d,_e,_f;return Boolean(((_a=renewal.value)==null?void 0:_a.manualRequired)===true&&String(((_c=(_b=renewal.value)==null?void 0:_b.draft)==null?void 0:_c.hash)||"").trim()&&String(((_e=(_d=renewal.value)==null?void 0:_d.draft)==null?void 0:_e.hash)||"").trim()===String(((_f=renewal.value)==null?void 0:_f.manualTemplateHash)||"").trim()&&!draftDirty.value)});const draftError=computed(()=>{if(draftTooLong.value){return`Handover must be ${SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS.toLocaleString()} characters or fewer.`}if(draftValidationError.value){return draftValidationError.value}return manualDraftIncomplete.value?"Complete every handover section before creating the fresh session.":""});const draftConflict=computed(()=>draftConflictState.value);const pendingAction=computed(()=>{var _a,_b;return((_a=pendingActionState.value)==null?void 0:_a.sessionId)===sessionId.value?String(((_b=pendingActionState.value)==null?void 0:_b.name)||""):""});const sourceOperationsSuspended=computed(()=>{var _a,_b;return Boolean(["draft","confirm","retry"].includes(pendingAction.value)||["running","completed"].includes(String(((_a=renewal.value)==null?void 0:_a.status)||"").trim())||String(((_b=renewal.value)==null?void 0:_b.stage)||"").trim()==="failure_restoring")});const actionLabel=computed(()=>{var _a;return pendingAction.value?String(((_a=pendingActionState.value)==null?void 0:_a.label)||""):""});const busy=computed(()=>Boolean(pendingAction.value));const canConfirm=computed(()=>Boolean(phase.value==="review"&&sessionRenewalText(draftText.value).trim()&&!draftTooLong.value&&!draftValidationError.value&&!manualDraftIncomplete.value&&!draftConflict.value&&!busy.value));const canSaveDraft=computed(()=>Boolean(phase.value==="review"&&draftDirty.value&&!draftTooLong.value&&!draftValidationError.value&&!draftConflict.value&&!busy.value));const visible=computed(()=>{var _a,_b,_c;const status=String(((_a=renewal.value)==null?void 0:_a.status)||"").trim();const durableRenewalNeedsAccess=["completed","failed","review","running"].includes(status);return Boolean(sessionId.value&&(durableRenewalNeedsAccess||((_b=session.value)==null?void 0:_b.archived)!==true&&((_c=session.value)==null?void 0:_c.status)!=="archived"))});function renewalDraftState(candidate=null){const draft=candidate==null?void 0:candidate.draft;const identity=draft?`${Number(draft.revision||0)}:${String(draft.hash||"")}`:"";return{guard:{expectedHash:String((draft==null?void 0:draft.hash)||""),expectedRevision:Number((draft==null?void 0:draft.revision)||0),operationKey:String((candidate==null?void 0:candidate.operationKey)||currentOperationKey())},identity,text:identity?sessionRenewalText(draft==null?void 0:draft.text):""}}function activeDraftStorageKey(){return draftStorageIdentity.value}function removeStoredDraft(){const key=activeDraftStorageKey();if(!key||!draftStorage){return}try{draftStorage.removeItem(key)}catch{}}function persistStoredDraft(){var _a;const key=activeDraftStorageKey();if(!key||!draftStorage||!draftStorageHydrated.value){return}if(phase.value!=="review"||!draftDirty.value||!hydratedDraftIdentity.value||!((_a=renewal.value)==null?void 0:_a.renewalId)){removeStoredDraft();return}try{draftStorage.setItem(key,JSON.stringify({baseGuard:hydratedDraftGuard.value,baseIdentity:hydratedDraftIdentity.value,baseText:hydratedDraftText.value,renewalId:String(renewal.value.renewalId),text:sessionRenewalText(draftText.value)}))}catch{}}function restoreStoredDraft(candidate=null){if(draftStorageHydrated.value){return}draftStorageHydrated.value=true;const key=activeDraftStorageKey();if(!key||!draftStorage||String((candidate==null?void 0:candidate.status)||"")!=="review"){return}try{const stored=JSON.parse(String(draftStorage.getItem(key)||"null"));if(!stored||typeof stored!=="object"||Array.isArray(stored)||String(stored.renewalId||"")!==String((candidate==null?void 0:candidate.renewalId)||"")||!String(stored.baseIdentity||"")||typeof stored.baseText!=="string"||typeof stored.text!=="string"||!stored.baseGuard||typeof stored.baseGuard!=="object"||Array.isArray(stored.baseGuard)){removeStoredDraft();return}hydratedDraftIdentity.value=String(stored.baseIdentity);hydratedDraftText.value=sessionRenewalText(stored.baseText);hydratedDraftGuard.value={expectedHash:String(stored.baseGuard.expectedHash||""),expectedRevision:Number(stored.baseGuard.expectedRevision||0),operationKey:String(stored.baseGuard.operationKey||"")};draftText.value=sessionRenewalText(stored.text)}catch{removeStoredDraft()}}function resetDraftHydration(){hydratedDraftIdentity.value="";hydratedDraftText.value="";hydratedDraftGuard.value=null;draftConflictState.value=null;draftStorageHydrated.value=false;draftValidationError.value="";draftText.value=""}function prepareDraftContext(candidate=null,nextViewerScope=""){const normalizedViewerScope=String(nextViewerScope||"").trim();if(!normalizedViewerScope){return false}const nextStorageIdentity=candidate?renewalDraftStorageKey(projectSlug.value,sessionId.value,normalizedViewerScope,candidate.renewalId):"";if(viewerScope.value===normalizedViewerScope&&draftStorageIdentity.value===nextStorageIdentity){return true}persistStoredDraft();viewerScope.value=normalizedViewerScope;draftStorageIdentity.value=nextStorageIdentity;resetDraftHydration();snapshot.value=null;localOperationKey.value="";return true}function hydrateDraft(candidate=null,{preserveLocal=false}={}){const next=renewalDraftState(candidate);hydratedDraftIdentity.value=next.identity;hydratedDraftText.value=next.text;hydratedDraftGuard.value=next.guard;if(!preserveLocal){draftText.value=next.text}draftConflictState.value=null;draftValidationError.value=""}function reconcileDraft(candidate=null){const next=renewalDraftState(candidate);if(next.identity===hydratedDraftIdentity.value){return}const reviewStillEditable=String((candidate==null?void 0:candidate.status)||"")==="review";if(!reviewStillEditable||!hydratedDraftIdentity.value||!draftDirty.value||next.text===sessionRenewalText(draftText.value)){hydrateDraft(candidate);return}draftConflictState.value=next}function acceptRenewal(candidate=null,{responseViewerScope=""}={}){if(candidate===null||candidate===void 0){if(!prepareDraftContext(null,responseViewerScope)){return false}if(!snapshot.value){snapshot.value=null}return true}if(typeof candidate!=="object"||Array.isArray(candidate)||String(candidate.sessionId||"").trim()!==sessionId.value){return false}const candidateRevision=renewalRevision(candidate);if(candidateRevision===null){return false}if(!prepareDraftContext(candidate,responseViewerScope)){return false}const currentRevision=renewalRevision(snapshot.value);if(currentRevision!==null&&candidateRevision<=currentRevision){return candidateRevision===currentRevision}restoreStoredDraft(candidate);reconcileDraft(candidate);snapshot.value=candidate;persistStoredDraft();return true}function currentOperationKey(){var _a;return String(((_a=renewal.value)==null?void 0:_a.operationKey)||localOperationKey.value||"").trim()}function createOperationKey(){var _a,_b;const randomId=((_b=(_a=globalThis.crypto)==null?void 0:_a.randomUUID)==null?void 0:_b.call(_a))||"";localOperationKey.value=sessionRenewalOperationKey(sessionId.value,{randomId});return localOperationKey.value}function draftGuard(){const guard=hydratedDraftGuard.value||renewalDraftState(renewal.value).guard;return{expectedHash:String((guard==null?void 0:guard.expectedHash)||""),expectedRevision:Number((guard==null?void 0:guard.expectedRevision)||0),operationKey:String((guard==null?void 0:guard.operationKey)||currentOperationKey())}}async function reload(){var _a;if(manualReloading.value){return renewal.value}manualReloading.value=true;try{await((_a=resource.reload)==null?void 0:_a.call(resource));return renewal.value}finally{manualReloading.value=false}}let nextActionId=0;async function runAction(name,label,operation){var _a;const actionSessionId=sessionId.value;if(!actionSessionId||busy.value){return null}const actionId=++nextActionId;pendingActionState.value={actionId,label,name,sessionId:actionSessionId};try{let response;try{response=await operation()}catch(error){if(sessionId.value!==actionSessionId){return null}throw error}if(sessionId.value!==actionSessionId){return null}if(!response||response.ok===false){throw vibe64ApiError(response,"Session renewal could not continue.")}if(!acceptRenewal(response.renewal||null,{responseViewerScope:response.viewerScope})){return null}void reload().catch(()=>null);return response.renewal||null}finally{if(((_a=pendingActionState.value)==null?void 0:_a.actionId)===actionId){pendingActionState.value=null}}}async function requestDraft(){if(busy.value){return null}const operationKey=createOperationKey();return runAction("draft","Starting…",()=>postCommand.run({body:{operationKey},path:`${renewalPath.value}/draft`}))}async function saveDraft({pendingActionName="save"}={}){if(!canSaveDraft.value){return renewal.value}try{return await runAction(pendingActionName,"Saving…",()=>patchCommand.run({body:{...draftGuard(),draft:sessionRenewalText(draftText.value)},path:`${renewalPath.value}/draft`}))}catch(error){const message=renewalHandoverValidationMessage(error);if(!message){throw error}draftValidationError.value=message;return null}}async function confirm(successorAssistantSelection=null){if(!canConfirm.value){return null}if(draftDirty.value){const saved=await saveDraft({pendingActionName:"confirm"});if(!saved){return null}}try{return await runAction("confirm","Renewing…",()=>postCommand.run({body:{...draftGuard(),...successorAssistantSelection?{assistantSelection:successorAssistantSelection}:{}},path:`${renewalPath.value}/confirm`}))}catch(error){const message=renewalHandoverValidationMessage(error);if(!message){throw error}draftValidationError.value=message;return null}}async function cancel(){if(phase.value!=="review"||draftConflict.value||busy.value){return null}const result=await runAction("cancel","Cancelling…",()=>postCommand.run({body:draftGuard(),path:`${renewalPath.value}/cancel`}));if((result==null?void 0:result.status)==="cancelled"){open.value=false}return result}async function retry(){if(phase.value!=="failed"&&!maintenanceNeedsRetry.value||busy.value){return null}return runAction("retry",maintenanceNeedsRetry.value?"Retrying cleanup…":"Retrying…",()=>postCommand.run({body:{operationKey:currentOperationKey()},path:`${renewalPath.value}/retry`}))}function request({returnFocusTarget=null}={}){if(!visible.value||!hostActive.value){return}const target=(returnFocusTarget==null?void 0:returnFocusTarget.$el)||returnFocusTarget;triggerFocusTarget.value=typeof(target==null?void 0:target.focus)==="function"?target:null;open.value=true;void reload().catch(()=>null)}function close(){persistStoredDraft();open.value=false}function restoreTriggerFocus(){if(open.value){return false}const target=triggerFocusTarget.value;triggerFocusTarget.value=null;if((target==null?void 0:target.isConnected)!==true||typeof target.focus!=="function"){return false}target.focus({preventScroll:true});return true}function setDraftText(value2=""){draftText.value=sessionRenewalText(value2);draftValidationError.value="";persistStoredDraft()}function acceptLatestDraft(){const conflict=draftConflictState.value;if(!conflict){return}hydratedDraftIdentity.value=conflict.identity;hydratedDraftText.value=conflict.text;hydratedDraftGuard.value=conflict.guard;draftText.value=conflict.text;draftConflictState.value=null;draftValidationError.value="";persistStoredDraft()}function keepLocalDraft(){const conflict=draftConflictState.value;if(!conflict){return}hydratedDraftIdentity.value=conflict.identity;hydratedDraftText.value=conflict.text;hydratedDraftGuard.value=conflict.guard;draftConflictState.value=null;persistStoredDraft()}function availableSuccessorId(){var _a,_b,_c;return((_a=renewal.value)==null?void 0:_a.status)==="completed"?String(((_c=(_b=renewal.value)==null?void 0:_b.successor)==null?void 0:_c.sessionId)||"").trim():""}function refreshResultError(result=null){if(Array.isArray(result)){for(const entry of result){if((entry==null?void 0:entry.status)==="rejected"){return entry.reason instanceof Error?entry.reason:new Error(String((entry==null?void 0:entry.reason)||"Session list could not be refreshed."))}if((entry==null?void 0:entry.status)==="fulfilled"){const nestedError=refreshResultError(entry.value);if(nestedError){return nestedError}}}return null}if(result&&typeof result==="object"&&!Array.isArray(result)&&(result.isError===true||result.status==="error")){return result.error instanceof Error?result.error:new Error(String(result.error||"Session list could not be refreshed."))}return null}async function openSuccessor(){const successorId=availableSuccessorId();if(!successorId||!hostActive.value||handledSuccessorId.value===successorId||successorSelectionPendingId.value){return false}const predecessorSessionId=sessionId.value;successorSelectionPendingId.value=successorId;successorSelectionError.value="";try{const refreshResult=await refreshSessionData({includeList:true,reason:"session-renewal-successor-available"});const refreshFailure=refreshResultError(refreshResult);if(refreshFailure){throw refreshFailure}if(!hostActive.value||sessionId.value!==predecessorSessionId||availableSuccessorId()!==successorId){return false}await Promise.resolve(selectSession(successorId));handledSuccessorId.value=successorId;triggerFocusTarget.value=null;open.value=false;await Promise.resolve(focusSession(successorId)).catch(()=>null);return true}catch(error){if(hostActive.value&&sessionId.value===predecessorSessionId){successorSelectionError.value=error instanceof Error?error.message:String(error||"The fresh session could not be opened.");open.value=true}return false}finally{if(successorSelectionPendingId.value===successorId){successorSelectionPendingId.value=""}}}let pollTimer=null;function clearPoll(){if(pollTimer){clearTimeout(pollTimer);pollTimer=null}}function schedulePoll(){var _a;clearPoll();if(!hostActive.value||((_a=renewal.value)==null?void 0:_a.status)!=="running"&&!maintenanceInProgress.value&&!maintenanceNeedsRetry.value){return}const pollIntervalMs=maintenanceNeedsRetry.value?SESSION_RENEWAL_RETRY_POLL_INTERVAL_MS:open.value?SESSION_RENEWAL_POLL_INTERVAL_MS:SESSION_RENEWAL_BACKGROUND_POLL_INTERVAL_MS;pollTimer=setTimeout(async()=>{pollTimer=null;await reload().catch(()=>null);schedulePoll()},pollIntervalMs)}watch([projectSlug,sessionId],()=>{persistStoredDraft();snapshot.value=null;localOperationKey.value="";viewerScope.value="";draftStorageIdentity.value="";resetDraftHydration();handledSuccessorId.value="";successorSelectionPendingId.value="";successorSelectionError.value="";triggerFocusTarget.value=null;open.value=false},{immediate:true});watch(()=>{var _a;return((_a=resource.data)==null?void 0:_a.value)||null},response=>{if(!response||response.ok===false){return}acceptRenewal(response.renewal||null,{responseViewerScope:response.viewerScope})},{immediate:true});watch(hostActive,activeNow=>{if(!activeNow){triggerFocusTarget.value=null;open.value=false;clearPoll()}},{immediate:true});watch([hostActive,open,projectSlug,sessionId,()=>{var _a;return(_a=renewal.value)==null?void 0:_a.status},()=>{var _a,_b;return(_b=(_a=renewal.value)==null?void 0:_a.maintenance)==null?void 0:_b.status}],schedulePoll,{immediate:true});watch([hostActive,()=>availableSuccessorId()],([activeNow,successorId])=>{if(activeNow&&successorId&&handledSuccessorId.value!==successorId){void openSuccessor()}},{immediate:true});onScopeDispose(()=>{persistStoredDraft();triggerFocusTarget.value=null;clearPoll()});return{actionPresentation,actionLabel,assistantSelection:computed(()=>{var _a;return((_a=session.value)==null?void 0:_a.assistantSelection)||null}),acceptLatestDraft,advisory,advisoryPresentation,busy,canConfirm,canSaveDraft,cancel,close,confirm,draftCharacterCount,draftConflict,draftDirty,draftError,draftText,draftTooLong,initialLoading,keepLocalDraft,loadError,maintenanceError,maintenanceInProgress,maintenanceNeedsRetry,maxHandoverCharacters:SESSION_RENEWAL_MAX_HANDOVER_CHARACTERS,open,openSuccessor,pendingAction,phase,refreshError,refreshing,reload,renewal,request,requestDraft,restoreTriggerFocus,retry,setDraftText,saveDraft,sourceOperationsSuspended,stageLabel,steps,successorSelectionError,successorSelectionPending:computed(()=>Boolean(successorSelectionPendingId.value)),visible}}const SESSION_WORK_TASK_IDS=["codex_turn_checkpoint","save-work","update-session"];async function focusRuntimeSessionChat(sessionId="",root=globalThis.document){var _a,_b;const normalizedId2=String(sessionId||"").trim();if(!normalizedId2||!(root==null?void 0:root.querySelectorAll)){return false}await nextTick();await nextTick();const runtime=[...root.querySelectorAll("[data-vibe64-session-runtime-id]")].find(element=>element.getAttribute("data-vibe64-session-runtime-id")===normalizedId2);const target=(_a=runtime==null?void 0:runtime.querySelector)==null?void 0:_a.call(runtime,".studio-autopilot__chat-panel");(_b=target==null?void 0:target.focus)==null?void 0:_b.call(target,{preventScroll:true});return Boolean(target)}function agentTurnControlPayloadFromContext(context={}){const source=context&&typeof context==="object"&&!Array.isArray(context)?context:{};const{agentSettings:_agentSettings,sessionId:_sessionId,...body}=source;return vibe64RealtimeOriginPayload({...body,...agentSettingsInputFromContext(source)})}function proxySessionDialogs(dialogs={}){return Object.fromEntries(Object.entries(dialogs).map(([name,dialog])=>[name,proxyRefs(dialog)]))}function runtimeHostToolbarSessions({activeAgentThinking=false,selectedSession=null,selectedSessionId="",sessions=[]}={}){const currentId=String(selectedSessionId||"").trim();return(Array.isArray(sessions)?sessions:[]).map(session=>{const sessionId=String((session==null?void 0:session.sessionId)||"").trim();if(!sessionId){return session}const source=sessionId===currentId&&(selectedSession==null?void 0:selectedSession.sessionId)===sessionId?selectedSession:session;const agentThinking=Boolean(sessionId===currentId&&activeAgentThinking||sessionRecordHasActiveAgentWork(source));return Boolean(session==null?void 0:session.agentThinking)===agentThinking?session:{...session,agentThinking}})}function runtimeHostAgentWorking({selectedSession=null,transientAgentThinking=false}={}){return Boolean(transientAgentThinking||sessionRecordHasActiveAgentWork(selectedSession))}function agentMessageAcceptanceSignal(controller){return controller.signal}function createVibe64SessionWorkRefreshQueue({inspect}={}){if(typeof inspect!=="function"){throw new TypeError("Session work refresh requires an inspector.")}let active=null;let disposed=false;let refreshAfterActive=false;async function drain(){do{refreshAfterActive=false;await inspect({isCurrent:()=>!disposed&&!refreshAfterActive})}while(!disposed&&refreshAfterActive)}function request(){if(disposed){return Promise.resolve()}if(active){refreshAfterActive=true;return active}active=Promise.resolve().then(drain).finally(()=>{active=null});return active}return Object.freeze({dispose(){disposed=true;refreshAfterActive=false},request})}function runtimeHostWorkTaskRevision(session={}){return(Array.isArray(session==null?void 0:session.backgroundTasks)?session.backgroundTasks:[]).filter(task=>SESSION_WORK_TASK_IDS.includes(String((task==null?void 0:task.id)||""))).map(task=>{const events=Array.isArray(task==null?void 0:task.events)?task.events:[];const latestEvent=events.at(-1)||{};return[String((task==null?void 0:task.id)||""),String((task==null?void 0:task.status)||""),String((task==null?void 0:task.updatedAt)||""),String(events.length),String(latestEvent.at||""),String(latestEvent.kind||""),String(latestEvent.status||"")].join(":")}).sort().join("|")}function runtimeHostWorkTaskState(session={}){const tasks=Array.isArray(session==null?void 0:session.backgroundTasks)?session.backgroundTasks:[];const operation=tasks.find(task=>String((task==null?void 0:task.id)||"")==="save-work")||null;const updateOperation=tasks.find(task=>String((task==null?void 0:task.id)||"")==="update-session")||null;const activeOperation=[operation,updateOperation].find(task=>["queued","running","starting"].includes(String((task==null?void 0:task.status)||"").trim().toLowerCase()));return{activeOperation:activeOperation?{kind:activeOperation===operation?"save":"update",operationId:String(activeOperation.operationId||"").trim()}:null,operation,updateOperation}}function useVibe64SessionRuntimeHost(props,emit){const selectedSessionId=computed(()=>String(props.sessionId||"").trim());const selectedListSession=computed(()=>{const sessions=unref(props.sessionData.sessions)||[];return sessions.find(session=>session.sessionId===selectedSessionId.value)||null});const mounted=useVibe64MountedSessionData({active:computed(()=>Boolean(props.active)),sessionId:selectedSessionId,sessionsApiPath:props.sessionData.sessionsApiPath,summarySession:selectedListSession});const selectedSession=mounted.session;const selectedSessionArchived=computed(()=>isArchivedVibe64Session(selectedSession.value||{}));const selectedSessionTitle=computed(()=>vibe64SessionDisplayTitle(selectedSession.value||{})||`Session ${props.sessionData.shortSessionId(selectedSessionId.value)}`);const toolbarSessions=computed(()=>{var _a;return((_a=props.toolbarSessions)==null?void 0:_a.length)?props.toolbarSessions:unref(props.sessionData.sessions)||[]});const autopilotAgentThinking=ref(false);const activeAgentWorking=computed(()=>runtimeHostAgentWorking({selectedSession:selectedSession.value,transientAgentThinking:autopilotAgentThinking.value}));const workState=ref({checkedAt:"",error:"",loading:true,operation:null,unsaved:null});let workStateActive=true;async function inspectWorkState({isCurrent}){const sessionId=selectedSessionId.value;const sessionArchived=selectedSessionArchived.value;const requestIsCurrent=()=>Boolean(workStateActive&&isCurrent()&&!sourceOperationsSuspended.value&&selectedSessionId.value===sessionId&&selectedSessionArchived.value===sessionArchived);if(sourceOperationsSuspended.value){return}if(!sessionId||sessionArchived){if(requestIsCurrent()){workState.value={checkedAt:new Date().toISOString(),error:"",loading:false,operation:null,unsaved:null}}return}if(requestIsCurrent()&&(workState.value.unsaved===null||workState.value.unsaved===void 0)){workState.value={...workState.value,loading:true}}try{const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/work"),{method:"GET"});if((result==null?void 0:result.ok)===false){throw new Error(vibe64ApiResponseError(result,"Session work could not be inspected."))}if(requestIsCurrent()){workState.value={...result,checkedAt:new Date().toISOString(),error:"",loading:false}}}catch(error){if(requestIsCurrent()){workState.value={checkedAt:new Date().toISOString(),error:error instanceof Error?error.message:String(error||"Session work could not be inspected."),loading:false,operation:null,unsaved:null}}}}const workStateRefreshQueue=createVibe64SessionWorkRefreshQueue({inspect:inspectWorkState});async function refreshWorkState(observedWork=null){if(sourceOperationsSuspended.value){return workState.value}if(observedWork&&typeof observedWork==="object"&&observedWork.ok!==false&&String(observedWork.sessionId||"").trim()===selectedSessionId.value){workState.value={...observedWork,checkedAt:new Date().toISOString(),error:"",loading:false};return workState.value}await workStateRefreshQueue.request();return workState.value}async function refreshSessionData(options={}){const includeList=(options==null?void 0:options.includeList)===true;if(!includeList){return mounted.refresh(options)}return Promise.allSettled([mounted.refresh(options),props.sessionData.refreshSessionData(options)])}const renewalModel=useVibe64SessionRenewal({active:computed(()=>Boolean(props.active)),focusSession:focusRuntimeSessionChat,refreshSessionData:props.sessionData.refreshSessionData,selectSession:props.sessionData.selectSessionId,selectedSession,selectedSessionId,sessionsApiPath:props.sessionData.sessionsApiPath});const sourceOperationsSuspended=renewalModel.sourceOperationsSuspended;const dialogs=proxySessionDialogs({archive:props.sessionData.archive,renewal:renewalModel});const conversationLog=proxyRefs(useVibe64ConversationLog({active:computed(()=>Boolean(selectedSessionId.value)),session:selectedSession}));const selection=proxyRefs({isArchived:selectedSessionArchived,selectedSession,selectedSessionDetailState:mounted.detailState,selectedSessionId,selectedSessionTitle,statusColor:vibe64SessionStatusColor,statusLabel:vibe64SessionStatusLabel});const autopilotSessionToolbar=proxyRefs({canCreateSession:props.sessionData.canCreateSession,createSession:props.sessionData.createSession,createSessionCommand:props.sessionData.createSessionCommand,createSessionRunning:props.sessionData.createSessionRunning,createSessionVisible:props.sessionData.createSessionVisible,createSessionTitle:props.sessionData.createSessionTitle,selectSession:props.sessionData.selectSessionId,sessions:computed(()=>runtimeHostToolbarSessions({activeAgentThinking:activeAgentWorking.value,selectedSession:selectedSession.value,selectedSessionId:selectedSessionId.value,sessions:toolbarSessions.value})),shortSessionId:props.sessionData.shortSessionId});const pageError=computed(()=>{var _a,_b;return String(((_a=mounted.detailState.value)==null?void 0:_a.error)||((_b=props.sessionData.sessionList)==null?void 0:_b.loadError)||"")});const guardedPage=computed(()=>{var _a,_b;return{busy:Boolean((_a=mounted.detailState.value)==null?void 0:_a.loading),copyText:async(value2="")=>{var _a2,_b2;return typeof navigator==="undefined"?false:(_b2=(_a2=navigator.clipboard)==null?void 0:_a2.writeText)==null?void 0:_b2.call(_a2,String(value2||""))},error:pageError.value,launchBusy:Boolean((_b=mounted.detailState.value)==null?void 0:_b.loading)}});const interruptFeedback=useUiFeedback({dedupeWindowMs:0,errorChannel:"banner",source:"vibe64.sessions.agent-turn.interrupt.feedback"});watch([selectedSessionId,()=>props.active,()=>{var _a,_b,_c;return(_c=(_b=(_a=selectedSession.value)==null?void 0:_a.agentSession)==null?void 0:_b.turn)==null?void 0:_c.id},()=>{var _a,_b,_c;return(_c=(_b=(_a=selectedSession.value)==null?void 0:_a.agentSession)==null?void 0:_b.turn)==null?void 0:_c.active}],()=>interruptFeedback.success());const pendingMessageControllers=new Map;async function interruptAgentTurn(input="user_interrupt"){var _a,_b,_c,_d,_e;const sessionId=selectedSessionId.value;if(!sessionId){return false}const control=input&&typeof input==="object"&&!Array.isArray(input)?input:{reason:String(input||"user_interrupt")};const turnId=(_c=(_b=(_a=selectedSession.value)==null?void 0:_a.agentSession)==null?void 0:_b.turn)==null?void 0:_c.id;interruptFeedback.success();try{const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/agent-turn/interrupt"),{body:agentTurnControlPayloadFromContext({...control,sessionId}),method:"POST"});if((result==null?void 0:result.ok)===false){throw vibe64ApiError(result,"Assistant turn could not be interrupted.")}void refreshSessionData({reason:"agent-turn-interrupted"}).catch(()=>null);return(result==null?void 0:result.ok)!==false}catch(error){const turn=(_e=(_d=selectedSession.value)==null?void 0:_d.agentSession)==null?void 0:_e.turn;if(props.active&&selectedSessionId.value===sessionId&&(turn==null?void 0:turn.active)&&turn.id===turnId){interruptFeedback.error(error,"Assistant turn could not be interrupted.")}void refreshSessionData({reason:"agent-turn-interrupt-failed"}).catch(()=>null);return false}}function sendAgentMessage(input={}){const sessionId=selectedSessionId.value;if(!sessionId){return Promise.resolve(false)}const payload=input&&typeof input==="object"&&!Array.isArray(input)?input:{message:String(input||"")};const body=agentTurnControlPayloadFromContext({...payload,sessionId});const messageId=String(body.messageId||"").trim();const controller=new AbortController;if(messageId){pendingMessageControllers.set(messageId,controller)}const request=(async()=>{try{const signal=agentMessageAcceptanceSignal(controller);const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/agent-message"),{body,method:"POST",signal});if((result==null?void 0:result.ok)===false){throw vibe64ApiError(result,"Message could not be sent.")}void refreshSessionData({reason:"agent-message-accepted"}).catch(()=>null);return true}catch(error){void refreshSessionData().catch(()=>null);if(controller.signal.aborted){return false}throw error}finally{if(messageId&&pendingMessageControllers.get(messageId)===controller){pendingMessageControllers.delete(messageId)}}})();return request}async function retryWorkspaceSetup(){const sessionId=selectedSessionId.value;if(!sessionId){return false}const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/workspace-setup/retry"),{body:{},method:"POST"});if((result==null?void 0:result.ok)===false){throw new Error(result.error||"Workspace preparation could not be started.")}await refreshSessionData({reason:"workspace-setup-retry"});return true}async function saveSessionWork(){const sessionId=selectedSessionId.value;if(!sessionId){return false}const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/save"),{body:vibe64RealtimeOriginPayload(),method:"POST"});await Promise.allSettled([refreshSessionData({reason:"session-work-save"}),refreshWorkState()]);if((result==null?void 0:result.ok)===false&&(result==null?void 0:result.code)==="vibe64_session_save_update_required"){return result}if((result==null?void 0:result.ok)===false){throw vibe64ApiError(result,"Session work could not be saved.")}return result}async function updateSessionWork(){const sessionId=selectedSessionId.value;if(!sessionId){return false}const result=await getHttpWebClient().request(vibe64SessionPath(readRefOrGetterValue(props.sessionData.sessionsApiPath),sessionId,"/updates/apply"),{body:vibe64RealtimeOriginPayload(),method:"POST"});await Promise.allSettled([refreshSessionData({reason:"session-work-update"}),refreshWorkState()]);if((result==null?void 0:result.ok)===false){throw vibe64ApiError(result,"This session could not be updated.")}return result}async function cancelAgentMessage(messageId=""){const normalizedId2=String(messageId||"").trim();const controller=pendingMessageControllers.get(normalizedId2);if(!controller){return false}controller.abort();pendingMessageControllers.delete(normalizedId2);return true}function setAutopilotBusy(busy=false){autopilotAgentThinking.value=Boolean(busy)}function emitToolbarControls(){emit("toolbar-controls-ready",{controls:{archive:dialogs.archive},sessionId:selectedSessionId.value})}function emitBusy(){emit("busy-change",{agentThinking:activeAgentWorking.value,busy:guardedPage.value.busy,sessionId:selectedSessionId.value})}function emitProjectAttention(){emit("project-attention")}function emitChatAttention(){emit("chat-attention")}const agentTerminal={sessionUpdate:()=>refreshSessionData()};const selectedAgentTerminalId=computed(()=>{var _a,_b,_c,_d,_e,_f;return String(((_c=(_b=(_a=selectedSession.value)==null?void 0:_a.agentSession)==null?void 0:_b.terminal)==null?void 0:_c.id)||((_f=(_e=(_d=selectedSession.value)==null?void 0:_d.agentSession)==null?void 0:_e.terminal)==null?void 0:_f.terminalSessionId)||"")});onMounted(()=>{emitToolbarControls();emitBusy();emit("page-error-change",{error:pageError.value,sessionId:selectedSessionId.value})});watch([activeAgentWorking,()=>guardedPage.value.busy],emitBusy,{flush:"post"});watch(selectedSessionId,()=>{autopilotAgentThinking.value=false},{flush:"sync"});watch(pageError,error=>{emit("page-error-change",{error,sessionId:selectedSessionId.value})},{flush:"post"});watch(workState,state=>{emit("work-state-change",{sessionId:selectedSessionId.value,workState:{...state}})},{deep:true,flush:"post",immediate:true});watch(sourceOperationsSuspended,(suspended,wasSuspended)=>{emit("source-operations-suspension-change",{sessionId:selectedSessionId.value,suspended:suspended===true});if(wasSuspended===true&&suspended!==true){void refreshWorkState()}},{flush:"sync",immediate:true});watch(()=>props.active,(active,previous)=>{if(active&&previous===false){void mounted.reconcileMountedAgentSession("selected");void conversationLog.reload().catch(()=>null)}});watch(()=>{return`${selectedSessionId.value}:${selectedSessionArchived.value}:${runtimeHostWorkTaskRevision(selectedSession.value)}`},()=>{const taskState=runtimeHostWorkTaskState(selectedSession.value);if(taskState.operation||taskState.updateOperation){workState.value={...workState.value,...taskState,checkedAt:new Date().toISOString(),error:"",loading:false}}void refreshWorkState()},{flush:"post",immediate:true});onBeforeUnmount(()=>{interruptFeedback.success();workStateActive=false;workStateRefreshQueue.dispose();for(const controller of pendingMessageControllers.values()){controller.abort()}pendingMessageControllers.clear()});return{agentConnectionStatus:mounted.agentConnectionStatus,agentTerminal,autopilotModeActive:computed(()=>Boolean(props.active)),autopilotSessionToolbar,cancelAgentMessage,codexTerminalCanStart:computed(()=>{var _a;return Boolean(props.active&&((_a=selectedSession.value)==null?void 0:_a.sessionId)===selectedSessionId.value)}),conversationLog,dialogs,emitChatAttention,emitProjectAttention,guardedPage,interruptAgentTurn,refreshSessionData,refreshWorkState,retryWorkspaceSetup,sessionRenewal:dialogs.renewal,saveSessionWork,selectedAgentTerminalId,selection,sendAgentMessage,setAutopilotBusy,updateSessionWork,workState}}const _hoisted_1$2=["data-vibe64-agent-turn-active","data-vibe64-session-runtime-id"];const _sfc_main$2={__name:"Vibe64SessionRuntimeHost",props:{active:{default:false,type:Boolean},chatCollapsed:{default:false,type:Boolean},githubActorTeleportTarget:{default:"",type:String},sessionData:{required:true,type:Object},sessionId:{required:true,type:String},toolbarSessions:{default:()=>[],type:Array},projectPane:{default:"preview",type:String},previewToolbarTeleportTarget:{default:"",type:String},promptHintPolicy:{default:()=>({enabled:true,ready:false,revision:0,version:0}),type:Object},projectContext:{default:()=>({}),type:Object}},emits:["busy-change","chat-attention","execution-attention","page-error-change","source-operations-suspension-change","work-state-change","toolbar-controls-ready","project-attention"],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{agentConnectionStatus,autopilotModeActive,autopilotSessionToolbar,agentTerminal,cancelAgentMessage,codexTerminalCanStart,conversationLog,dialogs,emitChatAttention,emitProjectAttention,guardedPage,interruptAgentTurn,refreshSessionData,refreshWorkState,retryWorkspaceSetup,saveSessionWork,sessionRenewal,selectedAgentTerminalId,selection,setAutopilotBusy,sendAgentMessage,updateSessionWork,workState}=useVibe64SessionRuntimeHost(props,emit);const selectedAssistantEngineId=computed(()=>{var _a,_b;return String(((_b=(_a=selection.selectedSession)==null?void 0:_a.assistantSelection)==null?void 0:_b.engineId)||"")});return(_ctx,_cache)=>{var _a,_b,_c;return openBlock(),createElementBlock("section",{class:"studio-ai-session-runtime","data-vibe64-agent-turn-active":((_c=(_b=(_a=unref(selection).selectedSession)==null?void 0:_a.agentSession)==null?void 0:_b.turn)==null?void 0:_c.active)===true?"true":"false","data-vibe64-session-runtime-id":props.sessionId},[createVNode(Vibe64AutopilotView,{active:unref(autopilotModeActive),"agent-connection-status":unref(agentConnectionStatus),"chat-collapsed":props.chatCollapsed,"cancel-agent-message":unref(cancelAgentMessage),"conversation-log":unref(conversationLog),"github-actor-teleport-target":props.githubActorTeleportTarget,"interrupt-agent-turn":unref(interruptAgentTurn),page:unref(guardedPage),"project-context":props.projectContext,"preview-toolbar-teleport-target":props.previewToolbarTeleportTarget,"prompt-hint-policy":props.promptHintPolicy,"refresh-session-data":unref(refreshSessionData),"refresh-session-work":unref(refreshWorkState),"retry-workspace-setup":unref(retryWorkspaceSetup),"save-session-work":unref(saveSessionWork),"session-archive":unref(dialogs).archive,"session-renewal":unref(sessionRenewal),session:unref(selection).selectedSession,"sessions-api-path":__props.sessionData.sessionsApiPath,"session-selection-archived":unref(selection).isArchived,"session-toolbar":unref(autopilotSessionToolbar),"send-agent-message":unref(sendAgentMessage),"update-session-work":unref(updateSessionWork),"work-state":unref(workState),"project-pane":props.projectPane,onBusyChange:unref(setAutopilotBusy),onChatAttention:unref(emitChatAttention),onExecutionAttention:_cache[0]||(_cache[0]=$event=>emit("execution-attention",$event)),onProjectAttention:unref(emitProjectAttention)},{"ai-terminal":withCtx(({active:tabActive})=>[selectedAssistantEngineId.value==="codex"?(openBlock(),createBlock(Vibe64CodexSession,{key:0,class:"studio-ai-sessions__tab-terminal","allow-start":tabActive&&unref(codexTerminalCanStart),"display-mode":tabActive?"full":"headless","listen-when-hidden":!tabActive&&Boolean(unref(selectedAgentTerminalId)),"read-only":!tabActive,scope:"session",session:unref(selection).selectedSession,terminal:null,visible:tabActive,onSessionUpdate:unref(agentTerminal).sessionUpdate},null,8,["allow-start","display-mode","listen-when-hidden","read-only","session","visible","onSessionUpdate"])):selectedAssistantEngineId.value==="opencode"?(openBlock(),createBlock(Vibe64OpenCodeSession,{key:1,class:"studio-ai-sessions__tab-terminal","allow-start":tabActive,"display-mode":tabActive?"full":"headless","listen-when-hidden":!tabActive&&Boolean(unref(selectedAgentTerminalId)),"read-only":!tabActive,session:unref(selection).selectedSession,visible:tabActive,onSessionUpdate:unref(agentTerminal).sessionUpdate},null,8,["allow-start","display-mode","listen-when-hidden","read-only","session","visible","onSessionUpdate"])):createCommentVNode("",true)]),dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,"dashboard",{dashboardContext:{...(dashboardSlotProps==null?void 0:dashboardSlotProps.dashboardContext)||{},sessions:props.toolbarSessions}},void 0,true)]),_:3},8,["active","agent-connection-status","chat-collapsed","cancel-agent-message","conversation-log","github-actor-teleport-target","interrupt-agent-turn","page","project-context","preview-toolbar-teleport-target","prompt-hint-policy","refresh-session-data","refresh-session-work","retry-workspace-setup","save-session-work","session-archive","session-renewal","session","sessions-api-path","session-selection-archived","session-toolbar","send-agent-message","update-session-work","work-state","project-pane","onBusyChange","onChatAttention","onProjectAttention"]),createVNode(Vibe64SessionRenewalDialog,{renewal:unref(dialogs).renewal},null,8,["renewal"])],8,_hoisted_1$2)}}};const Vibe64SessionRuntimeHost=_export_sfc(_sfc_main$2,[["__scopeId","data-v-8b93098d"]]);const VIBE64_CHAT_COLUMN_STORAGE_KEY="vibe64:studio-chat-column-width";const VIBE64_CHAT_COLUMN_DEFAULT_WIDTH_PX=384;const VIBE64_CHAT_COLUMN_MIN_WIDTH_PX=320;const VIBE64_CHAT_COLUMN_MAX_WIDTH_PX=720;const VIBE64_PROJECT_COLUMN_MIN_WIDTH_PX=480;const VIBE64_PROJECT_COLUMN_GAP_PX=12;const VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX=16;const staticChatColumnBounds=Object.freeze({max:VIBE64_CHAT_COLUMN_MAX_WIDTH_PX,min:VIBE64_CHAT_COLUMN_MIN_WIDTH_PX});function vibe64ChatColumnBounds(containerWidth=0){const width=Number(containerWidth);if(!Number.isFinite(width)||width<=0){return{...staticChatColumnBounds}}return{max:Math.max(VIBE64_CHAT_COLUMN_MIN_WIDTH_PX,Math.min(VIBE64_CHAT_COLUMN_MAX_WIDTH_PX,Math.floor(width-VIBE64_PROJECT_COLUMN_MIN_WIDTH_PX-VIBE64_PROJECT_COLUMN_GAP_PX))),min:VIBE64_CHAT_COLUMN_MIN_WIDTH_PX}}function constrainVibe64ChatColumnWidth(value2,bounds=staticChatColumnBounds,fallback=VIBE64_CHAT_COLUMN_DEFAULT_WIDTH_PX){const min=Number.isFinite(bounds==null?void 0:bounds.min)?bounds.min:VIBE64_CHAT_COLUMN_MIN_WIDTH_PX;const max=Math.max(min,Number.isFinite(bounds==null?void 0:bounds.max)?bounds.max:VIBE64_CHAT_COLUMN_MAX_WIDTH_PX);const width=Number.isFinite(value2)?value2:fallback;return Math.round(Math.min(max,Math.max(min,width)))}function vibe64ChatColumnWidthForKey(key="",currentWidth=0,bounds={}){if(key==="Home"){return constrainVibe64ChatColumnWidth(bounds.min,bounds)}if(key==="End"){return constrainVibe64ChatColumnWidth(bounds.max,bounds)}if(key==="ArrowLeft"){return constrainVibe64ChatColumnWidth(currentWidth-VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX,bounds)}if(key==="ArrowRight"){return constrainVibe64ChatColumnWidth(currentWidth+VIBE64_CHAT_COLUMN_KEYBOARD_STEP_PX,bounds)}return null}function useVibe64ChatColumnResize(){const separator=ref(null);const resizing=ref(false);const preferredWidth=ref(constrainVibe64ChatColumnWidth(readLocalStorageJson(VIBE64_CHAT_COLUMN_STORAGE_KEY,null),staticChatColumnBounds));const bounds=ref({...staticChatColumnBounds});const width=computed(()=>constrainVibe64ChatColumnWidth(preferredWidth.value,bounds.value));let drag=null;let pendingLayoutWidth=null;let resizeFrame=null;let resizeObserver=null;let windowResizeFallbackActive=false;function splitPane(){var _a;return((_a=separator.value)==null?void 0:_a.parentElement)||null}function syncBounds(){var _a;const containerWidth=((_a=splitPane())==null?void 0:_a.clientWidth)||0;if(containerWidth>0){bounds.value=vibe64ChatColumnBounds(containerWidth)}}function save(){writeLocalStorageJson(VIBE64_CHAT_COLUMN_STORAGE_KEY,width.value)}function layoutTargets(){if(typeof document==="undefined"){return[]}return[splitPane(),document.querySelector(".studio-home-shell-heading")].filter(Boolean)}function applyLayoutWidth(value2){var _a,_b;for(const target of layoutTargets()){target.style.setProperty("--studio-home-chat-column-width",`${value2}px`)}(_b=(_a=separator.value)==null?void 0:_a.setAttribute)==null?void 0:_b.call(_a,"aria-valuenow",String(value2))}function flushLayoutWidth(){resizeFrame=null;if(pendingLayoutWidth===null){return}const value2=pendingLayoutWidth;pendingLayoutWidth=null;applyLayoutWidth(value2)}function scheduleLayoutWidth(value2){pendingLayoutWidth=value2;if(resizeFrame!==null||typeof window==="undefined"||typeof window.requestAnimationFrame!=="function"){if(resizeFrame===null){flushLayoutWidth()}return}resizeFrame=window.requestAnimationFrame(flushLayoutWidth)}function cancelScheduledLayout(){if(resizeFrame!==null&&typeof window!=="undefined"&&typeof window.cancelAnimationFrame==="function"){window.cancelAnimationFrame(resizeFrame)}resizeFrame=null;pendingLayoutWidth=null}function stopResize(event){var _a,_b;if((event==null?void 0:event.pointerId)!==void 0&&(drag==null?void 0:drag.pointerId)!==void 0&&event.pointerId!==drag.pointerId){return}const completedDrag=drag;drag=null;resizing.value=false;if(typeof window!=="undefined"){window.removeEventListener("pointermove",moveResize);window.removeEventListener("pointerup",stopResize);window.removeEventListener("pointercancel",stopResize)}if(!completedDrag){return}if((_b=(_a=completedDrag.target)==null?void 0:_a.hasPointerCapture)==null?void 0:_b.call(_a,completedDrag.pointerId)){completedDrag.target.releasePointerCapture(completedDrag.pointerId)}cancelScheduledLayout();preferredWidth.value=completedDrag.width;applyLayoutWidth(width.value);save()}function moveResize(event){if(!drag||event.pointerId!==drag.pointerId){return}drag.width=constrainVibe64ChatColumnWidth(drag.startWidth+event.clientX-drag.startX,bounds.value);scheduleLayoutWidth(drag.width)}function startResize(event){var _a,_b;if(event.button!==0||typeof window==="undefined"){return}event.preventDefault();syncBounds();drag={pointerId:event.pointerId,startWidth:width.value,startX:event.clientX,target:event.currentTarget,width:width.value};resizing.value=true;(_b=(_a=event.currentTarget)==null?void 0:_a.setPointerCapture)==null?void 0:_b.call(_a,event.pointerId);window.addEventListener("pointermove",moveResize);window.addEventListener("pointerup",stopResize);window.addEventListener("pointercancel",stopResize)}function resizeWithKeyboard(event){syncBounds();const nextWidth=vibe64ChatColumnWidthForKey(event.key,width.value,bounds.value);if(nextWidth===null){return}event.preventDefault();preferredWidth.value=nextWidth;save()}function observeSplitPane(){const pane=splitPane();if(!pane){return}if(typeof ResizeObserver==="undefined"){if(typeof window!=="undefined"){windowResizeFallbackActive=true;window.addEventListener("resize",syncBounds)}return}resizeObserver=new ResizeObserver(syncBounds);resizeObserver.observe(pane)}watch(width,applyLayoutWidth,{immediate:true});onMounted(async()=>{await nextTick();syncBounds();applyLayoutWidth(width.value);observeSplitPane()});onBeforeUnmount(()=>{var _a;stopResize();cancelScheduledLayout();(_a=resizeObserver==null?void 0:resizeObserver.disconnect)==null?void 0:_a.call(resizeObserver);resizeObserver=null;if(windowResizeFallbackActive&&typeof window!=="undefined"){window.removeEventListener("resize",syncBounds)}windowResizeFallbackActive=false;for(const target of layoutTargets()){target.style.removeProperty("--studio-home-chat-column-width")}});return{bounds,resizing,resizeWithKeyboard,separator,startResize,width}}const DEFAULT_MAX_CONCURRENCY=2;const DEFAULT_STALE_AFTER_MS=5*6e4;const DEFAULT_STALE_CHECK_INTERVAL_MS=6e4;const DEFAULT_CANONICAL_CHECK_INTERVAL_MS=5*6e4;function createVibe64SessionRepositoryStatusQueue({maxConcurrency=DEFAULT_MAX_CONCURRENCY,now=()=>Date.now(),onState=()=>null,requestWork,staleAfterMs=DEFAULT_STALE_AFTER_MS}={}){if(typeof requestWork!=="function"){throw new TypeError("Session repository status requires a work inspector.")}const concurrency=Math.max(1,Number(maxConcurrency||0));const records=new Map;const pending=new Map;const activeSessions=new Set;const canonicalUpdatePending=new Map;const refreshAfterActive=new Set;const waiters=new Set;let active=0;let disposed=false;function settled(){if(active||pending.size){return}for(const resolve of waiters){resolve()}waiters.clear()}function observe(sessionId="",workState=null){const id=String(sessionId||"").trim();if(!id){return}const state=workState&&typeof workState==="object"?{...workState}:{};if(canonicalUpdatePending.has(id)){const expectedCommit=canonicalUpdatePending.get(id);if(expectedCommit&&state.canonicalCommit===expectedCommit&&state.updateStatusPending!==true){canonicalUpdatePending.delete(id)}else{state.updateAvailable=true;state.updateStatusPending=true}}const checkedAt=String(state.checkedAt||"").trim();records.set(id,{checkedAtMs:checkedAt?Date.parse(checkedAt)||now():now(),workState:state});onState({sessionId:id,workState:state})}function markUpdatePending(sessionId="",canonicalCommit=""){var _a;const id=String(sessionId||"").trim();if(!id){return}const prior=((_a=records.get(id))==null?void 0:_a.workState)||{};canonicalUpdatePending.set(id,String(canonicalCommit||"").trim());observe(id,{...prior,checkedAt:"",error:"",loading:false,updateAvailable:true,updateStatusPending:true})}function confirmCanonical(sessionId="",{canonicalCommit="",updateAvailable=false}={}){const id=String(sessionId||"").trim();const commit=String(canonicalCommit||"").trim();const expectedCommit=canonicalUpdatePending.get(id);if(updateAvailable&&(!expectedCommit||expectedCommit===commit)){markUpdatePending(id,commit)}else if(expectedCommit===""){canonicalUpdatePending.set(id,commit)}}function markCanonicalCheckUnavailable(sessionId="",error=""){var _a;const id=String(sessionId||"").trim();if(!id){return}const prior=((_a=records.get(id))==null?void 0:_a.workState)||{};observe(id,{...prior,checkedAt:new Date(now()).toISOString(),error:String(error||"Repository update status is unavailable."),loading:false})}function fresh(sessionId){var _a;const checkedAtMs=((_a=records.get(sessionId))==null?void 0:_a.checkedAtMs)||0;return checkedAtMs>0&&now()-checkedAtMs<staleAfterMs}async function inspect(sessionId){var _a;active+=1;activeSessions.add(sessionId);const prior=((_a=records.get(sessionId))==null?void 0:_a.workState)||null;if(!prior){observe(sessionId,{checkedAt:"",error:"",loading:true,operation:null,unsaved:null})}try{const result=await requestWork(sessionId);if(disposed){return}if((result==null?void 0:result.ok)===false){throw new Error(String((result==null?void 0:result.message)||(result==null?void 0:result.error)||"Session work could not be inspected."))}observe(sessionId,{...result,checkedAt:new Date(now()).toISOString(),error:"",loading:false})}catch(error){if(disposed){return}observe(sessionId,{checkedAt:new Date(now()).toISOString(),error:error instanceof Error?error.message:String(error||"Session work could not be inspected."),loading:false,operation:null,unsaved:null})}finally{active-=1;activeSessions.delete(sessionId);if(refreshAfterActive.delete(sessionId)&&!disposed){pending.set(sessionId,true)}drain();settled()}}function drain(){if(disposed){pending.clear();settled();return}while(active<concurrency&&pending.size){const[sessionId]=pending.entries().next().value;pending.delete(sessionId);void inspect(sessionId)}}function enqueue(sessionIds=[],{force=false}={}){for(const rawSessionId of sessionIds){const sessionId=String(rawSessionId||"").trim();if(!sessionId||pending.has(sessionId)||!force&&fresh(sessionId)){continue}if(activeSessions.has(sessionId)){if(force){refreshAfterActive.add(sessionId)}continue}pending.set(sessionId,true)}drain()}function removeExcept(sessionIds=[]){const retained=new Set(sessionIds.map(sessionId=>String(sessionId||"").trim()).filter(Boolean));for(const sessionId of records.keys()){if(!retained.has(sessionId)){records.delete(sessionId);pending.delete(sessionId);refreshAfterActive.delete(sessionId);canonicalUpdatePending.delete(sessionId)}}}function dispose(){disposed=true;pending.clear();refreshAfterActive.clear();canonicalUpdatePending.clear();settled()}function waitForIdle(){if(!active&&!pending.size){return Promise.resolve()}return new Promise(resolve=>waiters.add(resolve))}return{dispose,confirmCanonical,enqueue,markCanonicalCheckUnavailable,markUpdatePending,observe,removeExcept,waitForIdle}}function useVibe64SessionRepositoryStatusRegistry({maxVisibleSessions=DEFAULT_VISIBLE_SESSION_LIMIT,onState=()=>null,selectedSessionId,sessionSourceOperationsSuspended=()=>false,sessions,sessionsApiPath}={}){const visibleSessions=computed(()=>visibleVibe64ToolbarSessions({limit:maxVisibleSessions,selectedSessionId:readRefOrGetterValue(selectedSessionId),sessions:readRefOrGetterValue(sessions)||[]}));const visibleSessionIds=computed(()=>visibleSessions.value.map(session=>String((session==null?void 0:session.sessionId)||"").trim()).filter(Boolean));const selectedId=computed(()=>String(readRefOrGetterValue(selectedSessionId)||"").trim());const apiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||"").trim());const suspendedVisibleSessionIds=computed(()=>visibleSessionIds.value.filter(sessionId=>sessionSourceOperationsSuspended(sessionId)===true));const canonicalChecks=new Map;const canonicalCheckedAt=new Map;const canonicalAccessRevisions=new Map;const forcedCanonicalFollowups=new Set;let disposed=false;function sourceOperationsSuspended(sessionId=""){const id=String(sessionId||"").trim();return Boolean(id&&sessionSourceOperationsSuspended(id)===true)}function canonicalAccessRevision(sessionId=""){return Number(canonicalAccessRevisions.get(sessionId)||0)}function advanceCanonicalAccessRevision(sessionId=""){const id=String(sessionId||"").trim();if(!id){return 0}const revision=canonicalAccessRevision(id)+1;canonicalAccessRevisions.set(id,revision);return revision}const queue=createVibe64SessionRepositoryStatusQueue({onState,async requestWork(sessionId){return getHttpWebClient().request(vibe64SessionPath(apiPath.value,sessionId,"/work"),{method:"GET"})}});function inspectVisible({force=false,includeSelected=false,sessionId=""}={}){if(!apiPath.value){return}const requestedId=String(sessionId||"").trim();const ids=visibleSessionIds.value.filter(id=>!sourceOperationsSuspended(id)&&(includeSelected||id!==selectedId.value)&&(!requestedId||id===requestedId));queue.enqueue(ids,{force})}function observeCanonicalCheck(sessionId,result){if(forcedCanonicalFollowups.has(sessionId)){return}const checkedAt=String(result.checkedAt||"");if(checkedAt&&checkedAt<=(canonicalCheckedAt.get(sessionId)||"")){return}if(checkedAt){canonicalCheckedAt.set(sessionId,checkedAt)}queue.confirmCanonical(sessionId,result);inspectVisible({force:true,includeSelected:true,sessionId})}async function checkCanonical(sessionId="",{force=false}={}){const id=String(sessionId||"").trim();if(disposed||!id||!apiPath.value||sourceOperationsSuspended(id)){return null}const accessRevision=canonicalAccessRevision(id);if(canonicalChecks.has(id)){const active=canonicalChecks.get(id);if(active.accessRevision===accessRevision){if(force){forcedCanonicalFollowups.add(id)}return active.promise}}let request;const requestIsCurrent=()=>{var _a;return Boolean(!disposed&&!sourceOperationsSuspended(id)&&canonicalAccessRevision(id)===accessRevision&&((_a=canonicalChecks.get(id))==null?void 0:_a.promise)===request)};request=getHttpWebClient().request(vibe64SessionCheckUpdatesPath(apiPath.value,id),{body:{force},method:"POST"}).then(result=>{if(!requestIsCurrent()){return null}if((result==null?void 0:result.ok)===false){throw new Error(String((result==null?void 0:result.message)||(result==null?void 0:result.error)||"Repository update status is unavailable."))}observeCanonicalCheck(id,result);return result}).catch(error=>{if(requestIsCurrent()){queue.markCanonicalCheckUnavailable(id,error instanceof Error?error.message:String(error||"Repository update status is unavailable."))}return null}).finally(()=>{var _a;if(((_a=canonicalChecks.get(id))==null?void 0:_a.promise)!==request){return}canonicalChecks.delete(id);if(!disposed&&!sourceOperationsSuspended(id)&&forcedCanonicalFollowups.delete(id)){void checkCanonical(id,{force:true})}});canonicalChecks.set(id,{accessRevision,promise:request});return request}watch(()=>[apiPath.value,selectedId.value,...visibleSessionIds.value],()=>{queue.removeExcept(visibleSessionIds.value);for(const id of canonicalCheckedAt.keys()){if(!visibleSessionIds.value.includes(id))canonicalCheckedAt.delete(id)}inspectVisible();void checkCanonical(selectedId.value)},{immediate:true});let priorSuspendedSessionIds=new Set;watch(suspendedVisibleSessionIds,sessionIds=>{const nextSuspendedSessionIds=new Set(sessionIds);for(const sessionId of new Set([...priorSuspendedSessionIds,...nextSuspendedSessionIds])){const wasSuspended=priorSuspendedSessionIds.has(sessionId);const suspended=nextSuspendedSessionIds.has(sessionId);if(wasSuspended===suspended){continue}advanceCanonicalAccessRevision(sessionId);forcedCanonicalFollowups.delete(sessionId);if(!suspended&&visibleSessionIds.value.includes(sessionId)){void checkCanonical(sessionId,{force:true})}}priorSuspendedSessionIds=nextSuspendedSessionIds},{flush:"sync",immediate:true});useRealtimeEvent({enabled:computed(()=>visibleSessionIds.value.length>0),event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>Boolean(visibleSessionIds.value.includes(repositoryStatusSessionId(payload))&&!sourceOperationsSuspended(repositoryStatusSessionId(payload))&&repositoryStatusRealtimeShouldRefresh(payload)),onEvent:({payload={}}={})=>{const sessionId=repositoryStatusSessionId(payload);if(sourceOperationsSuspended(sessionId)){return}if(payload.reason==="session-repository-checked"){observeCanonicalCheck(sessionId,payload.repositoryUpdateCheck);return}inspectVisible({force:true,includeSelected:true,sessionId});if(repositoryStatusRealtimeNeedsCanonicalCheck(payload)){queue.markUpdatePending(sessionId,payload.canonicalCommit);void checkCanonical(sessionId,{force:true})}}});useRealtimeEvent({enabled:computed(()=>visibleSessionIds.value.length>0),event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,matches:({payload={}}={})=>visibleSessionIds.value.includes(repositoryStatusSessionId(payload))&&!sourceOperationsSuspended(repositoryStatusSessionId(payload)),onEvent:({payload={}}={})=>inspectVisible({force:true,includeSelected:true,sessionId:repositoryStatusSessionId(payload)})});const browserDocument=typeof document==="undefined"?null:document;const interval=typeof window==="undefined"?null:window.setInterval(()=>{if((browserDocument==null?void 0:browserDocument.visibilityState)==="hidden"){return}inspectVisible()},DEFAULT_STALE_CHECK_INTERVAL_MS);const canonicalInterval=typeof window==="undefined"?null:window.setInterval(()=>{if((browserDocument==null?void 0:browserDocument.visibilityState)==="hidden"){return}void checkCanonical(selectedId.value)},DEFAULT_CANONICAL_CHECK_INTERVAL_MS);const refreshWhenVisible=()=>{if((browserDocument==null?void 0:browserDocument.visibilityState)!=="visible"){return}inspectVisible({force:true});void checkCanonical(selectedId.value,{force:true})};browserDocument==null?void 0:browserDocument.addEventListener("visibilitychange",refreshWhenVisible);onScopeDispose(()=>{disposed=true;browserDocument==null?void 0:browserDocument.removeEventListener("visibilitychange",refreshWhenVisible);if(interval!==null){window.clearInterval(interval)}if(canonicalInterval!==null){window.clearInterval(canonicalInterval)}canonicalChecks.clear();canonicalCheckedAt.clear();canonicalAccessRevisions.clear();forcedCanonicalFollowups.clear();queue.dispose()});return{inspectVisible,observe:queue.observe,visibleSessionIds}}const vibe64SessionPanelEmits=["chat-attention","execution-attention","title-change","project-attention"];const vibe64SessionPanelProps={chatCollapsed:{default:false,type:Boolean},githubActorTeleportTarget:{default:"",type:String},projectContext:{default:()=>({}),type:Object},projectPane:{default:"",type:String},previewToolbarTeleportTarget:{default:"",type:String}};function useVibe64SessionPanel(props,emit){const route=useRoute();const projectSlug=useVibe64ProjectSlug();const fallbackArchive={command:{isRunning:false},request:()=>null};const dismissedPageError=ref("");const mountedRuntimeSessionIds=ref([]);const runtimeStateBySessionId=reactive({});const sessionData=useVibe64SessionData({onTitleChange(title){emit("title-change",title)}});const projectSettingsKey=computed(()=>projectSettingsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value));const projectSettings=useEndpointResource({enabled:computed(()=>Boolean(projectSlug.value)),fallbackLoadError:"Project settings could not load.",path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:projectSettingsKey,realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,queryKey:computed(()=>projectSettingsKey.value.slice(0,-1))},refreshOnPull:true,requestRecoveryLabel:"Project settings"});const promptHintPolicy=computed(()=>{var _a;const promptHints=(_a=projectSettings.data.value)==null?void 0:_a.promptHints;return{enabled:(promptHints==null?void 0:promptHints.enabled)!==false,ready:Boolean(promptHints&&!projectSettings.loadError.value)}});const selection=proxyRefs({isArchived:sessionData.isSelectedSessionArchived,selectedSession:sessionData.selectedSession,selectedSessionId:sessionData.selectedSessionId});let repositoryStatusRegistry={observe:()=>null};repositoryStatusRegistry=useVibe64SessionRepositoryStatusRegistry({onState:applyRuntimeWorkState,selectedSessionId:()=>selection.selectedSessionId,sessionSourceOperationsSuspended:sessionId=>{var _a;return((_a=runtimeStateBySessionId[sessionId])==null?void 0:_a.sourceOperationsSuspended)===true},sessions:sessionData.sessions,sessionsApiPath:sessionData.sessionsApiPath});const toolbarSessions=computed(()=>sessionPanelToolbarSessions({runtimeStateBySessionId,selectedSession:selection.selectedSession,selectedSessionId:selection.selectedSessionId,sessions:sessionData.sessions.value||[]}));const toolbar=proxyRefs({canCreateSession:sessionData.canCreateSession,createSession:sessionData.createSession,createSessionCommand:sessionData.createSessionCommand,createSessionRunning:sessionData.createSessionRunning,createSessionVisible:sessionData.createSessionVisible,createSessionTitle:sessionData.createSessionTitle,selectSession:sessionData.selectSessionId,sessions:toolbarSessions,shortSessionId:sessionData.shortSessionId});const projectPane=computed(()=>normalizeProjectPane(props.projectPane||route.query.pane));const chatCollapsed=computed(()=>Boolean(props.chatCollapsed));const dashboardProjectActive=computed(()=>projectPane.value==="dashboard");const emptyDashboardContext=computed(()=>sessionPanelDashboardContext(props.projectContext,sessionData.sessionsApiPath));const emptyBlockedReason=computed(()=>String(!toolbar.canCreateSession&&toolbar.createSessionTitle?toolbar.createSessionTitle:"").trim());const selectedRuntimeState=computed(()=>runtimeStateBySessionId[selection.selectedSessionId]||null);const sessionLoadError=computed(()=>Boolean(sessionData.sessionList.loadError));const runtimeHostSessionIds=computed(()=>{const visibleSessionIds=new Set((toolbar.sessions||[]).filter(session=>!session.archiving).map(session=>session.sessionId));if(selection.selectedSessionId){visibleSessionIds.add(selection.selectedSessionId)}if(sessionLoadError.value){for(const mountedSessionId of mountedRuntimeSessionIds.value){visibleSessionIds.add(mountedSessionId)}}const archivingIds=new Set((toolbar.sessions||[]).filter(session=>session.archiving).map(session=>session.sessionId));return mountedRuntimeSessionIds.value.filter(sessionId=>visibleSessionIds.has(sessionId)&&!archivingIds.has(sessionId))});const emptyStateActivity=computed(()=>sessionPanelEmptyStateActivity({createSessionRunning:sessionData.createSessionRunning.value,runtimeHostSessionCount:runtimeHostSessionIds.value.length,selectedSession:selection.selectedSession,sessionListInitialLoading:sessionData.sessionList.isInitialLoading}));const emptyStateLoading=computed(()=>Boolean(emptyStateActivity.value));const emptyStateInitialLoading=computed(()=>emptyStateActivity.value==="loading");const emptyStateStatusText=computed(()=>emptyStateActivity.value==="creating"?"Creating session.":"Loading sessions.");const emptyChatHintText=computed(()=>{if(emptyStateActivity.value==="creating"){return"Creating session."}if(emptyStateActivity.value==="loading"){return"Loading sessions."}return emptyBlockedReason.value||"Use the + button to start a session."});const emptyPreviewTitleText=computed(()=>{if(emptyStateActivity.value==="creating"){return"Creating session."}return emptyStateLoading.value?"Loading session.":"Create a session to start preview."});const emptyPreviewDetailText=computed(()=>{if(emptyStateLoading.value){return""}return emptyBlockedReason.value});const emptyCreateAttention=computed(()=>Boolean(!emptyStateLoading.value&&toolbar.canCreateSession&&(toolbar.sessions||[]).length<1));const emptyLayoutVisible=computed(()=>!selection.selectedSession);const selectedArchive=computed(()=>sessionData.archive||fallbackArchive);const selectedSessionArchiving=computed(()=>sessionPanelSelectedSessionArchiving({archive:selectedArchive.value,selectedSessionId:selection.selectedSessionId}));const rawPageError=computed(()=>{var _a;return blockingVibe64SessionPageError({hasMountedRuntime:runtimeHostSessionIds.value.length>0,runtimePageError:(_a=selectedRuntimeState.value)==null?void 0:_a.pageError,selectedSession:selection.selectedSession,selectedSessionLoadError:"",sessionListLoadError:sessionData.sessionList.loadError,sessions:toolbar.sessions||[]})});const pageError=computed(()=>sessionPanelPageErrorMessage(rawPageError.value));const visiblePageError=computed(()=>Boolean(pageError.value&&dismissedPageError.value!==pageError.value));const runtimeHostDiagnostics=computed(()=>sessionPanelRuntimeHostDiagnostics({mountedRuntimeSessionIds:mountedRuntimeSessionIds.value,runtimeHostSessionIds:runtimeHostSessionIds.value,runtimeStateBySessionId,selectedSessionId:selection.selectedSessionId,sessionLoadError:sessionLoadError.value,sessions:toolbar.sessions||[]}));watch(sessionData.sessions,(sessions=[])=>{if(sessionLoadError.value){if(selection.selectedSessionId){ensureRuntimeHost(selection.selectedSessionId)}return}const visibleSessionIds=new Set(sessions.map(session=>session.sessionId));mountedRuntimeSessionIds.value=mountedRuntimeSessionIds.value.filter(sessionId=>visibleSessionIds.has(sessionId));for(const sessionId of Object.keys(runtimeStateBySessionId)){if(!visibleSessionIds.has(sessionId)){delete runtimeStateBySessionId[sessionId]}}if(selection.selectedSessionId){ensureRuntimeHost(selection.selectedSessionId)}});watch(()=>[selection.selectedSessionId,selection.selectedSessionId?"selected":"empty"].join("|"),()=>{if(selection.selectedSessionId){ensureRuntimeHost(selection.selectedSessionId)}},{immediate:true});watch(pageError,error=>{if(!error){dismissedPageError.value=""}});watch(runtimeHostDiagnostics,diagnostics=>{vibe64SessionDebugLog("client.sessionPanel.runtimeHosts.changed",diagnostics)},{immediate:true});return{chatCollapsed,dashboardProjectActive,dismissPageError,emitChatAttention,emitProjectAttention,emptyChatHintText,emptyCreateAttention,emptyDashboardContext,emptyLayoutVisible,emptyPreviewDetailText,emptyPreviewTitleText,emptyStateInitialLoading,emptyStateLoading,emptyStateStatusText,pageError,promptHintPolicy,projectPane,runtimeHostSessionIds,selectedArchive,selectedSessionArchiving,selection,sessionData,setRuntimeBusy,setRuntimePageError,setRuntimeSourceOperationsSuspended,setRuntimeWorkState,setRuntimeToolbarControls,toolbar,visiblePageError};function emitProjectAttention(){emit("project-attention")}function emitChatAttention(){emit("chat-attention")}function dismissPageError(){dismissedPageError.value=String(pageError.value||"")}function ensureRuntimeState(sessionId=""){const key=String(sessionId||"");if(!key){return null}if(!runtimeStateBySessionId[key]){runtimeStateBySessionId[key]={toolbarControls:null,agentThinking:false,busy:false,pageError:"",sourceOperationsSuspended:false,repositoryWorkState:{checkedAt:"",state:"checking"}}}return runtimeStateBySessionId[key]}function ensureRuntimeHost(sessionId=""){const key=String(sessionId||"");if(!key||mountedRuntimeSessionIds.value.includes(key)){return}mountedRuntimeSessionIds.value=[...mountedRuntimeSessionIds.value,key];ensureRuntimeState(key)}function setRuntimeToolbarControls({controls=null,sessionId=""}={}){const state=ensureRuntimeState(sessionId);if(state){state.toolbarControls=controls}}function setRuntimeBusy({agentThinking=false,busy=false,sessionId=""}={}){const state=ensureRuntimeState(sessionId);if(state){state.busy=Boolean(busy);state.agentThinking=Boolean(agentThinking)}}function setRuntimePageError({error="",sessionId=""}={}){const state=ensureRuntimeState(sessionId);if(state){state.pageError=String(error||"")}}function setRuntimeSourceOperationsSuspended({sessionId="",suspended=false}={}){const state=ensureRuntimeState(sessionId);if(state){state.sourceOperationsSuspended=suspended===true}}function setRuntimeWorkState({sessionId="",workState=null}={}){repositoryStatusRegistry.observe(sessionId,workState)}function applyRuntimeWorkState({sessionId="",workState=null}={}){const state=ensureRuntimeState(sessionId);if(state){state.repositoryWorkState=sessionRepositoryWorkState(workState)}}}function sessionRepositoryWorkState(workState=null){var _a,_b,_c;const source=workState&&typeof workState==="object"?workState:{};const freshness={checkedAt:String(source.checkedAt||""),...source.updateStatusPending===true?{updateStatusPending:true}:{}};const operationStatus=String(((_a=source.operation)==null?void 0:_a.status)||"").trim();const operationCode=String(((_b=source.operation)==null?void 0:_b.code)||"").trim();const updateStatus=String(((_c=source.updateOperation)==null?void 0:_c.status)||"").trim();if(operationStatus==="running"){return{...freshness,state:"saving"}}if(updateStatus==="running"){return{...freshness,state:"updating"}}if(operationStatus==="failed"&&operationCode!=="vibe64_session_save_update_required"||updateStatus==="failed"){return{...freshness,state:"needs_help",updateAvailable:source.updateAvailable===true}}if((source.loading||source.unsaved===null||source.unsaved===void 0)&&source.updateAvailable!==true){return{...freshness,state:source.error?"unavailable":"checking"}}const changedCount=Array.isArray(source.changedPaths)?source.changedPaths.length:0;if(source.unsaved===true){return{changedCount,...freshness,state:"unsaved",updateAvailable:source.updateAvailable===true}}return{...freshness,state:source.error?"unavailable":source.updateAvailable===true?"update_available":"saved"}}function normalizeProjectPane(value2=""){return["dashboard","preview"].includes(value2)?value2:"preview"}function sessionPanelPageErrorMessage(error=""){const message=String(error||"").trim();if(/^request failed\.?$/iu.test(message)){return"The session API request failed. Check that the Vibe64 server is running, then refresh the session."}return message}function sessionPanelSelectedSessionArchiving({archive=null,selectedSessionId=""}={}){const selectedId=String(selectedSessionId||"").trim();const archivingId=String((archive==null?void 0:archive.archivingSessionId)||"").trim();return Boolean((archive==null?void 0:archive.archiving)&&selectedId&&archivingId===selectedId)}function sessionPanelDashboardContext(projectContext={},sessionsApiPath=""){const safeProjectContext=projectContext&&typeof projectContext==="object"&&!Array.isArray(projectContext)?projectContext:{};return{projectContext:safeProjectContext,sessionsApiPath:String(unref(sessionsApiPath)||"")}}function sessionPanelToolbarSessions({runtimeStateBySessionId={},selectedSession=null,selectedSessionId="",sessions=[]}={}){const normalizedSelectedSessionId=String(selectedSessionId||"").trim();return sessions.map(session=>{const sessionId=String((session==null?void 0:session.sessionId)||"").trim();if(!sessionId){return session}const runtimeState=runtimeStateBySessionId[sessionId]||null;const sourceSession=sessionId===normalizedSelectedSessionId&&(selectedSession==null?void 0:selectedSession.sessionId)===sessionId?selectedSession:session;const agentThinking=Boolean((runtimeState==null?void 0:runtimeState.busy)||(runtimeState==null?void 0:runtimeState.agentThinking)||sessionRecordHasActiveAgentWork(sourceSession));return{...session,agentThinking,repositoryWorkState:(runtimeState==null?void 0:runtimeState.repositoryWorkState)||{checkedAt:"",state:"checking"}}})}function sessionPanelRuntimeHostDiagnostics({mountedRuntimeSessionIds=[],runtimeHostSessionIds=[],runtimeStateBySessionId={},selectedSessionId="",sessionLoadError=false,sessions=[]}={}){const mountedIds=mountedRuntimeSessionIds.map(sessionId=>String(sessionId||"").trim()).filter(Boolean);const renderedIds=runtimeHostSessionIds.map(sessionId=>String(sessionId||"").trim()).filter(Boolean);const sessionIds=sessions.map(session=>String((session==null?void 0:session.sessionId)||"").trim()).filter(Boolean);const renderedSet=new Set(renderedIds);const selectedId=String(selectedSessionId||"").trim();const sessionSet=new Set(sessionIds);const stateIds=Object.keys(runtimeStateBySessionId||{}).map(sessionId=>String(sessionId||"").trim()).filter(Boolean);const states=stateIds.map(sessionId=>runtimeStateBySessionId[sessionId]).filter(Boolean);return{activeRuntimeHostCount:selectedId&&mountedIds.includes(selectedId)?1:0,busyRuntimeHostCount:states.filter(state=>Boolean(state==null?void 0:state.busy)).length,hiddenMountedRuntimeHostCount:mountedIds.filter(sessionId=>sessionId!==selectedId).length,mountedRuntimeHostCount:mountedIds.length,mountedRuntimeSessionIds:mountedIds,orphanedMountedRuntimeHostCount:mountedIds.filter(sessionId=>!sessionSet.has(sessionId)).length,pageErrorRuntimeHostCount:states.filter(state=>String((state==null?void 0:state.pageError)||"").trim()).length,renderedRuntimeHostCount:renderedIds.length,renderedRuntimeSessionIds:renderedIds,runtimeStateCount:stateIds.length,selectedSessionId:selectedId,sessionLoadError:Boolean(sessionLoadError),unrenderedMountedRuntimeHostCount:mountedIds.filter(sessionId=>!renderedSet.has(sessionId)).length,visibleRuntimeHostCount:renderedIds.length,visibleRuntimeSessionIds:renderedIds,visibleSessionCount:sessionIds.length}}function sessionPanelEmptyStateActivity({createSessionRunning=false,runtimeHostSessionCount=0,selectedSession=null,sessionListInitialLoading=false}={}){if(selectedSession||Number(runtimeHostSessionCount)>0){return""}if(createSessionRunning){return"creating"}return sessionListInitialLoading?"loading":""}const _hoisted_1$1={key:0,class:"studio-ai-sessions__error-overlay"};const _hoisted_2$1=["aria-valuemax","aria-valuemin","aria-valuenow"];const _hoisted_3$1=["aria-hidden","inert"];const _hoisted_4$1={class:"studio-ai-sessions__empty-main","aria-label":"Session chat"};const _hoisted_5$1={class:"studio-ai-sessions__empty-session-header"};const _hoisted_6$1={class:"studio-ai-sessions__empty-chat-body"};const _hoisted_7$1={key:0,class:"studio-ai-sessions__empty-hint",role:"status"};const _hoisted_8$1={class:"studio-ai-sessions__empty-project-panel","aria-label":"Project"};const _hoisted_9={key:0,class:"studio-ai-sessions__dashboard-empty-pane"};const _hoisted_10={key:1,class:"studio-ai-sessions__preview-empty-pane"};const _hoisted_11={class:"studio-ai-sessions__preview-empty-content"};const _hoisted_12={class:"studio-ai-sessions__preview-empty-title"};const _hoisted_13={key:0,class:"studio-ai-sessions__preview-empty-detail"};const _hoisted_14={key:1,class:"studio-ai-sessions__preview-empty-loading",role:"status"};const _hoisted_15=["aria-hidden","inert"];const _sfc_main$1={__name:"Vibe64SessionPanel",props:vibe64SessionPanelProps,emits:vibe64SessionPanelEmits,setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const sessionTooltip=createVibe64SessionTooltipState();provide(VIBE64_SESSION_TOOLTIP_KEY,sessionTooltip);const{chatCollapsed,dashboardProjectActive,dismissPageError,emitChatAttention,emitProjectAttention,emptyChatHintText,emptyCreateAttention,emptyDashboardContext,emptyLayoutVisible,emptyPreviewDetailText,emptyPreviewTitleText,emptyStateInitialLoading,emptyStateStatusText,pageError,promptHintPolicy,projectPane,runtimeHostSessionIds,selectedArchive,selectedSessionArchiving,selection,sessionData,setRuntimeBusy,setRuntimePageError,setRuntimeSourceOperationsSuspended,setRuntimeWorkState,setRuntimeToolbarControls,toolbar,visiblePageError}=useVibe64SessionPanel(props,emit);async function createSessionForEmptyState(assistantSelection={}){var _a;const response=await((_a=toolbar.createSession)==null?void 0:_a.call(toolbar,assistantSelection));if(response==null?void 0:response.sessionId){void focusCreatedVibe64SessionTab(response.sessionId)}return response}const emptyToolbar=computed(()=>({...toolbar,createSession:createSessionForEmptyState}));const{bounds:chatColumnBounds,resizing:chatColumnResizing,resizeWithKeyboard:resizeChatColumnWithKeyboard,separator:chatColumnSeparator,startResize:startChatColumnResize,width:chatColumnWidth}=useVibe64ChatColumnResize();return(_ctx,_cache)=>{return openBlock(),createBlock(VSheet,{rounded:"lg",class:normalizeClass(["studio-ai-sessions studio-ai-sessions--autopilot studio-screen__panel",{"studio-ai-sessions--resizing":unref(chatColumnResizing)}]),onPointermove:unref(sessionTooltip).trackPointer,onPointerleave:unref(sessionTooltip).resumeHover},{default:withCtx(()=>[createVNode(Transition,{name:"studio-ai-sessions-error"},{default:withCtx(()=>[unref(visiblePageError)?(openBlock(),createElementBlock("div",_hoisted_1$1,[createVNode(StudioErrorNotice,{title:"Session data could not refresh",error:unref(pageError),compact:"",dismissible:"",onDismiss:unref(dismissPageError)},null,8,["error","onDismiss"])])):createCommentVNode("",true)]),_:1}),createVNode(Vibe64SessionArchiveDialog,{archive:unref(selectedArchive),"short-session-id":unref(sessionData).shortSessionId},null,8,["archive","short-session-id"]),withDirectives(createBaseVNode("div",{ref_key:"chatColumnSeparator",ref:chatColumnSeparator,class:normalizeClass(["studio-ai-sessions__chat-column-separator",{"studio-ai-sessions__chat-column-separator--resizing":unref(chatColumnResizing)}]),"aria-label":"Resize chat","aria-orientation":"vertical","aria-valuemax":unref(chatColumnBounds).max,"aria-valuemin":unref(chatColumnBounds).min,"aria-valuenow":unref(chatColumnWidth),role:"separator",tabindex:"0",title:"Resize chat",onKeydown:_cache[0]||(_cache[0]=(...args)=>unref(resizeChatColumnWithKeyboard)&&unref(resizeChatColumnWithKeyboard)(...args)),onPointerdown:_cache[1]||(_cache[1]=(...args)=>unref(startChatColumnResize)&&unref(startChatColumnResize)(...args))},null,42,_hoisted_2$1),[[vShow,!unref(chatCollapsed)]]),unref(emptyLayoutVisible)?(openBlock(),createElementBlock("div",{key:0,class:normalizeClass(["studio-ai-sessions__empty-layout",{"studio-ai-sessions__empty-layout--chat-collapsed":unref(chatCollapsed),"studio-ai-sessions__empty-layout--dashboard":unref(dashboardProjectActive)}]),"aria-hidden":unref(selectedSessionArchiving)?"true":void 0,inert:unref(selectedSessionArchiving)},[createBaseVNode("section",_hoisted_4$1,[createBaseVNode("div",_hoisted_5$1,[createVNode(Vibe64SessionToolbar,{archive:unref(selectedArchive),compact:"","create-attention":unref(emptyCreateAttention),"create-visible":!unref(emptyStateInitialLoading)&&unref(toolbar).createSessionVisible,"max-visible-sessions":3,"selected-session-id":unref(selection).selectedSessionId,"selection-archived":unref(selection).isArchived,toolbar:emptyToolbar.value},null,8,["archive","create-attention","create-visible","selected-session-id","selection-archived","toolbar"])]),createBaseVNode("div",_hoisted_6$1,[unref(emptyChatHintText)?(openBlock(),createElementBlock("div",_hoisted_7$1,toDisplayString(unref(emptyChatHintText)),1)):createCommentVNode("",true)]),_cache[3]||(_cache[3]=createBaseVNode("div",{class:"studio-ai-sessions__empty-thinking studio-ai-sessions__empty-thinking--empty","aria-hidden":"true"},[createBaseVNode("span",{class:"studio-ai-sessions__empty-thinking-mark"}),createBaseVNode("span",null,"Thinking...")],-1)),_cache[4]||(_cache[4]=createBaseVNode("div",{class:"studio-ai-sessions__empty-runtime-status"},null,-1)),_cache[5]||(_cache[5]=createBaseVNode("div",{class:"studio-ai-sessions__empty-composer"},null,-1))]),createBaseVNode("section",_hoisted_8$1,[unref(dashboardProjectActive)?(openBlock(),createElementBlock("div",_hoisted_9,[renderSlot(_ctx.$slots,"dashboard",{dashboardContext:unref(emptyDashboardContext)},void 0,true)])):(openBlock(),createElementBlock("div",_hoisted_10,[createBaseVNode("div",_hoisted_11,[createBaseVNode("p",_hoisted_12,toDisplayString(unref(emptyPreviewTitleText)),1),unref(emptyPreviewDetailText)?(openBlock(),createElementBlock("p",_hoisted_13,toDisplayString(unref(emptyPreviewDetailText)),1)):createCommentVNode("",true),unref(emptyStateInitialLoading)?(openBlock(),createElementBlock("div",_hoisted_14,[createVNode(VSkeletonLoader,{"aria-label":unref(emptyStateStatusText),class:"studio-ai-sessions__preview-empty-skeleton",type:"button"},null,8,["aria-label"])])):unref(toolbar).createSessionVisible?(openBlock(),createBlock(Vibe64CreateSessionButton,{key:2,"aria-label":"Create session","button-class":"studio-ai-sessions__preview-create-button","icon-only":false,label:"Create session","menu-location":"bottom center",toolbar:emptyToolbar.value},null,8,["toolbar"])):createCommentVNode("",true)])]))])],10,_hoisted_3$1)):createCommentVNode("",true),withDirectives(createBaseVNode("div",{class:"studio-ai-sessions__runtime-stack","aria-hidden":unref(selectedSessionArchiving)?"true":void 0,inert:unref(selectedSessionArchiving)},[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(runtimeHostSessionIds),runtimeSessionId=>{return withDirectives((openBlock(),createBlock(Vibe64SessionRuntimeHost,{key:runtimeSessionId,active:runtimeSessionId===unref(selection).selectedSessionId,"session-data":unref(sessionData),"session-id":runtimeSessionId,"chat-collapsed":unref(chatCollapsed),"github-actor-teleport-target":runtimeSessionId===unref(selection).selectedSessionId?props.githubActorTeleportTarget:"","project-context":props.projectContext,"preview-toolbar-teleport-target":runtimeSessionId===unref(selection).selectedSessionId?props.previewToolbarTeleportTarget:"","prompt-hint-policy":unref(promptHintPolicy),"project-pane":unref(projectPane),"toolbar-sessions":unref(toolbar).sessions,onBusyChange:unref(setRuntimeBusy),onChatAttention:unref(emitChatAttention),onExecutionAttention:_cache[2]||(_cache[2]=$event=>emit("execution-attention",$event)),onPageErrorChange:unref(setRuntimePageError),onSourceOperationsSuspensionChange:unref(setRuntimeSourceOperationsSuspended),onWorkStateChange:unref(setRuntimeWorkState),onToolbarControlsReady:unref(setRuntimeToolbarControls),onProjectAttention:unref(emitProjectAttention)},{dashboard:withCtx(dashboardSlotProps=>[renderSlot(_ctx.$slots,"dashboard",{dashboardContext:(dashboardSlotProps==null?void 0:dashboardSlotProps.dashboardContext)||{}},void 0,true)]),_:3},8,["active","session-data","session-id","chat-collapsed","github-actor-teleport-target","project-context","preview-toolbar-teleport-target","prompt-hint-policy","project-pane","toolbar-sessions","onBusyChange","onChatAttention","onPageErrorChange","onSourceOperationsSuspensionChange","onWorkStateChange","onToolbarControlsReady","onProjectAttention"])),[[vShow,runtimeSessionId===unref(selection).selectedSessionId]])}),128))],8,_hoisted_15),[[vShow,!unref(emptyLayoutVisible)&&unref(runtimeHostSessionIds).length>0]])]),_:3},8,["class","onPointermove","onPointerleave"])}}};const Vibe64SessionPanel=_export_sfc(_sfc_main$1,[["__scopeId","data-v-5e859709"]]);const DRAWER_HIDDEN_CLASS="studio-shell-drawer-hidden";function setDrawerToggleHidden(hidden){if(typeof document==="undefined"){return}document.body.classList.toggle(DRAWER_HIDDEN_CLASS,Boolean(hidden))}function useStudioShellDrawer({hidden}){const{drawerDefaultOpen,setDrawerDefaultOpen,setDrawerOpen}=useShellLayoutState();const originalDrawerDefaultOpen=drawerDefaultOpen.value;watchEffect(()=>{const drawerHidden=Boolean(hidden);setDrawerToggleHidden(drawerHidden);if(drawerHidden){setDrawerDefaultOpen(false);setDrawerOpen(false)}});onBeforeUnmount(()=>{setDrawerToggleHidden(false);setDrawerDefaultOpen(originalDrawerDefaultOpen);setDrawerOpen(originalDrawerDefaultOpen)})}function useVibe64ProjectsResource({projectSlug="",fallbackLoadError="Projects could not load.",requestRecoveryLabel="Projects"}={}){const slug=computed(()=>normalizeText(readRefOrGetterValue(projectSlug)));const selectionPath=computed(()=>slug.value?scopedDevelopmentApiUrl(PROJECT_SELECTION_ENDPOINT,slug.value,{scopeGlobalPaths:true}):PROJECT_SELECTION_ENDPOINT);const resource=useEndpointResource({fallbackLoadError,path:selectionPath,queryKey:computed(()=>projectSelectionGateQueryKey({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,projectSlug:slug.value,scopeSelectionToCurrentProject:Boolean(slug.value),surfaceId:VIBE64_SURFACE_ID})),refreshOnPull:true,requestRecoveryLabel});const loadError=computed(()=>vibe64ResourceResponseError(resource.data.value,fallbackLoadError)||resource.loadError.value);const currentProject=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.currentProject)||null});const projectsRoot=computed(()=>{var _a;return String(((_a=resource.data.value)==null?void 0:_a.projectsRoot)||"")});const targetRoot=computed(()=>{var _a;return String(((_a=resource.data.value)==null?void 0:_a.targetRoot)||"")});const projects=computed(()=>{var _a;return Array.isArray((_a=resource.data.value)==null?void 0:_a.projects)?resource.data.value.projects:[]});const selfTargetAutoSelectProjectRepro=computed(()=>{var _a,_b;const config=((_b=(_a=resource.data.value)==null?void 0:_a.repro)==null?void 0:_b.selfTargetAutoSelectProject)||{};return config&&typeof config==="object"&&!Array.isArray(config)?config:{}});return{currentProject,data:resource.data,isFetching:resource.isFetching,isInitialLoading:resource.isInitialLoading,isLoading:resource.isLoading,isRefetching:resource.isRefetching,loadError,projects,projectsRoot,reload:resource.reload,resource,selfTargetAutoSelectProjectRepro,targetRoot}}function normalizeText(value2=""){return String(value2||"").trim()}const HOME_SHELL_CLASS="studio-home-shell-active";const SELF_TARGET_AUTO_SELECT_DELAY_MS=3e3;const PREVIEW_TOOLBAR_HOST_ID="studio-home-shell-preview-toolbar";const PROJECT_RUNTIME_CLOSE_API_PATH="/api/vibe64/project-runtime/close";const PROJECT_RUNTIME_OPEN_API_PATH="/api/vibe64/project-runtime/open";const projectTabs=Object.freeze([{id:"preview",label:"Preview"},{id:"dashboard",label:"Dashboard"}]);function useVibe64AppPage(){const route=useRoute();const router=useRouter();const pageTitle=ref("");const pageError=ref("");const chatCollapsed=ref(false);const mobilePaneLayout=ref(false);const projectSelectionReady=ref(false);const projectPaneNavigationReadySlug=ref("");const lastDashboardRoutePath=ref("");let mobilePaneMediaQuery=null;const projectSlug=computed(()=>projectSlugFromRoute(route));const projectSelection=useVibe64ProjectsResource({fallbackLoadError:"Project selection could not load.",projectSlug,requestRecoveryLabel:"Project selection"});const closeProjectRuntimeCommand=useCommand({access:"never",apiSuffix:"/vibe64/project-runtime/close",buildCommandOptions:(_payload,{context})=>({method:"POST",path:scopedDevelopmentApiUrl(PROJECT_RUNTIME_CLOSE_API_PATH,context==null?void 0:context.projectSlug)}),buildRawPayload:(_model,{context})=>({reason:String((context==null?void 0:context.reason)||"project-close")}),clearOnRouteChange:false,fallbackRunError:"Project runtime could not close.",messages:{error:"Project runtime could not close."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.project-runtime.close",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const openProjectRuntimeCommand=useCommand({access:"never",apiSuffix:"/vibe64/project-runtime/open",buildCommandOptions:(_payload,{context})=>({method:"POST",path:scopedDevelopmentApiUrl(PROJECT_RUNTIME_OPEN_API_PATH,context==null?void 0:context.projectSlug)}),buildRawPayload:(_model,{context})=>({reason:String((context==null?void 0:context.reason)||"project-open")}),clearOnRouteChange:false,fallbackRunError:"Project runtime could not be marked open.",messages:{error:"Project runtime could not be marked open."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.project-runtime.open",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const projectLoadError=projectSelection.loadError;const projects=projectSelection.projects;const selfTargetAutoSelectProjectRepro=projectSelection.selfTargetAutoSelectProjectRepro;const targetRoot=computed(()=>String(projectSelection.targetRoot.value||"").trim());const targetFolderName=computed(()=>projectSlug.value||finalPathSegment(targetRoot.value));const developmentBasePath=computed(()=>projectAppPath(projectSlug.value));const dashboardBasePath=computed(()=>`${developmentBasePath.value}/dashboard`);const dashboardRouteActive=computed(()=>normalizedPath(route.path).startsWith(`${dashboardBasePath.value}/`));const projectPane=computed(()=>dashboardRouteActive.value?"dashboard":"preview");const sortedProjects=computed(()=>[...projects.value].sort((left,right)=>left.slug.localeCompare(right.slug)));const switcherProjects=computed(()=>openProjectSwitcherProjects(projects.value));const chatToggleIcon=computed(()=>{if(mobilePaneLayout.value){return chatCollapsed.value?mdiChevronLeft:mdiChevronRight}return chatCollapsed.value?mdiChevronRight:mdiChevronLeft});const chatToggleTitle=computed(()=>{if(mobilePaneLayout.value){return chatCollapsed.value?"Show chat":"Show project"}return chatCollapsed.value?"Show chat":"Collapse chat"});const mobileProjectAction=computed(()=>projectPane.value==="dashboard"?{ariaLabel:"Go to preview",label:"Preview",pane:"preview"}:{ariaLabel:"Go to dashboard",label:"Dashboard",pane:"dashboard"});const projectPaneNavigationVisible=computed(()=>projectPaneNavigationReady({selectionReady:projectSelectionReady.value,projectSlug:projectSlug.value,readyProjectSlug:projectPaneNavigationReadySlug.value}));const mobileProjectActionVisible=computed(()=>projectPaneNavigationVisible.value&&mobilePaneLayout.value&&chatCollapsed.value);const previewToolbarHostVisible=computed(()=>previewToolbarTargetVisible({chatCollapsed:chatCollapsed.value,mobilePaneLayout:mobilePaneLayout.value,projectPane:projectPane.value,projectPaneNavigationVisible:projectPaneNavigationVisible.value}));const previewToolbarTeleportTarget=computed(()=>previewToolbarHostVisible.value?`#${PREVIEW_TOOLBAR_HOST_ID}`:"");let selfTargetAutoSelectTimer=0;let selfTargetAutoSelectAttemptKey="";useStudioShellDrawer({hidden:true});useRealtimeEvent({enabled:computed(()=>Boolean(projectSlug.value)),event:VIBE64_PROJECT_CHANGED_EVENT,matches:({payload={}}={})=>projectRuntimeClosedPayloadMatches(payload,projectSlug.value),onEvent:({payload={}}={})=>{handleProjectRuntimeClosed(payload)}});watch(()=>route.path,path=>{if(normalizedPath(path)!==normalizedPath(developmentBasePath.value)){setPageTitle()}},{immediate:true});watch(projectSlug,slug=>{void openProjectRuntimeForSlug(slug)},{immediate:true});onMounted(()=>{var _a;setHomeShellActive(true);if(typeof window!=="undefined"&&typeof window.matchMedia==="function"){mobilePaneMediaQuery=window.matchMedia("(max-width: 980px)");syncMobilePaneLayout();if(typeof mobilePaneMediaQuery.addEventListener==="function"){mobilePaneMediaQuery.addEventListener("change",syncMobilePaneLayout)}else{(_a=mobilePaneMediaQuery.addListener)==null?void 0:_a.call(mobilePaneMediaQuery,syncMobilePaneLayout)}}});onBeforeUnmount(()=>{var _a;clearSelfTargetAutoSelectTimer();setHomeShellActive(false);if(typeof(mobilePaneMediaQuery==null?void 0:mobilePaneMediaQuery.removeEventListener)==="function"){mobilePaneMediaQuery.removeEventListener("change",syncMobilePaneLayout)}else{(_a=mobilePaneMediaQuery==null?void 0:mobilePaneMediaQuery.removeListener)==null?void 0:_a.call(mobilePaneMediaQuery,syncMobilePaneLayout)}mobilePaneMediaQuery=null});watch(()=>{var _a,_b,_c;return[projectSlug.value,projectSelection.isLoading.value?"loading":"ready",((_a=selfTargetAutoSelectProjectRepro.value)==null?void 0:_a.enabled)===true?"enabled":"disabled",((_b=selfTargetAutoSelectProjectRepro.value)==null?void 0:_b.selfTarget)===true?"self-target":"normal",((_c=selfTargetAutoSelectProjectRepro.value)==null?void 0:_c.projectSlug)||"",sortedProjects.value.map(project=>project.slug).join("\0")].join("|")},()=>{scheduleSelfTargetProjectAutoSelect()},{immediate:true});watch(()=>[dashboardBasePath.value,route.path].join("|"),()=>{if(dashboardRouteActive.value){lastDashboardRoutePath.value=normalizedPath(route.path)}},{immediate:true});return{chatCollapsed,chatToggleIcon,chatToggleTitle,closeProjectRuntimeForSlug,dashboardRouteActive,emitPageTitle,handleProjectSelectionError,handleProjectSelectionMissing,handleProjectSelectionReady,mdiChevronDown,mdiChevronRight,mobileProjectAction,mobileProjectActionVisible,openProject,pageError,pageTitle,previewToolbarHostId:PREVIEW_TOOLBAR_HOST_ID,previewToolbarHostVisible,previewToolbarTeleportTarget,projectLoadError,projectPane,projectPaneNavigationVisible,projectSlug,projectTabs,selectProjectPane,setChatCollapsed,showProjectPane,switcherProjects,targetFolderName};function setHomeShellActive(active){if(typeof document==="undefined"){return}document.body.classList.toggle(HOME_SHELL_CLASS,Boolean(active))}function setPageTitle(title=""){pageTitle.value=String(title||"").trim()}function emitPageTitle(title=""){setPageTitle(title)}function selectProjectPane(pane=""){if(mobilePaneLayout.value){setChatCollapsed(true)}if(pane==="dashboard"){void router.push(dashboardReturnPath({dashboardBasePath:dashboardBasePath.value,lastDashboardRoutePath:lastDashboardRoutePath.value}));return}void router.push(developmentBasePath.value)}function openProject(project={}){const slug=String(project.slug||"").trim();if(!slug||slug===projectSlug.value){return}void router.push(projectAppPath(slug))}async function closeProjectRuntimeForSlug(slug="",{reason="project-close"}={}){const project=String(slug||"").trim();if(!project){return null}const startedAtMs=Date.now();vibe64SessionDebugLog("client.projectRuntime.close.start",{projectSlug:project,reason});try{const result=await closeProjectRuntimeCommand.run({projectSlug:project,reason});vibe64SessionDebugLog("client.projectRuntime.close.done",{durationMs:vibe64SessionDebugDurationMs(startedAtMs),ok:(result==null?void 0:result.ok)!==false,projectSlug:project,reason});return result}catch(error){vibe64SessionDebugLog("client.projectRuntime.close.error",{durationMs:vibe64SessionDebugDurationMs(startedAtMs),error:vibe64SessionDebugError(error),projectSlug:project,reason});return null}}async function openProjectRuntimeForSlug(slug="",{reason="project-open"}={}){const project=String(slug||"").trim();if(!project){return null}try{return await openProjectRuntimeCommand.run({projectSlug:project,reason})}catch(error){vibe64SessionDebugLog("client.projectRuntime.open.error",{error:vibe64SessionDebugError(error),projectSlug:project,reason});return null}}function handleProjectRuntimeClosed(payload={}){const closedSlug=String(payload.projectSlug||projectSlug.value||"").trim();pageError.value=String(payload.message||"Project is closed.");void router.push({path:"/app/manage/projects",query:{projectClosed:closedSlug}})}function scheduleSelfTargetProjectAutoSelect(){clearSelfTargetAutoSelectTimer();const targetProject=selfTargetAutoSelectProjectTarget({currentSlug:projectSlug.value,loading:projectSelection.isLoading.value,projects:sortedProjects.value,repro:selfTargetAutoSelectProjectRepro.value});if(!targetProject){return}const targetSlug=String(targetProject.slug||"").trim();const attemptKey=`${projectSlug.value}->${targetSlug}`;if(selfTargetAutoSelectAttemptKey===attemptKey||typeof globalThis.setTimeout!=="function"){return}selfTargetAutoSelectTimer=globalThis.setTimeout(()=>{selfTargetAutoSelectTimer=0;selfTargetAutoSelectAttemptKey=attemptKey;openProject(targetProject)},SELF_TARGET_AUTO_SELECT_DELAY_MS)}function clearSelfTargetAutoSelectTimer(){if(!selfTargetAutoSelectTimer||typeof globalThis.clearTimeout!=="function"){selfTargetAutoSelectTimer=0;return}globalThis.clearTimeout(selfTargetAutoSelectTimer);selfTargetAutoSelectTimer=0}function showProjectPane(){if(mobilePaneLayout.value){setChatCollapsed(true)}}function setChatCollapsed(collapsed=false){chatCollapsed.value=Boolean(collapsed)}function syncMobilePaneLayout(){mobilePaneLayout.value=Boolean(mobilePaneMediaQuery==null?void 0:mobilePaneMediaQuery.matches)}function handleProjectSelectionReady(selection={}){pageError.value="";const selectedSlug=selectedProjectSlug(selection);setProjectPaneNavigationReady(Boolean(selectedSlug&&selectedSlug===projectSlug.value));emitPageTitle()}function handleProjectSelectionMissing(){pageError.value="";setProjectPaneNavigationReady(false);emitPageTitle("Choose project")}function handleProjectSelectionError(error){pageError.value=String(error||"");setProjectPaneNavigationReady(false);emitPageTitle()}function setProjectPaneNavigationReady(ready=false){projectSelectionReady.value=Boolean(ready);projectPaneNavigationReadySlug.value=ready?projectSlug.value:""}}function projectRuntimeClosedPayloadMatches(payload={},currentSlug=""){var _a;const projectSlug=String(currentSlug||"").trim();if(!projectSlug||String((payload==null?void 0:payload.projectSlug)||"").trim()!==projectSlug){return false}return String((payload==null?void 0:payload.action)||"").trim()==="runtime-closed"&&((_a=payload==null?void 0:payload.runtime)==null?void 0:_a.open)===false}function openProjectSwitcherProjects(projects=[]){if(!Array.isArray(projects)){return[]}return projects.filter(project=>{var _a;return((_a=project==null?void 0:project.runtime)==null?void 0:_a.open)===true}).sort((left,right)=>String((left==null?void 0:left.slug)||"").localeCompare(String((right==null?void 0:right.slug)||"")))}function selfTargetAutoSelectProjectTarget({currentSlug="",loading=false,projects=[],repro={}}={}){const targetSlug=String((repro==null?void 0:repro.projectSlug)||"").trim();if((repro==null?void 0:repro.enabled)!==true||(repro==null?void 0:repro.selfTarget)!==true||!targetSlug||loading||String(currentSlug||"").trim()===targetSlug||!Array.isArray(projects)){return null}return projects.find(project=>(project==null?void 0:project.slug)===targetSlug)||null}function previewToolbarTargetVisible({chatCollapsed=false,mobilePaneLayout=false,projectPane="",projectPaneNavigationVisible=false}={}){return Boolean(projectPaneNavigationVisible&&projectPane==="preview"&&(!mobilePaneLayout||chatCollapsed))}function dashboardReturnPath({dashboardBasePath="",lastDashboardRoutePath=""}={}){const normalizedDashboardBasePath=normalizedPath(dashboardBasePath);const normalizedLastDashboardRoutePath=normalizedPath(lastDashboardRoutePath);const defaultDashboardPath=`${normalizedDashboardBasePath}/env`;if(normalizedLastDashboardRoutePath&&(normalizedLastDashboardRoutePath===normalizedDashboardBasePath||normalizedLastDashboardRoutePath.startsWith(`${normalizedDashboardBasePath}/`))){return normalizedLastDashboardRoutePath===normalizedDashboardBasePath?defaultDashboardPath:normalizedLastDashboardRoutePath}return defaultDashboardPath}function projectPaneNavigationReady({selectionReady=false,projectSlug="",readyProjectSlug=""}={}){const currentSlug=String(projectSlug||"").trim();return Boolean(selectionReady&&currentSlug&&String(readyProjectSlug||"").trim()===currentSlug)}function selectedProjectSlug(selection={}){const currentProject=(selection==null?void 0:selection.currentProject)&&typeof selection.currentProject==="object"&&!Array.isArray(selection.currentProject)?selection.currentProject:{};return String(currentProject.slug||(selection==null?void 0:selection.projectSlug)||(selection==null?void 0:selection.slug)||"").trim()}function finalPathSegment(pathValue=""){const normalizedPath2=String(pathValue||"").trim().replace(/[\\/]+$/u,"");if(!normalizedPath2){return""}return normalizedPath2.split(/[\\/]+/u).filter(Boolean).at(-1)||""}function normalizedPath(pathValue=""){const path=String(pathValue||"").trim();if(!path||path==="/"){return path||"/"}return path.replace(/\/+$/u,"")}const _hoisted_1={class:"studio-home-shell-title-area"};const _hoisted_2={class:"studio-home-shell-project-controls"};const _hoisted_3={key:0,class:"studio-home-shell-project-tabs studio-home-shell-project-tabs--desktop",role:"tablist","aria-label":"Project"};const _hoisted_4=["aria-selected","onClick"];const _hoisted_5=["id"];const _hoisted_6=["aria-label"];const _hoisted_7={class:"generated-ui-screen generated-ui-screen--studio studio-screen d-flex flex-column ga-3"};const _hoisted_8={class:"studio-screen__gate-scroll"};const githubActorHostId="studio-home-shell-github-actor";const _sfc_main={__name:"[slug]",setup(__props){const githubActorTeleportTarget=`#${githubActorHostId}`;const{chatCollapsed,chatToggleIcon,chatToggleTitle,dashboardRouteActive,emitPageTitle,handleProjectSelectionError,handleProjectSelectionMissing,handleProjectSelectionReady,mdiChevronDown:mdiChevronDown2,mdiChevronRight:mdiChevronRight2,mobileProjectAction,mobileProjectActionVisible,openProject,pageError,previewToolbarHostId,previewToolbarHostVisible,previewToolbarTeleportTarget,projectLoadError,projectPane,projectPaneNavigationVisible,projectSlug,projectTabs:projectTabs2,selectProjectPane,setChatCollapsed,showProjectPane,switcherProjects,targetFolderName}=useVibe64AppPage();return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout,null,{"top-left":withCtx(()=>[createBaseVNode("div",{class:normalizeClass(["studio-home-shell-heading",{"studio-home-shell-heading--chat-collapsed":unref(chatCollapsed)}])},[createBaseVNode("div",_hoisted_1,[createVNode(VMenu,{location:"bottom start"},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps({class:"studio-home-shell-project-selector",variant:"text"},menuProps),{default:withCtx(()=>[createBaseVNode("span",null,toDisplayString(unref(targetFolderName)||"Project"),1),createVNode(VIcon,{icon:unref(mdiChevronDown2),size:"18"},null,8,["icon"])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{density:"compact","min-width":"240"},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(switcherProjects),project=>{return openBlock(),createBlock(VListItem,{key:project.slug,active:project.slug===unref(projectSlug),title:project.slug,subtitle:project.projectRoot,onClick:$event=>unref(openProject)(project)},null,8,["active","title","subtitle","onClick"])}),128)),unref(switcherProjects).length===0?(openBlock(),createBlock(VListItem,{key:0,subtitle:unref(projectLoadError)||"No open projects found.",title:"Projects"},null,8,["subtitle"])):createCommentVNode("",true)]),_:1})]),_:1}),createBaseVNode("div",{id:githubActorHostId,class:"studio-home-shell-github-actor-host"})]),createBaseVNode("div",_hoisted_2,[createVNode(VBtn,{class:"studio-home-shell-chat-toggle",density:"comfortable",icon:unref(chatToggleIcon),size:"small",title:unref(chatToggleTitle),type:"button",variant:"tonal","aria-label":unref(chatToggleTitle),onClick:_cache[0]||(_cache[0]=$event=>unref(setChatCollapsed)(!unref(chatCollapsed)))},null,8,["icon","title","aria-label"]),unref(projectPaneNavigationVisible)?(openBlock(),createElementBlock("div",_hoisted_3,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(projectTabs2),tab=>{return openBlock(),createElementBlock("button",{key:tab.id,class:normalizeClass(["studio-home-shell-project-tab",{"studio-home-shell-project-tab--active":unref(projectPane)===tab.id}]),role:"tab",type:"button","aria-selected":unref(projectPane)===tab.id?"true":"false",onClick:$event=>unref(selectProjectPane)(tab.id)},toDisplayString(tab.label),11,_hoisted_4)}),128))])):createCommentVNode("",true),unref(previewToolbarHostVisible)?(openBlock(),createElementBlock("div",{key:1,id:unref(previewToolbarHostId),class:"studio-home-shell-preview-toolbar-host"},null,8,_hoisted_5)):createCommentVNode("",true),unref(mobileProjectActionVisible)?(openBlock(),createElementBlock("button",{key:2,class:"studio-home-shell-project-mobile-action",type:"button","aria-label":unref(mobileProjectAction).ariaLabel,onClick:_cache[1]||(_cache[1]=$event=>unref(selectProjectPane)(unref(mobileProjectAction).pane))},[createTextVNode(toDisplayString(unref(mobileProjectAction).label)+" ",1),createVNode(VIcon,{icon:unref(mdiChevronRight2),size:"15"},null,8,["icon"])],8,_hoisted_6)):createCommentVNode("",true)])],2)]),"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton)]),default:withCtx(()=>[createBaseVNode("section",_hoisted_7,[unref(pageError)?(openBlock(),createBlock(VAlert,{key:0,type:"error",variant:"tonal",border:"start",class:"studio-screen__alert"},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pageError)),1)]),_:1})):createCommentVNode("",true),createBaseVNode("div",_hoisted_8,[(openBlock(),createBlock(ProjectSelectionGate,{key:unref(projectSlug),"scope-selection-to-current-project":"",onError:unref(handleProjectSelectionError),onMissing:unref(handleProjectSelectionMissing),onReady:unref(handleProjectSelectionReady)},{default:withCtx(projectSelectionSlotProps=>{var _a;return[createVNode(Vibe64SessionPanel,{"chat-collapsed":unref(chatCollapsed),"github-actor-teleport-target":githubActorTeleportTarget,"project-context":((_a=projectSelectionSlotProps==null?void 0:projectSelectionSlotProps.projectSelection)==null?void 0:_a.currentProject)||{},"preview-toolbar-teleport-target":unref(previewToolbarTeleportTarget),"project-pane":unref(projectPane),onTitleChange:unref(emitPageTitle),onChatAttention:_cache[2]||(_cache[2]=$event=>unref(setChatCollapsed)(false)),onProjectAttention:unref(showProjectPane)},{dashboard:withCtx(dashboardSlotProps=>[unref(dashboardRouteActive)?(openBlock(),createBlock(unref(RouterView),{key:0,"dashboard-context":(dashboardSlotProps==null?void 0:dashboardSlotProps.dashboardContext)||{}},null,8,["dashboard-context"])):createCommentVNode("",true)]),_:1},8,["chat-collapsed","project-context","preview-toolbar-teleport-target","project-pane","onTitleChange","onProjectAttention"])]}),_:1},8,["onError","onMissing","onReady"]))])])]),_:1})}}};if(typeof block0==="function")block0(_sfc_main);const _slug_=_export_sfc(_sfc_main,[["__scopeId","data-v-5df03216"]]);const _slug_$1=Object.freeze(Object.defineProperty({__proto__:null,default:_slug_},Symbol.toStringTag,{value:"Module"}));export{VIBE64_RESOURCE_RECOVERY_KEY as V,_slug_$1 as _,vibe64OutputTerminalWebSocketUrl as v};